import {z} from 'zod' export type GetApiApiCounterpartiesPaymentMethodsSupportedBanksArgs = {payoutMethodTypes: Array<'usdDomestic' | 'usdInternationalWire' | 'usdPeru' | 'usdChina' | 'usdPanama' | 'usdHongKong' | 'usdElSalvador' | 'arsAlias' | 'arsAccountNumber' | 'pixPhone' | 'pixEmail' | 'pixDocument' | 'pixBankAccount' | 'wire' | 'copDomestic' | 'copBreB' | 'copCobreBalance' | 'eurSepa' | 'mxnDomestic' | 'mxnDebitCard' | 'clpDomestic' | 'penDomestic' | 'bobDomestic' | 'crcDomestic' | 'zarDomestic'>}; export type GetApiApiCounterpartiesPaymentMethodsSupportedBanksOptions = {baseUrl?: string | undefined, bearer?: string | undefined, fetch?: typeof fetch | undefined}; export const bankInfo = z.object({id: z.string(), name: z.string()}); export const bankSelectionRequired = z.object({banks: z.array(bankInfo), type: z.literal("required")}); export const bankSelectionNotRequired = z.object({type: z.literal("notRequired")}); export const getApiApiCounterpartiesPaymentMethodsSupportedBanksResponse = z.object({arsAccountNumber: z.union([bankSelectionRequired, bankSelectionNotRequired]).optional(), arsAlias: z.union([bankSelectionRequired, bankSelectionNotRequired]).optional(), bobDomestic: z.union([bankSelectionRequired, bankSelectionNotRequired]).optional(), clpDomestic: z.union([bankSelectionRequired, bankSelectionNotRequired]).optional(), copBreB: z.union([bankSelectionRequired, bankSelectionNotRequired]).optional(), copCobreBalance: z.union([bankSelectionRequired, bankSelectionNotRequired]).optional(), copDomestic: z.union([bankSelectionRequired, bankSelectionNotRequired]).optional(), crcDomestic: z.union([bankSelectionRequired, bankSelectionNotRequired]).optional(), eurSepa: z.union([bankSelectionRequired, bankSelectionNotRequired]).optional(), mxnDebitCard: z.union([bankSelectionRequired, bankSelectionNotRequired]).optional(), mxnDomestic: z.union([bankSelectionRequired, bankSelectionNotRequired]).optional(), penDomestic: z.union([bankSelectionRequired, bankSelectionNotRequired]).optional(), pixBankAccount: z.union([bankSelectionRequired, bankSelectionNotRequired]).optional(), pixDocument: z.union([bankSelectionRequired, bankSelectionNotRequired]).optional(), pixEmail: z.union([bankSelectionRequired, bankSelectionNotRequired]).optional(), pixPhone: z.union([bankSelectionRequired, bankSelectionNotRequired]).optional(), usdChina: z.union([bankSelectionRequired, bankSelectionNotRequired]).optional(), usdDomestic: z.union([bankSelectionRequired, bankSelectionNotRequired]).optional(), usdElSalvador: z.union([bankSelectionRequired, bankSelectionNotRequired]).optional(), usdHongKong: z.union([bankSelectionRequired, bankSelectionNotRequired]).optional(), usdInternationalWire: z.union([bankSelectionRequired, bankSelectionNotRequired]).optional(), usdPanama: z.union([bankSelectionRequired, bankSelectionNotRequired]).optional(), usdPeru: z.union([bankSelectionRequired, bankSelectionNotRequired]).optional(), wire: z.union([bankSelectionRequired, bankSelectionNotRequired]).optional(), zarDomestic: z.union([bankSelectionRequired, bankSelectionNotRequired]).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 }; /** * Get Bank Requirements for Payout Method Types * * GET /api/counterparties/payment-methods/supported-banks */ export const getApiApiCounterpartiesPaymentMethodsSupportedBanks = async (args: GetApiApiCounterpartiesPaymentMethodsSupportedBanksArgs, options?: GetApiApiCounterpartiesPaymentMethodsSupportedBanksOptions) => { const {baseUrl = "https://api.muralpay.com", fetch: fetchFn = fetch, bearer} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") for (const item of args.payoutMethodTypes ?? []) query.append("payoutMethodTypes", String(item)) if (bearer !== undefined) headers.set('authorization', `Bearer ${bearer}`) const url = `${baseUrl.replace(/\/+$/, '')}/api/counterparties/payment-methods/supported-banks${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "GET", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(getApiApiCounterpartiesPaymentMethodsSupportedBanksResponse, await res.json()) };