import {z} from 'zod' export type MerchantTestDataRequest = {options?: ({paymentRequestCount?: number | undefined, customerCount?: number | undefined, dateRangeInDays?: number | undefined, includeRefunds?: boolean | undefined, includeFailures?: boolean | undefined, scenarioProfile?: ('standard' | 'high-volume' | 'cross-border' | 'failure-testing') | undefined, includePayouts?: boolean | undefined}) | undefined}; export type CreateApiApiV1SeedsMerchantMerchantIdTestDataArgs = {merchantId: string, body: MerchantTestDataRequest}; export type CreateApiApiV1SeedsMerchantMerchantIdTestDataOptions = {baseUrl?: string | undefined, bearerAuth?: string | undefined, fetch?: typeof fetch | undefined}; export const merchantTestDataResponse = z.object({success: z.boolean(), data: z.object({message: z.string(), summary: z.object({merchantId: z.string(), paymentRequestsCreated: z.number().int(), transactionsCreated: z.number().int(), customersCreated: z.number().int(), timeElapsed: z.string(), payoutBatchesCreated: z.number().int().optional()}), details: z.object({paymentRequestsByStatus: z.object({completed: z.number().int(), pending: z.number().int(), failed: z.number().int(), cancelled: z.number().int()}), transactionsByType: z.object({payment: z.number().int(), refund: z.number().int()}), transactionsByStatus: z.object({completed: z.number().int(), pending: z.number().int(), failed: z.number().int(), cancelled: z.number().int()}), amountDistribution: z.object({small: z.number().int(), medium: z.number().int(), large: z.number().int()}), currencyDistribution: z.object({})})})}); 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 }; /** * Generate test payment requests and transactions for a specific merchant * * POST /api/v1/seeds/merchant/{merchantId}/test-data */ export const createApiApiV1SeedsMerchantMerchantIdTestData = async (args: CreateApiApiV1SeedsMerchantMerchantIdTestDataArgs, options?: CreateApiApiV1SeedsMerchantMerchantIdTestDataOptions) => { const {baseUrl = "https://core.quidkey.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(/\/+$/, '')}/api/v1/seeds/merchant/${encodeURIComponent(String(args.merchantId))}/test-data${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "POST", 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(merchantTestDataResponse, await res.json()) };