import {z} from 'zod' export type GetApiResourcesApiApplicantFraudNetworksByApplicantApplicantIdArgs = {applicantId: string}; export type GetApiResourcesApiApplicantFraudNetworksByApplicantApplicantIdOptions = {baseUrl: string, fetch?: typeof fetch | undefined}; export const entityResultError = z.string(); export const deviceSignal = z.object({confidence: z.number().optional(), deviceId: z.string().max(200).optional()}); export const idDocSubType = z.enum(["FRONT_SIDE", "BACK_SIDE", "PAGES", "INCORPORATION_CERT", "INCORPORATION_ARTICLES", "ARTICLES_OF_ASSOCIATION", "PARTNERSHIP_AGREEMENT", "REGULATORY_LICENSE", "TRADE_LICENSE", "SHAREHOLDER_REGISTRY", "DIRECTORS_REGISTRY", "STATE_REGISTRY", "OWNERSHIP_STRUCTURE_CHART", "INCUMBENCY_CERT", "PROOF_OF_ADDRESS", "TAX_CERT", "PROOF_OF_NATURE_OF_BUSINESS", "SELF_DECLARATION_FORM", "POWER_OF_ATTORNEY", "PROOF_OF_DOMAIN", "TRUST_AGREEMENT", "INFORMATION_STATEMENT", "GOOD_STANDING_CERT", "OTHER"]); export const idDocType = z.enum(["ID_CARD", "PASSPORT", "TRAVEL_PASSPORT", "DRIVERS", "SNILS", "RESIDENCE_PERMIT", "WORK_PERMIT", "WORK_PATENT", "VISA", "EMPLOYMENT_CERTIFICATE", "DRIVERS_TRANSLATION", "PASSPORT_TRANSLATION", "UTILITY_BILL", "UTILITY_BILL2", "ID_AS_POA", "SELFIE", "VIDEO_SELFIE", "PAYMENT_SELFIE", "STUDENT_ID", "BANK_CARD", "PROOF_OF_PAYMENT", "BANK_STATEMENT", "PROFILE_IMAGE", "PROFILE_SCREENSHOT", "ID_DOC_PHOTO", "MRZ_DOCUMENT", "AGREEMENT", "OTHER", "OTHER2", "OTHER3", "CONTRACT", "SIGNED_CONTRACT", "INVESTOR_DOC", "COMPANY_DOC", "VAT_CERTIFICATE", "POWER_OF_ATTORNEY", "TRANSPARENCY_REGISTRY_EXTRACT", "INCOME_SOURCE", "VEHICLE_REGISTRATION_CERTIFICATE", "VEHICLE_PASSPORT", "LEGAL_ENTITY", "MIGRATION_CARD", "ARRIVAL_NOTICE", "PAYMENT_METHOD", "PAYMENT_SOURCE", "INSURANCE_CERTIFICATE", "TAXI_LICENSE", "COVID_VACCINATION_FORM", "COVID_TEST_FORM", "TAX_PAYER_NUMBER_DOC", "FILE_ATTACHMENT", "ARBITRARY_DOC", "VOTER_ID", "IDENTITY_VIDEO", "EXTERNAL_DB_DOC", "DEBUG"]); export const applicantFraudNetworkReason = z.enum(["address", "fingerprint", "ip", "poaTemplate", "documentTemplate", "selfieTemplate", "cookie", "mobileCookie", "livenessDevice", "similarDevice", "exactSameDevice"]); export const imageTemplateMatch = z.object({address: z.string().optional(), idDocSubType: idDocSubType.optional(), idDocType: idDocType.optional(), imageTemplateId: z.string().optional(), referenceImageId: z.number().int().optional(), templateType: applicantFraudNetworkReason.optional()}); export const applicantNetworkNode = z.object({addedAt: z.string().optional(), deviceFingerprints: z.array(z.string()).optional(), deviceSignals: z.array(deviceSignal).optional(), externalUserId: z.string().optional(), id: z.string().optional(), imageTemplates: z.array(imageTemplateMatch).optional(), ips: z.array(z.string()).optional(), nodeConfidence: z.number().optional()}); export const applicantFraudNetwork = z.object({createdAt: z.string().optional(), id: z.string().optional(), modifiedAt: z.string().optional(), nodes: z.array(applicantNetworkNode).optional()}); export const snsAttachment = z.object({createdAt: z.string().optional(), createdBy: z.string().optional(), fileName: z.string().optional(), fileSize: z.number().int().optional(), id: z.string().optional(), thumbnailId: z.string().optional()}); export const entityActionTrail = z.object({clientSubject: z.string().optional(), date: z.string().optional(), subjectId: z.string().optional()}); export const mirrorStatus = z.string(); export const targetType = z.string(); export const snsEntityNote = z.object({attachments: z.array(snsAttachment).optional(), clientId: z.string().optional(), clientNote: z.boolean().optional(), created: entityActionTrail.optional(), id: z.string().optional(), mirrorStatus: mirrorStatus.optional(), modified: entityActionTrail.optional(), note: z.string().optional(), ownerId: z.string().optional(), ownerType: targetType.optional(), pinned: z.boolean().optional(), tags: z.array(z.string()).optional(), targetId: z.string().optional(), targetType: targetType.optional(), tombstone: z.boolean().optional()}); export const applicantFraudNetworkStats = z.object({GREEN: z.number().int().optional(), RED: z.number().int().optional(), buttonIdsCounter: z.record(z.string(), z.number().int()).optional(), finalRejectedCount: z.number().int().optional(), medianAge: z.number().optional(), networkCnt: z.number().int().optional(), networkReasons: z.array(applicantFraudNetworkReason).optional(), rejectLabelsCounter: z.record(z.string(), z.number().int()).optional(), size: z.number().int().optional(), topCountries: z.record(z.string(), z.number().int()).optional()}); export const applicantFraudNetworkDto = z.object({network: applicantFraudNetwork.optional(), notes: z.array(snsEntityNote).optional(), stats: applicantFraudNetworkStats.optional()}); export const entityPageInfo = z.object({limit: z.number().int().optional(), offset: z.number().int().optional()}); export const entityListApplicantFraudNetworkDto = z.object({error: entityResultError.optional(), items: z.array(applicantFraudNetworkDto).optional(), pageInfo: entityPageInfo.optional(), totalItems: z.number().int().optional()}); export const entityResultApplicantFraudNetworkDto = z.object({list: entityListApplicantFraudNetworkDto}); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * GET /resources/api/applicantFraudNetworks/-/byApplicant/{applicantId} */ export const getApiResourcesApiApplicantFraudNetworksByApplicantApplicantId = async (args: GetApiResourcesApiApplicantFraudNetworksByApplicantApplicantIdArgs, options: GetApiResourcesApiApplicantFraudNetworksByApplicantApplicantIdOptions) => { const {baseUrl, fetch: fetchFn = fetch} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json;charset=UTF-8") const url = `${baseUrl.replace(/\/+$/, '')}/resources/api/applicantFraudNetworks/-/byApplicant/${encodeURIComponent(String(args.applicantId))}${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "GET", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(entityResultApplicantFraudNetworkDto, await res.json()) };