import {z} from 'zod' export type CreateApiV1TransactionsIdCancelArgs = {id: string, document_url_version?: ('v1' | 'v2') | undefined}; export type CreateApiV1TransactionsIdCancelOptions = {baseUrl?: string | undefined, apiKey?: string | undefined, fetch?: typeof fetch | undefined}; export const attachment = z.object({date_created: z.string().max(100).optional(), name: z.string().max(5000).optional(), url: z.string().max(5000).optional()}); export const ccRecipientEmail = z.string().max(5000); export const address = z.object({line1: z.string().max(5000).optional(), line2: z.string().max(5000).optional(), city: z.string().max(5000).optional(), state: z.string().max(2).optional(), postal: z.string().max(10).optional(), country: z.string().max(2).optional()}); export const proofRequirementIdVerification = z.object({selfie: z.boolean()}); export const proofRequirementMultiFactorAuthentication = z.object({type: z.literal("sms")}); export const proofRequirement = z.object({id_verification: proofRequirementIdVerification.optional(), knowledge_based_authentication: z.boolean(), multi_factor_authentication: proofRequirementMultiFactorAuthentication.optional()}); export const recipientGroup = z.object({shared_inbox_email: z.string().max(5000).optional()}); export const idAllowListByCountry = z.object({}).nullable(); export const credentialImage = z.object({url: z.string().max(5000).optional(), descriptor: z.enum(["back", "front"]).optional()}); export const credentialAssetObject = z.object({credential_type: z.enum(["primary", "secondary", "selfie"]).optional(), credential_images: z.array(credentialImage).optional()}); export const photoValidationAttempt = z.object({validation_source: z.enum(["lexis-flex", "identity-verification-service", "lexis", "noop", "persona", "firebase", "null", "none", "notakred"]).max(5000).nullable().optional(), verified_at: z.string().max(100).optional(), verification_method: z.string().max(5000).nullable().optional(), images: z.object({front: z.string().max(5000).optional(), back: z.string().max(5000).nullable().optional(), selfie: z.string().max(5000).nullable().optional()}).optional(), status: z.enum(["success", "failure", "unknown", "skipped", "pending", "action_required", "deleted"]).nullable().optional(), document_address: address.optional(), document_claimed_type: z.enum(["bank_account_statement", "bank_investment_loan_statement", "birth_certificate", "certificate_of_citizenship", "citizen_id", "credit_or_debit_card_statement", "deed_of_trust", "driver_license", "foreigner_id", "healthcare_insurance", "i_94", "id_card", "internal_passport", "keypass_id", "lease", "long_term_pass_card", "matricula_consular", "mortgage", "municipal_id", "my_number_card", "nbi", "nexus_card", "ofw", "organizational_membership_card", "pan", "passport", "passport_card", "paycheck_stub", "permanent_resident_card", "postal_id", "property_insurance", "property_tax_bill", "residency_permit", "school_id_card", "seafarers_id", "social_security_card", "sss", "tin", "travel_document", "tribal_id", "umid", "us_visa", "utility_bill", "vehicle_registration", "voter_registration_card", "work_permit", "other", "unknown"]).optional(), document_classification: z.string().max(5000).nullable().optional(), document_date_of_birth: z.string().max(100).nullable().optional(), document_expiration_date: z.string().max(100).nullable().optional(), document_first_name: z.string().max(100).nullable().optional(), document_middle_name: z.string().max(100).nullable().optional(), document_last_name: z.string().max(100).nullable().optional(), document_issue_date: z.string().max(100).nullable().optional(), document_issuer: z.string().max(5000).nullable().optional(), document_number: z.string().max(5000).nullable().optional(), verified: z.boolean().optional(), failure_reasons: z.array(z.object({check: z.string().max(5000).optional(), category: z.enum(["aamva_failure", "fraud", "image_quality", "ineligible_id", "kba_mismatch", "not_classified", "user_action_required"]).optional(), reasons: z.array(z.string().max(5000)).optional(), required: z.boolean().optional(), verification_type: z.enum(["id", "selfie"]).optional()})).optional()}); export const verifyToolRequirement = z.object({requirement: z.enum(["run", "pass", "none"]), available: z.boolean().optional()}); export const verifyToolConfiguration = z.object({credit_card_config: verifyToolRequirement.optional(), selfie_config: verifyToolRequirement.optional(), credential_analysis_config: verifyToolRequirement.optional()}); export const signer = z.object({signer_id: z.string().max(30).optional(), email: z.string().max(5000), first_name: z.string().max(30).optional(), middle_name: z.string().max(30).nullable().optional(), last_name: z.string().max(30).optional(), phone_number: z.string().max(30).optional(), phone: z.object({country_code: z.string().max(10).optional(), number: z.string().max(20).optional()}).nullable().optional(), address: address.optional(), dob: z.string().max(30).optional(), capacity: z.string().max(5000).nullable().optional(), entity: z.string().max(5000).nullable().optional(), external_id: z.string().max(5000).nullable().optional(), link_expired: z.boolean().optional(), personally_known_to_notary: z.boolean().optional(), proof_requirement: proofRequirement.optional(), recipient_group: recipientGroup.optional(), sdk_token: z.string().max(5000).nullable().optional(), signatory_capacities: z.array(z.object({capacity: z.string().optional(), type: z.enum(["attorney_in_fact", "corporate_officer", "guardian_or_conservator", "general_partner", "limited_partner", "trustee", "other"]).optional(), representative_of: z.string().optional()})).optional(), primary_id_allow_list_by_country: idAllowListByCountry.optional(), secondary_id_allow_list_by_country: idAllowListByCountry.optional(), signing_requirement: z.enum(["esign", "identify", "verify", "screen"]).nullable().optional(), signing_status: z.enum(["incomplete", "in_progress", "complete"]).nullable().optional(), transaction_access_link: z.string().optional(), vesting_type: z.enum(["borrower", "non_borrower"]).optional(), skip_landing_page: z.boolean().nullable().optional(), credential_assets: z.array(credentialAssetObject).nullable().optional(), esign_authentication_records: z.array(photoValidationAttempt).nullable().optional(), notary_id: z.string().max(100).nullable().optional(), order: z.number().int().nullable().optional(), suppress_communications: z.literal("all").nullable().optional(), verify_tool_configuration: verifyToolConfiguration.optional()}); export const signingDesignationGroup = z.object({name: z.string().max(5000).optional(), min_required: z.number().int().optional(), max_required: z.number().int().optional()}); export const signingDesignation = z.object({signer_identifier: z.string().max(5000).optional(), page_number: z.number().int().optional(), x: z.number().int().optional(), y: z.number().int().optional(), height: z.number().int().optional(), width: z.number().int().optional(), hint: z.string().max(5000).optional(), type: z.enum(["date_signed", "day_signed", "month_signed", "year_signed", "full_name", "signature", "initials", "checkmark", "radio_checkmark", "free_text", "signature_and_date", "dob", "email", "address_line1", "address_line2", "address_zip5", "address_state", "address_city", "representative_capacity_type", "disclosure", "notary_id", "seal", "commission_expiration_date", "commission_state", "county", "commission_county", "principal_id_type", "notary_city"]).optional(), signing_designation_group: signingDesignationGroup.optional(), optional: z.boolean().optional(), instruction: z.string().max(5000).optional(), primary_designation_identifier: z.string().max(5000).optional(), conditional_on_primary: z.string().max(5000).optional()}); export const document = z.object({id: z.string().max(5000).optional(), allowed_actions: z.array(z.string().max(5000)).optional(), bundle_position: z.number().int().optional(), completion_state: z.string().max(5000).optional(), data: z.string().nullable().optional(), date_created: z.string().max(100).optional(), date_updated: z.string().max(100).optional(), document_name: z.string().max(5000).optional(), esign_required: z.boolean().optional(), final_document_url: z.string().max(5000).nullable().optional(), identification_reviewed: z.boolean().optional(), identity_confirmation_required: z.boolean().optional(), is_enote: z.boolean().nullable().optional(), notarization_required: z.boolean().optional(), permissions: z.array(z.string().max(5000)).optional(), processing_error: z.string().max(5000).nullable().optional(), processing_state: z.string().max(5000).nullable().optional(), rejection_anecdote: z.string().max(5000).nullable().optional(), rejection_reason: z.string().max(5000).nullable().optional(), requirement: z.string().max(5000).optional(), signed_url: z.string().max(5000).nullable().optional(), signing_designation_groups: z.array(signingDesignationGroup).optional(), signing_designations: z.array(signingDesignation).optional(), signing_type: z.enum(["NOTARIZATION", "ESIGN"]).optional(), tracking_id: z.string().max(5000).nullable().optional(), vaulted: z.boolean().optional()}); export const notarizationRecordSignerObject = z.object({signer_id: z.string().max(38).nullable().optional(), email: z.string().max(100).optional(), first_name: z.string().max(30).optional(), middle_name: z.string().max(30).nullable().optional(), last_name: z.string().max(30).optional(), address: address.optional(), dob: z.string().max(30).optional()}); export const witness = z.object({first_name: z.string().max(100).optional(), middle_name: z.string().max(100).optional(), last_name: z.string().max(100).optional(), address: address.optional(), credential_assets: z.array(credentialAssetObject).optional()}); export const photoIdentification = z.object({primary_front: z.string().max(5000).optional(), primary_back: z.string().max(5000).optional(), primary_type: z.string().max(5000).optional(), primary_issuer: z.string().max(5000).optional(), primary_expiry_date: z.string().max(100).optional(), secondary_front: z.string().max(5000).optional()}); export const notarizationRecordObject = z.object({id: z.string().max(5000).optional(), meeting_start: z.string().max(100).optional(), meeting_end: z.string().max(100).optional(), notary_name: z.string().max(5000).optional(), notary_county_city: z.string().max(5000).optional(), notary_registration: z.string().max(5000).optional(), notary_source: z.enum(["In-house notary", "Custom Panel", "Notarize Network"]).optional(), signer_info: notarizationRecordSignerObject.optional(), signers: z.array(z.object({signer_id: z.string().max(38).nullable().optional(), email: z.string().max(100).optional(), first_name: z.string().max(30).optional(), middle_name: z.string().max(30).nullable().optional(), last_name: z.string().max(30).optional(), address: address.optional(), dob: z.string().max(30).optional(), primary_front: z.string().max(5000).optional(), primary_back: z.string().max(5000).optional(), primary_type: z.string().max(5000).optional(), primary_issuer: z.string().max(5000).optional(), primary_expiry_date: z.string().max(100).optional(), secondary_front: z.string().max(5000).optional()})).optional(), cosigner_info: notarizationRecordSignerObject.optional(), witnesses: z.array(witness).optional(), notarized_documents: z.array(z.object({document_url: z.string().max(5000).optional(), notorial_acts: z.array(z.enum(["acknowledgement", "copy_certification", "jurat", "oath_affirmation", "verification_of_fact", "vof_ps1583", "affidavit", "attestation"])).optional(), tracking_id: z.union([z.number().int().nullable(), z.string().max(5000).nullable()]).optional()})).optional(), verification_credentials: z.object({retrieval_id: z.string().max(5000).optional(), retrieval_pin: z.string().max(5000).optional(), last_name: z.string().max(5000).nullable().optional(), date_completed: z.string().max(100).optional()}).optional(), signer_photo_identification: photoIdentification.optional(), video_url: z.string().max(5000).optional(), chat_url: z.string().max(5000).nullable().optional()}); export const notaryInstructions = z.object({notary_note: z.string().max(500).optional()}); export const recipientDetailsConfig = z.object({field: z.literal("name").max(50).optional(), display: z.enum(["required", "locked", "optional", "hidden"]).max(50).optional()}); export const signers = z.object({signer_id: z.string().max(30).optional(), email: z.string().max(5000).optional(), first_name: z.string().max(30).optional(), middle_name: z.string().max(30).nullable().optional(), last_name: z.string().max(30).optional(), phone_number: z.string().max(30).optional(), phone: z.object({country_code: z.string().max(10).optional(), number: z.string().max(20).optional()}).nullable().optional(), address: address.optional(), dob: z.string().max(30).optional(), capacity: z.string().max(5000).nullable().optional(), entity: z.string().max(5000).nullable().optional(), external_id: z.string().max(5000).nullable().optional(), link_expired: z.boolean().optional(), personally_known_to_notary: z.boolean().optional(), proof_requirement: proofRequirement.optional(), recipient_group: recipientGroup.optional(), sdk_token: z.string().max(5000).nullable().optional(), signatory_capacities: z.array(z.object({capacity: z.string().optional(), type: z.enum(["attorney_in_fact", "corporate_officer", "guardian_or_conservator", "general_partner", "limited_partner", "trustee", "other"]).optional(), representative_of: z.string().optional()})).optional(), primary_id_allow_list_by_country: idAllowListByCountry.optional(), secondary_id_allow_list_by_country: idAllowListByCountry.optional(), signing_requirement: z.enum(["esign", "identify", "verify", "screen"]).nullable().optional(), signing_status: z.enum(["incomplete", "in_progress", "complete"]).nullable().optional(), transaction_access_link: z.string().optional(), vesting_type: z.enum(["borrower", "non_borrower"]).optional(), skip_landing_page: z.boolean().nullable().optional(), credential_assets: z.array(credentialAssetObject).nullable().optional(), esign_authentication_records: z.array(photoValidationAttempt).nullable().optional(), order: z.number().int().nullable().optional(), notary_id: z.string().max(100).nullable().optional(), suppress_communications: z.literal("all").nullable().optional(), verify_tool_configuration: verifyToolConfiguration.optional()}); export const transactionObject = z.object({id: z.string().max(5000).optional(), activation_time: z.string().max(100).nullable().optional(), allowed_notary_states: z.array(z.string().min(2).max(2)).nullable().optional(), attachments: z.array(attachment).optional(), audit_trail_url: z.string().max(5000).nullable().optional(), cc_recipient_emails: z.array(ccRecipientEmail).optional(), charge_statement_url: z.string().max(5000).nullable().optional(), config_id: z.string().max(5000).nullable().optional(), cost_center_id: z.string().max(5000).nullable().optional(), cosigner_info: signer.optional(), cost: z.number().optional(), date_created: z.string().max(100).optional(), date_updated: z.string().max(100).optional(), default_text_tag_syntax: z.string().max(100).nullable().optional(), detailed_status: z.enum(["draft", "recalled", "order_placed", "sent_to_title_agent", "sent_to_signer", "active", "viewed", "started", "partially_complete", "attempted", "awaiting_payment", "open_order", "review_now", "sign_now", "payment_required", "meeting_in_progress", "complete", "complete_with_rejections", "expired", "esign_complete", "wet_sign_complete", "on_hold", "converted_to_wet_sign", "identify_complete_idv_passed", "identify_complete_idv_failed", "ready_for_review", "add_document", "processing", "held_for_review", "declined", "screened", "canceled"]).optional(), documents: z.array(document).optional(), expiry: z.string().max(100).nullable().optional(), external_id: z.string().max(5000).nullable().optional(), identity_report: z.object({name: z.string().max(5000).optional(), url: z.string().max(5000).optional()}).nullable().optional(), idv_use_case: z.enum(["STANDARD", "ACCOUNT_RECOVERY"]).max(50).nullable().optional(), message_signature: z.string().max(30000).nullable().optional(), message_subject: z.string().max(30000).nullable().optional(), message_to_signer: z.string().max(30000).nullable().optional(), notarization_record: notarizationRecordObject.optional(), notarization_records: z.array(notarizationRecordObject).optional(), notary_id: z.string().max(5000).nullable().optional(), notary_instructions: z.array(notaryInstructions).nullable().optional(), notary_meeting_time: z.string().max(100).nullable().optional(), organization_id: z.string().max(5000).optional(), payer: z.enum(["signer", "sender"]).optional(), recall_reason: z.string().max(5000).nullable().optional(), recipient_details_config: z.array(recipientDetailsConfig).nullable().optional(), redirect: z.object({redirect_msg: z.string().max(5000).nullable().optional(), redirect_url: z.string().max(5000).nullable().optional(), forced_redirect: z.boolean().optional()}).nullable().optional(), referral_campaign_id: z.string().max(5000).nullable().optional(), referral_code: z.string().max(5000).nullable().optional(), require_secondary_photo_id: z.boolean().optional(), sender_logo: z.string().max(5000).nullable().optional(), sender_name: z.string().optional(), signer_info: signer.optional(), signers: z.array(signers).optional(), status: z.string().max(5000).optional(), transaction_name: z.string().max(5000).optional(), transaction_type: z.string().max(5000).nullable().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 }; /** * Cancel Transaction * * POST /v1/transactions/{id}/cancel */ export const createApiV1TransactionsIdCancel = async (args: CreateApiV1TransactionsIdCancelArgs, options?: CreateApiV1TransactionsIdCancelOptions) => { const {baseUrl = "https://api.proof.com", fetch: fetchFn = fetch, apiKey} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args.document_url_version != null) query.append("document_url_version", String(args.document_url_version)) if (apiKey !== undefined) headers.set("ApiKey", apiKey) const url = `${baseUrl.replace(/\/+$/, '')}/v1/transactions/${encodeURIComponent(String(args.id))}/cancel${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "POST", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(transactionObject, await res.json()) };