import {z} from 'zod' export type PaymentMethodsCommonUpdatePaymentMethod = {is_primary?: boolean | undefined, name?: string | undefined}; export type PatchApiV1CompaniesCompanyIdPaymentMethodsIdArgs = {company_id: string, id: string, body: PaymentMethodsCommonUpdatePaymentMethod}; export type PatchApiV1CompaniesCompanyIdPaymentMethodsIdOptions = {baseUrl?: string | undefined, BearerAuth?: string | undefined, fetch?: typeof fetch | undefined}; export const sharedSelfLink = z.string(); export const paymentMethodsCommonPaymentMethodLinks = z.object({self: sharedSelfLink, company: z.string()}); export const isoCountryCode = z.enum(["AD", "AE", "AF", "AG", "AI", "AL", "AM", "AO", "AR", "AS", "AT", "AU", "AW", "AX", "AZ", "BA", "BB", "BD", "BE", "BF", "BG", "BH", "BI", "BJ", "BL", "BM", "BN", "BO", "BQ", "BR", "BS", "BT", "BW", "BZ", "CA", "CC", "CD", "CF", "CG", "CH", "CI", "CL", "CM", "CN", "CO", "CR", "CV", "CX", "CY", "CZ", "DE", "DJ", "DK", "DM", "DO", "DZ", "EC", "EE", "EG", "EH", "ER", "ES", "ET", "FI", "FJ", "FK", "FM", "FO", "FR", "GA", "GB", "GD", "GE", "GF", "GG", "GH", "GI", "GL", "GM", "GN", "GP", "GQ", "GR", "GT", "GU", "GW", "GY", "HK", "HM", "HN", "HR", "HT", "HU", "ID", "IE", "IL", "IM", "IN", "IQ", "IS", "IT", "JE", "JM", "JO", "JP", "KE", "KG", "KH", "KI", "KM", "KN", "KR", "KW", "KY", "KZ", "LA", "LB", "LC", "LI", "LK", "LR", "LS", "LT", "LU", "LV", "MA", "MC", "MD", "ME", "MF", "MG", "MH", "MK", "ML", "MN", "MO", "MP", "MQ", "MR", "MS", "MT", "MU", "MV", "MX", "MW", "MY", "MZ", "NA", "NC", "NE", "NF", "NG", "NI", "NL", "NO", "NP", "NR", "NU", "NZ", "OM", "PA", "PE", "PF", "PG", "PH", "PK", "PL", "PM", "PN", "PR", "PT", "PW", "PY", "QA", "RE", "RO", "RS", "RW", "SA", "SB", "SC", "SE", "SG", "SH", "SI", "SJ", "SK", "SL", "SM", "SN", "SO", "SR", "ST", "SV", "SX", "SZ", "TC", "TD", "TF", "TG", "TH", "TJ", "TK", "TL", "TM", "TN", "TO", "TR", "TT", "TV", "TW", "TZ", "UA", "UG", "UM", "US", "UY", "UZ", "VA", "VC", "VI", "VN", "VU", "XK", "WF", "WS", "XX", "YE", "YT", "ZA", "ZM", "ZW"]).min(2).max(2); export const paymentMethodsAddressPaymentMethodAddressTypeDetails = z.object({address_line_1: z.string(), address_line_2: z.string().nullable().optional(), city: z.string(), country: isoCountryCode, postal_code: z.string(), state: z.string(), attention_line: z.string().optional(), print_business_name: z.string().nullable().optional(), print_name: z.string().nullable().optional(), recipient: z.string().nullable().optional()}); export const paymentMethodsBankPaymentMethodBankTypeDetails = z.object({account_number: z.string(), account_type: z.enum(["checking", "savings"]), currency_code: z.enum(["AED", "AUD", "BHD", "BRL", "BSD", "CAD", "CHF", "CNY", "COP", "CRC", "CZK", "DKK", "DOP", "EGP", "EUR", "GBP", "GHS", "GTQ", "HKD", "HNL", "HUF", "IDR", "INR", "ILS", "JPY", "KES", "KRW", "KWD", "KZT", "MOP", "MXN", "MYR", "NGN", "NIO", "NOK", "NZD", "OMR", "PAB", "PEN", "PHP", "PKR", "PLN", "QAR", "RON", "SAR", "SEK", "SGD", "THB", "TRY", "TWD", "UGX", "USD", "UYU", "VND", "ZAR"]).min(3).max(3).optional(), institution_name: z.string(), logo: z.string().optional(), primary_color: z.string().min(4).max(7).optional(), routing_number: z.string().optional()}); export const isoCurrencyCode = z.enum(["AED", "AUD", "BHD", "BRL", "BSD", "CAD", "CHF", "CNY", "COP", "CRC", "CZK", "DKK", "DOP", "EGP", "EUR", "GBP", "GHS", "GTQ", "HKD", "HNL", "HUF", "IDR", "INR", "ILS", "JPY", "KES", "KRW", "KWD", "KZT", "MOP", "MXN", "MYR", "NGN", "NIO", "NOK", "NZD", "OMR", "PAB", "PEN", "PHP", "PKR", "PLN", "QAR", "RON", "SAR", "SEK", "SGD", "THB", "TRY", "TWD", "UGX", "USD", "UYU", "VND", "ZAR"]).min(3).max(3); export const paymentMethodsCardPaymentMethodCardTypeDetails = z.object({card_type: z.literal("debit").optional(), country_code: isoCountryCode.optional(), currency_code: isoCurrencyCode.optional(), expiration: z.object({month: z.string().optional(), year: z.string().optional()}).optional(), institution_name: z.string().optional(), is_instant_supported: z.boolean().optional(), last_four_digits: z.string().optional(), network: z.enum(["mastercard", "visa"]).optional()}); export const sharedAddress = z.object({address_line_1: z.string(), address_line_2: z.string().nullable().optional(), city: z.string(), country: isoCountryCode, postal_code: z.string(), state: z.string().optional()}); export const paymentMethodsInternationalPaymentMethodInternationalTypeDetails = z.object({account_number: z.string().nullable().optional(), bank_code: z.string().nullable().optional(), beneficiary_details: z.record(z.string(), z.unknown()).nullable().optional(), bic_swift: z.string().nullable().optional(), branch_code: z.string().nullable().optional(), bsb_code: z.string().nullable().optional(), clabe: z.string().nullable().optional(), cnaps: z.string().nullable().optional(), country_code: isoCountryCode.optional(), currency_code: isoCurrencyCode.optional(), iban: z.string().nullable().optional(), ifsc: z.string().nullable().optional(), institution_name: z.string().nullable().optional(), payment_types: z.enum(["all", "priority", "regular"]).optional(), recipient_address: sharedAddress.optional(), sort_code: z.string().nullable().optional()}); export const paymentMethodsPaypalPaymentMethodPayPalTypeDetails = z.object({email: z.string()}); export const paymentMethodsDiscriminatedPaymentMethod = z.discriminatedUnion("type", [z.object({object: z.literal("PaymentMethod"), id: z.string(), archived_by: z.enum(["system", "team_member"]).nullable().optional(), created_at: z.string(), delivery_method: z.enum(["ach", "card", "check", "international", "paypal"]), delivery_methods: z.object({ach: z.array(z.enum(["ach_expedited", "ach_next_day", "ach_same_day", "ach_standard", "real_time_payment"])).optional(), check: z.array(z.enum(["check_standard", "check_international", "check_next_day", "check_priority", "check_priority_express", "check_priority_signature", "check_standard_certified", "check_two_day"])).optional(), card: z.array(z.literal("card_instant")).optional(), international: z.array(z.enum(["international_ach", "international_swift"])).optional(), paypal: z.array(z.literal("paypal_direct")).optional()}).optional(), is_archived: z.boolean(), is_instant_preferred: z.boolean(), is_created_by_company: z.boolean(), is_last_chosen_by_company: z.boolean().optional(), is_preferred_by_company: z.boolean(), is_primary: z.boolean(), is_valid: z.boolean(), name: z.string(), verification_status: z.enum(["failed", "not_verified", "pending", "verified"]), links: paymentMethodsCommonPaymentMethodLinks, type: z.literal("address"), type_details: paymentMethodsAddressPaymentMethodAddressTypeDetails}), z.object({object: z.literal("PaymentMethod"), id: z.string(), archived_by: z.enum(["system", "team_member"]).nullable().optional(), created_at: z.string(), delivery_method: z.enum(["ach", "card", "check", "international", "paypal"]), delivery_methods: z.object({ach: z.array(z.enum(["ach_expedited", "ach_next_day", "ach_same_day", "ach_standard", "real_time_payment"])).optional(), check: z.array(z.enum(["check_standard", "check_international", "check_next_day", "check_priority", "check_priority_express", "check_priority_signature", "check_standard_certified", "check_two_day"])).optional(), card: z.array(z.literal("card_instant")).optional(), international: z.array(z.enum(["international_ach", "international_swift"])).optional(), paypal: z.array(z.literal("paypal_direct")).optional()}).optional(), is_archived: z.boolean(), is_instant_preferred: z.boolean(), is_created_by_company: z.boolean(), is_last_chosen_by_company: z.boolean().optional(), is_preferred_by_company: z.boolean(), is_primary: z.boolean(), is_valid: z.boolean(), name: z.string(), verification_status: z.enum(["failed", "not_verified", "pending", "verified"]), links: paymentMethodsCommonPaymentMethodLinks, type: z.literal("bank"), type_details: paymentMethodsBankPaymentMethodBankTypeDetails}), z.object({object: z.literal("PaymentMethod"), id: z.string(), archived_by: z.enum(["system", "team_member"]).nullable().optional(), created_at: z.string(), delivery_method: z.enum(["ach", "card", "check", "international", "paypal"]), delivery_methods: z.object({ach: z.array(z.enum(["ach_expedited", "ach_next_day", "ach_same_day", "ach_standard", "real_time_payment"])).optional(), check: z.array(z.enum(["check_standard", "check_international", "check_next_day", "check_priority", "check_priority_express", "check_priority_signature", "check_standard_certified", "check_two_day"])).optional(), card: z.array(z.literal("card_instant")).optional(), international: z.array(z.enum(["international_ach", "international_swift"])).optional(), paypal: z.array(z.literal("paypal_direct")).optional()}).optional(), is_archived: z.boolean(), is_instant_preferred: z.boolean(), is_created_by_company: z.boolean(), is_last_chosen_by_company: z.boolean().optional(), is_preferred_by_company: z.boolean(), is_primary: z.boolean(), is_valid: z.boolean(), name: z.string(), verification_status: z.enum(["failed", "not_verified", "pending", "verified"]), links: paymentMethodsCommonPaymentMethodLinks, type: z.literal("card"), type_details: paymentMethodsCardPaymentMethodCardTypeDetails}), z.object({object: z.literal("PaymentMethod"), id: z.string(), archived_by: z.enum(["system", "team_member"]).nullable().optional(), created_at: z.string(), delivery_method: z.enum(["ach", "card", "check", "international", "paypal"]), delivery_methods: z.object({ach: z.array(z.enum(["ach_expedited", "ach_next_day", "ach_same_day", "ach_standard", "real_time_payment"])).optional(), check: z.array(z.enum(["check_standard", "check_international", "check_next_day", "check_priority", "check_priority_express", "check_priority_signature", "check_standard_certified", "check_two_day"])).optional(), card: z.array(z.literal("card_instant")).optional(), international: z.array(z.enum(["international_ach", "international_swift"])).optional(), paypal: z.array(z.literal("paypal_direct")).optional()}).optional(), is_archived: z.boolean(), is_instant_preferred: z.boolean(), is_created_by_company: z.boolean(), is_last_chosen_by_company: z.boolean().optional(), is_preferred_by_company: z.boolean(), is_primary: z.boolean(), is_valid: z.boolean(), name: z.string(), verification_status: z.enum(["failed", "not_verified", "pending", "verified"]), links: paymentMethodsCommonPaymentMethodLinks, type: z.literal("international"), type_details: paymentMethodsInternationalPaymentMethodInternationalTypeDetails}), z.object({object: z.literal("PaymentMethod"), id: z.string(), archived_by: z.enum(["system", "team_member"]).nullable().optional(), created_at: z.string(), delivery_method: z.enum(["ach", "card", "check", "international", "paypal"]), delivery_methods: z.object({ach: z.array(z.enum(["ach_expedited", "ach_next_day", "ach_same_day", "ach_standard", "real_time_payment"])).optional(), check: z.array(z.enum(["check_standard", "check_international", "check_next_day", "check_priority", "check_priority_express", "check_priority_signature", "check_standard_certified", "check_two_day"])).optional(), card: z.array(z.literal("card_instant")).optional(), international: z.array(z.enum(["international_ach", "international_swift"])).optional(), paypal: z.array(z.literal("paypal_direct")).optional()}).optional(), is_archived: z.boolean(), is_instant_preferred: z.boolean(), is_created_by_company: z.boolean(), is_last_chosen_by_company: z.boolean().optional(), is_preferred_by_company: z.boolean(), is_primary: z.boolean(), is_valid: z.boolean(), name: z.string(), verification_status: z.enum(["failed", "not_verified", "pending", "verified"]), links: paymentMethodsCommonPaymentMethodLinks, type: z.literal("paypal"), type_details: paymentMethodsPaypalPaymentMethodPayPalTypeDetails})]); 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 }; /** * Update a Payment Method * * PATCH /v1/companies/{company_id}/payment-methods/{id} */ export const patchApiV1CompaniesCompanyIdPaymentMethodsId = async (args: PatchApiV1CompaniesCompanyIdPaymentMethodsIdArgs, options?: PatchApiV1CompaniesCompanyIdPaymentMethodsIdOptions) => { const {baseUrl = "https://api.routable.com", fetch: fetchFn = fetch, BearerAuth} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") if (BearerAuth !== undefined) headers.set('authorization', `Bearer ${BearerAuth}`) const url = `${baseUrl.replace(/\/+$/, '')}/v1/companies/${encodeURIComponent(String(args.company_id))}/payment-methods/${encodeURIComponent(String(args.id))}${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "PATCH", 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(paymentMethodsDiscriminatedPaymentMethod, await res.json()) };