import {z} from 'zod' export type GetApiDataApiV10ReportingConsolidatedFundingArgs = {merchantNumber: unknown, startDate: unknown, endDate: unknown, sortColumn: unknown, sortDirection: unknown, transactionBatchId: unknown, fundingRequestId: unknown, pageNumber: unknown, pageSize: unknown}; export type GetApiDataApiV10ReportingConsolidatedFundingOptions = {baseUrl: string, fetch?: typeof fetch | undefined}; export const pageSettings = z.object({pageNumber: z.unknown(), pageSize: z.unknown(), totalPages: z.unknown(), totalRecords: z.unknown(), grandTotal: z.unknown()}); export const consolidatedFundingContent = z.object({MerchantNumber: z.unknown(), ResellerBusinessDBA: z.unknown(), ResellerMerchantNumber: z.unknown(), ParentBusinessDBA: z.unknown(), ParentMerchantNumber: z.unknown(), TaxpayerLegalName: z.unknown(), BusinessDBA: z.unknown(), NextDayFunding: z.unknown(), FundingRequestID: z.unknown(), TotalDepositAmount: z.unknown(), SettlementDate: z.unknown(), ExpectedDepositDate: z.unknown(), BatchReceivedDateTime: z.unknown(), TransactionBatchID: z.unknown(), BatchNumber: z.unknown(), BatchTransactionCount: z.unknown(), BatchAmount: z.unknown(), BatchDepositAmount: z.unknown(), AcquirerReferenceNumber: z.unknown(), ApprovalCode: z.unknown(), AuthorizationAmount: z.unknown(), AuthorizationDateTime: z.unknown(), AuthorizationResponseCode: z.unknown(), AVSResult: z.unknown(), BillingCity: z.unknown(), BillingCompany: z.unknown(), BillingCountry: z.unknown(), BillingName: z.unknown(), BillingPhone: z.unknown(), BillingState: z.unknown(), BillingStreet1: z.unknown(), BillingStreet2: z.unknown(), BillingZip: z.unknown(), CardNumberMasked: z.unknown(), CardProduct: z.unknown(), CardTransactionID: z.unknown(), CardType: z.unknown(), CreditDebitName: z.unknown(), Invoice: z.unknown(), IsCardPresent: z.unknown(), IsCashAdvance: z.unknown(), IsForeignCard: z.unknown(), OrderID: z.unknown(), POSEntryModeName: z.unknown(), PurchaseOrder: z.unknown(), ReferenceNumber: z.unknown(), SalesTaxAmount: z.unknown(), ServiceFee: z.unknown(), SoftwareType: z.unknown(), TipAmount: z.unknown(), TransactionAmount: z.unknown(), TransactionDate: z.unknown(), TransactionType: z.unknown(), BaseAmount: z.unknown(), DDALastFour: z.unknown(), isConveyed: z.unknown()}); export const metadata = z.object({exchangeId: z.unknown(), timestamp: z.unknown()}); export const consolidatedFundingResponse = z.object({pageSettings: pageSettings.optional(), content: z.array(consolidatedFundingContent).optional(), metadata: metadata.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 consolidated funding * * GET /data/api/v1.0/reporting/ConsolidatedFunding */ export const getApiDataApiV10ReportingConsolidatedFunding = async (args: GetApiDataApiV10ReportingConsolidatedFundingArgs, options: GetApiDataApiV10ReportingConsolidatedFundingOptions) => { const {baseUrl, fetch: fetchFn = fetch} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args.merchantNumber != null) query.append("merchantNumber", String(args.merchantNumber)) if (args.startDate != null) query.append("startDate", String(args.startDate)) if (args.endDate != null) query.append("endDate", String(args.endDate)) if (args.sortColumn != null) query.append("sortColumn", String(args.sortColumn)) if (args.sortDirection != null) query.append("sortDirection", String(args.sortDirection)) if (args.transactionBatchId != null) query.append("transactionBatchId", String(args.transactionBatchId)) if (args.fundingRequestId != null) query.append("fundingRequestId", String(args.fundingRequestId)) if (args.pageNumber != null) query.append("pageNumber", String(args.pageNumber)) if (args.pageSize != null) query.append("pageSize", String(args.pageSize)) const url = `${baseUrl.replace(/\/+$/, '')}/data/api/v1.0/reporting/ConsolidatedFunding${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(consolidatedFundingResponse, await res.json()) };