import {z} from 'zod' export type CreateApiResourcesApplicantActionsActionIdImagesArgs = {actionId: string, body: BodyInit}; export type CreateApiResourcesApplicantActionsActionIdImagesOptions = {baseUrl: string, fetch?: typeof fetch | undefined}; export const resolution = z.object({height: z.number().int().optional(), width: z.number().int().optional()}); export const eSignFieldMapping = z.object({fieldName: z.string().max(256), fillAtSigning: z.boolean().optional(), valueExpr: z.string().max(2048)}); export const eSignSignaturePageSetting = z.object({height: z.number().int().optional(), page: z.number().int().optional(), width: z.number().int().optional(), x: z.number().int().optional(), y: z.number().int().optional()}); export const eSignSignatureSetting = z.object({pages: z.array(eSignSignaturePageSetting).optional()}); export const eSignDocSetting = z.object({agreementText: z.string().max(1000).optional(), fieldMappings: z.array(eSignFieldMapping).optional(), fieldNames: z.array(z.string().max(256)).optional(), fileImageId: z.string().max(64).optional(), imageFileName: z.string().max(128).optional(), optional: z.boolean().optional(), signatures: z.array(eSignSignatureSetting).optional()}); export const inspectionImageResultAdditionalData = z.object({geteSignDocSettingData: eSignDocSetting.optional()}); export const imageTestAnswer = z.enum(["IGNORED", "GREEN", "YELLOW", "RED", "ERROR"]); export const coords = z.object({latitude: z.number().optional(), longitude: z.number().optional()}); export const boundingBox = z.object({height: z.number().optional(), width: z.number().optional(), x: z.number().optional(), y: z.number().optional()}); export const documentSecurityFeature = z.object({name: z.string().optional()}); export const imageExtractedInfo = z.object({documentPageBox: boundingBox.optional(), documentSecurityFeatures: z.array(documentSecurityFeature).optional(), faceBox: boundingBox.optional(), ocrDocType: z.string().optional(), pagesCnt: z.number().int().optional(), problems: z.array(z.string()).optional(), requiredFields: z.array(z.string()).optional(), screenRecapture: z.boolean().optional(), unsatisfactoryAnswer: imageTestAnswer.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 idDocDef = z.object({arbitraryDocType: z.string().optional(), country: z.string().optional(), idDocSubType: idDocSubType.optional(), idDocType: idDocType.optional(), pages: z.string().optional()}); export const imageTestComment = z.string(); export const imageTrust = z.object({comments: z.array(imageTestComment).optional(), trust: z.number().optional()}); export const mediaTypeId = z.string(); export const pixelMapImage = z.object({imageId: z.number().int().optional(), path: z.string().optional()}); export const pixelMap = z.object({answer: imageTestAnswer.optional(), images: z.array(pixelMapImage).optional(), type: z.string().optional()}); export const pdfMetadata = z.object({resolution: resolution, totalPages: z.number().int()}); export const reviewLabel = z.enum(["FORGERY", "HIGH_RISK", "CRIMINAL", "DOCUMENT_TEMPLATE", "LOW_QUALITY", "SPAM", "NOT_DOCUMENT", "SELFIE_MISMATCH", "ID_INVALID", "DOCUMENT_DEPRIVED", "FOREIGNER", "DUPLICATE", "BAD_AVATAR", "WRONG_USER_REGION", "WRONG_ADDRESS", "INCOMPLETE_DOCUMENT", "BLOCKLIST", "OTHER", "UNSATISFACTORY_PHOTOS", "GRAPHIC_EDITOR", "DOCUMENT_PAGE_MISSING", "DOCUMENT_DAMAGED", "DIGITAL_DOCUMENT", "REGULATIONS_VIOLATIONS", "INCONSISTENT_PROFILE", "PROBLEMATIC_APPLICANT_DATA", "GPS_AS_POA_SKIPPED", "ADDITIONAL_DOCUMENT_REQUIRED", "MORE_DOCUMENTS_REQUIRED", "AGE_REQUIREMENT_MISMATCH", "REQUESTED_DATA_MISMATCH", "EXPERIENCE_REQUIREMENT_MISMATCH", "COMPROMISED_PERSONS", "PEP", "ADVERSE_MEDIA", "FRAUDULENT_PATTERNS", "STOLEN_DOCS", "SCAM_VICTIM", "SANCTIONS", "NOT_ALL_CHECKS_COMPLETED", "FRONT_SIDE_MISSING", "BACK_SIDE_MISSING", "SCREENSHOTS", "BLACK_AND_WHITE", "INCOMPATIBLE_LANGUAGE", "EXPIRATION_DATE", "UNFILLED_ID", "BAD_SELFIE", "BAD_VIDEO_SELFIE", "BAD_FACE_MATCHING", "BAD_PROOF_OF_IDENTITY", "BAD_PROOF_OF_ADDRESS", "BAD_PROOF_OF_PAYMENT", "SUSPICIOUS_DOCUMENT", "SELFIE_WITH_PAPER", "FRAUDULENT_LIVENESS", "EXTERNAL_DECISION_REJECTION", "OK", "COMPANY_NOT_DEFINED_STRUCTURE", "COMPANY_NOT_DEFINED_BENEFICIARIES", "COMPANY_NOT_VALIDATED_BENEFICIAL_OWNERS", "COMPANY_NOT_VALIDATED_BENEFICIARIES", "COMPANY_NOT_VALIDATED_DIRECTORS", "COMPANY_NOT_DEFINED_REPRESENTATIVES", "COMPANY_NOT_VALIDATED_REPRESENTATIVES", "UNSUITABLE_DOCUMENT", "OUTDATED_DOCUMENT_VERSION", "COMPANY_NOT_DEFINED_OWNERSHIP_STRUCTURE", "COMPANY_INACTIVE_ENTITY", "COMPANY_INCORRECT_DATA", "COMPANY_PROBLEMATIC_STRUCTURE", "COMPANY_DATA_MISMATCH", "APPLICANT_INTERRUPTED_INTERVIEW", "DOCUMENT_MISSING", "UNSUITABLE_ENV", "CONNECTION_INTERRUPTED", "UNSUPPORTED_LANGUAGE", "THIRD_PARTY_INVOLVED", "INCORRECT_SOCIAL_NUMBER", "CHECK_UNAVAILABLE", "DB_DATA_NOT_FOUND", "DB_DATA_MISMATCH", "DB_NO_DATA_SOURCE", "ESIGN_FAILED", "RESTRICTED_PERSON", "NO_APPLICANT", "NO_SUITABLE_DOCS", "NOT_ALONE", "CONNECTION_ISSUES", "CAMERA_OR_LIGHTING_ISSUES", "SOUND_ISSUES", "PHONE_VERIFICATION_ISSUES", "OTHER_VI_ISSUES", "REFUSED_TO_CONTINUE", "VIDEO_FILTERS_OR_MASKS", "SUPPORTED_LANGUAGE_IS_NOT_AVAILABLE", "ADDITIONAL_DATA_REQUIRED", "VI_ATTEMPTS_LIMIT_REACHED", "BEHAVIOR", "PERSON_MISMATCH", "THIRD_PARTY_GUIDANCE", "SPONSORED_VERIFICATION", "INSUFFICIENT_DATA", "INCORRECT_PATTERNS"]); export const reviewCreator = z.object({subjectName: z.string().max(256).optional()}); export const reviewRejectType = z.enum(["FINAL", "RETRY"]); export const reviewResult = z.object({buttonIds: z.array(z.string()).optional(), clientComment: z.string().optional(), moderationComment: z.string().optional(), rejectLabels: z.array(reviewLabel).optional(), requiredAdditionalIdDocs: z.array(idDocDef).optional(), reviewAnswer: imageTestAnswer.optional(), reviewCreator: reviewCreator.optional(), reviewRejectType: reviewRejectType.optional()}); export const inspectionImageResult = z.object({actualResolution: resolution.optional(), addedDate: z.string().optional(), additionalData: inspectionImageResultAdditionalData.optional(), answer: imageTestAnswer.optional(), attemptId: z.string().optional(), contentDeleted: z.boolean().optional(), coords: coords.optional(), copiedAt: z.string().optional(), creationDate: z.string().optional(), creatorClientId: z.string().optional(), customMetadata: z.record(z.string(), z.string()).optional(), deleted: z.boolean().optional(), exifResolution: resolution.optional(), externalFaceId: z.string().optional(), externalHash: z.string().optional(), extractedInfo: imageExtractedInfo.optional(), faceAlbumName: z.string().optional(), fileSize: z.number().int().optional(), fullSoftwareMatches: z.boolean().optional(), hasConverterVideo: z.boolean().optional(), hasDebugVideo: z.boolean().optional(), id: z.string().optional(), idDocDef: idDocDef.optional(), imageFileName: z.string().optional(), imageHash: z.string().optional(), imageId: z.number().int().optional(), imageTrust: imageTrust.optional(), make: z.string().optional(), masked: z.boolean().optional(), mediaType: z.string().optional(), mimeType: mediaTypeId.optional(), model: z.string().optional(), modificationDate: z.string().optional(), originalImageHash: z.string().max(64).optional(), pixelMaps: z.array(pixelMap).optional(), renderedPdf: pdfMetadata.optional(), resizedImageId: z.number().int().optional(), reviewResult: reviewResult.optional(), software: z.array(z.string()).optional(), softwareTag: z.string().optional(), source: z.string().optional()}); 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 }; /** * POST /resources/applicantActions/{actionId}/images */ export const createApiResourcesApplicantActionsActionIdImages = async (args: CreateApiResourcesApplicantActionsActionIdImagesArgs, options: CreateApiResourcesApplicantActionsActionIdImagesOptions) => { 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/applicantActions/${encodeURIComponent(String(args.actionId))}/images${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "POST", headers, body: args.body}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(inspectionImageResult, await res.json()) };