UNPKG

sdk-node-apis-efi

Version:

Module for integration with Efi Bank API

745 lines (744 loc) 27.3 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.DefineLinkPayMethodResponseSchema = exports.CreateOneStepLinkResponseSchema = exports.SendSubscriptionLinkEmailResponseSchema = exports.CreateSubscriptionHistoryResponseSchema = exports.CancelSubscriptionResponseSchema = exports.UpdateSubscriptionResponseSchema = exports.UpdateSubscriptionMetadataResponseSchema = exports.CreateOneStepSubscriptionLinkResponseSchema = exports.DetailSubscriptionResponseSchema = exports.DefineSubscriptionPayMethodResponseSchema = exports.CreateSubscriptionResponseSchema = exports.CreateOneStepSubscriptionResponseSchema = exports.DeletePlanResponseSchema = exports.UpdatePlanResponseSchema = exports.ListPlansResponseSchema = exports.CreatePlanResponseSchema = exports.SettleCarnetParcelResponseSchema = exports.SettleCarnetResponseSchema = exports.CreateCarnetHistoryResponseSchema = exports.SendCarnetParcelEmailResponseSchema = exports.SendCarnetEmailResponseSchema = exports.CancelCarnetParcelResponseSchema = exports.CancelCarnetResponseSchema = exports.UpdateCarnetParcelsResponseSchema = exports.UpdateCarnetParcelResponseSchema = exports.UpdateCarnetMetadataResponseSchema = exports.DetailCarnetResponseSchema = exports.CreateCarnetResponseSchema = exports.GetInstallmentsResponseSchema = exports.RefundCardResponseSchema = exports.CardPaymentRetryResponseSchema = exports.SettleChargeResponseSchema = exports.DefineBalanceSheetBilletResponseSchema = exports.CreateChargeHistoryResponseSchema = exports.SendBilletEmailResponseSchema = exports.CancelChargeResponseSchema = exports.UpdateBilletResponseSchema = exports.UpdateChargeMetadataResponseSchema = exports.ListChargesResponseSchema = exports.DetailChargeResponseSchema = exports.DefinePayMethodResponseSchema = exports.CreateChargeResponseSchema = exports.CreateOneStepChargeResponseSchema = exports.ChargeResponseConfigurationsSchema = exports.ChargeResponseAddressSchema = exports.ChargeResponsePixSchema = exports.ChargeCarnetStatusSchema = exports.ChargeSubscriptionStatusSchema = exports.ChargeLinkStatusSchema = exports.ChargeTransactionStatusSchema = void 0; exports.CreateChargeCardResponseSchema = exports.GetNotificationResponseSchema = exports.SendLinkEmailResponseSchema = exports.UpdateChargeLinkResponseSchema = void 0; const z = __importStar(require("zod")); const ChargeCodeResponseSchema = z.object({ code: z.number() }).loose(); function chargeDataResponse(data) { return z.object({ code: z.number(), data }).loose(); } exports.ChargeTransactionStatusSchema = z.enum([ 'new', 'waiting', 'identified', 'approved', 'paid', 'unpaid', 'refunded', 'contested', 'canceled', 'settled', 'expired', ]); exports.ChargeLinkStatusSchema = z.enum(['new', 'link', 'expired']); exports.ChargeSubscriptionStatusSchema = z.enum(['new', 'active', 'new_charge', 'canceled', 'expired']); exports.ChargeCarnetStatusSchema = z.enum(['up_to_date', 'unpaid', 'finished']); exports.ChargeResponsePixSchema = z .object({ qrcode: z.string(), qrcode_image: z.string(), }) .loose(); exports.ChargeResponseAddressSchema = z .object({ street: z.string(), number: z.union([z.string(), z.number()]), complement: z.string().nullable(), neighborhood: z.string(), city: z.string(), state: z.string(), zipcode: z.string(), }) .loose(); exports.ChargeResponseConfigurationsSchema = z .object({ days_to_write_off: z.number().int().nullable().optional(), interest_type: z.enum(['monthly', 'daily']).nullable().optional(), interest: z.number().nullable().optional(), fine: z.number().nullable().optional(), }) .loose(); const ChargeBilletResponseConfigurationsSchema = z .object({ days_to_write_off: z.number().int(), interest_type: z.enum(['monthly', 'daily']).nullable().optional(), interest: z.number().nullable().optional(), fine: z.number().nullable().optional(), }) .loose(); const ChargeListCarnetConfigurationsSchema = z .object({ days_to_write_off: z.number().int(), interest_type: z.enum(['monthly', 'daily']).nullable().optional(), interest: z.number(), fine: z.number(), }) .loose(); const ChargeResponsePdfSchema = z.object({ charge: z.string() }).loose(); const ChargeResponseHistorySchema = z.object({ message: z.string(), created_at: z.string() }).loose(); const ChargeResponseRepasseSchema = z .object({ payee_code: z.string(), percentage: z.number().optional(), fixed: z.number().optional(), }) .loose(); const ChargeResponseItemSchema = z .object({ name: z.string(), value: z.number(), amount: z.number(), marketplace: z .object({ mode: z.union([z.string(), z.number()]).optional(), repasses: z.array(ChargeResponseRepasseSchema), }) .loose() .optional(), }) .loose(); const ChargeResponseShippingSchema = z .object({ name: z.string(), value: z.number(), payee_code: z.string(), }) .loose(); const ChargeCustomerContactShape = { birth: z.string().optional(), email: z.string().optional(), phone_number: z.string().nullable().optional(), address: exports.ChargeResponseAddressSchema.optional(), }; const ChargeDetailCustomerSchema = z.union([ z .object({ ...ChargeCustomerContactShape, name: z.string(), cpf: z.string(), cnpj: z.never().optional(), corporate_name: z.never().optional(), }) .loose(), z .object({ ...ChargeCustomerContactShape, name: z.string().nullable().optional(), cpf: z.string().nullable().optional(), cnpj: z.string(), corporate_name: z.string(), }) .loose(), ]); const ChargeListCustomerSchema = z.union([ z .object({ phone_number: z.string().nullable(), cpf: z.string(), name: z.string(), cnpj: z.never().optional(), corporate_name: z.never().optional(), }) .loose(), z .object({ phone_number: z.string().nullable(), cnpj: z.string(), corporate_name: z.string(), cpf: z.never().optional(), name: z.never().optional(), }) .loose(), ]); const ChargeBilletResponseSchema = z .object({ barcode: z.string(), pix: exports.ChargeResponsePixSchema.optional(), link: z.string(), billet_link: z.string().optional(), pdf: ChargeResponsePdfSchema, expire_at: z.string(), configurations: ChargeBilletResponseConfigurationsSchema.optional(), }) .loose(); const ChargeCreditCardResponseSchema = z .object({ mask: z.string(), installments: z.number().int(), installment_value: z.number(), interest: z.number().optional(), address: exports.ChargeResponseAddressSchema, }) .loose(); const ChargeCarnetPaymentResponseSchema = z .object({ parcel: z.number().int(), barcode: z.string(), pix: exports.ChargeResponsePixSchema.optional(), url: z.string().optional(), link: z.string().optional(), parcel_link: z.string().optional(), pdf: ChargeResponsePdfSchema, expire_at: z.string(), configurations: exports.ChargeResponseConfigurationsSchema.optional(), }) .loose(); const ChargeListCarnetPaymentResponseSchema = ChargeCarnetPaymentResponseSchema.extend({ link: z.string(), configurations: ChargeListCarnetConfigurationsSchema, }).loose(); const ChargeDetailPaymentSchema = z.discriminatedUnion('method', [ z .object({ method: z.literal('banking_billet'), created_at: z.string(), message: z.string().nullable(), banking_billet: ChargeBilletResponseSchema, }) .loose(), z .object({ method: z.literal('credit_card'), created_at: z.string(), message: z.string().nullable(), credit_card: ChargeCreditCardResponseSchema, }) .loose(), z .object({ method: z.literal('carnet'), created_at: z.string(), message: z.string().nullable(), carnet: ChargeCarnetPaymentResponseSchema, }) .loose(), ]); const ChargeListPaymentCommonSchema = { paid_at: z.string().nullable(), received_by_bank_at: z.string().optional(), paid_value: z.number().optional(), pix: exports.ChargeResponsePixSchema.optional(), }; const ChargeListPaymentSchema = z.discriminatedUnion('payment_method', [ z .object({ ...ChargeListPaymentCommonSchema, payment_method: z.literal('banking_billet'), banking_billet: ChargeBilletResponseSchema, }) .loose(), z .object({ ...ChargeListPaymentCommonSchema, payment_method: z.literal('credit_card'), credit_card: ChargeCreditCardResponseSchema, }) .loose(), z .object({ ...ChargeListPaymentCommonSchema, payment_method: z.literal('carnet'), carnet: ChargeListCarnetPaymentResponseSchema, }) .loose(), ]); const ChargeDetailLinkSchema = z .object({ billet_discount: z.number().nullable(), card_discount: z.number().nullable(), conditional_discount_value: z.number().nullable(), conditional_discount_type: z.enum(['percentage', 'currency']).nullable(), conditional_discount_date: z.string().nullable(), message: z.string().nullable(), expire_at: z.string(), request_delivery_address: z.boolean(), payment_method: z.enum(['banking_billet', 'credit_card', 'all']), payment_url: z.string(), }) .loose(); const ChargeListEntrySchema = z .object({ id: z.number().int(), total: z.number(), status: z.union([exports.ChargeTransactionStatusSchema, exports.ChargeLinkStatusSchema]), custom_id: z.string().nullable(), created_at: z.string(), customer: ChargeListCustomerSchema, payment: ChargeListPaymentSchema.optional(), link: ChargeDetailLinkSchema.optional(), }) .loose(); const ChargeRefusalSchema = z.object({ reason: z.string(), retry: z.boolean() }).loose(); const ChargePaymentMethodSchema = z.enum(['banking_billet', 'credit_card']); const CreateOneStepChargeBaseSchema = z .object({ charge_id: z.number().int(), total: z.number(), status: exports.ChargeTransactionStatusSchema, link: z.string().optional(), billet_link: z.string().optional(), pdf: ChargeResponsePdfSchema.optional(), expire_at: z.string().optional(), refusal: ChargeRefusalSchema.optional(), }) .loose(); const CreateOneStepChargeDataSchema = z.union([ CreateOneStepChargeBaseSchema.extend({ payment: z.literal('banking_billet'), barcode: z.string(), pix: exports.ChargeResponsePixSchema.optional(), refusal: z.never().optional(), }).loose(), CreateOneStepChargeBaseSchema.extend({ payment: z.literal('credit_card'), status: z.literal('unpaid'), installments: z.number().int(), installment_value: z.number(), refusal: ChargeRefusalSchema, }).loose(), CreateOneStepChargeBaseSchema.extend({ payment: z.literal('credit_card'), status: exports.ChargeTransactionStatusSchema.exclude(['unpaid']), installments: z.number().int(), installment_value: z.number(), refusal: z.never().optional(), }).loose(), ]); exports.CreateOneStepChargeResponseSchema = chargeDataResponse(CreateOneStepChargeDataSchema); exports.CreateChargeResponseSchema = chargeDataResponse(z .object({ charge_id: z.number().int(), total: z.number(), status: exports.ChargeTransactionStatusSchema, custom_id: z.string().nullable(), created_at: z.string(), }) .loose()); const DefinePayMethodBaseSchema = z .object({ charge_id: z.number().int(), total: z.number(), status: exports.ChargeTransactionStatusSchema, reason: z.string().nullable().optional(), }) .loose(); exports.DefinePayMethodResponseSchema = chargeDataResponse(z.discriminatedUnion('payment', [ DefinePayMethodBaseSchema.extend({ payment: z.literal('banking_billet'), barcode: z.string(), pix: exports.ChargeResponsePixSchema.optional(), link: z.string().optional(), billet_link: z.string().optional(), pdf: ChargeResponsePdfSchema.optional(), expire_at: z.string().optional(), configurations: ChargeBilletResponseConfigurationsSchema.optional(), }).loose(), DefinePayMethodBaseSchema.extend({ payment: z.literal('credit_card'), installments: z.number().int(), installment_value: z.number(), }).loose(), ])); exports.DetailChargeResponseSchema = chargeDataResponse(z .object({ charge_id: z.number().int(), total: z.number(), status: z.union([exports.ChargeTransactionStatusSchema, exports.ChargeLinkStatusSchema]), reason: z.string().optional(), custom_id: z.string().nullable(), created_at: z.string(), notification_url: z.string().nullable(), items: z.array(ChargeResponseItemSchema), shippings: z.array(ChargeResponseShippingSchema).optional(), history: z.array(ChargeResponseHistorySchema), customer: ChargeDetailCustomerSchema.optional(), payment: ChargeDetailPaymentSchema.optional(), link: ChargeDetailLinkSchema.optional(), }) .loose()); exports.ListChargesResponseSchema = z .object({ code: z.number(), data: z.array(ChargeListEntrySchema), params: z .object({ begin_date: z.string(), end_date: z.string(), pagination: z .object({ limit: z.number().int(), offset: z.number().int(), page: z.number().int(), }) .loose(), }) .loose(), }) .loose(); exports.UpdateChargeMetadataResponseSchema = ChargeCodeResponseSchema; exports.UpdateBilletResponseSchema = ChargeCodeResponseSchema; exports.CancelChargeResponseSchema = ChargeCodeResponseSchema; exports.SendBilletEmailResponseSchema = ChargeCodeResponseSchema; exports.CreateChargeHistoryResponseSchema = ChargeCodeResponseSchema; exports.DefineBalanceSheetBilletResponseSchema = ChargeCodeResponseSchema; exports.SettleChargeResponseSchema = ChargeCodeResponseSchema; exports.CardPaymentRetryResponseSchema = chargeDataResponse(z .object({ installments: z.number().int(), installment_value: z.number(), charge_id: z.number().int(), status: exports.ChargeTransactionStatusSchema, total: z.number(), payment: z.literal('credit_card'), }) .loose()); exports.RefundCardResponseSchema = z.object({ code: z.number(), message: z.string() }).loose(); exports.GetInstallmentsResponseSchema = chargeDataResponse(z .object({ rate: z.number(), name: z.string(), installments: z.array(z .object({ installment: z.number().int(), has_interest: z.boolean(), value: z.number(), currency: z.string(), interest_percentage: z.number(), }) .loose()), }) .loose()); const CreateCarnetChargeSchema = z .object({ charge_id: z.number().int(), parcel: z.string(), status: exports.ChargeTransactionStatusSchema, value: z.number(), expire_at: z.string(), url: z.string(), parcel_link: z.string(), pdf: ChargeResponsePdfSchema, barcode: z.string(), pix: exports.ChargeResponsePixSchema.optional(), }) .loose(); exports.CreateCarnetResponseSchema = chargeDataResponse(z .object({ carnet_id: z.number().int(), status: exports.ChargeCarnetStatusSchema, cover: z.string(), link: z.string(), carnet_link: z.string(), pdf: z.object({ carnet: z.string(), cover: z.string() }).loose(), charges: z.array(CreateCarnetChargeSchema), }) .loose()); const DetailCarnetChargeSchema = z .object({ charge_id: z.number().int(), status: exports.ChargeTransactionStatusSchema, url: z.string(), pdf: ChargeResponsePdfSchema, barcode: z.string(), pix: exports.ChargeResponsePixSchema.optional(), parcel: z.number().int(), expire_at: z.string(), configurations: exports.ChargeResponseConfigurationsSchema.optional(), }) .loose(); exports.DetailCarnetResponseSchema = chargeDataResponse(z .object({ carnet_id: z.number().int(), status: exports.ChargeCarnetStatusSchema, repeats: z.number().int(), cover: z.string(), link: z.string(), pdf: z.object({ carnet: z.string(), cover: z.string() }).loose(), value: z.number(), custom_id: z.string().nullable(), notification_url: z.string().nullable(), split_items: z.boolean(), charges: z.array(DetailCarnetChargeSchema), created_at: z.string(), history: z.array(ChargeResponseHistorySchema), }) .loose()); exports.UpdateCarnetMetadataResponseSchema = ChargeCodeResponseSchema; exports.UpdateCarnetParcelResponseSchema = ChargeCodeResponseSchema; exports.UpdateCarnetParcelsResponseSchema = ChargeCodeResponseSchema; exports.CancelCarnetResponseSchema = ChargeCodeResponseSchema; exports.CancelCarnetParcelResponseSchema = ChargeCodeResponseSchema; exports.SendCarnetEmailResponseSchema = ChargeCodeResponseSchema; exports.SendCarnetParcelEmailResponseSchema = ChargeCodeResponseSchema; exports.CreateCarnetHistoryResponseSchema = ChargeCodeResponseSchema; exports.SettleCarnetResponseSchema = ChargeCodeResponseSchema; exports.SettleCarnetParcelResponseSchema = ChargeCodeResponseSchema; const ChargePlanDataSchema = z .object({ plan_id: z.number().int(), name: z.string(), interval: z.number().int(), repeats: z.number().int().nullable(), created_at: z.string(), }) .loose(); exports.CreatePlanResponseSchema = chargeDataResponse(ChargePlanDataSchema); exports.ListPlansResponseSchema = chargeDataResponse(z.array(ChargePlanDataSchema)); exports.UpdatePlanResponseSchema = ChargeCodeResponseSchema; exports.DeletePlanResponseSchema = ChargeCodeResponseSchema; const SubscriptionPlanSummarySchema = z .object({ id: z.number().int(), interval: z.number().int(), repeats: z.number().int().nullable(), }) .loose(); const SubscriptionChargeSummarySchema = z .object({ id: z.number().int(), status: exports.ChargeTransactionStatusSchema, parcel: z.number().int(), total: z.number(), }) .loose(); const OneStepSubscriptionBaseSchema = z .object({ subscription_id: z.number().int(), status: exports.ChargeSubscriptionStatusSchema, plan: SubscriptionPlanSummarySchema, charge: SubscriptionChargeSummarySchema, first_execution: z.string(), total: z.number(), }) .loose(); const OneStepSubscriptionDataSchema = z.discriminatedUnion('payment', [ OneStepSubscriptionBaseSchema.extend({ payment: z.literal('banking_billet'), barcode: z.string().optional(), link: z.string().optional(), billet_link: z.string().optional(), pdf: ChargeResponsePdfSchema.optional(), expire_at: z.string().optional(), }).loose(), OneStepSubscriptionBaseSchema.extend({ payment: z.literal('credit_card'), barcode: z.never().optional(), link: z.never().optional(), billet_link: z.never().optional(), pdf: z.never().optional(), expire_at: z.never().optional(), }).loose(), ]); exports.CreateOneStepSubscriptionResponseSchema = chargeDataResponse(OneStepSubscriptionDataSchema); exports.CreateSubscriptionResponseSchema = chargeDataResponse(z .object({ subscription_id: z.number().int(), status: exports.ChargeSubscriptionStatusSchema, custom_id: z.string().nullable(), charges: z.array(z .object({ charge_id: z.number().int(), status: exports.ChargeTransactionStatusSchema, total: z.number(), parcel: z.number().int(), }) .loose()), created_at: z.string(), }) .loose()); exports.DefineSubscriptionPayMethodResponseSchema = chargeDataResponse(OneStepSubscriptionDataSchema); const SubscriptionPlanDetailSchema = z .object({ plan_id: z.number().int(), name: z.string(), interval: z.number().int(), repeats: z.number().int().nullable(), }) .loose(); exports.DetailSubscriptionResponseSchema = chargeDataResponse(z .object({ subscription_id: z.number().int(), value: z.number(), status: exports.ChargeSubscriptionStatusSchema, custom_id: z.string().nullable(), notification_url: z.string().nullable(), payment_method: ChargePaymentMethodSchema.nullable(), next_execution: z.string().nullable(), next_expire_at: z.string().nullable(), plan: SubscriptionPlanDetailSchema, occurrences: z.number().int(), created_at: z.string(), history: z.array(z .object({ charge_id: z.number().int(), status: exports.ChargeTransactionStatusSchema, created_at: z.string(), }) .loose()), }) .loose()); exports.CreateOneStepSubscriptionLinkResponseSchema = chargeDataResponse(z .object({ subscription_id: z.number().int(), status: exports.ChargeSubscriptionStatusSchema, custom_id: z.string().nullable(), charge: SubscriptionChargeSummarySchema, payment_url: z.string(), payment_method: z.enum(['banking_billet', 'credit_card', 'all']), conditional_discount_date: z.string().nullable(), request_delivery_address: z.boolean(), expire_at: z.string(), created_at: z.string(), }) .loose()); exports.UpdateSubscriptionMetadataResponseSchema = ChargeCodeResponseSchema; exports.UpdateSubscriptionResponseSchema = chargeDataResponse(z .object({ subscription_id: z.number().int(), status: exports.ChargeSubscriptionStatusSchema, value: z.number(), custom_id: z.string().nullable(), notification_url: z.string().nullable(), payment_method: ChargePaymentMethodSchema, next_execution: z.string(), next_expire_at: z.string(), plan: SubscriptionPlanDetailSchema, customer: z.object({ email: z.string(), phone_number: z.string() }).loose(), occurrences: z.number().int(), created_at: z.string(), }) .loose()); exports.CancelSubscriptionResponseSchema = ChargeCodeResponseSchema; exports.CreateSubscriptionHistoryResponseSchema = ChargeCodeResponseSchema; exports.SendSubscriptionLinkEmailResponseSchema = ChargeCodeResponseSchema; const ChargeLinkDataSchema = z .object({ charge_id: z.number().int(), status: exports.ChargeLinkStatusSchema, total: z.number(), custom_id: z.string().nullable().optional(), payment_url: z.string(), payment_method: z.enum(['banking_billet', 'credit_card', 'all']), billet_discount: z.number().nullable().optional(), card_discount: z.number().nullable().optional(), conditional_discount_value: z.number().nullable().optional(), conditional_discount_type: z.enum(['percentage', 'currency']).nullable().optional(), conditional_discount_date: z.string().nullable(), request_delivery_address: z.boolean().optional(), message: z.string().nullable().optional(), expire_at: z.string().optional(), created_at: z.string(), }) .loose(); exports.CreateOneStepLinkResponseSchema = chargeDataResponse(ChargeLinkDataSchema.extend({ custom_id: z.string().nullable(), request_delivery_address: z.boolean(), message: z.string().nullable(), expire_at: z.string(), }).loose()); exports.DefineLinkPayMethodResponseSchema = chargeDataResponse(ChargeLinkDataSchema); exports.UpdateChargeLinkResponseSchema = chargeDataResponse(ChargeLinkDataSchema); exports.SendLinkEmailResponseSchema = ChargeCodeResponseSchema; exports.GetNotificationResponseSchema = chargeDataResponse(z.array(z .object({ created_at: z.string(), custom_id: z.string().nullable(), id: z.number().int(), identifiers: z.union([ z .object({ charge_id: z.number().int(), subscription_id: z.never().optional(), carnet_id: z.never().optional(), }) .loose(), z .object({ charge_id: z.never().optional(), subscription_id: z.number().int(), carnet_id: z.never().optional(), }) .loose(), z .object({ charge_id: z.never().optional(), subscription_id: z.never().optional(), carnet_id: z.number().int(), }) .loose(), ]), status: z.object({ current: z.string(), previous: z.string().nullable() }).loose(), type: z.string(), value: z.number().optional(), received_by_bank_at: z.string().optional(), }) .loose())); const CreateChargeCardResponseBaseShape = { charge_id: z.number().int(), installments: z.number().int(), installment_value: z.number(), total: z.number(), }; const CreateChargeCardChallengeSchema = z .object({ form_data: z .object({ method: z.literal('POST'), action_url: z.string(), creq: z.string(), threeDSSessionData: z.string(), }) .loose() .optional(), html_template: z.string().optional(), }) .loose(); exports.CreateChargeCardResponseSchema = z.discriminatedUnion('status', [ z .object({ ...CreateChargeCardResponseBaseShape, status: z.literal('approved'), refusal: z.never().optional(), tds_challenge: z.never().optional(), }) .loose(), z .object({ ...CreateChargeCardResponseBaseShape, status: z.literal('unpaid'), refusal: ChargeRefusalSchema, tds_challenge: z.never().optional(), }) .loose(), z .object({ ...CreateChargeCardResponseBaseShape, status: z.literal('waiting'), refusal: z.never().optional(), tds_challenge: CreateChargeCardChallengeSchema.optional(), }) .loose(), ]);