import {z} from 'zod' export type GetApiAccountSubaccountTransactionsArgs = {AccountID: string, Key: string, Signature: string, StartDateTime: string, EndDateTime: string, ClientAccountID?: string | undefined, ContactID?: string | undefined, Currency?: string | undefined, TransactionType?: string | undefined, TransactionID?: number | undefined, ClientReferenceNumber?: string | undefined, ScheduledTransactionID?: string | undefined, WalletID?: string | undefined, IsFlagged?: boolean | undefined, IsRefunded?: boolean | undefined, Limit?: number | undefined, Offset?: number | undefined}; export type GetApiAccountSubaccountTransactionsOptions = {baseUrl?: string | undefined, fetch?: typeof fetch | undefined}; export const getApiAccountSubaccountTransactionsResponse = z.object({Success: z.boolean(), ErrorMessage: z.string(), NumberOfRecords: z.number().int(), Transactions: z.object({"0": z.object({TransactionID: z.number().int(), AccountName: z.string(), TransactionDateTime: z.string(), TransactionType: z.string(), TransactionTypeLabel: z.string().optional(), TransactionStatus: z.string(), Notes: z.string(), DebitAmount: z.number(), CreditAmount: z.number(), Currency: z.string(), HoldAmount: z.number(), LastModified: z.string(), ParentTransactionID: z.string(), ChildTransactionIDs: z.number().int(), ClientReferenceNumber: z.string(), ScheduledTransactionID: z.number().int(), WalletID: z.string(), ClientAccountID: z.string(), TransactionErrorCode: z.string(), TransactionFailureReason: z.string(), TransactionFlag: z.string(), ELinxRequestID: z.number().int(), IsRefunded: z.boolean(), FullName: z.string()}).optional()}).optional(), Pagination: z.object({TotalRecords: z.string(), Offset: z.string(), Limit: z.string()})}); 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 }; /** * account/subaccount/transactions * * GET /account/subaccount/transactions */ export const getApiAccountSubaccountTransactions = async (args: GetApiAccountSubaccountTransactionsArgs, options?: GetApiAccountSubaccountTransactionsOptions) => { const {baseUrl = "https://earthnode-dev.vopay.com/api/v2", fetch: fetchFn = fetch} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args.AccountID != null) query.append("AccountID", String(args.AccountID)) if (args.Key != null) query.append("Key", String(args.Key)) if (args.Signature != null) query.append("Signature", String(args.Signature)) if (args.StartDateTime != null) query.append("StartDateTime", String(args.StartDateTime)) if (args.EndDateTime != null) query.append("EndDateTime", String(args.EndDateTime)) if (args.ClientAccountID != null) query.append("ClientAccountID", String(args.ClientAccountID)) if (args.ContactID != null) query.append("ContactID", String(args.ContactID)) if (args.Currency != null) query.append("Currency", String(args.Currency)) if (args.TransactionType != null) query.append("TransactionType", String(args.TransactionType)) if (args.TransactionID != null) query.append("TransactionID", String(args.TransactionID)) if (args.ClientReferenceNumber != null) query.append("ClientReferenceNumber", String(args.ClientReferenceNumber)) if (args.ScheduledTransactionID != null) query.append("ScheduledTransactionID", String(args.ScheduledTransactionID)) if (args.WalletID != null) query.append("WalletID", String(args.WalletID)) if (args.IsFlagged != null) query.append("IsFlagged", String(args.IsFlagged)) if (args.IsRefunded != null) query.append("IsRefunded", String(args.IsRefunded)) if (args.Limit != null) query.append("Limit", String(args.Limit)) if (args.Offset != null) query.append("Offset", String(args.Offset)) const url = `${baseUrl.replace(/\/+$/, '')}/account/subaccount/transactions${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(getApiAccountSubaccountTransactionsResponse, await res.json()) };