import {z} from 'zod' export type GetApiPaymentApiV1PmsPostingHistoryOrderIdArgs = {orderId: number}; export type GetApiPaymentApiV1PmsPostingHistoryOrderIdOptions = {baseUrl: string, fetch?: typeof fetch | undefined}; export const orderStatus = z.enum(["FuturePayment", "PartiallyPaid", "Paid", "PartiallyRefunded", "Refunded", "Cancelled", "CancelledWithPayments", "CancelledAndRefunded", "PendingPayment", "UserActionRequired", "LinkExpired", "VCCPayment", "Tokenized", "Disputed", "Voided"]); export const bookingSourceType = z.enum(["None", "Ows", "Cendyn", "Oracle"]); export const orderPayerDetailsItemGetModel = z.object({customerId: z.number().int().optional(), payerTitle: z.string().nullable().optional(), payerName: z.string().nullable().optional(), payerEmail: z.string().nullable().optional(), payerCountry: z.string().nullable().optional(), payerPhone: z.string().nullable().optional()}); export const orderTravelerDetailsItemGetModel = z.object({travelerName: z.string().nullable().optional(), travelerEmail: z.string().nullable().optional(), travelerAddress: z.string().nullable().optional(), travelerCity: z.string().nullable().optional(), travelerTitle: z.string().nullable().optional(), travelerPhone: z.string().nullable().optional()}); export const paymentMode = z.enum(["Payment", "PayLater", "Token", "Terminal", "Authorize"]); export const scheduledPaymentStatus = z.enum(["Pending", "Paid", "Failed", "Cancelled", "Refunded"]); export const scheduledPaymentItemGetModel = z.object({id: z.number().int().optional(), label: z.string().nullable().optional(), dateTime: z.string().optional(), amountInOrderCurrency: z.number().nullable().optional(), currencyToPay: z.string().nullable().optional(), amountInCurrencyToPay: z.number().nullable().optional(), exchangeRate: z.number().nullable().optional(), status: scheduledPaymentStatus.optional(), orderItemId: z.number().int().optional()}); export const orderLineItemGetModel = z.object({id: z.number().int().optional(), itemRef: z.string().nullable().optional(), currency: z.string().nullable().optional(), amount: z.number().optional(), description: z.string().nullable().optional(), productCode: z.string().nullable().optional(), tax: z.number().optional(), amountAfterTax: z.number().optional(), pmsReferenceNo: z.string().nullable().optional(), crsReferenceNo: z.string().nullable().optional(), mealType: z.string().nullable().optional(), roomType: z.string().nullable().optional(), ratePlanCode: z.string().nullable().optional(), transactionTypeId: z.number().int().optional(), checkInDate: z.string().nullable().optional(), checkOutDate: z.string().nullable().optional(), pmsPosted: z.boolean().optional(), pmsPostedDate: z.string().nullable().optional(), pmsPostingProcessed: z.boolean().optional(), metadata: z.record(z.string(), z.string().nullable()).nullable().optional()}); 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 paymentIntentType = z.union([z.literal(0), z.literal(1), z.literal(2), z.literal(3), z.literal(4)]); export const orderPaymentMethodItemGetModel = z.object({type: z.string().nullable().optional(), brand: z.string().nullable().optional(), brandProductCode: z.string().nullable().optional(), issueCountry: z.string().nullable().optional(), description: z.string().nullable().optional(), last4: z.string().nullable().optional(), expMonth: z.number().int().optional(), expYear: z.number().int().optional()}); export const feeType = z.enum(["DM", "IN", "FX", "APM", "RF", "FX_NSC", "AC", "Monthly", "Dispute", "Remittance", "PayoutFXC", "PayoutFXFee"]); export const orderPaymentFeeItemGetModel = z.object({feeType: feeType.optional(), fixedValue: z.number().optional(), variableValue: z.number().optional()}); export const orderPaymentFailDetailsItemGetModel = z.object({code: z.string().nullable().optional(), message: z.string().nullable().optional(), networkStatus: z.string().nullable().optional(), reason: z.string().nullable().optional(), riskLevel: z.string().nullable().optional(), sellerMessage: z.string().nullable().optional(), type: z.string().nullable().optional(), dateTime: z.string().optional(), amount: z.number().nullable().optional(), currency: z.string().nullable().optional(), paymentMethod: orderPaymentMethodItemGetModel.optional()}); export const refundStatus = z.enum(["Pending", "Succeeded", "Failed", "Canceled"]); export const orderPaymentRefundItemGetModel = z.object({id: z.number().int().optional(), externalId: z.string().nullable().optional(), paymentIntentId: z.number().int().optional(), orderId: z.number().int().optional(), status: refundStatus.optional(), created: z.string().optional(), amount: z.number().optional(), currency: z.string().nullable().optional(), requestedAmount: z.number().optional(), requestedCurrency: z.string().nullable().optional(), usAmountRequested: z.number().optional(), usAmountRefunded: z.number().optional(), createUserId: z.string().nullable().optional(), createdUserName: z.string().nullable().optional(), scheduledPaymentId: z.number().int().nullable().optional(), orderItemId: z.number().int().nullable().optional()}); export const orderPaymentItemGetModel = z.object({id: z.number().int().optional(), scheduledPaymentId: z.number().int().nullable().optional(), currencyIso: z.string().nullable().optional(), amount: z.number().optional(), netAmount: z.number().optional(), paymentCurrencyIso: z.string().nullable().optional(), paymentAmount: z.number().optional(), exchangeRate: z.number().nullable().optional(), feePercAmount: z.number().nullable().optional(), paymentProcessedDate: z.string().optional(), payoutAvailableDate: z.string().nullable().optional(), status: paymentStatus.optional(), externalId: z.string().nullable().optional(), varianceAmount: z.number().nullable().optional(), autoConverted: z.boolean().nullable().optional(), type: paymentIntentType.optional(), isDirect: z.boolean().optional(), authCode: z.string().nullable().optional(), paymentMethod: orderPaymentMethodItemGetModel.optional(), fees: z.array(orderPaymentFeeItemGetModel).nullable().optional(), failures: z.array(orderPaymentFailDetailsItemGetModel).nullable().optional(), refunds: z.array(orderPaymentRefundItemGetModel).nullable().optional()}); export const orderPaymentLinkItemGetModel = z.object({id: z.number().int().optional(), paymentIntentId: z.number().int().optional(), paymentLink: z.string().nullable().optional(), paymentLinkKey: z.string().nullable().optional(), encryptedPubKey: z.string().nullable().optional(), expiryDate: z.string().optional(), createDate: z.string().optional()}); export const orderPaymentDetailsItemGetModel = z.object({referenceNo: z.string().nullable().optional(), currency: z.string().nullable().optional(), country: z.string().nullable().optional(), amount: z.number().optional(), orderDate: z.string().optional(), status: orderStatus.optional(), description: z.string().nullable().optional(), serviceDate: z.string().nullable().optional(), paymentDate: z.string().nullable().optional(), cancelDate: z.string().nullable().optional(), mode: paymentMode.optional(), statementSuffix: z.string().nullable().optional(), imageLink: z.string().nullable().optional(), submitLabel: z.string().nullable().optional(), orderFor: z.string().nullable().optional(), isVcc: z.boolean().optional(), pmsPosting: z.boolean().optional(), pmsPosted: z.boolean().optional(), pmsPostedDate: z.string().nullable().optional(), pmsPostingProcessed: z.boolean().optional(), pmsRefundPostingProcessed: z.boolean().optional(), pmsRefundPosted: z.boolean().optional(), merchantId: z.number().int().optional(), metadata: z.record(z.string(), z.string().nullable()).nullable().optional(), paymentSchedule: z.array(scheduledPaymentItemGetModel).nullable().optional(), lineItems: z.array(orderLineItemGetModel).nullable().optional(), payments: z.array(orderPaymentItemGetModel).nullable().optional(), paymentLinks: z.array(orderPaymentLinkItemGetModel).nullable().optional()}); export const orderHotelItemGetModel = 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 orderCreatedUserDetailGetModel = z.object({userId: z.string().nullable().optional(), merchantId: z.number().int().optional(), merchantName: z.string().nullable().optional()}); export const orderGetModel = z.object({id: z.number().int().optional(), transactionId: z.string().nullable().optional(), statusId: orderStatus.optional(), sourceType: bookingSourceType.optional(), payerDetails: orderPayerDetailsItemGetModel.optional(), travelerDetails: orderTravelerDetailsItemGetModel.optional(), paymentDetails: orderPaymentDetailsItemGetModel.optional(), hotelDetails: orderHotelItemGetModel.optional(), createdUserDetail: orderCreatedUserDetailGetModel.optional(), returnUrlSuccess: z.string().nullable().optional(), returnUrlCancel: z.string().nullable().optional(), webhookUrl: z.string().nullable().optional(), language: z.string().nullable().optional(), createdBy: z.string().nullable().optional(), merchantName: z.string().nullable().optional(), merchantGroupId: z.number().int().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/pms-posting-history/{orderId} */ export const getApiPaymentApiV1PmsPostingHistoryOrderId = async (args: GetApiPaymentApiV1PmsPostingHistoryOrderIdArgs, options: GetApiPaymentApiV1PmsPostingHistoryOrderIdOptions) => { 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/pms-posting-history/${encodeURIComponent(String(args.orderId))}${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(orderGetModel, await res.json()) };