import {z} from 'zod' export type RunCheckOnUserDocumentSchema = {user_profile_id: string, template_id: string, file_uuid: string, document_input_title?: (string | null) | undefined, client_reference_id?: string | undefined, client_reference_data?: Record | undefined}; export type CreateApiVerifyRunCheckOnUserDocumentArgs = {body: RunCheckOnUserDocumentSchema}; export type CreateApiVerifyRunCheckOnUserDocumentOptions = {baseUrl?: string | undefined, apiKey?: string | undefined, fetch?: typeof fetch | undefined}; export const address = z.object({address_street_1: z.string().optional(), address_street_2: z.string().optional(), address_city: z.string().optional(), address_state: z.string().optional(), address_zip_code: z.string().optional(), address_country: z.string().optional()}); export const identityNumberType = z.enum(["SSN9", "SSN4", "DRIVER_LICENSE", "PASSPORT", "NATIONAL_ID", "VOTER_ID", "BVN", "NIN", "NIN_SLIP", "SSNIT", "TAX_ID", "KENYA_KRA_PIN", "ALIEN_CARD", "RESIDENT_ID", "COLOMBIA_PPT_NUMBER", "GHANA_CARD_NUMBER"]).nullable(); export const identityDocumentType = z.enum(["PASSPORT", "DRIVER_LICENSE", "NATIONAL_ID", "PAN_CARD", "ID_CARD", "VOTER_ID_CARD", "RESIDENT_CARD", "GHANA_CARD", "GHANA_SSNIT_CARD", "KENYA_ALIEN_CARD", "COLOMBIA_PPT"]).nullable(); export const outputIdentity = z.object({identity_country_code: z.string().optional(), identity_number_type: identityNumberType.optional(), identity_number: z.string().optional(), identity_document_type: identityDocumentType.optional(), identity_document_front: z.string().optional(), identity_document_back: z.string().optional()}); export const questionType = z.enum(["SINGLE_CHOICE", "MULTIPLE_CHOICE", "BOOLEAN", "TEXT", "FILE", "EMAIL", "PHONE_NUMBER", "SINGLE_SELECT", "MULTIPLE_SELECT", "DATE", "PARAGRAPH", "URL"]); export const question = z.object({question: z.string().nullable().optional(), answer: z.string().nullable().optional(), answer_file: z.string().nullable().optional(), order: z.number().nullable().optional(), answer_type: questionType.optional(), answer_language: z.string().nullable().optional()}); export const questionGroupMetaData = z.object({template_id: z.string().optional(), verification_session_id: z.string().optional(), updated_at: z.number().int().optional()}); export const questionGroup = z.record(z.string(), z.union([question, z.string(), questionGroupMetaData])); export const mediaFile = z.object({file_uuid: z.string().optional(), file_name: z.string().optional(), file_type: z.string().nullable().optional(), file_s3_url: z.string().optional()}); export const outputUserData = z.object({first_name: z.string().optional(), middle_name: z.string().optional(), last_name: z.string().optional(), date_of_birth: z.string().optional(), phone_number: z.string().optional(), email_address: z.string().optional(), ip_address: z.string().optional(), address: address.optional(), identity: outputIdentity.optional(), selfie: z.string().optional(), smile_selfie: z.string().optional(), selfie_video: z.string().optional(), questions_response: z.record(z.string(), questionGroup).optional(), documents: z.array(mediaFile).optional()}); export const userInput = z.object({user_data: outputUserData.optional(), additional_user_info: z.record(z.string(), z.unknown()).optional()}); export const aiPriseResultStatusV2 = z.enum(["APPROVED", "DECLINED", "REVIEW", "UNKNOWN"]).nullable(); export const aiPriseResponseSummaryV2 = z.object({verification_result: aiPriseResultStatusV2.optional()}); export const aiPriseRunStatusV2 = z.enum(["NOT_STARTED", "RUNNING", "PENDING", "FAILED", "COMPLETED", "SUBMITTED"]).nullable(); export const statusReasonCodeEntry = z.object({code: z.string().optional(), message: z.string().optional()}); export const aMLHitType = z.enum(["PEP", "PEP_CLASS_1", "PEP_CLASS_2", "PEP_CLASS_3", "PEP_CLASS_4", "ADVERSE_MEDIA", "ADVERSE_MEDIA_PROPERTY", "ADVERSE_MEDIA_FINANCIAL_AML_CFT", "ADVERSE_MEDIA_FRAUD_LINKED", "ADVERSE_MEDIA_NARCOTICS_AML_CFT", "ADVERSE_MEDIA_VIOLENCE_AML_CFT", "ADVERSE_MEDIA_TERRORISM", "ADVERSE_MEDIA_CYBERCRIME", "ADVERSE_MEDIA_GENERAL_AML_CFT", "ADVERSE_MEDIA_REGULATORY", "ADVERSE_MEDIA_FINANCIAL_DIFFICULTY", "ADVERSE_MEDIA_VIOLENCE_NON_AML_CFT", "ADVERSE_MEDIA_OTHER_FINANCIAL", "ADVERSE_MEDIA_OTHER_SERIOUS", "ADVERSE_MEDIA_OTHER_MINOR", "SANCTION", "WARNING", "FITNESS_PROBITY", "CRIMINAL_RECORD", "LEGAL_BACKGROUND", "UNKNOWN"]); export const sourceDetails = z.object({name: z.string().nullable().optional(), source_id: z.string().nullable().optional(), url: z.string().nullable().optional(), listing_started: z.string().nullable().optional(), listing_ended: z.string().nullable().optional(), country_codes: z.array(z.string()).nullable().optional(), aml_types: z.array(z.string()).nullable().optional()}); export const fieldTypeEnum = z.enum(["date_of_birth", "place_of_birth", "date_of_death", "country_codes", "country_names", "url"]); export const fieldDetail = z.object({name: z.string().optional(), value: z.union([z.string(), z.object({}), z.array(z.string())]).optional(), type: fieldTypeEnum.optional()}); export const mediaInfo = z.object({title: z.string().nullable().optional(), url: z.string().nullable().optional(), date: z.string().nullable().optional(), snippet: z.string().nullable().optional()}); export const aMLHit = z.object({hit_type: aMLHitType.optional(), source_details: sourceDetails.optional(), fields: z.array(fieldDetail).nullable().optional(), media: z.array(mediaInfo).nullable().optional()}); export const resolutionStatus = z.enum(["RESOLVED", "UNRESOLVED", "WHITELISTED"]); export const entityHitWithoutHistory = z.object({entity_type: z.enum(["PERSON", "COMPANY", "ORGANISATION", "UNKNOWN"]).optional(), name: z.string().optional(), name_match_score: z.number().gte(0).lte(100).optional(), also_known_as: z.array(z.string()).optional(), aml_hits: z.array(aMLHit).optional(), date_of_birth: z.string().nullable().optional(), date_of_birth_match_score: z.number().gte(0).lte(100).nullable().optional(), id: z.string().optional(), resolution_status: resolutionStatus.optional(), is_deleted: z.boolean().optional(), additional_fields: z.object({}).optional()}); export const aMLEntityHitHistoryEvent = z.enum(["ADDED", "UPDATED", "REMOVED", "MONITORING_UPDATE"]); export const aMLEntityHitHistory = z.object({created_at: z.number().int().optional(), entity_hit: entityHitWithoutHistory.optional(), event: aMLEntityHitHistoryEvent.optional()}); export const entityHit = z.object({entity_type: z.enum(["PERSON", "COMPANY", "ORGANISATION", "UNKNOWN"]).optional(), name: z.string().optional(), name_match_score: z.number().gte(0).lte(100).optional(), also_known_as: z.array(z.string()).optional(), associates: z.array(z.object({name: z.string().optional(), association: z.string().optional()})).optional(), aml_hits: z.array(aMLHit).optional(), date_of_birth: z.string().nullable().optional(), date_of_birth_match_score: z.number().gte(0).lte(100).nullable().optional(), id: z.string().optional(), resolution_status: resolutionStatus.optional(), history: z.array(aMLEntityHitHistory).optional(), is_deleted: z.boolean().optional(), additional_fields: z.object({}).optional()}); export const aiPriseReasonCode = z.enum(["UNRECOGNIZED_DOCUMENT", "UNREADABLE_DOCUMENT", "DOCUMENT_NOT_FOUND", "DOCUMENT_EXPIRED", "DOCUMENT_FRONT_BACK_MISMATCH", "DOCUMENT_DAMAGED", "DOCUMENT_FRONT_MISSING", "DOCUMENT_BACK_MISSING", "DOCUMENT_CROPPED", "DOCUMENT_FACE_NOT_FOUND", "INVALID_DOCUMENT_DETAILS", "DOCUMENT_TYPE_MISMATCH", "UNABLE_TO_EXTRACT_DOCUMENT_METADATA", "MISSING_EXPIRY_DATE", "MISSING_ISSUE_DATE", "MISSING_BIRTH_DATE", "MISSING_DOCUMENT_NUMBER", "MISSING_PERSONAL_NUMBER", "MISSING_ADDRESS", "MISSING_POSTCODE", "MISSING_NAME", "MISSING_GENDER", "MISSING_NATIONALITY", "MISSING_DOCUMENT_DETAILS", "DOCUMENT_FRONT_OR_BACK_MISSING", "NAME_VERIFICATION_FAILED", "ID_DATA_MISMATCH", "ID_TYPE_MISMATCH", "ID_NOT_ALLOWED", "ID_COUNTRY_MISMATCH", "BIRTH_DATE_MISMATCH", "ADDRESS_MISMATCH", "DATABASE_LOOKUP_ISSUE", "DOCUMENT_PHOTO_OF_PHOTO", "SCREEN_DETECTED", "IMAGE_FORGED_EDITED", "FEATURE_VERIFICATION_FAILED", "FAKE_ID", "DOCUMENT_FOUND_ON_INTERNET", "ARTIFICIAL_IMAGE", "ARTIFICIAL_TEXT", "TEXT_FORGERY", "IMAGE_TOO_SMALL", "GLARE_DETECTED", "IMAGE_TOO_BLURRY", "CHECK_DIGIT_FAILED", "PRINTOUT_DETECTED", "DOCUMENT_CONVERTED_TO_IMAGE", "BLACK_WHITE_DOCUMENT", "FACE_NOT_FOUND", "MULTIPLE_FACES", "FACE_MISMATCH", "LOW_FACE_SIMILARITY", "FACE_IDENTICAL", "FACE_NOT_LIVE", "FACE_LIVENESS_REVIEW_REQUIRED", "FACE_PHOTO_OF_PHOTO", "FACE_COVERED", "FACE_EDITED", "FACE_BLUR", "FACE_TOO_CLOSE", "FACE_CROPPED", "FACE_TOO_SMALL", "FACE_ANGLE_TOO_LARGE", "FACE_DEEPFAKE", "ID_NUMBER_NOT_VERIFIED", "INVALID_ID_NUMBER_SUPPLIED", "LOOKUP_SOURCE_DOWN", "LOOKUP_FACE_NOT_FOUND", "ID_PREVIOUSLY_SEEN", "AGE_UNDER_18", "AML_MATCH", "API_DATA_REQUIREMENTS_NOT_MET", "IP_ADDRESS_SUSPICIOUS", "SUSPICIOUS_USER_BEHAVIOUR", "GEOLOCATION_MISMATCH", "COMPANY_NOT_FOUND", "COMPANY_NUMBER_NOT_VALID_FORMAT", "COMPANY_PREVIOUSLY_SEEN", "CUSTOM_ERROR_CODE", "DOCUMENT_TAMPERED", "DOCUMENT_MINOR_DIGITAL_ARTIFACTS", "DOCUMENT_REQUIRES_REVIEW", "VALIDATION_RULES_DECLINED", "VALIDATION_RULES_REVIEW", "DOCUMENT_TOO_FAR", "DOCUMENT_SIZE_TOO_LARGE", "BROKEN_DOCUMENT", "INVALID_FILE_EXTENSION", "FILE_TOO_LARGE", "FACE_LIVENESS_TOO_FAR_FROM_CAMERA", "FACE_PREVIOUSLY_ONBOARDED", "ADDRESS_DOCUMENT_MISSING_ADDRESS", "ADDRESS_DOCUMENT_ADDRESS_MISMATCH", "ADDRESS_DOCUMENT_MISSING_NAME", "ADDRESS_DOCUMENT_NAME_VERIFICATION_FAILED", "ADDRESS_DOCUMENT_MISSING_ISSUE_DATE", "ADDRESS_DOCUMENTS_NOT_SAME", "EXPIRY_DATE_MISSING_USING_ISSUE_DATE", "EXPIRY_AND_ISSUE_DATE_MISSING", "ADDRESS_DOCUMENT_DOCUMENT_EXPIRED", "ADDRESS_DOCUMENT_DOCUMENT_NOT_ISSUED_RECENTLY", "ADDRESS_DOCUMENT_UNRECOGNIZED_DOCUMENT", "TOR_DETECTED", "VPN_DETECTED", "BOT_DETECTED", "BROWSER_PREVIOUSLY_SEEN", "IP_ADDRESS_PREVIOUSLY_SEEN", "PRIVACY_SETTINGS_BLOCKED", "BUSINESS_ID_MISMATCH", "BUSINESS_INFO_NAME_MISMATCH", "REGISTRATION_STATUS_INACTIVE", "UNABLE_TO_EXTRACT_DATA", "EMAIL_NOT_FOUND", "PHONE_NUMBER_NOT_FOUND", "BROWSER_PREVIOUSLY_ATTEMPTED", "IP_ADDRESS_PREVIOUSLY_ATTEMPTED", "ID_PREVIOUSLY_ATTEMPTED", "BACKGROUND_CHECK_ALERT", "BUSINESS_ID_NOT_VERIFIED", "MRZ_DATA_MISMATCH", "SELFIE_VIDEO_FRAUD", "SELFIE_VIDEO_MISSING", "VIDEO_INJECTION_DETECTED", "VIRTUAL_CAMERA_DETECTED", "ADDRESS_ZIPCODE_MISMATCH", "FACE_AGE_MISMATCH", "NO_GLARES_DETECTED", "KEYWORD_MATCHES_FOUND", "HIGH_RISK_INDUSTRY_MATCHES_FOUND", "IMAGE_IN_FOCUS", "GOOD_IMAGE_RESOLUTION", "GOOD_IMAGE_COLOR", "GOOD_IMAGE_PERSPECTIVE", "DOCUMENT_FULLY_PRESENT", "PORTRAIT_PRESENT_IN_IMAGE", "GOOD_IMAGE_BRIGHTNESS", "NO_OCCLUSION_DETECTED", "GOOD_IMAGE_QUALITY", "IMAGE_DOCUMENT_TYPE_DETECTED", "IMAGE_TEXT_FIELDS_VERIFIED", "PO_BOX_DETECTED", "PARKED_WEBSITE", "SOCIAL_MEDIA_BROKEN_LINKS", "SOCIAL_MEDIA_BUSINESS_MISMATCH", "INCONSISTENCIES_IN_WEBSITE_CONTENT", "STOCK_IMAGES_FOUND", "PLACEHOLDER_TEXT_FOUND_IN_WEBSITE_CONTENT", "WEBSITE_NOT_FOUND", "WEBSITE_PARKED", "WEBSITE_REDIRECTED", "WEBSITE_GENERIC", "WEBSITE_NOT_AUTHENTIC", "BUSINESS_DESCRIPTION_MISMATCH", "TERMS_AND_CONDITIONS_NOT_FOUND", "TERMS_AND_CONDITIONS_FAILED", "INVALID_WEBSITE_SSL", "BUSINESS_GEOLOCATION_MISMATCH", "EMAIL_ADDRESS_MISMATCH", "PHONE_NUMBER_MISMATCH", "PROHIBITED_INDUSTRY_MATCHES_FOUND", "WEBSITE_URL_AND_BUSINESS_NAME_MISMATCH", "BUSINESS_COUNTRY_MISMATCH", "BUSINESS_WEBSITE_MISMATCH", "BUSINESS_FORMATION_DATE_MISMATCH", "BUSINESS_TAX_ID_MISMATCH"]); export const warningEntry = z.object({code: aiPriseReasonCode.optional(), message: z.string().nullable().optional(), warning_id: z.string().optional(), resolution_status: resolutionStatus.optional()}); export const aMLInfo = z.object({status: aiPriseRunStatusV2.optional(), status_reasons: z.array(statusReasonCodeEntry).optional(), entity_hits: z.array(entityHit).optional(), result: aiPriseResultStatusV2.optional(), warnings: z.array(warningEntry).optional(), num_hits: z.number().optional(), aml_hit_summary: z.record(z.string(), z.string()).optional(), section_id: z.string().optional(), search_criteria: z.object({search_term: z.string().nullable().optional(), fuzziness_score: z.number().nullable().optional(), exact_match: z.boolean().nullable().optional(), birth_year: z.number().nullable().optional()}).optional()}); export const aiPriseAPIResultStatusV2 = z.enum(["APPROVED", "DECLINED", "REVIEW", "UNKNOWN", "FOUND", "NOT_FOUND"]); export const iDType = z.enum(["NATIONAL_ID", "ID_CARD", "PASSPORT", "DRIVER_LICENSE", "RESIDENT_CARD", "VISA", "VOTER_ID", "TAX_ID", "COLOMBIA_PPT", "GHANA_CARD", "GHANA_SSNIT_CARD", "KENYA_ALIEN_CARD", "NATIONAL_ID_NUMBER", "PASSPORT_NUMBER", "BVN", "VOTER_ID_NUMBER", "DRIVER_LICENSE_NUMBER", "TAX_ID_NUMBER", "NIN", "SSN9", "SSN4", "SSNIT", "KRA_PIN", "ALIEN_CARD_NUMBER", "COLOMBIA_PPT_NUMBER", "GHANA_CARD_NUMBER"]); export const extractedAddress = z.object({full_address: z.string().optional(), parsed_address: z.object({address_street_1: z.string().optional(), address_street_2: z.string().optional(), address_city: z.string().optional(), address_state: z.string().optional(), address_zip_code: z.string().optional(), address_country: z.string().optional(), address_type: z.string().optional()}).optional(), source: z.array(z.object({type: z.string().optional(), state: z.string().optional(), status: z.string().optional(), file_number: z.string().optional(), labels: z.array(z.string()).optional()})).optional(), additional_info: z.record(z.string(), z.unknown()).optional()}); export const documentDetails = z.object({mrz_data: z.record(z.string(), z.unknown()).nullable().optional(), barcode_data: z.record(z.string(), z.unknown()).nullable().optional(), ocr_data: z.record(z.string(), z.unknown()).nullable().optional()}); export const fieldDataInfoMatchtype = z.enum(["NIN", "CURP", "DRIVER_LICENSE", "VOTER_ID", "BVN", "PASSPORT", "AADHAAR", "PAN", "MRZ", "BARCODE", "SSNIT", "NATIONAL_ID", "RFC"]); export const fieldInfo = z.object({matched: z.array(fieldDataInfoMatchtype).optional(), unmatched: z.array(fieldDataInfoMatchtype).optional()}); export const iDInfo = z.object({status: aiPriseRunStatusV2.optional(), status_reasons: z.array(statusReasonCodeEntry).optional(), result: aiPriseAPIResultStatusV2, warnings: z.array(warningEntry).optional(), id_type: iDType.optional(), id_number: z.string().optional(), id_expiry_date: z.string().optional(), id_issue_date: z.string().optional(), first_name: z.string().optional(), middle_name: z.string().optional(), last_name: z.string().optional(), second_last_name: z.string().optional(), full_name: z.string().optional(), personal_number: z.string().optional(), birth_date: z.string().optional(), gender: z.string().optional(), nationality: z.string().optional(), nationality_code: z.string().optional(), issue_country: z.string().optional(), issue_country_code: z.string().optional(), issue_state: z.string().optional(), issue_state_code: z.string().optional(), address: extractedAddress.optional(), document_details: documentDetails.optional(), lookup_details: z.object({}).optional(), field_info: z.record(z.string(), fieldInfo).nullable().optional(), check_summary: z.object({}).optional(), section_id: z.string().optional()}); export const faceMatchInfo = z.object({status: aiPriseRunStatusV2.optional(), status_reasons: z.array(statusReasonCodeEntry).optional(), result: aiPriseAPIResultStatusV2, warnings: z.array(warningEntry).optional(), face_match_score: z.number().gte(0).lte(100).nullable().optional(), check_summary: z.object({}).optional(), section_id: z.string().optional()}); export const faceLivenessInfo = z.object({status: aiPriseRunStatusV2.optional(), status_reasons: z.array(statusReasonCodeEntry).optional(), result: aiPriseAPIResultStatusV2, warnings: z.array(warningEntry).optional(), source: z.string().nullable().optional(), check_summary: z.object({}).optional(), section_id: z.string().optional()}); export const portEvent = z.object({from_carrier: z.string().optional(), to_carrier: z.string().optional(), port_date: z.string().optional()}); export const socialProfile = z.object({platform: z.string().nullable().optional(), registered: z.boolean().nullable().optional(), name: z.string().nullable().optional(), last_seen: z.string().nullable().optional(), account_id: z.string().nullable().optional()}); export const personField = z.object({last_seen: z.string().optional(), valid_since: z.string().optional(), value: z.string().optional()}); export const personAddress = z.object({address_line_1: z.string().optional(), address_line_2: z.string().optional(), address_city: z.string().optional(), address_country: z.string().optional(), latitude: z.string().optional(), longitude: z.string().optional(), last_seen: z.string().optional(), postal_code: z.string().optional(), address_state: z.string().optional(), valid_since: z.string().optional()}); export const person = z.object({names: z.array(personField).optional(), genders: z.array(personField).optional(), date_of_births: z.array(personField).optional(), addresses: z.array(personAddress).optional(), email_address: personField.optional(), ip_addresses: z.array(personField).optional(), national_id: z.string().optional(), phone_number: z.string().optional()}); export const phoneInsights = z.object({status: aiPriseRunStatusV2.optional(), status_reasons: z.array(statusReasonCodeEntry).optional(), result: aiPriseAPIResultStatusV2.optional(), warnings: z.array(warningEntry).optional(), phone_number: z.string().optional(), phone_valid: z.boolean().optional(), phone_type: z.string().optional(), phone_disposable: z.boolean().optional(), phone_active: z.string().optional(), activation_date: z.string().optional(), sim_type: z.string().optional(), country: z.string().optional(), original_carrier: z.string().optional(), current_carrier: z.string().optional(), port_history: z.array(portEvent).optional(), phone_is_spam: z.boolean().optional(), social_profiles: z.array(socialProfile).optional(), persons: z.array(person).optional(), section_id: z.string().optional()}); export const domainInfo = z.object({domain_name: z.string().optional(), top_level_domain: z.string().optional(), registered: z.boolean().optional(), company_name: z.string().optional(), disposable: z.boolean().optional(), free_provider: z.boolean().optional(), dmarc_compliance: z.boolean().optional(), spf_strict: z.boolean().optional(), suspicious_top_level_domain: z.boolean().optional(), custom: z.boolean().optional()}); export const breach = z.object({platform_name: z.string().optional(), breach_date: z.string().optional(), domain_name: z.string().optional()}); export const socialSummary = z.object({age_on_social: z.number().nullable().optional(), number_of_names_returned: z.number().nullable().optional(), number_of_photos_returned: z.number().nullable().optional(), registered_consumer_electronics_profiles: z.number().nullable().optional(), registered_ecommerce_profiles: z.number().nullable().optional(), registered_education_profiles: z.number().nullable().optional(), registered_email_provider_profiles: z.number().nullable().optional(), registered_entertainment_profiles: z.number().nullable().optional(), registered_financial_profiles: z.number().nullable().optional(), registered_messaging_profiles: z.number().nullable().optional(), registered_professional_profiles: z.number().nullable().optional(), registered_profiles: z.number().nullable().optional(), registered_social_media_profiles: z.number().nullable().optional(), registered_travel_profiles: z.number().nullable().optional()}); export const emailInsights = z.object({status: aiPriseRunStatusV2.optional(), status_reasons: z.array(statusReasonCodeEntry).optional(), result: aiPriseAPIResultStatusV2.optional(), warnings: z.array(warningEntry).optional(), email: z.string().nullable().optional(), email_tenure: z.number().optional(), domain_info: domainInfo.optional(), is_breached: z.boolean().optional(), no_of_breaches: z.number().int().optional(), first_breach: z.string().optional(), last_breach: z.string().optional(), breaches: z.array(breach).optional(), persons: z.array(person).optional(), social_profiles: z.array(socialProfile).optional(), social_summary: socialSummary.optional(), section_id: z.string().optional()}); export const iPLocation = z.object({country: z.string().optional(), country_code: z.string().optional(), region: z.string().optional(), city: z.string().optional(), latitude: z.number().optional(), longitude: z.number().optional(), postal_code: z.string().optional(), timezone: z.string().optional(), geo_name_id: z.number().int().optional()}); export const vPNInfo = z.object({confidence: z.string().nullable().optional(), origin_timezone: z.string().nullable().optional(), origin_country: z.string().nullable().optional(), timezone_mismatch: z.boolean().nullable().optional(), public_vpn: z.boolean().nullable().optional(), auxiliary_mobile: z.boolean().nullable().optional(), os_mismatch: z.boolean().nullable().optional(), relay: z.boolean().nullable().optional(), ml_prediction: z.boolean().nullable().optional(), vpn_ml_score: z.number().nullable().optional()}); export const iPInsights = z.object({status: aiPriseRunStatusV2.optional(), status_reasons: z.array(statusReasonCodeEntry).optional(), result: aiPriseAPIResultStatusV2.optional(), warnings: z.array(warningEntry).optional(), location: iPLocation.optional(), internet_service_provider: z.string().optional(), connection_type: z.string().optional(), autonomous_system_number: z.number().int().optional(), organization: z.string().optional(), is_crawler: z.boolean().optional(), host: z.string().optional(), proxy: z.boolean().optional(), vpn: z.boolean().optional(), vpn_info: vPNInfo.optional(), tor: z.boolean().optional(), active_vpn: z.boolean().optional(), active_tor: z.boolean().optional(), recent_abuse: z.boolean().optional(), bot_status: z.boolean().optional(), abuse_velocity: z.string().optional(), unique_hash: z.string().optional(), ip_address: z.string().optional(), section_id: z.string().optional()}); export const deviceInsights = z.object({status: aiPriseRunStatusV2.optional(), status_reasons: z.array(statusReasonCodeEntry).optional(), result: aiPriseAPIResultStatusV2.optional(), warnings: z.array(warningEntry).optional(), browser_name: z.string().optional(), browser_major_version: z.string().optional(), browser_full_version: z.string().optional(), os: z.string().optional(), os_version: z.string().optional(), device: z.string().optional(), user_agent: z.string().optional(), incognito: z.boolean().optional(), bot_status: z.boolean().optional(), bot_type: z.string().optional(), privacy_settings: z.boolean().optional(), section_id: z.string().optional()}); export const relatedSession = z.object({result: aiPriseAPIResultStatusV2.optional(), status: aiPriseRunStatusV2.optional(), created_at: z.number().int().optional(), relation: z.string().optional(), verification_session_id: z.string().optional()}); export const relatedSessionInsights = z.object({status: aiPriseRunStatusV2.optional(), status_reasons: z.array(statusReasonCodeEntry).optional(), result: aiPriseAPIResultStatusV2.optional(), warnings: z.array(warningEntry).optional(), related_sessions: z.array(relatedSession).optional(), section_id: z.string().optional()}); export const geolocationInsights = z.object({status: aiPriseRunStatusV2.optional(), status_reasons: z.array(statusReasonCodeEntry).optional(), result: aiPriseAPIResultStatusV2.optional(), warnings: z.array(warningEntry).optional(), latitude: z.number().optional(), longitude: z.number().optional(), accuracy: z.string().optional(), altitude: z.string().optional(), altitude_accuracy: z.string().optional(), heading: z.string().optional(), speed: z.string().optional(), section_id: z.string().optional()}); export const fraudInsights = z.object({status: aiPriseRunStatusV2.optional(), status_reasons: z.array(statusReasonCodeEntry).optional(), result: aiPriseAPIResultStatusV2.optional(), warnings: z.array(warningEntry).optional(), email_insights: z.array(emailInsights).optional(), phone_insights: z.array(phoneInsights).optional(), ip_insights: iPInsights.optional(), device_insights: deviceInsights.optional(), related_session_insights: relatedSessionInsights.optional(), geolocation_insights: geolocationInsights.optional(), section_id: z.string().optional()}); export const aIAgentAssessment = z.object({verdict: z.string().optional(), summary: z.string().optional(), recommended_action: z.string().optional(), signals: z.array(z.object({signal_type: z.object({value: z.string().optional(), reasoning: z.string().optional(), confidence: z.string().optional()}).optional(), severity: z.string().optional()})).optional()}); export const aIAgentAnalysisEntry = z.object({agent_type: z.string().optional(), task_id: z.string().optional(), status: z.string().optional(), assessment: aIAgentAssessment.optional()}); export const aIAgentAnalysis = z.record(z.string(), aIAgentAnalysisEntry); export const lookupInfo = z.object({status: aiPriseRunStatusV2.optional(), status_reasons: z.array(statusReasonCodeEntry).nullable().optional(), result: aiPriseResultStatusV2.optional(), warnings: z.array(warningEntry).nullable().optional(), database_name: z.string().nullable().optional(), title: z.string().nullable().optional(), data: z.object({}).nullable().optional(), section_id: z.string().optional()}); export const additionalInfoType = z.enum(["KBA", "KENYA_KRA_PIN", "BANK_STATEMENT_DOCUMENT", "BUSINESS_REGISTRATION_DOCUMENT", "OPERATING_LICENSE_DOCUMENT", "SOURCE_OF_FUNDS_DOCUMENT", "VISA_DOCUMENT", "US_AAMVA", "AADHAAR_DOCUMENT_FRONT", "AADHAAR_DOCUMENT_BACK", "USER_SELFIE", "GENDER", "SEON_SESSION_PAYLOAD", "ADDRESS_PROOF_DOCUMENT", "NIGERIA_BVN_NUMBER", "TAX_IDENTIFICATION_NUMBER", "PREVIOUS_VERIFICATION_SESSION_ID", "FRAUD_CHECK_DOCUMENT", "OPERATION_CARD", "TRANSPORTATION_PERMIT", "VEHICLE_OWNERSHIP_CARD", "TAX_CERTIFICATE", "OTHER"]); export const businessAdditionalInfoType = z.enum(["BANK_STATEMENT_DOCUMENT", "BUSINESS_REGISTRATION_DOCUMENT", "OPERATING_LICENSE_DOCUMENT", "FRAUD_CHECK_DOCUMENT", "ADDRESS_PROOF_DOCUMENT", "BANK_ACCOUNT_DETAILS", "SOURCE_OF_FUNDS_DOCUMENT", "CHAMBER_OF_COMMERCE_CERTIFICATE", "CAC_CERTIFICATE", "ARTICLES_OF_INCORPORATION", "AML_POLICY", "FINANCIAL_CONDUCT_AUTHORITY_AUTHORIZATION", "DIRECTORS_REGISTRY", "CORPORATE_CHART", "SHAREHOLDERS_REGISTRY", "BALANCE_SHEET", "REPORTING_ENTITY_REGISTRATION_DOCUMENT", "COMPANY_CONSTITUTION", "MEMORANDUM_OF_ASSOCIATION", "PARTNERSHIP_DEED", "CERTIFIED_ANNUAL_RETURNS_STATEMENT", "COMPANY_PROFILE", "AUDITED_ACCOUNTS", "ANTI_BRIBERY_POLICY", "DATA_PROTECTION_POLICY", "INVOICE", "PEP_FORM", "TAX_REGISTRATION_CERTIFICATE", "INTENDED_USAGE_DOCUMENT", "OTHER"]); export const additionalInfoResponseType = z.enum(["ID_INFO", "LOOKUP_DATA", "ADDRESS_VERIFICATION", "DOCUMENT_INSIGHTS"]); export const pOADocumentCategory = z.enum(["FINANCIAL_STATEMENT", "UTILITY_BILL", "GOVERNMENT_LETTER", "INSURANCE_DOCUMENT", "TENANCY_AGREEMENT", "EMPLOYMENT_DOCUMENT", "NATIONAL_ID", "UNKNOWN"]); export const documentMetadata = z.object({producer: z.string().optional(), creator: z.string().optional(), creation_date: z.string().optional(), modification_date: z.string().optional(), author: z.string().optional(), title: z.string().optional(), keywords: z.array(z.string()).optional(), subject: z.string().optional()}); export const addressVerificationIndicator = z.object({id: z.string().optional(), category: z.string().optional(), title: z.string().optional(), description: z.string().optional(), indicator_attributes: z.object({}).optional(), metadata: z.object({}).optional()}); export const validationRuleExecutionResult = z.object({evidence: z.array(z.string()).optional(), order_number: z.number().optional(), reasoning: z.string().optional(), result: z.string().optional(), rule_id: z.string().optional(), rule_text: z.string().optional(), severity: z.string().optional()}); export const validationRulesOverallOutcome = z.enum(["APPROVED", "REVIEW", "DECLINED", "NOT_EVALUATED"]); export const validationRulesExecutionResponse = z.object({rules: z.array(validationRuleExecutionResult).optional(), overall_outcome: validationRulesOverallOutcome.optional(), overall_outcome_reason: z.string().optional()}); export const addressVerificationInfo = z.object({status: aiPriseRunStatusV2.optional(), status_reasons: z.array(statusReasonCodeEntry).optional(), result: aiPriseAPIResultStatusV2.optional(), warnings: z.array(warningEntry).optional(), extracted_address: extractedAddress.optional(), document_issue_date: z.string().nullable().optional(), document_expiry_date: z.string().nullable().optional(), first_name: z.string().nullable().optional(), middle_name: z.string().nullable().optional(), last_name: z.string().nullable().optional(), full_name: z.string().nullable().optional(), name_match: z.boolean().nullable().optional(), address_match: z.boolean().nullable().optional(), translated_full_name: z.string().nullable().optional(), translated_extracted_address: extractedAddress.optional(), translation_language: z.string().nullable().optional(), document_type: z.string().nullable().optional(), poa_document_category: pOADocumentCategory.optional(), section_id: z.string().optional(), document_class_id: z.string().optional(), document_class_type: z.string().optional(), document_metadata: documentMetadata.optional(), info_indicators: z.array(addressVerificationIndicator).optional(), risk_indicators: z.array(addressVerificationIndicator).optional(), trust_indicators: z.array(addressVerificationIndicator).optional(), validation_rules_execution_response: validationRulesExecutionResponse.optional()}); export const documentInsightsIndicator = z.object({id: z.string().optional(), category: z.string().optional(), title: z.string().optional(), description: z.string().optional(), indicator_attributes: z.object({}).optional(), metadata: z.object({}).optional()}); export const documentInsights = z.object({status: aiPriseRunStatusV2.optional(), status_reasons: z.array(statusReasonCodeEntry).optional(), result: aiPriseAPIResultStatusV2.optional(), warnings: z.array(warningEntry).optional(), info_indicators: z.array(documentInsightsIndicator).optional(), risk_indicators: z.array(documentInsightsIndicator).optional(), trust_indicators: z.array(documentInsightsIndicator).optional(), document_metadata: documentMetadata.optional(), document_class_id: z.string().optional(), document_class_type: z.string().optional(), document_class_variant: z.string().optional(), section_id: z.string().optional(), document_data: z.record(z.string(), z.unknown()).optional()}); export const additionalInfoBlob = z.object({additional_info_type: z.union([additionalInfoType, businessAdditionalInfoType]).optional(), additional_info_response_type: additionalInfoResponseType.optional(), data: z.union([iDInfo, addressVerificationInfo, documentInsights, z.object({})]).optional()}); export const additionalInformationOutput = z.array(additionalInfoBlob); export const riskLevelEnum = z.enum(["PROHIBITED", "HIGH", "MEDIUM", "LOW"]).nullable(); export const evaluatedRiskRuleStatusEnum = z.enum(["PASSED", "NOT_PASSED", "FAILED"]).nullable(); export const evaluatedRiskRule = z.object({rule_name: z.string().nullable().optional(), result: aiPriseResultStatusV2.optional(), score: z.number().nullable().optional(), status: evaluatedRiskRuleStatusEnum.optional()}); export const riskInfoScoring = z.object({score: z.number().nullable().optional(), risk_level: riskLevelEnum.optional(), rules_evaluated: z.array(evaluatedRiskRule).optional(), section_id: z.string().nullable().optional()}); export const riskInfoDecisioning = z.object({result: aiPriseResultStatusV2.optional(), rules_evaluated: z.array(evaluatedRiskRule).optional(), section_id: z.string().nullable().optional()}); export const riskInfo = z.object({scoring: riskInfoScoring.optional(), decisioning: riskInfoDecisioning.optional()}); export const aMLMonitoringUpdate = z.object({added_entity_hits: z.array(entityHit).nullable().optional(), removed_entity_hits: z.array(entityHit).nullable().optional(), updated_entity_hits: z.array(entityHit).nullable().optional(), created_at: z.number().nullable().optional()}); export const userVerificationResponseV2 = z.object({user_input: userInput.optional(), aiprise_summary: aiPriseResponseSummaryV2.optional(), status: aiPriseRunStatusV2.optional(), status_reasons: z.array(statusReasonCodeEntry).optional(), client_reference_id: z.string().optional(), client_reference_data: z.object({}).optional(), created_at: z.number().int().optional(), template_id: z.string().optional(), verification_session_id: z.string().optional(), aml_info: aMLInfo.optional(), id_info: iDInfo.optional(), face_match_info: faceMatchInfo.optional(), face_liveness_info: faceLivenessInfo.optional(), phone_insights: phoneInsights.optional(), fraud_insights: fraudInsights.optional(), ai_agent_analysis: aIAgentAnalysis.optional(), lookup_info: z.array(lookupInfo).optional(), time_elapsed_to_process: z.string().optional(), time_elapsed_to_complete_session: z.string().optional(), additional_info: additionalInformationOutput.optional(), environment: z.string().nullable().optional(), risk_info: riskInfo.optional(), aml_monitoring_info: z.array(aMLMonitoringUpdate).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 }; /** * Run Document Check * * POST /verify/run_check_on_user_document */ export const createApiVerifyRunCheckOnUserDocument = async (args: CreateApiVerifyRunCheckOnUserDocumentArgs, options?: CreateApiVerifyRunCheckOnUserDocumentOptions) => { const {baseUrl = "https://api-sandbox.aiprise.com/api/v1", fetch: fetchFn = fetch, apiKey} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") if (apiKey !== undefined) headers.set("X-API-KEY", apiKey) const url = `${baseUrl.replace(/\/+$/, '')}/verify/run_check_on_user_document${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "POST", headers, body: JSON.stringify(args.body)}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(userVerificationResponseV2, await res.json()) };