import {z} from 'zod' export type GetApiV3MerchantsMIdCreditRefundsCrIdArgs = {'User-Agent': string, mId: string, crId: string, expand?: string | undefined}; export type GetApiV3MerchantsMIdCreditRefundsCrIdOptions = {baseUrl?: string | undefined, bearerAuth?: string | undefined, fetch?: typeof fetch | undefined}; export const getApiV3MerchantsMIdCreditRefundsCrIdResponse = z.object({id: z.string().optional(), orderRef: z.object({id: z.string().optional()}).optional(), device: z.object({id: z.string().optional()}).optional(), createdTime: z.number().int().optional(), clientCreatedTime: z.number().int().optional(), credit: z.object({id: z.string().optional()}).optional(), employee: z.object({id: z.string().optional()}).optional(), germanInfo: z.object({cardTrack2: z.string().optional(), cardSequenceNumber: z.string().optional(), transactionCaseGermany: z.string().optional(), transactionTypeGermany: z.string().optional(), terminalID: z.string().optional(), traceNumber: z.string().optional(), oldTraceNumber: z.string().optional(), receiptNumber: z.string().optional(), transactionAID: z.string().optional(), transactionMSApp: z.string().optional(), transactionScriptResults: z.string().optional(), receiptType: z.string().optional(), customerTransactionDOLValues: z.string().optional(), merchantTransactionDOLValues: z.string().optional(), merchantJournalDOL: z.string().optional(), merchantJournalDOLValues: z.string().optional(), configMerchantId: z.string().optional(), configProductLabel: z.string().optional(), hostResponseAidParBMP53: z.string().optional(), hostResponsePrintDataBM60: z.string().optional(), sepaElvReceiptFormat: z.string().optional(), sepaElvExtAppLabel: z.string().optional(), sepaElvPreNotification: z.string().optional(), sepaElvMandate: z.string().optional(), sepaElvCreditorId: z.string().optional(), sepaElvMandateId: z.string().optional(), sepaElvIban: z.string().optional()}).optional(), appTracking: z.object({developerAppId: z.string().optional(), applicationName: z.string().optional(), applicationID: z.string().optional(), applicationVersion: z.string().optional(), sourceSDK: z.string().optional(), sourceSDKVersion: z.string().optional()}).optional(), transactionInfo: z.object({languageIndicator: z.string().optional(), transactionLocale: z.string().optional(), accountSelection: z.enum(["CREDIT", "DEBIT", "CHECKING", "SAVINGS"]).optional(), fiscalInvoiceNumber: z.string().optional(), installmentsQuantity: z.number().int().optional(), installmentsPlanCode: z.string().optional(), installmentsPlanId: z.string().optional(), installmentsPlanDesc: z.string().optional(), cardTypeLabel: z.string().optional(), cardSymbol: z.string().optional(), stan: z.number().int().optional(), identityDocument: z.object({id: z.string().optional(), type: z.string().optional(), number: z.string().optional(), createdTime: z.number().int().optional(), modifiedTime: z.number().int().optional(), deletedTime: z.number().int().optional(), payment: z.object({id: z.string().optional()}).optional()}).optional(), batchNumber: z.string().optional(), receiptNumber: z.string().optional(), reversalStanRefNum: z.string().optional(), reversalStan: z.number().int().optional(), reversalMac: z.string().optional(), reversalMacKsn: z.string().optional(), terminalIdentification: z.string().optional(), externalTerminalId: z.string().optional(), merchantIdentifier: z.string().optional(), merchantNameLocation: z.string().optional(), maskedTrack2: z.string().optional(), receiptExtraData: z.string().optional(), selectedService: z.enum(["NONE", "PAYMENT", "REFUND", "CANCELLATION", "PRE_AUTH", "UPDATE_PRE_AUTH", "PAYMENT_COMPLETION", "CASH_ADVANCE", "DEFERRED_PAYMENT", "DEFERRED_PAYMENT_COMPLETION", "VOICE_AUTHORISATION", "CARDHOLDER_DETECTION", "TOKEN_REQUEST", "VERIFICATION"]).optional(), transactionResult: z.enum(["APPROVED", "DECLINED", "ABORTED", "VOICE_AUTHORISATION", "PAYMENT_PART_ONLY", "PARTIALLY_APPROVED", "NONE"]).optional(), transactionTags: z.string().optional(), txFormat: z.enum(["DEFAULT", "NEXO"]).optional(), panMask: z.string().optional(), transactionSequenceCounter: z.string().optional(), applicationPanSequenceNumber: z.string().optional(), reversalReason: z.enum(["CHIP_DECLINE", "CARDHOLDER_CANCELLATION", "COMMUNICATION_ERROR", "OTHER_REASON"]).optional(), isTokenBasedTx: z.boolean().optional(), origTransactionSequenceCounter: z.string().optional(), transactionSequenceCounterUpdate: z.string().optional(), emergencyFlag: z.boolean().optional(), entryType: z.enum(["SWIPED", "KEYED", "VOICE", "VAULTED", "OFFLINE_SWIPED", "OFFLINE_KEYED", "EMV_CONTACT", "EMV_CONTACTLESS", "MSD_CONTACTLESS", "PINPAD_MANUAL_ENTRY", "QR_CODE", "SCANNED"]).optional(), promotionalMessage: z.object({message: z.string().optional(), showOnMerchantReceipt: z.boolean().optional(), showOnCustomerReceipt: z.boolean().optional(), showOnDisplay: z.boolean().optional()}).optional(), sepaElvTransactionInfo: z.object({receiptFormat: z.string().optional(), extAppLabel: z.string().optional(), preNotification: z.string().optional(), mandate: z.string().optional(), creditorId: z.string().optional(), mandateId: z.string().optional(), iban: z.string().optional(), isMerchantForced: z.boolean().optional()}).optional(), clientCardType: z.enum(["VISA", "MC", "AMEX", "DISCOVER", "DINERS_CLUB", "JCB", "MAESTRO", "SOLO", "LASER", "CHINA_UNION_PAY", "CARTE_BLANCHE", "UNKNOWN", "GIFT_CARD", "EBT", "GIROCARD", "INTERAC", "OTHER", "RUPAY"]).optional(), explicitlySelectedApp: z.string().optional(), isSepaElv: z.boolean().optional(), cardEntryType: z.enum(["SWIPED", "KEYED", "VOICE", "VAULTED", "OFFLINE_SWIPED", "OFFLINE_KEYED", "EMV_CONTACT", "EMV_CONTACTLESS", "MSD_CONTACTLESS", "PINPAD_MANUAL_ENTRY", "QR_CODE", "SCANNED"]).optional(), printMessages: z.array(z.object({destination: z.enum(["CUSTOMER_DISPLAY", "CUSTOMER_RECEIPT", "CUSTOMER_RECEIPT_AID_PARAM", "MERCHANT_DISPLAY", "MERCHANT_RECEIPT", "MERCHANT_RECEIPT_AID_PARAM"]).optional(), content: z.string().optional()})).optional()}).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 a credit refund * * GET /v3/merchants/{mId}/credit_refunds/{crId} */ export const getApiV3MerchantsMIdCreditRefundsCrId = async (args: GetApiV3MerchantsMIdCreditRefundsCrIdArgs, options?: GetApiV3MerchantsMIdCreditRefundsCrIdOptions) => { const {baseUrl = "https://apisandbox.dev.clover.com", fetch: fetchFn = fetch, bearerAuth} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args['User-Agent'] != null) headers.set("User-Agent", String(args['User-Agent'])) if (args.expand != null) query.append("expand", String(args.expand)) if (bearerAuth !== undefined) headers.set('authorization', `Bearer ${bearerAuth}`) const url = `${baseUrl.replace(/\/+$/, '')}/v3/merchants/${encodeURIComponent(String(args.mId))}/credit_refunds/${encodeURIComponent(String(args.crId))}${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(getApiV3MerchantsMIdCreditRefundsCrIdResponse, await res.json()) };