aves-sdk 1.2.1 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/validation/api-schemas.ts","../src/utils/date-helpers.ts","../src/mappers/type-mappers.ts","../src/mappers/request-mappers.ts","../src/mappers/response-mappers.ts","../src/nest/aves.module.ts","../src/nest/aves.service.ts","../src/tokens.ts","../src/config/root-elements.ts","../src/config/endpoints.ts","../src/nest/dto/wrap-request.dto.ts","../src/http/xml-http-client.ts","../src/config/aves.config.ts","../src/validation/aves-validation.ts","../src/types/common.ts","../src/validation/aves-validator.ts","../src/errors/aves-error-handler.ts","../src/errors/aves-error.ts"],"sourcesContent":["// Types\nexport * from './validation/api-schemas';\nexport * from './mappers';\nexport * from './utils';\n\n// NestJS Integration\nexport * from './nest/aves.module';\nexport * from './nest/aves.service';\n\n// Configs\nexport * from './types/common';\nexport * from './types/interfaces';\nexport * from './http/xml-http-client';\nexport * from './config/aves.config';\nexport * from './config/root-elements';\nexport * from './config/endpoints';\nexport * from './tokens';\nexport * from './validation';\nexport * from './errors/aves-error-handler';\nexport * from './errors/aves-error';\n","import { z } from 'zod';\n\n// ===== CONST OBJECTS (Single Source of Truth) =====\n\nexport const PassengerType = {\n ADULT: 'adult',\n CHILD: 'child',\n INFANT: 'infant',\n SENIOR: 'senior',\n} as const;\n\nexport const GenderType = {\n MALE: 'male',\n FEMALE: 'female',\n} as const;\n\nexport const ServiceType = {\n FLIGHT: 'flight',\n HOTEL: 'hotel',\n CAR: 'car',\n TRANSFER: 'transfer',\n INSURANCE: 'insurance',\n} as const;\n\nexport const ServiceStatusType = {\n CONFIRMED: 'confirmed',\n PENDING: 'pending',\n CANCELLED: 'cancelled',\n} as const;\n\nexport const PaymentType = {\n CREDIT_CARD: 'credit_card',\n DEBIT_CARD: 'debit_card',\n BANK_TRANSFER: 'bank_transfer',\n CASH: 'cash',\n} as const;\n\nexport const PaymentStatusType = {\n PENDING: 'pending',\n CONFIRMED: 'confirmed',\n FAILED: 'failed',\n} as const;\n\nexport const CustomerType = {\n CUSTOMER: 'customer',\n SUPPLIER: 'supplier',\n VOUCHER: 'voucher',\n SUPPLIER_VOUCHER: 'supplier_voucher',\n} as const;\n\nexport const CustomerStatusType = {\n ENABLED: 'enabled',\n WARNING: 'warning',\n BLACKLISTED: 'blacklisted',\n DISABLED: 'disabled',\n} as const;\n\nexport const BookingStatusType = {\n QUOTATION: 'quotation',\n WORK_IN_PROGRESS: 'work_in_progress',\n CONFIRMED: 'confirmed',\n OPTIONED: 'optioned',\n NULLIFIED: 'nullified',\n CANCELED: 'canceled',\n} as const;\n\nexport const DocumentType = {\n VISA_REQUEST: 'visa_request',\n TRAVEL_INFORMATION: 'travel_information',\n VOUCHER: 'voucher',\n BOOKING_CONTRACT: 'booking_contract',\n BOOKING_CONFIRMATION: 'booking_confirmation',\n SUPPLIER_SERVICE_LIST: 'supplier_service_list',\n INVOICE: 'invoice',\n PROFORMA_INVOICE: 'proforma_invoice',\n ADEGUAMENTO: 'adeguamento',\n RESERVATION_FORM: 'reservation_form',\n OPEN_XML: 'open_xml',\n SALES_INVOICE: 'sales_invoice',\n TICKETING_TMASTER: 'ticketing_tmaster',\n SUMMARY_FORM: 'summary_form',\n} as const;\n\nexport const DocumentFormatType = {\n PDF: 'pdf',\n HTML: 'html',\n XML: 'xml',\n} as const;\n\nexport const DeliveryMethodType = {\n EMAIL: 'email',\n SMS: 'sms',\n DOWNLOAD: 'download',\n} as const;\n\nexport const CancelReasonType = {\n CUSTOMER_REQUEST: 'customer_request',\n NO_SHOW: 'no_show',\n OPERATIONAL: 'operational',\n OTHER: 'other',\n} as const;\n\nexport const RefundMethodType = {\n ORIGINAL_PAYMENT: 'original_payment',\n CREDIT: 'credit',\n CASH: 'cash',\n} as const;\n\nexport const PricingItemType = {\n SERVICE: 'service',\n TAX: 'tax',\n FEE: 'fee',\n DISCOUNT: 'discount',\n} as const;\n\nexport const DeliveryStatusType = {\n SENT: 'sent',\n PENDING: 'pending',\n FAILED: 'failed',\n} as const;\n\n// ===== TYPE ALIASES FOR CONST OBJECTS =====\n// These are needed for type inference from const object values\n\nexport type PassengerTypeValue =\n (typeof PassengerType)[keyof typeof PassengerType];\nexport type GenderTypeValue = (typeof GenderType)[keyof typeof GenderType];\nexport type ServiceTypeValue = (typeof ServiceType)[keyof typeof ServiceType];\nexport type ServiceStatusTypeValue =\n (typeof ServiceStatusType)[keyof typeof ServiceStatusType];\nexport type PaymentTypeValue = (typeof PaymentType)[keyof typeof PaymentType];\nexport type PaymentStatusTypeValue =\n (typeof PaymentStatusType)[keyof typeof PaymentStatusType];\nexport type CustomerTypeValue =\n (typeof CustomerType)[keyof typeof CustomerType];\nexport type CustomerStatusTypeValue =\n (typeof CustomerStatusType)[keyof typeof CustomerStatusType];\nexport type BookingStatusTypeValue =\n (typeof BookingStatusType)[keyof typeof BookingStatusType];\nexport type DocumentTypeValue =\n (typeof DocumentType)[keyof typeof DocumentType];\nexport type DocumentFormatTypeValue =\n (typeof DocumentFormatType)[keyof typeof DocumentFormatType];\nexport type DeliveryMethodTypeValue =\n (typeof DeliveryMethodType)[keyof typeof DeliveryMethodType];\nexport type CancelReasonTypeValue =\n (typeof CancelReasonType)[keyof typeof CancelReasonType];\nexport type RefundMethodTypeValue =\n (typeof RefundMethodType)[keyof typeof RefundMethodType];\nexport type PricingItemTypeValue =\n (typeof PricingItemType)[keyof typeof PricingItemType];\nexport type DeliveryStatusTypeValue =\n (typeof DeliveryStatusType)[keyof typeof DeliveryStatusType];\n\n// ===== TYPE SCHEMAS (Based on Aves XML Documentation) =====\n\nexport const addressTypeSchema = z.enum([\n 'home',\n 'work',\n 'billing',\n 'delivery',\n]);\nexport const contactTypeSchema = z.enum(['home', 'work', 'mobile', 'fax']);\nexport const emailTypeSchema = z.enum(['home', 'work']);\nexport const passengerTypeSchema = z.enum([\n PassengerType.ADULT,\n PassengerType.CHILD,\n PassengerType.INFANT,\n PassengerType.SENIOR,\n]);\nexport const titleTypeSchema = z.enum(['mr', 'mrs', 'ms', 'dr', 'prof']);\nexport const genderTypeSchema = z.enum([GenderType.MALE, GenderType.FEMALE]);\nexport const serviceTypeSchema = z.enum([\n ServiceType.FLIGHT,\n ServiceType.HOTEL,\n ServiceType.CAR,\n ServiceType.TRANSFER,\n ServiceType.INSURANCE,\n]);\nexport const serviceStatusTypeSchema = z.enum([\n ServiceStatusType.CONFIRMED,\n ServiceStatusType.PENDING,\n ServiceStatusType.CANCELLED,\n]);\nexport const paymentTypeSchema = z.enum([\n PaymentType.CREDIT_CARD,\n PaymentType.DEBIT_CARD,\n PaymentType.BANK_TRANSFER,\n PaymentType.CASH,\n]);\nexport const paymentStatusTypeSchema = z.enum([\n PaymentStatusType.PENDING,\n PaymentStatusType.CONFIRMED,\n PaymentStatusType.FAILED,\n]);\nexport const customerTypeSchema = z.enum([\n CustomerType.CUSTOMER,\n CustomerType.SUPPLIER,\n CustomerType.VOUCHER,\n CustomerType.SUPPLIER_VOUCHER,\n]);\nexport const searchOperatorTypeSchema = z.enum([\n 'equals',\n 'contains',\n 'starts_with',\n 'ends_with',\n]);\nexport const bookingTypeSchema = z.enum(['individual', 'group', 'corporate']);\nexport const priorityTypeSchema = z.enum(['low', 'normal', 'high', 'urgent']);\nexport const specialRequestTypeSchema = z.enum([\n 'meal',\n 'seat',\n 'wheelchair',\n 'other',\n]);\nexport const cancelReasonTypeSchema = z.enum([\n CancelReasonType.CUSTOMER_REQUEST,\n CancelReasonType.NO_SHOW,\n CancelReasonType.OPERATIONAL,\n CancelReasonType.OTHER,\n]);\nexport const refundMethodTypeSchema = z.enum([\n RefundMethodType.ORIGINAL_PAYMENT,\n RefundMethodType.CREDIT,\n RefundMethodType.CASH,\n]);\nexport const documentTypeSchema = z.enum([\n DocumentType.VISA_REQUEST,\n DocumentType.TRAVEL_INFORMATION,\n DocumentType.VOUCHER,\n DocumentType.BOOKING_CONTRACT,\n DocumentType.BOOKING_CONFIRMATION,\n DocumentType.SUPPLIER_SERVICE_LIST,\n DocumentType.INVOICE,\n DocumentType.PROFORMA_INVOICE,\n DocumentType.ADEGUAMENTO,\n DocumentType.RESERVATION_FORM,\n DocumentType.OPEN_XML,\n DocumentType.SALES_INVOICE,\n DocumentType.TICKETING_TMASTER,\n DocumentType.SUMMARY_FORM,\n]);\nexport const documentFormatTypeSchema = z.enum([\n DocumentFormatType.PDF,\n DocumentFormatType.HTML,\n DocumentFormatType.XML,\n]);\nexport const deliveryMethodTypeSchema = z.enum([\n DeliveryMethodType.EMAIL,\n DeliveryMethodType.SMS,\n DeliveryMethodType.DOWNLOAD,\n]);\nexport const bookingStatusTypeSchema = z.enum([\n BookingStatusType.QUOTATION,\n BookingStatusType.WORK_IN_PROGRESS,\n BookingStatusType.CONFIRMED,\n BookingStatusType.OPTIONED,\n BookingStatusType.NULLIFIED,\n BookingStatusType.CANCELED,\n]);\nexport const pricingItemTypeSchema = z.enum([\n PricingItemType.SERVICE,\n PricingItemType.TAX,\n PricingItemType.FEE,\n PricingItemType.DISCOUNT,\n]);\nexport const deliveryStatusTypeSchema = z.enum([\n DeliveryStatusType.SENT,\n DeliveryStatusType.PENDING,\n DeliveryStatusType.FAILED,\n]);\nexport const customerStatusTypeSchema = z.enum([\n CustomerStatusType.ENABLED,\n CustomerStatusType.WARNING,\n CustomerStatusType.BLACKLISTED,\n CustomerStatusType.DISABLED,\n]);\nexport const communicationMethodTypeSchema = z.enum(['email', 'sms', 'phone']);\n\n// ===== DATE VALIDATION HELPERS =====\n\nconst dateStringSchema = z\n .string()\n .regex(/^\\d{4}-\\d{2}-\\d{2}$/, 'Date must be in YYYY-MM-DD format');\nconst dateTimeStringSchema = z\n .string()\n .regex(\n /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{3})?Z?$/,\n 'DateTime must be in ISO 8601 format'\n );\n\n// ===== COMMON API SCHEMAS =====\n\nexport const customerAddressSchema = z.object({\n type: addressTypeSchema.optional(),\n street: z\n .string()\n .max(100, 'Street must be 100 characters or less')\n .optional(),\n city: z.string().max(50, 'City must be 50 characters or less').optional(),\n state: z.string().max(50, 'State must be 50 characters or less').optional(),\n postalCode: z\n .string()\n .max(20, 'Postal code must be 20 characters or less')\n .optional(),\n country: z\n .string()\n .max(50, 'Country must be 50 characters or less')\n .optional(),\n});\n\nexport const customerContactSchema = z.object({\n phone: z\n .object({\n type: contactTypeSchema.optional(),\n number: z\n .string()\n .min(1, 'Phone number is required')\n .max(30, 'Phone number must be 30 characters or less'),\n })\n .optional(),\n email: z\n .object({\n type: emailTypeSchema.optional(),\n address: z\n .string()\n .email('Valid email address is required')\n .max(100, 'Email must be 100 characters or less'),\n })\n .optional(),\n mobile: z\n .object({\n type: contactTypeSchema.optional(),\n number: z\n .string()\n .min(1, 'Mobile number is required')\n .max(30, 'Mobile number must be 30 characters or less'),\n })\n .optional(),\n});\n\nexport const customerSchema = z.object({\n id: z.string().max(6, 'Customer ID must be 6 characters or less'),\n type: customerTypeSchema,\n status: customerStatusTypeSchema,\n personalInfo: z\n .object({\n title: z\n .string()\n .max(10, 'Title must be 10 characters or less')\n .optional(),\n firstName: z\n .string()\n .min(1, 'First name is required')\n .max(50, 'First name must be 50 characters or less'),\n lastName: z\n .string()\n .min(1, 'Last name is required')\n .max(50, 'Last name must be 50 characters or less'),\n dateOfBirth: dateStringSchema.optional(),\n gender: genderTypeSchema.optional(),\n nationality: z\n .string()\n .max(3, 'Nationality code must be 3 characters or less')\n .optional(),\n })\n .optional(),\n contact: customerContactSchema.optional(),\n address: customerAddressSchema.optional(),\n businessInfo: z\n .object({\n companyName: z\n .string()\n .max(100, 'Company name must be 100 characters or less')\n .optional(),\n taxId: z\n .string()\n .max(30, 'Tax ID must be 30 characters or less')\n .optional(),\n vatCode: z\n .string()\n .max(30, 'VAT code must be 30 characters or less')\n .optional(),\n fiscalCode: z\n .string()\n .max(30, 'Fiscal code must be 30 characters or less')\n .optional(),\n licenseNumber: z\n .string()\n .max(50, 'License number must be 50 characters or less')\n .optional(),\n })\n .optional(),\n preferences: z\n .object({\n language: z\n .string()\n .length(2, 'Language code must be exactly 2 characters')\n .optional(),\n currency: z\n .string()\n .length(3, 'Currency code must be exactly 3 characters')\n .optional(),\n communicationMethod: communicationMethodTypeSchema.optional(),\n })\n .optional(),\n});\n\nexport const bookingPassengerSchema = z.object({\n id: z\n .string()\n .regex(/^\\d{3}$/, 'Passenger ID must be 3 digits (001, 002, etc.)'),\n type: passengerTypeSchema,\n title: titleTypeSchema.optional(),\n firstName: z\n .string()\n .min(1, 'First name is required')\n .max(50, 'First name must be 50 characters or less'),\n lastName: z\n .string()\n .min(1, 'Last name is required')\n .max(50, 'Last name must be 50 characters or less'),\n dateOfBirth: dateStringSchema.optional(),\n gender: genderTypeSchema.optional(),\n nationality: z\n .string()\n .max(3, 'Nationality code must be 3 characters or less')\n .optional(),\n passport: z\n .object({\n number: z\n .string()\n .min(1, 'Passport number is required')\n .max(20, 'Passport number must be 20 characters or less'),\n expiryDate: dateStringSchema,\n issuingCountry: z\n .string()\n .min(1, 'Issuing country is required')\n .max(3, 'Country code must be 3 characters or less'),\n })\n .optional(),\n address: customerAddressSchema.optional(),\n contact: customerContactSchema.optional(),\n});\n\nexport const bookingServiceSchema = z.object({\n id: z.string().min(1, 'Service ID is required'),\n type: serviceTypeSchema,\n status: serviceStatusTypeSchema,\n code: z\n .string()\n .max(50, 'Service code must be 50 characters or less')\n .optional(),\n name: z\n .string()\n .max(200, 'Service name must be 200 characters or less')\n .optional(),\n description: z\n .string()\n .max(500, 'Description must be 500 characters or less')\n .optional(),\n startDate: dateStringSchema.optional(),\n endDate: dateStringSchema.optional(),\n price: z\n .object({\n currency: z\n .string()\n .length(3, 'Currency code must be exactly 3 characters'),\n amount: z.number().nonnegative('Amount must be non-negative'),\n })\n .optional(),\n});\n\nexport const bookingPaymentSchema = z.object({\n id: z.string().min(1, 'Payment ID is required'),\n type: paymentTypeSchema,\n status: paymentStatusTypeSchema,\n amount: z.object({\n currency: z\n .string()\n .length(3, 'Currency code must be exactly 3 characters'),\n amount: z.number().positive('Amount must be positive'),\n }),\n details: z\n .object({\n cardNumber: z\n .string()\n .max(20, 'Card number must be 20 characters or less')\n .optional(),\n expiryDate: z\n .string()\n .regex(/^\\d{2}\\/\\d{2}$/, 'Expiry date must be in MM/YY format')\n .optional(),\n cardHolderName: z\n .string()\n .max(100, 'Cardholder name must be 100 characters or less')\n .optional(),\n })\n .optional(),\n});\n\n// ===== REQUEST SCHEMAS =====\n\nconst paginationSchema = z\n .object({\n pages: z\n .number()\n .int()\n .positive('Pages must be positive')\n .max(100, 'Pages cannot exceed 100'),\n page: z.number().int().min(1, 'Page must be at least 1'),\n })\n .optional();\n\nexport const searchCustomerRequestSchema = z.discriminatedUnion('type', [\n z.object({\n type: z.literal('code'),\n code: z\n .string()\n .min(1, 'Code is required')\n .max(6, 'Code must be 6 characters or less'),\n pagination: paginationSchema,\n }),\n z.object({\n type: z.literal('name'),\n name: z.string().min(1, 'Name is required'),\n city: z.string().max(50, 'City must be 50 characters or less').optional(),\n pagination: paginationSchema,\n }),\n z.object({\n type: z.literal('vat_code'),\n vatCode: z.string().min(1, 'VAT code is required'),\n phoneNumber: z\n .string()\n .max(30, 'Phone number must be 30 characters or less')\n .optional(),\n pagination: paginationSchema,\n }),\n z.object({\n type: z.literal('zone'),\n zipCode: z.string().min(1, 'Zip code is required'),\n city: z.string().max(50, 'City must be 50 characters or less').optional(),\n countyCode: z\n .string()\n .max(10, 'County code must be 10 characters or less')\n .optional(),\n pagination: paginationSchema,\n }),\n z.object({\n type: z.literal('category'),\n categoryCode: z.string().min(1, 'Category code is required'),\n pagination: paginationSchema,\n }),\n z.object({\n type: z.literal('email'),\n email: z.email('Valid email is required'),\n pagination: paginationSchema,\n }),\n z.object({\n type: z.literal('last_mod_date'),\n from: z\n .string()\n .regex(/^\\d{4}-\\d{2}-\\d{2}$/, 'Date must be in YYYY-MM-DD format'),\n to: z\n .string()\n .regex(/^\\d{4}-\\d{2}-\\d{2}$/, 'Date must be in YYYY-MM-DD format'),\n pagination: paginationSchema,\n }),\n z.object({\n type: z.literal('search_field'),\n searchField: z.string().min(1, 'Search field is required'),\n pagination: paginationSchema,\n }),\n z.object({\n type: z.literal('external_ref_code'),\n externalRefCode: z.string().min(1, 'External ref code is required'),\n pagination: paginationSchema,\n }),\n]);\n\nconst baseBookingRequestSchema = z.object({\n description: z\n .string()\n .max(200, 'Description must be 200 characters or less')\n .optional(),\n startDate: z.string().min(1, 'Start date is required'),\n endDate: z.string().min(1, 'End date is required'),\n currency: z\n .string()\n .max(3, 'Currency code must be 3 characters or less')\n .optional(),\n passengers: z\n .array(bookingPassengerSchema)\n .min(1, 'At least one passenger is required')\n .max(99, 'Maximum 99 passengers allowed'),\n services: z\n .array(bookingServiceSchema)\n .min(1, 'At least one service is required')\n .max(50, 'Maximum 50 services allowed'),\n statisticCodes: z\n .object({\n code1: z\n .string()\n .max(4, 'Statistic code must be 4 characters or less')\n .optional(),\n code2: z\n .string()\n .max(4, 'Statistic code must be 4 characters or less')\n .optional(),\n code3: z\n .string()\n .max(4, 'Statistic code must be 4 characters or less')\n .optional(),\n code4: z\n .string()\n .max(4, 'Statistic code must be 4 characters or less')\n .optional(),\n code5: z\n .string()\n .max(4, 'Statistic code must be 4 characters or less')\n .optional(),\n code6: z\n .string()\n .max(4, 'Statistic code must be 4 characters or less')\n .optional(),\n })\n .optional(),\n destination: z\n .object({\n code: z.string().optional(),\n iataCode: z.string().optional(),\n nationCode: z.string().optional(),\n })\n .optional(),\n deadlines: z\n .array(\n z.object({\n code: z.string().min(1, 'Deadline code is required'),\n description: z.string().optional(),\n expireDate: z.string().optional(),\n })\n )\n .optional(),\n printDocument: z.boolean().optional(),\n sendDocumentViaEmail: z.boolean().optional(),\n});\n\nexport const createBookingRequestSchema = z.union([\n baseBookingRequestSchema.extend({\n customerId: z\n .string()\n .max(6, 'Customer ID must be 6 characters or less')\n .min(1, 'Customer ID is required'),\n customerDetails: z.never().optional(),\n }),\n baseBookingRequestSchema.extend({\n customerId: z.never().optional(),\n customerDetails: customerSchema,\n }),\n]);\n\nexport const cancelBookingRequestSchema = z.object({\n bookingId: z\n .string()\n .min(1, 'Booking ID is required')\n .max(20, 'Booking ID must be 20 characters or less'),\n customerId: z\n .string()\n .max(6, 'Customer ID must be 6 characters or less')\n .optional(),\n reason: cancelReasonTypeSchema,\n description: z\n .string()\n .max(500, 'Description must be 500 characters or less')\n .optional(),\n refundRequest: z\n .object({\n amount: z.number().positive('Refund amount must be positive'),\n currency: z\n .string()\n .length(3, 'Currency code must be exactly 3 characters'),\n method: refundMethodTypeSchema,\n })\n .optional(),\n});\n\nexport const printDocumentRequestSchema = z.object({\n bookingId: z\n .string()\n .min(1, 'Booking ID is required')\n .max(20, 'Booking ID must be 20 characters or less'),\n customerId: z\n .string()\n .max(6, 'Customer ID must be 6 characters or less')\n .optional(),\n documentType: documentTypeSchema,\n format: documentFormatTypeSchema.optional(),\n language: z\n .string()\n .length(2, 'Language code must be exactly 2 characters')\n .optional(),\n deliveryMethod: z\n .object({\n type: deliveryMethodTypeSchema,\n address: z\n .string()\n .max(100, 'Delivery address must be 100 characters or less')\n .optional(),\n })\n .optional(),\n});\n\nexport const addPaymentRequestSchema = z.union([\n z.object({\n bookingId: z\n .string()\n .min(1, 'Booking ID is required')\n .max(20, 'Booking ID must be 20 characters or less'),\n bookingRefCode: z.never().optional(),\n payments: z\n .array(bookingPaymentSchema)\n .min(1, 'At least one payment is required')\n .max(20, 'Maximum 20 payments allowed'),\n enableMultiple: z.boolean().optional(),\n operationType: z\n .enum(['absolute', 'final', 'final_no_controls'])\n .optional(),\n }),\n z.object({\n bookingId: z.never().optional(),\n bookingRefCode: z\n .string()\n .min(1, 'Booking reference code is required')\n .max(20, 'Booking reference code must be 20 characters or less'),\n payments: z\n .array(bookingPaymentSchema)\n .min(1, 'At least one payment is required')\n .max(20, 'Maximum 20 payments allowed'),\n enableMultiple: z.boolean().optional(),\n operationType: z\n .enum(['absolute', 'final', 'final_no_controls'])\n .optional(),\n }),\n]);\n\nexport const updateBookingHeaderSchema = z.object({\n bookingId: z\n .string()\n .min(1, 'Booking ID is required')\n .max(20, 'Booking ID must be 20 characters or less'),\n customerId: z.string().max(6, 'Customer ID must be 6 characters or less'),\n startDate: dateStringSchema,\n passengers: z.array(bookingPassengerSchema).optional(),\n notes: z.string().max(999, 'Notes must be 999 characters or less').optional(),\n statisticCodes: z\n .object({\n code1: z\n .string()\n .max(4, 'Statistic code must be 4 characters or less')\n .optional(),\n code2: z\n .string()\n .max(4, 'Statistic code must be 4 characters or less')\n .optional(),\n code3: z\n .string()\n .max(4, 'Statistic code must be 4 characters or less')\n .optional(),\n code4: z\n .string()\n .max(4, 'Statistic code must be 4 characters or less')\n .optional(),\n code5: z\n .string()\n .max(4, 'Statistic code must be 4 characters or less')\n .optional(),\n code6: z\n .string()\n .max(4, 'Statistic code must be 4 characters or less')\n .optional(),\n })\n .optional(),\n});\n\nexport const updateBookingServicesSchema = z.object({\n bookingId: z\n .string()\n .min(1, 'Booking ID is required')\n .max(20, 'Booking ID must be 20 characters or less'),\n customerId: z.string().max(6, 'Customer ID must be 6 characters or less'),\n services: z\n .array(bookingServiceSchema)\n .min(1, 'At least one service is required')\n .max(50, 'Maximum 50 services allowed'),\n});\n\nexport const setBookingStatusSchema = z.object({\n bookingId: z\n .string()\n .min(1, 'Booking ID is required')\n .max(20, 'Booking ID must be 20 characters or less'),\n customerId: z.string().max(6, 'Customer ID must be 6 characters or less'),\n status: bookingStatusTypeSchema,\n expireDate: dateStringSchema.optional(),\n});\n\n// ===== RESPONSE SCHEMAS =====\n\nexport const bookingResponseSchema = z.object({\n id: z.string().min(1, 'Booking ID is required'),\n status: bookingStatusTypeSchema,\n createdAt: dateTimeStringSchema,\n updatedAt: dateTimeStringSchema,\n customer: customerSchema,\n passengers: z.array(bookingPassengerSchema),\n services: z.array(bookingServiceSchema),\n pricing: z.object({\n totalAmount: z.object({\n currency: z\n .string()\n .length(3, 'Currency code must be exactly 3 characters'),\n amount: z.number().nonnegative('Amount must be non-negative'),\n }),\n breakdowns: z\n .array(\n z.object({\n type: pricingItemTypeSchema,\n description: z.string().min(1, 'Description is required'),\n amount: z.number(),\n })\n )\n .optional(),\n }),\n});\n\nexport const customerSearchResultSchema = z.object({\n customers: z.array(customerSchema),\n pagination: z.object({\n page: z.number().int().min(1, 'Page must be at least 1'),\n pages: z.number().int().min(1, 'Pages must be at least 1'),\n totalItems: z.number().int().min(0, 'Total items must be non-negative'),\n hasMore: z.boolean(),\n }),\n});\n\nexport const printedDocumentSchema = z.object({\n fileName: z.string().min(1, 'File name is required'),\n content: z.string().optional(),\n contentSize: z.number().int().min(0, 'Content size must be non-negative'),\n});\n\nexport const documentPrintResultSchema = z.object({\n emailRecipient: z.email('Valid email address is required').optional(),\n documents: z\n .array(printedDocumentSchema)\n .min(0, 'Documents array is required'),\n additionalDocuments: z\n .array(\n z.object({\n emailRecipient: z.string().email('Valid email address is required'),\n documents: z.array(printedDocumentSchema),\n })\n )\n .optional(),\n});\n\nexport const operationResponseSchema = z.object({\n success: z.boolean(),\n message: z.string().optional(),\n data: z.any().optional(),\n});\n\n// ===== EXPORT ALL SCHEMAS =====\n\nexport const apiSchemas = {\n // Type schemas\n addressType: addressTypeSchema,\n contactType: contactTypeSchema,\n emailType: emailTypeSchema,\n passengerType: passengerTypeSchema,\n titleType: titleTypeSchema,\n genderType: genderTypeSchema,\n serviceType: serviceTypeSchema,\n serviceStatusType: serviceStatusTypeSchema,\n paymentType: paymentTypeSchema,\n paymentStatusType: paymentStatusTypeSchema,\n customerType: customerTypeSchema,\n searchOperatorType: searchOperatorTypeSchema,\n bookingType: bookingTypeSchema,\n priorityType: priorityTypeSchema,\n specialRequestType: specialRequestTypeSchema,\n cancelReasonType: cancelReasonTypeSchema,\n refundMethodType: refundMethodTypeSchema,\n documentType: documentTypeSchema,\n documentFormatType: documentFormatTypeSchema,\n deliveryMethodType: deliveryMethodTypeSchema,\n bookingStatusType: bookingStatusTypeSchema,\n pricingItemType: pricingItemTypeSchema,\n deliveryStatusType: deliveryStatusTypeSchema,\n customerStatusType: customerStatusTypeSchema,\n communicationMethodType: communicationMethodTypeSchema,\n\n // Common schemas\n customerAddress: customerAddressSchema,\n customerContact: customerContactSchema,\n customer: customerSchema,\n bookingPassenger: bookingPassengerSchema,\n bookingService: bookingServiceSchema,\n bookingPayment: bookingPaymentSchema,\n\n // Request schemas\n searchCustomerRequest: searchCustomerRequestSchema,\n createBookingRequest: createBookingRequestSchema,\n cancelBookingRequest: cancelBookingRequestSchema,\n printDocumentRequest: printDocumentRequestSchema,\n addPaymentRequest: addPaymentRequestSchema,\n updateBookingHeader: updateBookingHeaderSchema,\n updateBookingServices: updateBookingServicesSchema,\n setBookingStatus: setBookingStatusSchema,\n\n // Response schemas\n bookingResponse: bookingResponseSchema,\n customerSearchResult: customerSearchResultSchema,\n printedDocument: printedDocumentSchema,\n documentPrintResult: documentPrintResultSchema,\n operationResponse: operationResponseSchema,\n} as const;\n\n// ===== INFERRED TYPES =====\n\nexport type AddressType = z.infer<typeof addressTypeSchema>;\nexport type ContactType = z.infer<typeof contactTypeSchema>;\nexport type EmailType = z.infer<typeof emailTypeSchema>;\nexport type TitleType = z.infer<typeof titleTypeSchema>;\nexport type SearchOperatorType = z.infer<typeof searchOperatorTypeSchema>;\nexport type BookingType = z.infer<typeof bookingTypeSchema>;\nexport type PriorityType = z.infer<typeof priorityTypeSchema>;\nexport type SpecialRequestType = z.infer<typeof specialRequestTypeSchema>;\nexport type CommunicationMethodType = z.infer<\n typeof communicationMethodTypeSchema\n>;\n\nexport type CustomerAddress = z.infer<typeof customerAddressSchema>;\nexport type CustomerContact = z.infer<typeof customerContactSchema>;\nexport type Customer = z.infer<typeof customerSchema>;\nexport type Price = {\n currency: string;\n amount: number;\n};\nexport type BookingPassenger = z.infer<typeof bookingPassengerSchema>;\nexport type BookingService = z.infer<typeof bookingServiceSchema>;\nexport type BookingPayment = z.infer<typeof bookingPaymentSchema>;\n\nexport type SearchCustomerRequest = z.infer<typeof searchCustomerRequestSchema>;\nexport type CreateBookingRequest = z.infer<typeof createBookingRequestSchema>;\nexport type CancelBookingRequest = z.infer<typeof cancelBookingRequestSchema>;\nexport type PrintDocumentRequest = z.infer<typeof printDocumentRequestSchema>;\nexport type AddPaymentRequest = z.infer<typeof addPaymentRequestSchema>;\nexport type UpdateBookingHeaderRequest = z.infer<\n typeof updateBookingHeaderSchema\n>;\nexport type UpdateBookingServicesRequest = z.infer<\n typeof updateBookingServicesSchema\n>;\nexport type SetBookingStatusRequest = z.infer<typeof setBookingStatusSchema>;\n\nexport type BookingResponse = z.infer<typeof bookingResponseSchema>;\nexport type CustomerSearchResult = z.infer<typeof customerSearchResultSchema>;\nexport type PrintedDocument = z.infer<typeof printedDocumentSchema>;\nexport type DocumentPrintResult = z.infer<typeof documentPrintResultSchema>;\nexport type OperationResponse<T = unknown> = {\n success: boolean;\n message?: string;\n data?: T;\n};\n\nexport type CancelResponseData = {\n refundInfo?: {\n refundAmount: number;\n currency: string;\n refundMethod: string;\n processingTime: string;\n };\n};\n\nexport type PaymentResponseData = {\n booking: BookingResponse;\n paymentSummary: {\n totalPaid: {\n currency: string;\n amount: number;\n };\n outstandingAmount: {\n currency: string;\n amount: number;\n };\n paymentHistory: BookingPayment[];\n };\n};\n\nexport type DocumentFormatType =\n (typeof DocumentFormatType)[keyof typeof DocumentFormatType];\nexport type DeliveryMethodType =\n (typeof DeliveryMethodType)[keyof typeof DeliveryMethodType];\n","/**\n * Creates a date string with validation using native Date\n * @param date - Date string in YYYY-MM-DD format or Date object\n * @returns string in YYYY-MM-DD format or throws error if invalid\n */\nexport const createDateString = (date: string | Date): string => {\n let dateObj: Date;\n\n if (typeof date === 'string') {\n if (!/^\\d{4}-\\d{2}-\\d{2}$/.test(date)) {\n throw new Error(`Invalid date format. Expected YYYY-MM-DD, got: ${date}`);\n }\n\n try {\n // Parse ISO date string (YYYY-MM-DD)\n dateObj = new Date(date + 'T00:00:00.000Z');\n } catch {\n throw new Error(`Invalid date string: ${date}`);\n }\n } else {\n dateObj = date;\n }\n\n if (isNaN(dateObj.getTime())) {\n throw new Error(`Invalid date value: ${date}`);\n }\n\n // Format to YYYY-MM-DD\n const year = dateObj.getUTCFullYear();\n const month = String(dateObj.getUTCMonth() + 1).padStart(2, '0');\n const day = String(dateObj.getUTCDate()).padStart(2, '0');\n\n return `${year}-${month}-${day}`;\n};\n\n/**\n * Creates a datetime string with validation using native Date\n * @param dateTime - DateTime string in ISO 8601 format or Date object\n * @returns string in ISO 8601 format or throws error if invalid\n */\nexport const createDateTimeString = (dateTime: string | Date): string => {\n let dateObj: Date;\n\n if (typeof dateTime === 'string') {\n if (!/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{3})?Z?$/.test(dateTime)) {\n throw new Error(\n `Invalid datetime format. Expected ISO 8601, got: ${dateTime}`\n );\n }\n\n try {\n dateObj = new Date(dateTime);\n } catch {\n throw new Error(`Invalid datetime string: ${dateTime}`);\n }\n } else {\n dateObj = dateTime;\n }\n\n if (isNaN(dateObj.getTime())) {\n throw new Error(`Invalid datetime value: ${dateTime}`);\n }\n\n // Return ISO string with milliseconds and Z\n return dateObj.toISOString();\n};\n\n/**\n * Creates a time string with validation\n * @param time - Time string in HH:MM:SS format\n * @returns string in HH:MM:SS format or throws error if invalid\n */\nexport const createTimeString = (time: string): string => {\n if (!/^\\d{2}:\\d{2}:\\d{2}$/.test(time)) {\n throw new Error(`Invalid time format. Expected HH:MM:SS, got: ${time}`);\n }\n\n const [hours, minutes, seconds] = time.split(':').map(Number);\n if (\n hours < 0 ||\n hours > 23 ||\n minutes < 0 ||\n minutes > 59 ||\n seconds < 0 ||\n seconds > 59\n ) {\n throw new Error(`Invalid time value: ${time}`);\n }\n\n return time;\n};\n","// ===== CUSTOMER TYPE MAPPERS =====\n\nimport {\n CustomerStatusType,\n CustomerType,\n BookingStatusType,\n CustomerStatusTypeValue,\n CustomerTypeValue,\n BookingStatusTypeValue,\n} from '../validation/api-schemas';\nimport { PrintBookingDocumentRQ } from '../types/interfaces';\n\nexport function mapCustomerTypeToXml(\n type: string\n): 'CUSTOMER' | 'SUPPLIER' | 'VOUCHER' | 'SUPPLIER_VOUCHER' {\n const mapping: Record<\n string,\n 'CUSTOMER' | 'SUPPLIER' | 'VOUCHER' | 'SUPPLIER_VOUCHER'\n > = {\n [CustomerType.CUSTOMER]: 'CUSTOMER',\n [CustomerType.SUPPLIER]: 'SUPPLIER',\n [CustomerType.VOUCHER]: 'VOUCHER',\n [CustomerType.SUPPLIER_VOUCHER]: 'SUPPLIER_VOUCHER',\n };\n return mapping[type] || 'CUSTOMER';\n}\n\nexport function mapCustomerTypeFromXml(type: string): CustomerTypeValue {\n const mapping: Record<string, CustomerTypeValue> = {\n CUSTOMER: CustomerType.CUSTOMER,\n SUPPLIER: CustomerType.SUPPLIER,\n VOUCHER: CustomerType.VOUCHER,\n SUPPLIER_VOUCHER: CustomerType.SUPPLIER_VOUCHER,\n };\n return mapping[type] || CustomerType.CUSTOMER;\n}\n\nexport function mapCustomerStatusToXml(\n status: string\n): 'ENABLED' | 'WARNING' | 'BLACKLISTED' | 'DISABLED' {\n const mapping: Record<\n string,\n 'ENABLED' | 'WARNING' | 'BLACKLISTED' | 'DISABLED'\n > = {\n [CustomerStatusType.ENABLED]: 'ENABLED',\n [CustomerStatusType.WARNING]: 'WARNING',\n [CustomerStatusType.BLACKLISTED]: 'BLACKLISTED',\n [CustomerStatusType.DISABLED]: 'DISABLED',\n };\n return mapping[status] || 'ENABLED';\n}\n\nexport function mapCustomerStatusFromXml(\n status: string\n): CustomerStatusTypeValue {\n const mapping: Record<string, CustomerStatusTypeValue> = {\n ENABLED: CustomerStatusType.ENABLED,\n WARNING: CustomerStatusType.WARNING,\n BLACKLISTED: CustomerStatusType.BLACKLISTED,\n DISABLED: CustomerStatusType.DISABLED,\n };\n return mapping[status] || CustomerStatusType.ENABLED;\n}\n\n// ===== BOOKING STATUS MAPPERS =====\n\nexport function mapBookingStatusToXml(\n status: string\n):\n | 'QUOTATION'\n | 'WORK_IN_PROGRESS'\n | 'CONFIRMED'\n | 'OPTIONED'\n | 'NULLIFIED'\n | 'CANCELED' {\n const mapping: Record<\n string,\n | 'QUOTATION'\n | 'WORK_IN_PROGRESS'\n | 'CONFIRMED'\n | 'OPTIONED'\n | 'NULLIFIED'\n | 'CANCELED'\n > = {\n [BookingStatusType.QUOTATION]: 'QUOTATION',\n [BookingStatusType.WORK_IN_PROGRESS]: 'WORK_IN_PROGRESS',\n [BookingStatusType.CONFIRMED]: 'CONFIRMED',\n [BookingStatusType.OPTIONED]: 'OPTIONED',\n [BookingStatusType.NULLIFIED]: 'NULLIFIED',\n [BookingStatusType.CANCELED]: 'CANCELED',\n };\n return mapping[status] || 'QUOTATION';\n}\n\nexport function mapBookingStatusFromXml(\n status: string\n): BookingStatusTypeValue {\n const mapping: Record<string, BookingStatusTypeValue> = {\n QUOTATION: BookingStatusType.QUOTATION,\n WORK_IN_PROGRESS: BookingStatusType.WORK_IN_PROGRESS,\n CONFIRMED: BookingStatusType.CONFIRMED,\n OPTIONED: BookingStatusType.OPTIONED,\n NULLIFIED: BookingStatusType.NULLIFIED,\n CANCELED: BookingStatusType.CANCELED,\n };\n return mapping[status] || BookingStatusType.QUOTATION;\n}\n\n// ===== DOCUMENT TYPE MAPPERS =====\n\nexport function mapDocumentTypeToXml(\n type: string\n): PrintBookingDocumentRQ['InfoDocumentsToPrint']['InfoDocumentToPrint'][number]['DocumentType'] {\n const mapping: Record<\n string,\n PrintBookingDocumentRQ['InfoDocumentsToPrint']['InfoDocumentToPrint'][number]['DocumentType']\n > = {\n visa_request: 'VISA_REQUEST',\n travel_information: 'TRAVEL_INFORMATION',\n voucher: 'VOUCHER',\n booking_contract: 'BOOKING_CONTRACT',\n booking_confirmation: 'BOOKING_CONFIRMATION',\n supplier_service_list: 'SUPPLIER_SERVICE_LIST',\n invoice: 'INVOICE',\n proforma_invoice: 'PROFORMA_INVOICE',\n adeguamento: 'ADEGUAMENTO',\n reservation_form: 'RESERVATION_FORM',\n open_xml: 'OPEN_XML',\n sales_invoice: 'SALES_INVOICE',\n ticketing_tmaster: 'TICKETING_TMASTER',\n summary_form: 'SUMMARY_FORM',\n };\n return mapping[type] || 'VOUCHER';\n}\n\n// ===== GENDER MAPPERS =====\n\nexport function mapGenderToXml(gender: string): 'M' | 'F' {\n const mapping: Record<string, 'M' | 'F'> = {\n male: 'M',\n female: 'F',\n };\n return mapping[gender] || 'M';\n}\n","import {\n Customer,\n BookingPassenger,\n BookingService,\n SearchCustomerRequest,\n CreateBookingRequest,\n CancelBookingRequest,\n PrintDocumentRequest,\n AddPaymentRequest,\n BookingStatusType,\n PassengerType,\n GenderType,\n ServiceType,\n ServiceStatusType,\n PassengerTypeValue,\n BookingStatusTypeValue,\n} from '../validation/api-schemas';\nimport { createDateString } from '../utils/date-helpers';\nimport {\n mapCustomerTypeToXml,\n mapCustomerStatusToXml,\n mapBookingStatusToXml,\n mapDocumentTypeToXml,\n mapGenderToXml,\n} from './type-mappers';\nimport {\n MasterRecordDetail,\n PassengerDetail,\n SearchMasterRecordRQ,\n BookFileRQ,\n CancelFileRQ,\n PrintBookingDocumentRQ,\n FilePaymentListRQ,\n ManageMasterRecordRQ,\n ModiFileHeaderRQ,\n ModFileServicesRQ,\n SetStatusRQ,\n SetStatusServiceRQ,\n SelectedServiceDetail,\n BookedServiceDetail,\n} from '../types/interfaces';\nimport { InsertCriteria } from '../types/common';\n\n// ===== AVES XML MAPPERS =====\n\nexport function mapPassengerFromXml(xml: PassengerDetail): BookingPassenger {\n const nameParts = (xml.Name || '').split(' ');\n const lastName = nameParts.pop() || '';\n const firstName = nameParts.join(' ') || xml.Name;\n\n const typeMap: Record<string, PassengerTypeValue> = {\n AD: PassengerType.ADULT,\n CH: PassengerType.CHILD,\n IN: PassengerType.INFANT,\n OV: PassengerType.SENIOR,\n };\n\n return {\n id: xml['@RPH'],\n type: typeMap[xml.CategoryCode] || PassengerType.ADULT,\n title: undefined,\n firstName,\n lastName,\n dateOfBirth: xml.BirthDate ? createDateString(xml.BirthDate) : undefined,\n gender:\n xml.Sex === 'M'\n ? GenderType.MALE\n : xml.Sex === 'F'\n ? GenderType.FEMALE\n : undefined,\n nationality: xml.NationCode || xml.CitizenshipCode,\n passport: xml.IDDocInfo\n ? {\n number: xml.IDDocInfo['@IDCode'] || '',\n expiryDate: createDateString(xml.IDDocInfo['@IDExpireDate'] || ''),\n issuingCountry: '',\n }\n : undefined,\n address: undefined,\n contact:\n xml.eMail || xml.PhoneNumber\n ? {\n email: xml.eMail ? { address: xml.eMail } : undefined,\n phone: xml.PhoneNumber ? { number: xml.PhoneNumber } : undefined,\n }\n : undefined,\n };\n}\n\n// ===== SERVICE MAPPERS =====\n\nexport function mapServiceFromXml(xml: BookedServiceDetail): BookingService {\n return {\n id: xml['@ServiceCode'],\n type: ServiceType.HOTEL, // Default, should be determined from TOServiceType\n status: ServiceStatusType.PENDING,\n code: xml['@ServiceCode'],\n name: xml.FirstDescription,\n description: xml.SecondDescription,\n startDate: xml.StartDate ? createDateString(xml.StartDate) : undefined,\n endDate: xml.EndDate ? createDateString(xml.EndDate) : undefined,\n price: xml.ServiceTotalAmountDetail?.ServiceTotalPrice\n ? {\n currency: 'EUR',\n amount: parseFloat(xml.ServiceTotalAmountDetail.ServiceTotalPrice),\n }\n : undefined,\n };\n}\n\n// ===== REQUEST MAPPERS =====\n\nconst buildSearchMasterRecordRQ = (\n request: SearchCustomerRequest,\n data: SearchMasterRecordRQ\n): SearchMasterRecordRQ => {\n switch (request.type) {\n case 'code':\n data.RecordCode = request.code;\n break;\n case 'name':\n data.Name = request.name;\n if (request.city) {\n data.City = request.city;\n }\n break;\n case 'vat_code':\n data.VatCode = request.vatCode;\n if (request.phoneNumber) {\n data.PhoneNumber = request.phoneNumber;\n }\n break;\n case 'zone':\n data.ZipCode = request.zipCode;\n if (request.city) {\n data.City = request.city;\n }\n if (request.countyCode) {\n data.CountyCode = request.countyCode;\n }\n break;\n case 'category':\n data.CategoryCode = request.categoryCode;\n break;\n case 'email':\n data.Email = request.email;\n break;\n case 'last_mod_date':\n data.LastModificationDate = {\n '@MinDate': request.from,\n '@MaxDate': request.to,\n };\n break;\n case 'search_field':\n data.SearchFieldValue = request.searchField;\n break;\n case 'external_ref_code':\n data.SearchFieldValue = request.externalRefCode;\n break;\n }\n return data;\n};\n\nexport function mapSearchCustomerToXml(\n request: SearchCustomerRequest\n): SearchMasterRecordRQ {\n const result: SearchMasterRecordRQ = {\n SearchType:\n request.type.toUpperCase() as SearchMasterRecordRQ['SearchType'],\n };\n\n return buildSearchMasterRecordRQ(request, result);\n}\n\nexport function mapCustomerToXml(data: Customer): MasterRecordDetail {\n const fullName = data.personalInfo\n ? `${data.personalInfo.firstName} ${data.personalInfo.lastName}`.trim()\n : data.id;\n\n return {\n '@RecordCode': data.id,\n RecordType: mapCustomerTypeToXml(data.type),\n Name: fullName,\n LanguageCode: data.preferences?.language || '01',\n\n // Personal Info\n Moniker: data.personalInfo?.title,\n Gender: data.personalInfo?.gender\n ? mapGenderToXml(data.personalInfo?.gender)\n : undefined,\n BirthDate: data.personalInfo?.dateOfBirth,\n CitizenshipCode: data.personalInfo?.nationality,\n\n // Contact Info\n Email: data.contact?.email?.address,\n FirstPhoneNumber: data.contact?.phone?.number,\n MobilePhone: data.contact?.phone?.number,\n\n // Address\n Address: data.address?.street,\n CityName: data.address?.city,\n StateCode: data.address?.country,\n ZipCode: data.address?.postalCode,\n\n // Business Info\n FiscalCode: data.businessInfo?.taxId,\n VatCode: data.businessInfo?.taxId,\n\n // Status\n RecordStatus: mapCustomerStatusToXml(data.status),\n\n // Preferences\n FinancialDetail: data.preferences?.currency\n ? {\n '@CurrencyCode': data.preferences.currency,\n }\n : undefined,\n };\n}\n\nexport function mapCreateBookingToXml(data: CreateBookingRequest): BookFileRQ {\n const customerDetail: MasterRecordDetail = data.customerDetails\n ? mapCustomerToXml(data.customerDetails)\n : ({\n '@RecordCode': data.customerId || '',\n RecordType: 'CUSTOMER',\n Name: 'Customer',\n LanguageCode: '01',\n } as MasterRecordDetail);\n\n return {\n CustomerDetail: customerDetail,\n CurrencyCode: data.currency,\n BookingFileStatus: {\n '@Value': 'QUOTATION',\n },\n StatisticCodes: data.statisticCodes\n ? {\n '@sCode1': data.statisticCodes.code1,\n '@sCode2': data.statisticCodes.code2,\n '@sCode3': data.statisticCodes.code3,\n '@sCode4': data.statisticCodes.code4,\n '@sCode5': data.statisticCodes.code5,\n '@sCode6': data.statisticCodes.code6,\n }\n : undefined,\n Destination: data.destination\n ? {\n '@Code': data.destination.code,\n '@IataCode': data.destination.iataCode,\n '@NationCode': data.destination.nationCode,\n }\n : undefined,\n BookingFileDescription: data.description,\n StartDate: data.startDate,\n EndDate: data.endDate,\n BookingFileDocument:\n data.printDocument !== undefined ||\n data.sendDocumentViaEmail !== undefined\n ? {\n '@PrintDoc': data.printDocument || false,\n '@SendDocViaEmail': data.sendDocumentViaEmail || false,\n }\n : undefined,\n DeadlineList: data.deadlines\n ? {\n DeadlineDetail: data.deadlines.map((d) => ({\n '@DeadlineCode': d.code,\n '@Description': d.description,\n '@ExpireDate': d.expireDate,\n })),\n }\n : undefined,\n PassengerList: {\n PassengerDetail: data.passengers.map((p, index) =>\n mapPassengerToAvesXml(p, index + 1)\n ),\n },\n SelectedServiceList: {\n SelectedServiceDetail: data.services.map((s, index) =>\n mapServiceToAvesXml(s, index + 1)\n ),\n },\n };\n}\n\n// Helper function to map API passenger to Aves PassengerDetail\nfunction mapPassengerToAvesXml(\n passenger: BookingPassenger,\n index: number\n): PassengerDetail {\n return {\n '@RPH': String(index).padStart(3, '0'), // 001, 002, 003...\n Name: `${passenger.firstName} ${passenger.lastName}`,\n CategoryCode:\n passenger.type === PassengerType.ADULT\n ? 'AD'\n : passenger.type === PassengerType.CHILD\n ? 'CH'\n : passenger.type === PassengerType.INFANT\n ? 'IN'\n : 'OV',\n Sex: passenger.gender === GenderType.MALE ? 'M' : 'F',\n BirthDate: passenger.dateOfBirth,\n eMail: passenger.contact?.email?.address,\n PhoneNumber: passenger.contact?.phone?.number,\n };\n}\n\n// Helper function to map API service to Aves SelectedServiceDetail\nfunction mapServiceToAvesXml(\n service: BookingService,\n sessionNumber: number\n): SelectedServiceDetail {\n return {\n '@sCode': service.id,\n AvesServiceType: 'TOP', // Default - should be determined from service type\n StartDate: service.startDate || new Date().toISOString(),\n EndDate: service.endDate || new Date().toISOString(),\n Qty: 1, // Default quantity\n Pax: 1, // Default passengers\n AvesSession: sessionNumber,\n };\n}\n\nexport function mapCancelBookingToXml(\n data: CancelBookingRequest\n): CancelFileRQ {\n return {\n BookingFileCode: data.bookingId,\n CustomerRecordCode: data.customerId || '', // Required field\n };\n}\n\nexport function mapPrintDocumentToXml(\n data: PrintDocumentRequest\n): PrintBookingDocumentRQ {\n return {\n RefMasterRecordCode: data.customerId || '', // Required\n LanguageCode: data.language || '01', // Required\n BookingFileCode: data.bookingId, // Required\n InfoDocumentsToPrint: {\n InfoDocumentToPrint: [\n {\n DocumentType: mapDocumentTypeToXml(data.documentType),\n },\n ],\n },\n GetDocumentContent: data.deliveryMethod?.type === 'download',\n SendDocumentViaEmail: data.deliveryMethod?.type === 'email',\n };\n}\n\nexport function mapAddPaymentToXml(data: AddPaymentRequest): FilePaymentListRQ {\n let operationType: FilePaymentListRQ['OperationType'] =\n 'AbsoluteAmountsInsertion';\n if (data.operationType === 'final') {\n operationType = 'FinalAmountToAchieve';\n } else if (data.operationType === 'final_no_controls') {\n operationType = 'FinalAmountToAchieveWithoutControls';\n }\n\n return {\n BookingFileCode: data.bookingId,\n BookingFileRefCode: data.bookingRefCode,\n EnableMultiplePayments: data.enableMultiple ?? data.payments.length > 1,\n OperationType: operationType,\n FilePaymentList: {\n FilePaymentDetail: data.payments.map((payment) => ({\n '@PaymentDate': new Date().toISOString(),\n '@Amount': String(payment.amount?.amount || 0),\n '@PaymentType': mapPaymentTypeToAvesXml(payment.type),\n })),\n },\n };\n}\n\n// Helper to map payment type to Aves format\nfunction mapPaymentTypeToAvesXml(\n type: string\n):\n | 'C'\n | 'B'\n | 'D'\n | 'T'\n | 'P'\n | 'R'\n | 'A'\n | 'H'\n | 'I'\n | 'J'\n | 'K'\n | 'L'\n | 'M'\n | 'N'\n | 'O'\n | 'Q'\n | 'S'\n | 'U'\n | 'V' {\n const typeMap: Record<string, string> = {\n cash: 'C',\n bank: 'B',\n bank2: 'D',\n bank3: 'T',\n atm: 'P',\n creditCard: 'R',\n credit_card: 'R',\n rebate: 'A',\n };\n return (typeMap[type] || 'C') as any;\n}\n\n// ===== MASTER RECORD MANAGEMENT MAPPERS =====\n\nexport function mapCreateCustomerToXml(\n customer: Customer\n): ManageMasterRecordRQ {\n const masterRecord = mapCustomerToXml(customer);\n masterRecord['@InsertCriteria'] = 'S'; // S = Insert always new record\n return {\n MasterRecordDetail: masterRecord,\n };\n}\n\nexport function mapUpdateCustomerToXml(\n customer: Customer\n): ManageMasterRecordRQ {\n const masterRecord = mapCustomerToXml(customer);\n masterRecord['@InsertCriteria'] = 'T'; // T = If record exists update all fields\n return {\n MasterRecordDetail: masterRecord,\n };\n}\n\nexport function mapUpsertCustomerToXml(\n customer: Customer\n): ManageMasterRecordRQ {\n const masterRecord = mapCustomerToXml(customer);\n masterRecord['@InsertCriteria'] = 'M'; // M = If record exists update only secondary fields\n return {\n MasterRecordDetail: masterRecord,\n };\n}\n\nexport function mapUpdateBookingHeaderToXml(\n customerRecordCode: string,\n bookingFileCode: string,\n bookingFileStartDate: string,\n updates?: {\n newCustomerRecordCode?: string;\n passengers?: BookingPassenger[];\n notes?: string;\n }\n): ModiFileHeaderRQ {\n return {\n BookingFileCode: bookingFileCode,\n BookingFileStartDate: bookingFileStartDate,\n CustomerRecordCode: customerRecordCode,\n NewCustomerRecordCode: updates?.newCustomerRecordCode,\n BookingNote: updates?.notes,\n PassengerList: updates?.passengers\n ? {\n PassengerDetail: updates.passengers.map((p, index) =>\n mapPassengerToAvesXml(p, index + 1)\n ),\n }\n : undefined,\n };\n}\n\nexport function mapUpdateBookingServicesToXml(\n customerRecordCode: string,\n bookingFileCode: string,\n services: BookingService[]\n): ModFileServicesRQ {\n return {\n CustomerRecordCode: customerRecordCode,\n BookingFileCode: bookingFileCode,\n SelectedServiceList: {\n SelectedServiceDetail: services.map((s, index) =>\n mapServiceToAvesXml(s, index + 1)\n ),\n },\n };\n}\n\nexport function mapSetBookingStatusToXml(\n customerRecordCode: string,\n bookingFileCode: string,\n status: BookingStatusTypeValue,\n options?: {\n expiredDate?: string;\n optionedFileExpireDatePolicy?:\n | 'NOT_SET'\n | 'CONSIDER_HOLIDAY'\n | 'CONSIDER_HOLIDAY_AND_SATURDAY';\n backOfficeRequest?: boolean;\n printDoc?: boolean;\n sendDocViaEmail?: boolean;\n applyPenalty?: boolean;\n penaltyCode?: string;\n simulateCancelAndGetPenalty?: boolean;\n }\n): SetStatusRQ {\n return {\n CustomerRecordCode: customerRecordCode,\n BookingFileCode: bookingFileCode,\n FileStatus: {\n '@Value': mapBookingStatusToXml(status),\n ...(options?.expiredDate && { '@ExpiredDate': options.expiredDate }),\n ...(options?.optionedFileExpireDatePolicy && {\n '@OptionedFileExpireDatePolicy': options.optionedFileExpireDatePolicy,\n }),\n },\n ...(options?.backOfficeRequest !== undefined && {\n BackOfficeRequest: options.backOfficeRequest,\n }),\n ...(options?.printDoc !== undefined ||\n options?.sendDocViaEmail !== undefined\n ? {\n BookingFileDocument: {\n '@PrintDoc': options.printDoc || false,\n '@SendDocViaEmail': options.sendDocViaEmail || false,\n },\n }\n : {}),\n ...(options?.applyPenalty !== undefined && {\n Penalty: {\n '@Apply': options.applyPenalty,\n ...(options.penaltyCode && { '@SpecificCode': options.penaltyCode }),\n },\n }),\n ...(options?.simulateCancelAndGetPenalty !== undefined && {\n SimulateCancelAndGetPenaltyAmount: options.simulateCancelAndGetPenalty,\n }),\n };\n}\n\nexport function mapSetBookingServiceStatusToXml(\n customerRecordCode: string,\n bookingFileCode: string,\n serviceRef: string,\n statusDate?: string\n): SetStatusServiceRQ {\n return {\n CustomerRecordCode: customerRecordCode,\n BookingFileCode: bookingFileCode,\n BookingServiceRef: serviceRef,\n BookingFileServiceStatus: 'NULLIFIED',\n ...(statusDate && { BookingFileServiceStatusDate: statusDate }),\n };\n}\n","import {\n BookingResponse,\n CustomerSearchResult,\n DocumentPrintResult,\n OperationResponse,\n Customer,\n CancelResponseData,\n PaymentResponseData,\n GenderType,\n CustomerStatusType,\n PricingItemType,\n} from '../validation/api-schemas';\nimport { createDateTimeString, createDateString } from '../utils/date-helpers';\nimport {\n mapCustomerTypeFromXml,\n mapCustomerStatusFromXml,\n mapBookingStatusFromXml,\n} from './type-mappers';\nimport {\n BookingFile,\n SearchMasterRecordRS,\n PrintBookingDocumentRS,\n BookingFileRS,\n CancelFileRS,\n FilePaymentListRS,\n MasterRecordDetail,\n CustomerRecordRS,\n} from '../types/interfaces';\nimport { mapPassengerFromXml, mapServiceFromXml } from './request-mappers';\n\n// ===== CUSTOMER MAPPERS =====\n\nexport function mapCustomerFromXml(xml: MasterRecordDetail): Customer {\n const nameParts = (xml.Name ?? '').split(' ');\n const lastName = nameParts.pop() ?? '';\n const firstName = nameParts.join(' ') ?? xml.Name;\n\n return {\n id: xml['@RecordCode'],\n type: mapCustomerTypeFromXml(xml.RecordType),\n status: mapCustomerStatusFromXml(xml.RecordStatus ?? ''),\n personalInfo: {\n title: xml.Moniker,\n firstName,\n lastName,\n dateOfBirth: xml.BirthDate ? createDateString(xml.BirthDate) : undefined,\n gender:\n xml.Gender === 'M'\n ? GenderType.MALE\n : xml.Gender === 'F'\n ? GenderType.FEMALE\n : undefined,\n nationality: xml.CitizenshipCode,\n },\n contact: {\n email: xml.Email ? { address: xml.Email } : undefined,\n phone: xml.FirstPhoneNumber\n ? { number: xml.FirstPhoneNumber }\n : undefined,\n mobile: xml.MobilePhone ? { number: xml.MobilePhone } : undefined,\n },\n address: xml.Address\n ? {\n street: xml.Address,\n city: xml.CityName,\n state: xml.CountyCode,\n postalCode: xml.ZipCode,\n country: xml.StateCode,\n }\n : undefined,\n businessInfo:\n xml.VatCode || xml.FiscalCode\n ? {\n companyName: undefined,\n taxId: xml.VatCode || xml.FiscalCode,\n licenseNumber: undefined,\n }\n : undefined,\n preferences: {\n language: xml.LanguageCode,\n currency: xml.FinancialDetail?.['@CurrencyCode'],\n communicationMethod: undefined,\n },\n };\n}\n\nexport function mapCustomerResponseFromXml(\n xml: CustomerRecordRS | undefined\n): OperationResponse<Customer> {\n if (!xml) {\n return {\n success: false,\n message: 'Invalid XML response',\n data: undefined,\n };\n }\n\n if (!xml.MasterRecordDetail) {\n return {\n success: false,\n message: 'No master record in response',\n data: undefined,\n };\n }\n\n const customer = mapCustomerFromXml(xml.MasterRecordDetail);\n return {\n success: true,\n message: 'Operation successful',\n data: customer,\n };\n}\n\n// ===== BOOKING RESPONSE MAPPERS =====\n\nexport function mapBookingFromXml(xml: BookingFile): BookingResponse {\n return {\n id: xml.BookingFileCode,\n status: mapBookingStatusFromXml(xml.BookingFileStatus['@Value']),\n createdAt: createDateTimeString(xml.CreationDate),\n updatedAt: createDateTimeString(xml.CreationDate), // Aves doesn't have LastModified in same format\n customer: mapCustomerFromXml({\n '@RecordCode': xml.CustomerRecordCode,\n RecordType: 'CUSTOMER',\n Name: xml.CustomerName,\n LanguageCode: '01',\n Email: xml.CustomerEmail,\n }),\n passengers: xml.PassengerList.PassengerDetail.map(mapPassengerFromXml),\n services:\n xml.BookedServiceList?.BookedServiceDetail.map(mapServiceFromXml) || [],\n pricing: {\n totalAmount: {\n currency: xml.TotalAmountDetail?.CurrencyCode || 'EUR',\n amount: parseFloat(\n xml.TotalAmountDetail?.TotalAmountAfterDiscount || '0'\n ),\n },\n breakdowns: undefined,\n },\n };\n}\n\nexport function mapBookingResponseFromXml(\n xml: BookingFileRS | undefined\n): OperationResponse<BookingResponse> {\n if (!xml) {\n return {\n success: false,\n message: 'Invalid XML response',\n data: undefined,\n };\n }\n\n const success = xml.OperationResult['@Status'] === 'SUCCESS';\n\n if (!success || !xml.BookingFile) {\n return {\n success,\n message: xml?.OperationResult['@Message'],\n data: undefined,\n };\n }\n\n const booking = mapBookingFromXml(xml.BookingFile);\n return {\n success,\n message: xml.OperationResult['@Message'],\n data: booking,\n };\n}\n\n// ===== SEARCH RESPONSE MAPPERS =====\n\nexport function mapSearchResponseFromXml(\n xml: SearchMasterRecordRS | undefined,\n requestPagination?: { pages: number; page: number }\n): CustomerSearchResult {\n const defaultPages = 50;\n const defaultPage = 1;\n\n const pageSize = requestPagination?.pages || defaultPages;\n const page = requestPagination?.page || defaultPage;\n\n if (!xml || !xml.MasterRecordList) {\n return {\n customers: [],\n pagination: {\n page,\n pages: 1,\n totalItems: 0,\n hasMore: false,\n },\n };\n }\n\n const customers =\n xml.MasterRecordList.MasterRecordDetail.map(mapCustomerFromXml);\n const totalItems = customers.length;\n const hasMore = totalItems === pageSize;\n const pages = hasMore ? page + 1 : page;\n\n return {\n customers,\n pagination: {\n page,\n pages,\n totalItems,\n hasMore,\n },\n };\n}\n\n// ===== DOCUMENT RESPONSE MAPPERS =====\n\nexport function mapDocumentResponseFromXml(\n xml: PrintBookingDocumentRS | undefined\n): OperationResponse<DocumentPrintResult> {\n if (!xml) {\n return {\n success: false,\n message: 'Invalid XML response',\n data: undefined,\n };\n }\n\n const documents =\n xml.BaseDocumentAndAttachments?.SingleBaseDocumentOrAttachment.map(\n (doc) => ({\n fileName: doc.DocFileName,\n content: doc.Base64DocContent,\n contentSize: doc.Base64DocContent?.length || 0,\n })\n ) || [];\n\n const additionalDocuments = xml.AdditionalDocuments?.AdditionalDocument.map(\n (additionalDoc) => ({\n emailRecipient: additionalDoc.EmailRecipient,\n documents:\n additionalDoc.BaseDocumentAndAttachments?.SingleBaseDocumentOrAttachment.map(\n (doc) => ({\n fileName: doc.DocFileName,\n content: doc.Base64DocContent,\n contentSize: doc.Base64DocContent?.length || 0,\n })\n ) || [],\n })\n );\n\n const result: DocumentPrintResult = {\n emailRecipient: xml.EmailRecipient,\n documents,\n additionalDocuments,\n };\n\n return {\n success: true,\n message: 'Documents generated successfully',\n data: result,\n };\n}\n\n// ===== CANCEL RESPONSE MAPPERS =====\n\nexport function mapCancelResponseFromXml(\n xml: CancelFileRS | undefined\n): OperationResponse<CancelResponseData> {\n if (!xml) {\n return {\n success: false,\n message: 'Invalid XML response',\n data: undefined,\n };\n }\n\n const success = xml.OperationResult['@Status'] === 'SUCCESS';\n\n if (!success) {\n return {\n success,\n message: xml?.OperationResult['@Message'],\n data: undefined,\n };\n }\n\n return {\n success,\n message: xml.OperationResult['@Message'],\n data: {\n refundInfo: xml.OperationResult.RefundInfo\n ? {\n refundAmount: xml.OperationResult.RefundInfo['@RefundAmount'],\n currency: xml.OperationResult.RefundInfo['@Currency'],\n refundMethod: xml.OperationResult.RefundInfo['@RefundMethod'],\n processingTime: xml.OperationResult.RefundInfo['@ProcessingTime'],\n }\n : undefined,\n },\n };\n}\n\n// ===== PAYMENT RESPONSE MAPPERS =====\n\nexport function mapPaymentResponseFromXml(\n xml: FilePaymentListRS | undefined\n): OperationResponse<PaymentResponseData> {\n if (!xml) {\n return {\n success: false,\n message: 'Invalid XML response',\n data: undefined,\n };\n }\n\n return {\n success: true,\n message: 'Payment registered successfully',\n data: {\n booking: undefined as any, // Simplified response structure\n paymentSummary: {\n totalPaid: {\n currency: 'EUR',\n amount: 0,\n },\n outstandingAmount: {\n currency: 'EUR',\n amount: 0,\n },\n paymentHistory: [],\n },\n },\n };\n}\n","import {\n DynamicModule,\n Module,\n Provider,\n Type,\n ModuleMetadata,\n Global,\n} from '@nestjs/common';\nimport { ConfigModule } from '@nestjs/config';\nimport { AvesService } from './aves.service';\nimport { XmlHttpClient } from '../http/xml-http-client';\nimport { XML_HTTP_CLIENT } from '../tokens';\nimport { avesConfig } from '../config/aves.config';\nimport { AvesSdkConfig } from '../types/common';\nimport { AVES_SDK_CONFIG } from '../tokens';\nimport { configValidationSchema } from '../validation/aves-validation';\n\n/**\n * AvesModule - Dynamic module for AVES SDK integration\n *\n * Provides both synchronous and asynchronous configuration options\n * for the AVES booking system integration.\n *\n * @example\n * ```typescript\n * // Synchronous configuration\n * AvesModule.forRoot({\n * baseUrl: 'https://api.aves.com',\n * hostId: 'your-host-id',\n * xtoken: 'your-token'\n * })\n *\n * // Asynchronous configuration\n * AvesModule.forRootAsync({\n * useFactory: (configService: ConfigService) => ({\n * baseUrl: configService.get('AVES_BASE_URL'),\n * hostId: configService.get('AVES_HOST_ID'),\n * xtoken: configService.get('AVES_XTOKEN')\n * }),\n * inject: [ConfigService]\n * })\n * ```\n */\n\n@Global()\n@Module({})\nexport class AvesModule {\n static readonly MODULE_NAME = 'AvesModule';\n static readonly VERSION = '1.0.0';\n /**\n * Creates a dynamically configured module with synchronous configuration\n * @param config - The AVES SDK configuration object\n * @returns DynamicModule with configured providers\n */\n static forRoot(config: AvesSdkConfig): DynamicModule {\n const validatedConfig = this.validateConfig(config);\n\n return {\n module: AvesModule,\n imports: [ConfigModule.forFeature(avesConfig)],\n providers: [\n {\n provide: AVES_SDK_CONFIG,\n useValue: validatedConfig,\n },\n this.createXmlHttpClientProvider(),\n AvesService,\n ],\n exports: [AvesService, XML_HTTP_CLIENT],\n };\n }\n\n /**\n * Creates a dynamically configured module with asynchronous configuration\n * @param options - Async configuration options\n * @returns DynamicModule with configured providers\n */\n static forRootAsync(options: AvesModuleAsyncOptions): DynamicModule {\n const asyncProviders = this.createAsyncProviders(options);\n\n return {\n module: AvesModule,\n imports: [\n ...(options.imports ?? []),\n ConfigModule.forFeature(avesConfig),\n ],\n providers: [\n ...asyncProviders,\n this.createXmlHttpClientProvider(),\n AvesService,\n ],\n exports: [AvesService, XML_HTTP_CLIENT],\n };\n }\n\n /**\n * Creates XML HTTP client provider\n * @private\n */\n private static createXmlHttpClientProvider(): Provider {\n return {\n provide: XML_HTTP_CLIENT,\n useClass: XmlHttpClient,\n };\n }\n\n /**\n * Creates async providers for configuration\n * @private\n */\n private static createAsyncProviders(\n options: AvesModuleAsyncOptions\n ): Provider[] {\n if (options.useFactory) {\n return [\n {\n provide: AVES_SDK_CONFIG,\n useFactory: async (...args: any[]) => {\n try {\n const config = await options.useFactory!(...args);\n return this.validateConfig(config);\n } catch (error) {\n throw new Error(\n `Failed to create Aves configuration: ${error.message}`\n );\n }\n },\n inject: options.inject ?? [],\n },\n ];\n }\n\n const useClass = options.useClass || options.useExisting;\n if (!useClass) {\n throw new Error(\n 'Invalid AvesModule async options: provide useFactory, useClass, or useExisting'\n );\n }\n\n const providers: Provider[] = [\n {\n provide: AVES_SDK_CONFIG,\n useFactory: async (\n factory: AvesOptionsFactory\n ): Promise<AvesSdkConfig> => {\n try {\n const config = await factory.createAvesOptions();\n return this.validateConfig(config);\n } catch (error) {\n throw new Error(\n `Failed to create Aves configuration: ${error.message}`\n );\n }\n },\n inject: [useClass],\n },\n ];\n\n if (options.useClass) {\n providers.push({ provide: options.useClass, useClass: options.useClass });\n }\n\n return providers;\n }\n\n /**\n * Validates the AVES SDK configuration\n * @private\n */\n private static validateConfig(config: AvesSdkConfig): AvesSdkConfig {\n const validatedConfig = configValidationSchema.safeParse(config);\n if (!validatedConfig.success) {\n throw new Error(\n `Invalid AVES SDK configuration: ${validatedConfig.error.issues\n .map((issue) => issue.message)\n .join(', ')}`\n );\n }\n\n return validatedConfig.data;\n }\n}\n\n/**\n * Interface for AVES options factory\n * Used when creating async configuration providers\n */\nexport interface AvesOptionsFactory {\n createAvesOptions(): Promise<AvesSdkConfig> | AvesSdkConfig;\n}\n\n/**\n * Async configuration options for AvesModule\n * Supports factory functions, existing services, or new service classes\n */\nexport interface AvesModuleAsyncOptions\n extends Pick<ModuleMetadata, 'imports'> {\n /** Use an existing service instance */\n useExisting?: Type<AvesOptionsFactory>;\n /** Use a new service class */\n useClass?: Type<AvesOptionsFactory>;\n /** Use a factory function */\n useFactory?: (...args: any[]) => Promise<AvesSdkConfig> | AvesSdkConfig;\n /** Dependencies to inject into the factory function */\n inject?: (string | symbol | Type<any>)[];\n}\n","import { Inject, Injectable } from '@nestjs/common';\nimport { AVES_SDK_CONFIG } from '../tokens';\nimport type {\n AvesSdkConfig,\n AvesResponseRoot,\n RqHeader,\n} from '../types/common';\nimport type { IXmlHttpClient } from '../http/xml-http-client';\nimport { XML_HTTP_CLIENT } from '../tokens';\nimport { RootElementNames } from '../config/root-elements';\nimport { AvesEndpoints } from '../config/endpoints';\nimport type {\n SearchCustomerRequest,\n CreateBookingRequest,\n CancelBookingRequest,\n PrintDocumentRequest,\n AddPaymentRequest,\n Customer,\n BookingResponse,\n CustomerSearchResult,\n DocumentPrintResult,\n OperationResponse,\n BookingStatusType,\n BookingService,\n CancelResponseData,\n PaymentResponseData,\n BookingStatusTypeValue,\n} from '../validation/api-schemas';\nimport {\n searchCustomerRequestSchema,\n createBookingRequestSchema,\n cancelBookingRequestSchema,\n printDocumentRequestSchema,\n addPaymentRequestSchema,\n customerSchema,\n} from '../validation/api-schemas';\nimport type {\n SearchMasterRecordRQ,\n SearchMasterRecordRS,\n ManageMasterRecordRQ,\n CustomerRecordRS,\n BookFileRQ,\n BookingFileRS,\n ModiFileHeaderRQ,\n ModiFileHeaderRS,\n ModFileServicesRQ,\n SetStatusRQ,\n SetStatusServiceRQ,\n SetStatusServiceRS,\n CancelFileRQ,\n CancelFileRS,\n FilePaymentListRQ,\n FilePaymentListRS,\n PrintBookingDocumentRQ,\n PrintBookingDocumentRS,\n} from '../types/interfaces';\nimport { WrapRequestDto } from './dto/wrap-request.dto';\nimport {\n mapSearchCustomerToXml,\n mapCreateBookingToXml,\n mapCancelBookingToXml,\n mapPrintDocumentToXml,\n mapAddPaymentToXml,\n mapCreateCustomerToXml,\n mapUpdateCustomerToXml,\n mapUpdateBookingHeaderToXml,\n mapUpdateBookingServicesToXml,\n mapSetBookingStatusToXml,\n mapSetBookingServiceStatusToXml,\n mapUpsertCustomerToXml,\n} from '../mappers/request-mappers';\nimport {\n mapSearchResponseFromXml,\n mapCustomerResponseFromXml,\n mapBookingResponseFromXml,\n mapDocumentResponseFromXml,\n mapCancelResponseFromXml,\n mapPaymentResponseFromXml,\n} from '../mappers/response-mappers';\n\n@Injectable()\nexport class AvesService {\n constructor(\n @Inject(AVES_SDK_CONFIG) private readonly config: AvesSdkConfig,\n @Inject(XML_HTTP_CLIENT) private readonly http: IXmlHttpClient\n ) {}\n\n private buildHeader(): RqHeader {\n const { hostId, xtoken, languageCode } = this.config;\n return {\n '@HostID': hostId,\n '@Xtoken': xtoken,\n '@Interface': 'WEB', // default\n '@UserName': 'WEB', // default\n '@LanguageCode': languageCode,\n };\n }\n\n private wrapRequest<T>(body: T): WrapRequestDto<T> {\n return new WrapRequestDto({\n RqHeader: this.buildHeader(),\n Body: body,\n });\n }\n\n // ===== CUSTOMER MANAGEMENT =====\n\n /**\n * Search for customers\n */\n async searchCustomers(\n request: SearchCustomerRequest\n ): Promise<CustomerSearchResult> {\n const validatedRequest = searchCustomerRequestSchema.parse(request);\n\n const xmlRequest = mapSearchCustomerToXml(validatedRequest);\n const xmlResponse = await this.http.postXml<\n WrapRequestDto<SearchMasterRecordRQ>,\n AvesResponseRoot<SearchMasterRecordRS>\n >(\n AvesEndpoints.SEARCH_MASTER_RECORDS,\n RootElementNames.SEARCH_MASTER_RECORD,\n this.wrapRequest(xmlRequest)\n );\n return mapSearchResponseFromXml(\n xmlResponse.Response.Body,\n validatedRequest.pagination\n );\n }\n\n /**\n * Create a new customer\n */\n async createCustomer(\n customer: Customer\n ): Promise<OperationResponse<Customer>> {\n const validatedCustomer = customerSchema.parse(customer);\n\n const xmlRequest = mapCreateCustomerToXml(validatedCustomer);\n const xmlResponse = await this.http.postXml<\n WrapRequestDto<ManageMasterRecordRQ>,\n AvesResponseRoot<CustomerRecordRS>\n >(\n AvesEndpoints.INSERT_OR_UPDATE_MASTER_RECORD,\n RootElementNames.MANAGE_MASTER_RECORD,\n this.wrapRequest(xmlRequest)\n );\n return mapCustomerResponseFromXml(xmlResponse.Response.Body);\n }\n\n /**\n * Update an existing customer\n */\n async updateCustomer(\n customer: Customer\n ): Promise<OperationResponse<Customer>> {\n const validatedCustomer = customerSchema.parse(customer);\n\n const xmlRequest = mapUpdateCustomerToXml(validatedCustomer);\n const xmlResponse = await this.http.postXml<\n WrapRequestDto<ManageMasterRecordRQ>,\n AvesResponseRoot<CustomerRecordRS>\n >(\n AvesEndpoints.INSERT_OR_UPDATE_MASTER_RECORD,\n RootElementNames.MANAGE_MASTER_RECORD,\n this.wrapRequest(xmlRequest)\n );\n return mapCustomerResponseFromXml(xmlResponse.Response.Body);\n }\n\n /**\n * Upsert a customer\n */\n async upsertCustomer(\n customer: Customer\n ): Promise<OperationResponse<Customer>> {\n // Validate customer data\n const validatedCustomer = customerSchema.parse(customer);\n\n const xmlRequest = mapUpsertCustomerToXml(validatedCustomer);\n const xmlResponse = await this.http.postXml<\n WrapRequestDto<ManageMasterRecordRQ>,\n AvesResponseRoot<CustomerRecordRS>\n >(\n AvesEndpoints.INSERT_OR_UPDATE_MASTER_RECORD,\n RootElementNames.MANAGE_MASTER_RECORD,\n this.wrapRequest(xmlRequest)\n );\n return mapCustomerResponseFromXml(xmlResponse.Response.Body);\n }\n\n // ===== BOOKING MANAGEMENT =====\n\n /**\n * Create a new booking\n */\n async createBooking(\n request: CreateBookingRequest\n ): Promise<OperationResponse<BookingResponse>> {\n const validatedRequest = createBookingRequestSchema.parse(request);\n\n const xmlRequest = mapCreateBookingToXml(validatedRequest);\n const xmlResponse = await this.http.postXml<\n WrapRequestDto<BookFileRQ>,\n AvesResponseRoot<BookingFileRS>\n >(\n AvesEndpoints.CREATE_BOOKING_FILE,\n RootElementNames.BOOK_FILE,\n this.wrapRequest(xmlRequest)\n );\n return mapBookingResponseFromXml(xmlResponse.Response.Body);\n }\n\n /**\n * Update booking header information\n */\n async updateBookingHeader(\n customerRecordCode: string,\n bookingFileCode: string,\n bookingFileStartDate: string,\n updates?: {\n newCustomerRecordCode?: string;\n passengers?: any[];\n notes?: string;\n }\n ): Promise<OperationResponse<void>> {\n const xmlRequest = mapUpdateBookingHeaderToXml(\n customerRecordCode,\n bookingFileCode,\n bookingFileStartDate,\n updates\n );\n const xmlResponse = await this.http.postXml<\n WrapRequestDto<ModiFileHeaderRQ>,\n AvesResponseRoot<ModiFileHeaderRS>\n >(\n AvesEndpoints.MOD_BOOKING_FILE_HEADER,\n RootElementNames.MODI_FILE_HEADER,\n this.wrapRequest(xmlRequest)\n );\n return {\n success: xmlResponse.Response.RsStatus['@Status'] === 'OK',\n message: xmlResponse.Response.RsStatus.ErrorDescription,\n };\n }\n\n /**\n * Update booking services\n */\n async updateBookingServices(\n customerRecordCode: string,\n bookingFileCode: string,\n services: BookingService[]\n ): Promise<OperationResponse<BookingResponse>> {\n const xmlRequest = mapUpdateBookingServicesToXml(\n customerRecordCode,\n bookingFileCode,\n services\n );\n const xmlResponse = await this.http.postXml<\n WrapRequestDto<ModFileServicesRQ>,\n AvesResponseRoot<BookingFileRS>\n >(\n AvesEndpoints.MOD_BOOKING_FILE_SERVICES,\n RootElementNames.MOD_FILE_SERVICES,\n this.wrapRequest(xmlRequest)\n );\n return mapBookingResponseFromXml(xmlResponse.Response.Body);\n }\n\n /**\n * Set booking status\n */\n async setBookingStatus(\n customerRecordCode: string,\n bookingFileCode: string,\n status: BookingStatusTypeValue,\n options?: {\n expiredDate?: string;\n optionedFileExpireDatePolicy?:\n | 'NOT_SET'\n | 'CONSIDER_HOLIDAY'\n | 'CONSIDER_HOLIDAY_AND_SATURDAY';\n backOfficeRequest?: boolean;\n printDoc?: boolean;\n sendDocViaEmail?: boolean;\n applyPenalty?: boolean;\n penaltyCode?: string;\n simulateCancelAndGetPenalty?: boolean;\n }\n ): Promise<OperationResponse<BookingResponse>> {\n const xmlRequest = mapSetBookingStatusToXml(\n customerRecordCode,\n bookingFileCode,\n status,\n options\n );\n const xmlResponse = await this.http.postXml<\n WrapRequestDto<SetStatusRQ>,\n AvesResponseRoot<SetStatusServiceRS>\n >(\n AvesEndpoints.SET_BOOKING_FILE_STATUS,\n RootElementNames.SET_STATUS,\n this.wrapRequest(xmlRequest)\n );\n return mapBookingResponseFromXml(xmlResponse.Response.Body);\n }\n\n /**\n * Set booking service status (nullify a specific service)\n */\n async setBookingServiceStatus(\n customerRecordCode: string,\n bookingFileCode: string,\n serviceRef: string,\n statusDate?: string\n ): Promise<OperationResponse<BookingResponse>> {\n const xmlRequest = mapSetBookingServiceStatusToXml(\n customerRecordCode,\n bookingFileCode,\n serviceRef,\n statusDate\n );\n const xmlResponse = await this.http.postXml<\n WrapRequestDto<SetStatusServiceRQ>,\n AvesResponseRoot<SetStatusServiceRS>\n >(\n AvesEndpoints.SET_BOOKING_FILE_SERVICE_STATUS,\n RootElementNames.SET_STATUS_SERVICE,\n this.wrapRequest(xmlRequest)\n );\n return mapBookingResponseFromXml(xmlResponse.Response.Body);\n }\n\n /**\n * Cancel a booking\n */\n async cancelBooking(\n request: CancelBookingRequest\n ): Promise<OperationResponse<CancelResponseData>> {\n const validatedRequest = cancelBookingRequestSchema.parse(request);\n\n const xmlRequest = mapCancelBookingToXml(validatedRequest);\n const xmlResponse = await this.http.postXml<\n WrapRequestDto<CancelFileRQ>,\n AvesResponseRoot<CancelFileRS>\n >(\n AvesEndpoints.CANCEL_BOOKING_FILE,\n RootElementNames.CANCEL_FILE,\n this.wrapRequest(xmlRequest)\n );\n return mapCancelResponseFromXml(xmlResponse.Response.Body);\n }\n\n // ===== PAYMENT MANAGEMENT =====\n\n /**\n * Add payment to a booking\n */\n async addPayment(\n request: AddPaymentRequest\n ): Promise<OperationResponse<PaymentResponseData>> {\n const validatedRequest = addPaymentRequestSchema.parse(request);\n\n const xmlRequest = mapAddPaymentToXml(validatedRequest);\n const xmlResponse = await this.http.postXml<\n WrapRequestDto<FilePaymentListRQ>,\n AvesResponseRoot<FilePaymentListRS>\n >(\n AvesEndpoints.INSERT_FILE_PAYMENT_LIST,\n RootElementNames.FILE_PAYMENT_LIST,\n this.wrapRequest(xmlRequest)\n );\n return mapPaymentResponseFromXml(xmlResponse.Response.Body);\n }\n\n // ===== DOCUMENT MANAGEMENT =====\n\n /**\n * Generate and print booking documents\n */\n async printDocument(\n request: PrintDocumentRequest\n ): Promise<OperationResponse<DocumentPrintResult>> {\n const validatedRequest = printDocumentRequestSchema.parse(request);\n\n const xmlRequest = mapPrintDocumentToXml(validatedRequest);\n const xmlResponse = await this.http.postXml<\n WrapRequestDto<PrintBookingDocumentRQ>,\n AvesResponseRoot<PrintBookingDocumentRS>\n >(\n AvesEndpoints.PRINT_BOOKING_DOCUMENT,\n RootElementNames.PRINT_BOOKING_DOCUMENT,\n this.wrapRequest(xmlRequest)\n );\n return mapDocumentResponseFromXml(xmlResponse.Response.Body);\n }\n\n // ===== LEGACY METHODS (for backward compatibility) =====\n\n /**\n * @deprecated Use searchCustomers instead\n */\n async searchMasterRecord(\n payload: SearchMasterRecordRQ\n ): Promise<AvesResponseRoot<SearchMasterRecordRS>> {\n return this.http.postXml<\n WrapRequestDto<SearchMasterRecordRQ>,\n AvesResponseRoot<SearchMasterRecordRS>\n >(\n AvesEndpoints.SEARCH_MASTER_RECORDS,\n RootElementNames.SEARCH_MASTER_RECORD,\n this.wrapRequest(payload)\n );\n }\n\n /**\n * @deprecated Use createCustomer or updateCustomer instead\n */\n async insertOrUpdateMasterRecord(\n payload: ManageMasterRecordRQ\n ): Promise<AvesResponseRoot<CustomerRecordRS>> {\n return this.http.postXml<\n WrapRequestDto<ManageMasterRecordRQ>,\n AvesResponseRoot<CustomerRecordRS>\n >(\n AvesEndpoints.INSERT_OR_UPDATE_MASTER_RECORD,\n RootElementNames.MANAGE_MASTER_RECORD,\n this.wrapRequest(payload)\n );\n }\n\n /**\n * @deprecated Use createBooking instead\n */\n async createBookingFile(\n payload: BookFileRQ\n ): Promise<AvesResponseRoot<BookingFileRS>> {\n return this.http.postXml<\n WrapRequestDto<BookFileRQ>,\n AvesResponseRoot<BookingFileRS>\n >(\n AvesEndpoints.CREATE_BOOKING_FILE,\n RootElementNames.BOOK_FILE,\n this.wrapRequest(payload)\n );\n }\n\n /**\n * @deprecated Use cancelBooking instead\n */\n async cancelBookingFile(\n payload: CancelFileRQ\n ): Promise<AvesResponseRoot<CancelFileRS>> {\n return this.http.postXml<\n WrapRequestDto<CancelFileRQ>,\n AvesResponseRoot<CancelFileRS>\n >(\n AvesEndpoints.CANCEL_BOOKING_FILE,\n RootElementNames.CANCEL_FILE,\n this.wrapRequest(payload)\n );\n }\n\n /**\n * @deprecated Use printDocument instead\n */\n async printBookingDocument(\n payload: PrintBookingDocumentRQ\n ): Promise<AvesResponseRoot<PrintBookingDocumentRS>> {\n return this.http.postXml<\n WrapRequestDto<PrintBookingDocumentRQ>,\n AvesResponseRoot<PrintBookingDocumentRS>\n >(\n AvesEndpoints.PRINT_BOOKING_DOCUMENT,\n RootElementNames.PRINT_BOOKING_DOCUMENT,\n this.wrapRequest(payload)\n );\n }\n}\n","export const AVES_SDK_CONFIG = Symbol('AVES_SDK_CONFIG');\nexport const XML_HTTP_CLIENT = Symbol('XML_HTTP_CLIENT');\n","/**\n * AVES XML Root Element Names\n *\n * This file contains all the root element names used in AVES API requests.\n * These are used as the root tag when serializing XML requests.\n */\n\nexport const RootElementNames = {\n // Master Record Operations\n SEARCH_MASTER_RECORD: 'SearchMasterRecordRQ',\n MANAGE_MASTER_RECORD: 'ManageMasterRecordRQ',\n\n // Booking File Operations\n BOOK_FILE: 'BookFileRQ',\n MODI_FILE_HEADER: 'ModiFileHeaderRQ',\n MOD_FILE_SERVICES: 'ModFileServicesRQ',\n SET_STATUS: 'SetStatusRQ',\n SET_STATUS_SERVICE: 'SetStatusServiceRQ',\n CANCEL_FILE: 'CancelFileRQ',\n\n // Payment Operations\n FILE_PAYMENT_LIST: 'FilePaymentListRQ',\n\n // Document Operations\n PRINT_BOOKING_DOCUMENT: 'PrintBookingDocumentRQ',\n} as const;\n\nexport type RootElementName =\n (typeof RootElementNames)[keyof typeof RootElementNames];\n","/**\n * AVES API Endpoints\n */\n\nexport const AvesEndpoints = {\n // Master Record Operations\n SEARCH_MASTER_RECORDS: '/interop/masterRecords/v2/rest/Search',\n INSERT_OR_UPDATE_MASTER_RECORD:\n '/interop/masterRecords/v2/rest/InsertOrUpdate',\n\n // Booking File Operations\n CREATE_BOOKING_FILE: '/interop/booking/v2/rest/CreateBookingFile',\n MOD_BOOKING_FILE_HEADER: '/interop/booking/v2/rest/ModBookingFileHeader',\n MOD_BOOKING_FILE_SERVICES: '/interop/booking/v2/rest/ModBookingFileServices',\n SET_BOOKING_FILE_STATUS: '/interop/booking/v2/rest/SetBookingFileStatus',\n SET_BOOKING_FILE_SERVICE_STATUS:\n '/interop/booking/v2/rest/SetBookingFileServiceStatus',\n CANCEL_BOOKING_FILE: '/interop/booking/v2/rest/CancelBookingFile',\n\n // Payment Operations\n INSERT_FILE_PAYMENT_LIST: '/interop/booking/v2/rest/InsertFilePaymentList',\n\n // Document Operations\n PRINT_BOOKING_DOCUMENT: '/interop/document/v2/rest/PrintBookingDocument',\n} as const;\n\nexport type AvesEndpoint = (typeof AvesEndpoints)[keyof typeof AvesEndpoints];\n","import type { RqHeader } from '../../types/common';\n\nexport class RequestPayload<T> {\n RqHeader: RqHeader;\n Body: T;\n\n constructor(payload: { RqHeader: RqHeader; Body: T }) {\n Object.assign(this, payload);\n }\n}\n\nexport class WrapRequestDto<T> {\n Request: RequestPayload<T>;\n\n constructor(payload: RequestPayload<T>) {\n this.Request = new RequestPayload(payload);\n }\n}\n","import axios, { AxiosInstance, AxiosRequestConfig } from 'axios';\nimport { XMLBuilder, XMLParser } from 'fast-xml-parser';\nimport { Inject, Injectable, Scope } from '@nestjs/common';\nimport type { AvesSdkConfig } from '../types/common';\nimport { AVES_SDK_CONFIG } from '../tokens';\n\nexport interface IXmlHttpClient {\n postXml<TRequest extends object, TResponse = unknown>(\n endpoint: string,\n rootElementName: string,\n request: TRequest,\n config?: AxiosRequestConfig\n ): Promise<TResponse>;\n}\n\n@Injectable({ scope: Scope.DEFAULT })\nexport class XmlHttpClient implements IXmlHttpClient {\n private readonly httpClient: AxiosInstance;\n private readonly xmlBuilder: XMLBuilder;\n private readonly xmlParser: XMLParser;\n\n constructor(@Inject(AVES_SDK_CONFIG) private readonly config: AvesSdkConfig) {\n this.httpClient = axios.create({\n baseURL: config.baseUrl,\n timeout: typeof config.timeout === 'number' ? config.timeout : 30000,\n headers: {\n 'Content-Type': 'application/xml',\n Accept: 'application/xml, text/xml, */*;q=0.1',\n },\n transitional: { clarifyTimeoutError: true },\n validateStatus: (s) => s >= 200 && s < 300,\n });\n\n this.xmlBuilder = new XMLBuilder({\n attributeNamePrefix: '@',\n ignoreAttributes: false,\n suppressEmptyNode: true,\n format: process.env.NODE_ENV?.toLowerCase() === 'development', // only in development mode\n });\n\n this.xmlParser = new XMLParser({\n attributeNamePrefix: '@',\n ignoreAttributes: false,\n parseAttributeValue: false,\n trimValues: true,\n isArray: (name) => {\n const arrayNames = [\n 'Field',\n 'Item',\n 'Service',\n 'Passenger',\n 'Payment',\n 'MasterRecord',\n 'Request',\n 'Notes',\n 'ServiceID',\n ];\n return arrayNames.includes(name);\n },\n });\n }\n\n public async postXml<TRequest extends object, TResponse = unknown>(\n endpoint: string,\n rootElementName: string,\n request: TRequest,\n config?: AxiosRequestConfig\n ): Promise<TResponse> {\n const xmlPayload = this.xmlBuilder.build({ [rootElementName]: request });\n const response = await this.httpClient.post(endpoint, xmlPayload, config);\n const data = this.xmlParser.parse(response.data);\n return data;\n }\n}\n","import { registerAs } from '@nestjs/config';\n\nexport const AVES_CONFIG_NAMESPACE = 'aves';\n\nexport interface AvesEnvConfig {\n AVES_BASE_URL: string;\n AVES_HOST_ID: string;\n AVES_XTOKEN: string;\n AVES_LANGUAGE_CODE?: string;\n AVES_TIMEOUT?: string;\n}\n\nexport const avesConfig = registerAs(AVES_CONFIG_NAMESPACE, () => ({\n baseUrl: process.env.AVES_BASE_URL ?? '',\n hostId: process.env.AVES_HOST_ID ?? '',\n xtoken: process.env.AVES_XTOKEN ?? '',\n languageCode: process.env.AVES_LANGUAGE_CODE,\n timeout: process.env.AVES_TIMEOUT\n ? Number(process.env.AVES_TIMEOUT)\n : undefined,\n}));\n\nexport type AvesRegisteredConfig = ReturnType<typeof avesConfig>;\n","import { z } from 'zod';\n\n// ===== ZOD VALIDATION SCHEMAS =====\n\nexport const LanguageCodeValidation = z.enum(['01', '02']);\n\nexport const configValidationSchema = z.object({\n baseUrl: z.url(),\n hostId: z.string().length(6),\n xtoken: z.string(),\n languageCode: LanguageCodeValidation.optional(),\n timeout: z.number().optional(),\n});\n\nexport const AddressValidation = z.object({\n '@Type': z.enum(['HOME', 'WORK', 'BILLING', 'DELIVERY']).optional(),\n Street: z.string().max(100).optional(),\n City: z.string().max(50).optional(),\n State: z.string().max(50).optional(),\n PostalCode: z.string().max(20).optional(),\n Country: z.string().max(50).optional(),\n});\n\nexport const ContactInfoValidation = z.object({\n Phone: z\n .object({\n '@Type': z.enum(['HOME', 'WORK', 'MOBILE', 'FAX']).optional(),\n '@Number': z.string(),\n })\n .optional(),\n Email: z\n .object({\n '@Type': z.enum(['HOME', 'WORK']).optional(),\n '@Address': z.string(),\n })\n .optional(),\n});\n\nexport const PassengerValidation = z.object({\n '@PassengerID': z.string().min(1),\n '@Type': z.enum(['ADT', 'CHD', 'INF']),\n '@Title': z.enum(['MR', 'MRS', 'MS', 'DR', 'PROF']).optional(),\n FirstName: z.string().min(1).max(50),\n LastName: z.string().min(1).max(50),\n DateOfBirth: z.date().optional(),\n Gender: z.enum(['M', 'F']).optional(),\n Nationality: z.string().max(3).optional(),\n Address: AddressValidation.optional(),\n ContactInfo: ContactInfoValidation.optional(),\n});\n\nexport const ServiceValidation = z.object({\n '@ServiceID': z.string().min(1),\n '@Type': z.enum(['FLIGHT', 'HOTEL', 'CAR', 'TRANSFER', 'INSURANCE']),\n '@Status': z.enum(['CONFIRMED', 'PENDING', 'CANCELLED']),\n ServiceDetails: z.object({\n Code: z.string().optional(),\n Name: z.string().optional(),\n Description: z.string().optional(),\n StartDate: z.string().optional(),\n EndDate: z.string().optional(),\n Price: z\n .object({\n '@Currency': z.string(),\n '@Amount': z.number(),\n })\n .optional(),\n }),\n});\n\nexport const PaymentValidation = z.object({\n '@PaymentID': z.string().min(1),\n '@Type': z.enum(['CREDIT_CARD', 'DEBIT_CARD', 'BANK_TRANSFER', 'CASH']),\n '@Status': z.enum(['PENDING', 'CONFIRMED', 'FAILED']),\n Amount: z.object({\n '@Currency': z.string(),\n '@Amount': z.number(),\n }),\n PaymentDetails: z\n .object({\n CardNumber: z.string().optional(),\n ExpiryDate: z.string().optional(),\n CardHolderName: z.string().optional(),\n })\n .optional(),\n});\n\nexport const SearchMasterRecordRQValidation = z.object({\n SearchCriteria: z.object({\n MasterRecordType: z.enum(['CUSTOMER', 'AGENT', 'SUPPLIER']),\n SearchFields: z.object({\n Field: z.array(\n z.object({\n '@Name': z.string(),\n '@Value': z.string(),\n '@Operator': z\n .enum(['EQUALS', 'CONTAINS', 'STARTS_WITH', 'ENDS_WITH'])\n .optional(),\n })\n ),\n }),\n Pagination: z\n .object({\n '@PageSize': z.number(),\n '@PageNumber': z.number(),\n })\n .optional(),\n }),\n});\n\nexport const BookFileRQValidation = z.object({\n BookingDetails: z.object({\n '@BookingType': z.enum(['INDIVIDUAL', 'GROUP', 'CORPORATE']),\n '@Priority': z.enum(['LOW', 'NORMAL', 'HIGH', 'URGENT']),\n CustomerInfo: z.object({\n '@CustomerID': z.string().optional(),\n CustomerDetails: z.any().optional(), // MasterRecord validation would go here\n }),\n PassengerList: z.object({\n Passenger: z.array(PassengerValidation),\n }),\n SelectedServiceList: z.object({\n Service: z.array(ServiceValidation),\n }),\n SpecialRequests: z\n .object({\n Request: z.array(\n z.object({\n '@Type': z.enum(['MEAL', 'SEAT', 'WHEELCHAIR', 'OTHER']),\n '@Description': z.string(),\n })\n ),\n })\n .optional(),\n }),\n});\n\nexport const CancelFileRQValidation = z.object({\n '@BookingFileID': z.string().min(1),\n CancellationDetails: z.object({\n '@Reason': z.enum(['CUSTOMER_REQUEST', 'NO_SHOW', 'OPERATIONAL', 'OTHER']),\n '@Description': z.string().optional(),\n RefundRequest: z\n .object({\n '@Amount': z.number(),\n '@Currency': z.string(),\n '@Method': z.enum(['ORIGINAL_PAYMENT', 'CREDIT', 'CASH']),\n })\n .optional(),\n }),\n});\n\nexport const PrintBookingDocumentRQValidation = z.object({\n '@BookingFileID': z.string().min(1),\n DocumentRequest: z.object({\n '@DocumentType': z.enum([\n 'CONFIRMATION',\n 'INVOICE',\n 'VOUCHER',\n 'TICKET',\n 'ALL',\n ]),\n '@Format': z.enum(['PDF', 'HTML', 'XML']),\n '@Language': z.string().optional(),\n DeliveryMethod: z\n .object({\n '@Type': z.enum(['EMAIL', 'SMS', 'DOWNLOAD']),\n '@Address': z.string().optional(),\n })\n .optional(),\n }),\n});\n\n// ===== TYPE EXPORTS =====\n// Export TypeScript types inferred from Zod schemas\nexport type AddressValidationType = z.infer<typeof AddressValidation>;\nexport type ContactInfoValidationType = z.infer<typeof ContactInfoValidation>;\nexport type PassengerValidationType = z.infer<typeof PassengerValidation>;\nexport type ServiceValidationType = z.infer<typeof ServiceValidation>;\nexport type PaymentValidationType = z.infer<typeof PaymentValidation>;\nexport type SearchMasterRecordRQValidationType = z.infer<\n typeof SearchMasterRecordRQValidation\n>;\nexport type BookFileRQValidationType = z.infer<typeof BookFileRQValidation>;\nexport type CancelFileRQValidationType = z.infer<typeof CancelFileRQValidation>;\nexport type PrintBookingDocumentRQValidationType = z.infer<\n typeof PrintBookingDocumentRQValidation\n>;\n","export interface RqHeader {\n '@HostID': string;\n '@Xtoken': string;\n '@Interface': 'WEB';\n '@UserName': 'WEB';\n '@LanguageCode'?: string;\n}\n\nexport enum AvesStatus {\n OK = 'OK',\n ERROR = 'ERROR',\n WARNING = 'WARNING',\n TIMEOUT = 'TIMEOUT',\n}\n\nexport interface RsStatus {\n '@Status': AvesStatus;\n ErrorCode?: string;\n ErrorDescription?: string;\n Warnings?: { Warning: string | string[] };\n}\n\nexport enum AvesSeverity {\n ERROR = 'ERROR',\n WARNING = 'WARNING',\n INFO = 'INFO',\n}\n\n// Simplified error handling - single unified error interface\nexport interface AvesError {\n code: string;\n message: string;\n severity: AvesSeverity;\n timestamp: string;\n requestId: string;\n context?: Record<string, any>;\n}\n\n// Common AVES error codes\nexport enum AvesErrorCodes {\n // Authentication & Authorization\n INVALID_TOKEN = 'AVES_001',\n TOKEN_EXPIRED = 'AVES_002',\n INSUFFICIENT_PERMISSIONS = 'AVES_003',\n\n // Validation Errors\n INVALID_REQUEST_FORMAT = 'AVES_100',\n MISSING_REQUIRED_FIELD = 'AVES_101',\n INVALID_FIELD_VALUE = 'AVES_102',\n INVALID_DATE_FORMAT = 'AVES_103',\n\n // Business Logic Errors\n BOOKING_NOT_FOUND = 'AVES_200',\n BOOKING_ALREADY_CANCELLED = 'AVES_201',\n INVALID_BOOKING_STATUS = 'AVES_202',\n PAYMENT_FAILED = 'AVES_203',\n INSUFFICIENT_INVENTORY = 'AVES_204',\n\n // System Errors\n INTERNAL_SERVER_ERROR = 'AVES_500',\n SERVICE_UNAVAILABLE = 'AVES_501',\n TIMEOUT = 'AVES_502',\n RATE_LIMIT_EXCEEDED = 'AVES_503',\n}\n\nexport enum InsertCriteria {\n INSERT = 'INSERT',\n UPDATE = 'UPDATE',\n UPSERT = 'UPSERT',\n}\n\nexport interface AvesRequestRoot<TBody> {\n Request: {\n RqHeader: RqHeader;\n Body: TBody;\n };\n}\n\nexport interface AvesResponseRoot<TBody> {\n Response: {\n RsStatus: RsStatus;\n Body?: TBody;\n };\n}\n\n// Type for AVES XML response structure used in error handling\nexport interface AvesXmlResponse {\n Response?: {\n RsStatus?: {\n '@Status'?: AvesStatus;\n ErrorCode?: string;\n ErrorDescription?: string;\n Warnings?: {\n Warning: string | string[];\n };\n };\n };\n}\n\n// Type for HTTP error structure from axios\nexport interface HttpError extends Error {\n response?: {\n status: number;\n statusText: string;\n data?: any;\n headers?: Record<string, string>;\n config?: {\n url?: string;\n method?: string;\n timeout?: number;\n headers?: Record<string, string>;\n };\n };\n request?: {\n path?: string;\n method?: string;\n headers?: Record<string, string>;\n timeout?: number;\n data?: any;\n };\n config?: {\n url?: string;\n method?: string;\n timeout?: number;\n headers?: Record<string, string>;\n baseURL?: string;\n params?: Record<string, any>;\n };\n code?: string;\n isAxiosError?: boolean;\n}\n\nexport type LanguageCode = '01' | '02';\n\nexport interface AvesSdkConfig {\n baseUrl: string;\n hostId: string;\n xtoken: string;\n languageCode?: LanguageCode;\n timeout?: number;\n}\n","import { z, ZodSchema, ZodError } from 'zod';\n\n/**\n * AvesValidator - A comprehensive validation class for AVES SDK\n *\n * Provides multiple validation approaches using Zod schemas:\n * - Synchronous validation with error throwing\n * - Asynchronous validation support\n * - Safe validation with parsed results\n *\n * @example\n * ```typescript\n * import { AvesValidator, configValidationSchema } from 'aves-sdk';\n *\n * // Constructor approach\n * const validator = new AvesValidator(configValidationSchema);\n * const result = validator.validate(configData);\n *\n * // Method approach\n * const validator = new AvesValidator();\n * const result = validator.validate(configData, configValidationSchema);\n * ```\n */\nexport class AvesValidator<T = unknown> {\n private schema: ZodSchema<T>;\n\n /**\n * Creates a new AvesValidator instance\n * @param schema - Optional Zod schema to use as default for validation methods\n */\n constructor(schema: ZodSchema<T>) {\n this.schema = schema;\n }\n\n /**\n * Validates data synchronously and throws an error if validation fails\n * @param data - Data to validate\n * @param schema - Optional schema to use (overrides constructor schema)\n * @returns Validated and parsed data\n * @throws ZodError if validation fails\n *\n * @example\n * ```typescript\n * try {\n * const validData = validator.validate(userInput);\n * console.log('Valid data:', validData);\n * } catch (error) {\n * if (error instanceof ZodError) {\n * console.error('Validation errors:', error.issues);\n * }\n * }\n * ```\n */\n validate(data: unknown) {\n if (!this.schema) {\n throw new Error(\n 'No schema provided. Either pass schema to constructor or as method parameter.'\n );\n }\n\n return this.schema.parse(data);\n }\n\n /**\n * Validates data asynchronously and throws an error if validation fails\n * Useful for schemas with async refinements or transforms\n * @param data - Data to validate\n * @param schema - Optional schema to use (overrides constructor schema)\n * @returns Promise that resolves to validated and parsed data\n * @throws ZodError if validation fails\n *\n * @example\n * ```typescript\n * try {\n * const validData = await validator.asyncValidate(userInput);\n * console.log('Valid data:', validData);\n * } catch (error) {\n * if (error instanceof ZodError) {\n * console.error('Validation errors:', error.issues);\n * }\n * }\n * ```\n */\n async asyncValidate(data: unknown): Promise<T> {\n if (!this.schema) {\n throw new Error(\n 'No schema provided. Either pass schema to constructor or as method parameter.'\n );\n }\n\n return this.schema.parseAsync(data);\n }\n\n /**\n * Safely validates data without throwing errors\n * @param data - Data to validate\n * @param schema - Optional schema to use (overrides constructor schema)\n * @returns SafeParseResult with success/error information\n *\n * @example\n * ```typescript\n * const result = validator.safeValidateAndParse(userInput);\n *\n * if (result.success) {\n * console.log('Valid data:', result.data);\n * } else {\n * console.error('Validation errors:', result.error.issues);\n * }\n * ```\n */\n safeValidateAndParse(data: unknown) {\n if (!this.schema) {\n return this.createError({\n message:\n 'No schema provided. Either pass schema to constructor or as method parameter.',\n path: [],\n });\n }\n\n return this.schema.safeParse(data);\n }\n\n /**\n * Safely validates data asynchronously without throwing errors\n * @param data - Data to validate\n * @param schema - Optional schema to use (overrides constructor schema)\n * @returns Promise that resolves to SafeParseResult with success/error information\n *\n * @example\n * ```typescript\n * const result = await validator.safeAsyncValidateAndParse(userInput);\n *\n * if (result.success) {\n * console.log('Valid data:', result.data);\n * } else {\n * console.error('Validation errors:', result.error.issues);\n * }\n * ```\n */\n async safeAsyncValidateAndParse(\n data: unknown\n ): Promise<{ success: true; data: T } | { success: false; error: ZodError }> {\n if (!this.schema) {\n return this.createError({\n message:\n 'No schema provided. Either pass schema to constructor or as method parameter.',\n path: [],\n });\n }\n\n return this.schema.safeParseAsync(data);\n }\n\n /**\n * Gets formatted error messages from a ZodError\n * @param error - ZodError instance\n * @param separator - String to separate multiple error messages\n * @returns Formatted error message string\n *\n * @example\n * ```typescript\n * try {\n * validator.validate(invalidData);\n * } catch (error) {\n * if (error instanceof ZodError) {\n * const message = validator.getErrorMessage(error);\n * console.error('Validation failed:', message);\n * }\n * }\n * ```\n */\n getErrorMessage(error: ZodError, separator: string = '; '): string {\n return error.issues\n .map((issue) => {\n const path = issue.path.length > 0 ? `${issue.path.join('.')}: ` : '';\n return `${path}${issue.message}`;\n })\n .join(separator);\n }\n\n private createError({ message, path }: { message: string; path: string[] }): {\n success: false;\n error: ZodError;\n } {\n return {\n success: false,\n error: new ZodError([{ code: 'custom', message, path }]),\n };\n }\n\n /**\n * Creates a new validator instance with a specific schema\n * @param schema - Schema to use for the new validator\n * @returns New AvesValidator instance\n *\n * @example\n * ```typescript\n * const configValidator = AvesValidator.withSchema(configValidationSchema);\n * const result = configValidator.validate(configData);\n * ```\n */\n static withSchema<U>(schema: ZodSchema<U>): AvesValidator<U> {\n return new AvesValidator(schema);\n }\n}\n\n/**\n * Utility function to create a validator with a specific schema\n * @param schema - Zod schema to use\n * @returns New AvesValidator instance\n *\n * @example\n * ```typescript\n * import { createValidator, configValidationSchema } from 'aves-sdk';\n *\n * const validator = createValidator(configValidationSchema);\n * const result = validator.validate(configData);\n * ```\n */\nexport function createAvesValidator<T>(schema: ZodSchema<T>): AvesValidator<T> {\n return new AvesValidator(schema);\n}\n","import { Injectable } from '@nestjs/common';\nimport {\n AvesError,\n AvesErrorCodes,\n AvesSeverity,\n AvesXmlResponse,\n HttpError,\n} from '../types/common';\nimport { AvesException } from './aves-error';\n\n@Injectable()\nexport class AvesErrorHandler {\n /**\n * Parse any error into a standardized AvesException\n */\n parseError(error: any): AvesException {\n // If it's already an AvesException, return as-is\n if (error instanceof AvesException) {\n return error;\n }\n\n // Handle HTTP errors\n if (this.isHttpError(error)) {\n return this.parseHttpError(error);\n }\n\n // Handle AVES XML response errors\n if (this.isAvesXmlResponse(error)) {\n return this.parseAvesXmlError(error);\n }\n\n // Handle standard JavaScript errors\n if (error instanceof Error) {\n return new AvesException(\n AvesErrorCodes.INTERNAL_SERVER_ERROR,\n error.message,\n {\n severity: AvesSeverity.ERROR,\n context: this.buildContext({\n type: 'javascript_error',\n errorName: error.name,\n stack: error.stack || 'No stack trace available',\n }),\n }\n );\n }\n\n // Handle unknown error types\n return new AvesException(\n AvesErrorCodes.INTERNAL_SERVER_ERROR,\n 'Unknown error occurred',\n {\n severity: AvesSeverity.ERROR,\n context: this.buildContext({\n type: 'unknown_error',\n errorName: typeof error,\n errorValue: String(error),\n }),\n }\n );\n }\n\n /**\n * Parse HTTP errors from axios\n */\n private parseHttpError(error: HttpError): AvesException {\n if (error.response) {\n const status = error.response.status;\n const statusText = error.response.statusText;\n\n switch (status) {\n case 400:\n return new AvesException(\n AvesErrorCodes.INVALID_REQUEST_FORMAT,\n `Bad Request: ${statusText}`,\n {\n severity: AvesSeverity.ERROR,\n context: this.buildContext({\n type: 'http_error',\n errorName: status,\n statusText,\n url: error.config?.url,\n method: error.config?.method,\n timeout: error.config?.timeout,\n }),\n }\n );\n case 401:\n return new AvesException(\n AvesErrorCodes.INVALID_TOKEN,\n 'Authentication failed',\n {\n severity: AvesSeverity.ERROR,\n context: this.buildContext({\n type: 'http_error',\n status,\n url: error.config?.url,\n method: error.config?.method,\n timeout: error.config?.timeout,\n }),\n }\n );\n case 403:\n return new AvesException(\n AvesErrorCodes.INSUFFICIENT_PERMISSIONS,\n 'Access forbidden',\n {\n severity: AvesSeverity.ERROR,\n context: this.buildContext({\n type: 'http_error',\n status,\n url: error.config?.url,\n method: error.config?.method,\n timeout: error.config?.timeout,\n }),\n }\n );\n case 404:\n return new AvesException(\n AvesErrorCodes.BOOKING_NOT_FOUND,\n 'Resource not found',\n {\n severity: AvesSeverity.ERROR,\n context: this.buildContext({\n type: 'http_error',\n status,\n url: error.config?.url,\n method: error.config?.method,\n timeout: error.config?.timeout,\n }),\n }\n );\n case 429:\n return new AvesException(\n AvesErrorCodes.RATE_LIMIT_EXCEEDED,\n 'Rate limit exceeded',\n {\n severity: AvesSeverity.ERROR,\n context: this.buildContext({\n type: 'http_error',\n status,\n retryAfter: error.response.headers?.['retry-after'],\n }),\n }\n );\n case 500:\n return new AvesException(\n AvesErrorCodes.INTERNAL_SERVER_ERROR,\n 'Internal server error',\n {\n severity: AvesSeverity.ERROR,\n context: this.buildContext({\n type: 'http_error',\n status,\n url: error.config?.url,\n method: error.config?.method,\n timeout: error.config?.timeout,\n }),\n }\n );\n case 503:\n return new AvesException(\n AvesErrorCodes.SERVICE_UNAVAILABLE,\n 'Service unavailable',\n {\n severity: AvesSeverity.ERROR,\n context: this.buildContext({\n type: 'http_error',\n status,\n url: error.config?.url,\n method: error.config?.method,\n timeout: error.config?.timeout,\n }),\n }\n );\n default:\n return new AvesException(\n AvesErrorCodes.INTERNAL_SERVER_ERROR,\n `HTTP ${status}: ${statusText}`,\n {\n severity: AvesSeverity.ERROR,\n context: this.buildContext({\n type: 'http_error',\n status,\n statusText,\n url: error.config?.url,\n method: error.config?.method,\n timeout: error.config?.timeout,\n }),\n }\n );\n }\n } else if (error.request) {\n // Request was made but no response received\n return new AvesException(\n AvesErrorCodes.TIMEOUT,\n 'Request timeout - no response from AVES API',\n {\n severity: AvesSeverity.ERROR,\n context: this.buildContext({\n type: 'http_error',\n timeout: true,\n url: error.config?.url,\n method: error.config?.method,\n configuredTimeout: error.config?.timeout,\n }),\n }\n );\n } else {\n // Something else happened\n return new AvesException(\n AvesErrorCodes.INTERNAL_SERVER_ERROR,\n `Request setup error: ${error.message}`,\n {\n severity: AvesSeverity.ERROR,\n context: this.buildContext({\n type: 'http_error',\n setupError: true,\n }),\n }\n );\n }\n }\n\n /**\n * Parse AVES XML response errors\n */\n private parseAvesXmlError(xmlResponse: AvesXmlResponse): AvesException {\n if (!xmlResponse?.Response?.RsStatus) {\n return new AvesException(\n AvesErrorCodes.INVALID_REQUEST_FORMAT,\n 'Invalid response format from AVES API',\n {\n severity: AvesSeverity.ERROR,\n context: this.buildContext({\n type: 'aves_xml_error',\n missingRsStatus: true,\n }),\n }\n );\n }\n\n const rsStatus = xmlResponse.Response.RsStatus;\n\n // Handle main status\n if (rsStatus['@Status'] === 'ERROR') {\n return new AvesException(\n rsStatus.ErrorCode || AvesErrorCodes.INTERNAL_SERVER_ERROR,\n rsStatus.ErrorDescription || 'Unknown error from AVES API',\n {\n severity: AvesSeverity.ERROR,\n context: this.buildContext({\n type: 'aves_xml_error',\n originalResponse: rsStatus,\n }),\n }\n );\n }\n\n // Handle warnings\n if (rsStatus.Warnings?.Warning) {\n const warnings = Array.isArray(rsStatus.Warnings.Warning)\n ? rsStatus.Warnings.Warning\n : [rsStatus.Warnings.Warning];\n\n return new AvesException(\n AvesErrorCodes.INVALID_FIELD_VALUE,\n warnings.join('; '),\n {\n severity: AvesSeverity.WARNING,\n context: this.buildContext({\n type: 'aves_xml_warning',\n warnings,\n }),\n }\n );\n }\n\n // If we get here, it's an unexpected response\n return new AvesException(\n AvesErrorCodes.INTERNAL_SERVER_ERROR,\n 'Unexpected response from AVES API',\n {\n severity: AvesSeverity.ERROR,\n context: this.buildContext({\n type: 'aves_xml_error',\n unexpectedResponse: true,\n status: rsStatus['@Status'],\n }),\n }\n );\n }\n\n /**\n * Check if error is retryable\n */\n isRetryable(error: AvesException): boolean {\n const retryableCodes = [\n AvesErrorCodes.TIMEOUT,\n AvesErrorCodes.SERVICE_UNAVAILABLE,\n AvesErrorCodes.INTERNAL_SERVER_ERROR,\n AvesErrorCodes.RATE_LIMIT_EXCEEDED,\n ];\n\n return retryableCodes.includes(error.code as AvesErrorCodes);\n }\n\n /**\n * Get user-friendly error message\n */\n getUserFriendlyMessage(error: AvesException): string {\n const friendlyMessages: Record<string, string> = {\n [AvesErrorCodes.INVALID_TOKEN]:\n 'Your session has expired. Please log in again.',\n [AvesErrorCodes.TOKEN_EXPIRED]:\n 'Your session has expired. Please log in again.',\n [AvesErrorCodes.INSUFFICIENT_PERMISSIONS]:\n 'You do not have permission to perform this action.',\n [AvesErrorCodes.BOOKING_NOT_FOUND]:\n 'The requested booking could not be found.',\n [AvesErrorCodes.BOOKING_ALREADY_CANCELLED]:\n 'This booking has already been cancelled.',\n [AvesErrorCodes.PAYMENT_FAILED]:\n 'Payment processing failed. Please try again.',\n [AvesErrorCodes.INSUFFICIENT_INVENTORY]:\n 'The requested service is no longer available.',\n [AvesErrorCodes.SERVICE_UNAVAILABLE]:\n 'The service is temporarily unavailable. Please try again later.',\n [AvesErrorCodes.TIMEOUT]: 'The request timed out. Please try again.',\n [AvesErrorCodes.RATE_LIMIT_EXCEEDED]:\n 'Too many requests. Please wait a moment and try again.',\n };\n\n return friendlyMessages[error.code] || error.message;\n }\n\n /**\n * Build standardized context object from various input types\n */\n private buildContext(input: any): Record<string, any> {\n const context: Record<string, any> = {};\n\n // Handle different input types\n if (typeof input === 'object' && input !== null) {\n // Copy relevant properties, filtering out sensitive data\n Object.keys(input).forEach((key) => {\n const value = input[key];\n\n // Redact sensitive data\n if (this.isSensitiveKey(key)) {\n context[key] = '********';\n return;\n }\n\n // Handle different value types\n if (this.isSerializableValue(value)) {\n context[key] = value;\n } else if (typeof value === 'function') {\n context[key] = '[Function]';\n } else if (value instanceof Error) {\n context[key] = {\n name: value.name,\n message: value.message,\n stack: value.stack?.split('\\n').slice(0, 3).join('\\n'),\n };\n } else {\n context[key] = String(value);\n }\n });\n } else if (typeof input === 'string') {\n context.message = input;\n } else if (typeof input === 'number' || typeof input === 'boolean') {\n context.value = input;\n } else {\n context.input = String(input);\n }\n\n // Add metadata\n context.timestamp = new Date().toISOString();\n context.contextType = typeof input;\n\n return context;\n }\n\n /**\n * Check if a key contains sensitive information\n */\n private isSensitiveKey(key: string): boolean {\n const sensitiveKeys = [\n 'password',\n 'token',\n 'secret',\n 'key',\n 'auth',\n 'credential',\n 'xtoken',\n 'authorization',\n 'cookie',\n 'session',\n 'private',\n ];\n\n const lowerKey = key.toLowerCase();\n return sensitiveKeys.some((sensitive) => lowerKey.includes(sensitive));\n }\n\n /**\n * Check if a value is serializable and safe to include in context\n */\n private isSerializableValue(value: any): boolean {\n if (value === null || value === undefined) {\n return true;\n }\n\n if (\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n ) {\n return true;\n }\n\n if (Array.isArray(value)) {\n return value.length <= 10; // Limit array size\n }\n\n if (typeof value === 'object') {\n // Check if it's a plain object (not a class instance)\n if (value.constructor === Object) {\n const keys = Object.keys(value);\n return keys.length <= 20; // Limit object size\n }\n return false;\n }\n\n return false;\n }\n\n /**\n * Type guards\n */\n private isHttpError(error: any): error is HttpError {\n return error && (error.response || error.request || error.config);\n }\n\n private isAvesXmlResponse(error: any): error is AvesXmlResponse {\n return error && error.Response && error.Response.RsStatus;\n }\n}\n","import {\n AvesErrorCodes,\n AvesError as AvesErrorInterface,\n AvesSeverity,\n} from '../types/common';\n\n/**\n * Simple AVES Exception class that extends the standard Error\n * Provides unified error handling with AVES-specific error codes and context\n */\nexport class AvesException extends Error {\n public readonly code: string;\n public readonly severity: AvesSeverity;\n public readonly timestamp: string;\n public readonly requestId: string;\n public readonly context?: Record<string, any>;\n\n constructor(\n code: string | AvesErrorCodes,\n message: string,\n options: {\n severity?: AvesSeverity;\n context?: Record<string, any>;\n requestId?: string;\n } = {}\n ) {\n super(message);\n\n this.name = 'AvesException';\n this.code = code;\n this.severity = options.severity || AvesSeverity.ERROR;\n this.timestamp = new Date().toISOString();\n this.context = options.context;\n this.requestId = options.requestId || this.generateRequestId();\n\n // Ensure proper prototype chain for instanceof checks\n Object.setPrototypeOf(this, AvesException.prototype);\n\n // Capture stack trace if available\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, AvesException);\n }\n }\n\n /**\n * Create an AVES error from a structured AvesError object\n */\n static fromAvesError(avesError: AvesErrorInterface): AvesException {\n return new AvesException(avesError.code, avesError.message, {\n severity: avesError.severity,\n context: avesError.context,\n requestId: avesError.requestId,\n });\n }\n\n /**\n * Check if this error is retryable\n */\n isRetryable(): boolean {\n const retryableCodes = [\n AvesErrorCodes.TIMEOUT,\n AvesErrorCodes.SERVICE_UNAVAILABLE,\n AvesErrorCodes.INTERNAL_SERVER_ERROR,\n AvesErrorCodes.RATE_LIMIT_EXCEEDED,\n ];\n\n return retryableCodes.includes(this.code as AvesErrorCodes);\n }\n\n /**\n * Get user-friendly error message\n */\n getUserFriendlyMessage(): string {\n const friendlyMessages: Record<string, string> = {\n [AvesErrorCodes.INVALID_TOKEN]:\n 'Your session has expired. Please log in again.',\n [AvesErrorCodes.TOKEN_EXPIRED]:\n 'Your session has expired. Please log in again.',\n [AvesErrorCodes.INSUFFICIENT_PERMISSIONS]:\n 'You do not have permission to perform this action.',\n [AvesErrorCodes.BOOKING_NOT_FOUND]:\n 'The requested booking could not be found.',\n [AvesErrorCodes.BOOKING_ALREADY_CANCELLED]:\n 'This booking has already been cancelled.',\n [AvesErrorCodes.PAYMENT_FAILED]:\n 'Payment processing failed. Please try again.',\n [AvesErrorCodes.INSUFFICIENT_INVENTORY]:\n 'The requested service is no longer available.',\n [AvesErrorCodes.SERVICE_UNAVAILABLE]:\n 'The service is temporarily unavailable. Please try again later.',\n [AvesErrorCodes.TIMEOUT]: 'The request timed out. Please try again.',\n [AvesErrorCodes.RATE_LIMIT_EXCEEDED]:\n 'Too many requests. Please wait a moment and try again.',\n };\n\n return friendlyMessages[this.code] || this.message;\n }\n\n /**\n * Convert to plain object for serialization\n */\n toJSON(): Record<string, any> {\n return {\n name: this.name,\n code: this.code,\n message: this.message,\n severity: this.severity,\n timestamp: this.timestamp,\n requestId: this.requestId,\n context: this.context,\n stack: this.stack,\n isRetryable: this.isRetryable(),\n userFriendlyMessage: this.getUserFriendlyMessage(),\n };\n }\n\n /**\n * Convert to AvesError interface\n */\n toAvesError(): AvesErrorInterface {\n return {\n code: this.code,\n message: this.message,\n severity: this.severity,\n timestamp: this.timestamp,\n requestId: this.requestId,\n context: this.context,\n };\n }\n\n /**\n * Get HTTP status code for this error\n */\n getHttpStatusCode(): number {\n switch (this.code) {\n case AvesErrorCodes.INVALID_TOKEN:\n case AvesErrorCodes.TOKEN_EXPIRED:\n return 401;\n case AvesErrorCodes.INSUFFICIENT_PERMISSIONS:\n return 403;\n case AvesErrorCodes.BOOKING_NOT_FOUND:\n return 404;\n case AvesErrorCodes.INVALID_REQUEST_FORMAT:\n case AvesErrorCodes.MISSING_REQUIRED_FIELD:\n case AvesErrorCodes.INVALID_FIELD_VALUE:\n return 400;\n case AvesErrorCodes.RATE_LIMIT_EXCEEDED:\n return 429;\n case AvesErrorCodes.SERVICE_UNAVAILABLE:\n return 503;\n case AvesErrorCodes.TIMEOUT:\n return 408;\n default:\n return 500;\n }\n }\n\n /**\n * Get error category\n */\n getCategory(): string {\n if (this.code.startsWith('AVES_1')) return 'Authentication';\n if (this.code.startsWith('AVES_2')) return 'Business Logic';\n if (this.code.startsWith('AVES_5')) return 'System';\n return 'Unknown';\n }\n\n /**\n * Generate unique request ID\n */\n private generateRequestId(): string {\n return `aves_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n }\n}\n"],"mappings":"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","names":["index_exports","__export","AVES_CONFIG_NAMESPACE","AVES_SDK_CONFIG","AddressValidation","AvesEndpoints","AvesErrorCodes","AvesErrorHandler","AvesException","AvesModule","AvesService","AvesSeverity","AvesStatus","AvesValidator","BookFileRQValidation","BookingStatusType","CancelFileRQValidation","CancelReasonType","ContactInfoValidation","CustomerStatusType","CustomerType","DeliveryMethodType","DeliveryStatusType","DocumentFormatType","DocumentType","GenderType","InsertCriteria","LanguageCodeValidation","PassengerType","PassengerValidation","PaymentStatusType","PaymentType","PaymentValidation","PricingItemType","PrintBookingDocumentRQValidation","RefundMethodType","RootElementNames","SearchMasterRecordRQValidation","ServiceStatusType","ServiceType","ServiceValidation","XML_HTTP_CLIENT","XmlHttpClient","addPaymentRequestSchema","addressTypeSchema","apiSchemas","avesConfig","bookingPassengerSchema","bookingPaymentSchema","bookingResponseSchema","bookingServiceSchema","bookingStatusTypeSchema","bookingTypeSchema","cancelBookingRequestSchema","cancelReasonTypeSchema","communicationMethodTypeSchema","configValidationSchema","contactTypeSchema","createAvesValidator","createBookingRequestSchema","createDateString","createDateTimeString","createTimeString","customerAddressSchema","customerContactSchema","customerSchema","customerSearchResultSchema","customerStatusTypeSchema","customerTypeSchema","deliveryMethodTypeSchema","deliveryStatusTypeSchema","documentFormatTypeSchema","documentPrintResultSchema","documentTypeSchema","emailTypeSchema","genderTypeSchema","mapAddPaymentToXml","mapBookingFromXml","mapBookingResponseFromXml","mapBookingStatusToXml","mapCancelBookingToXml","mapCancelResponseFromXml","mapCreateBookingToXml","mapCreateCustomerToXml","mapCustomerResponseFromXml","mapCustomerStatusToXml","mapCustomerToXml","mapCustomerTypeToXml","mapDocumentResponseFromXml","mapDocumentTypeToXml","mapGenderToXml","mapPaymentResponseFromXml","mapPrintDocumentToXml","mapSearchCustomerToXml","mapSearchResponseFromXml","mapSetBookingServiceStatusToXml","mapSetBookingStatusToXml","mapUpdateBookingHeaderToXml","mapUpdateBookingServicesToXml","mapUpdateCustomerToXml","mapUpsertCustomerToXml","operationResponseSchema","passengerTypeSchema","paymentStatusTypeSchema","paymentTypeSchema","pricingItemTypeSchema","printDocumentRequestSchema","printedDocumentSchema","priorityTypeSchema","refundMethodTypeSchema","searchCustomerRequestSchema","searchOperatorTypeSchema","serviceStatusTypeSchema","serviceTypeSchema","setBookingStatusSchema","specialRequestTypeSchema","titleTypeSchema","updateBookingHeaderSchema","updateBookingServicesSchema","__toCommonJS","import_zod","PassengerType","ADULT","CHILD","INFANT","SENIOR","GenderType","MALE","FEMALE","ServiceType","FLIGHT","HOTEL","CAR","TRANSFER","INSURANCE","ServiceStatusType","CONFIRMED","PENDING","CANCELLED","PaymentType","CREDIT_CARD","DEBIT_CARD","BANK_TRANSFER","CASH","PaymentStatusType","FAILED","CustomerType","CUSTOMER","SUPPLIER","VOUCHER","SUPPLIER_VOUCHER","CustomerStatusType","ENABLED","WARNING","BLACKLISTED","DISABLED","BookingStatusType","QUOTATION","WORK_IN_PROGRESS","OPTIONED","NULLIFIED","CANCELED","DocumentType","VISA_REQUEST","TRAVEL_INFORMATION","BOOKING_CONTRACT","BOOKING_CONFIRMATION","SUPPLIER_SERVICE_LIST","INVOICE","PROFORMA_INVOICE","ADEGUAMENTO","RESERVATION_FORM","OPEN_XML","SALES_INVOICE","TICKETING_TMASTER","SUMMARY_FORM","DocumentFormatType","PDF","HTML","XML","DeliveryMethodType","EMAIL","SMS","DOWNLOAD","CancelReasonType","CUSTOMER_REQUEST","NO_SHOW","OPERATIONAL","OTHER","RefundMethodType","ORIGINAL_PAYMENT","CREDIT","PricingItemType","SERVICE","TAX","FEE","DISCOUNT","DeliveryStatusType","SENT","addressTypeSchema","z","enum","contactTypeSchema","emailTypeSchema","passengerTypeSchema","titleTypeSchema","genderTypeSchema","serviceTypeSchema","serviceStatusTypeSchema","paymentTypeSchema","paymentStatusTypeSchema","customerTypeSchema","searchOperatorTypeSchema","bookingTypeSchema","priorityTypeSchema","specialRequestTypeSchema","cancelReasonTypeSchema","refundMethodTypeSchema","documentTypeSchema","documentFormatTypeSchema","deliveryMethodTypeSchema","bookingStatusTypeSchema","pricingItemTypeSchema","deliveryStatusTypeSchema","customerStatusTypeSchema","communicationMethodTypeSchema","dateStringSchema","string","regex","dateTimeStringSchema","customerAddressSchema","object","type","optional","street","max","city","state","postalCode","country","customerContactSchema","phone","number","min","email","address","mobile","customerSchema","id","status","personalInfo","title","firstName","lastName","dateOfBirth","gender","nationality","contact","businessInfo","companyName","taxId","vatCode","fiscalCode","licenseNumber","preferences","language","length","currency","communicationMethod","bookingPassengerSchema","passport","expiryDate","issuingCountry","bookingServiceSchema","code","name","description","startDate","endDate","price","amount","nonnegative","bookingPaymentSchema","positive","details","cardNumber","cardHolderName","paginationSchema","pages","int","page","searchCustomerRequestSchema","discriminatedUnion","literal","pagination","phoneNumber","zipCode","countyCode","categoryCode","from","to","searchField","externalRefCode","baseBookingRequestSchema","passengers","array","services","statisticCodes","code1","code2","code3","code4","code5","code6","destination","iataCode","nationCode","deadlines","expireDate","printDocument","boolean","sendDocumentViaEmail","createBookingRequestSchema","union","extend","customerId","customerDetails","never","cancelBookingRequestSchema","bookingId","reason","refundRequest","method","printDocumentRequestSchema","documentType","format","deliveryMethod","addPaymentRequestSchema","bookingRefCode","payments","enableMultiple","operationType","updateBookingHeaderSchema","notes","updateBookingServicesSchema","setBookingStatusSchema","bookingResponseSchema","createdAt","updatedAt","customer","pricing","totalAmount","breakdowns","customerSearchResultSchema","customers","totalItems","hasMore","printedDocumentSchema","fileName","content","contentSize","documentPrintResultSchema","emailRecipient","documents","additionalDocuments","operationResponseSchema","success","message","data","any","apiSchemas","addressType","contactType","emailType","passengerType","titleType","genderType","serviceType","serviceStatusType","paymentType","paymentStatusType","customerType","searchOperatorType","bookingType","priorityType","specialRequestType","cancelReasonType","refundMethodType","documentFormatType","deliveryMethodType","bookingStatusType","pricingItemType","deliveryStatusType","customerStatusType","communicationMethodType","customerAddress","customerContact","bookingPassenger","bookingService","bookingPayment","searchCustomerRequest","createBookingRequest","cancelBookingRequest","printDocumentRequest","addPaymentRequest","updateBookingHeader","updateBookingServices","setBookingStatus","bookingResponse","customerSearchResult","printedDocument","documentPrintResult","operationResponse","createDateString","__name","date","dateObj","test","Error","Date","isNaN","getTime","year","getUTCFullYear","month","String","getUTCMonth","padStart","day","getUTCDate","createDateTimeString","dateTime","toISOString","createTimeString","time","hours","minutes","seconds","split","map","Number","mapCustomerTypeToXml","type","CustomerType","CUSTOMER","SUPPLIER","VOUCHER","SUPPLIER_VOUCHER","mapCustomerTypeFromXml","mapCustomerStatusToXml","status","CustomerStatusType","ENABLED","WARNING","BLACKLISTED","DISABLED","mapCustomerStatusFromXml","mapBookingStatusToXml","BookingStatusType","QUOTATION","WORK_IN_PROGRESS","CONFIRMED","OPTIONED","NULLIFIED","CANCELED","mapBookingStatusFromXml","mapDocumentTypeToXml","visa_request","travel_information","voucher","booking_contract","booking_confirmation","supplier_service_list","invoice","proforma_invoice","adeguamento","reservation_form","open_xml","sales_invoice","ticketing_tmaster","summary_form","mapGenderToXml","gender","male","female","mapPassengerFromXml","xml","nameParts","Name","split","lastName","pop","firstName","join","typeMap","AD","PassengerType","ADULT","CH","CHILD","IN","INFANT","OV","SENIOR","id","type","CategoryCode","title","undefined","dateOfBirth","BirthDate","createDateString","gender","Sex","GenderType","MALE","FEMALE","nationality","NationCode","CitizenshipCode","passport","IDDocInfo","number","expiryDate","issuingCountry","address","contact","eMail","PhoneNumber","email","phone","mapServiceFromXml","ServiceType","HOTEL","status","ServiceStatusType","PENDING","code","name","FirstDescription","description","SecondDescription","startDate","StartDate","endDate","EndDate","price","ServiceTotalAmountDetail","ServiceTotalPrice","currency","amount","parseFloat","buildSearchMasterRecordRQ","__name","request","data","RecordCode","city","City","VatCode","vatCode","phoneNumber","ZipCode","zipCode","countyCode","CountyCode","categoryCode","Email","LastModificationDate","from","to","SearchFieldValue","searchField","externalRefCode","mapSearchCustomerToXml","result","SearchType","toUpperCase","mapCustomerToXml","fullName","personalInfo","trim","RecordType","mapCustomerTypeToXml","LanguageCode","preferences","language","Moniker","Gender","mapGenderToXml","FirstPhoneNumber","MobilePhone","Address","street","CityName","StateCode","country","postalCode","FiscalCode","businessInfo","taxId","RecordStatus","mapCustomerStatusToXml","FinancialDetail","mapCreateBookingToXml","CustomerDetail","customerDetails","customerId","CurrencyCode","BookingFileStatus","StatisticCodes","statisticCodes","code1","code2","code3","code4","code5","code6","Destination","destination","iataCode","nationCode","BookingFileDescription","BookingFileDocument","printDocument","sendDocumentViaEmail","DeadlineList","deadlines","DeadlineDetail","map","d","expireDate","PassengerList","PassengerDetail","passengers","p","index","mapPassengerToAvesXml","SelectedServiceList","SelectedServiceDetail","services","s","mapServiceToAvesXml","passenger","String","padStart","service","sessionNumber","AvesServiceType","Date","toISOString","Qty","Pax","AvesSession","mapCancelBookingToXml","BookingFileCode","bookingId","CustomerRecordCode","mapPrintDocumentToXml","RefMasterRecordCode","InfoDocumentsToPrint","InfoDocumentToPrint","DocumentType","mapDocumentTypeToXml","documentType","GetDocumentContent","deliveryMethod","SendDocumentViaEmail","mapAddPaymentToXml","operationType","BookingFileRefCode","bookingRefCode","EnableMultiplePayments","enableMultiple","payments","length","OperationType","FilePaymentList","FilePaymentDetail","payment","mapPaymentTypeToAvesXml","cash","bank","bank2","bank3","atm","creditCard","credit_card","rebate","mapCreateCustomerToXml","customer","masterRecord","MasterRecordDetail","mapUpdateCustomerToXml","mapUpsertCustomerToXml","mapUpdateBookingHeaderToXml","customerRecordCode","bookingFileCode","bookingFileStartDate","updates","BookingFileStartDate","NewCustomerRecordCode","newCustomerRecordCode","BookingNote","notes","mapUpdateBookingServicesToXml","mapSetBookingStatusToXml","options","FileStatus","mapBookingStatusToXml","expiredDate","optionedFileExpireDatePolicy","backOfficeRequest","BackOfficeRequest","printDoc","sendDocViaEmail","applyPenalty","Penalty","penaltyCode","simulateCancelAndGetPenalty","SimulateCancelAndGetPenaltyAmount","mapSetBookingServiceStatusToXml","serviceRef","statusDate","BookingServiceRef","BookingFileServiceStatus","BookingFileServiceStatusDate","mapCustomerFromXml","xml","nameParts","Name","split","lastName","pop","firstName","join","id","type","mapCustomerTypeFromXml","RecordType","status","mapCustomerStatusFromXml","RecordStatus","personalInfo","title","Moniker","dateOfBirth","BirthDate","createDateString","undefined","gender","Gender","GenderType","MALE","FEMALE","nationality","CitizenshipCode","contact","email","Email","address","phone","FirstPhoneNumber","number","mobile","MobilePhone","Address","street","city","CityName","state","CountyCode","postalCode","ZipCode","country","StateCode","businessInfo","VatCode","FiscalCode","companyName","taxId","licenseNumber","preferences","language","LanguageCode","currency","FinancialDetail","communicationMethod","mapCustomerResponseFromXml","MasterRecordDetail","success","message","data","mapBookingFromXml","BookingFileCode","mapBookingStatusFromXml","BookingFileStatus","createdAt","createDateTimeString","CreationDate","updatedAt","customer","CustomerRecordCode","CustomerName","CustomerEmail","passengers","PassengerList","PassengerDetail","map","mapPassengerFromXml","services","BookedServiceList","BookedServiceDetail","mapServiceFromXml","pricing","totalAmount","TotalAmountDetail","CurrencyCode","amount","parseFloat","TotalAmountAfterDiscount","breakdowns","mapBookingResponseFromXml","OperationResult","BookingFile","booking","mapSearchResponseFromXml","requestPagination","pageSize","pages","defaultPages","page","defaultPage","MasterRecordList","customers","pagination","totalItems","hasMore","length","mapDocumentResponseFromXml","documents","BaseDocumentAndAttachments","SingleBaseDocumentOrAttachment","doc","fileName","DocFileName","content","Base64DocContent","contentSize","additionalDocuments","AdditionalDocuments","AdditionalDocument","additionalDoc","emailRecipient","EmailRecipient","mapCancelResponseFromXml","refundInfo","RefundInfo","refundAmount","refundMethod","processingTime","mapPaymentResponseFromXml","paymentSummary","totalPaid","outstandingAmount","paymentHistory","import_common","import_config","import_common","AVES_SDK_CONFIG","Symbol","XML_HTTP_CLIENT","RootElementNames","SEARCH_MASTER_RECORD","MANAGE_MASTER_RECORD","BOOK_FILE","MODI_FILE_HEADER","MOD_FILE_SERVICES","SET_STATUS","SET_STATUS_SERVICE","CANCEL_FILE","FILE_PAYMENT_LIST","PRINT_BOOKING_DOCUMENT","AvesEndpoints","SEARCH_MASTER_RECORDS","INSERT_OR_UPDATE_MASTER_RECORD","CREATE_BOOKING_FILE","MOD_BOOKING_FILE_HEADER","MOD_BOOKING_FILE_SERVICES","SET_BOOKING_FILE_STATUS","SET_BOOKING_FILE_SERVICE_STATUS","CANCEL_BOOKING_FILE","INSERT_FILE_PAYMENT_LIST","PRINT_BOOKING_DOCUMENT","RequestPayload","payload","RqHeader","Body","Object","assign","_RequestPayload","WrapRequestDto","Request","_WrapRequestDto","AvesService","config","http","buildHeader","hostId","xtoken","languageCode","wrapRequest","body","WrapRequestDto","RqHeader","Body","searchCustomers","request","validatedRequest","searchCustomerRequestSchema","parse","xmlRequest","mapSearchCustomerToXml","xmlResponse","postXml","AvesEndpoints","SEARCH_MASTER_RECORDS","RootElementNames","SEARCH_MASTER_RECORD","mapSearchResponseFromXml","Response","pagination","createCustomer","customer","validatedCustomer","customerSchema","mapCreateCustomerToXml","INSERT_OR_UPDATE_MASTER_RECORD","MANAGE_MASTER_RECORD","mapCustomerResponseFromXml","updateCustomer","mapUpdateCustomerToXml","upsertCustomer","mapUpsertCustomerToXml","createBooking","createBookingRequestSchema","mapCreateBookingToXml","CREATE_BOOKING_FILE","BOOK_FILE","mapBookingResponseFromXml","updateBookingHeader","customerRecordCode","bookingFileCode","bookingFileStartDate","updates","mapUpdateBookingHeaderToXml","MOD_BOOKING_FILE_HEADER","MODI_FILE_HEADER","success","RsStatus","message","ErrorDescription","updateBookingServices","services","mapUpdateBookingServicesToXml","MOD_BOOKING_FILE_SERVICES","MOD_FILE_SERVICES","setBookingStatus","status","options","mapSetBookingStatusToXml","SET_BOOKING_FILE_STATUS","SET_STATUS","setBookingServiceStatus","serviceRef","statusDate","mapSetBookingServiceStatusToXml","SET_BOOKING_FILE_SERVICE_STATUS","SET_STATUS_SERVICE","cancelBooking","cancelBookingRequestSchema","mapCancelBookingToXml","CANCEL_BOOKING_FILE","CANCEL_FILE","mapCancelResponseFromXml","addPayment","addPaymentRequestSchema","mapAddPaymentToXml","INSERT_FILE_PAYMENT_LIST","FILE_PAYMENT_LIST","mapPaymentResponseFromXml","printDocument","printDocumentRequestSchema","mapPrintDocumentToXml","PRINT_BOOKING_DOCUMENT","mapDocumentResponseFromXml","searchMasterRecord","payload","insertOrUpdateMasterRecord","createBookingFile","cancelBookingFile","printBookingDocument","_AvesService","import_axios","import_fast_xml_parser","import_common","XmlHttpClient","config","httpClient","xmlBuilder","xmlParser","axios","create","baseURL","baseUrl","timeout","headers","Accept","transitional","clarifyTimeoutError","validateStatus","__name","s","XMLBuilder","attributeNamePrefix","ignoreAttributes","suppressEmptyNode","format","process","env","NODE_ENV","toLowerCase","XMLParser","parseAttributeValue","trimValues","isArray","name","includes","postXml","endpoint","rootElementName","request","xmlPayload","build","response","post","parse","data","_XmlHttpClient","scope","Scope","DEFAULT","import_config","AVES_CONFIG_NAMESPACE","avesConfig","registerAs","baseUrl","process","env","AVES_BASE_URL","hostId","AVES_HOST_ID","xtoken","AVES_XTOKEN","languageCode","AVES_LANGUAGE_CODE","timeout","AVES_TIMEOUT","Number","undefined","import_zod","LanguageCodeValidation","z","enum","configValidationSchema","object","baseUrl","url","hostId","string","length","xtoken","languageCode","optional","timeout","number","AddressValidation","Street","max","City","State","PostalCode","Country","ContactInfoValidation","Phone","Email","PassengerValidation","min","FirstName","LastName","DateOfBirth","date","Gender","Nationality","Address","ContactInfo","ServiceValidation","ServiceDetails","Code","Name","Description","StartDate","EndDate","Price","PaymentValidation","Amount","PaymentDetails","CardNumber","ExpiryDate","CardHolderName","SearchMasterRecordRQValidation","SearchCriteria","MasterRecordType","SearchFields","Field","array","Pagination","BookFileRQValidation","BookingDetails","CustomerInfo","CustomerDetails","any","PassengerList","Passenger","SelectedServiceList","Service","SpecialRequests","Request","CancelFileRQValidation","CancellationDetails","RefundRequest","PrintBookingDocumentRQValidation","DocumentRequest","DeliveryMethod","AvesModule","forRoot","config","validatedConfig","validateConfig","module","imports","ConfigModule","forFeature","avesConfig","providers","provide","AVES_SDK_CONFIG","useValue","createXmlHttpClientProvider","AvesService","exports","XML_HTTP_CLIENT","forRootAsync","options","asyncProviders","createAsyncProviders","useClass","XmlHttpClient","useFactory","__name","args","error","Error","message","inject","useExisting","factory","createAvesOptions","push","configValidationSchema","safeParse","success","issues","map","issue","join","data","__publicField","MODULE_NAME","VERSION","_AvesModule","AvesStatus","AvesSeverity","AvesErrorCodes","InsertCriteria","import_zod","AvesValidator","schema","validate","data","Error","parse","asyncValidate","parseAsync","safeValidateAndParse","safeParse","createError","message","path","safeAsyncValidateAndParse","safeParseAsync","getErrorMessage","error","separator","issues","map","issue","length","join","success","ZodError","code","withSchema","_AvesValidator","createAvesValidator","import_common","AvesException","Error","code","message","options","severity","timestamp","requestId","context","name","AvesSeverity","ERROR","Date","toISOString","generateRequestId","Object","setPrototypeOf","prototype","captureStackTrace","fromAvesError","avesError","isRetryable","AvesErrorCodes","TIMEOUT","SERVICE_UNAVAILABLE","INTERNAL_SERVER_ERROR","RATE_LIMIT_EXCEEDED","includes","getUserFriendlyMessage","INVALID_TOKEN","TOKEN_EXPIRED","INSUFFICIENT_PERMISSIONS","BOOKING_NOT_FOUND","BOOKING_ALREADY_CANCELLED","PAYMENT_FAILED","INSUFFICIENT_INVENTORY","toJSON","stack","userFriendlyMessage","toAvesError","getHttpStatusCode","INVALID_REQUEST_FORMAT","MISSING_REQUIRED_FIELD","INVALID_FIELD_VALUE","getCategory","startsWith","now","Math","random","toString","substr","_AvesException","AvesErrorHandler","parseError","error","AvesException","isHttpError","parseHttpError","isAvesXmlResponse","parseAvesXmlError","Error","AvesErrorCodes","INTERNAL_SERVER_ERROR","message","severity","AvesSeverity","ERROR","context","buildContext","type","errorName","name","stack","errorValue","String","response","status","statusText","INVALID_REQUEST_FORMAT","url","config","method","timeout","INVALID_TOKEN","INSUFFICIENT_PERMISSIONS","BOOKING_NOT_FOUND","RATE_LIMIT_EXCEEDED","retryAfter","headers","SERVICE_UNAVAILABLE","request","TIMEOUT","configuredTimeout","setupError","xmlResponse","Response","RsStatus","missingRsStatus","rsStatus","ErrorCode","ErrorDescription","originalResponse","Warnings","Warning","warnings","Array","isArray","INVALID_FIELD_VALUE","join","WARNING","unexpectedResponse","isRetryable","includes","code","getUserFriendlyMessage","TOKEN_EXPIRED","BOOKING_ALREADY_CANCELLED","PAYMENT_FAILED","INSUFFICIENT_INVENTORY","input","Object","keys","forEach","key","value","isSensitiveKey","isSerializableValue","split","slice","timestamp","Date","toISOString","contextType","sensitiveKeys","lowerKey","toLowerCase","some","sensitive","length","_AvesErrorHandler"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/nest/aves.module.ts","../src/nest/aves.service.ts","../src/tokens.ts","../src/config/root-elements.ts","../src/config/endpoints.ts","../src/validation/api-schemas.ts","../src/nest/dto/wrap-request.dto.ts","../src/utils/date-helpers.ts","../src/mappers/type-mappers.ts","../src/mappers/request-mappers.ts","../src/mappers/response-mappers.ts","../src/http/xml-http-client.ts","../src/config/aves.config.ts","../src/validation/aves-validation.ts","../src/errors/aves-error-handler.ts","../src/types/common.ts","../src/errors/aves-error.ts"],"sourcesContent":["// NestJS Integration\nexport * from './nest/aves.module';\nexport * from './nest/aves.service';\n\n// Public API Types & Const Objects (not schemas - internal use only)\nexport {\n // Const objects\n PassengerType,\n GenderType,\n ServiceType,\n ServiceStatusType,\n PaymentType,\n PaymentStatusType,\n CustomerType,\n CustomerStatusType,\n BookingStatusType,\n DocumentType,\n DocumentFormatType,\n DeliveryMethodType,\n CancelReasonType,\n RefundMethodType,\n PricingItemType,\n DeliveryStatusType,\n} from './validation/api-schemas';\n\nexport type {\n // Type aliases\n PassengerTypeValue,\n GenderTypeValue,\n ServiceTypeValue,\n ServiceStatusTypeValue,\n PaymentTypeValue,\n PaymentStatusTypeValue,\n CustomerTypeValue,\n CustomerStatusTypeValue,\n BookingStatusTypeValue,\n DocumentTypeValue,\n DocumentFormatTypeValue,\n DeliveryMethodTypeValue,\n CancelReasonTypeValue,\n RefundMethodTypeValue,\n PricingItemTypeValue,\n DeliveryStatusTypeValue,\n // API Types\n AddressType,\n ContactType,\n EmailType,\n TitleType,\n SearchOperatorType,\n BookingType,\n PriorityType,\n SpecialRequestType,\n CommunicationMethodType,\n CustomerAddress,\n CustomerContact,\n Customer,\n Price,\n BookingPassenger,\n BookingService,\n BookingPayment,\n SearchCustomerRequest,\n CreateBookingRequest,\n CancelBookingRequest,\n PrintDocumentRequest,\n AddPaymentRequest,\n BookingResponse,\n CustomerSearchResult,\n PrintedDocument,\n DocumentPrintResult,\n OperationResponse,\n CancelResponseData,\n PaymentResponseData,\n} from './validation/api-schemas';\n\n// Error Handling\nexport * from './errors/aves-error-handler';\nexport * from './errors/aves-error';\n","import {\n DynamicModule,\n Module,\n Provider,\n Type,\n ModuleMetadata,\n Global,\n} from '@nestjs/common';\nimport { ConfigModule } from '@nestjs/config';\nimport { AvesService } from './aves.service';\nimport { XmlHttpClient } from '../http/xml-http-client';\nimport { XML_HTTP_CLIENT } from '../tokens';\nimport { avesConfig } from '../config/aves.config';\nimport { AvesSdkConfig } from '../types/common';\nimport { AVES_SDK_CONFIG } from '../tokens';\nimport { configValidationSchema } from '../validation/aves-validation';\n\n/**\n * AvesModule - Dynamic module for AVES SDK integration\n *\n * Provides both synchronous and asynchronous configuration options\n * for the AVES booking system integration.\n *\n * @example\n * ```typescript\n * // Synchronous configuration\n * AvesModule.forRoot({\n * baseUrl: 'https://api.aves.com',\n * hostId: 'your-host-id',\n * xtoken: 'your-token'\n * })\n *\n * // Asynchronous configuration\n * AvesModule.forRootAsync({\n * useFactory: (configService: ConfigService) => ({\n * baseUrl: configService.get('AVES_BASE_URL'),\n * hostId: configService.get('AVES_HOST_ID'),\n * xtoken: configService.get('AVES_XTOKEN')\n * }),\n * inject: [ConfigService]\n * })\n * ```\n */\n\n@Global()\n@Module({})\nexport class AvesModule {\n static readonly MODULE_NAME = 'AvesModule';\n static readonly VERSION = '1.0.0';\n /**\n * Creates a dynamically configured module with synchronous configuration\n * @param config - The AVES SDK configuration object\n * @returns DynamicModule with configured providers\n */\n static forRoot(config: AvesSdkConfig): DynamicModule {\n const validatedConfig = this.validateConfig(config);\n\n return {\n module: AvesModule,\n imports: [ConfigModule.forFeature(avesConfig)],\n providers: [\n {\n provide: AVES_SDK_CONFIG,\n useValue: validatedConfig,\n },\n this.createXmlHttpClientProvider(),\n AvesService,\n ],\n exports: [AvesService, XML_HTTP_CLIENT],\n };\n }\n\n /**\n * Creates a dynamically configured module with asynchronous configuration\n * @param options - Async configuration options\n * @returns DynamicModule with configured providers\n */\n static forRootAsync(options: AvesModuleAsyncOptions): DynamicModule {\n const asyncProviders = this.createAsyncProviders(options);\n\n return {\n module: AvesModule,\n imports: [\n ...(options.imports ?? []),\n ConfigModule.forFeature(avesConfig),\n ],\n providers: [\n ...asyncProviders,\n this.createXmlHttpClientProvider(),\n AvesService,\n ],\n exports: [AvesService, XML_HTTP_CLIENT],\n };\n }\n\n /**\n * Creates XML HTTP client provider\n * @private\n */\n private static createXmlHttpClientProvider(): Provider {\n return {\n provide: XML_HTTP_CLIENT,\n useClass: XmlHttpClient,\n };\n }\n\n /**\n * Creates async providers for configuration\n * @private\n */\n private static createAsyncProviders(\n options: AvesModuleAsyncOptions\n ): Provider[] {\n if (options.useFactory) {\n return [\n {\n provide: AVES_SDK_CONFIG,\n useFactory: async (...args: any[]) => {\n try {\n const config = await options.useFactory!(...args);\n return this.validateConfig(config);\n } catch (error) {\n throw new Error(\n `Failed to create Aves configuration: ${error.message}`\n );\n }\n },\n inject: options.inject ?? [],\n },\n ];\n }\n\n const useClass = options.useClass || options.useExisting;\n if (!useClass) {\n throw new Error(\n 'Invalid AvesModule async options: provide useFactory, useClass, or useExisting'\n );\n }\n\n const providers: Provider[] = [\n {\n provide: AVES_SDK_CONFIG,\n useFactory: async (\n factory: AvesOptionsFactory\n ): Promise<AvesSdkConfig> => {\n try {\n const config = await factory.createAvesOptions();\n return this.validateConfig(config);\n } catch (error) {\n throw new Error(\n `Failed to create Aves configuration: ${error.message}`\n );\n }\n },\n inject: [useClass],\n },\n ];\n\n if (options.useClass) {\n providers.push({ provide: options.useClass, useClass: options.useClass });\n }\n\n return providers;\n }\n\n /**\n * Validates the AVES SDK configuration\n * @private\n */\n private static validateConfig(config: AvesSdkConfig): AvesSdkConfig {\n const validatedConfig = configValidationSchema.safeParse(config);\n if (!validatedConfig.success) {\n throw new Error(\n `Invalid AVES SDK configuration: ${validatedConfig.error.issues\n .map((issue) => issue.message)\n .join(', ')}`\n );\n }\n\n return validatedConfig.data;\n }\n}\n\n/**\n * Interface for AVES options factory\n * Used when creating async configuration providers\n */\nexport interface AvesOptionsFactory {\n createAvesOptions(): Promise<AvesSdkConfig> | AvesSdkConfig;\n}\n\n/**\n * Async configuration options for AvesModule\n * Supports factory functions, existing services, or new service classes\n */\nexport interface AvesModuleAsyncOptions\n extends Pick<ModuleMetadata, 'imports'> {\n /** Use an existing service instance */\n useExisting?: Type<AvesOptionsFactory>;\n /** Use a new service class */\n useClass?: Type<AvesOptionsFactory>;\n /** Use a factory function */\n useFactory?: (...args: any[]) => Promise<AvesSdkConfig> | AvesSdkConfig;\n /** Dependencies to inject into the factory function */\n inject?: (string | symbol | Type<any>)[];\n}\n","import { Inject, Injectable } from '@nestjs/common';\nimport { AVES_SDK_CONFIG } from '../tokens';\nimport type {\n AvesSdkConfig,\n AvesResponseRoot,\n RqHeader,\n} from '../types/common';\nimport type { IXmlHttpClient } from '../http/xml-http-client';\nimport { XML_HTTP_CLIENT } from '../tokens';\nimport { RootElementNames } from '../config/root-elements';\nimport { AvesEndpoints } from '../config/endpoints';\nimport type {\n SearchCustomerRequest,\n CreateBookingRequest,\n CancelBookingRequest,\n PrintDocumentRequest,\n AddPaymentRequest,\n Customer,\n BookingResponse,\n CustomerSearchResult,\n DocumentPrintResult,\n OperationResponse,\n BookingStatusType,\n BookingService,\n CancelResponseData,\n PaymentResponseData,\n BookingStatusTypeValue,\n} from '../validation/api-schemas';\nimport {\n searchCustomerRequestSchema,\n createBookingRequestSchema,\n cancelBookingRequestSchema,\n printDocumentRequestSchema,\n addPaymentRequestSchema,\n customerSchema,\n} from '../validation/api-schemas';\nimport type {\n SearchMasterRecordRQ,\n SearchMasterRecordRS,\n ManageMasterRecordRQ,\n CustomerRecordRS,\n BookFileRQ,\n BookingFileRS,\n ModiFileHeaderRQ,\n ModiFileHeaderRS,\n ModFileServicesRQ,\n SetStatusRQ,\n SetStatusServiceRQ,\n SetStatusServiceRS,\n CancelFileRQ,\n CancelFileRS,\n FilePaymentListRQ,\n FilePaymentListRS,\n PrintBookingDocumentRQ,\n PrintBookingDocumentRS,\n} from '../types/interfaces';\nimport { WrapRequestDto } from './dto/wrap-request.dto';\nimport {\n mapSearchCustomerToXml,\n mapCreateBookingToXml,\n mapCancelBookingToXml,\n mapPrintDocumentToXml,\n mapAddPaymentToXml,\n mapCreateCustomerToXml,\n mapUpdateCustomerToXml,\n mapUpdateBookingHeaderToXml,\n mapUpdateBookingServicesToXml,\n mapSetBookingStatusToXml,\n mapSetBookingServiceStatusToXml,\n mapUpsertCustomerToXml,\n} from '../mappers/request-mappers';\nimport {\n mapSearchResponseFromXml,\n mapCustomerResponseFromXml,\n mapBookingResponseFromXml,\n mapDocumentResponseFromXml,\n mapCancelResponseFromXml,\n mapPaymentResponseFromXml,\n} from '../mappers/response-mappers';\n\n@Injectable()\nexport class AvesService {\n constructor(\n @Inject(AVES_SDK_CONFIG) private readonly config: AvesSdkConfig,\n @Inject(XML_HTTP_CLIENT) private readonly http: IXmlHttpClient\n ) {}\n\n private buildHeader(): RqHeader {\n const { hostId, xtoken, languageCode } = this.config;\n return {\n '@HostID': hostId,\n '@Xtoken': xtoken,\n '@Interface': 'WEB', // default\n '@UserName': 'WEB', // default\n '@LanguageCode': languageCode,\n };\n }\n\n private wrapRequest<T>(body: T): WrapRequestDto<T> {\n return new WrapRequestDto({\n RqHeader: this.buildHeader(),\n Body: body,\n });\n }\n\n // ===== CUSTOMER MANAGEMENT =====\n\n /**\n * Search for customers\n */\n async searchCustomers(\n request: SearchCustomerRequest\n ): Promise<CustomerSearchResult> {\n const validatedRequest = searchCustomerRequestSchema.parse(request);\n\n const xmlRequest = mapSearchCustomerToXml(validatedRequest);\n const xmlResponse = await this.http.postXml<\n WrapRequestDto<SearchMasterRecordRQ>,\n AvesResponseRoot<SearchMasterRecordRS>\n >(\n AvesEndpoints.SEARCH_MASTER_RECORDS,\n RootElementNames.SEARCH_MASTER_RECORD,\n this.wrapRequest(xmlRequest)\n );\n return mapSearchResponseFromXml(\n xmlResponse.Response.Body,\n validatedRequest.pagination\n );\n }\n\n /**\n * Create a new customer\n */\n async createCustomer(\n customer: Customer\n ): Promise<OperationResponse<Customer>> {\n const validatedCustomer = customerSchema.parse(customer);\n\n const xmlRequest = mapCreateCustomerToXml(validatedCustomer);\n const xmlResponse = await this.http.postXml<\n WrapRequestDto<ManageMasterRecordRQ>,\n AvesResponseRoot<CustomerRecordRS>\n >(\n AvesEndpoints.INSERT_OR_UPDATE_MASTER_RECORD,\n RootElementNames.MANAGE_MASTER_RECORD,\n this.wrapRequest(xmlRequest)\n );\n return mapCustomerResponseFromXml(xmlResponse.Response.Body);\n }\n\n /**\n * Update an existing customer\n */\n async updateCustomer(\n customer: Customer\n ): Promise<OperationResponse<Customer>> {\n const validatedCustomer = customerSchema.parse(customer);\n\n const xmlRequest = mapUpdateCustomerToXml(validatedCustomer);\n const xmlResponse = await this.http.postXml<\n WrapRequestDto<ManageMasterRecordRQ>,\n AvesResponseRoot<CustomerRecordRS>\n >(\n AvesEndpoints.INSERT_OR_UPDATE_MASTER_RECORD,\n RootElementNames.MANAGE_MASTER_RECORD,\n this.wrapRequest(xmlRequest)\n );\n return mapCustomerResponseFromXml(xmlResponse.Response.Body);\n }\n\n /**\n * Upsert a customer\n */\n async upsertCustomer(\n customer: Customer\n ): Promise<OperationResponse<Customer>> {\n const validatedCustomer = customerSchema.parse(customer);\n const xmlRequest = mapUpsertCustomerToXml(validatedCustomer);\n const xmlResponse = await this.http.postXml<\n WrapRequestDto<ManageMasterRecordRQ>,\n AvesResponseRoot<CustomerRecordRS>\n >(\n AvesEndpoints.INSERT_OR_UPDATE_MASTER_RECORD,\n RootElementNames.MANAGE_MASTER_RECORD,\n this.wrapRequest(xmlRequest)\n );\n return mapCustomerResponseFromXml(xmlResponse.Response.Body);\n }\n\n // ===== BOOKING MANAGEMENT =====\n\n /**\n * Create a new booking\n */\n async createBooking(\n request: CreateBookingRequest\n ): Promise<OperationResponse<BookingResponse>> {\n const validatedRequest = createBookingRequestSchema.parse(request);\n\n const xmlRequest = mapCreateBookingToXml(validatedRequest);\n const xmlResponse = await this.http.postXml<\n WrapRequestDto<BookFileRQ>,\n AvesResponseRoot<BookingFileRS>\n >(\n AvesEndpoints.CREATE_BOOKING_FILE,\n RootElementNames.BOOK_FILE,\n this.wrapRequest(xmlRequest)\n );\n return mapBookingResponseFromXml(xmlResponse.Response.Body);\n }\n\n /**\n * Update booking header information\n */\n async updateBookingHeader(\n customerRecordCode: string,\n bookingFileCode: string,\n bookingFileStartDate: string,\n updates?: {\n newCustomerRecordCode?: string;\n passengers?: any[];\n notes?: string;\n }\n ): Promise<OperationResponse<void>> {\n const xmlRequest = mapUpdateBookingHeaderToXml(\n customerRecordCode,\n bookingFileCode,\n bookingFileStartDate,\n updates\n );\n const xmlResponse = await this.http.postXml<\n WrapRequestDto<ModiFileHeaderRQ>,\n AvesResponseRoot<ModiFileHeaderRS>\n >(\n AvesEndpoints.MOD_BOOKING_FILE_HEADER,\n RootElementNames.MODI_FILE_HEADER,\n this.wrapRequest(xmlRequest)\n );\n return {\n success: xmlResponse.Response.RsStatus['@Status'] === 'OK',\n message: xmlResponse.Response.RsStatus.ErrorDescription,\n };\n }\n\n /**\n * Update booking services\n */\n async updateBookingServices(\n customerRecordCode: string,\n bookingFileCode: string,\n services: BookingService[]\n ): Promise<OperationResponse<BookingResponse>> {\n const xmlRequest = mapUpdateBookingServicesToXml(\n customerRecordCode,\n bookingFileCode,\n services\n );\n const xmlResponse = await this.http.postXml<\n WrapRequestDto<ModFileServicesRQ>,\n AvesResponseRoot<BookingFileRS>\n >(\n AvesEndpoints.MOD_BOOKING_FILE_SERVICES,\n RootElementNames.MOD_FILE_SERVICES,\n this.wrapRequest(xmlRequest)\n );\n return mapBookingResponseFromXml(xmlResponse.Response.Body);\n }\n\n /**\n * Set booking status\n */\n async setBookingStatus(\n customerRecordCode: string,\n bookingFileCode: string,\n status: BookingStatusTypeValue,\n options?: {\n expiredDate?: string;\n optionedFileExpireDatePolicy?:\n | 'NOT_SET'\n | 'CONSIDER_HOLIDAY'\n | 'CONSIDER_HOLIDAY_AND_SATURDAY';\n backOfficeRequest?: boolean;\n printDoc?: boolean;\n sendDocViaEmail?: boolean;\n applyPenalty?: boolean;\n penaltyCode?: string;\n simulateCancelAndGetPenalty?: boolean;\n }\n ): Promise<OperationResponse<BookingResponse>> {\n const xmlRequest = mapSetBookingStatusToXml(\n customerRecordCode,\n bookingFileCode,\n status,\n options\n );\n const xmlResponse = await this.http.postXml<\n WrapRequestDto<SetStatusRQ>,\n AvesResponseRoot<SetStatusServiceRS>\n >(\n AvesEndpoints.SET_BOOKING_FILE_STATUS,\n RootElementNames.SET_STATUS,\n this.wrapRequest(xmlRequest)\n );\n return mapBookingResponseFromXml(xmlResponse.Response.Body);\n }\n\n /**\n * Set booking service status (nullify a specific service)\n */\n async setBookingServiceStatus(\n customerRecordCode: string,\n bookingFileCode: string,\n serviceRef: string,\n statusDate?: string\n ): Promise<OperationResponse<BookingResponse>> {\n const xmlRequest = mapSetBookingServiceStatusToXml(\n customerRecordCode,\n bookingFileCode,\n serviceRef,\n statusDate\n );\n const xmlResponse = await this.http.postXml<\n WrapRequestDto<SetStatusServiceRQ>,\n AvesResponseRoot<SetStatusServiceRS>\n >(\n AvesEndpoints.SET_BOOKING_FILE_SERVICE_STATUS,\n RootElementNames.SET_STATUS_SERVICE,\n this.wrapRequest(xmlRequest)\n );\n return mapBookingResponseFromXml(xmlResponse.Response.Body);\n }\n\n /**\n * Cancel a booking\n */\n async cancelBooking(\n request: CancelBookingRequest\n ): Promise<OperationResponse<CancelResponseData>> {\n const validatedRequest = cancelBookingRequestSchema.parse(request);\n\n const xmlRequest = mapCancelBookingToXml(validatedRequest);\n const xmlResponse = await this.http.postXml<\n WrapRequestDto<CancelFileRQ>,\n AvesResponseRoot<CancelFileRS>\n >(\n AvesEndpoints.CANCEL_BOOKING_FILE,\n RootElementNames.CANCEL_FILE,\n this.wrapRequest(xmlRequest)\n );\n return mapCancelResponseFromXml(xmlResponse.Response.Body);\n }\n\n // ===== PAYMENT MANAGEMENT =====\n\n /**\n * Add payment to a booking\n */\n async addPayment(\n request: AddPaymentRequest\n ): Promise<OperationResponse<PaymentResponseData>> {\n const validatedRequest = addPaymentRequestSchema.parse(request);\n\n const xmlRequest = mapAddPaymentToXml(validatedRequest);\n const xmlResponse = await this.http.postXml<\n WrapRequestDto<FilePaymentListRQ>,\n AvesResponseRoot<FilePaymentListRS>\n >(\n AvesEndpoints.INSERT_FILE_PAYMENT_LIST,\n RootElementNames.FILE_PAYMENT_LIST,\n this.wrapRequest(xmlRequest)\n );\n return mapPaymentResponseFromXml(xmlResponse.Response.Body);\n }\n\n // ===== DOCUMENT MANAGEMENT =====\n\n /**\n * Generate and print booking documents\n */\n async printDocument(\n request: PrintDocumentRequest\n ): Promise<OperationResponse<DocumentPrintResult>> {\n const validatedRequest = printDocumentRequestSchema.parse(request);\n\n const xmlRequest = mapPrintDocumentToXml(validatedRequest);\n const xmlResponse = await this.http.postXml<\n WrapRequestDto<PrintBookingDocumentRQ>,\n AvesResponseRoot<PrintBookingDocumentRS>\n >(\n AvesEndpoints.PRINT_BOOKING_DOCUMENT,\n RootElementNames.PRINT_BOOKING_DOCUMENT,\n this.wrapRequest(xmlRequest)\n );\n return mapDocumentResponseFromXml(xmlResponse.Response.Body);\n }\n\n // ===== LEGACY METHODS (for backward compatibility) =====\n\n /**\n * @deprecated Use searchCustomers instead\n */\n async searchMasterRecord(\n payload: SearchMasterRecordRQ\n ): Promise<AvesResponseRoot<SearchMasterRecordRS>> {\n return this.http.postXml<\n WrapRequestDto<SearchMasterRecordRQ>,\n AvesResponseRoot<SearchMasterRecordRS>\n >(\n AvesEndpoints.SEARCH_MASTER_RECORDS,\n RootElementNames.SEARCH_MASTER_RECORD,\n this.wrapRequest(payload)\n );\n }\n\n /**\n * @deprecated Use createCustomer or updateCustomer instead\n */\n async insertOrUpdateMasterRecord(\n payload: ManageMasterRecordRQ\n ): Promise<AvesResponseRoot<CustomerRecordRS>> {\n return this.http.postXml<\n WrapRequestDto<ManageMasterRecordRQ>,\n AvesResponseRoot<CustomerRecordRS>\n >(\n AvesEndpoints.INSERT_OR_UPDATE_MASTER_RECORD,\n RootElementNames.MANAGE_MASTER_RECORD,\n this.wrapRequest(payload)\n );\n }\n\n /**\n * @deprecated Use createBooking instead\n */\n async createBookingFile(\n payload: BookFileRQ\n ): Promise<AvesResponseRoot<BookingFileRS>> {\n return this.http.postXml<\n WrapRequestDto<BookFileRQ>,\n AvesResponseRoot<BookingFileRS>\n >(\n AvesEndpoints.CREATE_BOOKING_FILE,\n RootElementNames.BOOK_FILE,\n this.wrapRequest(payload)\n );\n }\n\n /**\n * @deprecated Use cancelBooking instead\n */\n async cancelBookingFile(\n payload: CancelFileRQ\n ): Promise<AvesResponseRoot<CancelFileRS>> {\n return this.http.postXml<\n WrapRequestDto<CancelFileRQ>,\n AvesResponseRoot<CancelFileRS>\n >(\n AvesEndpoints.CANCEL_BOOKING_FILE,\n RootElementNames.CANCEL_FILE,\n this.wrapRequest(payload)\n );\n }\n\n /**\n * @deprecated Use printDocument instead\n */\n async printBookingDocument(\n payload: PrintBookingDocumentRQ\n ): Promise<AvesResponseRoot<PrintBookingDocumentRS>> {\n return this.http.postXml<\n WrapRequestDto<PrintBookingDocumentRQ>,\n AvesResponseRoot<PrintBookingDocumentRS>\n >(\n AvesEndpoints.PRINT_BOOKING_DOCUMENT,\n RootElementNames.PRINT_BOOKING_DOCUMENT,\n this.wrapRequest(payload)\n );\n }\n}\n","export const AVES_SDK_CONFIG = Symbol('AVES_SDK_CONFIG');\nexport const XML_HTTP_CLIENT = Symbol('XML_HTTP_CLIENT');\n","/**\n * AVES XML Root Element Names\n *\n * This file contains all the root element names used in AVES API requests.\n * These are used as the root tag when serializing XML requests.\n */\n\nexport const RootElementNames = {\n // Master Record Operations\n SEARCH_MASTER_RECORD: 'SearchMasterRecordRQ',\n MANAGE_MASTER_RECORD: 'ManageMasterRecordRQ',\n\n // Booking File Operations\n BOOK_FILE: 'BookFileRQ',\n MODI_FILE_HEADER: 'ModiFileHeaderRQ',\n MOD_FILE_SERVICES: 'ModFileServicesRQ',\n SET_STATUS: 'SetStatusRQ',\n SET_STATUS_SERVICE: 'SetStatusServiceRQ',\n CANCEL_FILE: 'CancelFileRQ',\n\n // Payment Operations\n FILE_PAYMENT_LIST: 'FilePaymentListRQ',\n\n // Document Operations\n PRINT_BOOKING_DOCUMENT: 'PrintBookingDocumentRQ',\n} as const;\n\nexport type RootElementName =\n (typeof RootElementNames)[keyof typeof RootElementNames];\n","/**\n * AVES API Endpoints\n */\n\nexport const AvesEndpoints = {\n // Master Record Operations\n SEARCH_MASTER_RECORDS: '/interop/masterRecords/v2/rest/Search',\n INSERT_OR_UPDATE_MASTER_RECORD:\n '/interop/masterRecords/v2/rest/InsertOrUpdate',\n\n // Booking File Operations\n CREATE_BOOKING_FILE: '/interop/booking/v2/rest/CreateBookingFile',\n MOD_BOOKING_FILE_HEADER: '/interop/booking/v2/rest/ModBookingFileHeader',\n MOD_BOOKING_FILE_SERVICES: '/interop/booking/v2/rest/ModBookingFileServices',\n SET_BOOKING_FILE_STATUS: '/interop/booking/v2/rest/SetBookingFileStatus',\n SET_BOOKING_FILE_SERVICE_STATUS:\n '/interop/booking/v2/rest/SetBookingFileServiceStatus',\n CANCEL_BOOKING_FILE: '/interop/booking/v2/rest/CancelBookingFile',\n\n // Payment Operations\n INSERT_FILE_PAYMENT_LIST: '/interop/booking/v2/rest/InsertFilePaymentList',\n\n // Document Operations\n PRINT_BOOKING_DOCUMENT: '/interop/document/v2/rest/PrintBookingDocument',\n} as const;\n\nexport type AvesEndpoint = (typeof AvesEndpoints)[keyof typeof AvesEndpoints];\n","import { z } from 'zod';\n\n// ===== CONST OBJECTS (Single Source of Truth) =====\n\nexport const PassengerType = {\n ADULT: 'adult',\n CHILD: 'child',\n INFANT: 'infant',\n SENIOR: 'senior',\n} as const;\n\nexport const GenderType = {\n MALE: 'male',\n FEMALE: 'female',\n} as const;\n\nexport const ServiceType = {\n FLIGHT: 'flight',\n HOTEL: 'hotel',\n CAR: 'car',\n TRANSFER: 'transfer',\n INSURANCE: 'insurance',\n} as const;\n\nexport const ServiceStatusType = {\n CONFIRMED: 'confirmed',\n PENDING: 'pending',\n CANCELLED: 'cancelled',\n} as const;\n\nexport const PaymentType = {\n CREDIT_CARD: 'credit_card',\n DEBIT_CARD: 'debit_card',\n BANK_TRANSFER: 'bank_transfer',\n CASH: 'cash',\n} as const;\n\nexport const PaymentStatusType = {\n PENDING: 'pending',\n CONFIRMED: 'confirmed',\n FAILED: 'failed',\n} as const;\n\nexport const CustomerType = {\n CUSTOMER: 'customer',\n SUPPLIER: 'supplier',\n VOUCHER: 'voucher',\n SUPPLIER_VOUCHER: 'supplier_voucher',\n} as const;\n\nexport const CustomerStatusType = {\n ENABLED: 'enabled',\n WARNING: 'warning',\n BLACKLISTED: 'blacklisted',\n DISABLED: 'disabled',\n} as const;\n\nexport const BookingStatusType = {\n QUOTATION: 'quotation',\n WORK_IN_PROGRESS: 'work_in_progress',\n CONFIRMED: 'confirmed',\n OPTIONED: 'optioned',\n NULLIFIED: 'nullified',\n CANCELED: 'canceled',\n} as const;\n\nexport const DocumentType = {\n VISA_REQUEST: 'visa_request',\n TRAVEL_INFORMATION: 'travel_information',\n VOUCHER: 'voucher',\n BOOKING_CONTRACT: 'booking_contract',\n BOOKING_CONFIRMATION: 'booking_confirmation',\n SUPPLIER_SERVICE_LIST: 'supplier_service_list',\n INVOICE: 'invoice',\n PROFORMA_INVOICE: 'proforma_invoice',\n ADEGUAMENTO: 'adeguamento',\n RESERVATION_FORM: 'reservation_form',\n OPEN_XML: 'open_xml',\n SALES_INVOICE: 'sales_invoice',\n TICKETING_TMASTER: 'ticketing_tmaster',\n SUMMARY_FORM: 'summary_form',\n} as const;\n\nexport const DocumentFormatType = {\n PDF: 'pdf',\n HTML: 'html',\n XML: 'xml',\n} as const;\n\nexport const DeliveryMethodType = {\n EMAIL: 'email',\n SMS: 'sms',\n DOWNLOAD: 'download',\n} as const;\n\nexport const CancelReasonType = {\n CUSTOMER_REQUEST: 'customer_request',\n NO_SHOW: 'no_show',\n OPERATIONAL: 'operational',\n OTHER: 'other',\n} as const;\n\nexport const RefundMethodType = {\n ORIGINAL_PAYMENT: 'original_payment',\n CREDIT: 'credit',\n CASH: 'cash',\n} as const;\n\nexport const PricingItemType = {\n SERVICE: 'service',\n TAX: 'tax',\n FEE: 'fee',\n DISCOUNT: 'discount',\n} as const;\n\nexport const DeliveryStatusType = {\n SENT: 'sent',\n PENDING: 'pending',\n FAILED: 'failed',\n} as const;\n\n// ===== TYPE ALIASES FOR CONST OBJECTS =====\n// These are needed for type inference from const object values\n\nexport type PassengerTypeValue =\n (typeof PassengerType)[keyof typeof PassengerType];\nexport type GenderTypeValue = (typeof GenderType)[keyof typeof GenderType];\nexport type ServiceTypeValue = (typeof ServiceType)[keyof typeof ServiceType];\nexport type ServiceStatusTypeValue =\n (typeof ServiceStatusType)[keyof typeof ServiceStatusType];\nexport type PaymentTypeValue = (typeof PaymentType)[keyof typeof PaymentType];\nexport type PaymentStatusTypeValue =\n (typeof PaymentStatusType)[keyof typeof PaymentStatusType];\nexport type CustomerTypeValue =\n (typeof CustomerType)[keyof typeof CustomerType];\nexport type CustomerStatusTypeValue =\n (typeof CustomerStatusType)[keyof typeof CustomerStatusType];\nexport type BookingStatusTypeValue =\n (typeof BookingStatusType)[keyof typeof BookingStatusType];\nexport type DocumentTypeValue =\n (typeof DocumentType)[keyof typeof DocumentType];\nexport type DocumentFormatTypeValue =\n (typeof DocumentFormatType)[keyof typeof DocumentFormatType];\nexport type DeliveryMethodTypeValue =\n (typeof DeliveryMethodType)[keyof typeof DeliveryMethodType];\nexport type CancelReasonTypeValue =\n (typeof CancelReasonType)[keyof typeof CancelReasonType];\nexport type RefundMethodTypeValue =\n (typeof RefundMethodType)[keyof typeof RefundMethodType];\nexport type PricingItemTypeValue =\n (typeof PricingItemType)[keyof typeof PricingItemType];\nexport type DeliveryStatusTypeValue =\n (typeof DeliveryStatusType)[keyof typeof DeliveryStatusType];\n\n// ===== TYPE SCHEMAS (Based on Aves XML Documentation) =====\n\nexport const addressTypeSchema = z.enum([\n 'home',\n 'work',\n 'billing',\n 'delivery',\n]);\nexport const contactTypeSchema = z.enum(['home', 'work', 'mobile', 'fax']);\nexport const emailTypeSchema = z.enum(['home', 'work']);\nexport const passengerTypeSchema = z.enum([\n PassengerType.ADULT,\n PassengerType.CHILD,\n PassengerType.INFANT,\n PassengerType.SENIOR,\n]);\nexport const titleTypeSchema = z.enum(['mr', 'mrs', 'ms', 'dr', 'prof']);\nexport const genderTypeSchema = z.enum([GenderType.MALE, GenderType.FEMALE]);\nexport const serviceTypeSchema = z.enum([\n ServiceType.FLIGHT,\n ServiceType.HOTEL,\n ServiceType.CAR,\n ServiceType.TRANSFER,\n ServiceType.INSURANCE,\n]);\nexport const serviceStatusTypeSchema = z.enum([\n ServiceStatusType.CONFIRMED,\n ServiceStatusType.PENDING,\n ServiceStatusType.CANCELLED,\n]);\nexport const paymentTypeSchema = z.enum([\n PaymentType.CREDIT_CARD,\n PaymentType.DEBIT_CARD,\n PaymentType.BANK_TRANSFER,\n PaymentType.CASH,\n]);\nexport const paymentStatusTypeSchema = z.enum([\n PaymentStatusType.PENDING,\n PaymentStatusType.CONFIRMED,\n PaymentStatusType.FAILED,\n]);\nexport const customerTypeSchema = z.enum([\n CustomerType.CUSTOMER,\n CustomerType.SUPPLIER,\n CustomerType.VOUCHER,\n CustomerType.SUPPLIER_VOUCHER,\n]);\nexport const searchOperatorTypeSchema = z.enum([\n 'equals',\n 'contains',\n 'starts_with',\n 'ends_with',\n]);\nexport const bookingTypeSchema = z.enum(['individual', 'group', 'corporate']);\nexport const priorityTypeSchema = z.enum(['low', 'normal', 'high', 'urgent']);\nexport const specialRequestTypeSchema = z.enum([\n 'meal',\n 'seat',\n 'wheelchair',\n 'other',\n]);\nexport const cancelReasonTypeSchema = z.enum([\n CancelReasonType.CUSTOMER_REQUEST,\n CancelReasonType.NO_SHOW,\n CancelReasonType.OPERATIONAL,\n CancelReasonType.OTHER,\n]);\nexport const refundMethodTypeSchema = z.enum([\n RefundMethodType.ORIGINAL_PAYMENT,\n RefundMethodType.CREDIT,\n RefundMethodType.CASH,\n]);\nexport const documentTypeSchema = z.enum([\n DocumentType.VISA_REQUEST,\n DocumentType.TRAVEL_INFORMATION,\n DocumentType.VOUCHER,\n DocumentType.BOOKING_CONTRACT,\n DocumentType.BOOKING_CONFIRMATION,\n DocumentType.SUPPLIER_SERVICE_LIST,\n DocumentType.INVOICE,\n DocumentType.PROFORMA_INVOICE,\n DocumentType.ADEGUAMENTO,\n DocumentType.RESERVATION_FORM,\n DocumentType.OPEN_XML,\n DocumentType.SALES_INVOICE,\n DocumentType.TICKETING_TMASTER,\n DocumentType.SUMMARY_FORM,\n]);\nexport const documentFormatTypeSchema = z.enum([\n DocumentFormatType.PDF,\n DocumentFormatType.HTML,\n DocumentFormatType.XML,\n]);\nexport const deliveryMethodTypeSchema = z.enum([\n DeliveryMethodType.EMAIL,\n DeliveryMethodType.SMS,\n DeliveryMethodType.DOWNLOAD,\n]);\nexport const bookingStatusTypeSchema = z.enum([\n BookingStatusType.QUOTATION,\n BookingStatusType.WORK_IN_PROGRESS,\n BookingStatusType.CONFIRMED,\n BookingStatusType.OPTIONED,\n BookingStatusType.NULLIFIED,\n BookingStatusType.CANCELED,\n]);\nexport const pricingItemTypeSchema = z.enum([\n PricingItemType.SERVICE,\n PricingItemType.TAX,\n PricingItemType.FEE,\n PricingItemType.DISCOUNT,\n]);\nexport const deliveryStatusTypeSchema = z.enum([\n DeliveryStatusType.SENT,\n DeliveryStatusType.PENDING,\n DeliveryStatusType.FAILED,\n]);\nexport const customerStatusTypeSchema = z.enum([\n CustomerStatusType.ENABLED,\n CustomerStatusType.WARNING,\n CustomerStatusType.BLACKLISTED,\n CustomerStatusType.DISABLED,\n]);\nexport const communicationMethodTypeSchema = z.enum(['email', 'sms', 'phone']);\n\n// ===== DATE VALIDATION HELPERS =====\n\nconst dateStringSchema = z\n .string()\n .regex(/^\\d{4}-\\d{2}-\\d{2}$/, 'Date must be in YYYY-MM-DD format');\nconst dateTimeStringSchema = z\n .string()\n .regex(\n /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{3})?Z?$/,\n 'DateTime must be in ISO 8601 format'\n );\n\n// ===== COMMON API SCHEMAS =====\n\nexport const customerAddressSchema = z.object({\n type: addressTypeSchema.optional(),\n street: z\n .string()\n .max(100, 'Street must be 100 characters or less')\n .optional(),\n city: z.string().max(50, 'City must be 50 characters or less').optional(),\n state: z.string().max(50, 'State must be 50 characters or less').optional(),\n postalCode: z\n .string()\n .max(20, 'Postal code must be 20 characters or less')\n .optional(),\n country: z\n .string()\n .max(50, 'Country must be 50 characters or less')\n .optional(),\n});\n\nexport const customerContactSchema = z.object({\n phone: z\n .object({\n type: contactTypeSchema.optional(),\n number: z\n .string()\n .min(1, 'Phone number is required')\n .max(30, 'Phone number must be 30 characters or less'),\n })\n .optional(),\n email: z\n .object({\n type: emailTypeSchema.optional(),\n address: z\n .string()\n .email('Valid email address is required')\n .max(100, 'Email must be 100 characters or less'),\n })\n .optional(),\n mobile: z\n .object({\n type: contactTypeSchema.optional(),\n number: z\n .string()\n .min(1, 'Mobile number is required')\n .max(30, 'Mobile number must be 30 characters or less'),\n })\n .optional(),\n fax: z\n .object({\n type: contactTypeSchema.optional(),\n number: z\n .string()\n .min(1, 'Fax number is required')\n .max(30, 'Fax number must be 30 characters or less'),\n })\n .optional(),\n webUrl: z\n .string()\n .url('Valid URL is required')\n .max(200, 'Web URL must be 200 characters or less')\n .optional(),\n});\n\nexport const customerSchema = z.object({\n id: z.string().max(6, 'Customer ID must be 6 characters or less'),\n type: customerTypeSchema,\n status: customerStatusTypeSchema,\n personalInfo: z\n .object({\n title: z\n .string()\n .max(10, 'Title must be 10 characters or less')\n .optional(),\n firstName: z\n .string()\n .min(1, 'First name is required')\n .max(50, 'First name must be 50 characters or less'),\n lastName: z\n .string()\n .min(1, 'Last name is required')\n .max(50, 'Last name must be 50 characters or less'),\n dateOfBirth: dateStringSchema.optional(),\n gender: genderTypeSchema.optional(),\n nationality: z\n .string()\n .max(3, 'Nationality code must be 3 characters or less')\n .optional(),\n birthCity: z\n .string()\n .max(50, 'Birth city must be 50 characters or less')\n .optional(),\n birthCounty: z\n .string()\n .max(10, 'Birth county code must be 10 characters or less')\n .optional(),\n })\n .optional(),\n contact: customerContactSchema.optional(),\n address: customerAddressSchema.optional(),\n businessInfo: z\n .object({\n companyName: z\n .string()\n .max(100, 'Company name must be 100 characters or less')\n .optional(),\n taxId: z\n .string()\n .max(30, 'Tax ID must be 30 characters or less')\n .optional(),\n vatCode: z\n .string()\n .max(30, 'VAT code must be 30 characters or less')\n .optional(),\n fiscalCode: z\n .string()\n .max(30, 'Fiscal code must be 30 characters or less')\n .optional(),\n licenseNumber: z\n .string()\n .max(50, 'License number must be 50 characters or less')\n .optional(),\n priceListCode: z\n .string()\n .max(30, 'Price list code must be 30 characters or less')\n .optional(),\n })\n .optional(),\n preferences: z\n .object({\n language: z\n .string()\n .length(2, 'Language code must be exactly 2 characters')\n .optional(),\n currency: z\n .string()\n .length(3, 'Currency code must be exactly 3 characters')\n .optional(),\n communicationMethod: communicationMethodTypeSchema.optional(),\n })\n .optional(),\n meta: z\n .object({\n createdDate: z.string().optional(),\n modifiedDate: z.string().optional(),\n loginType: z\n .enum([\n 'WEB_BOOKING',\n 'BUSINESS_TRAVEL',\n 'GROUP_TRAVEL',\n 'SUPPLIER',\n 'ADMINISTRATOR',\n ])\n .optional(),\n thirdPartRecordCode: z\n .string()\n .max(50, 'Third part record code must be 50 characters or less')\n .optional(),\n searchField: z\n .string()\n .max(100, 'Search field must be 100 characters or less')\n .optional(),\n extraInfo: z\n .string()\n .max(500, 'Extra info must be 500 characters or less')\n .optional(),\n })\n .optional(),\n codes: z\n .object({\n zoneCode: z\n .string()\n .max(10, 'Zone code must be 10 characters or less')\n .optional(),\n areaCode: z\n .string()\n .max(10, 'Area code must be 10 characters or less')\n .optional(),\n branchOfficeCode: z\n .string()\n .max(10, 'Branch office code must be 10 characters or less')\n .optional(),\n categoryCode: z\n .string()\n .max(10, 'Category code must be 10 characters or less')\n .optional(),\n activityCode: z\n .string()\n .max(10, 'Activity code must be 10 characters or less')\n .optional(),\n promoterCode: z\n .string()\n .max(10, 'Promoter code must be 10 characters or less')\n .optional(),\n networkCode: z\n .string()\n .max(10, 'Network code must be 10 characters or less')\n .optional(),\n })\n .optional(),\n});\n\nexport const bookingPassengerSchema = z.object({\n id: z\n .string()\n .regex(/^\\d{3}$/, 'Passenger ID must be 3 digits (001, 002, etc.)'),\n type: passengerTypeSchema,\n title: titleTypeSchema.optional(),\n firstName: z\n .string()\n .min(1, 'First name is required')\n .max(50, 'First name must be 50 characters or less'),\n lastName: z\n .string()\n .min(1, 'Last name is required')\n .max(50, 'Last name must be 50 characters or less'),\n dateOfBirth: dateStringSchema.optional(),\n gender: genderTypeSchema.optional(),\n nationality: z\n .string()\n .max(3, 'Nationality code must be 3 characters or less')\n .optional(),\n passport: z\n .object({\n number: z\n .string()\n .min(1, 'Passport number is required')\n .max(20, 'Passport number must be 20 characters or less'),\n expiryDate: dateStringSchema,\n issuingCountry: z\n .string()\n .min(1, 'Issuing country is required')\n .max(3, 'Country code must be 3 characters or less'),\n })\n .optional(),\n address: customerAddressSchema.optional(),\n contact: customerContactSchema.optional(),\n});\n\nexport const bookingServiceSchema = z.object({\n id: z.string().min(1, 'Service ID is required'),\n type: serviceTypeSchema,\n status: serviceStatusTypeSchema,\n code: z\n .string()\n .max(50, 'Service code must be 50 characters or less')\n .optional(),\n name: z\n .string()\n .max(200, 'Service name must be 200 characters or less')\n .optional(),\n description: z\n .string()\n .max(500, 'Description must be 500 characters or less')\n .optional(),\n startDate: dateStringSchema.optional(),\n endDate: dateStringSchema.optional(),\n price: z\n .object({\n currency: z\n .string()\n .length(3, 'Currency code must be exactly 3 characters'),\n amount: z.number().nonnegative('Amount must be non-negative'),\n })\n .optional(),\n});\n\nexport const bookingPaymentSchema = z.object({\n id: z.string().min(1, 'Payment ID is required'),\n type: paymentTypeSchema,\n status: paymentStatusTypeSchema,\n amount: z.object({\n currency: z\n .string()\n .length(3, 'Currency code must be exactly 3 characters'),\n amount: z.number().positive('Amount must be positive'),\n }),\n details: z\n .object({\n cardNumber: z\n .string()\n .max(20, 'Card number must be 20 characters or less')\n .optional(),\n expiryDate: z\n .string()\n .regex(/^\\d{2}\\/\\d{2}$/, 'Expiry date must be in MM/YY format')\n .optional(),\n cardHolderName: z\n .string()\n .max(100, 'Cardholder name must be 100 characters or less')\n .optional(),\n })\n .optional(),\n});\n\n// ===== REQUEST SCHEMAS =====\n\nconst paginationSchema = z\n .object({\n pages: z\n .number()\n .int()\n .positive('Pages must be positive')\n .max(100, 'Pages cannot exceed 100'),\n page: z.number().int().min(1, 'Page must be at least 1'),\n })\n .optional();\n\nexport const searchCustomerRequestSchema = z.discriminatedUnion('type', [\n z.object({\n type: z.literal('code'),\n code: z\n .string()\n .min(1, 'Code is required')\n .max(6, 'Code must be 6 characters or less'),\n pagination: paginationSchema,\n }),\n z.object({\n type: z.literal('name'),\n name: z.string().min(1, 'Name is required'),\n city: z.string().max(50, 'City must be 50 characters or less').optional(),\n pagination: paginationSchema,\n }),\n z.object({\n type: z.literal('vat_code'),\n vatCode: z.string().min(1, 'VAT code is required'),\n phoneNumber: z\n .string()\n .max(30, 'Phone number must be 30 characters or less')\n .optional(),\n pagination: paginationSchema,\n }),\n z.object({\n type: z.literal('zone'),\n zipCode: z.string().min(1, 'Zip code is required'),\n city: z.string().max(50, 'City must be 50 characters or less').optional(),\n countyCode: z\n .string()\n .max(10, 'County code must be 10 characters or less')\n .optional(),\n pagination: paginationSchema,\n }),\n z.object({\n type: z.literal('category'),\n categoryCode: z.string().min(1, 'Category code is required'),\n pagination: paginationSchema,\n }),\n z.object({\n type: z.literal('email'),\n email: z.email('Valid email is required'),\n pagination: paginationSchema,\n }),\n z.object({\n type: z.literal('last_mod_date'),\n from: z\n .string()\n .regex(/^\\d{4}-\\d{2}-\\d{2}$/, 'Date must be in YYYY-MM-DD format'),\n to: z\n .string()\n .regex(/^\\d{4}-\\d{2}-\\d{2}$/, 'Date must be in YYYY-MM-DD format'),\n pagination: paginationSchema,\n }),\n z.object({\n type: z.literal('search_field'),\n searchField: z.string().min(1, 'Search field is required'),\n pagination: paginationSchema,\n }),\n z.object({\n type: z.literal('external_ref_code'),\n externalRefCode: z.string().min(1, 'External ref code is required'),\n pagination: paginationSchema,\n }),\n]);\n\nconst baseBookingRequestSchema = z.object({\n createDate: z.string().optional(),\n bookingFileRefCode: z.string().max(50).optional(),\n travelAgentCode: z.string().max(30).optional(),\n clerkName: z.string().max(60).optional(),\n description: z\n .string()\n .max(200, 'Description must be 200 characters or less')\n .optional(),\n startDate: z.string().min(1, 'Start date is required'),\n endDate: z.string().min(1, 'End date is required'),\n currency: z\n .string()\n .max(3, 'Currency code must be 3 characters or less')\n .optional(),\n markupCode: z.string().max(20).optional(),\n bookingFileStatus: z\n .object({\n value: bookingStatusTypeSchema,\n expiredDate: dateStringSchema.optional(),\n })\n .optional(),\n passengers: z\n .array(bookingPassengerSchema)\n .min(1, 'At least one passenger is required')\n .max(99, 'Maximum 99 passengers allowed'),\n services: z\n .array(bookingServiceSchema)\n .min(1, 'At least one service is required')\n .max(50, 'Maximum 50 services allowed'),\n statisticCodes: z\n .object({\n code1: z\n .string()\n .max(4, 'Statistic code must be 4 characters or less')\n .optional(),\n code2: z\n .string()\n .max(4, 'Statistic code must be 4 characters or less')\n .optional(),\n code3: z\n .string()\n .max(4, 'Statistic code must be 4 characters or less')\n .optional(),\n code4: z\n .string()\n .max(4, 'Statistic code must be 4 characters or less')\n .optional(),\n code5: z\n .string()\n .max(4, 'Statistic code must be 4 characters or less')\n .optional(),\n code6: z\n .string()\n .max(4, 'Statistic code must be 4 characters or less')\n .optional(),\n })\n .optional(),\n destination: z\n .object({\n code: z.string().optional(),\n iataCode: z.string().optional(),\n nationCode: z.string().optional(),\n })\n .optional(),\n earlyBookingDate: dateStringSchema.optional(),\n cupCode: z.string().max(30).optional(),\n cigCode: z.string().max(30).optional(),\n customerPromoterCode: z.string().max(20).optional(),\n billingReferenceCode: z.string().max(20).optional(),\n paymentReferenceCode: z.string().max(20).optional(),\n deadlines: z\n .array(\n z.object({\n code: z.string().min(1, 'Deadline code is required'),\n description: z.string().optional(),\n expireDate: z.string().optional(),\n })\n )\n .optional(),\n printDocument: z.boolean().optional(),\n sendDocumentViaEmail: z.boolean().optional(),\n bookingFinancialInfo: z\n .object({\n customerPaymentType: z\n .enum(['CASH', 'BANK', 'RID', 'RIBA', 'SPECIFIC_CODE', 'NOT_SET'])\n .optional(),\n customerSpecPaymentTypeCode: z.string().max(20).optional(),\n })\n .optional(),\n groupingPaxPolicy: z\n .enum(['GROUPED_PAX', 'NOT_GROUPED_PAX', 'ONE_PAX_ONLY'])\n .optional(),\n groupBookingFile: z.boolean().optional(),\n typeDownloadFile: z\n .enum(['AVES2AVES', 'AVES2AVESVIA', 'AVES2AVESITA'])\n .optional(),\n setBookingFileCodeFromStartDate: z.boolean().optional(),\n});\n\nexport const createBookingRequestSchema = z.union([\n baseBookingRequestSchema.extend({\n customerId: z\n .string()\n .max(6, 'Customer ID must be 6 characters or less')\n .min(1, 'Customer ID is required'),\n customerDetails: z.never().optional(),\n }),\n baseBookingRequestSchema.extend({\n customerId: z.never().optional(),\n customerDetails: customerSchema,\n }),\n]);\n\nexport const cancelBookingRequestSchema = z.object({\n bookingId: z\n .string()\n .min(1, 'Booking ID is required')\n .max(20, 'Booking ID must be 20 characters or less'),\n customerId: z\n .string()\n .max(6, 'Customer ID must be 6 characters or less')\n .optional(),\n reason: cancelReasonTypeSchema,\n description: z\n .string()\n .max(500, 'Description must be 500 characters or less')\n .optional(),\n refundRequest: z\n .object({\n amount: z.number().positive('Refund amount must be positive'),\n currency: z\n .string()\n .length(3, 'Currency code must be exactly 3 characters'),\n method: refundMethodTypeSchema,\n })\n .optional(),\n});\n\nexport const printDocumentRequestSchema = z.object({\n bookingId: z\n .string()\n .min(1, 'Booking ID is required')\n .max(20, 'Booking ID must be 20 characters or less'),\n customerId: z\n .string()\n .max(6, 'Customer ID must be 6 characters or less')\n .optional(),\n documentType: documentTypeSchema,\n format: documentFormatTypeSchema.optional(),\n language: z\n .string()\n .length(2, 'Language code must be exactly 2 characters')\n .optional(),\n deliveryMethod: z\n .object({\n type: deliveryMethodTypeSchema,\n address: z\n .string()\n .max(100, 'Delivery address must be 100 characters or less')\n .optional(),\n })\n .optional(),\n});\n\nexport const addPaymentRequestSchema = z.union([\n z.object({\n bookingId: z\n .string()\n .min(1, 'Booking ID is required')\n .max(20, 'Booking ID must be 20 characters or less'),\n bookingRefCode: z.never().optional(),\n payments: z\n .array(bookingPaymentSchema)\n .min(1, 'At least one payment is required')\n .max(20, 'Maximum 20 payments allowed'),\n enableMultiple: z.boolean().optional(),\n operationType: z\n .enum(['absolute', 'final', 'final_no_controls'])\n .optional(),\n }),\n z.object({\n bookingId: z.never().optional(),\n bookingRefCode: z\n .string()\n .min(1, 'Booking reference code is required')\n .max(20, 'Booking reference code must be 20 characters or less'),\n payments: z\n .array(bookingPaymentSchema)\n .min(1, 'At least one payment is required')\n .max(20, 'Maximum 20 payments allowed'),\n enableMultiple: z.boolean().optional(),\n operationType: z\n .enum(['absolute', 'final', 'final_no_controls'])\n .optional(),\n }),\n]);\n\nexport const updateBookingHeaderSchema = z.object({\n bookingId: z\n .string()\n .min(1, 'Booking ID is required')\n .max(20, 'Booking ID must be 20 characters or less'),\n customerId: z.string().max(6, 'Customer ID must be 6 characters or less'),\n startDate: dateStringSchema,\n passengers: z.array(bookingPassengerSchema).optional(),\n notes: z.string().max(999, 'Notes must be 999 characters or less').optional(),\n statisticCodes: z\n .object({\n code1: z\n .string()\n .max(4, 'Statistic code must be 4 characters or less')\n .optional(),\n code2: z\n .string()\n .max(4, 'Statistic code must be 4 characters or less')\n .optional(),\n code3: z\n .string()\n .max(4, 'Statistic code must be 4 characters or less')\n .optional(),\n code4: z\n .string()\n .max(4, 'Statistic code must be 4 characters or less')\n .optional(),\n code5: z\n .string()\n .max(4, 'Statistic code must be 4 characters or less')\n .optional(),\n code6: z\n .string()\n .max(4, 'Statistic code must be 4 characters or less')\n .optional(),\n })\n .optional(),\n});\n\nexport const updateBookingServicesSchema = z.object({\n bookingId: z\n .string()\n .min(1, 'Booking ID is required')\n .max(20, 'Booking ID must be 20 characters or less'),\n customerId: z.string().max(6, 'Customer ID must be 6 characters or less'),\n services: z\n .array(bookingServiceSchema)\n .min(1, 'At least one service is required')\n .max(50, 'Maximum 50 services allowed'),\n});\n\nexport const setBookingStatusSchema = z.object({\n bookingId: z\n .string()\n .min(1, 'Booking ID is required')\n .max(20, 'Booking ID must be 20 characters or less'),\n customerId: z.string().max(6, 'Customer ID must be 6 characters or less'),\n status: bookingStatusTypeSchema,\n expireDate: dateStringSchema.optional(),\n});\n\n// ===== RESPONSE SCHEMAS =====\n\nexport const bookingResponseSchema = z.object({\n id: z.string().min(1, 'Booking ID is required'),\n status: bookingStatusTypeSchema,\n createdAt: dateTimeStringSchema,\n updatedAt: dateTimeStringSchema,\n description: z.string().optional(),\n nation: z.string().optional(),\n destination: z.string().optional(),\n firstConfirmationDate: dateTimeStringSchema.optional(),\n paxNumber: z.number().int().nonnegative().optional(),\n reference: z.string().optional(),\n clerkName: z.string().optional(),\n customer: customerSchema,\n passengers: z.array(bookingPassengerSchema),\n services: z.array(bookingServiceSchema),\n pricing: z.object({\n totalAmount: z.object({\n currency: z\n .string()\n .length(3, 'Currency code must be exactly 3 characters'),\n amount: z.number().nonnegative('Amount must be non-negative'),\n }),\n breakdowns: z\n .array(\n z.object({\n type: pricingItemTypeSchema,\n description: z.string().min(1, 'Description is required'),\n amount: z.number(),\n })\n )\n .optional(),\n totals: z\n .object({\n beforeDiscount: z.number().optional(),\n afterDiscount: z.number().optional(),\n discount: z.number().optional(),\n withoutVat: z.number().optional(),\n dueAmount: z.number().optional(),\n paidAmount: z.number().optional(),\n balance: z.number().optional(),\n })\n .optional(),\n }),\n});\n\nexport const customerSearchResultSchema = z.object({\n customers: z.array(customerSchema),\n pagination: z.object({\n page: z.number().int().min(1, 'Page must be at least 1'),\n pages: z.number().int().min(1, 'Pages must be at least 1'),\n totalItems: z.number().int().min(0, 'Total items must be non-negative'),\n hasMore: z.boolean(),\n }),\n});\n\nexport const printedDocumentSchema = z.object({\n fileName: z.string().min(1, 'File name is required'),\n content: z.string().optional(),\n contentSize: z.number().int().min(0, 'Content size must be non-negative'),\n});\n\nexport const documentPrintResultSchema = z.object({\n emailRecipient: z.email('Valid email address is required').optional(),\n documents: z\n .array(printedDocumentSchema)\n .min(0, 'Documents array is required'),\n additionalDocuments: z\n .array(\n z.object({\n emailRecipient: z.string().email('Valid email address is required'),\n documents: z.array(printedDocumentSchema),\n })\n )\n .optional(),\n});\n\nexport const operationResponseSchema = z.object({\n success: z.boolean(),\n message: z.string().optional(),\n data: z.any().optional(),\n});\n\n// ===== INTERNAL SCHEMAS (Not exported publicly) =====\nconst apiSchemas = {\n // Type schemas\n addressType: addressTypeSchema,\n contactType: contactTypeSchema,\n emailType: emailTypeSchema,\n passengerType: passengerTypeSchema,\n titleType: titleTypeSchema,\n genderType: genderTypeSchema,\n serviceType: serviceTypeSchema,\n serviceStatusType: serviceStatusTypeSchema,\n paymentType: paymentTypeSchema,\n paymentStatusType: paymentStatusTypeSchema,\n customerType: customerTypeSchema,\n searchOperatorType: searchOperatorTypeSchema,\n bookingType: bookingTypeSchema,\n priorityType: priorityTypeSchema,\n specialRequestType: specialRequestTypeSchema,\n cancelReasonType: cancelReasonTypeSchema,\n refundMethodType: refundMethodTypeSchema,\n documentType: documentTypeSchema,\n documentFormatType: documentFormatTypeSchema,\n deliveryMethodType: deliveryMethodTypeSchema,\n bookingStatusType: bookingStatusTypeSchema,\n pricingItemType: pricingItemTypeSchema,\n deliveryStatusType: deliveryStatusTypeSchema,\n customerStatusType: customerStatusTypeSchema,\n communicationMethodType: communicationMethodTypeSchema,\n\n // Common schemas\n customerAddress: customerAddressSchema,\n customerContact: customerContactSchema,\n customer: customerSchema,\n bookingPassenger: bookingPassengerSchema,\n bookingService: bookingServiceSchema,\n bookingPayment: bookingPaymentSchema,\n\n // Request schemas\n searchCustomerRequest: searchCustomerRequestSchema,\n createBookingRequest: createBookingRequestSchema,\n cancelBookingRequest: cancelBookingRequestSchema,\n printDocumentRequest: printDocumentRequestSchema,\n addPaymentRequest: addPaymentRequestSchema,\n updateBookingHeader: updateBookingHeaderSchema,\n updateBookingServices: updateBookingServicesSchema,\n setBookingStatus: setBookingStatusSchema,\n\n // Response schemas\n bookingResponse: bookingResponseSchema,\n customerSearchResult: customerSearchResultSchema,\n printedDocument: printedDocumentSchema,\n documentPrintResult: documentPrintResultSchema,\n operationResponse: operationResponseSchema,\n} as const;\n\n// ===== INFERRED TYPES =====\n\nexport type AddressType = z.infer<typeof addressTypeSchema>;\nexport type ContactType = z.infer<typeof contactTypeSchema>;\nexport type EmailType = z.infer<typeof emailTypeSchema>;\nexport type TitleType = z.infer<typeof titleTypeSchema>;\nexport type SearchOperatorType = z.infer<typeof searchOperatorTypeSchema>;\nexport type BookingType = z.infer<typeof bookingTypeSchema>;\nexport type PriorityType = z.infer<typeof priorityTypeSchema>;\nexport type SpecialRequestType = z.infer<typeof specialRequestTypeSchema>;\nexport type CommunicationMethodType = z.infer<\n typeof communicationMethodTypeSchema\n>;\n\nexport type CustomerAddress = z.infer<typeof customerAddressSchema>;\nexport type CustomerContact = z.infer<typeof customerContactSchema>;\nexport type Customer = z.infer<typeof customerSchema>;\nexport type Price = {\n currency: string;\n amount: number;\n};\nexport type BookingPassenger = z.infer<typeof bookingPassengerSchema>;\nexport type BookingService = z.infer<typeof bookingServiceSchema>;\nexport type BookingPayment = z.infer<typeof bookingPaymentSchema>;\n\nexport type SearchCustomerRequest = z.infer<typeof searchCustomerRequestSchema>;\nexport type CreateBookingRequest = z.infer<typeof createBookingRequestSchema>;\nexport type CancelBookingRequest = z.infer<typeof cancelBookingRequestSchema>;\nexport type PrintDocumentRequest = z.infer<typeof printDocumentRequestSchema>;\nexport type AddPaymentRequest = z.infer<typeof addPaymentRequestSchema>;\n\nexport type BookingResponse = z.infer<typeof bookingResponseSchema>;\nexport type CustomerSearchResult = z.infer<typeof customerSearchResultSchema>;\nexport type PrintedDocument = z.infer<typeof printedDocumentSchema>;\nexport type DocumentPrintResult = z.infer<typeof documentPrintResultSchema>;\nexport type OperationResponse<T = unknown> = {\n success: boolean;\n message?: string;\n data?: T;\n};\n\nexport type CancelResponseData = {\n refundInfo?: {\n refundAmount: number;\n currency: string;\n refundMethod: string;\n processingTime: string;\n };\n};\n\nexport type PaymentResponseData = {\n booking: BookingResponse;\n paymentSummary: {\n totalPaid: {\n currency: string;\n amount: number;\n };\n outstandingAmount: {\n currency: string;\n amount: number;\n };\n paymentHistory: BookingPayment[];\n };\n};\n\nexport type DocumentFormatType =\n (typeof DocumentFormatType)[keyof typeof DocumentFormatType];\nexport type DeliveryMethodType =\n (typeof DeliveryMethodType)[keyof typeof DeliveryMethodType];\n","import type { RqHeader } from '../../types/common';\n\nexport class RequestPayload<T> {\n RqHeader: RqHeader;\n Body: T;\n\n constructor(payload: { RqHeader: RqHeader; Body: T }) {\n Object.assign(this, payload);\n }\n}\n\nexport class WrapRequestDto<T> {\n Request: RequestPayload<T>;\n\n constructor(payload: RequestPayload<T>) {\n this.Request = new RequestPayload(payload);\n }\n}\n","/**\n * Creates a date string with validation using native Date\n * @param date - Date string in YYYY-MM-DD format or Date object\n * @returns string in YYYY-MM-DD format or throws error if invalid\n */\nexport const createDateString = (date: string | Date): string => {\n let dateObj: Date;\n\n if (typeof date === 'string') {\n if (!/^\\d{4}-\\d{2}-\\d{2}$/.test(date)) {\n throw new Error(`Invalid date format. Expected YYYY-MM-DD, got: ${date}`);\n }\n\n try {\n // Parse ISO date string (YYYY-MM-DD)\n dateObj = new Date(date + 'T00:00:00.000Z');\n } catch {\n throw new Error(`Invalid date string: ${date}`);\n }\n } else {\n dateObj = date;\n }\n\n if (isNaN(dateObj.getTime())) {\n throw new Error(`Invalid date value: ${date}`);\n }\n\n // Format to YYYY-MM-DD\n const year = dateObj.getUTCFullYear();\n const month = String(dateObj.getUTCMonth() + 1).padStart(2, '0');\n const day = String(dateObj.getUTCDate()).padStart(2, '0');\n\n return `${year}-${month}-${day}`;\n};\n\n/**\n * Creates a datetime string with validation using native Date\n * @param dateTime - DateTime string in ISO 8601 format or Date object\n * @returns string in ISO 8601 format or throws error if invalid\n */\nexport const createDateTimeString = (dateTime: string | Date): string => {\n let dateObj: Date;\n\n if (typeof dateTime === 'string') {\n if (!/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{3})?Z?$/.test(dateTime)) {\n throw new Error(\n `Invalid datetime format. Expected ISO 8601, got: ${dateTime}`\n );\n }\n\n try {\n dateObj = new Date(dateTime);\n } catch {\n throw new Error(`Invalid datetime string: ${dateTime}`);\n }\n } else {\n dateObj = dateTime;\n }\n\n if (isNaN(dateObj.getTime())) {\n throw new Error(`Invalid datetime value: ${dateTime}`);\n }\n\n // Return ISO string with milliseconds and Z\n return dateObj.toISOString();\n};\n\n/**\n * Creates a time string with validation\n * @param time - Time string in HH:MM:SS format\n * @returns string in HH:MM:SS format or throws error if invalid\n */\nexport const createTimeString = (time: string): string => {\n if (!/^\\d{2}:\\d{2}:\\d{2}$/.test(time)) {\n throw new Error(`Invalid time format. Expected HH:MM:SS, got: ${time}`);\n }\n\n const [hours, minutes, seconds] = time.split(':').map(Number);\n if (\n hours < 0 ||\n hours > 23 ||\n minutes < 0 ||\n minutes > 59 ||\n seconds < 0 ||\n seconds > 59\n ) {\n throw new Error(`Invalid time value: ${time}`);\n }\n\n return time;\n};\n","// ===== CUSTOMER TYPE MAPPERS =====\n\nimport {\n CustomerStatusType,\n CustomerType,\n BookingStatusType,\n CustomerStatusTypeValue,\n CustomerTypeValue,\n BookingStatusTypeValue,\n} from '../validation/api-schemas';\nimport { PrintBookingDocumentRQ } from '../types/interfaces';\n\nexport function mapCustomerTypeToXml(\n type: string\n): 'CUSTOMER' | 'SUPPLIER' | 'VOUCHER' | 'SUPPLIER_VOUCHER' {\n const mapping: Record<\n string,\n 'CUSTOMER' | 'SUPPLIER' | 'VOUCHER' | 'SUPPLIER_VOUCHER'\n > = {\n [CustomerType.CUSTOMER]: 'CUSTOMER',\n [CustomerType.SUPPLIER]: 'SUPPLIER',\n [CustomerType.VOUCHER]: 'VOUCHER',\n [CustomerType.SUPPLIER_VOUCHER]: 'SUPPLIER_VOUCHER',\n };\n return mapping[type] || 'CUSTOMER';\n}\n\nexport function mapCustomerTypeFromXml(type: string): CustomerTypeValue {\n const mapping: Record<string, CustomerTypeValue> = {\n CUSTOMER: CustomerType.CUSTOMER,\n SUPPLIER: CustomerType.SUPPLIER,\n VOUCHER: CustomerType.VOUCHER,\n SUPPLIER_VOUCHER: CustomerType.SUPPLIER_VOUCHER,\n };\n return mapping[type] || CustomerType.CUSTOMER;\n}\n\nexport function mapCustomerStatusToXml(\n status: string\n): 'ENABLED' | 'WARNING' | 'BLACKLISTED' | 'DISABLED' {\n const mapping: Record<\n string,\n 'ENABLED' | 'WARNING' | 'BLACKLISTED' | 'DISABLED'\n > = {\n [CustomerStatusType.ENABLED]: 'ENABLED',\n [CustomerStatusType.WARNING]: 'WARNING',\n [CustomerStatusType.BLACKLISTED]: 'BLACKLISTED',\n [CustomerStatusType.DISABLED]: 'DISABLED',\n };\n return mapping[status] || 'ENABLED';\n}\n\nexport function mapCustomerStatusFromXml(\n status: string\n): CustomerStatusTypeValue {\n const mapping: Record<string, CustomerStatusTypeValue> = {\n ENABLED: CustomerStatusType.ENABLED,\n WARNING: CustomerStatusType.WARNING,\n BLACKLISTED: CustomerStatusType.BLACKLISTED,\n DISABLED: CustomerStatusType.DISABLED,\n };\n return mapping[status] || CustomerStatusType.ENABLED;\n}\n\n// ===== BOOKING STATUS MAPPERS =====\n\nexport function mapBookingStatusToXml(\n status: string\n):\n | 'QUOTATION'\n | 'WORK_IN_PROGRESS'\n | 'CONFIRMED'\n | 'OPTIONED'\n | 'NULLIFIED'\n | 'CANCELED' {\n const mapping: Record<\n string,\n | 'QUOTATION'\n | 'WORK_IN_PROGRESS'\n | 'CONFIRMED'\n | 'OPTIONED'\n | 'NULLIFIED'\n | 'CANCELED'\n > = {\n [BookingStatusType.QUOTATION]: 'QUOTATION',\n [BookingStatusType.WORK_IN_PROGRESS]: 'WORK_IN_PROGRESS',\n [BookingStatusType.CONFIRMED]: 'CONFIRMED',\n [BookingStatusType.OPTIONED]: 'OPTIONED',\n [BookingStatusType.NULLIFIED]: 'NULLIFIED',\n [BookingStatusType.CANCELED]: 'CANCELED',\n };\n return mapping[status] ?? 'QUOTATION';\n}\n\nexport function mapBookingStatusFromXml(\n status: string\n): BookingStatusTypeValue {\n const mapping: Record<string, BookingStatusTypeValue> = {\n QUOTATION: BookingStatusType.QUOTATION,\n WORK_IN_PROGRESS: BookingStatusType.WORK_IN_PROGRESS,\n CONFIRMED: BookingStatusType.CONFIRMED,\n OPTIONED: BookingStatusType.OPTIONED,\n NULLIFIED: BookingStatusType.NULLIFIED,\n CANCELED: BookingStatusType.CANCELED,\n };\n return mapping[status] ?? BookingStatusType.QUOTATION;\n}\n\n// ===== DOCUMENT TYPE MAPPERS =====\n\nexport function mapDocumentTypeToXml(\n type: string\n): PrintBookingDocumentRQ['InfoDocumentsToPrint']['InfoDocumentToPrint'][number]['DocumentType'] {\n const mapping: Record<\n string,\n PrintBookingDocumentRQ['InfoDocumentsToPrint']['InfoDocumentToPrint'][number]['DocumentType']\n > = {\n visa_request: 'VISA_REQUEST',\n travel_information: 'TRAVEL_INFORMATION',\n voucher: 'VOUCHER',\n booking_contract: 'BOOKING_CONTRACT',\n booking_confirmation: 'BOOKING_CONFIRMATION',\n supplier_service_list: 'SUPPLIER_SERVICE_LIST',\n invoice: 'INVOICE',\n proforma_invoice: 'PROFORMA_INVOICE',\n adeguamento: 'ADEGUAMENTO',\n reservation_form: 'RESERVATION_FORM',\n open_xml: 'OPEN_XML',\n sales_invoice: 'SALES_INVOICE',\n ticketing_tmaster: 'TICKETING_TMASTER',\n summary_form: 'SUMMARY_FORM',\n };\n return mapping[type] || 'VOUCHER';\n}\n\n// ===== GENDER MAPPERS =====\n\nexport function mapGenderToXml(gender: string): 'M' | 'F' {\n const mapping: Record<string, 'M' | 'F'> = {\n male: 'M',\n female: 'F',\n };\n return mapping[gender] || 'M';\n}\n","import {\n Customer,\n BookingPassenger,\n BookingService,\n SearchCustomerRequest,\n CreateBookingRequest,\n CancelBookingRequest,\n PrintDocumentRequest,\n AddPaymentRequest,\n BookingStatusType,\n PassengerType,\n GenderType,\n ServiceType,\n ServiceStatusType,\n PassengerTypeValue,\n BookingStatusTypeValue,\n} from '../validation/api-schemas';\nimport { createDateString } from '../utils/date-helpers';\nimport {\n mapCustomerTypeToXml,\n mapCustomerStatusToXml,\n mapBookingStatusToXml,\n mapDocumentTypeToXml,\n mapGenderToXml,\n} from './type-mappers';\nimport {\n MasterRecordDetail,\n PassengerDetail,\n SearchMasterRecordRQ,\n BookFileRQ,\n CancelFileRQ,\n PrintBookingDocumentRQ,\n FilePaymentListRQ,\n ManageMasterRecordRQ,\n ModiFileHeaderRQ,\n ModFileServicesRQ,\n SetStatusRQ,\n SetStatusServiceRQ,\n SelectedServiceDetail,\n BookedServiceDetail,\n} from '../types/interfaces';\nimport { InsertCriteria } from '../types/common';\n\n// ===== AVES XML MAPPERS =====\n\n// Helper: map internal booking status to the subset allowed by BookFileRQ\nconst BOOKING_STATUS_ALLOWED = new Set([\n 'QUOTATION',\n 'WORK_IN_PROGRESS',\n 'CONFIRMED',\n 'OPTIONED',\n 'CANCELED',\n]);\n\nconst BOOKING_STATUS_ALIASES: Record<string, AllowedStatus> = {\n CONFIRM: 'CONFIRMED',\n OPTION: 'OPTIONED',\n REQUEST: 'WORK_IN_PROGRESS',\n NULLIFIED: 'CANCELED',\n};\n\ntype AllowedStatus =\n | 'QUOTATION'\n | 'WORK_IN_PROGRESS'\n | 'CONFIRMED'\n | 'OPTIONED'\n | 'NULLIFIED'\n | 'CANCELED';\n\nfunction normalizeBookingStatus(input: string): AllowedStatus {\n const upper = input.toUpperCase();\n const alias = BOOKING_STATUS_ALIASES[upper];\n if (alias) return alias;\n if (BOOKING_STATUS_ALLOWED.has(upper)) return upper as AllowedStatus;\n return 'QUOTATION';\n}\n\nfunction mapBookingFileStatusForRQ(\n status: BookingStatusTypeValue | string\n): AllowedStatus {\n const raw =\n typeof status === 'string' ? status : mapBookingStatusToXml(status);\n return normalizeBookingStatus(raw);\n}\n\nexport function mapPassengerFromXml(xml: PassengerDetail): BookingPassenger {\n const nameParts = (xml.Name || '').split(' ');\n const lastName = nameParts.pop() || '';\n const firstName = nameParts.join(' ') || xml.Name;\n\n const typeMap: Record<string, PassengerTypeValue> = {\n AD: PassengerType.ADULT,\n CH: PassengerType.CHILD,\n IN: PassengerType.INFANT,\n OV: PassengerType.SENIOR,\n };\n\n return {\n id: xml['@RPH'],\n type: typeMap[xml.CategoryCode] || PassengerType.ADULT,\n title: undefined,\n firstName,\n lastName,\n dateOfBirth: xml.BirthDate ? createDateString(xml.BirthDate) : undefined,\n gender:\n xml.Sex === 'M'\n ? GenderType.MALE\n : xml.Sex === 'F'\n ? GenderType.FEMALE\n : undefined,\n nationality: xml.NationCode || xml.CitizenshipCode,\n passport: xml.IDDocInfo\n ? {\n number: xml.IDDocInfo['@IDCode'] || '',\n expiryDate: createDateString(xml.IDDocInfo['@IDExpireDate'] || ''),\n issuingCountry: '',\n }\n : undefined,\n address: undefined,\n contact:\n xml.eMail || xml.PhoneNumber\n ? {\n email: xml.eMail ? { address: xml.eMail } : undefined,\n phone: xml.PhoneNumber ? { number: xml.PhoneNumber } : undefined,\n }\n : undefined,\n };\n}\n\n// ===== SERVICE MAPPERS =====\n\nexport function mapServiceFromXml(xml: BookedServiceDetail): BookingService {\n return {\n id: xml['@ServiceCode'],\n type: ServiceType.HOTEL, // Default, should be determined from TOServiceType\n status: ServiceStatusType.PENDING,\n code: xml['@ServiceCode'],\n name: xml.FirstDescription,\n description: xml.SecondDescription,\n startDate: xml.StartDate ? createDateString(xml.StartDate) : undefined,\n endDate: xml.EndDate ? createDateString(xml.EndDate) : undefined,\n price: xml.ServiceTotalAmountDetail?.ServiceTotalPrice\n ? {\n currency: 'EUR',\n amount: parseFloat(xml.ServiceTotalAmountDetail.ServiceTotalPrice),\n }\n : undefined,\n };\n}\n\n// ===== REQUEST MAPPERS =====\n\nconst buildSearchMasterRecordRQ = (\n request: SearchCustomerRequest,\n data: SearchMasterRecordRQ\n): SearchMasterRecordRQ => {\n switch (request.type) {\n case 'code':\n data.RecordCode = request.code;\n break;\n case 'name':\n data.Name = request.name;\n if (request.city) {\n data.City = request.city;\n }\n break;\n case 'vat_code':\n data.VatCode = request.vatCode;\n if (request.phoneNumber) {\n data.PhoneNumber = request.phoneNumber;\n }\n break;\n case 'zone':\n data.ZipCode = request.zipCode;\n if (request.city) {\n data.City = request.city;\n }\n if (request.countyCode) {\n data.CountyCode = request.countyCode;\n }\n break;\n case 'category':\n data.CategoryCode = request.categoryCode;\n break;\n case 'email':\n data.Email = request.email;\n break;\n case 'last_mod_date':\n data.LastModificationDate = {\n '@MinDate': request.from,\n '@MaxDate': request.to,\n };\n break;\n case 'search_field':\n data.SearchFieldValue = request.searchField;\n break;\n case 'external_ref_code':\n data.SearchFieldValue = request.externalRefCode;\n break;\n }\n return data;\n};\n\nexport function mapSearchCustomerToXml(\n request: SearchCustomerRequest\n): SearchMasterRecordRQ {\n const result: SearchMasterRecordRQ = {\n SearchType:\n request.type.toUpperCase() as SearchMasterRecordRQ['SearchType'],\n };\n\n return buildSearchMasterRecordRQ(request, result);\n}\n\nexport function mapCustomerToXml(data: Customer): MasterRecordDetail {\n const fullName = data.personalInfo\n ? `${data.personalInfo.firstName} ${data.personalInfo.lastName}`.trim()\n : data.id;\n\n return {\n '@RecordCode': data.id,\n RecordType: mapCustomerTypeToXml(data.type),\n Name: fullName,\n LanguageCode: data.preferences?.language || '01',\n\n // Personal Info\n Moniker: data.personalInfo?.title,\n Gender: data.personalInfo?.gender\n ? mapGenderToXml(data.personalInfo?.gender)\n : undefined,\n BirthDate: data.personalInfo?.dateOfBirth,\n CitizenshipCode: data.personalInfo?.nationality,\n\n // Contact Info\n Email: data.contact?.email?.address,\n FirstPhoneNumber: data.contact?.phone?.number,\n MobilePhone: data.contact?.phone?.number,\n\n // Address\n Address: data.address?.street,\n CityName: data.address?.city,\n StateCode: data.address?.country,\n ZipCode: data.address?.postalCode,\n\n // Business Info\n FiscalCode: data.businessInfo?.taxId,\n VatCode: data.businessInfo?.taxId,\n\n // Status\n RecordStatus: mapCustomerStatusToXml(data.status),\n\n // Preferences\n FinancialDetail: data.preferences?.currency\n ? {\n '@CurrencyCode': data.preferences.currency,\n }\n : undefined,\n };\n}\n\nexport function mapCreateBookingToXml(data: CreateBookingRequest): BookFileRQ {\n const customerDetail: MasterRecordDetail = data.customerDetails\n ? mapCustomerToXml(data.customerDetails)\n : ({\n '@RecordCode': data.customerId || '',\n RecordType: 'CUSTOMER',\n Name: 'Customer',\n LanguageCode: '01',\n } as MasterRecordDetail);\n\n return {\n CreateDate: data.createDate,\n BookingFileRefCode: data.bookingFileRefCode,\n TravelAgentCode: data.travelAgentCode,\n ClerkName: data.clerkName,\n CustomerDetail: customerDetail,\n CurrencyCode: data.currency,\n MarkupCode: data.markupCode,\n BookingFileStatus: data.bookingFileStatus\n ? {\n '@Value': mapBookingFileStatusForRQ(data.bookingFileStatus.value),\n ...(data.bookingFileStatus.expiredDate && {\n '@ExpiredDate': data.bookingFileStatus.expiredDate,\n }),\n }\n : {\n '@Value': 'QUOTATION',\n },\n StatisticCodes: data.statisticCodes\n ? {\n '@sCode1': data.statisticCodes.code1,\n '@sCode2': data.statisticCodes.code2,\n '@sCode3': data.statisticCodes.code3,\n '@sCode4': data.statisticCodes.code4,\n '@sCode5': data.statisticCodes.code5,\n '@sCode6': data.statisticCodes.code6,\n }\n : undefined,\n Destination: data.destination\n ? {\n '@Code': data.destination.code,\n '@IataCode': data.destination.iataCode,\n '@NationCode': data.destination.nationCode,\n }\n : undefined,\n BookingFileDescription: data.description,\n StartDate: data.startDate,\n EndDate: data.endDate,\n EarlyBookingDate: data.earlyBookingDate,\n CupCode: data.cupCode,\n CigCode: data.cigCode,\n CustomerPromoterCode: data.customerPromoterCode,\n BillingReferenceCode: data.billingReferenceCode,\n PaymentReferenceCode: data.paymentReferenceCode,\n BookingFileDocument:\n data.printDocument !== undefined ||\n data.sendDocumentViaEmail !== undefined\n ? {\n '@PrintDoc': data.printDocument || false,\n '@SendDocViaEmail': data.sendDocumentViaEmail || false,\n }\n : undefined,\n DeadlineList: data.deadlines\n ? {\n DeadlineDetail: data.deadlines.map((d) => ({\n '@DeadlineCode': d.code,\n '@Description': d.description,\n '@ExpireDate': d.expireDate,\n })),\n }\n : undefined,\n BookingFinancialInfo: data.bookingFinancialInfo\n ? {\n '@Customer_PaymentType':\n data.bookingFinancialInfo.customerPaymentType || 'NOT_SET',\n '@Customer_SpecPaymentTypeCode':\n data.bookingFinancialInfo.customerSpecPaymentTypeCode,\n }\n : undefined,\n GroupingPaxPolicy: data.groupingPaxPolicy,\n GroupBookingFile: data.groupBookingFile,\n TypeDownloadFile: data.typeDownloadFile,\n SetBookingFileCodeFromStartDate: data.setBookingFileCodeFromStartDate,\n PassengerList: {\n PassengerDetail: data.passengers.map((p, index) =>\n mapPassengerToAvesXml(p, index + 1)\n ),\n },\n SelectedServiceList: {\n SelectedServiceDetail: data.services.map((s, index) =>\n mapServiceToAvesXml(s, index + 1)\n ),\n },\n };\n}\n\n// Helper function to map API passenger to Aves PassengerDetail\nfunction mapPassengerToAvesXml(\n passenger: BookingPassenger,\n index: number\n): PassengerDetail {\n return {\n '@RPH': String(index).padStart(3, '0'), // 001, 002, 003...\n Name: `${passenger.firstName} ${passenger.lastName}`,\n CategoryCode:\n passenger.type === PassengerType.ADULT\n ? 'AD'\n : passenger.type === PassengerType.CHILD\n ? 'CH'\n : passenger.type === PassengerType.INFANT\n ? 'IN'\n : 'OV',\n Sex: passenger.gender === GenderType.MALE ? 'M' : 'F',\n BirthDate: passenger.dateOfBirth,\n eMail: passenger.contact?.email?.address,\n PhoneNumber: passenger.contact?.phone?.number,\n };\n}\n\n// Helper function to map API service to Aves SelectedServiceDetail\nfunction mapServiceToAvesXml(\n service: BookingService,\n sessionNumber: number\n): SelectedServiceDetail {\n return {\n '@sCode': service.id,\n AvesServiceType: 'TOP', // Default - should be determined from service type\n StartDate: service.startDate || new Date().toISOString(),\n EndDate: service.endDate || new Date().toISOString(),\n Qty: 1, // Default quantity\n Pax: 1, // Default passengers\n AvesSession: sessionNumber,\n };\n}\n\nexport function mapCancelBookingToXml(\n data: CancelBookingRequest\n): CancelFileRQ {\n return {\n BookingFileCode: data.bookingId,\n CustomerRecordCode: data.customerId || '', // Required field\n };\n}\n\nexport function mapPrintDocumentToXml(\n data: PrintDocumentRequest\n): PrintBookingDocumentRQ {\n return {\n RefMasterRecordCode: data.customerId || '', // Required\n LanguageCode: data.language || '01', // Required\n BookingFileCode: data.bookingId, // Required\n InfoDocumentsToPrint: {\n InfoDocumentToPrint: [\n {\n DocumentType: mapDocumentTypeToXml(data.documentType),\n },\n ],\n },\n GetDocumentContent: data.deliveryMethod?.type === 'download',\n SendDocumentViaEmail: data.deliveryMethod?.type === 'email',\n };\n}\n\nexport function mapAddPaymentToXml(data: AddPaymentRequest): FilePaymentListRQ {\n let operationType: FilePaymentListRQ['OperationType'] =\n 'AbsoluteAmountsInsertion';\n if (data.operationType === 'final') {\n operationType = 'FinalAmountToAchieve';\n } else if (data.operationType === 'final_no_controls') {\n operationType = 'FinalAmountToAchieveWithoutControls';\n }\n\n return {\n BookingFileCode: data.bookingId,\n BookingFileRefCode: data.bookingRefCode,\n EnableMultiplePayments: data.enableMultiple ?? data.payments.length > 1,\n OperationType: operationType,\n FilePaymentList: {\n FilePaymentDetail: data.payments.map((payment) => ({\n '@PaymentDate': new Date().toISOString(),\n '@Amount': String(payment.amount?.amount || 0),\n '@PaymentType': mapPaymentTypeToAvesXml(payment.type),\n })),\n },\n };\n}\n\n// Helper to map payment type to Aves format\nfunction mapPaymentTypeToAvesXml(\n type: string\n):\n | 'C'\n | 'B'\n | 'D'\n | 'T'\n | 'P'\n | 'R'\n | 'A'\n | 'H'\n | 'I'\n | 'J'\n | 'K'\n | 'L'\n | 'M'\n | 'N'\n | 'O'\n | 'Q'\n | 'S'\n | 'U'\n | 'V' {\n const typeMap: Record<string, string> = {\n cash: 'C',\n bank: 'B',\n bank2: 'D',\n bank3: 'T',\n atm: 'P',\n creditCard: 'R',\n credit_card: 'R',\n rebate: 'A',\n };\n return (typeMap[type] || 'C') as any;\n}\n\n// ===== MASTER RECORD MANAGEMENT MAPPERS =====\n\nexport function mapCreateCustomerToXml(\n customer: Customer\n): ManageMasterRecordRQ {\n const masterRecord = mapCustomerToXml(customer);\n masterRecord['@InsertCriteria'] = 'S'; // S = Insert always new record\n return {\n MasterRecordDetail: masterRecord,\n };\n}\n\nexport function mapUpdateCustomerToXml(\n customer: Customer\n): ManageMasterRecordRQ {\n const masterRecord = mapCustomerToXml(customer);\n masterRecord['@InsertCriteria'] = 'T'; // T = If record exists update all fields\n return {\n MasterRecordDetail: masterRecord,\n };\n}\n\nexport function mapUpsertCustomerToXml(\n customer: Customer\n): ManageMasterRecordRQ {\n const masterRecord = mapCustomerToXml(customer);\n masterRecord['@InsertCriteria'] = 'M'; // M = If record exists update only secondary fields\n return {\n MasterRecordDetail: masterRecord,\n };\n}\n\nexport function mapUpdateBookingHeaderToXml(\n customerRecordCode: string,\n bookingFileCode: string,\n bookingFileStartDate: string,\n updates?: {\n newCustomerRecordCode?: string;\n passengers?: BookingPassenger[];\n notes?: string;\n }\n): ModiFileHeaderRQ {\n return {\n BookingFileCode: bookingFileCode,\n BookingFileStartDate: bookingFileStartDate,\n CustomerRecordCode: customerRecordCode,\n NewCustomerRecordCode: updates?.newCustomerRecordCode,\n BookingNote: updates?.notes,\n PassengerList: updates?.passengers\n ? {\n PassengerDetail: updates.passengers.map((p, index) =>\n mapPassengerToAvesXml(p, index + 1)\n ),\n }\n : undefined,\n };\n}\n\nexport function mapUpdateBookingServicesToXml(\n customerRecordCode: string,\n bookingFileCode: string,\n services: BookingService[]\n): ModFileServicesRQ {\n return {\n CustomerRecordCode: customerRecordCode,\n BookingFileCode: bookingFileCode,\n SelectedServiceList: {\n SelectedServiceDetail: services.map((s, index) =>\n mapServiceToAvesXml(s, index + 1)\n ),\n },\n };\n}\n\nexport function mapSetBookingStatusToXml(\n customerRecordCode: string,\n bookingFileCode: string,\n status: BookingStatusTypeValue,\n options?: {\n expiredDate?: string;\n optionedFileExpireDatePolicy?:\n | 'NOT_SET'\n | 'CONSIDER_HOLIDAY'\n | 'CONSIDER_HOLIDAY_AND_SATURDAY';\n backOfficeRequest?: boolean;\n printDoc?: boolean;\n sendDocViaEmail?: boolean;\n applyPenalty?: boolean;\n penaltyCode?: string;\n simulateCancelAndGetPenalty?: boolean;\n }\n): SetStatusRQ {\n return {\n CustomerRecordCode: customerRecordCode,\n BookingFileCode: bookingFileCode,\n FileStatus: {\n '@Value': mapBookingStatusToXml(status),\n ...(options?.expiredDate && { '@ExpiredDate': options.expiredDate }),\n ...(options?.optionedFileExpireDatePolicy && {\n '@OptionedFileExpireDatePolicy': options.optionedFileExpireDatePolicy,\n }),\n },\n ...(options?.backOfficeRequest !== undefined && {\n BackOfficeRequest: options.backOfficeRequest,\n }),\n ...(options?.printDoc !== undefined ||\n options?.sendDocViaEmail !== undefined\n ? {\n BookingFileDocument: {\n '@PrintDoc': options.printDoc || false,\n '@SendDocViaEmail': options.sendDocViaEmail || false,\n },\n }\n : {}),\n ...(options?.applyPenalty !== undefined && {\n Penalty: {\n '@Apply': options.applyPenalty,\n ...(options.penaltyCode && { '@SpecificCode': options.penaltyCode }),\n },\n }),\n ...(options?.simulateCancelAndGetPenalty !== undefined && {\n SimulateCancelAndGetPenaltyAmount: options.simulateCancelAndGetPenalty,\n }),\n };\n}\n\nexport function mapSetBookingServiceStatusToXml(\n customerRecordCode: string,\n bookingFileCode: string,\n serviceRef: string,\n statusDate?: string\n): SetStatusServiceRQ {\n return {\n CustomerRecordCode: customerRecordCode,\n BookingFileCode: bookingFileCode,\n BookingServiceRef: serviceRef,\n BookingFileServiceStatus: 'NULLIFIED',\n ...(statusDate && { BookingFileServiceStatusDate: statusDate }),\n };\n}\n","import {\n BookingResponse,\n CustomerSearchResult,\n DocumentPrintResult,\n OperationResponse,\n Customer,\n CancelResponseData,\n PaymentResponseData,\n GenderType,\n CustomerStatusType,\n PricingItemType,\n} from '../validation/api-schemas';\nimport { createDateTimeString, createDateString } from '../utils/date-helpers';\nimport {\n mapCustomerTypeFromXml,\n mapCustomerStatusFromXml,\n mapBookingStatusFromXml,\n} from './type-mappers';\nimport {\n BookingFile,\n SearchMasterRecordRS,\n PrintBookingDocumentRS,\n BookingFileRS,\n CancelFileRS,\n FilePaymentListRS,\n MasterRecordDetail,\n CustomerRecordRS,\n} from '../types/interfaces';\nimport { mapPassengerFromXml, mapServiceFromXml } from './request-mappers';\n\n// ===== CUSTOMER MAPPERS =====\n\nexport function mapCustomerFromXml(xml: MasterRecordDetail): Customer {\n const nameParts = (xml.Name ?? '').split(' ');\n const lastName = nameParts.pop() ?? '';\n const firstName = nameParts.join(' ') ?? xml.Name;\n\n return {\n id: xml['@RecordCode'],\n type: mapCustomerTypeFromXml(xml.RecordType),\n status: mapCustomerStatusFromXml(xml.RecordStatus ?? ''),\n personalInfo: {\n title: xml.Moniker,\n firstName,\n lastName,\n dateOfBirth: xml.BirthDate ? createDateString(xml.BirthDate) : undefined,\n gender:\n xml.Gender === 'M'\n ? GenderType.MALE\n : xml.Gender === 'F'\n ? GenderType.FEMALE\n : undefined,\n nationality: xml.CitizenshipCode,\n birthCity: xml.BirthCity,\n birthCounty: xml.BirthCounty,\n },\n contact: {\n email: xml.Email ? { address: xml.Email } : undefined,\n phone: xml.FirstPhoneNumber\n ? { number: xml.FirstPhoneNumber }\n : undefined,\n mobile: xml.MobilePhone ? { number: xml.MobilePhone } : undefined,\n fax: xml.FaxNumber ? { number: xml.FaxNumber } : undefined,\n webUrl: xml.WebUrl,\n },\n address: xml.Address\n ? {\n street: xml.Address,\n city: xml.CityName,\n state: xml.CountyCode,\n postalCode: xml.ZipCode,\n country: xml.StateCode,\n }\n : undefined,\n businessInfo:\n xml.VatCode || xml.FiscalCode\n ? {\n companyName: undefined,\n taxId: xml.VatCode || xml.FiscalCode,\n licenseNumber: undefined,\n vatCode: xml.VatCode,\n fiscalCode: xml.FiscalCode,\n priceListCode: xml.PriceListCode,\n }\n : undefined,\n preferences: {\n language: xml.LanguageCode,\n currency: xml.FinancialDetail?.['@CurrencyCode'],\n communicationMethod: undefined,\n },\n meta: {\n createdDate: xml.CreatedDate,\n modifiedDate: xml.ModifiedDate,\n loginType: xml.LoginType,\n thirdPartRecordCode: xml.ThirdPartRecordCode,\n searchField: xml.SearchField,\n extraInfo: xml.ExtraInfo,\n },\n codes: {\n zoneCode: xml.ZoneCode,\n areaCode: xml.AreaCode,\n branchOfficeCode: xml.BranchOfficeCode,\n categoryCode: xml.CategoryCode,\n activityCode: xml.ActivityCode,\n promoterCode: xml.PromoterCode,\n networkCode: xml.NetworkCode,\n },\n };\n}\n\nexport function mapCustomerResponseFromXml(\n xml: CustomerRecordRS | undefined\n): OperationResponse<Customer> {\n if (!xml) {\n return {\n success: false,\n message: 'Invalid XML response',\n data: undefined,\n };\n }\n\n if (!xml.MasterRecordDetail) {\n return {\n success: false,\n message: 'No master record in response',\n data: undefined,\n };\n }\n\n const customer = mapCustomerFromXml(xml.MasterRecordDetail);\n return {\n success: true,\n message: 'Operation successful',\n data: customer,\n };\n}\n\n// ===== BOOKING RESPONSE MAPPERS =====\n\nexport function mapBookingFromXml(xml: BookingFile): BookingResponse {\n return {\n id: xml.BookingFileCode,\n status: mapBookingStatusFromXml(xml.BookingFileStatus['@Value']),\n createdAt: createDateTimeString(xml.CreationDate),\n updatedAt: createDateTimeString(xml.CreationDate), // Aves doesn't have LastModified in same format\n description: xml.Description,\n nation: xml.Nation,\n destination: xml.Destination,\n firstConfirmationDate: xml.FirstConfirmationDate\n ? createDateTimeString(xml.FirstConfirmationDate)\n : undefined,\n paxNumber: xml.PaxNumber,\n reference: xml.Reference,\n clerkName: xml.ClerkName,\n customer: mapCustomerFromXml({\n '@RecordCode': xml.CustomerRecordCode,\n RecordType: 'CUSTOMER',\n Name: xml.CustomerName,\n LanguageCode: '01',\n Email: xml.CustomerEmail,\n }),\n passengers: xml.PassengerList.PassengerDetail.map(mapPassengerFromXml),\n services:\n xml.BookedServiceList?.BookedServiceDetail.map(mapServiceFromXml) || [],\n pricing: {\n totalAmount: {\n currency: xml.TotalAmountDetail?.CurrencyCode || 'EUR',\n amount: parseFloat(\n xml.TotalAmountDetail?.TotalAmountAfterDiscount || '0'\n ),\n },\n breakdowns: undefined,\n totals: xml.TotalAmountDetail\n ? {\n beforeDiscount: parseFloat(\n xml.TotalAmountDetail.TotalAmountBeforeDiscount || '0'\n ),\n afterDiscount: parseFloat(\n xml.TotalAmountDetail.TotalAmountAfterDiscount || '0'\n ),\n discount: parseFloat(xml.TotalAmountDetail.TotalDiscount || '0'),\n withoutVat: parseFloat(\n xml.TotalAmountDetail.TotalAmountWithoutVat || '0'\n ),\n dueAmount: parseFloat(xml.TotalAmountDetail.DueAmount || '0'),\n paidAmount: parseFloat(xml.TotalAmountDetail.PaiedAmount || '0'),\n balance: parseFloat(xml.TotalAmountDetail.Balance || '0'),\n }\n : undefined,\n },\n };\n}\n\nexport function mapBookingResponseFromXml(\n xml: BookingFileRS | undefined\n): OperationResponse<BookingResponse> {\n if (!xml) {\n return {\n success: false,\n message: 'Invalid XML response',\n data: undefined,\n };\n }\n\n const success = xml.OperationResult['@Status'] === 'SUCCESS';\n\n if (!success || !xml.BookingFile) {\n return {\n success,\n message: xml?.OperationResult['@Message'],\n data: undefined,\n };\n }\n\n const booking = mapBookingFromXml(xml.BookingFile);\n return {\n success,\n message: xml.OperationResult['@Message'],\n data: booking,\n };\n}\n\n// ===== SEARCH RESPONSE MAPPERS =====\n\nexport function mapSearchResponseFromXml(\n xml: SearchMasterRecordRS | undefined,\n requestPagination?: { pages: number; page: number }\n): CustomerSearchResult {\n const defaultPages = 50;\n const defaultPage = 1;\n\n const pageSize = requestPagination?.pages || defaultPages;\n const page = requestPagination?.page || defaultPage;\n\n if (!xml || !xml.MasterRecordList) {\n return {\n customers: [],\n pagination: {\n page,\n pages: 1,\n totalItems: 0,\n hasMore: false,\n },\n };\n }\n\n const customers =\n xml.MasterRecordList.MasterRecordDetail.map(mapCustomerFromXml);\n const totalItems = customers.length;\n const hasMore = totalItems === pageSize;\n const pages = hasMore ? page + 1 : page;\n\n return {\n customers,\n pagination: {\n page,\n pages,\n totalItems,\n hasMore,\n },\n };\n}\n\n// ===== DOCUMENT RESPONSE MAPPERS =====\n\nexport function mapDocumentResponseFromXml(\n xml: PrintBookingDocumentRS | undefined\n): OperationResponse<DocumentPrintResult> {\n if (!xml) {\n return {\n success: false,\n message: 'Invalid XML response',\n data: undefined,\n };\n }\n\n const documents =\n xml.BaseDocumentAndAttachments?.SingleBaseDocumentOrAttachment.map(\n (doc) => ({\n fileName: doc.DocFileName,\n content: doc.Base64DocContent,\n contentSize: doc.Base64DocContent?.length || 0,\n })\n ) || [];\n\n const additionalDocuments = xml.AdditionalDocuments?.AdditionalDocument.map(\n (additionalDoc) => ({\n emailRecipient: additionalDoc.EmailRecipient,\n documents:\n additionalDoc.BaseDocumentAndAttachments?.SingleBaseDocumentOrAttachment.map(\n (doc) => ({\n fileName: doc.DocFileName,\n content: doc.Base64DocContent,\n contentSize: doc.Base64DocContent?.length || 0,\n })\n ) || [],\n })\n );\n\n const result: DocumentPrintResult = {\n emailRecipient: xml.EmailRecipient,\n documents,\n additionalDocuments,\n };\n\n return {\n success: true,\n message: 'Documents generated successfully',\n data: result,\n };\n}\n\n// ===== CANCEL RESPONSE MAPPERS =====\n\nexport function mapCancelResponseFromXml(\n xml: CancelFileRS | undefined\n): OperationResponse<CancelResponseData> {\n if (!xml) {\n return {\n success: false,\n message: 'Invalid XML response',\n data: undefined,\n };\n }\n\n const success = xml.OperationResult['@Status'] === 'SUCCESS';\n\n if (!success) {\n return {\n success,\n message: xml?.OperationResult['@Message'],\n data: undefined,\n };\n }\n\n return {\n success,\n message: xml.OperationResult['@Message'],\n data: {\n refundInfo: xml.OperationResult.RefundInfo\n ? {\n refundAmount: xml.OperationResult.RefundInfo['@RefundAmount'],\n currency: xml.OperationResult.RefundInfo['@Currency'],\n refundMethod: xml.OperationResult.RefundInfo['@RefundMethod'],\n processingTime: xml.OperationResult.RefundInfo['@ProcessingTime'],\n }\n : undefined,\n },\n };\n}\n\n// ===== PAYMENT RESPONSE MAPPERS =====\n\nexport function mapPaymentResponseFromXml(\n xml: FilePaymentListRS | undefined\n): OperationResponse<PaymentResponseData> {\n if (!xml) {\n return {\n success: false,\n message: 'Invalid XML response',\n data: undefined,\n };\n }\n\n return {\n success: true,\n message: 'Payment registered successfully',\n data: {\n booking: undefined as any, // Simplified response structure\n paymentSummary: {\n totalPaid: {\n currency: 'EUR',\n amount: 0,\n },\n outstandingAmount: {\n currency: 'EUR',\n amount: 0,\n },\n paymentHistory: [],\n },\n },\n };\n}\n","import axios, { AxiosInstance, AxiosRequestConfig } from 'axios';\nimport { XMLBuilder, XMLParser } from 'fast-xml-parser';\nimport { Inject, Injectable, Scope } from '@nestjs/common';\nimport type { AvesSdkConfig } from '../types/common';\nimport { AVES_SDK_CONFIG } from '../tokens';\n\nexport interface IXmlHttpClient {\n postXml<TRequest extends object, TResponse = unknown>(\n endpoint: string,\n rootElementName: string,\n request: TRequest,\n config?: AxiosRequestConfig\n ): Promise<TResponse>;\n}\n\n@Injectable({ scope: Scope.DEFAULT })\nexport class XmlHttpClient implements IXmlHttpClient {\n private readonly httpClient: AxiosInstance;\n private readonly xmlBuilder: XMLBuilder;\n private readonly xmlParser: XMLParser;\n\n constructor(@Inject(AVES_SDK_CONFIG) private readonly config: AvesSdkConfig) {\n this.httpClient = axios.create({\n baseURL: config.baseUrl,\n timeout: typeof config.timeout === 'number' ? config.timeout : 30000,\n headers: {\n 'Content-Type': 'application/xml',\n Accept: 'application/xml, text/xml, */*;q=0.1',\n },\n transitional: { clarifyTimeoutError: true },\n validateStatus: (s) => s >= 200 && s < 300,\n });\n\n this.xmlBuilder = new XMLBuilder({\n attributeNamePrefix: '@',\n ignoreAttributes: false,\n suppressEmptyNode: true,\n format: process.env.NODE_ENV?.toLowerCase() === 'development', // only in development mode\n });\n\n this.xmlParser = new XMLParser({\n attributeNamePrefix: '@',\n ignoreAttributes: false,\n parseAttributeValue: false,\n trimValues: true,\n isArray: (name) => {\n const arrayNames = [\n 'Field',\n 'Item',\n 'Service',\n 'Passenger',\n 'Payment',\n 'MasterRecord',\n 'Request',\n 'Notes',\n 'ServiceID',\n ];\n return arrayNames.includes(name);\n },\n });\n }\n\n public async postXml<TRequest extends object, TResponse = unknown>(\n endpoint: string,\n rootElementName: string,\n request: TRequest,\n config?: AxiosRequestConfig\n ): Promise<TResponse> {\n const xmlPayload = this.xmlBuilder.build({ [rootElementName]: request });\n const response = await this.httpClient.post(endpoint, xmlPayload, config);\n const data = this.xmlParser.parse(response.data);\n return data;\n }\n}\n","import { registerAs } from '@nestjs/config';\n\nexport const AVES_CONFIG_NAMESPACE = 'aves';\n\nexport interface AvesEnvConfig {\n AVES_BASE_URL: string;\n AVES_HOST_ID: string;\n AVES_XTOKEN: string;\n AVES_LANGUAGE_CODE?: string;\n AVES_TIMEOUT?: string;\n}\n\nexport const avesConfig = registerAs(AVES_CONFIG_NAMESPACE, () => ({\n baseUrl: process.env.AVES_BASE_URL ?? '',\n hostId: process.env.AVES_HOST_ID ?? '',\n xtoken: process.env.AVES_XTOKEN ?? '',\n languageCode: process.env.AVES_LANGUAGE_CODE,\n timeout: process.env.AVES_TIMEOUT\n ? Number(process.env.AVES_TIMEOUT)\n : undefined,\n}));\n\nexport type AvesRegisteredConfig = ReturnType<typeof avesConfig>;\n","import { z } from 'zod';\n\n// ===== ZOD VALIDATION SCHEMAS =====\n\nexport const LanguageCodeValidation = z.enum(['01', '02']);\n\nexport const configValidationSchema = z.object({\n baseUrl: z.url(),\n hostId: z.string().length(6),\n xtoken: z.string(),\n languageCode: LanguageCodeValidation.optional(),\n timeout: z.number().optional(),\n});\n\nexport const AddressValidation = z.object({\n '@Type': z.enum(['HOME', 'WORK', 'BILLING', 'DELIVERY']).optional(),\n Street: z.string().max(100).optional(),\n City: z.string().max(50).optional(),\n State: z.string().max(50).optional(),\n PostalCode: z.string().max(20).optional(),\n Country: z.string().max(50).optional(),\n});\n\nexport const ContactInfoValidation = z.object({\n Phone: z\n .object({\n '@Type': z.enum(['HOME', 'WORK', 'MOBILE', 'FAX']).optional(),\n '@Number': z.string(),\n })\n .optional(),\n Email: z\n .object({\n '@Type': z.enum(['HOME', 'WORK']).optional(),\n '@Address': z.string(),\n })\n .optional(),\n});\n\nexport const PassengerValidation = z.object({\n '@PassengerID': z.string().min(1),\n '@Type': z.enum(['ADT', 'CHD', 'INF']),\n '@Title': z.enum(['MR', 'MRS', 'MS', 'DR', 'PROF']).optional(),\n FirstName: z.string().min(1).max(50),\n LastName: z.string().min(1).max(50),\n DateOfBirth: z.date().optional(),\n Gender: z.enum(['M', 'F']).optional(),\n Nationality: z.string().max(3).optional(),\n Address: AddressValidation.optional(),\n ContactInfo: ContactInfoValidation.optional(),\n});\n\nexport const ServiceValidation = z.object({\n '@ServiceID': z.string().min(1),\n '@Type': z.enum(['FLIGHT', 'HOTEL', 'CAR', 'TRANSFER', 'INSURANCE']),\n '@Status': z.enum(['CONFIRMED', 'PENDING', 'CANCELLED']),\n ServiceDetails: z.object({\n Code: z.string().optional(),\n Name: z.string().optional(),\n Description: z.string().optional(),\n StartDate: z.string().optional(),\n EndDate: z.string().optional(),\n Price: z\n .object({\n '@Currency': z.string(),\n '@Amount': z.number(),\n })\n .optional(),\n }),\n});\n\nexport const PaymentValidation = z.object({\n '@PaymentID': z.string().min(1),\n '@Type': z.enum(['CREDIT_CARD', 'DEBIT_CARD', 'BANK_TRANSFER', 'CASH']),\n '@Status': z.enum(['PENDING', 'CONFIRMED', 'FAILED']),\n Amount: z.object({\n '@Currency': z.string(),\n '@Amount': z.number(),\n }),\n PaymentDetails: z\n .object({\n CardNumber: z.string().optional(),\n ExpiryDate: z.string().optional(),\n CardHolderName: z.string().optional(),\n })\n .optional(),\n});\n\nexport const SearchMasterRecordRQValidation = z.object({\n SearchCriteria: z.object({\n MasterRecordType: z.enum(['CUSTOMER', 'AGENT', 'SUPPLIER']),\n SearchFields: z.object({\n Field: z.array(\n z.object({\n '@Name': z.string(),\n '@Value': z.string(),\n '@Operator': z\n .enum(['EQUALS', 'CONTAINS', 'STARTS_WITH', 'ENDS_WITH'])\n .optional(),\n })\n ),\n }),\n Pagination: z\n .object({\n '@PageSize': z.number(),\n '@PageNumber': z.number(),\n })\n .optional(),\n }),\n});\n\nexport const BookFileRQValidation = z.object({\n BookingDetails: z.object({\n '@BookingType': z.enum(['INDIVIDUAL', 'GROUP', 'CORPORATE']),\n '@Priority': z.enum(['LOW', 'NORMAL', 'HIGH', 'URGENT']),\n CustomerInfo: z.object({\n '@CustomerID': z.string().optional(),\n CustomerDetails: z.any().optional(), // MasterRecord validation would go here\n }),\n PassengerList: z.object({\n Passenger: z.array(PassengerValidation),\n }),\n SelectedServiceList: z.object({\n Service: z.array(ServiceValidation),\n }),\n SpecialRequests: z\n .object({\n Request: z.array(\n z.object({\n '@Type': z.enum(['MEAL', 'SEAT', 'WHEELCHAIR', 'OTHER']),\n '@Description': z.string(),\n })\n ),\n })\n .optional(),\n }),\n});\n\nexport const CancelFileRQValidation = z.object({\n '@BookingFileID': z.string().min(1),\n CancellationDetails: z.object({\n '@Reason': z.enum(['CUSTOMER_REQUEST', 'NO_SHOW', 'OPERATIONAL', 'OTHER']),\n '@Description': z.string().optional(),\n RefundRequest: z\n .object({\n '@Amount': z.number(),\n '@Currency': z.string(),\n '@Method': z.enum(['ORIGINAL_PAYMENT', 'CREDIT', 'CASH']),\n })\n .optional(),\n }),\n});\n\nexport const PrintBookingDocumentRQValidation = z.object({\n '@BookingFileID': z.string().min(1),\n DocumentRequest: z.object({\n '@DocumentType': z.enum([\n 'CONFIRMATION',\n 'INVOICE',\n 'VOUCHER',\n 'TICKET',\n 'ALL',\n ]),\n '@Format': z.enum(['PDF', 'HTML', 'XML']),\n '@Language': z.string().optional(),\n DeliveryMethod: z\n .object({\n '@Type': z.enum(['EMAIL', 'SMS', 'DOWNLOAD']),\n '@Address': z.string().optional(),\n })\n .optional(),\n }),\n});\n\n// ===== TYPE EXPORTS =====\n// Export TypeScript types inferred from Zod schemas\nexport type AddressValidationType = z.infer<typeof AddressValidation>;\nexport type ContactInfoValidationType = z.infer<typeof ContactInfoValidation>;\nexport type PassengerValidationType = z.infer<typeof PassengerValidation>;\nexport type ServiceValidationType = z.infer<typeof ServiceValidation>;\nexport type PaymentValidationType = z.infer<typeof PaymentValidation>;\nexport type SearchMasterRecordRQValidationType = z.infer<\n typeof SearchMasterRecordRQValidation\n>;\nexport type BookFileRQValidationType = z.infer<typeof BookFileRQValidation>;\nexport type CancelFileRQValidationType = z.infer<typeof CancelFileRQValidation>;\nexport type PrintBookingDocumentRQValidationType = z.infer<\n typeof PrintBookingDocumentRQValidation\n>;\n","import { Injectable } from '@nestjs/common';\nimport {\n AvesError,\n AvesErrorCodes,\n AvesSeverity,\n AvesXmlResponse,\n HttpError,\n} from '../types/common';\nimport { AvesException } from './aves-error';\n\n@Injectable()\nexport class AvesErrorHandler {\n /**\n * Parse any error into a standardized AvesException\n */\n parseError(error: any): AvesException {\n // If it's already an AvesException, return as-is\n if (error instanceof AvesException) {\n return error;\n }\n\n // Handle HTTP errors\n if (this.isHttpError(error)) {\n return this.parseHttpError(error);\n }\n\n // Handle AVES XML response errors\n if (this.isAvesXmlResponse(error)) {\n return this.parseAvesXmlError(error);\n }\n\n // Handle standard JavaScript errors\n if (error instanceof Error) {\n return new AvesException(\n AvesErrorCodes.INTERNAL_SERVER_ERROR,\n error.message,\n {\n severity: AvesSeverity.ERROR,\n context: this.buildContext({\n type: 'javascript_error',\n errorName: error.name,\n stack: error.stack || 'No stack trace available',\n }),\n }\n );\n }\n\n // Handle unknown error types\n return new AvesException(\n AvesErrorCodes.INTERNAL_SERVER_ERROR,\n 'Unknown error occurred',\n {\n severity: AvesSeverity.ERROR,\n context: this.buildContext({\n type: 'unknown_error',\n errorName: typeof error,\n errorValue: String(error),\n }),\n }\n );\n }\n\n /**\n * Parse HTTP errors from axios\n */\n private parseHttpError(error: HttpError): AvesException {\n if (error.response) {\n const status = error.response.status;\n const statusText = error.response.statusText;\n\n switch (status) {\n case 400:\n return new AvesException(\n AvesErrorCodes.INVALID_REQUEST_FORMAT,\n `Bad Request: ${statusText}`,\n {\n severity: AvesSeverity.ERROR,\n context: this.buildContext({\n type: 'http_error',\n errorName: status,\n statusText,\n url: error.config?.url,\n method: error.config?.method,\n timeout: error.config?.timeout,\n }),\n }\n );\n case 401:\n return new AvesException(\n AvesErrorCodes.INVALID_TOKEN,\n 'Authentication failed',\n {\n severity: AvesSeverity.ERROR,\n context: this.buildContext({\n type: 'http_error',\n status,\n url: error.config?.url,\n method: error.config?.method,\n timeout: error.config?.timeout,\n }),\n }\n );\n case 403:\n return new AvesException(\n AvesErrorCodes.INSUFFICIENT_PERMISSIONS,\n 'Access forbidden',\n {\n severity: AvesSeverity.ERROR,\n context: this.buildContext({\n type: 'http_error',\n status,\n url: error.config?.url,\n method: error.config?.method,\n timeout: error.config?.timeout,\n }),\n }\n );\n case 404:\n return new AvesException(\n AvesErrorCodes.BOOKING_NOT_FOUND,\n 'Resource not found',\n {\n severity: AvesSeverity.ERROR,\n context: this.buildContext({\n type: 'http_error',\n status,\n url: error.config?.url,\n method: error.config?.method,\n timeout: error.config?.timeout,\n }),\n }\n );\n case 429:\n return new AvesException(\n AvesErrorCodes.RATE_LIMIT_EXCEEDED,\n 'Rate limit exceeded',\n {\n severity: AvesSeverity.ERROR,\n context: this.buildContext({\n type: 'http_error',\n status,\n retryAfter: error.response.headers?.['retry-after'],\n }),\n }\n );\n case 500:\n return new AvesException(\n AvesErrorCodes.INTERNAL_SERVER_ERROR,\n 'Internal server error',\n {\n severity: AvesSeverity.ERROR,\n context: this.buildContext({\n type: 'http_error',\n status,\n url: error.config?.url,\n method: error.config?.method,\n timeout: error.config?.timeout,\n }),\n }\n );\n case 503:\n return new AvesException(\n AvesErrorCodes.SERVICE_UNAVAILABLE,\n 'Service unavailable',\n {\n severity: AvesSeverity.ERROR,\n context: this.buildContext({\n type: 'http_error',\n status,\n url: error.config?.url,\n method: error.config?.method,\n timeout: error.config?.timeout,\n }),\n }\n );\n default:\n return new AvesException(\n AvesErrorCodes.INTERNAL_SERVER_ERROR,\n `HTTP ${status}: ${statusText}`,\n {\n severity: AvesSeverity.ERROR,\n context: this.buildContext({\n type: 'http_error',\n status,\n statusText,\n url: error.config?.url,\n method: error.config?.method,\n timeout: error.config?.timeout,\n }),\n }\n );\n }\n } else if (error.request) {\n // Request was made but no response received\n return new AvesException(\n AvesErrorCodes.TIMEOUT,\n 'Request timeout - no response from AVES API',\n {\n severity: AvesSeverity.ERROR,\n context: this.buildContext({\n type: 'http_error',\n timeout: true,\n url: error.config?.url,\n method: error.config?.method,\n configuredTimeout: error.config?.timeout,\n }),\n }\n );\n } else {\n // Something else happened\n return new AvesException(\n AvesErrorCodes.INTERNAL_SERVER_ERROR,\n `Request setup error: ${error.message}`,\n {\n severity: AvesSeverity.ERROR,\n context: this.buildContext({\n type: 'http_error',\n setupError: true,\n }),\n }\n );\n }\n }\n\n /**\n * Parse AVES XML response errors\n */\n private parseAvesXmlError(xmlResponse: AvesXmlResponse): AvesException {\n if (!xmlResponse?.Response?.RsStatus) {\n return new AvesException(\n AvesErrorCodes.INVALID_REQUEST_FORMAT,\n 'Invalid response format from AVES API',\n {\n severity: AvesSeverity.ERROR,\n context: this.buildContext({\n type: 'aves_xml_error',\n missingRsStatus: true,\n }),\n }\n );\n }\n\n const rsStatus = xmlResponse.Response.RsStatus;\n\n // Handle main status\n if (rsStatus['@Status'] === 'ERROR') {\n return new AvesException(\n rsStatus.ErrorCode || AvesErrorCodes.INTERNAL_SERVER_ERROR,\n rsStatus.ErrorDescription || 'Unknown error from AVES API',\n {\n severity: AvesSeverity.ERROR,\n context: this.buildContext({\n type: 'aves_xml_error',\n originalResponse: rsStatus,\n }),\n }\n );\n }\n\n // Handle warnings\n if (rsStatus.Warnings?.Warning) {\n const warnings = Array.isArray(rsStatus.Warnings.Warning)\n ? rsStatus.Warnings.Warning\n : [rsStatus.Warnings.Warning];\n\n return new AvesException(\n AvesErrorCodes.INVALID_FIELD_VALUE,\n warnings.join('; '),\n {\n severity: AvesSeverity.WARNING,\n context: this.buildContext({\n type: 'aves_xml_warning',\n warnings,\n }),\n }\n );\n }\n\n // If we get here, it's an unexpected response\n return new AvesException(\n AvesErrorCodes.INTERNAL_SERVER_ERROR,\n 'Unexpected response from AVES API',\n {\n severity: AvesSeverity.ERROR,\n context: this.buildContext({\n type: 'aves_xml_error',\n unexpectedResponse: true,\n status: rsStatus['@Status'],\n }),\n }\n );\n }\n\n /**\n * Check if error is retryable\n */\n isRetryable(error: AvesException): boolean {\n const retryableCodes = [\n AvesErrorCodes.TIMEOUT,\n AvesErrorCodes.SERVICE_UNAVAILABLE,\n AvesErrorCodes.INTERNAL_SERVER_ERROR,\n AvesErrorCodes.RATE_LIMIT_EXCEEDED,\n ];\n\n return retryableCodes.includes(error.code as AvesErrorCodes);\n }\n\n /**\n * Get user-friendly error message\n */\n getUserFriendlyMessage(error: AvesException): string {\n const friendlyMessages: Record<string, string> = {\n [AvesErrorCodes.INVALID_TOKEN]:\n 'Your session has expired. Please log in again.',\n [AvesErrorCodes.TOKEN_EXPIRED]:\n 'Your session has expired. Please log in again.',\n [AvesErrorCodes.INSUFFICIENT_PERMISSIONS]:\n 'You do not have permission to perform this action.',\n [AvesErrorCodes.BOOKING_NOT_FOUND]:\n 'The requested booking could not be found.',\n [AvesErrorCodes.BOOKING_ALREADY_CANCELLED]:\n 'This booking has already been cancelled.',\n [AvesErrorCodes.PAYMENT_FAILED]:\n 'Payment processing failed. Please try again.',\n [AvesErrorCodes.INSUFFICIENT_INVENTORY]:\n 'The requested service is no longer available.',\n [AvesErrorCodes.SERVICE_UNAVAILABLE]:\n 'The service is temporarily unavailable. Please try again later.',\n [AvesErrorCodes.TIMEOUT]: 'The request timed out. Please try again.',\n [AvesErrorCodes.RATE_LIMIT_EXCEEDED]:\n 'Too many requests. Please wait a moment and try again.',\n };\n\n return friendlyMessages[error.code] || error.message;\n }\n\n /**\n * Build standardized context object from various input types\n */\n private buildContext(input: any): Record<string, any> {\n const context: Record<string, any> = {};\n\n // Handle different input types\n if (typeof input === 'object' && input !== null) {\n // Copy relevant properties, filtering out sensitive data\n Object.keys(input).forEach((key) => {\n const value = input[key];\n\n // Redact sensitive data\n if (this.isSensitiveKey(key)) {\n context[key] = '********';\n return;\n }\n\n // Handle different value types\n if (this.isSerializableValue(value)) {\n context[key] = value;\n } else if (typeof value === 'function') {\n context[key] = '[Function]';\n } else if (value instanceof Error) {\n context[key] = {\n name: value.name,\n message: value.message,\n stack: value.stack?.split('\\n').slice(0, 3).join('\\n'),\n };\n } else {\n context[key] = String(value);\n }\n });\n } else if (typeof input === 'string') {\n context.message = input;\n } else if (typeof input === 'number' || typeof input === 'boolean') {\n context.value = input;\n } else {\n context.input = String(input);\n }\n\n // Add metadata\n context.timestamp = new Date().toISOString();\n context.contextType = typeof input;\n\n return context;\n }\n\n /**\n * Check if a key contains sensitive information\n */\n private isSensitiveKey(key: string): boolean {\n const sensitiveKeys = [\n 'password',\n 'token',\n 'secret',\n 'key',\n 'auth',\n 'credential',\n 'xtoken',\n 'authorization',\n 'cookie',\n 'session',\n 'private',\n ];\n\n const lowerKey = key.toLowerCase();\n return sensitiveKeys.some((sensitive) => lowerKey.includes(sensitive));\n }\n\n /**\n * Check if a value is serializable and safe to include in context\n */\n private isSerializableValue(value: any): boolean {\n if (value === null || value === undefined) {\n return true;\n }\n\n if (\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n ) {\n return true;\n }\n\n if (Array.isArray(value)) {\n return value.length <= 10; // Limit array size\n }\n\n if (typeof value === 'object') {\n // Check if it's a plain object (not a class instance)\n if (value.constructor === Object) {\n const keys = Object.keys(value);\n return keys.length <= 20; // Limit object size\n }\n return false;\n }\n\n return false;\n }\n\n /**\n * Type guards\n */\n private isHttpError(error: any): error is HttpError {\n return error && (error.response || error.request || error.config);\n }\n\n private isAvesXmlResponse(error: any): error is AvesXmlResponse {\n return error && error.Response && error.Response.RsStatus;\n }\n}\n","export interface RqHeader {\n '@HostID': string;\n '@Xtoken': string;\n '@Interface': 'WEB';\n '@UserName': 'WEB';\n '@LanguageCode'?: string;\n}\n\nexport enum AvesStatus {\n OK = 'OK',\n ERROR = 'ERROR',\n WARNING = 'WARNING',\n TIMEOUT = 'TIMEOUT',\n}\n\nexport interface RsStatus {\n '@Status': AvesStatus;\n ErrorCode?: string;\n ErrorDescription?: string;\n Warnings?: { Warning: string | string[] };\n}\n\nexport enum AvesSeverity {\n ERROR = 'ERROR',\n WARNING = 'WARNING',\n INFO = 'INFO',\n}\n\n// Simplified error handling - single unified error interface\nexport interface AvesError {\n code: string;\n message: string;\n severity: AvesSeverity;\n timestamp: string;\n requestId: string;\n context?: Record<string, any>;\n}\n\n// Common AVES error codes\nexport enum AvesErrorCodes {\n // Authentication & Authorization\n INVALID_TOKEN = 'AVES_001',\n TOKEN_EXPIRED = 'AVES_002',\n INSUFFICIENT_PERMISSIONS = 'AVES_003',\n\n // Validation Errors\n INVALID_REQUEST_FORMAT = 'AVES_100',\n MISSING_REQUIRED_FIELD = 'AVES_101',\n INVALID_FIELD_VALUE = 'AVES_102',\n INVALID_DATE_FORMAT = 'AVES_103',\n\n // Business Logic Errors\n BOOKING_NOT_FOUND = 'AVES_200',\n BOOKING_ALREADY_CANCELLED = 'AVES_201',\n INVALID_BOOKING_STATUS = 'AVES_202',\n PAYMENT_FAILED = 'AVES_203',\n INSUFFICIENT_INVENTORY = 'AVES_204',\n\n // System Errors\n INTERNAL_SERVER_ERROR = 'AVES_500',\n SERVICE_UNAVAILABLE = 'AVES_501',\n TIMEOUT = 'AVES_502',\n RATE_LIMIT_EXCEEDED = 'AVES_503',\n}\n\nexport enum InsertCriteria {\n INSERT = 'INSERT',\n UPDATE = 'UPDATE',\n UPSERT = 'UPSERT',\n}\n\nexport interface AvesRequestRoot<TBody> {\n Request: {\n RqHeader: RqHeader;\n Body: TBody;\n };\n}\n\nexport interface AvesResponseRoot<TBody> {\n Response: {\n RsStatus: RsStatus;\n Body?: TBody;\n };\n}\n\n// Type for AVES XML response structure used in error handling\nexport interface AvesXmlResponse {\n Response?: {\n RsStatus?: {\n '@Status'?: AvesStatus;\n ErrorCode?: string;\n ErrorDescription?: string;\n Warnings?: {\n Warning: string | string[];\n };\n };\n };\n}\n\n// Type for HTTP error structure from axios\nexport interface HttpError extends Error {\n response?: {\n status: number;\n statusText: string;\n data?: any;\n headers?: Record<string, string>;\n config?: {\n url?: string;\n method?: string;\n timeout?: number;\n headers?: Record<string, string>;\n };\n };\n request?: {\n path?: string;\n method?: string;\n headers?: Record<string, string>;\n timeout?: number;\n data?: any;\n };\n config?: {\n url?: string;\n method?: string;\n timeout?: number;\n headers?: Record<string, string>;\n baseURL?: string;\n params?: Record<string, any>;\n };\n code?: string;\n isAxiosError?: boolean;\n}\n\nexport type LanguageCode = '01' | '02';\n\nexport interface AvesSdkConfig {\n baseUrl: string;\n hostId: string;\n xtoken: string;\n languageCode?: LanguageCode;\n timeout?: number;\n}\n","import {\n AvesErrorCodes,\n AvesError as AvesErrorInterface,\n AvesSeverity,\n} from '../types/common';\n\n/**\n * Simple AVES Exception class that extends the standard Error\n * Provides unified error handling with AVES-specific error codes and context\n */\nexport class AvesException extends Error {\n public readonly code: string;\n public readonly severity: AvesSeverity;\n public readonly timestamp: string;\n public readonly requestId: string;\n public readonly context?: Record<string, any>;\n\n constructor(\n code: string | AvesErrorCodes,\n message: string,\n options: {\n severity?: AvesSeverity;\n context?: Record<string, any>;\n requestId?: string;\n } = {}\n ) {\n super(message);\n\n this.name = 'AvesException';\n this.code = code;\n this.severity = options.severity || AvesSeverity.ERROR;\n this.timestamp = new Date().toISOString();\n this.context = options.context;\n this.requestId = options.requestId || this.generateRequestId();\n\n // Ensure proper prototype chain for instanceof checks\n Object.setPrototypeOf(this, AvesException.prototype);\n\n // Capture stack trace if available\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, AvesException);\n }\n }\n\n /**\n * Create an AVES error from a structured AvesError object\n */\n static fromAvesError(avesError: AvesErrorInterface): AvesException {\n return new AvesException(avesError.code, avesError.message, {\n severity: avesError.severity,\n context: avesError.context,\n requestId: avesError.requestId,\n });\n }\n\n /**\n * Check if this error is retryable\n */\n isRetryable(): boolean {\n const retryableCodes = [\n AvesErrorCodes.TIMEOUT,\n AvesErrorCodes.SERVICE_UNAVAILABLE,\n AvesErrorCodes.INTERNAL_SERVER_ERROR,\n AvesErrorCodes.RATE_LIMIT_EXCEEDED,\n ];\n\n return retryableCodes.includes(this.code as AvesErrorCodes);\n }\n\n /**\n * Get user-friendly error message\n */\n getUserFriendlyMessage(): string {\n const friendlyMessages: Record<string, string> = {\n [AvesErrorCodes.INVALID_TOKEN]:\n 'Your session has expired. Please log in again.',\n [AvesErrorCodes.TOKEN_EXPIRED]:\n 'Your session has expired. Please log in again.',\n [AvesErrorCodes.INSUFFICIENT_PERMISSIONS]:\n 'You do not have permission to perform this action.',\n [AvesErrorCodes.BOOKING_NOT_FOUND]:\n 'The requested booking could not be found.',\n [AvesErrorCodes.BOOKING_ALREADY_CANCELLED]:\n 'This booking has already been cancelled.',\n [AvesErrorCodes.PAYMENT_FAILED]:\n 'Payment processing failed. Please try again.',\n [AvesErrorCodes.INSUFFICIENT_INVENTORY]:\n 'The requested service is no longer available.',\n [AvesErrorCodes.SERVICE_UNAVAILABLE]:\n 'The service is temporarily unavailable. Please try again later.',\n [AvesErrorCodes.TIMEOUT]: 'The request timed out. Please try again.',\n [AvesErrorCodes.RATE_LIMIT_EXCEEDED]:\n 'Too many requests. Please wait a moment and try again.',\n };\n\n return friendlyMessages[this.code] || this.message;\n }\n\n /**\n * Convert to plain object for serialization\n */\n toJSON(): Record<string, any> {\n return {\n name: this.name,\n code: this.code,\n message: this.message,\n severity: this.severity,\n timestamp: this.timestamp,\n requestId: this.requestId,\n context: this.context,\n stack: this.stack,\n isRetryable: this.isRetryable(),\n userFriendlyMessage: this.getUserFriendlyMessage(),\n };\n }\n\n /**\n * Convert to AvesError interface\n */\n toAvesError(): AvesErrorInterface {\n return {\n code: this.code,\n message: this.message,\n severity: this.severity,\n timestamp: this.timestamp,\n requestId: this.requestId,\n context: this.context,\n };\n }\n\n /**\n * Get HTTP status code for this error\n */\n getHttpStatusCode(): number {\n switch (this.code) {\n case AvesErrorCodes.INVALID_TOKEN:\n case AvesErrorCodes.TOKEN_EXPIRED:\n return 401;\n case AvesErrorCodes.INSUFFICIENT_PERMISSIONS:\n return 403;\n case AvesErrorCodes.BOOKING_NOT_FOUND:\n return 404;\n case AvesErrorCodes.INVALID_REQUEST_FORMAT:\n case AvesErrorCodes.MISSING_REQUIRED_FIELD:\n case AvesErrorCodes.INVALID_FIELD_VALUE:\n return 400;\n case AvesErrorCodes.RATE_LIMIT_EXCEEDED:\n return 429;\n case AvesErrorCodes.SERVICE_UNAVAILABLE:\n return 503;\n case AvesErrorCodes.TIMEOUT:\n return 408;\n default:\n return 500;\n }\n }\n\n /**\n * Get error category\n */\n getCategory(): string {\n if (this.code.startsWith('AVES_1')) return 'Authentication';\n if (this.code.startsWith('AVES_2')) return 'Business Logic';\n if (this.code.startsWith('AVES_5')) return 'System';\n return 'Unknown';\n }\n\n /**\n * Generate unique request ID\n */\n private generateRequestId(): string {\n return `aves_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n }\n}\n"],"mappings":"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","names":["index_exports","__export","AvesErrorHandler","AvesException","AvesModule","AvesService","BookingStatusType","CancelReasonType","CustomerStatusType","CustomerType","DeliveryMethodType","DeliveryStatusType","DocumentFormatType","DocumentType","GenderType","PassengerType","PaymentStatusType","PaymentType","PricingItemType","RefundMethodType","ServiceStatusType","ServiceType","__toCommonJS","import_common","import_config","import_common","AVES_SDK_CONFIG","Symbol","XML_HTTP_CLIENT","RootElementNames","SEARCH_MASTER_RECORD","MANAGE_MASTER_RECORD","BOOK_FILE","MODI_FILE_HEADER","MOD_FILE_SERVICES","SET_STATUS","SET_STATUS_SERVICE","CANCEL_FILE","FILE_PAYMENT_LIST","PRINT_BOOKING_DOCUMENT","AvesEndpoints","SEARCH_MASTER_RECORDS","INSERT_OR_UPDATE_MASTER_RECORD","CREATE_BOOKING_FILE","MOD_BOOKING_FILE_HEADER","MOD_BOOKING_FILE_SERVICES","SET_BOOKING_FILE_STATUS","SET_BOOKING_FILE_SERVICE_STATUS","CANCEL_BOOKING_FILE","INSERT_FILE_PAYMENT_LIST","PRINT_BOOKING_DOCUMENT","import_zod","PassengerType","ADULT","CHILD","INFANT","SENIOR","GenderType","MALE","FEMALE","ServiceType","FLIGHT","HOTEL","CAR","TRANSFER","INSURANCE","ServiceStatusType","CONFIRMED","PENDING","CANCELLED","PaymentType","CREDIT_CARD","DEBIT_CARD","BANK_TRANSFER","CASH","PaymentStatusType","FAILED","CustomerType","CUSTOMER","SUPPLIER","VOUCHER","SUPPLIER_VOUCHER","CustomerStatusType","ENABLED","WARNING","BLACKLISTED","DISABLED","BookingStatusType","QUOTATION","WORK_IN_PROGRESS","OPTIONED","NULLIFIED","CANCELED","DocumentType","VISA_REQUEST","TRAVEL_INFORMATION","BOOKING_CONTRACT","BOOKING_CONFIRMATION","SUPPLIER_SERVICE_LIST","INVOICE","PROFORMA_INVOICE","ADEGUAMENTO","RESERVATION_FORM","OPEN_XML","SALES_INVOICE","TICKETING_TMASTER","SUMMARY_FORM","DocumentFormatType","PDF","HTML","XML","DeliveryMethodType","EMAIL","SMS","DOWNLOAD","CancelReasonType","CUSTOMER_REQUEST","NO_SHOW","OPERATIONAL","OTHER","RefundMethodType","ORIGINAL_PAYMENT","CREDIT","PricingItemType","SERVICE","TAX","FEE","DISCOUNT","DeliveryStatusType","SENT","addressTypeSchema","z","enum","contactTypeSchema","emailTypeSchema","passengerTypeSchema","titleTypeSchema","genderTypeSchema","serviceTypeSchema","serviceStatusTypeSchema","paymentTypeSchema","paymentStatusTypeSchema","customerTypeSchema","searchOperatorTypeSchema","bookingTypeSchema","priorityTypeSchema","specialRequestTypeSchema","cancelReasonTypeSchema","refundMethodTypeSchema","documentTypeSchema","documentFormatTypeSchema","deliveryMethodTypeSchema","bookingStatusTypeSchema","pricingItemTypeSchema","deliveryStatusTypeSchema","customerStatusTypeSchema","communicationMethodTypeSchema","dateStringSchema","string","regex","dateTimeStringSchema","customerAddressSchema","object","type","optional","street","max","city","state","postalCode","country","customerContactSchema","phone","number","min","email","address","mobile","fax","webUrl","url","customerSchema","id","status","personalInfo","title","firstName","lastName","dateOfBirth","gender","nationality","birthCity","birthCounty","contact","businessInfo","companyName","taxId","vatCode","fiscalCode","licenseNumber","priceListCode","preferences","language","length","currency","communicationMethod","meta","createdDate","modifiedDate","loginType","thirdPartRecordCode","searchField","extraInfo","codes","zoneCode","areaCode","branchOfficeCode","categoryCode","activityCode","promoterCode","networkCode","bookingPassengerSchema","passport","expiryDate","issuingCountry","bookingServiceSchema","code","name","description","startDate","endDate","price","amount","nonnegative","bookingPaymentSchema","positive","details","cardNumber","cardHolderName","paginationSchema","pages","int","page","searchCustomerRequestSchema","discriminatedUnion","literal","pagination","phoneNumber","zipCode","countyCode","from","to","externalRefCode","baseBookingRequestSchema","createDate","bookingFileRefCode","travelAgentCode","clerkName","markupCode","bookingFileStatus","value","expiredDate","passengers","array","services","statisticCodes","code1","code2","code3","code4","code5","code6","destination","iataCode","nationCode","earlyBookingDate","cupCode","cigCode","customerPromoterCode","billingReferenceCode","paymentReferenceCode","deadlines","expireDate","printDocument","boolean","sendDocumentViaEmail","bookingFinancialInfo","customerPaymentType","customerSpecPaymentTypeCode","groupingPaxPolicy","groupBookingFile","typeDownloadFile","setBookingFileCodeFromStartDate","createBookingRequestSchema","union","extend","customerId","customerDetails","never","cancelBookingRequestSchema","bookingId","reason","refundRequest","method","printDocumentRequestSchema","documentType","format","deliveryMethod","addPaymentRequestSchema","bookingRefCode","payments","enableMultiple","operationType","updateBookingHeaderSchema","notes","updateBookingServicesSchema","setBookingStatusSchema","bookingResponseSchema","createdAt","updatedAt","nation","firstConfirmationDate","paxNumber","reference","customer","pricing","totalAmount","breakdowns","totals","beforeDiscount","afterDiscount","discount","withoutVat","dueAmount","paidAmount","balance","customerSearchResultSchema","customers","totalItems","hasMore","printedDocumentSchema","fileName","content","contentSize","documentPrintResultSchema","emailRecipient","documents","additionalDocuments","operationResponseSchema","success","message","data","any","RequestPayload","payload","RqHeader","Body","Object","assign","_RequestPayload","WrapRequestDto","Request","_WrapRequestDto","createDateString","__name","date","dateObj","test","Error","Date","isNaN","getTime","year","getUTCFullYear","month","String","getUTCMonth","padStart","day","getUTCDate","createDateTimeString","dateTime","toISOString","mapCustomerTypeToXml","type","CustomerType","CUSTOMER","SUPPLIER","VOUCHER","SUPPLIER_VOUCHER","mapCustomerTypeFromXml","mapCustomerStatusToXml","status","CustomerStatusType","ENABLED","WARNING","BLACKLISTED","DISABLED","mapCustomerStatusFromXml","mapBookingStatusToXml","BookingStatusType","QUOTATION","WORK_IN_PROGRESS","CONFIRMED","OPTIONED","NULLIFIED","CANCELED","mapBookingStatusFromXml","mapDocumentTypeToXml","visa_request","travel_information","voucher","booking_contract","booking_confirmation","supplier_service_list","invoice","proforma_invoice","adeguamento","reservation_form","open_xml","sales_invoice","ticketing_tmaster","summary_form","mapGenderToXml","gender","male","female","BOOKING_STATUS_ALLOWED","Set","BOOKING_STATUS_ALIASES","CONFIRM","OPTION","REQUEST","NULLIFIED","normalizeBookingStatus","input","upper","toUpperCase","alias","has","mapBookingFileStatusForRQ","status","raw","mapBookingStatusToXml","mapPassengerFromXml","xml","nameParts","Name","split","lastName","pop","firstName","join","typeMap","AD","PassengerType","ADULT","CH","CHILD","IN","INFANT","OV","SENIOR","id","type","CategoryCode","title","undefined","dateOfBirth","BirthDate","createDateString","gender","Sex","GenderType","MALE","FEMALE","nationality","NationCode","CitizenshipCode","passport","IDDocInfo","number","expiryDate","issuingCountry","address","contact","eMail","PhoneNumber","email","phone","mapServiceFromXml","ServiceType","HOTEL","ServiceStatusType","PENDING","code","name","FirstDescription","description","SecondDescription","startDate","StartDate","endDate","EndDate","price","ServiceTotalAmountDetail","ServiceTotalPrice","currency","amount","parseFloat","buildSearchMasterRecordRQ","__name","request","data","RecordCode","city","City","VatCode","vatCode","phoneNumber","ZipCode","zipCode","countyCode","CountyCode","categoryCode","Email","LastModificationDate","from","to","SearchFieldValue","searchField","externalRefCode","mapSearchCustomerToXml","result","SearchType","mapCustomerToXml","fullName","personalInfo","trim","RecordType","mapCustomerTypeToXml","LanguageCode","preferences","language","Moniker","Gender","mapGenderToXml","FirstPhoneNumber","MobilePhone","Address","street","CityName","StateCode","country","postalCode","FiscalCode","businessInfo","taxId","RecordStatus","mapCustomerStatusToXml","FinancialDetail","mapCreateBookingToXml","customerDetail","customerDetails","customerId","CreateDate","createDate","BookingFileRefCode","bookingFileRefCode","TravelAgentCode","travelAgentCode","ClerkName","clerkName","CustomerDetail","CurrencyCode","MarkupCode","markupCode","BookingFileStatus","bookingFileStatus","value","expiredDate","StatisticCodes","statisticCodes","code1","code2","code3","code4","code5","code6","Destination","destination","iataCode","nationCode","BookingFileDescription","EarlyBookingDate","earlyBookingDate","CupCode","cupCode","CigCode","cigCode","CustomerPromoterCode","customerPromoterCode","BillingReferenceCode","billingReferenceCode","PaymentReferenceCode","paymentReferenceCode","BookingFileDocument","printDocument","sendDocumentViaEmail","DeadlineList","deadlines","DeadlineDetail","map","d","expireDate","BookingFinancialInfo","bookingFinancialInfo","customerPaymentType","customerSpecPaymentTypeCode","GroupingPaxPolicy","groupingPaxPolicy","GroupBookingFile","groupBookingFile","TypeDownloadFile","typeDownloadFile","SetBookingFileCodeFromStartDate","setBookingFileCodeFromStartDate","PassengerList","PassengerDetail","passengers","p","index","mapPassengerToAvesXml","SelectedServiceList","SelectedServiceDetail","services","s","mapServiceToAvesXml","passenger","String","padStart","service","sessionNumber","AvesServiceType","Date","toISOString","Qty","Pax","AvesSession","mapCancelBookingToXml","BookingFileCode","bookingId","CustomerRecordCode","mapPrintDocumentToXml","RefMasterRecordCode","InfoDocumentsToPrint","InfoDocumentToPrint","DocumentType","mapDocumentTypeToXml","documentType","GetDocumentContent","deliveryMethod","SendDocumentViaEmail","mapAddPaymentToXml","operationType","bookingRefCode","EnableMultiplePayments","enableMultiple","payments","length","OperationType","FilePaymentList","FilePaymentDetail","payment","mapPaymentTypeToAvesXml","cash","bank","bank2","bank3","atm","creditCard","credit_card","rebate","mapCreateCustomerToXml","customer","masterRecord","MasterRecordDetail","mapUpdateCustomerToXml","mapUpsertCustomerToXml","mapUpdateBookingHeaderToXml","customerRecordCode","bookingFileCode","bookingFileStartDate","updates","BookingFileStartDate","NewCustomerRecordCode","newCustomerRecordCode","BookingNote","notes","mapUpdateBookingServicesToXml","mapSetBookingStatusToXml","options","FileStatus","optionedFileExpireDatePolicy","backOfficeRequest","BackOfficeRequest","printDoc","sendDocViaEmail","applyPenalty","Penalty","penaltyCode","simulateCancelAndGetPenalty","SimulateCancelAndGetPenaltyAmount","mapSetBookingServiceStatusToXml","serviceRef","statusDate","BookingServiceRef","BookingFileServiceStatus","BookingFileServiceStatusDate","mapCustomerFromXml","xml","nameParts","Name","split","lastName","pop","firstName","join","id","type","mapCustomerTypeFromXml","RecordType","status","mapCustomerStatusFromXml","RecordStatus","personalInfo","title","Moniker","dateOfBirth","BirthDate","createDateString","undefined","gender","Gender","GenderType","MALE","FEMALE","nationality","CitizenshipCode","birthCity","BirthCity","birthCounty","BirthCounty","contact","email","Email","address","phone","FirstPhoneNumber","number","mobile","MobilePhone","fax","FaxNumber","webUrl","WebUrl","Address","street","city","CityName","state","CountyCode","postalCode","ZipCode","country","StateCode","businessInfo","VatCode","FiscalCode","companyName","taxId","licenseNumber","vatCode","fiscalCode","priceListCode","PriceListCode","preferences","language","LanguageCode","currency","FinancialDetail","communicationMethod","meta","createdDate","CreatedDate","modifiedDate","ModifiedDate","loginType","LoginType","thirdPartRecordCode","ThirdPartRecordCode","searchField","SearchField","extraInfo","ExtraInfo","codes","zoneCode","ZoneCode","areaCode","AreaCode","branchOfficeCode","BranchOfficeCode","categoryCode","CategoryCode","activityCode","ActivityCode","promoterCode","PromoterCode","networkCode","NetworkCode","mapCustomerResponseFromXml","MasterRecordDetail","success","message","data","mapBookingFromXml","BookingFileCode","mapBookingStatusFromXml","BookingFileStatus","createdAt","createDateTimeString","CreationDate","updatedAt","description","Description","nation","Nation","destination","Destination","firstConfirmationDate","FirstConfirmationDate","paxNumber","PaxNumber","reference","Reference","clerkName","ClerkName","customer","CustomerRecordCode","CustomerName","CustomerEmail","passengers","PassengerList","PassengerDetail","map","mapPassengerFromXml","services","BookedServiceList","BookedServiceDetail","mapServiceFromXml","pricing","totalAmount","TotalAmountDetail","CurrencyCode","amount","parseFloat","TotalAmountAfterDiscount","breakdowns","totals","beforeDiscount","TotalAmountBeforeDiscount","afterDiscount","discount","TotalDiscount","withoutVat","TotalAmountWithoutVat","dueAmount","DueAmount","paidAmount","PaiedAmount","balance","Balance","mapBookingResponseFromXml","OperationResult","BookingFile","booking","mapSearchResponseFromXml","requestPagination","pageSize","pages","defaultPages","page","defaultPage","MasterRecordList","customers","pagination","totalItems","hasMore","length","mapDocumentResponseFromXml","documents","BaseDocumentAndAttachments","SingleBaseDocumentOrAttachment","doc","fileName","DocFileName","content","Base64DocContent","contentSize","additionalDocuments","AdditionalDocuments","AdditionalDocument","additionalDoc","emailRecipient","EmailRecipient","mapCancelResponseFromXml","refundInfo","RefundInfo","refundAmount","refundMethod","processingTime","mapPaymentResponseFromXml","paymentSummary","totalPaid","outstandingAmount","paymentHistory","AvesService","config","http","buildHeader","hostId","xtoken","languageCode","wrapRequest","body","WrapRequestDto","RqHeader","Body","searchCustomers","request","validatedRequest","searchCustomerRequestSchema","parse","xmlRequest","mapSearchCustomerToXml","xmlResponse","postXml","AvesEndpoints","SEARCH_MASTER_RECORDS","RootElementNames","SEARCH_MASTER_RECORD","mapSearchResponseFromXml","Response","pagination","createCustomer","customer","validatedCustomer","customerSchema","mapCreateCustomerToXml","INSERT_OR_UPDATE_MASTER_RECORD","MANAGE_MASTER_RECORD","mapCustomerResponseFromXml","updateCustomer","mapUpdateCustomerToXml","upsertCustomer","mapUpsertCustomerToXml","createBooking","createBookingRequestSchema","mapCreateBookingToXml","CREATE_BOOKING_FILE","BOOK_FILE","mapBookingResponseFromXml","updateBookingHeader","customerRecordCode","bookingFileCode","bookingFileStartDate","updates","mapUpdateBookingHeaderToXml","MOD_BOOKING_FILE_HEADER","MODI_FILE_HEADER","success","RsStatus","message","ErrorDescription","updateBookingServices","services","mapUpdateBookingServicesToXml","MOD_BOOKING_FILE_SERVICES","MOD_FILE_SERVICES","setBookingStatus","status","options","mapSetBookingStatusToXml","SET_BOOKING_FILE_STATUS","SET_STATUS","setBookingServiceStatus","serviceRef","statusDate","mapSetBookingServiceStatusToXml","SET_BOOKING_FILE_SERVICE_STATUS","SET_STATUS_SERVICE","cancelBooking","cancelBookingRequestSchema","mapCancelBookingToXml","CANCEL_BOOKING_FILE","CANCEL_FILE","mapCancelResponseFromXml","addPayment","addPaymentRequestSchema","mapAddPaymentToXml","INSERT_FILE_PAYMENT_LIST","FILE_PAYMENT_LIST","mapPaymentResponseFromXml","printDocument","printDocumentRequestSchema","mapPrintDocumentToXml","PRINT_BOOKING_DOCUMENT","mapDocumentResponseFromXml","searchMasterRecord","payload","insertOrUpdateMasterRecord","createBookingFile","cancelBookingFile","printBookingDocument","_AvesService","import_axios","import_fast_xml_parser","import_common","XmlHttpClient","config","httpClient","xmlBuilder","xmlParser","axios","create","baseURL","baseUrl","timeout","headers","Accept","transitional","clarifyTimeoutError","validateStatus","__name","s","XMLBuilder","attributeNamePrefix","ignoreAttributes","suppressEmptyNode","format","process","env","NODE_ENV","toLowerCase","XMLParser","parseAttributeValue","trimValues","isArray","name","includes","postXml","endpoint","rootElementName","request","xmlPayload","build","response","post","parse","data","_XmlHttpClient","scope","Scope","DEFAULT","import_config","AVES_CONFIG_NAMESPACE","avesConfig","registerAs","baseUrl","process","env","AVES_BASE_URL","hostId","AVES_HOST_ID","xtoken","AVES_XTOKEN","languageCode","AVES_LANGUAGE_CODE","timeout","AVES_TIMEOUT","Number","undefined","import_zod","LanguageCodeValidation","z","enum","configValidationSchema","object","baseUrl","url","hostId","string","length","xtoken","languageCode","optional","timeout","number","AddressValidation","Street","max","City","State","PostalCode","Country","ContactInfoValidation","Phone","Email","PassengerValidation","min","FirstName","LastName","DateOfBirth","date","Gender","Nationality","Address","ContactInfo","ServiceValidation","ServiceDetails","Code","Name","Description","StartDate","EndDate","Price","PaymentValidation","Amount","PaymentDetails","CardNumber","ExpiryDate","CardHolderName","SearchMasterRecordRQValidation","SearchCriteria","MasterRecordType","SearchFields","Field","array","Pagination","BookFileRQValidation","BookingDetails","CustomerInfo","CustomerDetails","any","PassengerList","Passenger","SelectedServiceList","Service","SpecialRequests","Request","CancelFileRQValidation","CancellationDetails","RefundRequest","PrintBookingDocumentRQValidation","DocumentRequest","DeliveryMethod","AvesModule","forRoot","config","validatedConfig","validateConfig","module","imports","ConfigModule","forFeature","avesConfig","providers","provide","AVES_SDK_CONFIG","useValue","createXmlHttpClientProvider","AvesService","exports","XML_HTTP_CLIENT","forRootAsync","options","asyncProviders","createAsyncProviders","useClass","XmlHttpClient","useFactory","__name","args","error","Error","message","inject","useExisting","factory","createAvesOptions","push","configValidationSchema","safeParse","success","issues","map","issue","join","data","__publicField","MODULE_NAME","VERSION","_AvesModule","import_common","AvesSeverity","AvesErrorCodes","AvesException","Error","code","message","options","severity","timestamp","requestId","context","name","AvesSeverity","ERROR","Date","toISOString","generateRequestId","Object","setPrototypeOf","prototype","captureStackTrace","fromAvesError","avesError","isRetryable","AvesErrorCodes","TIMEOUT","SERVICE_UNAVAILABLE","INTERNAL_SERVER_ERROR","RATE_LIMIT_EXCEEDED","includes","getUserFriendlyMessage","INVALID_TOKEN","TOKEN_EXPIRED","INSUFFICIENT_PERMISSIONS","BOOKING_NOT_FOUND","BOOKING_ALREADY_CANCELLED","PAYMENT_FAILED","INSUFFICIENT_INVENTORY","toJSON","stack","userFriendlyMessage","toAvesError","getHttpStatusCode","INVALID_REQUEST_FORMAT","MISSING_REQUIRED_FIELD","INVALID_FIELD_VALUE","getCategory","startsWith","now","Math","random","toString","substr","_AvesException","AvesErrorHandler","parseError","error","AvesException","isHttpError","parseHttpError","isAvesXmlResponse","parseAvesXmlError","Error","AvesErrorCodes","INTERNAL_SERVER_ERROR","message","severity","AvesSeverity","ERROR","context","buildContext","type","errorName","name","stack","errorValue","String","response","status","statusText","INVALID_REQUEST_FORMAT","url","config","method","timeout","INVALID_TOKEN","INSUFFICIENT_PERMISSIONS","BOOKING_NOT_FOUND","RATE_LIMIT_EXCEEDED","retryAfter","headers","SERVICE_UNAVAILABLE","request","TIMEOUT","configuredTimeout","setupError","xmlResponse","Response","RsStatus","missingRsStatus","rsStatus","ErrorCode","ErrorDescription","originalResponse","Warnings","Warning","warnings","Array","isArray","INVALID_FIELD_VALUE","join","WARNING","unexpectedResponse","isRetryable","includes","code","getUserFriendlyMessage","TOKEN_EXPIRED","BOOKING_ALREADY_CANCELLED","PAYMENT_FAILED","INSUFFICIENT_INVENTORY","input","Object","keys","forEach","key","value","isSensitiveKey","isSerializableValue","split","slice","timestamp","Date","toISOString","contextType","sensitiveKeys","lowerKey","toLowerCase","some","sensitive","length","_AvesErrorHandler"]}