From 65ce356dcade802eb8713809f0f4100aba273f48 Mon Sep 17 00:00:00 2001 From: Alon Peretz Date: Tue, 9 Jul 2024 00:01:53 +0300 Subject: [PATCH 1/2] fix(backoffice): increase profile timeout to 30s --- apps/backoffice-v2/src/domains/profiles/fetchers.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/backoffice-v2/src/domains/profiles/fetchers.ts b/apps/backoffice-v2/src/domains/profiles/fetchers.ts index 98dcaccb50..818a9e21b2 100644 --- a/apps/backoffice-v2/src/domains/profiles/fetchers.ts +++ b/apps/backoffice-v2/src/domains/profiles/fetchers.ts @@ -42,6 +42,7 @@ export const fetchIndividualsProfiles = async (params: { )}/api/v1/case-management/profiles/individuals?${queryParams}`, method: Method.GET, schema: IndividualsProfilesSchema, + timeout: 30_000, }); return handleZodError(error, individualsProfiles); From 2fefb9e8510de93e00d8430d9aca71c76fb2d806 Mon Sep 17 00:00:00 2001 From: Tomer Shvadron Date: Tue, 9 Jul 2024 13:00:07 +0300 Subject: [PATCH 2/2] Dev --> SB (#2506) * feat: setting isCaseOverviewEnabled default to false (#2505) * Improved database querying for individuals profiles (#2360) * refactor(workflows-service): now fetching workflows via endusers instead of using repository * refactor(workflows-service): improved performance on profiles query * refactor(workflow-service): renamed iterable name --------- Co-authored-by: Omri Levy <61207713+Omri-Levy@users.noreply.github.com> --- .../domains/workflow-definitions/fetchers.ts | 2 +- .../workflows-service/prisma/data-migrations | 2 +- .../migration.sql | 2 + .../workflows-service/prisma/schema.prisma | 1 + .../controllers/case-management.controller.ts | 123 +- .../workflow-runtime-data.repository.ts | 26 - .../src/workflow/workflow.service.ts | 12 - websites/docs/.astro/types.d.ts | 1019 ++++++++--------- 8 files changed, 586 insertions(+), 601 deletions(-) create mode 100644 services/workflows-service/prisma/migrations/20240709090531_enduser_id_index/migration.sql diff --git a/apps/backoffice-v2/src/domains/workflow-definitions/fetchers.ts b/apps/backoffice-v2/src/domains/workflow-definitions/fetchers.ts index 2980869098..d09e1d5b63 100644 --- a/apps/backoffice-v2/src/domains/workflow-definitions/fetchers.ts +++ b/apps/backoffice-v2/src/domains/workflow-definitions/fetchers.ts @@ -25,7 +25,7 @@ export const WorkflowDefinitionConfigSchema = z enableManualCreation: z.boolean().default(false), isManualCreation: z.boolean().default(false), isAssociatedCompanyKybEnabled: z.boolean().default(false), - isCaseOverviewEnabled: z.boolean().default(true), + isCaseOverviewEnabled: z.boolean().default(false), isCaseRiskOverviewEnabled: z.boolean().default(false), theme: WorkflowDefinitionConfigThemeSchema.default({ type: WorkflowDefinitionConfigThemeEnum.KYB, diff --git a/services/workflows-service/prisma/data-migrations b/services/workflows-service/prisma/data-migrations index 8c2d8ccbdc..0cbd41a666 160000 --- a/services/workflows-service/prisma/data-migrations +++ b/services/workflows-service/prisma/data-migrations @@ -1 +1 @@ -Subproject commit 8c2d8ccbdc4518b0cb19acde1fa83c1be941c719 +Subproject commit 0cbd41a6669762ee10490f7ee84c4f8850aa52a8 diff --git a/services/workflows-service/prisma/migrations/20240709090531_enduser_id_index/migration.sql b/services/workflows-service/prisma/migrations/20240709090531_enduser_id_index/migration.sql new file mode 100644 index 0000000000..a1218b6ca3 --- /dev/null +++ b/services/workflows-service/prisma/migrations/20240709090531_enduser_id_index/migration.sql @@ -0,0 +1,2 @@ +-- CreateIndex +CREATE INDEX "Counterparty_endUserId_idx" ON "Counterparty"("endUserId"); diff --git a/services/workflows-service/prisma/schema.prisma b/services/workflows-service/prisma/schema.prisma index 801caf7b16..15725a7584 100644 --- a/services/workflows-service/prisma/schema.prisma +++ b/services/workflows-service/prisma/schema.prisma @@ -845,6 +845,7 @@ model Counterparty { @@unique([projectId, correlationId]) @@index([correlationId]) + @@index([endUserId]) } enum BusinessReportStatus { diff --git a/services/workflows-service/src/case-management/controllers/case-management.controller.ts b/services/workflows-service/src/case-management/controllers/case-management.controller.ts index 43c01df5f8..3f2070bc81 100644 --- a/services/workflows-service/src/case-management/controllers/case-management.controller.ts +++ b/services/workflows-service/src/case-management/controllers/case-management.controller.ts @@ -80,6 +80,19 @@ export class CaseManagementController { @CurrentProject() projectId: TProjectId, @Query() searchQueryParams: z.infer, ) { + const tagToKyc = { + [StateTag.COLLECTION_FLOW]: 'PENDING', + [StateTag.APPROVED]: 'APPROVED', + [StateTag.REJECTED]: 'REJECTED', + [StateTag.REVISION]: 'REVISIONS', + [StateTag.PENDING_PROCESS]: 'PROCESSED', + [StateTag.DATA_ENRICHMENT]: 'PROCESSED', + [StateTag.MANUAL_REVIEW]: 'PROCESSED', + } as const satisfies Record< + Exclude, + 'APPROVED' | 'REJECTED' | 'REVISIONS' | 'PROCESSED' | 'PENDING' + >; + const endUsers = await this.endUserService.list( { select: { @@ -103,6 +116,24 @@ export class CaseManagementController { companyName: true, }, }, + Counterparty: { + select: { + alerts: true, + }, + }, + workflowRuntimeData: { + select: { + tags: true, + }, + where: { + OR: Object.keys(tagToKyc).map(key => ({ + tags: { + array_contains: key, + }, + })), + }, + take: 1, + }, amlHits: true, activeMonitorings: true, updatedAt: true, @@ -126,62 +157,54 @@ export class CaseManagementController { position: EndUsersOnBusinesses['position']; business: Pick; }>; + workflowRuntimeData: Array<{ + tags: string[]; + }>; businesses: Array>; + Counterparty: { + alerts: Array<{ + id: string; + }>; + }; } >; - const tagToKyc = { - [StateTag.COLLECTION_FLOW]: 'PENDING', - [StateTag.APPROVED]: 'APPROVED', - [StateTag.REJECTED]: 'REJECTED', - [StateTag.REVISION]: 'REVISIONS', - [StateTag.PENDING_PROCESS]: 'PROCESSED', - [StateTag.DATA_ENRICHMENT]: 'PROCESSED', - [StateTag.MANUAL_REVIEW]: 'PROCESSED', - } as const satisfies Record< - Exclude, - 'APPROVED' | 'REJECTED' | 'REVISIONS' | 'PROCESSED' | 'PENDING' - >; - - return await Promise.all( - typedEndUsers.map(async endUser => { - const workflowRuntimeData = await this.workflowService.getByEntityId(endUser.id, projectId); - const tag = (workflowRuntimeData?.tags as string[])?.find( - tag => !!tagToKyc[tag as keyof typeof tagToKyc], - ); - const alerts = await this.alertsService.getAlertsByEntityId(endUser.id, projectId); - const checkIsMonitored = () => - Array.isArray(endUser.activeMonitorings) && !!endUser.activeMonitorings?.length; - const getMatches = () => { - const amlHits = (endUser.amlHits as z.infer)?.length ?? 0; - const isPlural = amlHits > 1 || amlHits === 0; + return typedEndUsers.map(endUser => { + const tag = endUser.workflowRuntimeData?.[0]?.tags?.find( + tag => !!tagToKyc[tag as keyof typeof tagToKyc], + ); + const alerts = endUser.Counterparty?.alerts; + const checkIsMonitored = () => + Array.isArray(endUser.activeMonitorings) && !!endUser.activeMonitorings?.length; + const getMatches = () => { + const amlHits = (endUser.amlHits as z.infer)?.length ?? 0; + const isPlural = amlHits > 1 || amlHits === 0; - return `${amlHits} ${isPlural ? 'matches' : 'match'}`; - }; - const isMonitored = checkIsMonitored(); - const matches = getMatches(); + return `${amlHits} ${isPlural ? 'matches' : 'match'}`; + }; + const isMonitored = checkIsMonitored(); + const matches = getMatches(); - const businesses = endUser.businesses?.length - ? endUser.businesses.map(business => business.companyName).join(', ') - : endUser.endUsersOnBusinesses - ?.map(endUserOnBusiness => endUserOnBusiness.business.companyName) - .join(', '); + const businesses = endUser.businesses?.length + ? endUser.businesses.map(business => business.companyName).join(', ') + : endUser.endUsersOnBusinesses + ?.map(endUserOnBusiness => endUserOnBusiness.business.companyName) + .join(', '); - return { - correlationId: endUser.correlationId, - createdAt: endUser.createdAt, - name: `${endUser.firstName} ${endUser.lastName}`, - businesses, - roles: endUser.endUsersOnBusinesses?.flatMap( - endUserOnBusiness => endUserOnBusiness.position, - ), - kyc: tagToKyc[tag as keyof typeof tagToKyc], - isMonitored, - matches, - alerts: alerts?.length ?? 0, - updatedAt: endUser.updatedAt, - }; - }), - ); + return { + correlationId: endUser.correlationId, + createdAt: endUser.createdAt, + name: `${endUser.firstName} ${endUser.lastName}`, + businesses, + roles: endUser.endUsersOnBusinesses?.flatMap( + endUserOnBusiness => endUserOnBusiness.position, + ), + kyc: tagToKyc[tag as keyof typeof tagToKyc], + isMonitored, + matches, + alerts: alerts?.length ?? 0, + updatedAt: endUser.updatedAt, + }; + }); } } diff --git a/services/workflows-service/src/workflow/workflow-runtime-data.repository.ts b/services/workflows-service/src/workflow/workflow-runtime-data.repository.ts index 3da6fcd908..0d664d8c81 100644 --- a/services/workflows-service/src/workflow/workflow-runtime-data.repository.ts +++ b/services/workflows-service/src/workflow/workflow-runtime-data.repository.ts @@ -358,30 +358,4 @@ export class WorkflowRuntimeDataRepository { return (await this.prisma.$queryRaw(sql)) as WorkflowRuntimeData[]; } - - async findFirstByEntityId( - entityId: string, - projectIds: TProjectIds, - args?: Prisma.SelectSubset, - ) { - return await this.prisma.workflowRuntimeData.findFirst( - this.scopeService.scopeFindFirst( - { - ...args, - where: { - ...args?.where, - OR: [ - { - endUserId: entityId, - }, - { - businessId: entityId, - }, - ], - }, - }, - projectIds, - ), - ); - } } diff --git a/services/workflows-service/src/workflow/workflow.service.ts b/services/workflows-service/src/workflow/workflow.service.ts index 2ee4a610c8..7d714a9959 100644 --- a/services/workflows-service/src/workflow/workflow.service.ts +++ b/services/workflows-service/src/workflow/workflow.service.ts @@ -2367,16 +2367,4 @@ export class WorkflowService { data: args, }); } - - async getByEntityId( - entityId: string, - projectId: TProjectId, - args?: Parameters[1], - ) { - return await this.workflowRuntimeDataRepository.findFirstByEntityId( - entityId, - [projectId], - args, - ); - } } diff --git a/websites/docs/.astro/types.d.ts b/websites/docs/.astro/types.d.ts index 29b938ca9c..288ad538a6 100644 --- a/websites/docs/.astro/types.d.ts +++ b/websites/docs/.astro/types.d.ts @@ -1,542 +1,539 @@ declare module 'astro:content' { - interface Render { - '.mdx': Promise<{ - Content: import('astro').MarkdownInstance<{}>['Content']; - headings: import('astro').MarkdownHeading[]; - remarkPluginFrontmatter: Record; - }>; - } + interface Render { + '.mdx': Promise<{ + Content: import('astro').MarkdownInstance<{}>['Content']; + headings: import('astro').MarkdownHeading[]; + remarkPluginFrontmatter: Record; + }>; + } } declare module 'astro:content' { - interface Render { - '.md': Promise<{ - Content: import('astro').MarkdownInstance<{}>['Content']; - headings: import('astro').MarkdownHeading[]; - remarkPluginFrontmatter: Record; - }>; - } + interface Render { + '.md': Promise<{ + Content: import('astro').MarkdownInstance<{}>['Content']; + headings: import('astro').MarkdownHeading[]; + remarkPluginFrontmatter: Record; + }>; + } } declare module 'astro:content' { - export { z } from 'astro/zod'; + export { z } from 'astro/zod'; - type Flatten = T extends { [K: string]: infer U } ? U : never; + type Flatten = T extends { [K: string]: infer U } ? U : never; - export type CollectionKey = keyof AnyEntryMap; - export type CollectionEntry = Flatten; + export type CollectionKey = keyof AnyEntryMap; + export type CollectionEntry = Flatten; - export type ContentCollectionKey = keyof ContentEntryMap; - export type DataCollectionKey = keyof DataEntryMap; + export type ContentCollectionKey = keyof ContentEntryMap; + export type DataCollectionKey = keyof DataEntryMap; - // This needs to be in sync with ImageMetadata - export type ImageFunction = () => import('astro/zod').ZodObject<{ - src: import('astro/zod').ZodString; - width: import('astro/zod').ZodNumber; - height: import('astro/zod').ZodNumber; - format: import('astro/zod').ZodUnion< - [ - import('astro/zod').ZodLiteral<'png'>, - import('astro/zod').ZodLiteral<'jpg'>, - import('astro/zod').ZodLiteral<'jpeg'>, - import('astro/zod').ZodLiteral<'tiff'>, - import('astro/zod').ZodLiteral<'webp'>, - import('astro/zod').ZodLiteral<'gif'>, - import('astro/zod').ZodLiteral<'svg'>, - import('astro/zod').ZodLiteral<'avif'>, - ] - >; - }>; + // This needs to be in sync with ImageMetadata + export type ImageFunction = () => import('astro/zod').ZodObject<{ + src: import('astro/zod').ZodString; + width: import('astro/zod').ZodNumber; + height: import('astro/zod').ZodNumber; + format: import('astro/zod').ZodUnion< + [ + import('astro/zod').ZodLiteral<'png'>, + import('astro/zod').ZodLiteral<'jpg'>, + import('astro/zod').ZodLiteral<'jpeg'>, + import('astro/zod').ZodLiteral<'tiff'>, + import('astro/zod').ZodLiteral<'webp'>, + import('astro/zod').ZodLiteral<'gif'>, + import('astro/zod').ZodLiteral<'svg'>, + import('astro/zod').ZodLiteral<'avif'>, + ] + >; + }>; - type BaseSchemaWithoutEffects = - | import('astro/zod').AnyZodObject - | import('astro/zod').ZodUnion<[BaseSchemaWithoutEffects, ...BaseSchemaWithoutEffects[]]> - | import('astro/zod').ZodDiscriminatedUnion - | import('astro/zod').ZodIntersection; + type BaseSchemaWithoutEffects = + | import('astro/zod').AnyZodObject + | import('astro/zod').ZodUnion<[BaseSchemaWithoutEffects, ...BaseSchemaWithoutEffects[]]> + | import('astro/zod').ZodDiscriminatedUnion + | import('astro/zod').ZodIntersection; - type BaseSchema = - | BaseSchemaWithoutEffects - | import('astro/zod').ZodEffects; + type BaseSchema = + | BaseSchemaWithoutEffects + | import('astro/zod').ZodEffects; - export type SchemaContext = { image: ImageFunction }; + export type SchemaContext = { image: ImageFunction }; - type DataCollectionConfig = { - type: 'data'; - schema?: S | ((context: SchemaContext) => S); - }; + type DataCollectionConfig = { + type: 'data'; + schema?: S | ((context: SchemaContext) => S); + }; - type ContentCollectionConfig = { - type?: 'content'; - schema?: S | ((context: SchemaContext) => S); - }; + type ContentCollectionConfig = { + type?: 'content'; + schema?: S | ((context: SchemaContext) => S); + }; - type CollectionConfig = ContentCollectionConfig | DataCollectionConfig; + type CollectionConfig = ContentCollectionConfig | DataCollectionConfig; - export function defineCollection( - input: CollectionConfig - ): CollectionConfig; + export function defineCollection( + input: CollectionConfig, + ): CollectionConfig; - type AllValuesOf = T extends any ? T[keyof T] : never; - type ValidContentEntrySlug = AllValuesOf< - ContentEntryMap[C] - >['slug']; + type AllValuesOf = T extends any ? T[keyof T] : never; + type ValidContentEntrySlug = AllValuesOf< + ContentEntryMap[C] + >['slug']; - export function getEntryBySlug< - C extends keyof ContentEntryMap, - E extends ValidContentEntrySlug | (string & {}), - >( - collection: C, - // Note that this has to accept a regular string too, for SSR - entrySlug: E - ): E extends ValidContentEntrySlug - ? Promise> - : Promise | undefined>; + export function getEntryBySlug< + C extends keyof ContentEntryMap, + E extends ValidContentEntrySlug | (string & {}), + >( + collection: C, + // Note that this has to accept a regular string too, for SSR + entrySlug: E, + ): E extends ValidContentEntrySlug + ? Promise> + : Promise | undefined>; - export function getDataEntryById( - collection: C, - entryId: E - ): Promise>; + export function getDataEntryById( + collection: C, + entryId: E, + ): Promise>; - export function getCollection>( - collection: C, - filter?: (entry: CollectionEntry) => entry is E - ): Promise; - export function getCollection( - collection: C, - filter?: (entry: CollectionEntry) => unknown - ): Promise[]>; + export function getCollection>( + collection: C, + filter?: (entry: CollectionEntry) => entry is E, + ): Promise; + export function getCollection( + collection: C, + filter?: (entry: CollectionEntry) => unknown, + ): Promise[]>; - export function getEntry< - C extends keyof ContentEntryMap, - E extends ValidContentEntrySlug | (string & {}), - >(entry: { - collection: C; - slug: E; - }): E extends ValidContentEntrySlug - ? Promise> - : Promise | undefined>; - export function getEntry< - C extends keyof DataEntryMap, - E extends keyof DataEntryMap[C] | (string & {}), - >(entry: { - collection: C; - id: E; - }): E extends keyof DataEntryMap[C] - ? Promise - : Promise | undefined>; - export function getEntry< - C extends keyof ContentEntryMap, - E extends ValidContentEntrySlug | (string & {}), - >( - collection: C, - slug: E - ): E extends ValidContentEntrySlug - ? Promise> - : Promise | undefined>; - export function getEntry< - C extends keyof DataEntryMap, - E extends keyof DataEntryMap[C] | (string & {}), - >( - collection: C, - id: E - ): E extends keyof DataEntryMap[C] - ? Promise - : Promise | undefined>; + export function getEntry< + C extends keyof ContentEntryMap, + E extends ValidContentEntrySlug | (string & {}), + >(entry: { + collection: C; + slug: E; + }): E extends ValidContentEntrySlug + ? Promise> + : Promise | undefined>; + export function getEntry< + C extends keyof DataEntryMap, + E extends keyof DataEntryMap[C] | (string & {}), + >(entry: { + collection: C; + id: E; + }): E extends keyof DataEntryMap[C] + ? Promise + : Promise | undefined>; + export function getEntry< + C extends keyof ContentEntryMap, + E extends ValidContentEntrySlug | (string & {}), + >( + collection: C, + slug: E, + ): E extends ValidContentEntrySlug + ? Promise> + : Promise | undefined>; + export function getEntry< + C extends keyof DataEntryMap, + E extends keyof DataEntryMap[C] | (string & {}), + >( + collection: C, + id: E, + ): E extends keyof DataEntryMap[C] + ? Promise + : Promise | undefined>; - /** Resolve an array of entry references from the same collection */ - export function getEntries( - entries: { - collection: C; - slug: ValidContentEntrySlug; - }[] - ): Promise[]>; - export function getEntries( - entries: { - collection: C; - id: keyof DataEntryMap[C]; - }[] - ): Promise[]>; + /** Resolve an array of entry references from the same collection */ + export function getEntries( + entries: { + collection: C; + slug: ValidContentEntrySlug; + }[], + ): Promise[]>; + export function getEntries( + entries: { + collection: C; + id: keyof DataEntryMap[C]; + }[], + ): Promise[]>; - export function reference( - collection: C - ): import('astro/zod').ZodEffects< - import('astro/zod').ZodString, - C extends keyof ContentEntryMap - ? { - collection: C; - slug: ValidContentEntrySlug; - } - : { - collection: C; - id: keyof DataEntryMap[C]; - } - >; - // Allow generic `string` to avoid excessive type errors in the config - // if `dev` is not running to update as you edit. - // Invalid collection names will be caught at build time. - export function reference( - collection: C - ): import('astro/zod').ZodEffects; + export function reference( + collection: C, + ): import('astro/zod').ZodEffects< + import('astro/zod').ZodString, + C extends keyof ContentEntryMap + ? { + collection: C; + slug: ValidContentEntrySlug; + } + : { + collection: C; + id: keyof DataEntryMap[C]; + } + >; + // Allow generic `string` to avoid excessive type errors in the config + // if `dev` is not running to update as you edit. + // Invalid collection names will be caught at build time. + export function reference( + collection: C, + ): import('astro/zod').ZodEffects; - type ReturnTypeOrOriginal = T extends (...args: any[]) => infer R ? R : T; - type InferEntrySchema = import('astro/zod').infer< - ReturnTypeOrOriginal['schema']> - >; + type ReturnTypeOrOriginal = T extends (...args: any[]) => infer R ? R : T; + type InferEntrySchema = import('astro/zod').infer< + ReturnTypeOrOriginal['schema']> + >; - type ContentEntryMap = { - "docs": { -"en/api/sdk/ballerine_sdk_flows.md": { - id: "en/api/sdk/ballerine_sdk_flows.md"; - slug: "en/api/sdk/ballerine_sdk_flows"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".md"] }; -"en/api/sdk/end_user_info.md": { - id: "en/api/sdk/end_user_info.md"; - slug: "en/api/sdk/end_user_info"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".md"] }; -"en/api/sdk/flows_backend_config.md": { - id: "en/api/sdk/flows_backend_config.md"; - slug: "en/api/sdk/flows_backend_config"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".md"] }; -"en/api/sdk/flows_events_config.md": { - id: "en/api/sdk/flows_events_config.md"; - slug: "en/api/sdk/flows_events_config"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".md"] }; -"en/api/sdk/flows_init_options.md": { - id: "en/api/sdk/flows_init_options.md"; - slug: "en/api/sdk/flows_init_options"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".md"] }; -"en/api/sdk/flows_mount_options.md": { - id: "en/api/sdk/flows_mount_options.md"; - slug: "en/api/sdk/flows_mount_options"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".md"] }; -"en/api/sdk/flows_translations.md": { - id: "en/api/sdk/flows_translations.md"; - slug: "en/api/sdk/flows_translations"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".md"] }; -"en/collection-flow/iframe.mdx": { - id: "en/collection-flow/iframe.mdx"; - slug: "en/collection-flow/iframe"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".mdx"] }; -"en/collection-flow/introduction.mdx": { - id: "en/collection-flow/introduction.mdx"; - slug: "en/collection-flow/introduction"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".mdx"] }; -"en/collection-flow/json-form.mdx": { - id: "en/collection-flow/json-form.mdx"; - slug: "en/collection-flow/json-form"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".mdx"] }; -"en/collection-flow/schema-breakdown.mdx": { - id: "en/collection-flow/schema-breakdown.mdx"; - slug: "en/collection-flow/schema-breakdown"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".mdx"] }; -"en/collection-flow/theming.mdx": { - id: "en/collection-flow/theming.mdx"; - slug: "en/collection-flow/theming"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".mdx"] }; -"en/collection-flow/ui-definition-updating.mdx": { - id: "en/collection-flow/ui-definition-updating.mdx"; - slug: "en/collection-flow/ui-definition-updating"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".mdx"] }; -"en/collection-flow/ui-elements.mdx": { - id: "en/collection-flow/ui-elements.mdx"; - slug: "en/collection-flow/ui-elements"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".mdx"] }; -"en/contributing.mdx": { - id: "en/contributing.mdx"; - slug: "en/contributing"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".mdx"] }; -"en/deployment/ansible_deployment.mdx": { - id: "en/deployment/ansible_deployment.mdx"; - slug: "en/deployment/ansible_deployment"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".mdx"] }; -"en/deployment/docker_compose.mdx": { - id: "en/deployment/docker_compose.mdx"; - slug: "en/deployment/docker_compose"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".mdx"] }; -"en/examples/cdn_example.md": { - id: "en/examples/cdn_example.md"; - slug: "en/examples/cdn_example"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".md"] }; -"en/examples/kitchen_sink_example.md": { - id: "en/examples/kitchen_sink_example.md"; - slug: "en/examples/kitchen_sink_example"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".md"] }; -"en/examples/kyb_example.md": { - id: "en/examples/kyb_example.md"; - slug: "en/examples/kyb_example"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".md"] }; -"en/examples/kyc_example.md": { - id: "en/examples/kyc_example.md"; - slug: "en/examples/kyc_example"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".md"] }; -"en/examples/package_manager_example.md": { - id: "en/examples/package_manager_example.md"; - slug: "en/examples/package_manager_example"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".md"] }; -"en/getting_started/glossary.md": { - id: "en/getting_started/glossary.md"; - slug: "en/getting_started/glossary"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".md"] }; -"en/getting_started/installation.mdx": { - id: "en/getting_started/installation.mdx"; - slug: "en/getting_started/installation"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".mdx"] }; -"en/getting_started/introduction.md": { - id: "en/getting_started/introduction.md"; - slug: "en/getting_started/introduction"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".md"] }; -"en/learn/back_office.mdx": { - id: "en/learn/back_office.mdx"; - slug: "en/learn/back_office"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".mdx"] }; -"en/learn/case_management_overview.md": { - id: "en/learn/case_management_overview.md"; - slug: "en/learn/case_management_overview"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".md"] }; -"en/learn/creating_a_kyc_flow_and_deploying_it.mdx": { - id: "en/learn/creating_a_kyc_flow_and_deploying_it.mdx"; - slug: "en/learn/creating_a_kyc_flow_and_deploying_it"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".mdx"] }; -"en/learn/embedded_sdk_api.mdx": { - id: "en/learn/embedded_sdk_api.mdx"; - slug: "en/learn/embedded_sdk_api"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".mdx"] }; -"en/learn/getting_started.mdx": { - id: "en/learn/getting_started.mdx"; - slug: "en/learn/getting_started"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".mdx"] }; -"en/learn/interacting_with_workflows.md": { - id: "en/learn/interacting_with_workflows.md"; - slug: "en/learn/interacting_with_workflows"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".md"] }; -"en/learn/introduction.mdx": { - id: "en/learn/introduction.mdx"; - slug: "en/learn/introduction"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".mdx"] }; -"en/learn/kit.md": { - id: "en/learn/kit.md"; - slug: "en/learn/kit"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".md"] }; -"en/learn/kyb_manual_review_example.mdx": { - id: "en/learn/kyb_manual_review_example.mdx"; - slug: "en/learn/kyb_manual_review_example"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".mdx"] }; -"en/learn/kyc_manual_review_example.mdx": { - id: "en/learn/kyc_manual_review_example.mdx"; - slug: "en/learn/kyc_manual_review_example"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".mdx"] }; -"en/learn/kyc_manual_review_workflow_guide.mdx": { - id: "en/learn/kyc_manual_review_workflow_guide.mdx"; - slug: "en/learn/kyc_manual_review_workflow_guide"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".mdx"] }; -"en/learn/native_mobile_apps.md": { - id: "en/learn/native_mobile_apps.md"; - slug: "en/learn/native_mobile_apps"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".md"] }; -"en/learn/plugins.mdx": { - id: "en/learn/plugins.mdx"; - slug: "en/learn/plugins"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".mdx"] }; -"en/learn/sdk_backend_configuration.mdx": { - id: "en/learn/sdk_backend_configuration.mdx"; - slug: "en/learn/sdk_backend_configuration"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".mdx"] }; -"en/learn/sdk_events.mdx": { - id: "en/learn/sdk_events.mdx"; - slug: "en/learn/sdk_events"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".mdx"] }; -"en/learn/sdk_translations.mdx": { - id: "en/learn/sdk_translations.mdx"; - slug: "en/learn/sdk_translations"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".mdx"] }; -"en/learn/sdk_ui_configuration.mdx": { - id: "en/learn/sdk_ui_configuration.mdx"; - slug: "en/learn/sdk_ui_configuration"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".mdx"] }; -"en/learn/sdk_ui_flows.md": { - id: "en/learn/sdk_ui_flows.md"; - slug: "en/learn/sdk_ui_flows"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".md"] }; -"en/learn/simple_kyb_guide.mdx": { - id: "en/learn/simple_kyb_guide.mdx"; - slug: "en/learn/simple_kyb_guide"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".mdx"] }; -"en/learn/ui_flows.mdx": { - id: "en/learn/ui_flows.mdx"; - slug: "en/learn/ui_flows"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".mdx"] }; -"en/learn/understanding_workflows.md": { - id: "en/learn/understanding_workflows.md"; - slug: "en/learn/understanding_workflows"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".md"] }; -"en/learn/workflow_builder_and_rule_engine_overview.md": { - id: "en/learn/workflow_builder_and_rule_engine_overview.md"; - slug: "en/learn/workflow_builder_and_rule_engine_overview"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".md"] }; -"en/learn/workflow_definitions.md": { - id: "en/learn/workflow_definitions.md"; - slug: "en/learn/workflow_definitions"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".md"] }; -"en/style_guidelines.md": { - id: "en/style_guidelines.md"; - slug: "en/style_guidelines"; - body: string; - collection: "docs"; - data: InferEntrySchema<"docs"> -} & { render(): Render[".md"] }; -}; + type ContentEntryMap = { + docs: { + 'en/api/sdk/ballerine_sdk_flows.md': { + id: 'en/api/sdk/ballerine_sdk_flows.md'; + slug: 'en/api/sdk/ballerine_sdk_flows'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.md'] }; + 'en/api/sdk/end_user_info.md': { + id: 'en/api/sdk/end_user_info.md'; + slug: 'en/api/sdk/end_user_info'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.md'] }; + 'en/api/sdk/flows_backend_config.md': { + id: 'en/api/sdk/flows_backend_config.md'; + slug: 'en/api/sdk/flows_backend_config'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.md'] }; + 'en/api/sdk/flows_events_config.md': { + id: 'en/api/sdk/flows_events_config.md'; + slug: 'en/api/sdk/flows_events_config'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.md'] }; + 'en/api/sdk/flows_init_options.md': { + id: 'en/api/sdk/flows_init_options.md'; + slug: 'en/api/sdk/flows_init_options'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.md'] }; + 'en/api/sdk/flows_mount_options.md': { + id: 'en/api/sdk/flows_mount_options.md'; + slug: 'en/api/sdk/flows_mount_options'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.md'] }; + 'en/api/sdk/flows_translations.md': { + id: 'en/api/sdk/flows_translations.md'; + slug: 'en/api/sdk/flows_translations'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.md'] }; + 'en/collection-flow/iframe.mdx': { + id: 'en/collection-flow/iframe.mdx'; + slug: 'en/collection-flow/iframe'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.mdx'] }; + 'en/collection-flow/introduction.mdx': { + id: 'en/collection-flow/introduction.mdx'; + slug: 'en/collection-flow/introduction'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.mdx'] }; + 'en/collection-flow/json-form.mdx': { + id: 'en/collection-flow/json-form.mdx'; + slug: 'en/collection-flow/json-form'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.mdx'] }; + 'en/collection-flow/schema-breakdown.mdx': { + id: 'en/collection-flow/schema-breakdown.mdx'; + slug: 'en/collection-flow/schema-breakdown'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.mdx'] }; + 'en/collection-flow/theming.mdx': { + id: 'en/collection-flow/theming.mdx'; + slug: 'en/collection-flow/theming'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.mdx'] }; + 'en/collection-flow/ui-definition-updating.mdx': { + id: 'en/collection-flow/ui-definition-updating.mdx'; + slug: 'en/collection-flow/ui-definition-updating'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.mdx'] }; + 'en/collection-flow/ui-elements.mdx': { + id: 'en/collection-flow/ui-elements.mdx'; + slug: 'en/collection-flow/ui-elements'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.mdx'] }; + 'en/contributing.mdx': { + id: 'en/contributing.mdx'; + slug: 'en/contributing'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.mdx'] }; + 'en/deployment/ansible_deployment.mdx': { + id: 'en/deployment/ansible_deployment.mdx'; + slug: 'en/deployment/ansible_deployment'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.mdx'] }; + 'en/deployment/docker_compose.mdx': { + id: 'en/deployment/docker_compose.mdx'; + slug: 'en/deployment/docker_compose'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.mdx'] }; + 'en/examples/cdn_example.md': { + id: 'en/examples/cdn_example.md'; + slug: 'en/examples/cdn_example'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.md'] }; + 'en/examples/kitchen_sink_example.md': { + id: 'en/examples/kitchen_sink_example.md'; + slug: 'en/examples/kitchen_sink_example'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.md'] }; + 'en/examples/kyb_example.md': { + id: 'en/examples/kyb_example.md'; + slug: 'en/examples/kyb_example'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.md'] }; + 'en/examples/kyc_example.md': { + id: 'en/examples/kyc_example.md'; + slug: 'en/examples/kyc_example'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.md'] }; + 'en/examples/package_manager_example.md': { + id: 'en/examples/package_manager_example.md'; + slug: 'en/examples/package_manager_example'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.md'] }; + 'en/getting_started/glossary.md': { + id: 'en/getting_started/glossary.md'; + slug: 'en/getting_started/glossary'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.md'] }; + 'en/getting_started/installation.mdx': { + id: 'en/getting_started/installation.mdx'; + slug: 'en/getting_started/installation'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.mdx'] }; + 'en/getting_started/introduction.md': { + id: 'en/getting_started/introduction.md'; + slug: 'en/getting_started/introduction'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.md'] }; + 'en/learn/back_office.mdx': { + id: 'en/learn/back_office.mdx'; + slug: 'en/learn/back_office'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.mdx'] }; + 'en/learn/case_management_overview.md': { + id: 'en/learn/case_management_overview.md'; + slug: 'en/learn/case_management_overview'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.md'] }; + 'en/learn/creating_a_kyc_flow_and_deploying_it.mdx': { + id: 'en/learn/creating_a_kyc_flow_and_deploying_it.mdx'; + slug: 'en/learn/creating_a_kyc_flow_and_deploying_it'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.mdx'] }; + 'en/learn/embedded_sdk_api.mdx': { + id: 'en/learn/embedded_sdk_api.mdx'; + slug: 'en/learn/embedded_sdk_api'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.mdx'] }; + 'en/learn/getting_started.mdx': { + id: 'en/learn/getting_started.mdx'; + slug: 'en/learn/getting_started'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.mdx'] }; + 'en/learn/interacting_with_workflows.md': { + id: 'en/learn/interacting_with_workflows.md'; + slug: 'en/learn/interacting_with_workflows'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.md'] }; + 'en/learn/introduction.mdx': { + id: 'en/learn/introduction.mdx'; + slug: 'en/learn/introduction'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.mdx'] }; + 'en/learn/kit.md': { + id: 'en/learn/kit.md'; + slug: 'en/learn/kit'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.md'] }; + 'en/learn/kyb_manual_review_example.mdx': { + id: 'en/learn/kyb_manual_review_example.mdx'; + slug: 'en/learn/kyb_manual_review_example'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.mdx'] }; + 'en/learn/kyc_manual_review_example.mdx': { + id: 'en/learn/kyc_manual_review_example.mdx'; + slug: 'en/learn/kyc_manual_review_example'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.mdx'] }; + 'en/learn/kyc_manual_review_workflow_guide.mdx': { + id: 'en/learn/kyc_manual_review_workflow_guide.mdx'; + slug: 'en/learn/kyc_manual_review_workflow_guide'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.mdx'] }; + 'en/learn/native_mobile_apps.md': { + id: 'en/learn/native_mobile_apps.md'; + slug: 'en/learn/native_mobile_apps'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.md'] }; + 'en/learn/plugins.mdx': { + id: 'en/learn/plugins.mdx'; + slug: 'en/learn/plugins'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.mdx'] }; + 'en/learn/sdk_backend_configuration.mdx': { + id: 'en/learn/sdk_backend_configuration.mdx'; + slug: 'en/learn/sdk_backend_configuration'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.mdx'] }; + 'en/learn/sdk_events.mdx': { + id: 'en/learn/sdk_events.mdx'; + slug: 'en/learn/sdk_events'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.mdx'] }; + 'en/learn/sdk_translations.mdx': { + id: 'en/learn/sdk_translations.mdx'; + slug: 'en/learn/sdk_translations'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.mdx'] }; + 'en/learn/sdk_ui_configuration.mdx': { + id: 'en/learn/sdk_ui_configuration.mdx'; + slug: 'en/learn/sdk_ui_configuration'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.mdx'] }; + 'en/learn/sdk_ui_flows.md': { + id: 'en/learn/sdk_ui_flows.md'; + slug: 'en/learn/sdk_ui_flows'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.md'] }; + 'en/learn/simple_kyb_guide.mdx': { + id: 'en/learn/simple_kyb_guide.mdx'; + slug: 'en/learn/simple_kyb_guide'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.mdx'] }; + 'en/learn/ui_flows.mdx': { + id: 'en/learn/ui_flows.mdx'; + slug: 'en/learn/ui_flows'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.mdx'] }; + 'en/learn/understanding_workflows.md': { + id: 'en/learn/understanding_workflows.md'; + slug: 'en/learn/understanding_workflows'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.md'] }; + 'en/learn/workflow_builder_and_rule_engine_overview.md': { + id: 'en/learn/workflow_builder_and_rule_engine_overview.md'; + slug: 'en/learn/workflow_builder_and_rule_engine_overview'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.md'] }; + 'en/learn/workflow_definitions.md': { + id: 'en/learn/workflow_definitions.md'; + slug: 'en/learn/workflow_definitions'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.md'] }; + 'en/style_guidelines.md': { + id: 'en/style_guidelines.md'; + slug: 'en/style_guidelines'; + body: string; + collection: 'docs'; + data: InferEntrySchema<'docs'>; + } & { render(): Render['.md'] }; + }; + }; - }; + type DataEntryMap = {}; - type DataEntryMap = { - - }; + type AnyEntryMap = ContentEntryMap & DataEntryMap; - type AnyEntryMap = ContentEntryMap & DataEntryMap; - - type ContentConfig = typeof import("../src/content/config"); + type ContentConfig = typeof import('../src/content/config'); }