import {z} from 'zod' export type CreateApiOrdersIdVoidArgs = {id: string, 'Accept-Language'?: ('es' | 'en') | undefined, 'X-Child-Company-Id'?: string | undefined}; export type CreateApiOrdersIdVoidOptions = {baseUrl?: string | undefined, bearerAuth?: string | undefined, fetch?: typeof fetch | undefined}; export const orderChannelResponse = z.object({segment: z.string().optional(), checkout_request_id: z.string().optional(), checkout_request_type: z.string().optional(), id: z.string().optional()}); export const chargeResponseChannel = z.object({segment: z.string().optional(), checkout_request_id: z.string().optional(), checkout_request_type: z.string().optional(), id: z.string().optional()}); export const orderNextActionResponseRedirectToUrl = z.object({url: z.string().optional(), return_url: z.string().optional()}); export const orderNextActionResponse = z.object({redirect_to_url: orderNextActionResponseRedirectToUrl.optional(), type: z.string().optional()}); export const chargeResponsePaymentMethod = z.discriminatedUnion("object", [z.object({type: z.string().optional(), object: z.string(), agreement: z.string().optional(), auth_code: z.number().int().nullable().optional(), cashier_id: z.string().nullable().optional(), reference: z.string().optional(), barcode_url: z.string().optional(), expires_at: z.number().int().optional(), product_type: z.string().optional(), service_name: z.string().optional(), store: z.string().nullable().optional(), store_name: z.string().optional(), customer_ip_address: z.string().optional()}), z.object({type: z.string().optional(), object: z.string(), account_type: z.string().optional(), auth_code: z.string().optional(), brand: z.string().optional(), contract_id: z.string().optional(), country: z.string().optional(), exp_month: z.string().optional(), exp_year: z.string().optional(), fraud_indicators: z.array(z.unknown()).optional(), issuer: z.string().optional(), last4: z.string().optional(), name: z.string().optional(), customer_ip_address: z.string().optional()}), z.object({type: z.string().optional(), object: z.string(), bank: z.string().optional(), clabe: z.string().optional(), description: z.string().nullable().optional(), executed_at: z.string().nullable().optional(), expires_at: z.number().int().optional(), issuing_account_bank: z.string().nullable().optional(), issuing_account_number: z.string().nullable().optional(), issuing_account_holder_name: z.string().nullable().optional(), issuing_account_tax_id: z.string().nullable().optional(), payment_attempts: z.array(z.unknown()).optional(), receiving_account_holder_name: z.string().nullable().optional(), receiving_account_number: z.string().optional(), receiving_account_bank: z.string().optional(), receiving_account_tax_id: z.string().nullable().optional(), reference_number: z.string().nullable().optional(), tracking_code: z.string().nullable().optional(), customer_ip_address: z.string().optional()}), z.object({type: z.string().optional(), object: z.literal("bnpl_payment"), cancel_url: z.string().optional(), expires_at: z.number().int(), failure_url: z.string().optional(), product_type: z.string(), redirect_url: z.string().optional(), success_url: z.string().optional()}), z.object({type: z.string().optional(), object: z.string(), deep_link: z.string(), expires_at: z.number().int().gt(0), product_type: z.string(), redirect_url: z.string(), reference: z.string()})]); export const chargeResponseRefundsData = z.object({amount: z.number().int(), auth_code: z.string().optional(), created_at: z.number().int(), expires_at: z.number().int().optional(), id: z.string(), object: z.string(), status: z.string().optional()}); export const chargeResponseRefunds = z.object({has_more: z.boolean(), object: z.string(), next_page_url: z.string().nullable().optional(), previous_page_url: z.string().nullable().optional(), data: z.array(chargeResponseRefundsData).optional()}); export const chargebackFileResponse = z.object({id: z.string().optional(), file_name: z.string().optional(), url: z.string().nullable().optional(), created_at: z.number().int().optional()}); export const chargebackResponse = z.object({id: z.string().optional(), status: z.enum(["won", "lost", "action_required", "pending_review", "under_review", "covered", "rt", "rt_sent", "represented"]).optional(), reason: z.enum(["unrecognized", "unauthorized", "unauthorized_by_client", "unrecognized_like_fraud", "insufficient_evidence", "illegible_evidence", "general", "late_evidence", "incorrect_exchange", "fraudulent_business", "billing", "twice_transaction", "transaction_not_refunded", "bank_doc_request", "unrecognized_purchase", "subscription_canceled", "copy_of_purchase", "differents_amounts", "subscription_not_requested", "damaged_products", "show_documents", "duplicate", "fraudulent", "service_canceled", "product_unacceptable", "product_not_received", "incorrect_amount", "chip_liabiliaty_shift", "credit_not_processed"]).optional(), note: z.string().nullable().optional(), followup_status: z.enum(["customer_uncontacted", "customer_contacted", "customer_unreachable"]).nullable().optional(), response_from_client: z.string().nullable().optional(), files: z.array(chargebackFileResponse).optional(), object: z.string().optional(), charge_id: z.string().optional(), created_at: z.number().int().optional(), evidence_due_by: z.number().int().optional()}).nullable(); export const chargesDataResponse = z.object({amount: z.number().int().optional(), channel: chargeResponseChannel.optional(), conekta_account_id: z.string().nullable().optional(), created_at: z.number().int(), currency: z.string(), customer_id: z.string().optional(), description: z.string().optional(), device_fingerprint: z.string().optional(), failure_code: z.string().optional(), failure_message: z.string().optional(), id: z.string(), livemode: z.boolean(), next_action: orderNextActionResponse.optional(), object: z.string(), order_id: z.string(), paid_at: z.number().int().nullable().optional(), payment_method: chargeResponsePaymentMethod.optional(), reference_id: z.string().nullable().optional(), refunds: chargeResponseRefunds.optional(), chargeback: chargebackResponse.optional(), status: z.string()}); export const orderChargesResponse = z.object({has_more: z.boolean(), object: z.string(), next_page_url: z.string().nullable().optional(), previous_page_url: z.string().nullable().optional(), data: z.array(chargesDataResponse).optional()}); export const orderResponseCheckout = z.object({allowed_payment_methods: z.array(z.string()).optional(), excluded_payment_methods: z.array(z.enum(["cash", "card", "bank_transfer", "bnpl", "pay_by_bank"])).optional(), can_not_expire: z.boolean().optional(), emails_sent: z.number().int().optional(), exclude_card_networks: z.array(z.enum(["visa", "mastercard", "amex"])).optional(), expires_at: z.number().int().optional(), failure_url: z.string().optional(), force_3ds_flow: z.boolean().optional(), force_save_card: z.boolean().nullable().optional(), id: z.string(), is_redirect_on_failure: z.boolean().optional(), livemode: z.boolean(), max_failed_retries: z.number().int().nullable().optional(), metadata: z.record(z.string(), z.unknown()).optional(), monthly_installments_enabled: z.boolean().optional(), monthly_installments_options: z.array(z.number().int()).optional(), name: z.string(), needs_shipping_contact: z.boolean().optional(), object: z.string(), on_demand_enabled: z.boolean().nullable().optional(), paid_payments_count: z.number().int().optional(), recurrent: z.boolean().optional(), redirection_time: z.number().int().nullable().optional(), slug: z.string().optional(), sms_sent: z.number().int().optional(), success_url: z.string().optional(), starts_at: z.number().int().optional(), status: z.string().optional(), type: z.string(), url: z.string().optional()}); export const orderResponseCustomerInfo = z.object({object: z.string().optional(), customer_custom_reference: z.string().nullable().optional(), name: z.string().optional(), email: z.string().optional(), phone: z.string().optional(), corporate: z.boolean().optional(), customer_id: z.string().optional()}); export const discountLinesDataResponse = z.object({amount: z.number().int().gte(0), code: z.string(), type: z.string(), id: z.string(), object: z.string(), parent_id: z.string()}); export const orderResponseDiscountLines = z.object({has_more: z.boolean(), object: z.string(), next_page_url: z.string().nullable().optional(), previous_page_url: z.string().nullable().optional(), data: z.array(discountLinesDataResponse).optional()}).nullable(); export const orderTaxRequestMetadataValue = z.union([z.string().max(249), z.number().int(), z.number(), z.boolean()]); export const taxLinesDataResponse = z.object({amount: z.number().int().gte(0), description: z.string().min(3), metadata: z.record(z.string(), orderTaxRequestMetadataValue).optional(), id: z.string(), object: z.string().optional(), parent_id: z.string().optional()}); export const orderResponseTaxLines = z.object({has_more: z.boolean(), object: z.string(), next_page_url: z.string().nullable().optional(), previous_page_url: z.string().nullable().optional(), data: z.array(taxLinesDataResponse).optional()}).nullable(); export const shippingLinesDataResponse = z.object({amount: z.number().int().gte(0), carrier: z.string().min(3).max(249).optional(), tracking_number: z.string().min(3).max(249).optional(), method: z.string().min(3).max(249).optional(), metadata: z.record(z.string(), orderTaxRequestMetadataValue).optional(), id: z.string().optional(), object: z.string().optional(), parent_id: z.string().optional()}); export const orderResponseShippingLines = z.object({has_more: z.boolean(), object: z.string(), next_page_url: z.string().nullable().optional(), previous_page_url: z.string().nullable().optional(), data: z.array(shippingLinesDataResponse).optional()}).nullable(); export const orderFiscalEntityAddressResponse = z.object({street1: z.string(), street2: z.string().nullable().optional(), postal_code: z.string(), city: z.string(), state: z.string().optional(), country: z.string(), external_number: z.string(), object: z.string().optional()}); export const orderFiscalEntityResponse = z.object({address: orderFiscalEntityAddressResponse, email: z.string().nullable().optional(), metadata: z.record(z.string(), z.unknown()).optional(), name: z.string().nullable().optional(), tax_id: z.string().nullable().optional(), id: z.string(), created_at: z.number().int(), object: z.string(), phone: z.string().nullable().optional()}).nullable(); export const productDataResponse = z.object({antifraud_info: z.record(z.string(), z.unknown()).optional(), brand: z.string().min(2).max(249).optional(), description: z.string().min(3).max(249).optional(), metadata: z.record(z.string(), orderTaxRequestMetadataValue).optional(), name: z.string().min(3).max(249), quantity: z.number().int().gte(1), sku: z.string().min(1).max(249).optional(), tags: z.array(z.string().min(2).max(249)).optional(), unit_price: z.number().int().gte(0), id: z.string().optional(), object: z.string().optional(), parent_id: z.string().optional()}); export const orderResponseProducts = z.object({has_more: z.boolean(), object: z.string(), next_page_url: z.string().nullable().optional(), previous_page_url: z.string().nullable().optional(), data: z.array(productDataResponse).optional()}); export const customerShippingContactsAddress = z.object({object: z.string().optional(), street1: z.string().optional(), street2: z.string().optional(), postal_code: z.string().optional(), city: z.string().optional(), state: z.string().optional(), country: z.string().optional(), residential: z.boolean().nullable().optional()}); export const orderResponseShippingContact = z.object({created_at: z.number().int().optional(), id: z.string().optional(), object: z.string().optional(), phone: z.string().optional(), receiver: z.string().optional(), between_streets: z.string().nullable().optional(), address: customerShippingContactsAddress.optional(), parent_id: z.string().optional(), default: z.boolean().optional(), metadata: z.record(z.string(), z.unknown()).optional(), deleted: z.boolean().optional()}); export const orderResponse = z.object({amount: z.number().int(), amount_refunded: z.number().int().optional(), channel: orderChannelResponse.optional(), charges: orderChargesResponse.optional(), checkout: orderResponseCheckout.optional(), created_at: z.number().int(), currency: z.string(), customer_info: orderResponseCustomerInfo.optional(), discount_lines: orderResponseDiscountLines.optional(), tax_lines: orderResponseTaxLines.optional(), shipping_lines: orderResponseShippingLines.optional(), fiscal_entity: orderFiscalEntityResponse.optional(), id: z.string(), is_refundable: z.boolean().optional(), line_items: orderResponseProducts.optional(), livemode: z.boolean(), metadata: z.record(z.string(), z.unknown()).optional(), next_action: orderNextActionResponse.optional(), object: z.string(), payment_status: z.string().optional(), processing_mode: z.string().optional(), shipping_contact: orderResponseShippingContact.optional(), updated_at: z.number().int().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 }; /** * Void Order * * POST /orders/{id}/void */ export const createApiOrdersIdVoid = async (args: CreateApiOrdersIdVoidArgs, options?: CreateApiOrdersIdVoidOptions) => { const {baseUrl = "https://api.conekta.io", fetch: fetchFn = fetch, bearerAuth} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/vnd.conekta-v2.3.0+json") if (args['Accept-Language'] != null) headers.set("Accept-Language", String(args['Accept-Language'])) if (args['X-Child-Company-Id'] != null) headers.set("X-Child-Company-Id", String(args['X-Child-Company-Id'])) if (bearerAuth !== undefined) headers.set('authorization', `Bearer ${bearerAuth}`) const url = `${baseUrl.replace(/\/+$/, '')}/orders/${encodeURIComponent(String(args.id))}/void${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(orderResponse, await res.json()) };