import {z} from 'zod' export type GetApiPaymentApiV11PaymentInfoEncryptedPubIdArgs = {encryptedPubId: string}; export type GetApiPaymentApiV11PaymentInfoEncryptedPubIdOptions = {baseUrl: string, fetch?: typeof fetch | undefined}; export const paymentIntentType = z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4)]); export const payLaterExchangeRateConfig = z.enum(["None", "ExchangeRateOfCardSetupDay", "ExchangeRateOfPaymentDay"]); export const paymentStatus = z.enum(["RequiresPaymentMethod", "RequiresConfirmation", "RequiresAction", "Processing", "RequiresCapture", "Canceled", "Succeeded", "Scheduled", "PartialRefund", "Refund", "DisputedNeedsResponse", "DisputedUnderReview", "DisputedChargeRefunded", "DisputedWon", "DisputedLost", "DisputedCanceled", "DisputedExpired", "DisputedWarningClosed", "DisputedAccepted", "DisputedArbitrationSentToScheme", "DisputedEvidenceAcknowledgedByScheme", "DisputedEvidenceSubmitted", "DisputedResolved", "Voided", "DisputedEvidenceRequired", "DisputedArbitrationEvidenceSubmitted", "DisputedArbitrationWon", "DisputedArbitrationLost"]); export const orderHotelDetailsPaymentInfoDto = z.object({hotelName: z.string().nullable().optional(), roomType: z.string().nullable().optional(), mealType: z.string().nullable().optional(), checkInDate: z.string().optional(), checkOutDate: z.string().optional(), ratePlanCode: z.string().nullable().optional(), ratePlanDescription: z.string().nullable().optional(), notes: z.string().nullable().optional()}); export const merchantStylesDo = z.object({textFont: z.string().nullable().optional(), textFontTC: z.string().nullable().optional(), textContinueButton: z.string().nullable().optional(), textColor: z.string().nullable().optional(), background: z.string().nullable().optional(), backgroundPicture: z.string().nullable().optional(), continueButtonColor: z.string().nullable().optional(), backButtonColor: z.string().nullable().optional(), hideCardBrandBanner: z.boolean().nullable().optional(), image: z.string().nullable().optional()}); export const scheduledPaymentStatus = z.enum(["Pending", "Paid", "Failed", "Cancelled", "Refunded"]); export const scheduledPaymentDTO = z.object({id: z.number().int().optional(), label: z.string().nullable().optional(), amountInOrderCurrency: z.number().nullable().optional(), currencyToPay: z.string().nullable().optional(), dateTime: z.string().optional(), status: scheduledPaymentStatus.optional()}); export const orderItemPaymentInfoDto = z.object({itemRef: z.string().nullable().optional(), currencyIso: z.string().nullable().optional(), amount: z.number().optional(), description: z.string().nullable().optional(), productCode: z.string().nullable().optional(), transactionTypeId: z.number().int().optional(), checkInDate: z.string().nullable().optional(), checkOutDate: z.string().nullable().optional()}); export const paymentProviderType = z.enum(["Stripe", "CitiBank", "Checkout", "EvyPay", "Mpgs", "PayGate"]); export const allowedPaymentProvider = z.object({provider: paymentProviderType.optional(), publicKey: z.string().nullable().optional()}); export const paymentInfoResponseDto = z.object({merchantName: z.string().nullable().optional(), merchantLogoBase64: z.string().nullable().optional(), merchantPubKey: z.string().nullable().optional(), paymentAccountPubKey: z.string().nullable().optional(), termsAndConditionsHTML: z.string().nullable().optional(), description: z.string().nullable().optional(), imageLink: z.string().nullable().optional(), submitLabel: z.string().nullable().optional(), payerName: z.string().nullable().optional(), payerEmail: z.string().nullable().optional(), uniquePayerEmail: z.string().nullable().optional(), payerPhone: z.string().nullable().optional(), payerAddress: z.string().nullable().optional(), payerCity: z.string().nullable().optional(), payerPostCode: z.string().nullable().optional(), country: z.string().nullable().optional(), currency: z.string().nullable().optional(), type: paymentIntentType.optional(), isConvertAllowed: z.boolean().optional(), payLaterExchangeRateConfig: payLaterExchangeRateConfig.optional(), language: z.string().nullable().optional(), amount: z.number().optional(), paymentIntentAmount: z.number().optional(), returnUrlSuccess: z.string().nullable().optional(), returnUrlCancel: z.string().nullable().optional(), showCountryDropdown: z.boolean().optional(), isPaymentByCardAllowed: z.boolean().optional(), status: paymentStatus.optional(), paymentAllowed: z.boolean().optional(), paymentMessage: z.string().nullable().optional(), hotelDetails: orderHotelDetailsPaymentInfoDto.optional(), styles: merchantStylesDo.optional(), paymentSchedule: z.array(scheduledPaymentDTO).nullable().optional(), lineItems: z.array(orderItemPaymentInfoDto).nullable().optional(), disallowedCardBrands: z.array(z.string()).nullable().optional(), JsonStyle: z.string().nullable().optional(), showSaveCard: z.boolean().optional(), currencyDecimals: z.number().int().optional(), showPayNow: z.boolean().optional(), confirmation3dsLink: z.string().nullable().optional(), paymentProcessedDate: z.string().nullable().optional(), paymentCardLast4: z.string().nullable().optional(), clientSecret: z.string().nullable().optional(), isCardBrandBannerVisible: z.boolean().optional(), providerType: paymentProviderType.optional(), transactionId: z.string().nullable().optional(), allowedPaymentProviders: z.array(allowedPaymentProvider).nullable().optional(), metadata3ds: z.string().nullable().optional()}); export const paymentInfoResponseDtoPaymentInfoErrorsResultModel = z.object({result: paymentInfoResponseDto.optional(), errors: z.object({CUSTOM: z.array(z.string()).optional(), PAYMENT_NOT_FOUND: z.array(z.string()).optional(), MERCHANT_SERVICE_UNAVAILABLE: z.array(z.string()).optional(), ROUTING_IS_FAILED: z.array(z.string()).optional(), MERCHANT_IS_NOT_FOUND: z.array(z.string()).optional()}).nullable().optional(), hasErrors: z.boolean().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 /payment-api/v1.1/payment-info/{encryptedPubId} */ export const getApiPaymentApiV11PaymentInfoEncryptedPubId = async (args: GetApiPaymentApiV11PaymentInfoEncryptedPubIdArgs, options: GetApiPaymentApiV11PaymentInfoEncryptedPubIdOptions) => { const {baseUrl, fetch: fetchFn = fetch} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") const url = `${baseUrl.replace(/\/+$/, '')}/payment-api/v1.1/payment-info/${encodeURIComponent(String(args.encryptedPubId))}${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(paymentInfoResponseDtoPaymentInfoErrorsResultModel, await res.json()) };