import {z} from 'zod' export type GetApiPayoutAttributeUserTokenDestinationTokenCurrencyArgs = {user_token: string, destination_token: string, 'Idempotency-Key'?: string | undefined, Language?: string | undefined, show_latest_attr_set_token?: boolean | undefined, show_translated_labels?: boolean | undefined, include_completed_global_attributes?: boolean | undefined}; export type GetApiPayoutAttributeUserTokenDestinationTokenCurrencyOptions = {baseUrl?: string | undefined, AUTHORIZERNAME?: string | undefined, fetch?: typeof fetch | undefined}; export const attrsRequirement = z.object({token: z.string(), attr_set_token: z.string().optional(), label: z.string(), validation: z.string(), is_optional: z.boolean(), value: z.string().optional(), expected_value: z.string().optional(), type: z.enum(["CardNumber", "BankAccountType", "BankAccountNumber", "BankAccountBranchNumber", "BankName", "PhoneNumber", "Gender", "IdentificationNumber", "BillReferenceNumber", "BankRoutingNumber", "BankAccountName", "MaidenName", "SocialSecurity", "EmploymentName", "EmploymentAddress", "EmploymentPhone", "EmploymentOccupation", "EmploymentSupervisor", "RemittanceReason", "Relationship", "SecondLastName", "SWIFT", "BirthCountry", "SourceOfFunds", "DateOfBirth", "CardExpiration", "CardZip", "IdentificationType", "BankCity", "BankState", "IDSelfieCollection", "City", "Country", "IdentificationExpiration", "Address1", "IFramePaymentCollection", "PostalCode", "GuardianFullName", "GuardianGovIDType", "GuardianGovIDNumber", "GuardianConsent", "EIN", "WalletAddress", "OAuthGrant", "SecurityAnswer"]), input_type: z.enum(["text", "options", "date"]), last_attr_value_used: z.boolean().optional()}); export const getApiPayoutAttributeUserTokenDestinationTokenCurrencyResponse = z.array(attrsRequirement); 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 user attributes for destination_token * * GET /payout/attribute/{user_token}/{destination_token}/{currency} * * Also accepts auth: api_key */ export const getApiPayoutAttributeUserTokenDestinationTokenCurrency = async (args: GetApiPayoutAttributeUserTokenDestinationTokenCurrencyArgs, options?: GetApiPayoutAttributeUserTokenDestinationTokenCurrencyOptions) => { const {baseUrl = "https://api.masspay.io/v1.0.0", fetch: fetchFn = fetch, AUTHORIZERNAME} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args['Idempotency-Key'] != null) headers.set("Idempotency-Key", String(args['Idempotency-Key'])) if (args.Language != null) headers.set("Language", String(args.Language)) if (args.show_latest_attr_set_token != null) query.append("show_latest_attr_set_token", String(args.show_latest_attr_set_token)) if (args.show_translated_labels != null) query.append("show_translated_labels", String(args.show_translated_labels)) if (args.include_completed_global_attributes != null) query.append("include_completed_global_attributes", String(args.include_completed_global_attributes)) if (AUTHORIZERNAME !== undefined) headers.set("Authorization", AUTHORIZERNAME) const url = `${baseUrl.replace(/\/+$/, '')}/payout/attribute/${encodeURIComponent(String(args.user_token))}/${encodeURIComponent(String(args.destination_token))}/${encodeURIComponent(String(args.currency))}${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(getApiPayoutAttributeUserTokenDestinationTokenCurrencyResponse, await res.json()) };