mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-10 21:29:20 +00:00
fix: query issues
This commit is contained in:
@@ -1,12 +1,6 @@
|
|||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
|
|
||||||
import {
|
import { IdentitiesSchema, IdentityOrgMembershipsSchema, OrgMembershipRole, OrgRolesSchema } from "@app/db/schemas";
|
||||||
IdentitiesSchema,
|
|
||||||
IdentityAuthMethod,
|
|
||||||
IdentityOrgMembershipsSchema,
|
|
||||||
OrgMembershipRole,
|
|
||||||
OrgRolesSchema
|
|
||||||
} from "@app/db/schemas";
|
|
||||||
import { EventType } from "@app/ee/services/audit-log/audit-log-types";
|
import { EventType } from "@app/ee/services/audit-log/audit-log-types";
|
||||||
import { IDENTITIES } from "@app/lib/api-docs";
|
import { IDENTITIES } from "@app/lib/api-docs";
|
||||||
import { readLimit, writeLimit } from "@app/server/config/rateLimiter";
|
import { readLimit, writeLimit } from "@app/server/config/rateLimiter";
|
||||||
@@ -223,7 +217,7 @@ export const registerIdentityRouter = async (server: FastifyZodProvider) => {
|
|||||||
description: true
|
description: true
|
||||||
}).optional(),
|
}).optional(),
|
||||||
identity: IdentitiesSchema.pick({ name: true, id: true }).extend({
|
identity: IdentitiesSchema.pick({ name: true, id: true }).extend({
|
||||||
authMethods: z.array(z.nativeEnum(IdentityAuthMethod))
|
authMethods: z.array(z.string())
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
@@ -327,7 +321,9 @@ export const registerIdentityRouter = async (server: FastifyZodProvider) => {
|
|||||||
temporaryAccessEndTime: z.date().nullable().optional()
|
temporaryAccessEndTime: z.date().nullable().optional()
|
||||||
})
|
})
|
||||||
),
|
),
|
||||||
identity: IdentitiesSchema.pick({ name: true, id: true, authMethod: true }),
|
identity: IdentitiesSchema.pick({ name: true, id: true }).extend({
|
||||||
|
authMethods: z.array(z.string())
|
||||||
|
}),
|
||||||
project: SanitizedProjectSchema.pick({ name: true, id: true })
|
project: SanitizedProjectSchema.pick({ name: true, id: true })
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
|
|
||||||
import { IdentitiesSchema, IdentityAuthMethod, IdentityOrgMembershipsSchema, OrgRolesSchema } from "@app/db/schemas";
|
import { IdentitiesSchema, IdentityOrgMembershipsSchema, OrgRolesSchema } from "@app/db/schemas";
|
||||||
import { ORGANIZATIONS } from "@app/lib/api-docs";
|
import { ORGANIZATIONS } from "@app/lib/api-docs";
|
||||||
import { OrderByDirection } from "@app/lib/types";
|
import { OrderByDirection } from "@app/lib/types";
|
||||||
import { readLimit } from "@app/server/config/rateLimiter";
|
import { readLimit } from "@app/server/config/rateLimiter";
|
||||||
@@ -59,7 +59,7 @@ export const registerIdentityOrgRouter = async (server: FastifyZodProvider) => {
|
|||||||
description: true
|
description: true
|
||||||
}).optional(),
|
}).optional(),
|
||||||
identity: IdentitiesSchema.pick({ name: true, id: true }).extend({
|
identity: IdentitiesSchema.pick({ name: true, id: true }).extend({
|
||||||
authMethods: z.array(z.nativeEnum(IdentityAuthMethod))
|
authMethods: z.array(z.string())
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
).array(),
|
).array(),
|
||||||
|
|||||||
@@ -264,7 +264,9 @@ export const registerIdentityProjectRouter = async (server: FastifyZodProvider)
|
|||||||
temporaryAccessEndTime: z.date().nullable().optional()
|
temporaryAccessEndTime: z.date().nullable().optional()
|
||||||
})
|
})
|
||||||
),
|
),
|
||||||
identity: IdentitiesSchema.pick({ name: true, id: true, authMethod: true }),
|
identity: IdentitiesSchema.pick({ name: true, id: true }).extend({
|
||||||
|
authMethods: z.array(z.string())
|
||||||
|
}),
|
||||||
project: SanitizedProjectSchema.pick({ name: true, id: true })
|
project: SanitizedProjectSchema.pick({ name: true, id: true })
|
||||||
})
|
})
|
||||||
.array(),
|
.array(),
|
||||||
@@ -285,6 +287,7 @@ export const registerIdentityProjectRouter = async (server: FastifyZodProvider)
|
|||||||
orderDirection: req.query.orderDirection,
|
orderDirection: req.query.orderDirection,
|
||||||
search: req.query.search
|
search: req.query.search
|
||||||
});
|
});
|
||||||
|
|
||||||
return { identityMemberships, totalCount };
|
return { identityMemberships, totalCount };
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,12 +1,24 @@
|
|||||||
import { Knex } from "knex";
|
import { Knex } from "knex";
|
||||||
|
|
||||||
import { TDbClient } from "@app/db";
|
import { TDbClient } from "@app/db";
|
||||||
import { TableName, TIdentities } from "@app/db/schemas";
|
import {
|
||||||
|
TableName,
|
||||||
|
TIdentities,
|
||||||
|
TIdentityAwsAuths,
|
||||||
|
TIdentityAzureAuths,
|
||||||
|
TIdentityGcpAuths,
|
||||||
|
TIdentityKubernetesAuths,
|
||||||
|
TIdentityOidcAuths,
|
||||||
|
TIdentityTokenAuths,
|
||||||
|
TIdentityUniversalAuths
|
||||||
|
} from "@app/db/schemas";
|
||||||
import { DatabaseError } from "@app/lib/errors";
|
import { DatabaseError } from "@app/lib/errors";
|
||||||
import { ormify, selectAllTableCols, sqlNestRelationships } from "@app/lib/knex";
|
import { ormify, selectAllTableCols, sqlNestRelationships } from "@app/lib/knex";
|
||||||
import { OrderByDirection } from "@app/lib/types";
|
import { OrderByDirection } from "@app/lib/types";
|
||||||
import { ProjectIdentityOrderBy, TListProjectIdentityDTO } from "@app/services/identity-project/identity-project-types";
|
import { ProjectIdentityOrderBy, TListProjectIdentityDTO } from "@app/services/identity-project/identity-project-types";
|
||||||
|
|
||||||
|
import { buildAuthMethods } from "../identity/identity-fns";
|
||||||
|
|
||||||
export type TIdentityProjectDALFactory = ReturnType<typeof identityProjectDALFactory>;
|
export type TIdentityProjectDALFactory = ReturnType<typeof identityProjectDALFactory>;
|
||||||
|
|
||||||
export const identityProjectDALFactory = (db: TDbClient) => {
|
export const identityProjectDALFactory = (db: TDbClient) => {
|
||||||
@@ -33,11 +45,48 @@ export const identityProjectDALFactory = (db: TDbClient) => {
|
|||||||
`${TableName.IdentityProjectMembership}.id`,
|
`${TableName.IdentityProjectMembership}.id`,
|
||||||
`${TableName.IdentityProjectAdditionalPrivilege}.projectMembershipId`
|
`${TableName.IdentityProjectAdditionalPrivilege}.projectMembershipId`
|
||||||
)
|
)
|
||||||
|
|
||||||
|
.leftJoin(
|
||||||
|
TableName.IdentityUniversalAuth,
|
||||||
|
`${TableName.IdentityProjectMembership}.identityId`,
|
||||||
|
`${TableName.IdentityUniversalAuth}.identityId`
|
||||||
|
)
|
||||||
|
.leftJoin(
|
||||||
|
TableName.IdentityGcpAuth,
|
||||||
|
`${TableName.IdentityProjectMembership}.identityId`,
|
||||||
|
`${TableName.IdentityGcpAuth}.identityId`
|
||||||
|
)
|
||||||
|
.leftJoin(
|
||||||
|
TableName.IdentityAwsAuth,
|
||||||
|
`${TableName.IdentityProjectMembership}.identityId`,
|
||||||
|
`${TableName.IdentityAwsAuth}.identityId`
|
||||||
|
)
|
||||||
|
.leftJoin(
|
||||||
|
TableName.IdentityKubernetesAuth,
|
||||||
|
`${TableName.IdentityProjectMembership}.identityId`,
|
||||||
|
`${TableName.IdentityKubernetesAuth}.identityId`
|
||||||
|
)
|
||||||
|
.leftJoin(
|
||||||
|
TableName.IdentityOidcAuth,
|
||||||
|
`${TableName.IdentityProjectMembership}.identityId`,
|
||||||
|
`${TableName.IdentityOidcAuth}.identityId`
|
||||||
|
)
|
||||||
|
.leftJoin(
|
||||||
|
TableName.IdentityAzureAuth,
|
||||||
|
`${TableName.IdentityProjectMembership}.identityId`,
|
||||||
|
`${TableName.IdentityAzureAuth}.identityId`
|
||||||
|
)
|
||||||
|
.leftJoin(
|
||||||
|
TableName.IdentityTokenAuth,
|
||||||
|
`${TableName.IdentityProjectMembership}.identityId`,
|
||||||
|
`${TableName.IdentityTokenAuth}.identityId`
|
||||||
|
)
|
||||||
|
|
||||||
.select(
|
.select(
|
||||||
db.ref("id").withSchema(TableName.IdentityProjectMembership),
|
db.ref("id").withSchema(TableName.IdentityProjectMembership),
|
||||||
db.ref("createdAt").withSchema(TableName.IdentityProjectMembership),
|
db.ref("createdAt").withSchema(TableName.IdentityProjectMembership),
|
||||||
db.ref("updatedAt").withSchema(TableName.IdentityProjectMembership),
|
db.ref("updatedAt").withSchema(TableName.IdentityProjectMembership),
|
||||||
db.ref("authMethod").as("identityAuthMethod").withSchema(TableName.Identity),
|
|
||||||
db.ref("id").as("identityId").withSchema(TableName.Identity),
|
db.ref("id").as("identityId").withSchema(TableName.Identity),
|
||||||
db.ref("name").as("identityName").withSchema(TableName.Identity),
|
db.ref("name").as("identityName").withSchema(TableName.Identity),
|
||||||
db.ref("id").withSchema(TableName.IdentityProjectMembership),
|
db.ref("id").withSchema(TableName.IdentityProjectMembership),
|
||||||
@@ -52,12 +101,33 @@ export const identityProjectDALFactory = (db: TDbClient) => {
|
|||||||
db.ref("temporaryAccessStartTime").withSchema(TableName.IdentityProjectMembershipRole),
|
db.ref("temporaryAccessStartTime").withSchema(TableName.IdentityProjectMembershipRole),
|
||||||
db.ref("temporaryAccessEndTime").withSchema(TableName.IdentityProjectMembershipRole),
|
db.ref("temporaryAccessEndTime").withSchema(TableName.IdentityProjectMembershipRole),
|
||||||
db.ref("projectId").withSchema(TableName.IdentityProjectMembership),
|
db.ref("projectId").withSchema(TableName.IdentityProjectMembership),
|
||||||
db.ref("name").as("projectName").withSchema(TableName.Project)
|
db.ref("name").as("projectName").withSchema(TableName.Project),
|
||||||
|
db.ref("id").as("uaId").withSchema(TableName.IdentityUniversalAuth),
|
||||||
|
db.ref("id").as("gcpId").withSchema(TableName.IdentityGcpAuth),
|
||||||
|
db.ref("id").as("awsId").withSchema(TableName.IdentityAwsAuth),
|
||||||
|
db.ref("id").as("kubernetesId").withSchema(TableName.IdentityKubernetesAuth),
|
||||||
|
db.ref("id").as("oidcId").withSchema(TableName.IdentityOidcAuth),
|
||||||
|
db.ref("id").as("azureId").withSchema(TableName.IdentityAzureAuth),
|
||||||
|
db.ref("id").as("tokenId").withSchema(TableName.IdentityTokenAuth)
|
||||||
);
|
);
|
||||||
|
|
||||||
const members = sqlNestRelationships({
|
const members = sqlNestRelationships({
|
||||||
data: docs,
|
data: docs,
|
||||||
parentMapper: ({ identityName, identityAuthMethod, id, createdAt, updatedAt, projectId, projectName }) => ({
|
parentMapper: ({
|
||||||
|
identityName,
|
||||||
|
uaId,
|
||||||
|
awsId,
|
||||||
|
gcpId,
|
||||||
|
kubernetesId,
|
||||||
|
oidcId,
|
||||||
|
azureId,
|
||||||
|
tokenId,
|
||||||
|
id,
|
||||||
|
createdAt,
|
||||||
|
updatedAt,
|
||||||
|
projectId,
|
||||||
|
projectName
|
||||||
|
}) => ({
|
||||||
id,
|
id,
|
||||||
identityId,
|
identityId,
|
||||||
createdAt,
|
createdAt,
|
||||||
@@ -65,7 +135,15 @@ export const identityProjectDALFactory = (db: TDbClient) => {
|
|||||||
identity: {
|
identity: {
|
||||||
id: identityId,
|
id: identityId,
|
||||||
name: identityName,
|
name: identityName,
|
||||||
authMethod: identityAuthMethod
|
authMethods: buildAuthMethods({
|
||||||
|
uaId,
|
||||||
|
awsId,
|
||||||
|
gcpId,
|
||||||
|
kubernetesId,
|
||||||
|
oidcId,
|
||||||
|
azureId,
|
||||||
|
tokenId
|
||||||
|
})
|
||||||
},
|
},
|
||||||
project: {
|
project: {
|
||||||
id: projectId,
|
id: projectId,
|
||||||
@@ -168,6 +246,43 @@ export const identityProjectDALFactory = (db: TDbClient) => {
|
|||||||
`${TableName.IdentityProjectMembership}.id`,
|
`${TableName.IdentityProjectMembership}.id`,
|
||||||
`${TableName.IdentityProjectAdditionalPrivilege}.projectMembershipId`
|
`${TableName.IdentityProjectAdditionalPrivilege}.projectMembershipId`
|
||||||
)
|
)
|
||||||
|
|
||||||
|
.leftJoin<TIdentityUniversalAuths>(
|
||||||
|
TableName.IdentityUniversalAuth,
|
||||||
|
`${TableName.Identity}.id`,
|
||||||
|
`${TableName.IdentityUniversalAuth}.identityId`
|
||||||
|
)
|
||||||
|
.leftJoin<TIdentityGcpAuths>(
|
||||||
|
TableName.IdentityGcpAuth,
|
||||||
|
`${TableName.Identity}.id`,
|
||||||
|
`${TableName.IdentityGcpAuth}.identityId`
|
||||||
|
)
|
||||||
|
.leftJoin<TIdentityAwsAuths>(
|
||||||
|
TableName.IdentityAwsAuth,
|
||||||
|
`${TableName.Identity}.id`,
|
||||||
|
`${TableName.IdentityAwsAuth}.identityId`
|
||||||
|
)
|
||||||
|
.leftJoin<TIdentityKubernetesAuths>(
|
||||||
|
TableName.IdentityKubernetesAuth,
|
||||||
|
`${TableName.Identity}.id`,
|
||||||
|
`${TableName.IdentityKubernetesAuth}.identityId`
|
||||||
|
)
|
||||||
|
.leftJoin<TIdentityOidcAuths>(
|
||||||
|
TableName.IdentityOidcAuth,
|
||||||
|
`${TableName.Identity}.id`,
|
||||||
|
`${TableName.IdentityOidcAuth}.identityId`
|
||||||
|
)
|
||||||
|
.leftJoin<TIdentityAzureAuths>(
|
||||||
|
TableName.IdentityAzureAuth,
|
||||||
|
`${TableName.Identity}.id`,
|
||||||
|
`${TableName.IdentityAzureAuth}.identityId`
|
||||||
|
)
|
||||||
|
.leftJoin<TIdentityTokenAuths>(
|
||||||
|
TableName.IdentityTokenAuth,
|
||||||
|
`${TableName.Identity}.id`,
|
||||||
|
`${TableName.IdentityTokenAuth}.identityId`
|
||||||
|
)
|
||||||
|
|
||||||
.select(
|
.select(
|
||||||
db.ref("id").withSchema(TableName.IdentityProjectMembership),
|
db.ref("id").withSchema(TableName.IdentityProjectMembership),
|
||||||
db.ref("createdAt").withSchema(TableName.IdentityProjectMembership),
|
db.ref("createdAt").withSchema(TableName.IdentityProjectMembership),
|
||||||
@@ -186,7 +301,14 @@ export const identityProjectDALFactory = (db: TDbClient) => {
|
|||||||
db.ref("temporaryRange").withSchema(TableName.IdentityProjectMembershipRole),
|
db.ref("temporaryRange").withSchema(TableName.IdentityProjectMembershipRole),
|
||||||
db.ref("temporaryAccessStartTime").withSchema(TableName.IdentityProjectMembershipRole),
|
db.ref("temporaryAccessStartTime").withSchema(TableName.IdentityProjectMembershipRole),
|
||||||
db.ref("temporaryAccessEndTime").withSchema(TableName.IdentityProjectMembershipRole),
|
db.ref("temporaryAccessEndTime").withSchema(TableName.IdentityProjectMembershipRole),
|
||||||
db.ref("name").as("projectName").withSchema(TableName.Project)
|
db.ref("name").as("projectName").withSchema(TableName.Project),
|
||||||
|
db.ref("id").as("uaId").withSchema(TableName.IdentityUniversalAuth),
|
||||||
|
db.ref("id").as("gcpId").withSchema(TableName.IdentityGcpAuth),
|
||||||
|
db.ref("id").as("awsId").withSchema(TableName.IdentityAwsAuth),
|
||||||
|
db.ref("id").as("kubernetesId").withSchema(TableName.IdentityKubernetesAuth),
|
||||||
|
db.ref("id").as("oidcId").withSchema(TableName.IdentityOidcAuth),
|
||||||
|
db.ref("id").as("azureId").withSchema(TableName.IdentityAzureAuth),
|
||||||
|
db.ref("id").as("tokenId").withSchema(TableName.IdentityTokenAuth)
|
||||||
);
|
);
|
||||||
|
|
||||||
// TODO: scott - joins seem to reorder identities so need to order again, for the sake of urgency will optimize at a later point
|
// TODO: scott - joins seem to reorder identities so need to order again, for the sake of urgency will optimize at a later point
|
||||||
@@ -204,7 +326,21 @@ export const identityProjectDALFactory = (db: TDbClient) => {
|
|||||||
|
|
||||||
const members = sqlNestRelationships({
|
const members = sqlNestRelationships({
|
||||||
data: docs,
|
data: docs,
|
||||||
parentMapper: ({ identityId, identityName, identityAuthMethod, id, createdAt, updatedAt, projectName }) => ({
|
parentMapper: ({
|
||||||
|
identityId,
|
||||||
|
identityName,
|
||||||
|
uaId,
|
||||||
|
awsId,
|
||||||
|
gcpId,
|
||||||
|
kubernetesId,
|
||||||
|
oidcId,
|
||||||
|
azureId,
|
||||||
|
tokenId,
|
||||||
|
id,
|
||||||
|
createdAt,
|
||||||
|
updatedAt,
|
||||||
|
projectName
|
||||||
|
}) => ({
|
||||||
id,
|
id,
|
||||||
identityId,
|
identityId,
|
||||||
createdAt,
|
createdAt,
|
||||||
@@ -212,7 +348,15 @@ export const identityProjectDALFactory = (db: TDbClient) => {
|
|||||||
identity: {
|
identity: {
|
||||||
id: identityId,
|
id: identityId,
|
||||||
name: identityName,
|
name: identityName,
|
||||||
authMethod: identityAuthMethod
|
authMethods: buildAuthMethods({
|
||||||
|
uaId,
|
||||||
|
awsId,
|
||||||
|
gcpId,
|
||||||
|
kubernetesId,
|
||||||
|
oidcId,
|
||||||
|
azureId,
|
||||||
|
tokenId
|
||||||
|
})
|
||||||
},
|
},
|
||||||
project: {
|
project: {
|
||||||
id: projectId,
|
id: projectId,
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
import { IdentityAuthMethod } from "@app/db/schemas";
|
||||||
|
|
||||||
|
export const buildAuthMethods = ({
|
||||||
|
uaId,
|
||||||
|
gcpId,
|
||||||
|
awsId,
|
||||||
|
kubernetesId,
|
||||||
|
oidcId,
|
||||||
|
azureId,
|
||||||
|
tokenId
|
||||||
|
}: {
|
||||||
|
uaId?: string;
|
||||||
|
gcpId?: string;
|
||||||
|
awsId?: string;
|
||||||
|
kubernetesId?: string;
|
||||||
|
oidcId?: string;
|
||||||
|
azureId?: string;
|
||||||
|
tokenId?: string;
|
||||||
|
}) => {
|
||||||
|
return [
|
||||||
|
...(uaId ? [IdentityAuthMethod.UNIVERSAL_AUTH] : []),
|
||||||
|
...(gcpId ? [IdentityAuthMethod.GCP_AUTH] : []),
|
||||||
|
...(awsId ? [IdentityAuthMethod.AWS_AUTH] : []),
|
||||||
|
...(kubernetesId ? [IdentityAuthMethod.KUBERNETES_AUTH] : []),
|
||||||
|
...(oidcId ? [IdentityAuthMethod.OIDC_AUTH] : []),
|
||||||
|
...(azureId ? [IdentityAuthMethod.AZURE_AUTH] : []),
|
||||||
|
...(tokenId ? [IdentityAuthMethod.TOKEN_AUTH] : [])
|
||||||
|
].filter((authMethod) => authMethod);
|
||||||
|
};
|
||||||
@@ -2,7 +2,6 @@ import { Knex } from "knex";
|
|||||||
|
|
||||||
import { TDbClient } from "@app/db";
|
import { TDbClient } from "@app/db";
|
||||||
import {
|
import {
|
||||||
IdentityAuthMethod,
|
|
||||||
TableName,
|
TableName,
|
||||||
TIdentityAwsAuths,
|
TIdentityAwsAuths,
|
||||||
TIdentityAzureAuths,
|
TIdentityAzureAuths,
|
||||||
@@ -19,33 +18,7 @@ import { ormify, selectAllTableCols, sqlNestRelationships } from "@app/lib/knex"
|
|||||||
import { OrderByDirection } from "@app/lib/types";
|
import { OrderByDirection } from "@app/lib/types";
|
||||||
import { OrgIdentityOrderBy, TListOrgIdentitiesByOrgIdDTO } from "@app/services/identity/identity-types";
|
import { OrgIdentityOrderBy, TListOrgIdentitiesByOrgIdDTO } from "@app/services/identity/identity-types";
|
||||||
|
|
||||||
const buildAuthMethods = ({
|
import { buildAuthMethods } from "./identity-fns";
|
||||||
uaId,
|
|
||||||
gcpId,
|
|
||||||
awsId,
|
|
||||||
kubernetesId,
|
|
||||||
oidcId,
|
|
||||||
azureId,
|
|
||||||
tokenId
|
|
||||||
}: {
|
|
||||||
uaId?: string;
|
|
||||||
gcpId?: string;
|
|
||||||
awsId?: string;
|
|
||||||
kubernetesId?: string;
|
|
||||||
oidcId?: string;
|
|
||||||
azureId?: string;
|
|
||||||
tokenId?: string;
|
|
||||||
}) => {
|
|
||||||
return [
|
|
||||||
...(uaId ? [IdentityAuthMethod.UNIVERSAL_AUTH] : []),
|
|
||||||
...(gcpId ? [IdentityAuthMethod.GCP_AUTH] : []),
|
|
||||||
...(awsId ? [IdentityAuthMethod.AWS_AUTH] : []),
|
|
||||||
...(kubernetesId ? [IdentityAuthMethod.KUBERNETES_AUTH] : []),
|
|
||||||
...(oidcId ? [IdentityAuthMethod.OIDC_AUTH] : []),
|
|
||||||
...(azureId ? [IdentityAuthMethod.AZURE_AUTH] : []),
|
|
||||||
...(tokenId ? [IdentityAuthMethod.TOKEN_AUTH] : [])
|
|
||||||
].filter((authMethod) => authMethod);
|
|
||||||
};
|
|
||||||
|
|
||||||
export type TIdentityOrgDALFactory = ReturnType<typeof identityOrgDALFactory>;
|
export type TIdentityOrgDALFactory = ReturnType<typeof identityOrgDALFactory>;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user