aves-sdk 1.0.2 → 1.0.3

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/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/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/validation/api-schemas.ts","../src/errors/aves-error-handler.ts","../src/errors/aves-error.ts"],"sourcesContent":["import 'reflect-metadata';\n\n// Primary API - Clean, developer-friendly interfaces\nexport * from './types/api-interfaces';\nexport * from './mappers';\nexport * from './utils';\n\n// NestJS Integration\nexport * from './nest/aves.module';\nexport * from './nest/aves.service';\n\n// Internal/Advanced APIs (for power users)\nexport * from './types/common';\nexport * from './types/interfaces';\nexport * from './http/xml-http-client';\nexport * from './config/aves.config';\nexport * from './tokens';\nexport * from './validation';\nexport * from './errors/aves-error-handler';\nexport * from './errors/aves-error';\n","import { format, parseISO, isValid } from 'date-fns';\n\n/**\n * Creates a date string with validation using date-fns\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 // Validate format first\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 dateObj = parseISO(date);\n } catch {\n throw new Error(`Invalid date string: ${date}`);\n }\n } else {\n dateObj = date;\n }\n\n // Enhanced validation using date-fns\n if (!isValid(dateObj)) {\n throw new Error(`Invalid date value: ${date}`);\n }\n\n // Format using date-fns for consistency\n const formattedDate = format(dateObj, 'yyyy-MM-dd');\n return formattedDate;\n};\n\n/**\n * Creates a datetime string with validation using date-fns\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 // Validate format first\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 = parseISO(dateTime);\n } catch {\n throw new Error(`Invalid datetime string: ${dateTime}`);\n }\n } else {\n dateObj = dateTime;\n }\n\n // Enhanced validation using date-fns\n if (!isValid(dateObj)) {\n throw new Error(`Invalid datetime value: ${dateTime}`);\n }\n\n // Format using date-fns for consistency\n const formattedDateTime = format(dateObj, \"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'\");\n return formattedDateTime;\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 // Basic validation for HH:MM:SS format\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 // Additional validation - check if it's a valid time\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","// ===== ADDRESS TYPE MAPPERS =====\n\nexport function mapAddressTypeToXml(\n type: string\n): 'HOME' | 'WORK' | 'BILLING' | 'DELIVERY' {\n const mapping: Record<string, 'HOME' | 'WORK' | 'BILLING' | 'DELIVERY'> = {\n home: 'HOME',\n work: 'WORK',\n billing: 'BILLING',\n delivery: 'DELIVERY',\n };\n return mapping[type] || 'HOME';\n}\n\nexport function mapAddressTypeFromXml(\n type: string\n): 'home' | 'work' | 'billing' | 'delivery' {\n const mapping: Record<string, 'home' | 'work' | 'billing' | 'delivery'> = {\n HOME: 'home',\n WORK: 'work',\n BILLING: 'billing',\n DELIVERY: 'delivery',\n };\n return mapping[type] || 'home';\n}\n\n// ===== CONTACT TYPE MAPPERS =====\n\nexport function mapContactTypeToXml(\n type: string\n): 'HOME' | 'WORK' | 'MOBILE' | 'FAX' {\n const mapping: Record<string, 'HOME' | 'WORK' | 'MOBILE' | 'FAX'> = {\n home: 'HOME',\n work: 'WORK',\n mobile: 'MOBILE',\n fax: 'FAX',\n };\n return mapping[type] || 'HOME';\n}\n\nexport function mapContactTypeFromXml(\n type: string\n): 'home' | 'work' | 'mobile' | 'fax' {\n const mapping: Record<string, 'home' | 'work' | 'mobile' | 'fax'> = {\n HOME: 'home',\n WORK: 'work',\n MOBILE: 'mobile',\n FAX: 'fax',\n };\n return mapping[type] || 'home';\n}\n\nexport function mapEmailTypeToXml(type: string): 'HOME' | 'WORK' {\n const mapping: Record<string, 'HOME' | 'WORK'> = {\n home: 'HOME',\n work: 'WORK',\n };\n return mapping[type] || 'HOME';\n}\n\nexport function mapEmailTypeFromXml(type: string): 'home' | 'work' {\n const mapping: Record<string, 'home' | 'work'> = {\n HOME: 'home',\n WORK: 'work',\n };\n return mapping[type] || 'home';\n}\n\n// ===== PASSENGER TYPE MAPPERS =====\n\nexport function mapPassengerTypeToXml(type: string): 'ADT' | 'CHD' | 'INF' {\n const mapping: Record<string, 'ADT' | 'CHD' | 'INF'> = {\n adult: 'ADT',\n child: 'CHD',\n infant: 'INF',\n };\n return mapping[type] || 'ADT';\n}\n\nexport function mapPassengerTypeFromXml(\n type: string\n): 'adult' | 'child' | 'infant' {\n const mapping: Record<string, 'adult' | 'child' | 'infant'> = {\n ADT: 'adult',\n CHD: 'child',\n INF: 'infant',\n };\n return mapping[type] || 'adult';\n}\n\nexport function mapTitleToXml(\n title: string\n): 'MR' | 'MRS' | 'MS' | 'DR' | 'PROF' {\n const mapping: Record<string, 'MR' | 'MRS' | 'MS' | 'DR' | 'PROF'> = {\n mr: 'MR',\n mrs: 'MRS',\n ms: 'MS',\n dr: 'DR',\n prof: 'PROF',\n };\n return mapping[title] || 'MR';\n}\n\nexport function mapTitleFromXml(\n title: string\n): 'mr' | 'mrs' | 'ms' | 'dr' | 'prof' {\n const mapping: Record<string, 'mr' | 'mrs' | 'ms' | 'dr' | 'prof'> = {\n MR: 'mr',\n MRS: 'mrs',\n MS: 'ms',\n DR: 'dr',\n PROF: 'prof',\n };\n return mapping[title] || 'mr';\n}\n\n// ===== SERVICE TYPE MAPPERS =====\n\nexport function mapServiceTypeToXml(\n type: string\n): 'FLIGHT' | 'HOTEL' | 'CAR' | 'TRANSFER' | 'INSURANCE' {\n const mapping: Record<\n string,\n 'FLIGHT' | 'HOTEL' | 'CAR' | 'TRANSFER' | 'INSURANCE'\n > = {\n flight: 'FLIGHT',\n hotel: 'HOTEL',\n car: 'CAR',\n transfer: 'TRANSFER',\n insurance: 'INSURANCE',\n };\n return mapping[type] || 'FLIGHT';\n}\n\nexport function mapServiceTypeFromXml(\n type: string\n): 'flight' | 'hotel' | 'car' | 'transfer' | 'insurance' {\n const mapping: Record<\n string,\n 'flight' | 'hotel' | 'car' | 'transfer' | 'insurance'\n > = {\n FLIGHT: 'flight',\n HOTEL: 'hotel',\n CAR: 'car',\n TRANSFER: 'transfer',\n INSURANCE: 'insurance',\n };\n return mapping[type] || 'flight';\n}\n\nexport function mapServiceStatusToXml(\n status: string\n): 'CONFIRMED' | 'PENDING' | 'CANCELLED' {\n const mapping: Record<string, 'CONFIRMED' | 'PENDING' | 'CANCELLED'> = {\n confirmed: 'CONFIRMED',\n pending: 'PENDING',\n cancelled: 'CANCELLED',\n };\n return mapping[status] || 'PENDING';\n}\n\nexport function mapServiceStatusFromXml(\n status: string\n): 'confirmed' | 'pending' | 'cancelled' {\n const mapping: Record<string, 'confirmed' | 'pending' | 'cancelled'> = {\n CONFIRMED: 'confirmed',\n PENDING: 'pending',\n CANCELLED: 'cancelled',\n };\n return mapping[status] || 'pending';\n}\n\n// ===== PAYMENT TYPE MAPPERS =====\n\nexport function mapPaymentTypeToXml(\n type: string\n): 'CREDIT_CARD' | 'DEBIT_CARD' | 'BANK_TRANSFER' | 'CASH' {\n const mapping: Record<\n string,\n 'CREDIT_CARD' | 'DEBIT_CARD' | 'BANK_TRANSFER' | 'CASH'\n > = {\n credit_card: 'CREDIT_CARD',\n debit_card: 'DEBIT_CARD',\n bank_transfer: 'BANK_TRANSFER',\n cash: 'CASH',\n };\n return mapping[type] || 'CASH';\n}\n\nexport function mapPaymentTypeFromXml(\n type: string\n): 'credit_card' | 'debit_card' | 'bank_transfer' | 'cash' {\n const mapping: Record<\n string,\n 'credit_card' | 'debit_card' | 'bank_transfer' | 'cash'\n > = {\n CREDIT_CARD: 'credit_card',\n DEBIT_CARD: 'debit_card',\n BANK_TRANSFER: 'bank_transfer',\n CASH: 'cash',\n };\n return mapping[type] || 'cash';\n}\n\nexport function mapPaymentStatusToXml(\n status: string\n): 'PENDING' | 'CONFIRMED' | 'FAILED' {\n const mapping: Record<string, 'PENDING' | 'CONFIRMED' | 'FAILED'> = {\n pending: 'PENDING',\n confirmed: 'CONFIRMED',\n failed: 'FAILED',\n };\n return mapping[status] || 'PENDING';\n}\n\nexport function mapPaymentStatusFromXml(\n status: string\n): 'pending' | 'confirmed' | 'failed' {\n const mapping: Record<string, 'pending' | 'confirmed' | 'failed'> = {\n PENDING: 'pending',\n CONFIRMED: 'confirmed',\n FAILED: 'failed',\n };\n return mapping[status] || 'pending';\n}\n\n// ===== CUSTOMER TYPE MAPPERS =====\n\nexport function mapCustomerTypeToXml(\n type: string\n): 'CUSTOMER' | 'AGENT' | 'SUPPLIER' {\n const mapping: Record<string, 'CUSTOMER' | 'AGENT' | 'SUPPLIER'> = {\n customer: 'CUSTOMER',\n agent: 'AGENT',\n supplier: 'SUPPLIER',\n };\n return mapping[type] || 'CUSTOMER';\n}\n\nexport function mapCustomerTypeFromXml(\n type: string\n): 'customer' | 'agent' | 'supplier' {\n const mapping: Record<string, 'customer' | 'agent' | 'supplier'> = {\n CUSTOMER: 'customer',\n AGENT: 'agent',\n SUPPLIER: 'supplier',\n };\n return mapping[type] || 'customer';\n}\n\nexport function mapCustomerStatusToXml(\n status: string\n): 'ACTIVE' | 'INACTIVE' | 'SUSPENDED' {\n const mapping: Record<string, 'ACTIVE' | 'INACTIVE' | 'SUSPENDED'> = {\n active: 'ACTIVE',\n inactive: 'INACTIVE',\n suspended: 'SUSPENDED',\n };\n return mapping[status] || 'ACTIVE';\n}\n\nexport function mapCustomerStatusFromXml(\n status: string\n): 'active' | 'inactive' | 'suspended' {\n const mapping: Record<string, 'active' | 'inactive' | 'suspended'> = {\n ACTIVE: 'active',\n INACTIVE: 'inactive',\n SUSPENDED: 'suspended',\n };\n return mapping[status] || 'active';\n}\n\nexport function mapCommunicationMethodToXml(\n method: string\n): 'EMAIL' | 'SMS' | 'PHONE' {\n const mapping: Record<string, 'EMAIL' | 'SMS' | 'PHONE'> = {\n email: 'EMAIL',\n sms: 'SMS',\n phone: 'PHONE',\n };\n return mapping[method] || 'EMAIL';\n}\n\nexport function mapCommunicationMethodFromXml(\n method: string\n): 'email' | 'sms' | 'phone' {\n const mapping: Record<string, 'email' | 'sms' | 'phone'> = {\n EMAIL: 'email',\n SMS: 'sms',\n PHONE: 'phone',\n };\n return mapping[method] || 'email';\n}\n\n// ===== BOOKING TYPE MAPPERS =====\n\nexport function mapBookingTypeToXml(\n type: string\n): 'INDIVIDUAL' | 'GROUP' | 'CORPORATE' {\n const mapping: Record<string, 'INDIVIDUAL' | 'GROUP' | 'CORPORATE'> = {\n individual: 'INDIVIDUAL',\n group: 'GROUP',\n corporate: 'CORPORATE',\n };\n return mapping[type] || 'INDIVIDUAL';\n}\n\nexport function mapBookingStatusToXml(\n status: string\n): 'PENDING' | 'CONFIRMED' | 'CANCELLED' | 'COMPLETED' {\n const mapping: Record<\n string,\n 'PENDING' | 'CONFIRMED' | 'CANCELLED' | 'COMPLETED'\n > = {\n pending: 'PENDING',\n confirmed: 'CONFIRMED',\n cancelled: 'CANCELLED',\n completed: 'COMPLETED',\n };\n return mapping[status] || 'PENDING';\n}\n\nexport function mapBookingStatusFromXml(\n status: string\n): 'pending' | 'confirmed' | 'cancelled' | 'completed' {\n const mapping: Record<\n string,\n 'pending' | 'confirmed' | 'cancelled' | 'completed'\n > = {\n PENDING: 'pending',\n CONFIRMED: 'confirmed',\n CANCELLED: 'cancelled',\n COMPLETED: 'completed',\n };\n return mapping[status] || 'pending';\n}\n\nexport function mapPriorityToXml(\n priority: string\n): 'LOW' | 'NORMAL' | 'HIGH' | 'URGENT' {\n const mapping: Record<string, 'LOW' | 'NORMAL' | 'HIGH' | 'URGENT'> = {\n low: 'LOW',\n normal: 'NORMAL',\n high: 'HIGH',\n urgent: 'URGENT',\n };\n return mapping[priority] || 'NORMAL';\n}\n\n// ===== SPECIAL REQUEST TYPE MAPPERS =====\n\nexport function mapSpecialRequestTypeToXml(\n type: string\n): 'MEAL' | 'SEAT' | 'WHEELCHAIR' | 'OTHER' {\n const mapping: Record<string, 'MEAL' | 'SEAT' | 'WHEELCHAIR' | 'OTHER'> = {\n meal: 'MEAL',\n seat: 'SEAT',\n wheelchair: 'WHEELCHAIR',\n other: 'OTHER',\n };\n return mapping[type] || 'OTHER';\n}\n\n// ===== CANCEL REASON TYPE MAPPERS =====\n\nexport function mapCancelReasonToXml(\n reason: string\n): 'CUSTOMER_REQUEST' | 'NO_SHOW' | 'OPERATIONAL' | 'OTHER' {\n const mapping: Record<\n string,\n 'CUSTOMER_REQUEST' | 'NO_SHOW' | 'OPERATIONAL' | 'OTHER'\n > = {\n customer_request: 'CUSTOMER_REQUEST',\n no_show: 'NO_SHOW',\n operational: 'OPERATIONAL',\n other: 'OTHER',\n };\n return mapping[reason] || 'OTHER';\n}\n\nexport function mapRefundMethodToXml(\n method: string\n): 'ORIGINAL_PAYMENT' | 'CREDIT' | 'CASH' {\n const mapping: Record<string, 'ORIGINAL_PAYMENT' | 'CREDIT' | 'CASH'> = {\n original_payment: 'ORIGINAL_PAYMENT',\n credit: 'CREDIT',\n cash: 'CASH',\n };\n return mapping[method] || 'CASH';\n}\n\n// ===== DOCUMENT TYPE MAPPERS =====\n\nexport function mapDocumentTypeToXml(\n type: string\n): 'CONFIRMATION' | 'INVOICE' | 'VOUCHER' | 'TICKET' | 'ALL' {\n const mapping: Record<\n string,\n 'CONFIRMATION' | 'INVOICE' | 'VOUCHER' | 'TICKET' | 'ALL'\n > = {\n confirmation: 'CONFIRMATION',\n invoice: 'INVOICE',\n voucher: 'VOUCHER',\n ticket: 'TICKET',\n all: 'ALL',\n };\n return mapping[type] || 'ALL';\n}\n\nexport function mapDocumentFormatToXml(format: string): 'PDF' | 'HTML' | 'XML' {\n const mapping: Record<string, 'PDF' | 'HTML' | 'XML'> = {\n pdf: 'PDF',\n html: 'HTML',\n xml: 'XML',\n };\n return mapping[format] || 'PDF';\n}\n\nexport function mapDeliveryMethodToXml(\n method: string\n): 'EMAIL' | 'SMS' | 'DOWNLOAD' {\n const mapping: Record<string, 'EMAIL' | 'SMS' | 'DOWNLOAD'> = {\n email: 'EMAIL',\n sms: 'SMS',\n download: 'DOWNLOAD',\n };\n return mapping[method] || 'EMAIL';\n}\n\n// ===== SEARCH OPERATOR TYPE MAPPERS =====\n\nexport function mapSearchOperatorToXml(\n operator: string\n): 'EQUALS' | 'CONTAINS' | 'STARTS_WITH' | 'ENDS_WITH' {\n const mapping: Record<\n string,\n 'EQUALS' | 'CONTAINS' | 'STARTS_WITH' | 'ENDS_WITH'\n > = {\n equals: 'EQUALS',\n contains: 'CONTAINS',\n starts_with: 'STARTS_WITH',\n ends_with: 'ENDS_WITH',\n };\n return mapping[operator] || 'EQUALS';\n}\n\n// ===== PRICING ITEM TYPE MAPPERS =====\n\nexport function mapPricingItemTypeFromXml(\n type: string\n): 'service' | 'tax' | 'fee' | 'discount' {\n const mapping: Record<string, 'service' | 'tax' | 'fee' | 'discount'> = {\n SERVICE: 'service',\n TAX: 'tax',\n FEE: 'fee',\n DISCOUNT: 'discount',\n };\n return mapping[type] || 'service';\n}\n\n// ===== DELIVERY STATUS TYPE MAPPERS =====\n\nexport function mapDeliveryStatusFromXml(\n status: string\n): 'sent' | 'pending' | 'failed' {\n const mapping: Record<string, 'sent' | 'pending' | 'failed'> = {\n SENT: 'sent',\n PENDING: 'pending',\n FAILED: 'failed',\n };\n return mapping[status] || 'pending';\n}\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\nexport function mapGenderFromXml(gender: string): 'male' | 'female' {\n const mapping: Record<string, 'male' | 'female'> = {\n M: 'male',\n F: 'female',\n };\n return mapping[gender] || 'male';\n}\n","import {\n Customer,\n CustomerAddress,\n CustomerContact,\n BookingPassenger,\n BookingService,\n BookingPayment,\n SearchCustomerRequest,\n CreateBookingRequest,\n CancelBookingRequest,\n PrintDocumentRequest,\n AddPaymentRequest,\n} from '../types/api-interfaces';\nimport { createDateString } from '../utils/date-helpers';\nimport {\n mapAddressTypeToXml,\n mapAddressTypeFromXml,\n mapContactTypeToXml,\n mapContactTypeFromXml,\n mapEmailTypeToXml,\n mapEmailTypeFromXml,\n mapPassengerTypeToXml,\n mapPassengerTypeFromXml,\n mapTitleToXml,\n mapTitleFromXml,\n mapServiceTypeToXml,\n mapServiceTypeFromXml,\n mapServiceStatusToXml,\n mapServiceStatusFromXml,\n mapPaymentTypeToXml,\n mapPaymentTypeFromXml,\n mapPaymentStatusToXml,\n mapPaymentStatusFromXml,\n mapCustomerTypeToXml,\n mapCustomerStatusToXml,\n mapCommunicationMethodToXml,\n mapBookingTypeToXml,\n mapPriorityToXml,\n mapSpecialRequestTypeToXml,\n mapCancelReasonToXml,\n mapRefundMethodToXml,\n mapDocumentTypeToXml,\n mapDocumentFormatToXml,\n mapDeliveryMethodToXml,\n mapSearchOperatorToXml,\n mapGenderToXml,\n mapGenderFromXml,\n} from './type-mappers';\nimport {\n MasterRecord,\n Address as XmlAddress,\n ContactInfo as XmlContactInfo,\n Passenger as XmlPassenger,\n Service as XmlService,\n Payment as XmlPayment,\n SearchMasterRecordRQ,\n BookFileRQ,\n CancelFileRQ,\n PrintBookingDocumentRQ,\n FilePaymentListRQ,\n} from '../types/interfaces';\n\n// ===== ADDRESS MAPPERS =====\n\nexport function mapAddressToXml(clean: CustomerAddress): XmlAddress {\n return {\n '@Type': clean.type ? mapAddressTypeToXml(clean.type) : undefined,\n Street: clean.street,\n City: clean.city,\n State: clean.state,\n PostalCode: clean.postalCode,\n Country: clean.country,\n };\n}\n\nexport function mapAddressFromXml(xml: XmlAddress): CustomerAddress {\n return {\n type: xml['@Type'] ? mapAddressTypeFromXml(xml['@Type']) : undefined,\n street: xml.Street,\n city: xml.City,\n state: xml.State,\n postalCode: xml.PostalCode,\n country: xml.Country,\n };\n}\n\n// ===== CONTACT MAPPERS =====\n\nexport function mapContactToXml(clean: CustomerContact): XmlContactInfo {\n return {\n Phone: clean.phone\n ? {\n '@Type': clean.phone.type\n ? mapContactTypeToXml(clean.phone.type)\n : undefined,\n '@Number': clean.phone.number,\n }\n : undefined,\n Email: clean.email\n ? {\n '@Type': clean.email.type\n ? mapEmailTypeToXml(clean.email.type)\n : undefined,\n '@Address': clean.email.address,\n }\n : undefined,\n };\n}\n\nexport function mapContactFromXml(xml: XmlContactInfo): CustomerContact {\n return {\n phone: xml.Phone\n ? {\n type: xml.Phone['@Type']\n ? mapContactTypeFromXml(xml.Phone['@Type'])\n : undefined,\n number: xml.Phone['@Number'],\n }\n : undefined,\n email: xml.Email\n ? {\n type: xml.Email['@Type']\n ? mapEmailTypeFromXml(xml.Email['@Type'])\n : undefined,\n address: xml.Email['@Address'],\n }\n : undefined,\n };\n}\n\n// ===== PASSENGER MAPPERS =====\n\nexport function mapPassengerToXml(clean: BookingPassenger): XmlPassenger {\n return {\n '@PassengerID': clean.id,\n '@Type': mapPassengerTypeToXml(clean.type),\n '@Title': clean.title ? mapTitleToXml(clean.title) : undefined,\n FirstName: clean.firstName,\n LastName: clean.lastName,\n MiddleName: clean.middleName,\n DateOfBirth: clean.dateOfBirth,\n Gender: clean.gender ? mapGenderToXml(clean.gender) : undefined,\n Nationality: clean.nationality,\n Passport: clean.passport\n ? {\n '@Number': clean.passport.number,\n '@ExpiryDate': clean.passport.expiryDate,\n '@IssuingCountry': clean.passport.issuingCountry,\n }\n : undefined,\n Address: clean.address ? mapAddressToXml(clean.address) : undefined,\n ContactInfo: clean.contact ? mapContactToXml(clean.contact) : undefined,\n };\n}\n\nexport function mapPassengerFromXml(xml: XmlPassenger): BookingPassenger {\n return {\n id: xml['@PassengerID'],\n type: mapPassengerTypeFromXml(xml['@Type']),\n title: xml['@Title'] ? mapTitleFromXml(xml['@Title']) : undefined,\n firstName: xml.FirstName,\n lastName: xml.LastName,\n middleName: xml.MiddleName,\n dateOfBirth: xml.DateOfBirth\n ? createDateString(xml.DateOfBirth)\n : undefined,\n gender: xml.Gender ? mapGenderFromXml(xml.Gender) : undefined,\n nationality: xml.Nationality,\n passport: xml.Passport\n ? {\n number: xml.Passport['@Number'],\n expiryDate: createDateString(xml.Passport['@ExpiryDate']),\n issuingCountry: xml.Passport['@IssuingCountry'],\n }\n : undefined,\n address: xml.Address ? mapAddressFromXml(xml.Address) : undefined,\n contact: xml.ContactInfo ? mapContactFromXml(xml.ContactInfo) : undefined,\n };\n}\n\n// ===== SERVICE MAPPERS =====\n\nexport function mapServiceToXml(clean: BookingService): XmlService {\n return {\n '@ServiceID': clean.id,\n '@Type': mapServiceTypeToXml(clean.type),\n '@Status': mapServiceStatusToXml(clean.status),\n ServiceDetails: {\n Code: clean.code,\n Name: clean.name,\n Description: clean.description,\n StartDate: clean.startDate,\n EndDate: clean.endDate,\n Price: clean.price\n ? {\n '@Currency': clean.price.currency,\n '@Amount': clean.price.amount,\n }\n : undefined,\n },\n };\n}\n\nexport function mapServiceFromXml(xml: XmlService): BookingService {\n return {\n id: xml['@ServiceID'],\n type: mapServiceTypeFromXml(xml['@Type']),\n status: mapServiceStatusFromXml(xml['@Status']),\n code: xml.ServiceDetails.Code,\n name: xml.ServiceDetails.Name,\n description: xml.ServiceDetails.Description,\n startDate: xml.ServiceDetails.StartDate\n ? createDateString(xml.ServiceDetails.StartDate)\n : undefined,\n endDate: xml.ServiceDetails.EndDate\n ? createDateString(xml.ServiceDetails.EndDate)\n : undefined,\n price: xml.ServiceDetails.Price\n ? {\n currency: xml.ServiceDetails.Price['@Currency'],\n amount: xml.ServiceDetails.Price['@Amount'],\n }\n : undefined,\n };\n}\n\n// ===== PAYMENT MAPPERS =====\n\nexport function mapPaymentToXml(clean: BookingPayment): XmlPayment {\n return {\n '@PaymentID': clean.id,\n '@Type': mapPaymentTypeToXml(clean.type),\n '@Status': mapPaymentStatusToXml(clean.status),\n Amount: {\n '@Currency': clean.amount.currency,\n '@Amount': clean.amount.amount,\n },\n PaymentDetails: clean.details\n ? {\n CardNumber: clean.details.cardNumber,\n ExpiryDate: clean.details.expiryDate,\n CardHolderName: clean.details.cardHolderName,\n }\n : undefined,\n };\n}\n\nexport function mapPaymentFromXml(xml: XmlPayment): BookingPayment {\n return {\n id: xml['@PaymentID'],\n type: mapPaymentTypeFromXml(xml['@Type']),\n status: mapPaymentStatusFromXml(xml['@Status']),\n amount: {\n currency: xml.Amount['@Currency'],\n amount: xml.Amount['@Amount'],\n },\n details: xml.PaymentDetails\n ? {\n cardNumber: xml.PaymentDetails.CardNumber,\n expiryDate: xml.PaymentDetails.ExpiryDate,\n cardHolderName: xml.PaymentDetails.CardHolderName,\n }\n : undefined,\n };\n}\n\n// ===== REQUEST MAPPERS =====\n\nexport function mapSearchCustomerToXml(\n clean: SearchCustomerRequest\n): SearchMasterRecordRQ {\n return {\n SearchCriteria: {\n MasterRecordType: mapCustomerTypeToXml(clean.type),\n SearchFields: {\n Field: clean.fields.map((field) => ({\n '@Name': field.name,\n '@Value': field.value,\n '@Operator': field.operator\n ? mapSearchOperatorToXml(field.operator)\n : undefined,\n })),\n },\n Pagination: clean.pagination\n ? {\n '@PageSize': clean.pagination.pageSize,\n '@PageNumber': clean.pagination.pageNumber,\n }\n : undefined,\n },\n };\n}\n\nexport function mapCustomerToXml(clean: Customer): MasterRecord {\n return {\n '@MasterRecordID': clean.id,\n '@Type': mapCustomerTypeToXml(clean.type),\n '@Status': mapCustomerStatusToXml(clean.status),\n PersonalInfo: clean.personalInfo\n ? {\n Title: clean.personalInfo.title,\n FirstName: clean.personalInfo.firstName,\n LastName: clean.personalInfo.lastName,\n MiddleName: clean.personalInfo.middleName,\n DateOfBirth: clean.personalInfo.dateOfBirth,\n Gender: clean.personalInfo.gender\n ? mapGenderToXml(clean.personalInfo.gender)\n : undefined,\n Nationality: clean.personalInfo.nationality,\n }\n : undefined,\n ContactInfo: clean.contact ? mapContactToXml(clean.contact) : undefined,\n Address: clean.address ? mapAddressToXml(clean.address) : undefined,\n BusinessInfo: clean.businessInfo\n ? {\n CompanyName: clean.businessInfo.companyName,\n TaxID: clean.businessInfo.taxId,\n LicenseNumber: clean.businessInfo.licenseNumber,\n }\n : undefined,\n Preferences: clean.preferences\n ? {\n Language: clean.preferences.language,\n Currency: clean.preferences.currency,\n CommunicationMethod: clean.preferences.communicationMethod\n ? mapCommunicationMethodToXml(clean.preferences.communicationMethod)\n : undefined,\n }\n : undefined,\n };\n}\n\nexport function mapCreateBookingToXml(clean: CreateBookingRequest): BookFileRQ {\n return {\n BookingDetails: {\n '@BookingType': mapBookingTypeToXml(clean.type),\n '@Priority': mapPriorityToXml(clean.priority),\n CustomerInfo: {\n '@CustomerID': clean.customerId,\n CustomerDetails: clean.customerDetails\n ? mapCustomerToXml(clean.customerDetails)\n : undefined,\n },\n PassengerList: {\n Passenger: clean.passengers.map(mapPassengerToXml),\n },\n SelectedServiceList: {\n Service: clean.services.map(mapServiceToXml),\n },\n SpecialRequests: clean.specialRequests\n ? {\n Request: clean.specialRequests.map((req) => ({\n '@Type': mapSpecialRequestTypeToXml(req.type),\n '@Description': req.description,\n })),\n }\n : undefined,\n },\n };\n}\n\nexport function mapCancelBookingToXml(\n clean: CancelBookingRequest\n): CancelFileRQ {\n return {\n '@BookingFileID': clean.bookingId,\n CancellationDetails: {\n '@Reason': mapCancelReasonToXml(clean.reason),\n '@Description': clean.description,\n RefundRequest: clean.refundRequest\n ? {\n '@Amount': clean.refundRequest.amount,\n '@Currency': clean.refundRequest.currency,\n '@Method': mapRefundMethodToXml(clean.refundRequest.method),\n }\n : undefined,\n },\n };\n}\n\nexport function mapPrintDocumentToXml(\n clean: PrintDocumentRequest\n): PrintBookingDocumentRQ {\n return {\n '@BookingFileID': clean.bookingId,\n DocumentRequest: {\n '@DocumentType': mapDocumentTypeToXml(clean.documentType),\n '@Format': mapDocumentFormatToXml(clean.format),\n '@Language': clean.language,\n DeliveryMethod: clean.deliveryMethod\n ? {\n '@Type': mapDeliveryMethodToXml(clean.deliveryMethod.type),\n '@Address': clean.deliveryMethod.address,\n }\n : undefined,\n },\n };\n}\n\nexport function mapAddPaymentToXml(\n clean: AddPaymentRequest\n): FilePaymentListRQ {\n return {\n '@BookingFileID': clean.bookingId,\n PaymentList: {\n Payment: clean.payments.map(mapPaymentToXml),\n },\n };\n}\n","// Mappers to convert XML responses to clean API responses\nimport {\n BookingResponse,\n SearchResponse,\n DocumentResponse,\n OperationResponse,\n Customer,\n} from '../types/api-interfaces';\nimport { createDateTimeString, createDateString } from '../utils/date-helpers';\nimport {\n mapCustomerTypeFromXml,\n mapCustomerStatusFromXml,\n mapCommunicationMethodFromXml,\n mapBookingStatusFromXml,\n mapPricingItemTypeFromXml,\n mapDeliveryStatusFromXml,\n} from './type-mappers';\nimport {\n BookingFile,\n SearchMasterRecordRS,\n PrintBookingDocumentRS,\n BookingFileRS,\n CancelFileRS,\n FilePaymentListRS,\n MasterRecord,\n} from '../types/interfaces';\nimport {\n mapPassengerFromXml,\n mapServiceFromXml,\n mapPaymentFromXml,\n mapAddressFromXml,\n mapContactFromXml,\n} from './request-mappers';\n\n// ===== CUSTOMER MAPPERS =====\n\nexport function mapCustomerFromXml(xml: MasterRecord): Customer {\n return {\n id: xml['@MasterRecordID'],\n type: mapCustomerTypeFromXml(xml['@Type']),\n status: mapCustomerStatusFromXml(xml['@Status']),\n personalInfo: xml.PersonalInfo\n ? {\n title: xml.PersonalInfo.Title,\n firstName: xml.PersonalInfo.FirstName,\n lastName: xml.PersonalInfo.LastName,\n middleName: xml.PersonalInfo.MiddleName,\n dateOfBirth: xml.PersonalInfo.DateOfBirth\n ? createDateString(xml.PersonalInfo.DateOfBirth)\n : undefined,\n gender: xml.PersonalInfo.Gender === 'M' ? 'male' : 'female',\n nationality: xml.PersonalInfo.Nationality,\n }\n : undefined,\n contact: xml.ContactInfo ? mapContactFromXml(xml.ContactInfo) : undefined,\n address: xml.Address ? mapAddressFromXml(xml.Address) : undefined,\n businessInfo: xml.BusinessInfo\n ? {\n companyName: xml.BusinessInfo.CompanyName,\n taxId: xml.BusinessInfo.TaxID,\n licenseNumber: xml.BusinessInfo.LicenseNumber,\n }\n : undefined,\n preferences: xml.Preferences\n ? {\n language: xml.Preferences.Language,\n currency: xml.Preferences.Currency,\n communicationMethod: xml.Preferences.CommunicationMethod\n ? mapCommunicationMethodFromXml(xml.Preferences.CommunicationMethod)\n : undefined,\n }\n : undefined,\n };\n}\n\n// ===== BOOKING RESPONSE MAPPERS =====\n\nexport function mapBookingFromXml(xml: BookingFile): BookingResponse {\n return {\n id: xml['@BookingFileID'],\n status: mapBookingStatusFromXml(xml['@Status']),\n createdAt: createDateTimeString(xml['@CreationDate']),\n updatedAt: createDateTimeString(xml['@LastModified']),\n customer: mapCustomerFromXml(xml.CustomerInfo),\n passengers: xml.PassengerList.Passenger.map(mapPassengerFromXml),\n services: xml.ServiceList.Service.map(mapServiceFromXml),\n pricing: {\n totalAmount: {\n currency: xml.Pricing.TotalAmount['@Currency'],\n amount: xml.Pricing.TotalAmount['@Amount'],\n },\n breakdowns: xml.Pricing.Breakdown?.Item.map((item) => ({\n type: mapPricingItemTypeFromXml(item['@Type']),\n description: item['@Description'],\n amount: item['@Amount'],\n })),\n },\n };\n}\n\nexport function mapBookingResponseFromXml(\n xml: BookingFileRS\n): BookingResponse & OperationResponse {\n const booking = mapBookingFromXml(xml.BookingFile);\n return {\n ...booking,\n success: xml.OperationResult['@Status'] === 'SUCCESS',\n message: xml.OperationResult['@Message'],\n data: booking,\n };\n}\n\n// ===== SEARCH RESPONSE MAPPERS =====\n\nexport function mapSearchResponseFromXml(\n xml: SearchMasterRecordRS\n): SearchResponse {\n return {\n results: xml.SearchResults.MasterRecord.map(mapCustomerFromXml),\n pagination: xml.SearchResults.PaginationInfo\n ? {\n totalRecords: xml.SearchResults.PaginationInfo['@TotalRecords'],\n pageSize: xml.SearchResults.PaginationInfo['@PageSize'],\n pageNumber: xml.SearchResults.PaginationInfo['@PageNumber'],\n totalPages: xml.SearchResults.PaginationInfo['@TotalPages'],\n }\n : undefined,\n };\n}\n\n// ===== DOCUMENT RESPONSE MAPPERS =====\n\nexport function mapDocumentResponseFromXml(\n xml: PrintBookingDocumentRS\n): DocumentResponse & OperationResponse {\n return {\n id: xml.DocumentInfo['@DocumentID'],\n type: xml.DocumentInfo['@DocumentType'],\n format: xml.DocumentInfo['@Format'],\n size: xml.DocumentInfo['@Size'],\n createdAt: createDateTimeString(xml.DocumentInfo['@CreationDate']),\n downloadUrl: xml.DocumentInfo.DownloadURL,\n deliveryStatus: xml.DocumentInfo.DeliveryStatus\n ? {\n status: mapDeliveryStatusFromXml(\n xml.DocumentInfo.DeliveryStatus['@Status']\n ),\n method: xml.DocumentInfo.DeliveryStatus['@Method'],\n address: xml.DocumentInfo.DeliveryStatus['@Address'],\n }\n : undefined,\n success: xml.OperationResult['@Status'] === 'SUCCESS',\n message: xml.OperationResult['@Message'],\n };\n}\n\n// ===== CANCEL RESPONSE MAPPERS =====\n\nexport function mapCancelResponseFromXml(xml: CancelFileRS): OperationResponse {\n return {\n success: xml.OperationResult['@Status'] === '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\n): OperationResponse {\n const booking = mapBookingFromXml(xml.BookingFile);\n return {\n success: xml.OperationResult['@Status'] === 'SUCCESS',\n message: xml.OperationResult['@Message'],\n data: {\n booking,\n paymentSummary: {\n totalPaid: {\n currency: xml.PaymentSummary.TotalPaid['@Currency'],\n amount: xml.PaymentSummary.TotalPaid['@Amount'],\n },\n outstandingAmount: {\n currency: xml.PaymentSummary.OutstandingAmount['@Currency'],\n amount: xml.PaymentSummary.OutstandingAmount['@Amount'],\n },\n paymentHistory:\n xml.PaymentSummary.PaymentHistory.Payment.map(mapPaymentFromXml),\n },\n },\n };\n}\n\n// ===== MASTER RECORD MAPPERS =====\n\nexport function mapMasterRecordFromXml(xml: MasterRecord): any {\n return {\n id: xml['@MasterRecordID'],\n type: xml['@Type'].toLowerCase(),\n status: xml['@Status'].toLowerCase(),\n personalInfo: xml.PersonalInfo\n ? {\n title: xml.PersonalInfo.Title,\n firstName: xml.PersonalInfo.FirstName,\n lastName: xml.PersonalInfo.LastName,\n middleName: xml.PersonalInfo.MiddleName,\n dateOfBirth: xml.PersonalInfo.DateOfBirth,\n gender: xml.PersonalInfo.Gender?.toLowerCase(),\n nationality: xml.PersonalInfo.Nationality,\n }\n : undefined,\n contact: xml.ContactInfo ? mapContactFromXml(xml.ContactInfo) : undefined,\n address: xml.Address ? mapAddressFromXml(xml.Address) : undefined,\n businessInfo: xml.BusinessInfo\n ? {\n companyName: xml.BusinessInfo.CompanyName,\n taxId: xml.BusinessInfo.TaxID,\n licenseNumber: xml.BusinessInfo.LicenseNumber,\n }\n : undefined,\n preferences: xml.Preferences\n ? {\n language: xml.Preferences.Language,\n currency: xml.Preferences.Currency,\n communicationMethod:\n xml.Preferences.CommunicationMethod?.toLowerCase(),\n }\n : undefined,\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 'src/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 type {\n SearchMasterRecordRQ,\n SearchMasterRecordRS,\n ManageMasterRecordRQ,\n CustomerRecordRS,\n BookFileRQ,\n BookingFileRS,\n ModiFileHeaderRQ,\n ModiFileHeaderRS,\n ModFileServicesRQ,\n SetStatusRQ,\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';\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', // THIS IS THE DEFAULT VALUE FOR THE INTERFACE\n '@UserName': 'WEB', // THIS IS THE DEFAULT VALUE FOR THE USERNAME\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 // Master Records\n async searchMasterRecord(\n payload: SearchMasterRecordRQ\n ): Promise<AvesResponseRoot<SearchMasterRecordRS>> {\n return this.http.postXml(\n '/interop/masterRecords/v2/rest/Search',\n 'SearchMasterRecordRQ',\n this.wrapRequest(payload)\n );\n }\n\n async insertOrUpdateMasterRecord(\n payload: ManageMasterRecordRQ\n ): Promise<AvesResponseRoot<CustomerRecordRS>> {\n return this.http.postXml(\n '/interop/masterRecords/v2/rest/InsertOrUpdate',\n 'ManageMasterRecordRQ',\n this.wrapRequest(payload)\n );\n }\n\n // Booking\n async createBookingFile(\n payload: BookFileRQ\n ): Promise<AvesResponseRoot<BookingFileRS>> {\n return this.http.postXml(\n '/interop/booking/v2/rest/CreateBookingFile',\n 'BookFileRQ',\n this.wrapRequest(payload)\n );\n }\n\n async modBookingFileHeader(\n payload: ModiFileHeaderRQ\n ): Promise<AvesResponseRoot<ModiFileHeaderRS>> {\n return this.http.postXml(\n '/interop/booking/v2/rest/ModBookingFileHeader',\n 'ModiFileHeaderRQ',\n this.wrapRequest(payload)\n );\n }\n\n async modBookingFileServices(\n payload: ModFileServicesRQ\n ): Promise<AvesResponseRoot<BookingFileRS>> {\n return this.http.postXml(\n '/interop/booking/v2/rest/ModBookingFileServices',\n 'ModFileServicesRQ',\n this.wrapRequest(payload)\n );\n }\n\n async setBookingFileStatus(\n payload: SetStatusRQ\n ): Promise<AvesResponseRoot<SetStatusServiceRS>> {\n return this.http.postXml(\n '/interop/booking/v2/rest/SetBookingFileStatus',\n 'SetStatusRQ',\n this.wrapRequest(payload)\n );\n }\n\n async cancelBookingFile(\n payload: CancelFileRQ\n ): Promise<AvesResponseRoot<CancelFileRS>> {\n return this.http.postXml(\n '/interop/booking/v2/rest/CancelBookingFile',\n 'CancelFileRQ',\n this.wrapRequest(payload)\n );\n }\n\n async insertFilePaymentList(\n payload: FilePaymentListRQ\n ): Promise<AvesResponseRoot<FilePaymentListRS>> {\n return this.http.postXml(\n '/interop/booking/v2/rest/InsertFilePaymentList',\n 'FilePaymentListRQ',\n this.wrapRequest(payload)\n );\n }\n\n // Documents\n async printBookingDocument(\n payload: PrintBookingDocumentRQ\n ): Promise<AvesResponseRoot<PrintBookingDocumentRS>> {\n return this.http.postXml(\n '/interop/document/v2/rest/PrintBookingDocument',\n 'PrintBookingDocumentRQ',\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","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 MiddleName: z.string().max(50).optional(),\n DateOfBirth: z.string().datetime().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 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 { z } from 'zod';\n\n// ===== TYPE SCHEMAS =====\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(['adult', 'child', 'infant']);\nexport const titleTypeSchema = z.enum(['mr', 'mrs', 'ms', 'dr', 'prof']);\nexport const genderTypeSchema = z.enum(['male', 'female']);\nexport const serviceTypeSchema = z.enum([\n 'flight',\n 'hotel',\n 'car',\n 'transfer',\n 'insurance',\n]);\nexport const serviceStatusTypeSchema = z.enum([\n 'confirmed',\n 'pending',\n 'cancelled',\n]);\nexport const paymentTypeSchema = z.enum([\n 'credit_card',\n 'debit_card',\n 'bank_transfer',\n 'cash',\n]);\nexport const paymentStatusTypeSchema = z.enum([\n 'pending',\n 'confirmed',\n 'failed',\n]);\nexport const customerTypeSchema = z.enum(['customer', 'agent', 'supplier']);\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 'customer_request',\n 'no_show',\n 'operational',\n 'other',\n]);\nexport const refundMethodTypeSchema = z.enum([\n 'original_payment',\n 'credit',\n 'cash',\n]);\nexport const documentTypeSchema = z.enum([\n 'confirmation',\n 'invoice',\n 'voucher',\n 'ticket',\n 'all',\n]);\nexport const documentFormatTypeSchema = z.enum(['pdf', 'html', 'xml']);\nexport const deliveryMethodTypeSchema = z.enum(['email', 'sms', 'download']);\nexport const bookingStatusTypeSchema = z.enum([\n 'pending',\n 'confirmed',\n 'cancelled',\n 'completed',\n]);\nexport const pricingItemTypeSchema = z.enum([\n 'service',\n 'tax',\n 'fee',\n 'discount',\n]);\nexport const deliveryStatusTypeSchema = z.enum(['sent', 'pending', 'failed']);\nexport const customerStatusTypeSchema = z.enum([\n 'active',\n 'inactive',\n 'suspended',\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 timeStringSchema = z\n .string()\n .regex(/^\\d{2}:\\d{2}:\\d{2}$/, 'Time must be in HH:MM:SS 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.string().optional(),\n city: z.string().optional(),\n state: z.string().optional(),\n postalCode: z.string().optional(),\n country: z.string().optional(),\n});\n\nexport const customerContactSchema = z.object({\n phone: z\n .object({\n type: contactTypeSchema.optional(),\n number: z.string().min(1, 'Phone number is required'),\n })\n .optional(),\n email: z\n .object({\n type: emailTypeSchema.optional(),\n address: z.string().email('Valid email address is required'),\n })\n .optional(),\n});\n\nexport const customerSchema = z.object({\n id: z.string().min(1, 'Customer ID is required'),\n type: customerTypeSchema,\n status: customerStatusTypeSchema,\n personalInfo: z\n .object({\n title: z.string().optional(),\n firstName: z.string().min(1, 'First name is required'),\n lastName: z.string().min(1, 'Last name is required'),\n middleName: z.string().optional(),\n dateOfBirth: dateStringSchema.optional(),\n gender: genderTypeSchema.optional(),\n nationality: z.string().optional(),\n })\n .optional(),\n contact: customerContactSchema.optional(),\n address: customerAddressSchema.optional(),\n businessInfo: z\n .object({\n companyName: z.string().optional(),\n taxId: z.string().optional(),\n licenseNumber: z.string().optional(),\n })\n .optional(),\n preferences: z\n .object({\n language: z.string().optional(),\n currency: z.string().optional(),\n communicationMethod: communicationMethodTypeSchema.optional(),\n })\n .optional(),\n});\n\nexport const bookingPassengerSchema = z.object({\n id: z.string().min(1, 'Passenger ID is required'),\n type: passengerTypeSchema,\n title: titleTypeSchema.optional(),\n firstName: z.string().min(1, 'First name is required'),\n lastName: z.string().min(1, 'Last name is required'),\n middleName: z.string().optional(),\n dateOfBirth: dateStringSchema.optional(),\n gender: genderTypeSchema.optional(),\n nationality: z.string().optional(),\n passport: z\n .object({\n number: z.string().min(1, 'Passport number is required'),\n expiryDate: dateStringSchema,\n issuingCountry: z.string().min(1, 'Issuing country is required'),\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.string().optional(),\n name: z.string().optional(),\n description: z.string().optional(),\n startDate: dateStringSchema.optional(),\n endDate: dateStringSchema.optional(),\n price: z\n .object({\n currency: z.string().min(1, 'Currency is required'),\n amount: z.number().positive('Amount must be positive'),\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.string().min(1, 'Currency is required'),\n amount: z.number().positive('Amount must be positive'),\n }),\n details: z\n .object({\n cardNumber: z.string().optional(),\n expiryDate: z.string().optional(),\n cardHolderName: z.string().optional(),\n })\n .optional(),\n});\n\n// ===== REQUEST SCHEMAS =====\n\nexport const searchCustomerRequestSchema = z.object({\n type: customerTypeSchema,\n fields: z\n .array(\n z.object({\n name: z.string().min(1, 'Field name is required'),\n value: z.string().min(1, 'Field value is required'),\n operator: searchOperatorTypeSchema.optional(),\n })\n )\n .min(1, 'At least one search field is required'),\n pagination: z\n .object({\n pageSize: z\n .number()\n .int()\n .positive('Page size must be a positive integer'),\n pageNumber: z.number().int().min(1, 'Page number must be at least 1'),\n })\n .optional(),\n});\n\nexport const createBookingRequestSchema = z.object({\n type: bookingTypeSchema,\n priority: priorityTypeSchema,\n customerId: z.string().optional(),\n customerDetails: customerSchema.optional(),\n passengers: z\n .array(bookingPassengerSchema)\n .min(1, 'At least one passenger is required'),\n services: z\n .array(bookingServiceSchema)\n .min(1, 'At least one service is required'),\n specialRequests: z\n .array(\n z.object({\n type: specialRequestTypeSchema,\n description: z\n .string()\n .min(1, 'Special request description is required'),\n })\n )\n .optional(),\n});\n\nexport const cancelBookingRequestSchema = z.object({\n bookingId: z.string().min(1, 'Booking ID is required'),\n reason: cancelReasonTypeSchema,\n description: z.string().optional(),\n refundRequest: z\n .object({\n amount: z.number().positive('Refund amount must be positive'),\n currency: z.string().min(1, 'Currency is required'),\n method: refundMethodTypeSchema,\n })\n .optional(),\n});\n\nexport const printDocumentRequestSchema = z.object({\n bookingId: z.string().min(1, 'Booking ID is required'),\n documentType: documentTypeSchema,\n format: documentFormatTypeSchema,\n language: z.string().optional(),\n deliveryMethod: z\n .object({\n type: deliveryMethodTypeSchema,\n address: z.string().optional(),\n })\n .optional(),\n});\n\nexport const addPaymentRequestSchema = z.object({\n bookingId: z.string().min(1, 'Booking ID is required'),\n payments: z\n .array(bookingPaymentSchema)\n .min(1, 'At least one payment is required'),\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.string().min(1, 'Currency is required'),\n amount: z.number().positive('Amount must be positive'),\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 searchResponseSchema = z.object({\n results: z.array(customerSchema),\n pagination: z\n .object({\n totalRecords: z.number().int().min(0),\n pageSize: z.number().int().positive(),\n pageNumber: z.number().int().min(1),\n totalPages: z.number().int().min(0),\n })\n .optional(),\n});\n\nexport const documentResponseSchema = z.object({\n id: z.string().min(1, 'Document ID is required'),\n type: z.string().min(1, 'Document type is required'),\n format: z.string().min(1, 'Document format is required'),\n size: z.number().int().positive('Document size must be positive'),\n createdAt: dateTimeStringSchema,\n downloadUrl: z.string().url('Download URL must be valid').optional(),\n deliveryStatus: z\n .object({\n status: deliveryStatusTypeSchema,\n method: z.string().min(1, 'Delivery method is required'),\n address: z.string().optional(),\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\n // Response schemas\n bookingResponse: bookingResponseSchema,\n searchResponse: searchResponseSchema,\n documentResponse: documentResponseSchema,\n operationResponse: operationResponseSchema,\n} as const;\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":"0vBAAA,IAAAA,GAAA,GAAAC,GAAAD,GAAA,2BAAAE,GAAA,oBAAAC,EAAA,sBAAAC,GAAA,mBAAAC,EAAA,qBAAAC,EAAA,kBAAAC,EAAA,eAAAC,EAAA,gBAAAC,EAAA,iBAAAC,EAAA,eAAAC,GAAA,kBAAAC,GAAA,yBAAAC,GAAA,2BAAAC,GAAA,0BAAAC,GAAA,2BAAAC,GAAA,wBAAAC,GAAA,sBAAAC,GAAA,qCAAAC,GAAA,mCAAAC,GAAA,sBAAAC,GAAA,oBAAAC,EAAA,kBAAAC,EAAA,4BAAAC,GAAA,sBAAAC,GAAA,eAAAC,GAAA,eAAAC,GAAA,2BAAAC,GAAA,yBAAAC,GAAA,0BAAAC,GAAA,yBAAAC,GAAA,4BAAAC,GAAA,sBAAAC,GAAA,+BAAAC,GAAA,2BAAAC,GAAA,kCAAAC,GAAA,2BAAAC,GAAA,sBAAAC,GAAA,wBAAAC,GAAA,+BAAAC,GAAA,qBAAAC,EAAA,yBAAAC,EAAA,qBAAAC,GAAA,0BAAAC,GAAA,0BAAAC,GAAA,mBAAAC,EAAA,6BAAAC,GAAA,uBAAAC,GAAA,6BAAAC,GAAA,6BAAAC,GAAA,6BAAAC,GAAA,2BAAAC,GAAA,uBAAAC,GAAA,oBAAAC,GAAA,qBAAAC,GAAA,uBAAAC,GAAA,oBAAAC,GAAA,0BAAAC,EAAA,wBAAAC,EAAA,sBAAAC,GAAA,8BAAAC,GAAA,wBAAAC,EAAA,0BAAAC,GAAA,yBAAAC,EAAA,6BAAAC,GAAA,oBAAAC,GAAA,0BAAAC,EAAA,wBAAAC,EAAA,0BAAAC,GAAA,qBAAAC,GAAA,yBAAAC,EAAA,2BAAAC,GAAA,2BAAAC,GAAA,+BAAAC,GAAA,yBAAAC,GAAA,wBAAAC,EAAA,sBAAAC,EAAA,2BAAAC,GAAA,sBAAAC,GAAA,4BAAAC,EAAA,0BAAAC,EAAA,8BAAAC,GAAA,4BAAAC,EAAA,0BAAAC,EAAA,oBAAAC,GAAA,0BAAAC,EAAA,wBAAAC,EAAA,0BAAAC,GAAA,qBAAAC,EAAA,yBAAAC,GAAA,2BAAAC,GAAA,2BAAAC,GAAA,6BAAAC,GAAA,4BAAAC,EAAA,0BAAAC,EAAA,oBAAAC,GAAA,0BAAAC,EAAA,wBAAAC,EAAA,+BAAAC,EAAA,oBAAAC,EAAA,kBAAAC,EAAA,4BAAAC,GAAA,wBAAAC,GAAA,4BAAAC,GAAA,sBAAAC,GAAA,0BAAAC,GAAA,+BAAAC,GAAA,uBAAAC,GAAA,2BAAAC,GAAA,gCAAAC,GAAA,6BAAAC,GAAA,yBAAAC,GAAA,4BAAAC,GAAA,sBAAAC,GAAA,6BAAAC,GAAA,oBAAAC,KAAA,eAAAC,GAAArH,IAAA,IAAAsH,GAAO,4BCAP,IAAAC,EAA0C,oBAOnC,IAAMC,EAAmBC,EAACC,GAAAA,CAC/B,IAAIC,EAEJ,GAAI,OAAOD,GAAS,SAAU,CAE5B,GAAI,CAAC,sBAAsBE,KAAKF,CAAAA,EAC9B,MAAM,IAAIG,MAAM,kDAAkDH,CAAAA,EAAM,EAG1E,GAAI,CACFC,KAAUG,YAASJ,CAAAA,CACrB,MAAQ,CACN,MAAM,IAAIG,MAAM,wBAAwBH,CAAAA,EAAM,CAChD,CACF,MACEC,EAAUD,EAIZ,GAAI,IAACK,WAAQJ,CAAAA,EACX,MAAM,IAAIE,MAAM,uBAAuBH,CAAAA,EAAM,EAK/C,SADsBM,UAAOL,EAAS,YAAA,CAExC,EA1BgC,oBAiCnBM,EAAuBR,EAACS,GAAAA,CACnC,IAAIP,EAEJ,GAAI,OAAOO,GAAa,SAAU,CAEhC,GAAI,CAAC,oDAAoDN,KAAKM,CAAAA,EAC5D,MAAM,IAAIL,MACR,oDAAoDK,CAAAA,EAAU,EAIlE,GAAI,CACFP,KAAUG,YAASI,CAAAA,CACrB,MAAQ,CACN,MAAM,IAAIL,MAAM,4BAA4BK,CAAAA,EAAU,CACxD,CACF,MACEP,EAAUO,EAIZ,GAAI,IAACH,WAAQJ,CAAAA,EACX,MAAM,IAAIE,MAAM,2BAA2BK,CAAAA,EAAU,EAKvD,SAD0BF,UAAOL,EAAS,8BAAA,CAE5C,EA5BoC,wBAmCvBQ,GAAmBV,EAACW,GAAAA,CAE/B,GAAI,CAAC,sBAAsBR,KAAKQ,CAAAA,EAC9B,MAAM,IAAIP,MAAM,gDAAgDO,CAAAA,EAAM,EAIxE,GAAM,CAACC,EAAOC,EAASC,CAAAA,EAAWH,EAAKI,MAAM,GAAA,EAAKC,IAAIC,MAAAA,EACtD,GACEL,EAAQ,GACRA,EAAQ,IACRC,EAAU,GACVA,EAAU,IACVC,EAAU,GACVA,EAAU,GAEV,MAAM,IAAIV,MAAM,uBAAuBO,CAAAA,EAAM,EAG/C,OAAOA,CACT,EApBgC,oBCzEzB,SAASO,EACdC,EAAY,CAQZ,MAN0E,CACxEC,KAAM,OACNC,KAAM,OACNC,QAAS,UACTC,SAAU,UACZ,EACeJ,CAAAA,GAAS,MAC1B,CAVgBD,EAAAA,EAAAA,uBAYT,SAASM,EACdL,EAAY,CAQZ,MAN0E,CACxEM,KAAM,OACNC,KAAM,OACNC,QAAS,UACTC,SAAU,UACZ,EACeT,CAAAA,GAAS,MAC1B,CAVgBK,EAAAA,EAAAA,yBAcT,SAASK,EACdV,EAAY,CAQZ,MANoE,CAClEC,KAAM,OACNC,KAAM,OACNS,OAAQ,SACRC,IAAK,KACP,EACeZ,CAAAA,GAAS,MAC1B,CAVgBU,EAAAA,EAAAA,uBAYT,SAASG,EACdb,EAAY,CAQZ,MANoE,CAClEM,KAAM,OACNC,KAAM,OACNO,OAAQ,SACRC,IAAK,KACP,EACef,CAAAA,GAAS,MAC1B,CAVgBa,EAAAA,EAAAA,yBAYT,SAASG,EAAkBhB,EAAY,CAK5C,MAJiD,CAC/CC,KAAM,OACNC,KAAM,MACR,EACeF,CAAAA,GAAS,MAC1B,CANgBgB,EAAAA,EAAAA,qBAQT,SAASC,EAAoBjB,EAAY,CAK9C,MAJiD,CAC/CM,KAAM,OACNC,KAAM,MACR,EACeP,CAAAA,GAAS,MAC1B,CANgBiB,EAAAA,EAAAA,uBAUT,SAASC,EAAsBlB,EAAY,CAMhD,MALuD,CACrDmB,MAAO,MACPC,MAAO,MACPC,OAAQ,KACV,EACerB,CAAAA,GAAS,KAC1B,CAPgBkB,EAAAA,EAAAA,yBAST,SAASI,EACdtB,EAAY,CAOZ,MAL8D,CAC5DuB,IAAK,QACLC,IAAK,QACLC,IAAK,QACP,EACezB,CAAAA,GAAS,OAC1B,CATgBsB,EAAAA,EAAAA,2BAWT,SAASI,EACdC,EAAa,CASb,MAPqE,CACnEC,GAAI,KACJC,IAAK,MACLC,GAAI,KACJC,GAAI,KACJC,KAAM,MACR,EACeL,CAAAA,GAAU,IAC3B,CAXgBD,EAAAA,EAAAA,iBAaT,SAASO,EACdN,EAAa,CASb,MAPqE,CACnEO,GAAI,KACJC,IAAK,MACLC,GAAI,KACJC,GAAI,KACJC,KAAM,MACR,EACeX,CAAAA,GAAU,IAC3B,CAXgBM,EAAAA,EAAAA,mBAeT,SAASM,EACdvC,EAAY,CAYZ,MAPI,CACFwC,OAAQ,SACRC,MAAO,QACPC,IAAK,MACLC,SAAU,WACVC,UAAW,WACb,EACe5C,CAAAA,GAAS,QAC1B,CAdgBuC,EAAAA,EAAAA,uBAgBT,SAASM,EACd7C,EAAY,CAYZ,MAPI,CACF8C,OAAQ,SACRC,MAAO,QACPC,IAAK,MACLC,SAAU,WACVC,UAAW,WACb,EACelD,CAAAA,GAAS,QAC1B,CAdgB6C,EAAAA,EAAAA,yBAgBT,SAASM,EACdC,EAAc,CAOd,MALuE,CACrEC,UAAW,YACXC,QAAS,UACTC,UAAW,WACb,EACeH,CAAAA,GAAW,SAC5B,CATgBD,EAAAA,EAAAA,yBAWT,SAASK,EACdJ,EAAc,CAOd,MALuE,CACrEK,UAAW,YACXC,QAAS,UACTC,UAAW,WACb,EACeP,CAAAA,GAAW,SAC5B,CATgBI,EAAAA,EAAAA,2BAaT,SAASI,EACd5D,EAAY,CAWZ,MANI,CACF6D,YAAa,cACbC,WAAY,aACZC,cAAe,gBACfC,KAAM,MACR,EACehE,CAAAA,GAAS,MAC1B,CAbgB4D,EAAAA,EAAAA,uBAeT,SAASK,EACdjE,EAAY,CAWZ,MANI,CACFkE,YAAa,cACbC,WAAY,aACZC,cAAe,gBACfC,KAAM,MACR,EACerE,CAAAA,GAAS,MAC1B,CAbgBiE,EAAAA,EAAAA,yBAeT,SAASK,EACdlB,EAAc,CAOd,MALoE,CAClEE,QAAS,UACTD,UAAW,YACXkB,OAAQ,QACV,EACenB,CAAAA,GAAW,SAC5B,CATgBkB,EAAAA,EAAAA,yBAWT,SAASE,EACdpB,EAAc,CAOd,MALoE,CAClEM,QAAS,UACTD,UAAW,YACXgB,OAAQ,QACV,EACerB,CAAAA,GAAW,SAC5B,CATgBoB,EAAAA,EAAAA,2BAaT,SAASE,EACd1E,EAAY,CAOZ,MALmE,CACjE2E,SAAU,WACVC,MAAO,QACPC,SAAU,UACZ,EACe7E,CAAAA,GAAS,UAC1B,CATgB0E,EAAAA,EAAAA,wBAWT,SAASI,GACd9E,EAAY,CAOZ,MALmE,CACjE+E,SAAU,WACVC,MAAO,QACPC,SAAU,UACZ,EACejF,CAAAA,GAAS,UAC1B,CATgB8E,EAAAA,GAAAA,0BAWT,SAASI,GACd9B,EAAc,CAOd,MALqE,CACnE+B,OAAQ,SACRC,SAAU,WACVC,UAAW,WACb,EACejC,CAAAA,GAAW,QAC5B,CATgB8B,EAAAA,GAAAA,0BAWT,SAASI,GACdlC,EAAc,CAOd,MALqE,CACnEmC,OAAQ,SACRC,SAAU,WACVC,UAAW,WACb,EACerC,CAAAA,GAAW,QAC5B,CATgBkC,EAAAA,GAAAA,4BAWT,SAASI,GACdC,EAAc,CAOd,MAL2D,CACzDC,MAAO,QACPC,IAAK,MACLC,MAAO,OACT,EACeH,CAAAA,GAAW,OAC5B,CATgBD,EAAAA,GAAAA,+BAWT,SAASK,GACdJ,EAAc,CAOd,MAL2D,CACzDK,MAAO,QACPC,IAAK,MACLC,MAAO,OACT,EACeP,CAAAA,GAAW,OAC5B,CATgBI,EAAAA,GAAAA,iCAaT,SAASI,EACdnG,EAAY,CAOZ,MALsE,CACpEoG,WAAY,aACZC,MAAO,QACPC,UAAW,WACb,EACetG,CAAAA,GAAS,YAC1B,CATgBmG,EAAAA,EAAAA,uBA0BT,SAASI,GACdC,EAAc,CAWd,MANI,CACFC,QAAS,UACTC,UAAW,YACXC,UAAW,YACXC,UAAW,WACb,EACeJ,CAAAA,GAAW,SAC5B,CAbgBD,EAAAA,GAAAA,2BAeT,SAASM,EACdC,EAAgB,CAQhB,MANsE,CACpEC,IAAK,MACLC,OAAQ,SACRC,KAAM,OACNC,OAAQ,QACV,EACeJ,CAAAA,GAAa,QAC9B,CAVgBD,EAAAA,EAAAA,oBAcT,SAASM,EACdC,EAAY,CAQZ,MAN0E,CACxEC,KAAM,OACNC,KAAM,OACNC,WAAY,aACZC,MAAO,OACT,EACeJ,CAAAA,GAAS,OAC1B,CAVgBD,EAAAA,EAAAA,8BAcT,SAASM,EACdC,EAAc,CAWd,MANI,CACFC,iBAAkB,mBAClBC,QAAS,UACTC,YAAa,cACbL,MAAO,OACT,EACeE,CAAAA,GAAW,OAC5B,CAbgBD,EAAAA,EAAAA,wBAeT,SAASK,GACdC,EAAc,CAOd,MALwE,CACtEC,iBAAkB,mBAClBC,OAAQ,SACRC,KAAM,MACR,EACeH,CAAAA,GAAW,MAC5B,CATgBD,EAAAA,GAAAA,wBAaT,SAASK,GACdf,EAAY,CAYZ,MAPI,CACFgB,aAAc,eACdC,QAAS,UACTC,QAAS,UACTC,OAAQ,SACRC,IAAK,KACP,EACepB,CAAAA,GAAS,KAC1B,CAdgBe,EAAAA,GAAAA,wBAgBT,SAASM,GAAuBC,EAAc,CAMnD,MALwD,CACtDC,IAAK,MACLC,KAAM,OACNC,IAAK,KACP,EACeH,CAAAA,GAAW,KAC5B,CAPgBD,EAAAA,GAAAA,0BAST,SAASK,GACdf,EAAc,CAOd,MAL8D,CAC5DgB,MAAO,QACPC,IAAK,MACLC,SAAU,UACZ,EACelB,CAAAA,GAAW,OAC5B,CATgBe,EAAAA,GAAAA,0BAaT,SAASI,GACdC,EAAgB,CAWhB,MANI,CACFC,OAAQ,SACRC,SAAU,WACVC,YAAa,cACbC,UAAW,WACb,EACeJ,CAAAA,GAAa,QAC9B,CAbgBD,EAAAA,GAAAA,0BAiBT,SAASM,GACdpC,EAAY,CAQZ,MANwE,CACtEqC,QAAS,UACTC,IAAK,MACLC,IAAK,MACLC,SAAU,UACZ,EACexC,CAAAA,GAAS,SAC1B,CAVgBoC,EAAAA,GAAAA,6BAcT,SAASK,GACdrD,EAAc,CAOd,MAL+D,CAC7DsD,KAAM,OACNrD,QAAS,UACTsD,OAAQ,QACV,EACevD,CAAAA,GAAW,SAC5B,CATgBqD,EAAAA,GAAAA,4BAWT,SAASG,GAAeC,EAAc,CAK3C,MAJ2C,CACzCC,KAAM,IACNC,OAAQ,GACV,EACeF,CAAAA,GAAW,GAC5B,CANgBD,EAAAA,GAAAA,kBAQT,SAASI,GAAiBH,EAAc,CAK7C,MAJmD,CACjDI,EAAG,OACHC,EAAG,QACL,EACeL,CAAAA,GAAW,MAC5B,CANgBG,EAAAA,GAAAA,oBCjaT,SAASG,GAAgBC,EAAsB,CACpD,MAAO,CACL,QAASA,EAAMC,KAAOC,EAAoBF,EAAMC,IAAI,EAAIE,OACxDC,OAAQJ,EAAMK,OACdC,KAAMN,EAAMO,KACZC,MAAOR,EAAMS,MACbC,WAAYV,EAAMW,WAClBC,QAASZ,EAAMa,OACjB,CACF,CATgBd,EAAAA,GAAAA,mBAWT,SAASe,GAAkBC,EAAe,CAC/C,MAAO,CACLd,KAAMc,EAAI,OAAA,EAAWC,EAAsBD,EAAI,OAAA,CAAQ,EAAIZ,OAC3DE,OAAQU,EAAIX,OACZG,KAAMQ,EAAIT,KACVG,MAAOM,EAAIP,MACXG,WAAYI,EAAIL,WAChBG,QAASE,EAAIH,OACf,CACF,CATgBE,EAAAA,GAAAA,qBAaT,SAASG,GAAgBjB,EAAsB,CACpD,MAAO,CACLkB,MAAOlB,EAAMmB,MACT,CACE,QAASnB,EAAMmB,MAAMlB,KACjBmB,EAAoBpB,EAAMmB,MAAMlB,IAAI,EACpCE,OACJ,UAAWH,EAAMmB,MAAME,MACzB,EACAlB,OACJmB,MAAOtB,EAAMuB,MACT,CACE,QAASvB,EAAMuB,MAAMtB,KACjBuB,EAAkBxB,EAAMuB,MAAMtB,IAAI,EAClCE,OACJ,WAAYH,EAAMuB,MAAME,OAC1B,EACAtB,MACN,CACF,CAnBgBc,EAAAA,GAAAA,mBAqBT,SAASS,GAAkBX,EAAmB,CACnD,MAAO,CACLI,MAAOJ,EAAIG,MACP,CACEjB,KAAMc,EAAIG,MAAM,OAAA,EACZS,EAAsBZ,EAAIG,MAAM,OAAA,CAAQ,EACxCf,OACJkB,OAAQN,EAAIG,MAAM,SAAA,CACpB,EACAf,OACJoB,MAAOR,EAAIO,MACP,CACErB,KAAMc,EAAIO,MAAM,OAAA,EACZM,EAAoBb,EAAIO,MAAM,OAAA,CAAQ,EACtCnB,OACJsB,QAASV,EAAIO,MAAM,UAAA,CACrB,EACAnB,MACN,CACF,CAnBgBuB,EAAAA,GAAAA,qBAuBT,SAASG,GAAkB7B,EAAuB,CACvD,MAAO,CACL,eAAgBA,EAAM8B,GACtB,QAASC,EAAsB/B,EAAMC,IAAI,EACzC,SAAUD,EAAMgC,MAAQC,EAAcjC,EAAMgC,KAAK,EAAI7B,OACrD+B,UAAWlC,EAAMmC,UACjBC,SAAUpC,EAAMqC,SAChBC,WAAYtC,EAAMuC,WAClBC,YAAaxC,EAAMyC,YACnBC,OAAQ1C,EAAM2C,OAASC,GAAe5C,EAAM2C,MAAM,EAAIxC,OACtD0C,YAAa7C,EAAM8C,YACnBC,SAAU/C,EAAMgD,SACZ,CACE,UAAWhD,EAAMgD,SAAS3B,OAC1B,cAAerB,EAAMgD,SAASC,WAC9B,kBAAmBjD,EAAMgD,SAASE,cACpC,EACA/C,OACJgD,QAASnD,EAAMyB,QAAU1B,GAAgBC,EAAMyB,OAAO,EAAItB,OAC1DiD,YAAapD,EAAMqD,QAAUpC,GAAgBjB,EAAMqD,OAAO,EAAIlD,MAChE,CACF,CArBgB0B,EAAAA,GAAAA,qBAuBT,SAASyB,GAAoBvC,EAAiB,CACnD,MAAO,CACLe,GAAIf,EAAI,cAAA,EACRd,KAAMsD,EAAwBxC,EAAI,OAAA,CAAQ,EAC1CiB,MAAOjB,EAAI,QAAA,EAAYyC,EAAgBzC,EAAI,QAAA,CAAS,EAAIZ,OACxDgC,UAAWpB,EAAImB,UACfG,SAAUtB,EAAIqB,SACdG,WAAYxB,EAAIuB,WAChBG,YAAa1B,EAAIyB,YACbiB,EAAiB1C,EAAIyB,WAAW,EAChCrC,OACJwC,OAAQ5B,EAAI2B,OAASgB,GAAiB3C,EAAI2B,MAAM,EAAIvC,OACpD2C,YAAa/B,EAAI8B,YACjBG,SAAUjC,EAAIgC,SACV,CACE1B,OAAQN,EAAIgC,SAAS,SAAA,EACrBE,WAAYQ,EAAiB1C,EAAIgC,SAAS,aAAA,CAAc,EACxDG,eAAgBnC,EAAIgC,SAAS,iBAAA,CAC/B,EACA5C,OACJsB,QAASV,EAAIoC,QAAUrC,GAAkBC,EAAIoC,OAAO,EAAIhD,OACxDkD,QAAStC,EAAIqC,YAAc1B,GAAkBX,EAAIqC,WAAW,EAAIjD,MAClE,CACF,CAvBgBmD,EAAAA,GAAAA,uBA2BT,SAASK,GAAgB3D,EAAqB,CACnD,MAAO,CACL,aAAcA,EAAM8B,GACpB,QAAS8B,EAAoB5D,EAAMC,IAAI,EACvC,UAAW4D,EAAsB7D,EAAM8D,MAAM,EAC7CC,eAAgB,CACdC,KAAMhE,EAAMiE,KACZC,KAAMlE,EAAMmE,KACZC,YAAapE,EAAMqE,YACnBC,UAAWtE,EAAMuE,UACjBC,QAASxE,EAAMyE,QACfC,MAAO1E,EAAM2E,MACT,CACE,YAAa3E,EAAM2E,MAAMC,SACzB,UAAW5E,EAAM2E,MAAME,MACzB,EACA1E,MACN,CACF,CACF,CAnBgBwD,EAAAA,GAAAA,mBAqBT,SAASmB,GAAkB/D,EAAe,CAC/C,MAAO,CACLe,GAAIf,EAAI,YAAA,EACRd,KAAM8E,EAAsBhE,EAAI,OAAA,CAAQ,EACxC+C,OAAQkB,EAAwBjE,EAAI,SAAA,CAAU,EAC9CkD,KAAMlD,EAAIgD,eAAeC,KACzBG,KAAMpD,EAAIgD,eAAeG,KACzBG,YAAatD,EAAIgD,eAAeK,YAChCG,UAAWxD,EAAIgD,eAAeO,UAC1Bb,EAAiB1C,EAAIgD,eAAeO,SAAS,EAC7CnE,OACJsE,QAAS1D,EAAIgD,eAAeS,QACxBf,EAAiB1C,EAAIgD,eAAeS,OAAO,EAC3CrE,OACJwE,MAAO5D,EAAIgD,eAAeW,MACtB,CACEE,SAAU7D,EAAIgD,eAAeW,MAAM,WAAA,EACnCG,OAAQ9D,EAAIgD,eAAeW,MAAM,SAAA,CACnC,EACAvE,MACN,CACF,CArBgB2E,EAAAA,GAAAA,qBAyBT,SAASG,GAAgBjF,EAAqB,CACnD,MAAO,CACL,aAAcA,EAAM8B,GACpB,QAASoD,EAAoBlF,EAAMC,IAAI,EACvC,UAAWkF,EAAsBnF,EAAM8D,MAAM,EAC7CsB,OAAQ,CACN,YAAapF,EAAM6E,OAAOD,SAC1B,UAAW5E,EAAM6E,OAAOA,MAC1B,EACAQ,eAAgBrF,EAAMsF,QAClB,CACEC,WAAYvF,EAAMsF,QAAQE,WAC1BC,WAAYzF,EAAMsF,QAAQrC,WAC1ByC,eAAgB1F,EAAMsF,QAAQK,cAChC,EACAxF,MACN,CACF,CAjBgB8E,EAAAA,GAAAA,mBAmBT,SAASW,GAAkB7E,EAAe,CAC/C,MAAO,CACLe,GAAIf,EAAI,YAAA,EACRd,KAAM4F,EAAsB9E,EAAI,OAAA,CAAQ,EACxC+C,OAAQgC,EAAwB/E,EAAI,SAAA,CAAU,EAC9C8D,OAAQ,CACND,SAAU7D,EAAIqE,OAAO,WAAA,EACrBP,OAAQ9D,EAAIqE,OAAO,SAAA,CACrB,EACAE,QAASvE,EAAIsE,eACT,CACEG,WAAYzE,EAAIsE,eAAeE,WAC/BtC,WAAYlC,EAAIsE,eAAeI,WAC/BE,eAAgB5E,EAAIsE,eAAeK,cACrC,EACAvF,MACN,CACF,CAjBgByF,EAAAA,GAAAA,qBAqBT,SAASG,GACd/F,EAA4B,CAE5B,MAAO,CACLgG,eAAgB,CACdC,iBAAkBC,EAAqBlG,EAAMC,IAAI,EACjDkG,aAAc,CACZC,MAAOpG,EAAMqG,OAAOC,IAAKC,IAAW,CAClC,QAASA,EAAMpC,KACf,SAAUoC,EAAMC,MAChB,YAAaD,EAAME,SACfC,GAAuBH,EAAME,QAAQ,EACrCtG,MACN,EAAA,CACF,EACAwG,WAAY3G,EAAM4G,WACd,CACE,YAAa5G,EAAM4G,WAAWC,SAC9B,cAAe7G,EAAM4G,WAAWE,UAClC,EACA3G,MACN,CACF,CACF,CAvBgB4F,EAAAA,GAAAA,0BAyBT,SAASgB,GAAiB/G,EAAe,CAC9C,MAAO,CACL,kBAAmBA,EAAM8B,GACzB,QAASoE,EAAqBlG,EAAMC,IAAI,EACxC,UAAW+G,GAAuBhH,EAAM8D,MAAM,EAC9CmD,aAAcjH,EAAMkH,aAChB,CACEC,MAAOnH,EAAMkH,aAAalF,MAC1BE,UAAWlC,EAAMkH,aAAa/E,UAC9BC,SAAUpC,EAAMkH,aAAa7E,SAC7BC,WAAYtC,EAAMkH,aAAa3E,WAC/BC,YAAaxC,EAAMkH,aAAazE,YAChCC,OAAQ1C,EAAMkH,aAAavE,OACvBC,GAAe5C,EAAMkH,aAAavE,MAAM,EACxCxC,OACJ0C,YAAa7C,EAAMkH,aAAapE,WAClC,EACA3C,OACJiD,YAAapD,EAAMqD,QAAUpC,GAAgBjB,EAAMqD,OAAO,EAAIlD,OAC9DgD,QAASnD,EAAMyB,QAAU1B,GAAgBC,EAAMyB,OAAO,EAAItB,OAC1DiH,aAAcpH,EAAMqH,aAChB,CACEC,YAAatH,EAAMqH,aAAaE,YAChCC,MAAOxH,EAAMqH,aAAaI,MAC1BC,cAAe1H,EAAMqH,aAAaM,aACpC,EACAxH,OACJyH,YAAa5H,EAAM6H,YACf,CACEC,SAAU9H,EAAM6H,YAAYE,SAC5BC,SAAUhI,EAAM6H,YAAYjD,SAC5BqD,oBAAqBjI,EAAM6H,YAAYK,oBACnCC,GAA4BnI,EAAM6H,YAAYK,mBAAmB,EACjE/H,MACN,EACAA,MACN,CACF,CArCgB4G,EAAAA,GAAAA,oBAuCT,SAASqB,GAAsBpI,EAA2B,CAC/D,MAAO,CACLqI,eAAgB,CACd,eAAgBC,EAAoBtI,EAAMC,IAAI,EAC9C,YAAasI,EAAiBvI,EAAMwI,QAAQ,EAC5CC,aAAc,CACZ,cAAezI,EAAM0I,WACrBC,gBAAiB3I,EAAM4I,gBACnB7B,GAAiB/G,EAAM4I,eAAe,EACtCzI,MACN,EACA0I,cAAe,CACbC,UAAW9I,EAAM+I,WAAWzC,IAAIzE,EAAAA,CAClC,EACAmH,oBAAqB,CACnBC,QAASjJ,EAAMkJ,SAAS5C,IAAI3C,EAAAA,CAC9B,EACAwF,gBAAiBnJ,EAAMoJ,gBACnB,CACEC,QAASrJ,EAAMoJ,gBAAgB9C,IAAKgD,IAAS,CAC3C,QAASC,EAA2BD,EAAIrJ,IAAI,EAC5C,eAAgBqJ,EAAIjF,WACtB,EAAA,CACF,EACAlE,MACN,CACF,CACF,CA3BgBiI,EAAAA,GAAAA,yBA6BT,SAASoB,GACdxJ,EAA2B,CAE3B,MAAO,CACL,iBAAkBA,EAAMyJ,UACxBC,oBAAqB,CACnB,UAAWC,EAAqB3J,EAAM4J,MAAM,EAC5C,eAAgB5J,EAAMqE,YACtBwF,cAAe7J,EAAM8J,cACjB,CACE,UAAW9J,EAAM8J,cAAcjF,OAC/B,YAAa7E,EAAM8J,cAAclF,SACjC,UAAWmF,GAAqB/J,EAAM8J,cAAcE,MAAM,CAC5D,EACA7J,MACN,CACF,CACF,CAjBgBqJ,EAAAA,GAAAA,yBAmBT,SAASS,GACdjK,EAA2B,CAE3B,MAAO,CACL,iBAAkBA,EAAMyJ,UACxBS,gBAAiB,CACf,gBAAiBC,GAAqBnK,EAAMoK,YAAY,EACxD,UAAWC,GAAuBrK,EAAMsK,MAAM,EAC9C,YAAatK,EAAM+H,SACnBwC,eAAgBvK,EAAMwK,eAClB,CACE,QAASC,GAAuBzK,EAAMwK,eAAevK,IAAI,EACzD,WAAYD,EAAMwK,eAAe/I,OACnC,EACAtB,MACN,CACF,CACF,CAjBgB8J,EAAAA,GAAAA,yBAmBT,SAASS,GACd1K,EAAwB,CAExB,MAAO,CACL,iBAAkBA,EAAMyJ,UACxBkB,YAAa,CACXC,QAAS5K,EAAM6K,SAASvE,IAAIrB,EAAAA,CAC9B,CACF,CACF,CATgByF,EAAAA,GAAAA,sBC3WT,SAASI,GAAmBC,EAAiB,CAClD,MAAO,CACLC,GAAID,EAAI,iBAAA,EACRE,KAAMC,GAAuBH,EAAI,OAAA,CAAQ,EACzCI,OAAQC,GAAyBL,EAAI,SAAA,CAAU,EAC/CM,aAAcN,EAAIO,aACd,CACEC,MAAOR,EAAIO,aAAaE,MACxBC,UAAWV,EAAIO,aAAaI,UAC5BC,SAAUZ,EAAIO,aAAaM,SAC3BC,WAAYd,EAAIO,aAAaQ,WAC7BC,YAAahB,EAAIO,aAAaU,YAC1BC,EAAiBlB,EAAIO,aAAaU,WAAW,EAC7CE,OACJC,OAAQpB,EAAIO,aAAac,SAAW,IAAM,OAAS,SACnDC,YAAatB,EAAIO,aAAagB,WAChC,EACAJ,OACJK,QAASxB,EAAIyB,YAAcC,GAAkB1B,EAAIyB,WAAW,EAAIN,OAChEQ,QAAS3B,EAAI4B,QAAUC,GAAkB7B,EAAI4B,OAAO,EAAIT,OACxDW,aAAc9B,EAAI+B,aACd,CACEC,YAAahC,EAAI+B,aAAaE,YAC9BC,MAAOlC,EAAI+B,aAAaI,MACxBC,cAAepC,EAAI+B,aAAaM,aAClC,EACAlB,OACJmB,YAAatC,EAAIuC,YACb,CACEC,SAAUxC,EAAIuC,YAAYE,SAC1BC,SAAU1C,EAAIuC,YAAYI,SAC1BC,oBAAqB5C,EAAIuC,YAAYM,oBACjCC,GAA8B9C,EAAIuC,YAAYM,mBAAmB,EACjE1B,MACN,EACAA,MACN,CACF,CArCgBpB,EAAAA,GAAAA,sBAyCT,SAASgD,GAAkB/C,EAAgB,CAChD,MAAO,CACLC,GAAID,EAAI,gBAAA,EACRI,OAAQ4C,GAAwBhD,EAAI,SAAA,CAAU,EAC9CiD,UAAWC,EAAqBlD,EAAI,eAAA,CAAgB,EACpDmD,UAAWD,EAAqBlD,EAAI,eAAA,CAAgB,EACpDoD,SAAUrD,GAAmBC,EAAIqD,YAAY,EAC7CC,WAAYtD,EAAIuD,cAAcC,UAAUC,IAAIC,EAAAA,EAC5CC,SAAU3D,EAAI4D,YAAYC,QAAQJ,IAAIK,EAAAA,EACtCC,QAAS,CACPC,YAAa,CACXtB,SAAU1C,EAAIiE,QAAQC,YAAY,WAAA,EAClCC,OAAQnE,EAAIiE,QAAQC,YAAY,SAAA,CAClC,EACAE,WAAYpE,EAAIiE,QAAQI,WAAWC,KAAKb,IAAKc,IAAU,CACrDrE,KAAMsE,GAA0BD,EAAK,OAAA,CAAQ,EAC7CE,YAAaF,EAAK,cAAA,EAClBJ,OAAQI,EAAK,SAAA,CACf,EAAA,CACF,CACF,CACF,CArBgBxB,EAAAA,GAAAA,qBAuBT,SAAS2B,GACd1E,EAAkB,CAElB,IAAM2E,EAAU5B,GAAkB/C,EAAI4E,WAAW,EACjD,MAAO,CACL,GAAGD,EACHE,QAAS7E,EAAI8E,gBAAgB,SAAA,IAAe,UAC5CC,QAAS/E,EAAI8E,gBAAgB,UAAA,EAC7BE,KAAML,CACR,CACF,CAVgBD,EAAAA,GAAAA,6BAcT,SAASO,GACdjF,EAAyB,CAEzB,MAAO,CACLkF,QAASlF,EAAImF,cAAcC,aAAa3B,IAAI1D,EAAAA,EAC5CsF,WAAYrF,EAAImF,cAAcG,eAC1B,CACEC,aAAcvF,EAAImF,cAAcG,eAAe,eAAA,EAC/CE,SAAUxF,EAAImF,cAAcG,eAAe,WAAA,EAC3CG,WAAYzF,EAAImF,cAAcG,eAAe,aAAA,EAC7CI,WAAY1F,EAAImF,cAAcG,eAAe,aAAA,CAC/C,EACAnE,MACN,CACF,CAdgB8D,EAAAA,GAAAA,4BAkBT,SAASU,GACd3F,EAA2B,CAE3B,MAAO,CACLC,GAAID,EAAI4F,aAAa,aAAA,EACrB1F,KAAMF,EAAI4F,aAAa,eAAA,EACvBC,OAAQ7F,EAAI4F,aAAa,SAAA,EACzBE,KAAM9F,EAAI4F,aAAa,OAAA,EACvB3C,UAAWC,EAAqBlD,EAAI4F,aAAa,eAAA,CAAgB,EACjEG,YAAa/F,EAAI4F,aAAaI,YAC9BC,eAAgBjG,EAAI4F,aAAaM,eAC7B,CACE9F,OAAQ+F,GACNnG,EAAI4F,aAAaM,eAAe,SAAA,CAAU,EAE5CE,OAAQpG,EAAI4F,aAAaM,eAAe,SAAA,EACxCvE,QAAS3B,EAAI4F,aAAaM,eAAe,UAAA,CAC3C,EACA/E,OACJ0D,QAAS7E,EAAI8E,gBAAgB,SAAA,IAAe,UAC5CC,QAAS/E,EAAI8E,gBAAgB,UAAA,CAC/B,CACF,CAtBgBa,EAAAA,GAAAA,8BA0BT,SAASU,GAAyBrG,EAAiB,CACxD,MAAO,CACL6E,QAAS7E,EAAI8E,gBAAgB,SAAA,IAAe,UAC5CC,QAAS/E,EAAI8E,gBAAgB,UAAA,EAC7BE,KAAM,CACJsB,WAAYtG,EAAI8E,gBAAgByB,WAC5B,CACEC,aAAcxG,EAAI8E,gBAAgByB,WAAW,eAAA,EAC7C7D,SAAU1C,EAAI8E,gBAAgByB,WAAW,WAAA,EACzCE,aAAczG,EAAI8E,gBAAgByB,WAAW,eAAA,EAC7CG,eAAgB1G,EAAI8E,gBAAgByB,WAAW,iBAAA,CACjD,EACApF,MACN,CACF,CACF,CAfgBkF,EAAAA,GAAAA,4BAmBT,SAASM,GACd3G,EAAsB,CAEtB,IAAM2E,EAAU5B,GAAkB/C,EAAI4E,WAAW,EACjD,MAAO,CACLC,QAAS7E,EAAI8E,gBAAgB,SAAA,IAAe,UAC5CC,QAAS/E,EAAI8E,gBAAgB,UAAA,EAC7BE,KAAM,CACJL,QAAAA,EACAiC,eAAgB,CACdC,UAAW,CACTnE,SAAU1C,EAAI8G,eAAeC,UAAU,WAAA,EACvC5C,OAAQnE,EAAI8G,eAAeC,UAAU,SAAA,CACvC,EACAC,kBAAmB,CACjBtE,SAAU1C,EAAI8G,eAAeG,kBAAkB,WAAA,EAC/C9C,OAAQnE,EAAI8G,eAAeG,kBAAkB,SAAA,CAC/C,EACAC,eACElH,EAAI8G,eAAeK,eAAeC,QAAQ3D,IAAI4D,EAAAA,CAClD,CACF,CACF,CACF,CAvBgBV,EAAAA,GAAAA,6BA2BT,SAASW,GAAuBtH,EAAiB,CACtD,MAAO,CACLC,GAAID,EAAI,iBAAA,EACRE,KAAMF,EAAI,OAAA,EAASuH,YAAW,EAC9BnH,OAAQJ,EAAI,SAAA,EAAWuH,YAAW,EAClCjH,aAAcN,EAAIO,aACd,CACEC,MAAOR,EAAIO,aAAaE,MACxBC,UAAWV,EAAIO,aAAaI,UAC5BC,SAAUZ,EAAIO,aAAaM,SAC3BC,WAAYd,EAAIO,aAAaQ,WAC7BC,YAAahB,EAAIO,aAAaU,YAC9BG,OAAQpB,EAAIO,aAAac,QAAQkG,YAAAA,EACjCjG,YAAatB,EAAIO,aAAagB,WAChC,EACAJ,OACJK,QAASxB,EAAIyB,YAAcC,GAAkB1B,EAAIyB,WAAW,EAAIN,OAChEQ,QAAS3B,EAAI4B,QAAUC,GAAkB7B,EAAI4B,OAAO,EAAIT,OACxDW,aAAc9B,EAAI+B,aACd,CACEC,YAAahC,EAAI+B,aAAaE,YAC9BC,MAAOlC,EAAI+B,aAAaI,MACxBC,cAAepC,EAAI+B,aAAaM,aAClC,EACAlB,OACJmB,YAAatC,EAAIuC,YACb,CACEC,SAAUxC,EAAIuC,YAAYE,SAC1BC,SAAU1C,EAAIuC,YAAYI,SAC1BC,oBACE5C,EAAIuC,YAAYM,qBAAqB0E,YAAAA,CACzC,EACApG,MACN,CACF,CAlCgBmG,EAAAA,GAAAA,0BC5MhB,IAAAE,GAOO,0BACPC,GAA6B,0BCR7B,IAAAC,EAAmC,0BCA5B,IAAMC,EAAkBC,OAAO,iBAAA,EACzBC,EAAkBD,OAAO,iBAAA,ECC/B,IAAME,GAAN,MAAMA,EAAAA,CAIX,YAAYC,EAA0C,CAHtDC,EAAAA,iBACAC,EAAAA,aAGEC,OAAOC,OAAO,KAAMJ,CAAAA,CACtB,CACF,EAPaD,EAAAA,GAAAA,kBAAN,IAAMA,GAANM,GASMC,GAAN,MAAMA,EAAAA,CAGX,YAAYN,EAA4B,CAFxCO,EAAAA,gBAGE,KAAKA,QAAU,IAAIR,GAAeC,CAAAA,CACpC,CACF,EANaM,EAAAA,GAAAA,kBAAN,IAAMA,GAANE,oiBFoBA,IAAMC,GAAN,MAAMA,EAAAA,CACX,YAC4CC,EACAC,EAC1C,sCAF0CD,OAAAA,OACAC,KAAAA,CACzC,CAEKC,aAAwB,CAC9B,GAAM,CAAEC,OAAAA,EAAQC,OAAAA,EAAQC,aAAAA,CAAY,EAAK,KAAKL,OAC9C,MAAO,CACL,UAAWG,EACX,UAAWC,EACX,aAAc,MACd,YAAa,MACb,gBAAiBC,CACnB,CACF,CAEQC,YAAeC,EAA4B,CACjD,OAAO,IAAIC,GAAe,CACxBC,SAAU,KAAKP,YAAW,EAC1BQ,KAAMH,CACR,CAAA,CACF,CAGA,MAAMI,mBACJC,EACiD,CACjD,OAAO,KAAKX,KAAKY,QACf,wCACA,uBACA,KAAKP,YAAYM,CAAAA,CAAAA,CAErB,CAEA,MAAME,2BACJF,EAC6C,CAC7C,OAAO,KAAKX,KAAKY,QACf,gDACA,uBACA,KAAKP,YAAYM,CAAAA,CAAAA,CAErB,CAGA,MAAMG,kBACJH,EAC0C,CAC1C,OAAO,KAAKX,KAAKY,QACf,6CACA,aACA,KAAKP,YAAYM,CAAAA,CAAAA,CAErB,CAEA,MAAMI,qBACJJ,EAC6C,CAC7C,OAAO,KAAKX,KAAKY,QACf,gDACA,mBACA,KAAKP,YAAYM,CAAAA,CAAAA,CAErB,CAEA,MAAMK,uBACJL,EAC0C,CAC1C,OAAO,KAAKX,KAAKY,QACf,kDACA,oBACA,KAAKP,YAAYM,CAAAA,CAAAA,CAErB,CAEA,MAAMM,qBACJN,EAC+C,CAC/C,OAAO,KAAKX,KAAKY,QACf,gDACA,cACA,KAAKP,YAAYM,CAAAA,CAAAA,CAErB,CAEA,MAAMO,kBACJP,EACyC,CACzC,OAAO,KAAKX,KAAKY,QACf,6CACA,eACA,KAAKP,YAAYM,CAAAA,CAAAA,CAErB,CAEA,MAAMQ,sBACJR,EAC8C,CAC9C,OAAO,KAAKX,KAAKY,QACf,iDACA,oBACA,KAAKP,YAAYM,CAAAA,CAAAA,CAErB,CAGA,MAAMS,qBACJT,EACmD,CACnD,OAAO,KAAKX,KAAKY,QACf,iDACA,yBACA,KAAKP,YAAYM,CAAAA,CAAAA,CAErB,CACF,EApHab,EAAAA,GAAAA,eAAN,IAAMA,EAANuB,+NG/BP,IAAAC,GAAyD,uBACzDC,GAAsC,2BACtCC,EAA0C,2jBAcnC,IAAMC,GAAN,MAAMA,EAAAA,CAKX,YAAsDC,EAAuB,kBAJ5DC,EAAAA,mBACAC,EAAAA,mBACAC,EAAAA,uBAEqCH,OAAAA,EACpD,KAAKC,WAAaG,GAAAA,QAAMC,OAAO,CAC7BC,QAASN,EAAOO,QAChBC,QAAS,OAAOR,EAAOQ,SAAY,SAAWR,EAAOQ,QAAU,IAC/DC,QAAS,CACP,eAAgB,kBAChBC,OAAQ,sCACV,EACAC,aAAc,CAAEC,oBAAqB,EAAK,EAC1CC,eAAgBC,EAACC,GAAMA,GAAK,KAAOA,EAAI,IAAvB,iBAClB,CAAA,EAEA,KAAKb,WAAa,IAAIc,cAAW,CAC/BC,oBAAqB,IACrBC,iBAAkB,GAClBC,kBAAmB,GACnBC,OAAQC,QAAQC,IAAIC,UAAUC,YAAAA,IAAkB,aAClD,CAAA,EAEA,KAAKrB,UAAY,IAAIsB,aAAU,CAC7BR,oBAAqB,IACrBC,iBAAkB,GAClBQ,oBAAqB,GACrBC,WAAY,GACZC,QAASd,EAACe,GACW,CACjB,QACA,OACA,UACA,YACA,UACA,eACA,UACA,QACA,aAEgBC,SAASD,CAAAA,EAZpB,UAcX,CAAA,CACF,CAEA,MAAaE,QACXC,EACAC,EACAC,EACAlC,EACoB,CACpB,IAAMmC,EAAa,KAAKjC,WAAWkC,MAAM,CAAE,CAACH,CAAAA,EAAkBC,CAAQ,CAAA,EAChEG,EAAW,MAAM,KAAKpC,WAAWqC,KAAKN,EAAUG,EAAYnC,CAAAA,EAElE,OADa,KAAKG,UAAUoC,MAAMF,EAASG,IAAI,CAEjD,CACF,EAzDazC,EAAAA,GAAAA,iBAAN,IAAMA,EAAN0C,2BADOC,MAAOC,QAAMC,uICf3B,IAAAC,GAA2B,0BAEdC,GAAwB,OAUxBC,MAAaC,eAAWF,GAAuB,KAAO,CACjEG,QAASC,QAAQC,IAAIC,eAAiB,GACtCC,OAAQH,QAAQC,IAAIG,cAAgB,GACpCC,OAAQL,QAAQC,IAAIK,aAAe,GACnCC,aAAcP,QAAQC,IAAIO,mBAC1BC,QAAST,QAAQC,IAAIS,aACjBC,OAAOX,QAAQC,IAAIS,YAAY,EAC/BE,MACN,EAAA,ECpBA,IAAAC,EAAkB,eAILC,GAAyBC,IAAEC,KAAK,CAAC,KAAM,KAAK,EAE5CC,GAAyBF,IAAEG,OAAO,CAC7CC,QAASJ,IAAEK,IAAG,EACdC,OAAQN,IAAEO,OAAM,EAAGC,OAAO,CAAA,EAC1BC,OAAQT,IAAEO,OAAM,EAChBG,aAAcX,GAAuBY,SAAQ,EAC7CC,QAASZ,IAAEa,OAAM,EAAGF,SAAQ,CAC9B,CAAA,EAEaG,GAAoBd,IAAEG,OAAO,CACxC,QAASH,IAAEC,KAAK,CAAC,OAAQ,OAAQ,UAAW,WAAW,EAAEU,SAAQ,EACjEI,OAAQf,IAAEO,OAAM,EAAGS,IAAI,GAAA,EAAKL,SAAQ,EACpCM,KAAMjB,IAAEO,OAAM,EAAGS,IAAI,EAAA,EAAIL,SAAQ,EACjCO,MAAOlB,IAAEO,OAAM,EAAGS,IAAI,EAAA,EAAIL,SAAQ,EAClCQ,WAAYnB,IAAEO,OAAM,EAAGS,IAAI,EAAA,EAAIL,SAAQ,EACvCS,QAASpB,IAAEO,OAAM,EAAGS,IAAI,EAAA,EAAIL,SAAQ,CACtC,CAAA,EAEaU,GAAwBrB,IAAEG,OAAO,CAC5CmB,MAAOtB,IACJG,OAAO,CACN,QAASH,IAAEC,KAAK,CAAC,OAAQ,OAAQ,SAAU,MAAM,EAAEU,SAAQ,EAC3D,UAAWX,IAAEO,OAAM,CACrB,CAAA,EACCI,SAAQ,EACXY,MAAOvB,IACJG,OAAO,CACN,QAASH,IAAEC,KAAK,CAAC,OAAQ,OAAO,EAAEU,SAAQ,EAC1C,WAAYX,IAAEO,OAAM,CACtB,CAAA,EACCI,SAAQ,CACb,CAAA,EAEaa,GAAsBxB,IAAEG,OAAO,CAC1C,eAAgBH,IAAEO,OAAM,EAAGkB,IAAI,CAAA,EAC/B,QAASzB,IAAEC,KAAK,CAAC,MAAO,MAAO,MAAM,EACrC,SAAUD,IAAEC,KAAK,CAAC,KAAM,MAAO,KAAM,KAAM,OAAO,EAAEU,SAAQ,EAC5De,UAAW1B,IAAEO,OAAM,EAAGkB,IAAI,CAAA,EAAGT,IAAI,EAAA,EACjCW,SAAU3B,IAAEO,OAAM,EAAGkB,IAAI,CAAA,EAAGT,IAAI,EAAA,EAChCY,WAAY5B,IAAEO,OAAM,EAAGS,IAAI,EAAA,EAAIL,SAAQ,EACvCkB,YAAa7B,IAAEO,OAAM,EAAGuB,SAAQ,EAAGnB,SAAQ,EAC3CoB,OAAQ/B,IAAEC,KAAK,CAAC,IAAK,IAAI,EAAEU,SAAQ,EACnCqB,YAAahC,IAAEO,OAAM,EAAGS,IAAI,CAAA,EAAGL,SAAQ,EACvCsB,QAASnB,GAAkBH,SAAQ,EACnCuB,YAAab,GAAsBV,SAAQ,CAC7C,CAAA,EAEawB,GAAoBnC,IAAEG,OAAO,CACxC,aAAcH,IAAEO,OAAM,EAAGkB,IAAI,CAAA,EAC7B,QAASzB,IAAEC,KAAK,CAAC,SAAU,QAAS,MAAO,WAAY,YAAY,EACnE,UAAWD,IAAEC,KAAK,CAAC,YAAa,UAAW,YAAY,EACvDmC,eAAgBpC,IAAEG,OAAO,CACvBkC,KAAMrC,IAAEO,OAAM,EAAGI,SAAQ,EACzB2B,KAAMtC,IAAEO,OAAM,EAAGI,SAAQ,EACzB4B,YAAavC,IAAEO,OAAM,EAAGI,SAAQ,EAChC6B,UAAWxC,IAAEO,OAAM,EAAGI,SAAQ,EAC9B8B,QAASzC,IAAEO,OAAM,EAAGI,SAAQ,EAC5B+B,MAAO1C,IACJG,OAAO,CACN,YAAaH,IAAEO,OAAM,EACrB,UAAWP,IAAEa,OAAM,CACrB,CAAA,EACCF,SAAQ,CACb,CAAA,CACF,CAAA,EAEagC,GAAoB3C,IAAEG,OAAO,CACxC,aAAcH,IAAEO,OAAM,EAAGkB,IAAI,CAAA,EAC7B,QAASzB,IAAEC,KAAK,CAAC,cAAe,aAAc,gBAAiB,OAAO,EACtE,UAAWD,IAAEC,KAAK,CAAC,UAAW,YAAa,SAAS,EACpD2C,OAAQ5C,IAAEG,OAAO,CACf,YAAaH,IAAEO,OAAM,EACrB,UAAWP,IAAEa,OAAM,CACrB,CAAA,EACAgC,eAAgB7C,IACbG,OAAO,CACN2C,WAAY9C,IAAEO,OAAM,EAAGI,SAAQ,EAC/BoC,WAAY/C,IAAEO,OAAM,EAAGI,SAAQ,EAC/BqC,eAAgBhD,IAAEO,OAAM,EAAGI,SAAQ,CACrC,CAAA,EACCA,SAAQ,CACb,CAAA,EAEasC,GAAiCjD,IAAEG,OAAO,CACrD+C,eAAgBlD,IAAEG,OAAO,CACvBgD,iBAAkBnD,IAAEC,KAAK,CAAC,WAAY,QAAS,WAAW,EAC1DmD,aAAcpD,IAAEG,OAAO,CACrBkD,MAAOrD,IAAEsD,MACPtD,IAAEG,OAAO,CACP,QAASH,IAAEO,OAAM,EACjB,SAAUP,IAAEO,OAAM,EAClB,YAAaP,IACVC,KAAK,CAAC,SAAU,WAAY,cAAe,YAAY,EACvDU,SAAQ,CACb,CAAA,CAAA,CAEJ,CAAA,EACA4C,WAAYvD,IACTG,OAAO,CACN,YAAaH,IAAEa,OAAM,EACrB,cAAeb,IAAEa,OAAM,CACzB,CAAA,EACCF,SAAQ,CACb,CAAA,CACF,CAAA,EAEa6C,GAAuBxD,IAAEG,OAAO,CAC3CsD,eAAgBzD,IAAEG,OAAO,CACvB,eAAgBH,IAAEC,KAAK,CAAC,aAAc,QAAS,YAAY,EAC3D,YAAaD,IAAEC,KAAK,CAAC,MAAO,SAAU,OAAQ,SAAS,EACvDyD,aAAc1D,IAAEG,OAAO,CACrB,cAAeH,IAAEO,OAAM,EAAGI,SAAQ,EAClCgD,gBAAiB3D,IAAE4D,IAAG,EAAGjD,SAAQ,CACnC,CAAA,EACAkD,cAAe7D,IAAEG,OAAO,CACtB2D,UAAW9D,IAAEsD,MAAM9B,EAAAA,CACrB,CAAA,EACAuC,oBAAqB/D,IAAEG,OAAO,CAC5B6D,QAAShE,IAAEsD,MAAMnB,EAAAA,CACnB,CAAA,EACA8B,gBAAiBjE,IACdG,OAAO,CACN+D,QAASlE,IAAEsD,MACTtD,IAAEG,OAAO,CACP,QAASH,IAAEC,KAAK,CAAC,OAAQ,OAAQ,aAAc,QAAQ,EACvD,eAAgBD,IAAEO,OAAM,CAC1B,CAAA,CAAA,CAEJ,CAAA,EACCI,SAAQ,CACb,CAAA,CACF,CAAA,EAEawD,GAAyBnE,IAAEG,OAAO,CAC7C,iBAAkBH,IAAEO,OAAM,EAAGkB,IAAI,CAAA,EACjC2C,oBAAqBpE,IAAEG,OAAO,CAC5B,UAAWH,IAAEC,KAAK,CAAC,mBAAoB,UAAW,cAAe,QAAQ,EACzE,eAAgBD,IAAEO,OAAM,EAAGI,SAAQ,EACnC0D,cAAerE,IACZG,OAAO,CACN,UAAWH,IAAEa,OAAM,EACnB,YAAab,IAAEO,OAAM,EACrB,UAAWP,IAAEC,KAAK,CAAC,mBAAoB,SAAU,OAAO,CAC1D,CAAA,EACCU,SAAQ,CACb,CAAA,CACF,CAAA,EAEa2D,GAAmCtE,IAAEG,OAAO,CACvD,iBAAkBH,IAAEO,OAAM,EAAGkB,IAAI,CAAA,EACjC8C,gBAAiBvE,IAAEG,OAAO,CACxB,gBAAiBH,IAAEC,KAAK,CACtB,eACA,UACA,UACA,SACA,MACD,EACD,UAAWD,IAAEC,KAAK,CAAC,MAAO,OAAQ,MAAM,EACxC,YAAaD,IAAEO,OAAM,EAAGI,SAAQ,EAChC6D,eAAgBxE,IACbG,OAAO,CACN,QAASH,IAAEC,KAAK,CAAC,QAAS,MAAO,WAAW,EAC5C,WAAYD,IAAEO,OAAM,EAAGI,SAAQ,CACjC,CAAA,EACCA,SAAQ,CACb,CAAA,CACF,CAAA,6VN9HO,IAAM8D,EAAN,MAAMA,CAAAA,CAQX,OAAOC,QAAQC,EAAsC,CACnD,IAAMC,EAAkB,KAAKC,eAAeF,CAAAA,EAE5C,MAAO,CACLG,OAAQL,EACRM,QAAS,CAACC,gBAAaC,WAAWC,EAAAA,GAClCC,UAAW,CACT,CACEC,QAASC,EACTC,SAAUV,CACZ,EACA,KAAKW,4BAA2B,EAChCC,GAEFC,QAAS,CAACD,EAAaE,EACzB,CACF,CAOA,OAAOC,aAAaC,EAAgD,CAClE,IAAMC,EAAiB,KAAKC,qBAAqBF,CAAAA,EAEjD,MAAO,CACLd,OAAQL,EACRM,QAAS,IACHa,EAAQb,SAAW,CAAA,EACvBC,gBAAaC,WAAWC,EAAAA,GAE1BC,UAAW,IACNU,EACH,KAAKN,4BAA2B,EAChCC,GAEFC,QAAS,CAACD,EAAaE,EACzB,CACF,CAMA,OAAeH,6BAAwC,CACrD,MAAO,CACLH,QAASM,EACTK,SAAUC,CACZ,CACF,CAMA,OAAeF,qBACbF,EACY,CACZ,GAAIA,EAAQK,WACV,MAAO,CACL,CACEb,QAASC,EACTY,WAAYC,EAAA,SAAUC,IAAAA,CACpB,GAAI,CACF,IAAMxB,EAAS,MAAMiB,EAAQK,WAAU,GAAKE,CAAAA,EAC5C,OAAO,KAAKtB,eAAeF,CAAAA,CAC7B,OAASyB,EAAO,CACd,MAAM,IAAIC,MACR,wCAAwCD,EAAME,OAAO,EAAE,CAE3D,CACF,EATY,cAUZC,OAAQX,EAAQW,QAAU,CAAA,CAC5B,GAIJ,IAAMR,EAAWH,EAAQG,UAAYH,EAAQY,YAC7C,GAAI,CAACT,EACH,MAAM,IAAIM,MACR,gFAAA,EAIJ,IAAMlB,EAAwB,CAC5B,CACEC,QAASC,EACTY,WAAYC,EAAA,MACVO,GAAAA,CAEA,GAAI,CACF,IAAM9B,EAAS,MAAM8B,EAAQC,kBAAiB,EAC9C,OAAO,KAAK7B,eAAeF,CAAAA,CAC7B,OAASyB,EAAO,CACd,MAAM,IAAIC,MACR,wCAAwCD,EAAME,OAAO,EAAE,CAE3D,CACF,EAXY,cAYZC,OAAQ,CAACR,EACX,GAGF,OAAIH,EAAQG,UACVZ,EAAUwB,KAAK,CAAEvB,QAASQ,EAAQG,SAAUA,SAAUH,EAAQG,QAAS,CAAA,EAGlEZ,CACT,CAMA,OAAeN,eAAeF,EAAsC,CAClE,IAAMC,EAAkBgC,GAAuBC,UAAUlC,CAAAA,EACzD,GAAI,CAACC,EAAgBkC,QACnB,MAAM,IAAIT,MACR,mCAAmCzB,EAAgBwB,MAAMW,OACtDC,IAAKC,GAAUA,EAAMX,OAAO,EAC5BY,KAAK,IAAA,CAAA,EAAO,EAInB,OAAOtC,EAAgBuC,IACzB,CACF,EAvIa1C,EAAAA,EAAAA,cACX2C,EADW3C,EACK4C,cAAc,cAC9BD,EAFW3C,EAEK6C,UAAU,SAFrB,IAAM7C,EAAN8C,8COtCA,IAAKC,IAAAA,SAAAA,EAAAA,0EAAAA,QAcAC,GAAAA,SAAAA,EAAAA,0DAAAA,QAiBAC,GAAAA,SAAAA,EAAAA,khBAAAA,QCvCZ,IAAAC,GAAuC,eAuBhC,IAAMC,GAAN,MAAMA,EAAAA,CAOX,YAAYC,EAAsB,CAN1BA,EAAAA,eAON,KAAKA,OAASA,CAChB,CAqBAC,SAASC,EAAe,CACtB,GAAI,CAAC,KAAKF,OACR,MAAM,IAAIG,MACR,+EAAA,EAIJ,OAAO,KAAKH,OAAOI,MAAMF,CAAAA,CAC3B,CAsBA,MAAMG,cAAcH,EAA2B,CAC7C,GAAI,CAAC,KAAKF,OACR,MAAM,IAAIG,MACR,+EAAA,EAIJ,OAAO,KAAKH,OAAOM,WAAWJ,CAAAA,CAChC,CAmBAK,qBAAqBL,EAAe,CAClC,OAAK,KAAKF,OAQH,KAAKA,OAAOQ,UAAUN,CAAAA,EAPpB,KAAKO,YAAY,CACtBC,QACE,gFACFC,KAAM,CAAA,CACR,CAAA,CAIJ,CAmBA,MAAMC,0BACJV,EAC2E,CAC3E,OAAK,KAAKF,OAQH,KAAKA,OAAOa,eAAeX,CAAAA,EAPzB,KAAKO,YAAY,CACtBC,QACE,gFACFC,KAAM,CAAA,CACR,CAAA,CAIJ,CAoBAG,gBAAgBC,EAAiBC,EAAoB,KAAc,CACjE,OAAOD,EAAME,OACVC,IAAKC,GAEG,GADMA,EAAMR,KAAKS,OAAS,EAAI,GAAGD,EAAMR,KAAKU,KAAK,GAAA,CAAA,KAAW,EACzDV,GAAOQ,EAAMT,OAAO,EAChC,EACCW,KAAKL,CAAAA,CACV,CAEQP,YAAY,CAAEC,QAAAA,EAASC,KAAAA,CAAI,EAGjC,CACA,MAAO,CACLW,QAAS,GACTP,MAAO,IAAIQ,YAAS,CAAC,CAAEC,KAAM,SAAUd,QAAAA,EAASC,KAAAA,CAAK,EAAE,CACzD,CACF,CAaA,OAAOc,WAAczB,EAAwC,CAC3D,OAAO,IAAID,GAAcC,CAAAA,CAC3B,CACF,EArLaD,EAAAA,GAAAA,iBAAN,IAAMA,GAAN2B,GAoMA,SAASC,GAAuB3B,EAAoB,CACzD,OAAO,IAAID,GAAcC,CAAAA,CAC3B,CAFgB2B,EAAAA,GAAAA,uBC3NhB,IAAAC,EAAkB,eAILC,GAAoBC,IAAEC,KAAK,CACtC,OACA,OACA,UACA,WACD,EACYC,GAAoBF,IAAEC,KAAK,CAAC,OAAQ,OAAQ,SAAU,MAAM,EAC5DE,GAAkBH,IAAEC,KAAK,CAAC,OAAQ,OAAO,EACzCG,GAAsBJ,IAAEC,KAAK,CAAC,QAAS,QAAS,SAAS,EACzDI,GAAkBL,IAAEC,KAAK,CAAC,KAAM,MAAO,KAAM,KAAM,OAAO,EAC1DK,GAAmBN,IAAEC,KAAK,CAAC,OAAQ,SAAS,EAC5CM,GAAoBP,IAAEC,KAAK,CACtC,SACA,QACA,MACA,WACA,YACD,EACYO,GAA0BR,IAAEC,KAAK,CAC5C,YACA,UACA,YACD,EACYQ,GAAoBT,IAAEC,KAAK,CACtC,cACA,aACA,gBACA,OACD,EACYS,GAA0BV,IAAEC,KAAK,CAC5C,UACA,YACA,SACD,EACYU,GAAqBX,IAAEC,KAAK,CAAC,WAAY,QAAS,WAAW,EAC7DW,GAA2BZ,IAAEC,KAAK,CAC7C,SACA,WACA,cACA,YACD,EACYY,GAAoBb,IAAEC,KAAK,CAAC,aAAc,QAAS,YAAY,EAC/Da,GAAqBd,IAAEC,KAAK,CAAC,MAAO,SAAU,OAAQ,SAAS,EAC/Dc,GAA2Bf,IAAEC,KAAK,CAC7C,OACA,OACA,aACA,QACD,EACYe,GAAyBhB,IAAEC,KAAK,CAC3C,mBACA,UACA,cACA,QACD,EACYgB,GAAyBjB,IAAEC,KAAK,CAC3C,mBACA,SACA,OACD,EACYiB,GAAqBlB,IAAEC,KAAK,CACvC,eACA,UACA,UACA,SACA,MACD,EACYkB,GAA2BnB,IAAEC,KAAK,CAAC,MAAO,OAAQ,MAAM,EACxDmB,GAA2BpB,IAAEC,KAAK,CAAC,QAAS,MAAO,WAAW,EAC9DoB,GAA0BrB,IAAEC,KAAK,CAC5C,UACA,YACA,YACA,YACD,EACYqB,GAAwBtB,IAAEC,KAAK,CAC1C,UACA,MACA,MACA,WACD,EACYsB,GAA2BvB,IAAEC,KAAK,CAAC,OAAQ,UAAW,SAAS,EAC/DuB,GAA2BxB,IAAEC,KAAK,CAC7C,SACA,WACA,YACD,EACYwB,GAAgCzB,IAAEC,KAAK,CAAC,QAAS,MAAO,QAAQ,EAIvEyB,EAAmB1B,IACtB2B,OAAM,EACNC,MAAM,sBAAuB,mCAAA,EAC1BC,GAAmB7B,IACtB2B,OAAM,EACNC,MAAM,sBAAuB,iCAAA,EAC1BE,GAAuB9B,IAC1B2B,OAAM,EACNC,MACC,oDACA,qCAAA,EAKSG,GAAwB/B,IAAEgC,OAAO,CAC5CC,KAAMlC,GAAkBmC,SAAQ,EAChCC,OAAQnC,IAAE2B,OAAM,EAAGO,SAAQ,EAC3BE,KAAMpC,IAAE2B,OAAM,EAAGO,SAAQ,EACzBG,MAAOrC,IAAE2B,OAAM,EAAGO,SAAQ,EAC1BI,WAAYtC,IAAE2B,OAAM,EAAGO,SAAQ,EAC/BK,QAASvC,IAAE2B,OAAM,EAAGO,SAAQ,CAC9B,CAAA,EAEaM,GAAwBxC,IAAEgC,OAAO,CAC5CS,MAAOzC,IACJgC,OAAO,CACNC,KAAM/B,GAAkBgC,SAAQ,EAChCQ,OAAQ1C,IAAE2B,OAAM,EAAGgB,IAAI,EAAG,0BAAA,CAC5B,CAAA,EACCT,SAAQ,EACXU,MAAO5C,IACJgC,OAAO,CACNC,KAAM9B,GAAgB+B,SAAQ,EAC9BW,QAAS7C,IAAE2B,OAAM,EAAGiB,MAAM,iCAAA,CAC5B,CAAA,EACCV,SAAQ,CACb,CAAA,EAEaY,EAAiB9C,IAAEgC,OAAO,CACrCe,GAAI/C,IAAE2B,OAAM,EAAGgB,IAAI,EAAG,yBAAA,EACtBV,KAAMtB,GACNqC,OAAQxB,GACRyB,aAAcjD,IACXgC,OAAO,CACNkB,MAAOlD,IAAE2B,OAAM,EAAGO,SAAQ,EAC1BiB,UAAWnD,IAAE2B,OAAM,EAAGgB,IAAI,EAAG,wBAAA,EAC7BS,SAAUpD,IAAE2B,OAAM,EAAGgB,IAAI,EAAG,uBAAA,EAC5BU,WAAYrD,IAAE2B,OAAM,EAAGO,SAAQ,EAC/BoB,YAAa5B,EAAiBQ,SAAQ,EACtCqB,OAAQjD,GAAiB4B,SAAQ,EACjCsB,YAAaxD,IAAE2B,OAAM,EAAGO,SAAQ,CAClC,CAAA,EACCA,SAAQ,EACXuB,QAASjB,GAAsBN,SAAQ,EACvCW,QAASd,GAAsBG,SAAQ,EACvCwB,aAAc1D,IACXgC,OAAO,CACN2B,YAAa3D,IAAE2B,OAAM,EAAGO,SAAQ,EAChC0B,MAAO5D,IAAE2B,OAAM,EAAGO,SAAQ,EAC1B2B,cAAe7D,IAAE2B,OAAM,EAAGO,SAAQ,CACpC,CAAA,EACCA,SAAQ,EACX4B,YAAa9D,IACVgC,OAAO,CACN+B,SAAU/D,IAAE2B,OAAM,EAAGO,SAAQ,EAC7B8B,SAAUhE,IAAE2B,OAAM,EAAGO,SAAQ,EAC7B+B,oBAAqBxC,GAA8BS,SAAQ,CAC7D,CAAA,EACCA,SAAQ,CACb,CAAA,EAEagC,GAAyBlE,IAAEgC,OAAO,CAC7Ce,GAAI/C,IAAE2B,OAAM,EAAGgB,IAAI,EAAG,0BAAA,EACtBV,KAAM7B,GACN8C,MAAO7C,GAAgB6B,SAAQ,EAC/BiB,UAAWnD,IAAE2B,OAAM,EAAGgB,IAAI,EAAG,wBAAA,EAC7BS,SAAUpD,IAAE2B,OAAM,EAAGgB,IAAI,EAAG,uBAAA,EAC5BU,WAAYrD,IAAE2B,OAAM,EAAGO,SAAQ,EAC/BoB,YAAa5B,EAAiBQ,SAAQ,EACtCqB,OAAQjD,GAAiB4B,SAAQ,EACjCsB,YAAaxD,IAAE2B,OAAM,EAAGO,SAAQ,EAChCiC,SAAUnE,IACPgC,OAAO,CACNU,OAAQ1C,IAAE2B,OAAM,EAAGgB,IAAI,EAAG,6BAAA,EAC1ByB,WAAY1C,EACZ2C,eAAgBrE,IAAE2B,OAAM,EAAGgB,IAAI,EAAG,6BAAA,CACpC,CAAA,EACCT,SAAQ,EACXW,QAASd,GAAsBG,SAAQ,EACvCuB,QAASjB,GAAsBN,SAAQ,CACzC,CAAA,EAEaoC,GAAuBtE,IAAEgC,OAAO,CAC3Ce,GAAI/C,IAAE2B,OAAM,EAAGgB,IAAI,EAAG,wBAAA,EACtBV,KAAM1B,GACNyC,OAAQxC,GACR+D,KAAMvE,IAAE2B,OAAM,EAAGO,SAAQ,EACzBsC,KAAMxE,IAAE2B,OAAM,EAAGO,SAAQ,EACzBuC,YAAazE,IAAE2B,OAAM,EAAGO,SAAQ,EAChCwC,UAAWhD,EAAiBQ,SAAQ,EACpCyC,QAASjD,EAAiBQ,SAAQ,EAClC0C,MAAO5E,IACJgC,OAAO,CACNgC,SAAUhE,IAAE2B,OAAM,EAAGgB,IAAI,EAAG,sBAAA,EAC5BkC,OAAQ7E,IAAE0C,OAAM,EAAGoC,SAAS,yBAAA,CAC9B,CAAA,EACC5C,SAAQ,CACb,CAAA,EAEa6C,GAAuB/E,IAAEgC,OAAO,CAC3Ce,GAAI/C,IAAE2B,OAAM,EAAGgB,IAAI,EAAG,wBAAA,EACtBV,KAAMxB,GACNuC,OAAQtC,GACRmE,OAAQ7E,IAAEgC,OAAO,CACfgC,SAAUhE,IAAE2B,OAAM,EAAGgB,IAAI,EAAG,sBAAA,EAC5BkC,OAAQ7E,IAAE0C,OAAM,EAAGoC,SAAS,yBAAA,CAC9B,CAAA,EACAE,QAAShF,IACNgC,OAAO,CACNiD,WAAYjF,IAAE2B,OAAM,EAAGO,SAAQ,EAC/BkC,WAAYpE,IAAE2B,OAAM,EAAGO,SAAQ,EAC/BgD,eAAgBlF,IAAE2B,OAAM,EAAGO,SAAQ,CACrC,CAAA,EACCA,SAAQ,CACb,CAAA,EAIaiD,GAA8BnF,IAAEgC,OAAO,CAClDC,KAAMtB,GACNyE,OAAQpF,IACLqF,MACCrF,IAAEgC,OAAO,CACPwC,KAAMxE,IAAE2B,OAAM,EAAGgB,IAAI,EAAG,wBAAA,EACxB2C,MAAOtF,IAAE2B,OAAM,EAAGgB,IAAI,EAAG,yBAAA,EACzB4C,SAAU3E,GAAyBsB,SAAQ,CAC7C,CAAA,CAAA,EAEDS,IAAI,EAAG,uCAAA,EACV6C,WAAYxF,IACTgC,OAAO,CACNyD,SAAUzF,IACP0C,OAAM,EACNgD,IAAG,EACHZ,SAAS,sCAAA,EACZa,WAAY3F,IAAE0C,OAAM,EAAGgD,IAAG,EAAG/C,IAAI,EAAG,gCAAA,CACtC,CAAA,EACCT,SAAQ,CACb,CAAA,EAEa0D,GAA6B5F,IAAEgC,OAAO,CACjDC,KAAMpB,GACNgF,SAAU/E,GACVgF,WAAY9F,IAAE2B,OAAM,EAAGO,SAAQ,EAC/B6D,gBAAiBjD,EAAeZ,SAAQ,EACxC8D,WAAYhG,IACTqF,MAAMnB,EAAAA,EACNvB,IAAI,EAAG,oCAAA,EACVsD,SAAUjG,IACPqF,MAAMf,EAAAA,EACN3B,IAAI,EAAG,kCAAA,EACVuD,gBAAiBlG,IACdqF,MACCrF,IAAEgC,OAAO,CACPC,KAAMlB,GACN0D,YAAazE,IACV2B,OAAM,EACNgB,IAAI,EAAG,yCAAA,CACZ,CAAA,CAAA,EAEDT,SAAQ,CACb,CAAA,EAEaiE,GAA6BnG,IAAEgC,OAAO,CACjDoE,UAAWpG,IAAE2B,OAAM,EAAGgB,IAAI,EAAG,wBAAA,EAC7B0D,OAAQrF,GACRyD,YAAazE,IAAE2B,OAAM,EAAGO,SAAQ,EAChCoE,cAAetG,IACZgC,OAAO,CACN6C,OAAQ7E,IAAE0C,OAAM,EAAGoC,SAAS,gCAAA,EAC5Bd,SAAUhE,IAAE2B,OAAM,EAAGgB,IAAI,EAAG,sBAAA,EAC5B4D,OAAQtF,EACV,CAAA,EACCiB,SAAQ,CACb,CAAA,EAEasE,GAA6BxG,IAAEgC,OAAO,CACjDoE,UAAWpG,IAAE2B,OAAM,EAAGgB,IAAI,EAAG,wBAAA,EAC7B8D,aAAcvF,GACdwF,OAAQvF,GACR4C,SAAU/D,IAAE2B,OAAM,EAAGO,SAAQ,EAC7ByE,eAAgB3G,IACbgC,OAAO,CACNC,KAAMb,GACNyB,QAAS7C,IAAE2B,OAAM,EAAGO,SAAQ,CAC9B,CAAA,EACCA,SAAQ,CACb,CAAA,EAEa0E,GAA0B5G,IAAEgC,OAAO,CAC9CoE,UAAWpG,IAAE2B,OAAM,EAAGgB,IAAI,EAAG,wBAAA,EAC7BkE,SAAU7G,IACPqF,MAAMN,EAAAA,EACNpC,IAAI,EAAG,kCAAA,CACZ,CAAA,EAIamE,GAAwB9G,IAAEgC,OAAO,CAC5Ce,GAAI/C,IAAE2B,OAAM,EAAGgB,IAAI,EAAG,wBAAA,EACtBK,OAAQ3B,GACR0F,UAAWjF,GACXkF,UAAWlF,GACXmF,SAAUnE,EACVkD,WAAYhG,IAAEqF,MAAMnB,EAAAA,EACpB+B,SAAUjG,IAAEqF,MAAMf,EAAAA,EAClB4C,QAASlH,IAAEgC,OAAO,CAChBmF,YAAanH,IAAEgC,OAAO,CACpBgC,SAAUhE,IAAE2B,OAAM,EAAGgB,IAAI,EAAG,sBAAA,EAC5BkC,OAAQ7E,IAAE0C,OAAM,EAAGoC,SAAS,yBAAA,CAC9B,CAAA,EACAsC,WAAYpH,IACTqF,MACCrF,IAAEgC,OAAO,CACPC,KAAMX,GACNmD,YAAazE,IAAE2B,OAAM,EAAGgB,IAAI,EAAG,yBAAA,EAC/BkC,OAAQ7E,IAAE0C,OAAM,CAClB,CAAA,CAAA,EAEDR,SAAQ,CACb,CAAA,CACF,CAAA,EAEamF,GAAuBrH,IAAEgC,OAAO,CAC3CsF,QAAStH,IAAEqF,MAAMvC,CAAAA,EACjB0C,WAAYxF,IACTgC,OAAO,CACNuF,aAAcvH,IAAE0C,OAAM,EAAGgD,IAAG,EAAG/C,IAAI,CAAA,EACnC8C,SAAUzF,IAAE0C,OAAM,EAAGgD,IAAG,EAAGZ,SAAQ,EACnCa,WAAY3F,IAAE0C,OAAM,EAAGgD,IAAG,EAAG/C,IAAI,CAAA,EACjC6E,WAAYxH,IAAE0C,OAAM,EAAGgD,IAAG,EAAG/C,IAAI,CAAA,CACnC,CAAA,EACCT,SAAQ,CACb,CAAA,EAEauF,GAAyBzH,IAAEgC,OAAO,CAC7Ce,GAAI/C,IAAE2B,OAAM,EAAGgB,IAAI,EAAG,yBAAA,EACtBV,KAAMjC,IAAE2B,OAAM,EAAGgB,IAAI,EAAG,2BAAA,EACxB+D,OAAQ1G,IAAE2B,OAAM,EAAGgB,IAAI,EAAG,6BAAA,EAC1B+E,KAAM1H,IAAE0C,OAAM,EAAGgD,IAAG,EAAGZ,SAAS,gCAAA,EAChCiC,UAAWjF,GACX6F,YAAa3H,IAAE2B,OAAM,EAAGiG,IAAI,4BAAA,EAA8B1F,SAAQ,EAClE2F,eAAgB7H,IACbgC,OAAO,CACNgB,OAAQzB,GACRgF,OAAQvG,IAAE2B,OAAM,EAAGgB,IAAI,EAAG,6BAAA,EAC1BE,QAAS7C,IAAE2B,OAAM,EAAGO,SAAQ,CAC9B,CAAA,EACCA,SAAQ,CACb,CAAA,EAEa4F,GAA0B9H,IAAEgC,OAAO,CAC9C+F,QAAS/H,IAAEgI,QAAO,EAClBC,QAASjI,IAAE2B,OAAM,EAAGO,SAAQ,EAC5BgG,KAAMlI,IAAEmI,IAAG,EAAGjG,SAAQ,CACxB,CAAA,EAIakG,GAAa,CAExBC,YAAatI,GACbuI,YAAapI,GACbqI,UAAWpI,GACXqI,cAAepI,GACfqI,UAAWpI,GACXqI,WAAYpI,GACZqI,YAAapI,GACbqI,kBAAmBpI,GACnBqI,YAAapI,GACbqI,kBAAmBpI,GACnBqI,aAAcpI,GACdqI,mBAAoBpI,GACpBqI,YAAapI,GACbqI,aAAcpI,GACdqI,mBAAoBpI,GACpBqI,iBAAkBpI,GAClBqI,iBAAkBpI,GAClBwF,aAAcvF,GACdoI,mBAAoBnI,GACpBoI,mBAAoBnI,GACpBoI,kBAAmBnI,GACnBoI,gBAAiBnI,GACjBoI,mBAAoBnI,GACpBoI,mBAAoBnI,GACpBoI,wBAAyBnI,GAGzBoI,gBAAiB9H,GACjB+H,gBAAiBtH,GACjByE,SAAUnE,EACViH,iBAAkB7F,GAClB8F,eAAgB1F,GAChB2F,eAAgBlF,GAGhBmF,sBAAuB/E,GACvBgF,qBAAsBvE,GACtBwE,qBAAsBjE,GACtBkE,qBAAsB7D,GACtB8D,kBAAmB1D,GAGnB2D,gBAAiBzD,GACjB0D,eAAgBnD,GAChBoD,iBAAkBhD,GAClBiD,kBAAmB5C,EACrB,EC7ZA,IAAA6C,GAA2B,0BCUpB,IAAMC,EAAN,MAAMA,UAAsBC,KAAAA,CAOjC,YACEC,EACAC,EACAC,EAII,CAAC,EACL,CACA,MAAMD,CAAAA,EAfQD,EAAAA,aACAG,EAAAA,iBACAC,EAAAA,kBACAC,EAAAA,kBACAC,EAAAA,gBAad,KAAKC,KAAO,gBACZ,KAAKP,KAAOA,EACZ,KAAKG,SAAWD,EAAQC,UAAYK,EAAaC,MACjD,KAAKL,UAAY,IAAIM,KAAAA,EAAOC,YAAW,EACvC,KAAKL,QAAUJ,EAAQI,QACvB,KAAKD,UAAYH,EAAQG,WAAa,KAAKO,kBAAiB,EAG5DC,OAAOC,eAAe,KAAMhB,EAAciB,SAAS,EAG/ChB,MAAMiB,mBACRjB,MAAMiB,kBAAkB,KAAMlB,CAAAA,CAElC,CAKA,OAAOmB,cAAcC,EAA8C,CACjE,OAAO,IAAIpB,EAAcoB,EAAUlB,KAAMkB,EAAUjB,QAAS,CAC1DE,SAAUe,EAAUf,SACpBG,QAASY,EAAUZ,QACnBD,UAAWa,EAAUb,SACvB,CAAA,CACF,CAKAc,aAAuB,CAQrB,MAPuB,CACrBC,EAAeC,QACfD,EAAeE,oBACfF,EAAeG,sBACfH,EAAeI,qBAGKC,SAAS,KAAKzB,IAAI,CAC1C,CAKA0B,wBAAiC,CAuB/B,MAtBiD,CAC/C,CAACN,EAAeO,aAAa,EAC3B,iDACF,CAACP,EAAeQ,aAAa,EAC3B,iDACF,CAACR,EAAeS,wBAAwB,EACtC,qDACF,CAACT,EAAeU,iBAAiB,EAC/B,4CACF,CAACV,EAAeW,yBAAyB,EACvC,2CACF,CAACX,EAAeY,cAAc,EAC5B,+CACF,CAACZ,EAAea,sBAAsB,EACpC,gDACF,CAACb,EAAeE,mBAAmB,EACjC,kEACF,CAACF,EAAeC,OAAO,EAAG,2CAC1B,CAACD,EAAeI,mBAAmB,EACjC,wDACJ,EAEwB,KAAKxB,IAAI,GAAK,KAAKC,OAC7C,CAKAiC,QAA8B,CAC5B,MAAO,CACL3B,KAAM,KAAKA,KACXP,KAAM,KAAKA,KACXC,QAAS,KAAKA,QACdE,SAAU,KAAKA,SACfC,UAAW,KAAKA,UAChBC,UAAW,KAAKA,UAChBC,QAAS,KAAKA,QACd6B,MAAO,KAAKA,MACZhB,YAAa,KAAKA,YAAW,EAC7BiB,oBAAqB,KAAKV,uBAAsB,CAClD,CACF,CAKAW,aAAkC,CAChC,MAAO,CACLrC,KAAM,KAAKA,KACXC,QAAS,KAAKA,QACdE,SAAU,KAAKA,SACfC,UAAW,KAAKA,UAChBC,UAAW,KAAKA,UAChBC,QAAS,KAAKA,OAChB,CACF,CAKAgC,mBAA4B,CAC1B,OAAQ,KAAKtC,KAAI,CACf,KAAKoB,EAAeO,cACpB,KAAKP,EAAeQ,cAClB,MAAO,KACT,KAAKR,EAAeS,yBAClB,MAAO,KACT,KAAKT,EAAeU,kBAClB,MAAO,KACT,KAAKV,EAAemB,uBACpB,KAAKnB,EAAeoB,uBACpB,KAAKpB,EAAeqB,oBAClB,MAAO,KACT,KAAKrB,EAAeI,oBAClB,MAAO,KACT,KAAKJ,EAAeE,oBAClB,MAAO,KACT,KAAKF,EAAeC,QAClB,MAAO,KACT,QACE,MAAO,IACX,CACF,CAKAqB,aAAsB,CACpB,OAAI,KAAK1C,KAAK2C,WAAW,QAAA,EAAkB,iBACvC,KAAK3C,KAAK2C,WAAW,QAAA,EAAkB,iBACvC,KAAK3C,KAAK2C,WAAW,QAAA,EAAkB,SACpC,SACT,CAKQ/B,mBAA4B,CAClC,MAAO,QAAQF,KAAKkC,IAAG,CAAA,IAAMC,KAAKC,OAAM,EAAGC,SAAS,EAAA,EAAIC,OAAO,EAAG,CAAA,CAAA,EACpE,CACF,EAnKmCjD,EAAAA,EAAAA,iBAA5B,IAAMD,EAANmD,6VDCA,IAAMC,GAAN,MAAMA,EAAAA,CAIXC,WAAWC,EAA2B,CAEpC,OAAIA,aAAiBC,EACZD,EAIL,KAAKE,YAAYF,CAAAA,EACZ,KAAKG,eAAeH,CAAAA,EAIzB,KAAKI,kBAAkBJ,CAAAA,EAClB,KAAKK,kBAAkBL,CAAAA,EAI5BA,aAAiBM,MACZ,IAAIL,EACTM,EAAeC,sBACfR,EAAMS,QACN,CACEC,SAAUC,EAAaC,MACvBC,QAAS,KAAKC,aAAa,CACzBC,KAAM,mBACNC,UAAWhB,EAAMiB,KACjBC,MAAOlB,EAAMkB,OAAS,0BACxB,CAAA,CACF,CAAA,EAKG,IAAIjB,EACTM,EAAeC,sBACf,yBACA,CACEE,SAAUC,EAAaC,MACvBC,QAAS,KAAKC,aAAa,CACzBC,KAAM,gBACNC,UAAW,OAAOhB,EAClBmB,WAAYC,OAAOpB,CAAAA,CACrB,CAAA,CACF,CAAA,CAEJ,CAKQG,eAAeH,EAAiC,CACtD,GAAIA,EAAMqB,SAAU,CAClB,IAAMC,EAAStB,EAAMqB,SAASC,OACxBC,EAAavB,EAAMqB,SAASE,WAElC,OAAQD,EAAAA,CACN,IAAK,KACH,OAAO,IAAIrB,EACTM,EAAeiB,uBACf,gBAAgBD,CAAAA,GAChB,CACEb,SAAUC,EAAaC,MACvBC,QAAS,KAAKC,aAAa,CACzBC,KAAM,aACNC,UAAWM,EACXC,WAAAA,EACAE,IAAKzB,EAAM0B,QAAQD,IACnBE,OAAQ3B,EAAM0B,QAAQC,OACtBC,QAAS5B,EAAM0B,QAAQE,OACzB,CAAA,CACF,CAAA,EAEJ,IAAK,KACH,OAAO,IAAI3B,EACTM,EAAesB,cACf,wBACA,CACEnB,SAAUC,EAAaC,MACvBC,QAAS,KAAKC,aAAa,CACzBC,KAAM,aACNO,OAAAA,EACAG,IAAKzB,EAAM0B,QAAQD,IACnBE,OAAQ3B,EAAM0B,QAAQC,OACtBC,QAAS5B,EAAM0B,QAAQE,OACzB,CAAA,CACF,CAAA,EAEJ,IAAK,KACH,OAAO,IAAI3B,EACTM,EAAeuB,yBACf,mBACA,CACEpB,SAAUC,EAAaC,MACvBC,QAAS,KAAKC,aAAa,CACzBC,KAAM,aACNO,OAAAA,EACAG,IAAKzB,EAAM0B,QAAQD,IACnBE,OAAQ3B,EAAM0B,QAAQC,OACtBC,QAAS5B,EAAM0B,QAAQE,OACzB,CAAA,CACF,CAAA,EAEJ,IAAK,KACH,OAAO,IAAI3B,EACTM,EAAewB,kBACf,qBACA,CACErB,SAAUC,EAAaC,MACvBC,QAAS,KAAKC,aAAa,CACzBC,KAAM,aACNO,OAAAA,EACAG,IAAKzB,EAAM0B,QAAQD,IACnBE,OAAQ3B,EAAM0B,QAAQC,OACtBC,QAAS5B,EAAM0B,QAAQE,OACzB,CAAA,CACF,CAAA,EAEJ,IAAK,KACH,OAAO,IAAI3B,EACTM,EAAeyB,oBACf,sBACA,CACEtB,SAAUC,EAAaC,MACvBC,QAAS,KAAKC,aAAa,CACzBC,KAAM,aACNO,OAAAA,EACAW,WAAYjC,EAAMqB,SAASa,UAAU,aAAA,CACvC,CAAA,CACF,CAAA,EAEJ,IAAK,KACH,OAAO,IAAIjC,EACTM,EAAeC,sBACf,wBACA,CACEE,SAAUC,EAAaC,MACvBC,QAAS,KAAKC,aAAa,CACzBC,KAAM,aACNO,OAAAA,EACAG,IAAKzB,EAAM0B,QAAQD,IACnBE,OAAQ3B,EAAM0B,QAAQC,OACtBC,QAAS5B,EAAM0B,QAAQE,OACzB,CAAA,CACF,CAAA,EAEJ,IAAK,KACH,OAAO,IAAI3B,EACTM,EAAe4B,oBACf,sBACA,CACEzB,SAAUC,EAAaC,MACvBC,QAAS,KAAKC,aAAa,CACzBC,KAAM,aACNO,OAAAA,EACAG,IAAKzB,EAAM0B,QAAQD,IACnBE,OAAQ3B,EAAM0B,QAAQC,OACtBC,QAAS5B,EAAM0B,QAAQE,OACzB,CAAA,CACF,CAAA,EAEJ,QACE,OAAO,IAAI3B,EACTM,EAAeC,sBACf,QAAQc,CAAAA,KAAWC,CAAAA,GACnB,CACEb,SAAUC,EAAaC,MACvBC,QAAS,KAAKC,aAAa,CACzBC,KAAM,aACNO,OAAAA,EACAC,WAAAA,EACAE,IAAKzB,EAAM0B,QAAQD,IACnBE,OAAQ3B,EAAM0B,QAAQC,OACtBC,QAAS5B,EAAM0B,QAAQE,OACzB,CAAA,CACF,CAAA,CAEN,CACF,KAAO,QAAI5B,EAAMoC,QAER,IAAInC,EACTM,EAAe8B,QACf,8CACA,CACE3B,SAAUC,EAAaC,MACvBC,QAAS,KAAKC,aAAa,CACzBC,KAAM,aACNa,QAAS,GACTH,IAAKzB,EAAM0B,QAAQD,IACnBE,OAAQ3B,EAAM0B,QAAQC,OACtBW,kBAAmBtC,EAAM0B,QAAQE,OACnC,CAAA,CACF,CAAA,EAIK,IAAI3B,EACTM,EAAeC,sBACf,wBAAwBR,EAAMS,OAAO,GACrC,CACEC,SAAUC,EAAaC,MACvBC,QAAS,KAAKC,aAAa,CACzBC,KAAM,aACNwB,WAAY,EACd,CAAA,CACF,CAAA,CAGN,CAKQlC,kBAAkBmC,EAA6C,CACrE,GAAI,CAACA,GAAaC,UAAUC,SAC1B,OAAO,IAAIzC,EACTM,EAAeiB,uBACf,wCACA,CACEd,SAAUC,EAAaC,MACvBC,QAAS,KAAKC,aAAa,CACzBC,KAAM,iBACN4B,gBAAiB,EACnB,CAAA,CACF,CAAA,EAIJ,IAAMC,EAAWJ,EAAYC,SAASC,SAGtC,GAAIE,EAAS,SAAA,IAAe,QAC1B,OAAO,IAAI3C,EACT2C,EAASC,WAAatC,EAAeC,sBACrCoC,EAASE,kBAAoB,8BAC7B,CACEpC,SAAUC,EAAaC,MACvBC,QAAS,KAAKC,aAAa,CACzBC,KAAM,iBACNgC,iBAAkBH,CACpB,CAAA,CACF,CAAA,EAKJ,GAAIA,EAASI,UAAUC,QAAS,CAC9B,IAAMC,EAAWC,MAAMC,QAAQR,EAASI,SAASC,OAAO,EACpDL,EAASI,SAASC,QAClB,CAACL,EAASI,SAASC,SAEvB,OAAO,IAAIhD,EACTM,EAAe8C,oBACfH,EAASI,KAAK,IAAA,EACd,CACE5C,SAAUC,EAAa4C,QACvB1C,QAAS,KAAKC,aAAa,CACzBC,KAAM,mBACNmC,SAAAA,CACF,CAAA,CACF,CAAA,CAEJ,CAGA,OAAO,IAAIjD,EACTM,EAAeC,sBACf,oCACA,CACEE,SAAUC,EAAaC,MACvBC,QAAS,KAAKC,aAAa,CACzBC,KAAM,iBACNyC,mBAAoB,GACpBlC,OAAQsB,EAAS,SAAA,CACnB,CAAA,CACF,CAAA,CAEJ,CAKAa,YAAYzD,EAA+B,CAQzC,MAPuB,CACrBO,EAAe8B,QACf9B,EAAe4B,oBACf5B,EAAeC,sBACfD,EAAeyB,qBAGK0B,SAAS1D,EAAM2D,IAAI,CAC3C,CAKAC,uBAAuB5D,EAA8B,CAuBnD,MAtBiD,CAC/C,CAACO,EAAesB,aAAa,EAC3B,iDACF,CAACtB,EAAesD,aAAa,EAC3B,iDACF,CAACtD,EAAeuB,wBAAwB,EACtC,qDACF,CAACvB,EAAewB,iBAAiB,EAC/B,4CACF,CAACxB,EAAeuD,yBAAyB,EACvC,2CACF,CAACvD,EAAewD,cAAc,EAC5B,+CACF,CAACxD,EAAeyD,sBAAsB,EACpC,gDACF,CAACzD,EAAe4B,mBAAmB,EACjC,kEACF,CAAC5B,EAAe8B,OAAO,EAAG,2CAC1B,CAAC9B,EAAeyB,mBAAmB,EACjC,wDACJ,EAEwBhC,EAAM2D,IAAI,GAAK3D,EAAMS,OAC/C,CAKQK,aAAamD,EAAiC,CACpD,IAAMpD,EAA+B,CAAC,EAGtC,OAAI,OAAOoD,GAAU,UAAYA,IAAU,KAEzCC,OAAOC,KAAKF,CAAAA,EAAOG,QAASC,GAAAA,CAC1B,IAAMC,EAAQL,EAAMI,CAAAA,EAGpB,GAAI,KAAKE,eAAeF,CAAAA,EAAM,CAC5BxD,EAAQwD,CAAAA,EAAO,WACf,MACF,CAGI,KAAKG,oBAAoBF,CAAAA,EAC3BzD,EAAQwD,CAAAA,EAAOC,EACN,OAAOA,GAAU,WAC1BzD,EAAQwD,CAAAA,EAAO,aACNC,aAAiBhE,MAC1BO,EAAQwD,CAAAA,EAAO,CACbpD,KAAMqD,EAAMrD,KACZR,QAAS6D,EAAM7D,QACfS,MAAOoD,EAAMpD,OAAOuD,MAAM;CAAA,EAAMC,MAAM,EAAG,CAAA,EAAGpB,KAAK;CAAA,CACnD,EAEAzC,EAAQwD,CAAAA,EAAOjD,OAAOkD,CAAAA,CAE1B,CAAA,EACS,OAAOL,GAAU,SAC1BpD,EAAQJ,QAAUwD,EACT,OAAOA,GAAU,UAAY,OAAOA,GAAU,UACvDpD,EAAQyD,MAAQL,EAEhBpD,EAAQoD,MAAQ7C,OAAO6C,CAAAA,EAIzBpD,EAAQ8D,UAAY,IAAIC,KAAAA,EAAOC,YAAW,EAC1ChE,EAAQiE,YAAc,OAAOb,EAEtBpD,CACT,CAKQ0D,eAAeF,EAAsB,CAC3C,IAAMU,EAAgB,CACpB,WACA,QACA,SACA,MACA,OACA,aACA,SACA,gBACA,SACA,UACA,WAGIC,EAAWX,EAAIY,YAAW,EAChC,OAAOF,EAAcG,KAAMC,GAAcH,EAAStB,SAASyB,CAAAA,CAAAA,CAC7D,CAKQX,oBAAoBF,EAAqB,CAK/C,OAJIA,GAAU,MAKZ,OAAOA,GAAU,UACjB,OAAOA,GAAU,UACjB,OAAOA,GAAU,UAEV,GAGLnB,MAAMC,QAAQkB,CAAAA,EACTA,EAAMc,QAAU,GAGrB,OAAOd,GAAU,UAEfA,EAAM,cAAgBJ,OACXA,OAAOC,KAAKG,CAAAA,EACbc,QAAU,GAKnB,EACT,CAKQlF,YAAYF,EAAgC,CAClD,OAAOA,IAAUA,EAAMqB,UAAYrB,EAAMoC,SAAWpC,EAAM0B,OAC5D,CAEQtB,kBAAkBJ,EAAsC,CAC9D,OAAOA,GAASA,EAAMyC,UAAYzC,EAAMyC,SAASC,QACnD,CACF,EArba5C,EAAAA,GAAAA,oBAAN,IAAMA,EAANuF","names":["index_exports","__export","AVES_CONFIG_NAMESPACE","AVES_SDK_CONFIG","AddressValidation","AvesErrorCodes","AvesErrorHandler","AvesException","AvesModule","AvesService","AvesSeverity","AvesStatus","AvesValidator","BookFileRQValidation","CancelFileRQValidation","ContactInfoValidation","LanguageCodeValidation","PassengerValidation","PaymentValidation","PrintBookingDocumentRQValidation","SearchMasterRecordRQValidation","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","customerStatusTypeSchema","customerTypeSchema","deliveryMethodTypeSchema","deliveryStatusTypeSchema","documentFormatTypeSchema","documentResponseSchema","documentTypeSchema","emailTypeSchema","genderTypeSchema","mapAddPaymentToXml","mapAddressToXml","mapAddressTypeFromXml","mapAddressTypeToXml","mapBookingFromXml","mapBookingResponseFromXml","mapBookingTypeToXml","mapCancelBookingToXml","mapCancelReasonToXml","mapCancelResponseFromXml","mapContactToXml","mapContactTypeFromXml","mapContactTypeToXml","mapCreateBookingToXml","mapCustomerToXml","mapCustomerTypeToXml","mapDeliveryMethodToXml","mapDocumentFormatToXml","mapDocumentResponseFromXml","mapDocumentTypeToXml","mapEmailTypeFromXml","mapEmailTypeToXml","mapMasterRecordFromXml","mapPassengerToXml","mapPassengerTypeFromXml","mapPassengerTypeToXml","mapPaymentResponseFromXml","mapPaymentStatusFromXml","mapPaymentStatusToXml","mapPaymentToXml","mapPaymentTypeFromXml","mapPaymentTypeToXml","mapPrintDocumentToXml","mapPriorityToXml","mapRefundMethodToXml","mapSearchCustomerToXml","mapSearchOperatorToXml","mapSearchResponseFromXml","mapServiceStatusFromXml","mapServiceStatusToXml","mapServiceToXml","mapServiceTypeFromXml","mapServiceTypeToXml","mapSpecialRequestTypeToXml","mapTitleFromXml","mapTitleToXml","operationResponseSchema","passengerTypeSchema","paymentStatusTypeSchema","paymentTypeSchema","pricingItemTypeSchema","printDocumentRequestSchema","priorityTypeSchema","refundMethodTypeSchema","searchCustomerRequestSchema","searchOperatorTypeSchema","searchResponseSchema","serviceStatusTypeSchema","serviceTypeSchema","specialRequestTypeSchema","titleTypeSchema","__toCommonJS","import_reflect_metadata","import_date_fns","createDateString","__name","date","dateObj","test","Error","parseISO","isValid","format","createDateTimeString","dateTime","createTimeString","time","hours","minutes","seconds","split","map","Number","mapAddressTypeToXml","type","home","work","billing","delivery","mapAddressTypeFromXml","HOME","WORK","BILLING","DELIVERY","mapContactTypeToXml","mobile","fax","mapContactTypeFromXml","MOBILE","FAX","mapEmailTypeToXml","mapEmailTypeFromXml","mapPassengerTypeToXml","adult","child","infant","mapPassengerTypeFromXml","ADT","CHD","INF","mapTitleToXml","title","mr","mrs","ms","dr","prof","mapTitleFromXml","MR","MRS","MS","DR","PROF","mapServiceTypeToXml","flight","hotel","car","transfer","insurance","mapServiceTypeFromXml","FLIGHT","HOTEL","CAR","TRANSFER","INSURANCE","mapServiceStatusToXml","status","confirmed","pending","cancelled","mapServiceStatusFromXml","CONFIRMED","PENDING","CANCELLED","mapPaymentTypeToXml","credit_card","debit_card","bank_transfer","cash","mapPaymentTypeFromXml","CREDIT_CARD","DEBIT_CARD","BANK_TRANSFER","CASH","mapPaymentStatusToXml","failed","mapPaymentStatusFromXml","FAILED","mapCustomerTypeToXml","customer","agent","supplier","mapCustomerTypeFromXml","CUSTOMER","AGENT","SUPPLIER","mapCustomerStatusToXml","active","inactive","suspended","mapCustomerStatusFromXml","ACTIVE","INACTIVE","SUSPENDED","mapCommunicationMethodToXml","method","email","sms","phone","mapCommunicationMethodFromXml","EMAIL","SMS","PHONE","mapBookingTypeToXml","individual","group","corporate","mapBookingStatusFromXml","status","PENDING","CONFIRMED","CANCELLED","COMPLETED","mapPriorityToXml","priority","low","normal","high","urgent","mapSpecialRequestTypeToXml","type","meal","seat","wheelchair","other","mapCancelReasonToXml","reason","customer_request","no_show","operational","mapRefundMethodToXml","method","original_payment","credit","cash","mapDocumentTypeToXml","confirmation","invoice","voucher","ticket","all","mapDocumentFormatToXml","format","pdf","html","xml","mapDeliveryMethodToXml","email","sms","download","mapSearchOperatorToXml","operator","equals","contains","starts_with","ends_with","mapPricingItemTypeFromXml","SERVICE","TAX","FEE","DISCOUNT","mapDeliveryStatusFromXml","SENT","FAILED","mapGenderToXml","gender","male","female","mapGenderFromXml","M","F","mapAddressToXml","clean","type","mapAddressTypeToXml","undefined","Street","street","City","city","State","state","PostalCode","postalCode","Country","country","mapAddressFromXml","xml","mapAddressTypeFromXml","mapContactToXml","Phone","phone","mapContactTypeToXml","number","Email","email","mapEmailTypeToXml","address","mapContactFromXml","mapContactTypeFromXml","mapEmailTypeFromXml","mapPassengerToXml","id","mapPassengerTypeToXml","title","mapTitleToXml","FirstName","firstName","LastName","lastName","MiddleName","middleName","DateOfBirth","dateOfBirth","Gender","gender","mapGenderToXml","Nationality","nationality","Passport","passport","expiryDate","issuingCountry","Address","ContactInfo","contact","mapPassengerFromXml","mapPassengerTypeFromXml","mapTitleFromXml","createDateString","mapGenderFromXml","mapServiceToXml","mapServiceTypeToXml","mapServiceStatusToXml","status","ServiceDetails","Code","code","Name","name","Description","description","StartDate","startDate","EndDate","endDate","Price","price","currency","amount","mapServiceFromXml","mapServiceTypeFromXml","mapServiceStatusFromXml","mapPaymentToXml","mapPaymentTypeToXml","mapPaymentStatusToXml","Amount","PaymentDetails","details","CardNumber","cardNumber","ExpiryDate","CardHolderName","cardHolderName","mapPaymentFromXml","mapPaymentTypeFromXml","mapPaymentStatusFromXml","mapSearchCustomerToXml","SearchCriteria","MasterRecordType","mapCustomerTypeToXml","SearchFields","Field","fields","map","field","value","operator","mapSearchOperatorToXml","Pagination","pagination","pageSize","pageNumber","mapCustomerToXml","mapCustomerStatusToXml","PersonalInfo","personalInfo","Title","BusinessInfo","businessInfo","CompanyName","companyName","TaxID","taxId","LicenseNumber","licenseNumber","Preferences","preferences","Language","language","Currency","CommunicationMethod","communicationMethod","mapCommunicationMethodToXml","mapCreateBookingToXml","BookingDetails","mapBookingTypeToXml","mapPriorityToXml","priority","CustomerInfo","customerId","CustomerDetails","customerDetails","PassengerList","Passenger","passengers","SelectedServiceList","Service","services","SpecialRequests","specialRequests","Request","req","mapSpecialRequestTypeToXml","mapCancelBookingToXml","bookingId","CancellationDetails","mapCancelReasonToXml","reason","RefundRequest","refundRequest","mapRefundMethodToXml","method","mapPrintDocumentToXml","DocumentRequest","mapDocumentTypeToXml","documentType","mapDocumentFormatToXml","format","DeliveryMethod","deliveryMethod","mapDeliveryMethodToXml","mapAddPaymentToXml","PaymentList","Payment","payments","mapCustomerFromXml","xml","id","type","mapCustomerTypeFromXml","status","mapCustomerStatusFromXml","personalInfo","PersonalInfo","title","Title","firstName","FirstName","lastName","LastName","middleName","MiddleName","dateOfBirth","DateOfBirth","createDateString","undefined","gender","Gender","nationality","Nationality","contact","ContactInfo","mapContactFromXml","address","Address","mapAddressFromXml","businessInfo","BusinessInfo","companyName","CompanyName","taxId","TaxID","licenseNumber","LicenseNumber","preferences","Preferences","language","Language","currency","Currency","communicationMethod","CommunicationMethod","mapCommunicationMethodFromXml","mapBookingFromXml","mapBookingStatusFromXml","createdAt","createDateTimeString","updatedAt","customer","CustomerInfo","passengers","PassengerList","Passenger","map","mapPassengerFromXml","services","ServiceList","Service","mapServiceFromXml","pricing","totalAmount","Pricing","TotalAmount","amount","breakdowns","Breakdown","Item","item","mapPricingItemTypeFromXml","description","mapBookingResponseFromXml","booking","BookingFile","success","OperationResult","message","data","mapSearchResponseFromXml","results","SearchResults","MasterRecord","pagination","PaginationInfo","totalRecords","pageSize","pageNumber","totalPages","mapDocumentResponseFromXml","DocumentInfo","format","size","downloadUrl","DownloadURL","deliveryStatus","DeliveryStatus","mapDeliveryStatusFromXml","method","mapCancelResponseFromXml","refundInfo","RefundInfo","refundAmount","refundMethod","processingTime","mapPaymentResponseFromXml","paymentSummary","totalPaid","PaymentSummary","TotalPaid","outstandingAmount","OutstandingAmount","paymentHistory","PaymentHistory","Payment","mapPaymentFromXml","mapMasterRecordFromXml","toLowerCase","import_common","import_config","import_common","AVES_SDK_CONFIG","Symbol","XML_HTTP_CLIENT","RequestPayload","payload","RqHeader","Body","Object","assign","_RequestPayload","WrapRequestDto","Request","_WrapRequestDto","AvesService","config","http","buildHeader","hostId","xtoken","languageCode","wrapRequest","body","WrapRequestDto","RqHeader","Body","searchMasterRecord","payload","postXml","insertOrUpdateMasterRecord","createBookingFile","modBookingFileHeader","modBookingFileServices","setBookingFileStatus","cancelBookingFile","insertFilePaymentList","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","MiddleName","DateOfBirth","datetime","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","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_zod","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","timeStringSchema","dateTimeStringSchema","customerAddressSchema","object","type","optional","street","city","state","postalCode","country","customerContactSchema","phone","number","min","email","address","customerSchema","id","status","personalInfo","title","firstName","lastName","middleName","dateOfBirth","gender","nationality","contact","businessInfo","companyName","taxId","licenseNumber","preferences","language","currency","communicationMethod","bookingPassengerSchema","passport","expiryDate","issuingCountry","bookingServiceSchema","code","name","description","startDate","endDate","price","amount","positive","bookingPaymentSchema","details","cardNumber","cardHolderName","searchCustomerRequestSchema","fields","array","value","operator","pagination","pageSize","int","pageNumber","createBookingRequestSchema","priority","customerId","customerDetails","passengers","services","specialRequests","cancelBookingRequestSchema","bookingId","reason","refundRequest","method","printDocumentRequestSchema","documentType","format","deliveryMethod","addPaymentRequestSchema","payments","bookingResponseSchema","createdAt","updatedAt","customer","pricing","totalAmount","breakdowns","searchResponseSchema","results","totalRecords","totalPages","documentResponseSchema","size","downloadUrl","url","deliveryStatus","operationResponseSchema","success","boolean","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","bookingResponse","searchResponse","documentResponse","operationResponse","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/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/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/validation/api-schemas.ts","../src/errors/aves-error-handler.ts","../src/errors/aves-error.ts"],"sourcesContent":["import 'reflect-metadata';\n\n// Primary API - Clean, developer-friendly interfaces\nexport * from './types/api-interfaces';\nexport * from './mappers';\nexport * from './utils';\n\n// NestJS Integration\nexport * from './nest/aves.module';\nexport * from './nest/aves.service';\n\n// Internal/Advanced APIs (for power users)\nexport * from './types/common';\nexport * from './types/interfaces';\nexport * from './http/xml-http-client';\nexport * from './config/aves.config';\nexport * from './tokens';\nexport * from './validation';\nexport * from './errors/aves-error-handler';\nexport * from './errors/aves-error';\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","// ===== ADDRESS TYPE MAPPERS =====\n\nexport function mapAddressTypeToXml(\n type: string\n): 'HOME' | 'WORK' | 'BILLING' | 'DELIVERY' {\n const mapping: Record<string, 'HOME' | 'WORK' | 'BILLING' | 'DELIVERY'> = {\n home: 'HOME',\n work: 'WORK',\n billing: 'BILLING',\n delivery: 'DELIVERY',\n };\n return mapping[type] || 'HOME';\n}\n\nexport function mapAddressTypeFromXml(\n type: string\n): 'home' | 'work' | 'billing' | 'delivery' {\n const mapping: Record<string, 'home' | 'work' | 'billing' | 'delivery'> = {\n HOME: 'home',\n WORK: 'work',\n BILLING: 'billing',\n DELIVERY: 'delivery',\n };\n return mapping[type] || 'home';\n}\n\n// ===== CONTACT TYPE MAPPERS =====\n\nexport function mapContactTypeToXml(\n type: string\n): 'HOME' | 'WORK' | 'MOBILE' | 'FAX' {\n const mapping: Record<string, 'HOME' | 'WORK' | 'MOBILE' | 'FAX'> = {\n home: 'HOME',\n work: 'WORK',\n mobile: 'MOBILE',\n fax: 'FAX',\n };\n return mapping[type] || 'HOME';\n}\n\nexport function mapContactTypeFromXml(\n type: string\n): 'home' | 'work' | 'mobile' | 'fax' {\n const mapping: Record<string, 'home' | 'work' | 'mobile' | 'fax'> = {\n HOME: 'home',\n WORK: 'work',\n MOBILE: 'mobile',\n FAX: 'fax',\n };\n return mapping[type] || 'home';\n}\n\nexport function mapEmailTypeToXml(type: string): 'HOME' | 'WORK' {\n const mapping: Record<string, 'HOME' | 'WORK'> = {\n home: 'HOME',\n work: 'WORK',\n };\n return mapping[type] || 'HOME';\n}\n\nexport function mapEmailTypeFromXml(type: string): 'home' | 'work' {\n const mapping: Record<string, 'home' | 'work'> = {\n HOME: 'home',\n WORK: 'work',\n };\n return mapping[type] || 'home';\n}\n\n// ===== PASSENGER TYPE MAPPERS =====\n\nexport function mapPassengerTypeToXml(type: string): 'ADT' | 'CHD' | 'INF' {\n const mapping: Record<string, 'ADT' | 'CHD' | 'INF'> = {\n adult: 'ADT',\n child: 'CHD',\n infant: 'INF',\n };\n return mapping[type] || 'ADT';\n}\n\nexport function mapPassengerTypeFromXml(\n type: string\n): 'adult' | 'child' | 'infant' {\n const mapping: Record<string, 'adult' | 'child' | 'infant'> = {\n ADT: 'adult',\n CHD: 'child',\n INF: 'infant',\n };\n return mapping[type] || 'adult';\n}\n\nexport function mapTitleToXml(\n title: string\n): 'MR' | 'MRS' | 'MS' | 'DR' | 'PROF' {\n const mapping: Record<string, 'MR' | 'MRS' | 'MS' | 'DR' | 'PROF'> = {\n mr: 'MR',\n mrs: 'MRS',\n ms: 'MS',\n dr: 'DR',\n prof: 'PROF',\n };\n return mapping[title] || 'MR';\n}\n\nexport function mapTitleFromXml(\n title: string\n): 'mr' | 'mrs' | 'ms' | 'dr' | 'prof' {\n const mapping: Record<string, 'mr' | 'mrs' | 'ms' | 'dr' | 'prof'> = {\n MR: 'mr',\n MRS: 'mrs',\n MS: 'ms',\n DR: 'dr',\n PROF: 'prof',\n };\n return mapping[title] || 'mr';\n}\n\n// ===== SERVICE TYPE MAPPERS =====\n\nexport function mapServiceTypeToXml(\n type: string\n): 'FLIGHT' | 'HOTEL' | 'CAR' | 'TRANSFER' | 'INSURANCE' {\n const mapping: Record<\n string,\n 'FLIGHT' | 'HOTEL' | 'CAR' | 'TRANSFER' | 'INSURANCE'\n > = {\n flight: 'FLIGHT',\n hotel: 'HOTEL',\n car: 'CAR',\n transfer: 'TRANSFER',\n insurance: 'INSURANCE',\n };\n return mapping[type] || 'FLIGHT';\n}\n\nexport function mapServiceTypeFromXml(\n type: string\n): 'flight' | 'hotel' | 'car' | 'transfer' | 'insurance' {\n const mapping: Record<\n string,\n 'flight' | 'hotel' | 'car' | 'transfer' | 'insurance'\n > = {\n FLIGHT: 'flight',\n HOTEL: 'hotel',\n CAR: 'car',\n TRANSFER: 'transfer',\n INSURANCE: 'insurance',\n };\n return mapping[type] || 'flight';\n}\n\nexport function mapServiceStatusToXml(\n status: string\n): 'CONFIRMED' | 'PENDING' | 'CANCELLED' {\n const mapping: Record<string, 'CONFIRMED' | 'PENDING' | 'CANCELLED'> = {\n confirmed: 'CONFIRMED',\n pending: 'PENDING',\n cancelled: 'CANCELLED',\n };\n return mapping[status] || 'PENDING';\n}\n\nexport function mapServiceStatusFromXml(\n status: string\n): 'confirmed' | 'pending' | 'cancelled' {\n const mapping: Record<string, 'confirmed' | 'pending' | 'cancelled'> = {\n CONFIRMED: 'confirmed',\n PENDING: 'pending',\n CANCELLED: 'cancelled',\n };\n return mapping[status] || 'pending';\n}\n\n// ===== PAYMENT TYPE MAPPERS =====\n\nexport function mapPaymentTypeToXml(\n type: string\n): 'CREDIT_CARD' | 'DEBIT_CARD' | 'BANK_TRANSFER' | 'CASH' {\n const mapping: Record<\n string,\n 'CREDIT_CARD' | 'DEBIT_CARD' | 'BANK_TRANSFER' | 'CASH'\n > = {\n credit_card: 'CREDIT_CARD',\n debit_card: 'DEBIT_CARD',\n bank_transfer: 'BANK_TRANSFER',\n cash: 'CASH',\n };\n return mapping[type] || 'CASH';\n}\n\nexport function mapPaymentTypeFromXml(\n type: string\n): 'credit_card' | 'debit_card' | 'bank_transfer' | 'cash' {\n const mapping: Record<\n string,\n 'credit_card' | 'debit_card' | 'bank_transfer' | 'cash'\n > = {\n CREDIT_CARD: 'credit_card',\n DEBIT_CARD: 'debit_card',\n BANK_TRANSFER: 'bank_transfer',\n CASH: 'cash',\n };\n return mapping[type] || 'cash';\n}\n\nexport function mapPaymentStatusToXml(\n status: string\n): 'PENDING' | 'CONFIRMED' | 'FAILED' {\n const mapping: Record<string, 'PENDING' | 'CONFIRMED' | 'FAILED'> = {\n pending: 'PENDING',\n confirmed: 'CONFIRMED',\n failed: 'FAILED',\n };\n return mapping[status] || 'PENDING';\n}\n\nexport function mapPaymentStatusFromXml(\n status: string\n): 'pending' | 'confirmed' | 'failed' {\n const mapping: Record<string, 'pending' | 'confirmed' | 'failed'> = {\n PENDING: 'pending',\n CONFIRMED: 'confirmed',\n FAILED: 'failed',\n };\n return mapping[status] || 'pending';\n}\n\n// ===== CUSTOMER TYPE MAPPERS =====\n\nexport function mapCustomerTypeToXml(\n type: string\n): 'CUSTOMER' | 'AGENT' | 'SUPPLIER' {\n const mapping: Record<string, 'CUSTOMER' | 'AGENT' | 'SUPPLIER'> = {\n customer: 'CUSTOMER',\n agent: 'AGENT',\n supplier: 'SUPPLIER',\n };\n return mapping[type] || 'CUSTOMER';\n}\n\nexport function mapCustomerTypeFromXml(\n type: string\n): 'customer' | 'agent' | 'supplier' {\n const mapping: Record<string, 'customer' | 'agent' | 'supplier'> = {\n CUSTOMER: 'customer',\n AGENT: 'agent',\n SUPPLIER: 'supplier',\n };\n return mapping[type] || 'customer';\n}\n\nexport function mapCustomerStatusToXml(\n status: string\n): 'ACTIVE' | 'INACTIVE' | 'SUSPENDED' {\n const mapping: Record<string, 'ACTIVE' | 'INACTIVE' | 'SUSPENDED'> = {\n active: 'ACTIVE',\n inactive: 'INACTIVE',\n suspended: 'SUSPENDED',\n };\n return mapping[status] || 'ACTIVE';\n}\n\nexport function mapCustomerStatusFromXml(\n status: string\n): 'active' | 'inactive' | 'suspended' {\n const mapping: Record<string, 'active' | 'inactive' | 'suspended'> = {\n ACTIVE: 'active',\n INACTIVE: 'inactive',\n SUSPENDED: 'suspended',\n };\n return mapping[status] || 'active';\n}\n\nexport function mapCommunicationMethodToXml(\n method: string\n): 'EMAIL' | 'SMS' | 'PHONE' {\n const mapping: Record<string, 'EMAIL' | 'SMS' | 'PHONE'> = {\n email: 'EMAIL',\n sms: 'SMS',\n phone: 'PHONE',\n };\n return mapping[method] || 'EMAIL';\n}\n\nexport function mapCommunicationMethodFromXml(\n method: string\n): 'email' | 'sms' | 'phone' {\n const mapping: Record<string, 'email' | 'sms' | 'phone'> = {\n EMAIL: 'email',\n SMS: 'sms',\n PHONE: 'phone',\n };\n return mapping[method] || 'email';\n}\n\n// ===== BOOKING TYPE MAPPERS =====\n\nexport function mapBookingTypeToXml(\n type: string\n): 'INDIVIDUAL' | 'GROUP' | 'CORPORATE' {\n const mapping: Record<string, 'INDIVIDUAL' | 'GROUP' | 'CORPORATE'> = {\n individual: 'INDIVIDUAL',\n group: 'GROUP',\n corporate: 'CORPORATE',\n };\n return mapping[type] || 'INDIVIDUAL';\n}\n\nexport function mapBookingStatusToXml(\n status: string\n): 'PENDING' | 'CONFIRMED' | 'CANCELLED' | 'COMPLETED' {\n const mapping: Record<\n string,\n 'PENDING' | 'CONFIRMED' | 'CANCELLED' | 'COMPLETED'\n > = {\n pending: 'PENDING',\n confirmed: 'CONFIRMED',\n cancelled: 'CANCELLED',\n completed: 'COMPLETED',\n };\n return mapping[status] || 'PENDING';\n}\n\nexport function mapBookingStatusFromXml(\n status: string\n): 'pending' | 'confirmed' | 'cancelled' | 'completed' {\n const mapping: Record<\n string,\n 'pending' | 'confirmed' | 'cancelled' | 'completed'\n > = {\n PENDING: 'pending',\n CONFIRMED: 'confirmed',\n CANCELLED: 'cancelled',\n COMPLETED: 'completed',\n };\n return mapping[status] || 'pending';\n}\n\nexport function mapPriorityToXml(\n priority: string\n): 'LOW' | 'NORMAL' | 'HIGH' | 'URGENT' {\n const mapping: Record<string, 'LOW' | 'NORMAL' | 'HIGH' | 'URGENT'> = {\n low: 'LOW',\n normal: 'NORMAL',\n high: 'HIGH',\n urgent: 'URGENT',\n };\n return mapping[priority] || 'NORMAL';\n}\n\n// ===== SPECIAL REQUEST TYPE MAPPERS =====\n\nexport function mapSpecialRequestTypeToXml(\n type: string\n): 'MEAL' | 'SEAT' | 'WHEELCHAIR' | 'OTHER' {\n const mapping: Record<string, 'MEAL' | 'SEAT' | 'WHEELCHAIR' | 'OTHER'> = {\n meal: 'MEAL',\n seat: 'SEAT',\n wheelchair: 'WHEELCHAIR',\n other: 'OTHER',\n };\n return mapping[type] || 'OTHER';\n}\n\n// ===== CANCEL REASON TYPE MAPPERS =====\n\nexport function mapCancelReasonToXml(\n reason: string\n): 'CUSTOMER_REQUEST' | 'NO_SHOW' | 'OPERATIONAL' | 'OTHER' {\n const mapping: Record<\n string,\n 'CUSTOMER_REQUEST' | 'NO_SHOW' | 'OPERATIONAL' | 'OTHER'\n > = {\n customer_request: 'CUSTOMER_REQUEST',\n no_show: 'NO_SHOW',\n operational: 'OPERATIONAL',\n other: 'OTHER',\n };\n return mapping[reason] || 'OTHER';\n}\n\nexport function mapRefundMethodToXml(\n method: string\n): 'ORIGINAL_PAYMENT' | 'CREDIT' | 'CASH' {\n const mapping: Record<string, 'ORIGINAL_PAYMENT' | 'CREDIT' | 'CASH'> = {\n original_payment: 'ORIGINAL_PAYMENT',\n credit: 'CREDIT',\n cash: 'CASH',\n };\n return mapping[method] || 'CASH';\n}\n\n// ===== DOCUMENT TYPE MAPPERS =====\n\nexport function mapDocumentTypeToXml(\n type: string\n): 'CONFIRMATION' | 'INVOICE' | 'VOUCHER' | 'TICKET' | 'ALL' {\n const mapping: Record<\n string,\n 'CONFIRMATION' | 'INVOICE' | 'VOUCHER' | 'TICKET' | 'ALL'\n > = {\n confirmation: 'CONFIRMATION',\n invoice: 'INVOICE',\n voucher: 'VOUCHER',\n ticket: 'TICKET',\n all: 'ALL',\n };\n return mapping[type] || 'ALL';\n}\n\nexport function mapDocumentFormatToXml(format: string): 'PDF' | 'HTML' | 'XML' {\n const mapping: Record<string, 'PDF' | 'HTML' | 'XML'> = {\n pdf: 'PDF',\n html: 'HTML',\n xml: 'XML',\n };\n return mapping[format] || 'PDF';\n}\n\nexport function mapDeliveryMethodToXml(\n method: string\n): 'EMAIL' | 'SMS' | 'DOWNLOAD' {\n const mapping: Record<string, 'EMAIL' | 'SMS' | 'DOWNLOAD'> = {\n email: 'EMAIL',\n sms: 'SMS',\n download: 'DOWNLOAD',\n };\n return mapping[method] || 'EMAIL';\n}\n\n// ===== SEARCH OPERATOR TYPE MAPPERS =====\n\nexport function mapSearchOperatorToXml(\n operator: string\n): 'EQUALS' | 'CONTAINS' | 'STARTS_WITH' | 'ENDS_WITH' {\n const mapping: Record<\n string,\n 'EQUALS' | 'CONTAINS' | 'STARTS_WITH' | 'ENDS_WITH'\n > = {\n equals: 'EQUALS',\n contains: 'CONTAINS',\n starts_with: 'STARTS_WITH',\n ends_with: 'ENDS_WITH',\n };\n return mapping[operator] || 'EQUALS';\n}\n\n// ===== PRICING ITEM TYPE MAPPERS =====\n\nexport function mapPricingItemTypeFromXml(\n type: string\n): 'service' | 'tax' | 'fee' | 'discount' {\n const mapping: Record<string, 'service' | 'tax' | 'fee' | 'discount'> = {\n SERVICE: 'service',\n TAX: 'tax',\n FEE: 'fee',\n DISCOUNT: 'discount',\n };\n return mapping[type] || 'service';\n}\n\n// ===== DELIVERY STATUS TYPE MAPPERS =====\n\nexport function mapDeliveryStatusFromXml(\n status: string\n): 'sent' | 'pending' | 'failed' {\n const mapping: Record<string, 'sent' | 'pending' | 'failed'> = {\n SENT: 'sent',\n PENDING: 'pending',\n FAILED: 'failed',\n };\n return mapping[status] || 'pending';\n}\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\nexport function mapGenderFromXml(gender: string): 'male' | 'female' {\n const mapping: Record<string, 'male' | 'female'> = {\n M: 'male',\n F: 'female',\n };\n return mapping[gender] || 'male';\n}\n","import {\n Customer,\n CustomerAddress,\n CustomerContact,\n BookingPassenger,\n BookingService,\n BookingPayment,\n SearchCustomerRequest,\n CreateBookingRequest,\n CancelBookingRequest,\n PrintDocumentRequest,\n AddPaymentRequest,\n} from '../types/api-interfaces';\nimport { createDateString } from '../utils/date-helpers';\nimport {\n mapAddressTypeToXml,\n mapAddressTypeFromXml,\n mapContactTypeToXml,\n mapContactTypeFromXml,\n mapEmailTypeToXml,\n mapEmailTypeFromXml,\n mapPassengerTypeToXml,\n mapPassengerTypeFromXml,\n mapTitleToXml,\n mapTitleFromXml,\n mapServiceTypeToXml,\n mapServiceTypeFromXml,\n mapServiceStatusToXml,\n mapServiceStatusFromXml,\n mapPaymentTypeToXml,\n mapPaymentTypeFromXml,\n mapPaymentStatusToXml,\n mapPaymentStatusFromXml,\n mapCustomerTypeToXml,\n mapCustomerStatusToXml,\n mapCommunicationMethodToXml,\n mapBookingTypeToXml,\n mapPriorityToXml,\n mapSpecialRequestTypeToXml,\n mapCancelReasonToXml,\n mapRefundMethodToXml,\n mapDocumentTypeToXml,\n mapDocumentFormatToXml,\n mapDeliveryMethodToXml,\n mapSearchOperatorToXml,\n mapGenderToXml,\n mapGenderFromXml,\n} from './type-mappers';\nimport {\n MasterRecord,\n Address as XmlAddress,\n ContactInfo as XmlContactInfo,\n Passenger as XmlPassenger,\n Service as XmlService,\n Payment as XmlPayment,\n SearchMasterRecordRQ,\n BookFileRQ,\n CancelFileRQ,\n PrintBookingDocumentRQ,\n FilePaymentListRQ,\n} from '../types/interfaces';\n\n// ===== ADDRESS MAPPERS =====\n\nexport function mapAddressToXml(clean: CustomerAddress): XmlAddress {\n return {\n '@Type': clean.type ? mapAddressTypeToXml(clean.type) : undefined,\n Street: clean.street,\n City: clean.city,\n State: clean.state,\n PostalCode: clean.postalCode,\n Country: clean.country,\n };\n}\n\nexport function mapAddressFromXml(xml: XmlAddress): CustomerAddress {\n return {\n type: xml['@Type'] ? mapAddressTypeFromXml(xml['@Type']) : undefined,\n street: xml.Street,\n city: xml.City,\n state: xml.State,\n postalCode: xml.PostalCode,\n country: xml.Country,\n };\n}\n\n// ===== CONTACT MAPPERS =====\n\nexport function mapContactToXml(clean: CustomerContact): XmlContactInfo {\n return {\n Phone: clean.phone\n ? {\n '@Type': clean.phone.type\n ? mapContactTypeToXml(clean.phone.type)\n : undefined,\n '@Number': clean.phone.number,\n }\n : undefined,\n Email: clean.email\n ? {\n '@Type': clean.email.type\n ? mapEmailTypeToXml(clean.email.type)\n : undefined,\n '@Address': clean.email.address,\n }\n : undefined,\n };\n}\n\nexport function mapContactFromXml(xml: XmlContactInfo): CustomerContact {\n return {\n phone: xml.Phone\n ? {\n type: xml.Phone['@Type']\n ? mapContactTypeFromXml(xml.Phone['@Type'])\n : undefined,\n number: xml.Phone['@Number'],\n }\n : undefined,\n email: xml.Email\n ? {\n type: xml.Email['@Type']\n ? mapEmailTypeFromXml(xml.Email['@Type'])\n : undefined,\n address: xml.Email['@Address'],\n }\n : undefined,\n };\n}\n\n// ===== PASSENGER MAPPERS =====\n\nexport function mapPassengerToXml(clean: BookingPassenger): XmlPassenger {\n return {\n '@PassengerID': clean.id,\n '@Type': mapPassengerTypeToXml(clean.type),\n '@Title': clean.title ? mapTitleToXml(clean.title) : undefined,\n FirstName: clean.firstName,\n LastName: clean.lastName,\n MiddleName: clean.middleName,\n DateOfBirth: clean.dateOfBirth,\n Gender: clean.gender ? mapGenderToXml(clean.gender) : undefined,\n Nationality: clean.nationality,\n Passport: clean.passport\n ? {\n '@Number': clean.passport.number,\n '@ExpiryDate': clean.passport.expiryDate,\n '@IssuingCountry': clean.passport.issuingCountry,\n }\n : undefined,\n Address: clean.address ? mapAddressToXml(clean.address) : undefined,\n ContactInfo: clean.contact ? mapContactToXml(clean.contact) : undefined,\n };\n}\n\nexport function mapPassengerFromXml(xml: XmlPassenger): BookingPassenger {\n return {\n id: xml['@PassengerID'],\n type: mapPassengerTypeFromXml(xml['@Type']),\n title: xml['@Title'] ? mapTitleFromXml(xml['@Title']) : undefined,\n firstName: xml.FirstName,\n lastName: xml.LastName,\n middleName: xml.MiddleName,\n dateOfBirth: xml.DateOfBirth\n ? createDateString(xml.DateOfBirth)\n : undefined,\n gender: xml.Gender ? mapGenderFromXml(xml.Gender) : undefined,\n nationality: xml.Nationality,\n passport: xml.Passport\n ? {\n number: xml.Passport['@Number'],\n expiryDate: createDateString(xml.Passport['@ExpiryDate']),\n issuingCountry: xml.Passport['@IssuingCountry'],\n }\n : undefined,\n address: xml.Address ? mapAddressFromXml(xml.Address) : undefined,\n contact: xml.ContactInfo ? mapContactFromXml(xml.ContactInfo) : undefined,\n };\n}\n\n// ===== SERVICE MAPPERS =====\n\nexport function mapServiceToXml(clean: BookingService): XmlService {\n return {\n '@ServiceID': clean.id,\n '@Type': mapServiceTypeToXml(clean.type),\n '@Status': mapServiceStatusToXml(clean.status),\n ServiceDetails: {\n Code: clean.code,\n Name: clean.name,\n Description: clean.description,\n StartDate: clean.startDate,\n EndDate: clean.endDate,\n Price: clean.price\n ? {\n '@Currency': clean.price.currency,\n '@Amount': clean.price.amount,\n }\n : undefined,\n },\n };\n}\n\nexport function mapServiceFromXml(xml: XmlService): BookingService {\n return {\n id: xml['@ServiceID'],\n type: mapServiceTypeFromXml(xml['@Type']),\n status: mapServiceStatusFromXml(xml['@Status']),\n code: xml.ServiceDetails.Code,\n name: xml.ServiceDetails.Name,\n description: xml.ServiceDetails.Description,\n startDate: xml.ServiceDetails.StartDate\n ? createDateString(xml.ServiceDetails.StartDate)\n : undefined,\n endDate: xml.ServiceDetails.EndDate\n ? createDateString(xml.ServiceDetails.EndDate)\n : undefined,\n price: xml.ServiceDetails.Price\n ? {\n currency: xml.ServiceDetails.Price['@Currency'],\n amount: xml.ServiceDetails.Price['@Amount'],\n }\n : undefined,\n };\n}\n\n// ===== PAYMENT MAPPERS =====\n\nexport function mapPaymentToXml(clean: BookingPayment): XmlPayment {\n return {\n '@PaymentID': clean.id,\n '@Type': mapPaymentTypeToXml(clean.type),\n '@Status': mapPaymentStatusToXml(clean.status),\n Amount: {\n '@Currency': clean.amount.currency,\n '@Amount': clean.amount.amount,\n },\n PaymentDetails: clean.details\n ? {\n CardNumber: clean.details.cardNumber,\n ExpiryDate: clean.details.expiryDate,\n CardHolderName: clean.details.cardHolderName,\n }\n : undefined,\n };\n}\n\nexport function mapPaymentFromXml(xml: XmlPayment): BookingPayment {\n return {\n id: xml['@PaymentID'],\n type: mapPaymentTypeFromXml(xml['@Type']),\n status: mapPaymentStatusFromXml(xml['@Status']),\n amount: {\n currency: xml.Amount['@Currency'],\n amount: xml.Amount['@Amount'],\n },\n details: xml.PaymentDetails\n ? {\n cardNumber: xml.PaymentDetails.CardNumber,\n expiryDate: xml.PaymentDetails.ExpiryDate,\n cardHolderName: xml.PaymentDetails.CardHolderName,\n }\n : undefined,\n };\n}\n\n// ===== REQUEST MAPPERS =====\n\nexport function mapSearchCustomerToXml(\n clean: SearchCustomerRequest\n): SearchMasterRecordRQ {\n return {\n SearchCriteria: {\n MasterRecordType: mapCustomerTypeToXml(clean.type),\n SearchFields: {\n Field: clean.fields.map((field) => ({\n '@Name': field.name,\n '@Value': field.value,\n '@Operator': field.operator\n ? mapSearchOperatorToXml(field.operator)\n : undefined,\n })),\n },\n Pagination: clean.pagination\n ? {\n '@PageSize': clean.pagination.pageSize,\n '@PageNumber': clean.pagination.pageNumber,\n }\n : undefined,\n },\n };\n}\n\nexport function mapCustomerToXml(clean: Customer): MasterRecord {\n return {\n '@MasterRecordID': clean.id,\n '@Type': mapCustomerTypeToXml(clean.type),\n '@Status': mapCustomerStatusToXml(clean.status),\n PersonalInfo: clean.personalInfo\n ? {\n Title: clean.personalInfo.title,\n FirstName: clean.personalInfo.firstName,\n LastName: clean.personalInfo.lastName,\n MiddleName: clean.personalInfo.middleName,\n DateOfBirth: clean.personalInfo.dateOfBirth,\n Gender: clean.personalInfo.gender\n ? mapGenderToXml(clean.personalInfo.gender)\n : undefined,\n Nationality: clean.personalInfo.nationality,\n }\n : undefined,\n ContactInfo: clean.contact ? mapContactToXml(clean.contact) : undefined,\n Address: clean.address ? mapAddressToXml(clean.address) : undefined,\n BusinessInfo: clean.businessInfo\n ? {\n CompanyName: clean.businessInfo.companyName,\n TaxID: clean.businessInfo.taxId,\n LicenseNumber: clean.businessInfo.licenseNumber,\n }\n : undefined,\n Preferences: clean.preferences\n ? {\n Language: clean.preferences.language,\n Currency: clean.preferences.currency,\n CommunicationMethod: clean.preferences.communicationMethod\n ? mapCommunicationMethodToXml(clean.preferences.communicationMethod)\n : undefined,\n }\n : undefined,\n };\n}\n\nexport function mapCreateBookingToXml(clean: CreateBookingRequest): BookFileRQ {\n return {\n BookingDetails: {\n '@BookingType': mapBookingTypeToXml(clean.type),\n '@Priority': mapPriorityToXml(clean.priority),\n CustomerInfo: {\n '@CustomerID': clean.customerId,\n CustomerDetails: clean.customerDetails\n ? mapCustomerToXml(clean.customerDetails)\n : undefined,\n },\n PassengerList: {\n Passenger: clean.passengers.map(mapPassengerToXml),\n },\n SelectedServiceList: {\n Service: clean.services.map(mapServiceToXml),\n },\n SpecialRequests: clean.specialRequests\n ? {\n Request: clean.specialRequests.map((req) => ({\n '@Type': mapSpecialRequestTypeToXml(req.type),\n '@Description': req.description,\n })),\n }\n : undefined,\n },\n };\n}\n\nexport function mapCancelBookingToXml(\n clean: CancelBookingRequest\n): CancelFileRQ {\n return {\n '@BookingFileID': clean.bookingId,\n CancellationDetails: {\n '@Reason': mapCancelReasonToXml(clean.reason),\n '@Description': clean.description,\n RefundRequest: clean.refundRequest\n ? {\n '@Amount': clean.refundRequest.amount,\n '@Currency': clean.refundRequest.currency,\n '@Method': mapRefundMethodToXml(clean.refundRequest.method),\n }\n : undefined,\n },\n };\n}\n\nexport function mapPrintDocumentToXml(\n clean: PrintDocumentRequest\n): PrintBookingDocumentRQ {\n return {\n '@BookingFileID': clean.bookingId,\n DocumentRequest: {\n '@DocumentType': mapDocumentTypeToXml(clean.documentType),\n '@Format': mapDocumentFormatToXml(clean.format),\n '@Language': clean.language,\n DeliveryMethod: clean.deliveryMethod\n ? {\n '@Type': mapDeliveryMethodToXml(clean.deliveryMethod.type),\n '@Address': clean.deliveryMethod.address,\n }\n : undefined,\n },\n };\n}\n\nexport function mapAddPaymentToXml(\n clean: AddPaymentRequest\n): FilePaymentListRQ {\n return {\n '@BookingFileID': clean.bookingId,\n PaymentList: {\n Payment: clean.payments.map(mapPaymentToXml),\n },\n };\n}\n","// Mappers to convert XML responses to clean API responses\nimport {\n BookingResponse,\n SearchResponse,\n DocumentResponse,\n OperationResponse,\n Customer,\n} from '../types/api-interfaces';\nimport { createDateTimeString, createDateString } from '../utils/date-helpers';\nimport {\n mapCustomerTypeFromXml,\n mapCustomerStatusFromXml,\n mapCommunicationMethodFromXml,\n mapBookingStatusFromXml,\n mapPricingItemTypeFromXml,\n mapDeliveryStatusFromXml,\n} from './type-mappers';\nimport {\n BookingFile,\n SearchMasterRecordRS,\n PrintBookingDocumentRS,\n BookingFileRS,\n CancelFileRS,\n FilePaymentListRS,\n MasterRecord,\n} from '../types/interfaces';\nimport {\n mapPassengerFromXml,\n mapServiceFromXml,\n mapPaymentFromXml,\n mapAddressFromXml,\n mapContactFromXml,\n} from './request-mappers';\n\n// ===== CUSTOMER MAPPERS =====\n\nexport function mapCustomerFromXml(xml: MasterRecord): Customer {\n return {\n id: xml['@MasterRecordID'],\n type: mapCustomerTypeFromXml(xml['@Type']),\n status: mapCustomerStatusFromXml(xml['@Status']),\n personalInfo: xml.PersonalInfo\n ? {\n title: xml.PersonalInfo.Title,\n firstName: xml.PersonalInfo.FirstName,\n lastName: xml.PersonalInfo.LastName,\n middleName: xml.PersonalInfo.MiddleName,\n dateOfBirth: xml.PersonalInfo.DateOfBirth\n ? createDateString(xml.PersonalInfo.DateOfBirth)\n : undefined,\n gender: xml.PersonalInfo.Gender === 'M' ? 'male' : 'female',\n nationality: xml.PersonalInfo.Nationality,\n }\n : undefined,\n contact: xml.ContactInfo ? mapContactFromXml(xml.ContactInfo) : undefined,\n address: xml.Address ? mapAddressFromXml(xml.Address) : undefined,\n businessInfo: xml.BusinessInfo\n ? {\n companyName: xml.BusinessInfo.CompanyName,\n taxId: xml.BusinessInfo.TaxID,\n licenseNumber: xml.BusinessInfo.LicenseNumber,\n }\n : undefined,\n preferences: xml.Preferences\n ? {\n language: xml.Preferences.Language,\n currency: xml.Preferences.Currency,\n communicationMethod: xml.Preferences.CommunicationMethod\n ? mapCommunicationMethodFromXml(xml.Preferences.CommunicationMethod)\n : undefined,\n }\n : undefined,\n };\n}\n\n// ===== BOOKING RESPONSE MAPPERS =====\n\nexport function mapBookingFromXml(xml: BookingFile): BookingResponse {\n return {\n id: xml['@BookingFileID'],\n status: mapBookingStatusFromXml(xml['@Status']),\n createdAt: createDateTimeString(xml['@CreationDate']),\n updatedAt: createDateTimeString(xml['@LastModified']),\n customer: mapCustomerFromXml(xml.CustomerInfo),\n passengers: xml.PassengerList.Passenger.map(mapPassengerFromXml),\n services: xml.ServiceList.Service.map(mapServiceFromXml),\n pricing: {\n totalAmount: {\n currency: xml.Pricing.TotalAmount['@Currency'],\n amount: xml.Pricing.TotalAmount['@Amount'],\n },\n breakdowns: xml.Pricing.Breakdown?.Item.map((item) => ({\n type: mapPricingItemTypeFromXml(item['@Type']),\n description: item['@Description'],\n amount: item['@Amount'],\n })),\n },\n };\n}\n\nexport function mapBookingResponseFromXml(\n xml: BookingFileRS\n): BookingResponse & OperationResponse {\n const booking = mapBookingFromXml(xml.BookingFile);\n return {\n ...booking,\n success: xml.OperationResult['@Status'] === 'SUCCESS',\n message: xml.OperationResult['@Message'],\n data: booking,\n };\n}\n\n// ===== SEARCH RESPONSE MAPPERS =====\n\nexport function mapSearchResponseFromXml(\n xml: SearchMasterRecordRS\n): SearchResponse {\n return {\n results: xml.SearchResults.MasterRecord.map(mapCustomerFromXml),\n pagination: xml.SearchResults.PaginationInfo\n ? {\n totalRecords: xml.SearchResults.PaginationInfo['@TotalRecords'],\n pageSize: xml.SearchResults.PaginationInfo['@PageSize'],\n pageNumber: xml.SearchResults.PaginationInfo['@PageNumber'],\n totalPages: xml.SearchResults.PaginationInfo['@TotalPages'],\n }\n : undefined,\n };\n}\n\n// ===== DOCUMENT RESPONSE MAPPERS =====\n\nexport function mapDocumentResponseFromXml(\n xml: PrintBookingDocumentRS\n): DocumentResponse & OperationResponse {\n return {\n id: xml.DocumentInfo['@DocumentID'],\n type: xml.DocumentInfo['@DocumentType'],\n format: xml.DocumentInfo['@Format'],\n size: xml.DocumentInfo['@Size'],\n createdAt: createDateTimeString(xml.DocumentInfo['@CreationDate']),\n downloadUrl: xml.DocumentInfo.DownloadURL,\n deliveryStatus: xml.DocumentInfo.DeliveryStatus\n ? {\n status: mapDeliveryStatusFromXml(\n xml.DocumentInfo.DeliveryStatus['@Status']\n ),\n method: xml.DocumentInfo.DeliveryStatus['@Method'],\n address: xml.DocumentInfo.DeliveryStatus['@Address'],\n }\n : undefined,\n success: xml.OperationResult['@Status'] === 'SUCCESS',\n message: xml.OperationResult['@Message'],\n };\n}\n\n// ===== CANCEL RESPONSE MAPPERS =====\n\nexport function mapCancelResponseFromXml(xml: CancelFileRS): OperationResponse {\n return {\n success: xml.OperationResult['@Status'] === '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\n): OperationResponse {\n const booking = mapBookingFromXml(xml.BookingFile);\n return {\n success: xml.OperationResult['@Status'] === 'SUCCESS',\n message: xml.OperationResult['@Message'],\n data: {\n booking,\n paymentSummary: {\n totalPaid: {\n currency: xml.PaymentSummary.TotalPaid['@Currency'],\n amount: xml.PaymentSummary.TotalPaid['@Amount'],\n },\n outstandingAmount: {\n currency: xml.PaymentSummary.OutstandingAmount['@Currency'],\n amount: xml.PaymentSummary.OutstandingAmount['@Amount'],\n },\n paymentHistory:\n xml.PaymentSummary.PaymentHistory.Payment.map(mapPaymentFromXml),\n },\n },\n };\n}\n\n// ===== MASTER RECORD MAPPERS =====\n\nexport function mapMasterRecordFromXml(xml: MasterRecord): any {\n return {\n id: xml['@MasterRecordID'],\n type: xml['@Type'].toLowerCase(),\n status: xml['@Status'].toLowerCase(),\n personalInfo: xml.PersonalInfo\n ? {\n title: xml.PersonalInfo.Title,\n firstName: xml.PersonalInfo.FirstName,\n lastName: xml.PersonalInfo.LastName,\n middleName: xml.PersonalInfo.MiddleName,\n dateOfBirth: xml.PersonalInfo.DateOfBirth,\n gender: xml.PersonalInfo.Gender?.toLowerCase(),\n nationality: xml.PersonalInfo.Nationality,\n }\n : undefined,\n contact: xml.ContactInfo ? mapContactFromXml(xml.ContactInfo) : undefined,\n address: xml.Address ? mapAddressFromXml(xml.Address) : undefined,\n businessInfo: xml.BusinessInfo\n ? {\n companyName: xml.BusinessInfo.CompanyName,\n taxId: xml.BusinessInfo.TaxID,\n licenseNumber: xml.BusinessInfo.LicenseNumber,\n }\n : undefined,\n preferences: xml.Preferences\n ? {\n language: xml.Preferences.Language,\n currency: xml.Preferences.Currency,\n communicationMethod:\n xml.Preferences.CommunicationMethod?.toLowerCase(),\n }\n : undefined,\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 'src/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 type {\n SearchMasterRecordRQ,\n SearchMasterRecordRS,\n ManageMasterRecordRQ,\n CustomerRecordRS,\n BookFileRQ,\n BookingFileRS,\n ModiFileHeaderRQ,\n ModiFileHeaderRS,\n ModFileServicesRQ,\n SetStatusRQ,\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';\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', // THIS IS THE DEFAULT VALUE FOR THE INTERFACE\n '@UserName': 'WEB', // THIS IS THE DEFAULT VALUE FOR THE USERNAME\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 // Master Records\n async searchMasterRecord(\n payload: SearchMasterRecordRQ\n ): Promise<AvesResponseRoot<SearchMasterRecordRS>> {\n return this.http.postXml(\n '/interop/masterRecords/v2/rest/Search',\n 'SearchMasterRecordRQ',\n this.wrapRequest(payload)\n );\n }\n\n async insertOrUpdateMasterRecord(\n payload: ManageMasterRecordRQ\n ): Promise<AvesResponseRoot<CustomerRecordRS>> {\n return this.http.postXml(\n '/interop/masterRecords/v2/rest/InsertOrUpdate',\n 'ManageMasterRecordRQ',\n this.wrapRequest(payload)\n );\n }\n\n // Booking\n async createBookingFile(\n payload: BookFileRQ\n ): Promise<AvesResponseRoot<BookingFileRS>> {\n return this.http.postXml(\n '/interop/booking/v2/rest/CreateBookingFile',\n 'BookFileRQ',\n this.wrapRequest(payload)\n );\n }\n\n async modBookingFileHeader(\n payload: ModiFileHeaderRQ\n ): Promise<AvesResponseRoot<ModiFileHeaderRS>> {\n return this.http.postXml(\n '/interop/booking/v2/rest/ModBookingFileHeader',\n 'ModiFileHeaderRQ',\n this.wrapRequest(payload)\n );\n }\n\n async modBookingFileServices(\n payload: ModFileServicesRQ\n ): Promise<AvesResponseRoot<BookingFileRS>> {\n return this.http.postXml(\n '/interop/booking/v2/rest/ModBookingFileServices',\n 'ModFileServicesRQ',\n this.wrapRequest(payload)\n );\n }\n\n async setBookingFileStatus(\n payload: SetStatusRQ\n ): Promise<AvesResponseRoot<SetStatusServiceRS>> {\n return this.http.postXml(\n '/interop/booking/v2/rest/SetBookingFileStatus',\n 'SetStatusRQ',\n this.wrapRequest(payload)\n );\n }\n\n async cancelBookingFile(\n payload: CancelFileRQ\n ): Promise<AvesResponseRoot<CancelFileRS>> {\n return this.http.postXml(\n '/interop/booking/v2/rest/CancelBookingFile',\n 'CancelFileRQ',\n this.wrapRequest(payload)\n );\n }\n\n async insertFilePaymentList(\n payload: FilePaymentListRQ\n ): Promise<AvesResponseRoot<FilePaymentListRS>> {\n return this.http.postXml(\n '/interop/booking/v2/rest/InsertFilePaymentList',\n 'FilePaymentListRQ',\n this.wrapRequest(payload)\n );\n }\n\n // Documents\n async printBookingDocument(\n payload: PrintBookingDocumentRQ\n ): Promise<AvesResponseRoot<PrintBookingDocumentRS>> {\n return this.http.postXml(\n '/interop/document/v2/rest/PrintBookingDocument',\n 'PrintBookingDocumentRQ',\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","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 MiddleName: z.string().max(50).optional(),\n DateOfBirth: z.string().datetime().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 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 { z } from 'zod';\n\n// ===== TYPE SCHEMAS =====\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(['adult', 'child', 'infant']);\nexport const titleTypeSchema = z.enum(['mr', 'mrs', 'ms', 'dr', 'prof']);\nexport const genderTypeSchema = z.enum(['male', 'female']);\nexport const serviceTypeSchema = z.enum([\n 'flight',\n 'hotel',\n 'car',\n 'transfer',\n 'insurance',\n]);\nexport const serviceStatusTypeSchema = z.enum([\n 'confirmed',\n 'pending',\n 'cancelled',\n]);\nexport const paymentTypeSchema = z.enum([\n 'credit_card',\n 'debit_card',\n 'bank_transfer',\n 'cash',\n]);\nexport const paymentStatusTypeSchema = z.enum([\n 'pending',\n 'confirmed',\n 'failed',\n]);\nexport const customerTypeSchema = z.enum(['customer', 'agent', 'supplier']);\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 'customer_request',\n 'no_show',\n 'operational',\n 'other',\n]);\nexport const refundMethodTypeSchema = z.enum([\n 'original_payment',\n 'credit',\n 'cash',\n]);\nexport const documentTypeSchema = z.enum([\n 'confirmation',\n 'invoice',\n 'voucher',\n 'ticket',\n 'all',\n]);\nexport const documentFormatTypeSchema = z.enum(['pdf', 'html', 'xml']);\nexport const deliveryMethodTypeSchema = z.enum(['email', 'sms', 'download']);\nexport const bookingStatusTypeSchema = z.enum([\n 'pending',\n 'confirmed',\n 'cancelled',\n 'completed',\n]);\nexport const pricingItemTypeSchema = z.enum([\n 'service',\n 'tax',\n 'fee',\n 'discount',\n]);\nexport const deliveryStatusTypeSchema = z.enum(['sent', 'pending', 'failed']);\nexport const customerStatusTypeSchema = z.enum([\n 'active',\n 'inactive',\n 'suspended',\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.string().optional(),\n city: z.string().optional(),\n state: z.string().optional(),\n postalCode: z.string().optional(),\n country: z.string().optional(),\n});\n\nexport const customerContactSchema = z.object({\n phone: z\n .object({\n type: contactTypeSchema.optional(),\n number: z.string().min(1, 'Phone number is required'),\n })\n .optional(),\n email: z\n .object({\n type: emailTypeSchema.optional(),\n address: z.string().email('Valid email address is required'),\n })\n .optional(),\n});\n\nexport const customerSchema = z.object({\n id: z.string().min(1, 'Customer ID is required'),\n type: customerTypeSchema,\n status: customerStatusTypeSchema,\n personalInfo: z\n .object({\n title: z.string().optional(),\n firstName: z.string().min(1, 'First name is required'),\n lastName: z.string().min(1, 'Last name is required'),\n middleName: z.string().optional(),\n dateOfBirth: dateStringSchema.optional(),\n gender: genderTypeSchema.optional(),\n nationality: z.string().optional(),\n })\n .optional(),\n contact: customerContactSchema.optional(),\n address: customerAddressSchema.optional(),\n businessInfo: z\n .object({\n companyName: z.string().optional(),\n taxId: z.string().optional(),\n licenseNumber: z.string().optional(),\n })\n .optional(),\n preferences: z\n .object({\n language: z.string().optional(),\n currency: z.string().optional(),\n communicationMethod: communicationMethodTypeSchema.optional(),\n })\n .optional(),\n});\n\nexport const bookingPassengerSchema = z.object({\n id: z.string().min(1, 'Passenger ID is required'),\n type: passengerTypeSchema,\n title: titleTypeSchema.optional(),\n firstName: z.string().min(1, 'First name is required'),\n lastName: z.string().min(1, 'Last name is required'),\n middleName: z.string().optional(),\n dateOfBirth: dateStringSchema.optional(),\n gender: genderTypeSchema.optional(),\n nationality: z.string().optional(),\n passport: z\n .object({\n number: z.string().min(1, 'Passport number is required'),\n expiryDate: dateStringSchema,\n issuingCountry: z.string().min(1, 'Issuing country is required'),\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.string().optional(),\n name: z.string().optional(),\n description: z.string().optional(),\n startDate: dateStringSchema.optional(),\n endDate: dateStringSchema.optional(),\n price: z\n .object({\n currency: z.string().min(1, 'Currency is required'),\n amount: z.number().positive('Amount must be positive'),\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.string().min(1, 'Currency is required'),\n amount: z.number().positive('Amount must be positive'),\n }),\n details: z\n .object({\n cardNumber: z.string().optional(),\n expiryDate: z.string().optional(),\n cardHolderName: z.string().optional(),\n })\n .optional(),\n});\n\n// ===== REQUEST SCHEMAS =====\n\nexport const searchCustomerRequestSchema = z.object({\n type: customerTypeSchema,\n fields: z\n .array(\n z.object({\n name: z.string().min(1, 'Field name is required'),\n value: z.string().min(1, 'Field value is required'),\n operator: searchOperatorTypeSchema.optional(),\n })\n )\n .min(1, 'At least one search field is required'),\n pagination: z\n .object({\n pageSize: z\n .number()\n .int()\n .positive('Page size must be a positive integer'),\n pageNumber: z.number().int().min(1, 'Page number must be at least 1'),\n })\n .optional(),\n});\n\nexport const createBookingRequestSchema = z.object({\n type: bookingTypeSchema,\n priority: priorityTypeSchema,\n customerId: z.string().optional(),\n customerDetails: customerSchema.optional(),\n passengers: z\n .array(bookingPassengerSchema)\n .min(1, 'At least one passenger is required'),\n services: z\n .array(bookingServiceSchema)\n .min(1, 'At least one service is required'),\n specialRequests: z\n .array(\n z.object({\n type: specialRequestTypeSchema,\n description: z\n .string()\n .min(1, 'Special request description is required'),\n })\n )\n .optional(),\n});\n\nexport const cancelBookingRequestSchema = z.object({\n bookingId: z.string().min(1, 'Booking ID is required'),\n reason: cancelReasonTypeSchema,\n description: z.string().optional(),\n refundRequest: z\n .object({\n amount: z.number().positive('Refund amount must be positive'),\n currency: z.string().min(1, 'Currency is required'),\n method: refundMethodTypeSchema,\n })\n .optional(),\n});\n\nexport const printDocumentRequestSchema = z.object({\n bookingId: z.string().min(1, 'Booking ID is required'),\n documentType: documentTypeSchema,\n format: documentFormatTypeSchema,\n language: z.string().optional(),\n deliveryMethod: z\n .object({\n type: deliveryMethodTypeSchema,\n address: z.string().optional(),\n })\n .optional(),\n});\n\nexport const addPaymentRequestSchema = z.object({\n bookingId: z.string().min(1, 'Booking ID is required'),\n payments: z\n .array(bookingPaymentSchema)\n .min(1, 'At least one payment is required'),\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.string().min(1, 'Currency is required'),\n amount: z.number().positive('Amount must be positive'),\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 searchResponseSchema = z.object({\n results: z.array(customerSchema),\n pagination: z\n .object({\n totalRecords: z.number().int().min(0),\n pageSize: z.number().int().positive(),\n pageNumber: z.number().int().min(1),\n totalPages: z.number().int().min(0),\n })\n .optional(),\n});\n\nexport const documentResponseSchema = z.object({\n id: z.string().min(1, 'Document ID is required'),\n type: z.string().min(1, 'Document type is required'),\n format: z.string().min(1, 'Document format is required'),\n size: z.number().int().positive('Document size must be positive'),\n createdAt: dateTimeStringSchema,\n downloadUrl: z.string().url('Download URL must be valid').optional(),\n deliveryStatus: z\n .object({\n status: deliveryStatusTypeSchema,\n method: z.string().min(1, 'Delivery method is required'),\n address: z.string().optional(),\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\n // Response schemas\n bookingResponse: bookingResponseSchema,\n searchResponse: searchResponseSchema,\n documentResponse: documentResponseSchema,\n operationResponse: operationResponseSchema,\n} as const;\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","AvesErrorCodes","AvesErrorHandler","AvesException","AvesModule","AvesService","AvesSeverity","AvesStatus","AvesValidator","BookFileRQValidation","CancelFileRQValidation","ContactInfoValidation","LanguageCodeValidation","PassengerValidation","PaymentValidation","PrintBookingDocumentRQValidation","SearchMasterRecordRQValidation","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","customerStatusTypeSchema","customerTypeSchema","deliveryMethodTypeSchema","deliveryStatusTypeSchema","documentFormatTypeSchema","documentResponseSchema","documentTypeSchema","emailTypeSchema","genderTypeSchema","mapAddPaymentToXml","mapAddressToXml","mapAddressTypeFromXml","mapAddressTypeToXml","mapBookingFromXml","mapBookingResponseFromXml","mapBookingTypeToXml","mapCancelBookingToXml","mapCancelReasonToXml","mapCancelResponseFromXml","mapContactToXml","mapContactTypeFromXml","mapContactTypeToXml","mapCreateBookingToXml","mapCustomerToXml","mapCustomerTypeToXml","mapDeliveryMethodToXml","mapDocumentFormatToXml","mapDocumentResponseFromXml","mapDocumentTypeToXml","mapEmailTypeFromXml","mapEmailTypeToXml","mapMasterRecordFromXml","mapPassengerToXml","mapPassengerTypeFromXml","mapPassengerTypeToXml","mapPaymentResponseFromXml","mapPaymentStatusFromXml","mapPaymentStatusToXml","mapPaymentToXml","mapPaymentTypeFromXml","mapPaymentTypeToXml","mapPrintDocumentToXml","mapPriorityToXml","mapRefundMethodToXml","mapSearchCustomerToXml","mapSearchOperatorToXml","mapSearchResponseFromXml","mapServiceStatusFromXml","mapServiceStatusToXml","mapServiceToXml","mapServiceTypeFromXml","mapServiceTypeToXml","mapSpecialRequestTypeToXml","mapTitleFromXml","mapTitleToXml","operationResponseSchema","passengerTypeSchema","paymentStatusTypeSchema","paymentTypeSchema","pricingItemTypeSchema","printDocumentRequestSchema","priorityTypeSchema","refundMethodTypeSchema","searchCustomerRequestSchema","searchOperatorTypeSchema","searchResponseSchema","serviceStatusTypeSchema","serviceTypeSchema","specialRequestTypeSchema","titleTypeSchema","__toCommonJS","import_reflect_metadata","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","mapAddressTypeToXml","type","home","work","billing","delivery","mapAddressTypeFromXml","HOME","WORK","BILLING","DELIVERY","mapContactTypeToXml","mobile","fax","mapContactTypeFromXml","MOBILE","FAX","mapEmailTypeToXml","mapEmailTypeFromXml","mapPassengerTypeToXml","adult","child","infant","mapPassengerTypeFromXml","ADT","CHD","INF","mapTitleToXml","title","mr","mrs","ms","dr","prof","mapTitleFromXml","MR","MRS","MS","DR","PROF","mapServiceTypeToXml","flight","hotel","car","transfer","insurance","mapServiceTypeFromXml","FLIGHT","HOTEL","CAR","TRANSFER","INSURANCE","mapServiceStatusToXml","status","confirmed","pending","cancelled","mapServiceStatusFromXml","CONFIRMED","PENDING","CANCELLED","mapPaymentTypeToXml","credit_card","debit_card","bank_transfer","cash","mapPaymentTypeFromXml","CREDIT_CARD","DEBIT_CARD","BANK_TRANSFER","CASH","mapPaymentStatusToXml","failed","mapPaymentStatusFromXml","FAILED","mapCustomerTypeToXml","customer","agent","supplier","mapCustomerTypeFromXml","CUSTOMER","AGENT","SUPPLIER","mapCustomerStatusToXml","active","inactive","suspended","mapCustomerStatusFromXml","ACTIVE","INACTIVE","SUSPENDED","mapCommunicationMethodToXml","method","email","sms","phone","mapCommunicationMethodFromXml","EMAIL","SMS","PHONE","mapBookingTypeToXml","individual","group","corporate","mapBookingStatusFromXml","status","PENDING","CONFIRMED","CANCELLED","COMPLETED","mapPriorityToXml","priority","low","normal","high","urgent","mapSpecialRequestTypeToXml","type","meal","seat","wheelchair","other","mapCancelReasonToXml","reason","customer_request","no_show","operational","mapRefundMethodToXml","method","original_payment","credit","cash","mapDocumentTypeToXml","confirmation","invoice","voucher","ticket","all","mapDocumentFormatToXml","format","pdf","html","xml","mapDeliveryMethodToXml","email","sms","download","mapSearchOperatorToXml","operator","equals","contains","starts_with","ends_with","mapPricingItemTypeFromXml","SERVICE","TAX","FEE","DISCOUNT","mapDeliveryStatusFromXml","SENT","FAILED","mapGenderToXml","gender","male","female","mapGenderFromXml","M","F","mapAddressToXml","clean","type","mapAddressTypeToXml","undefined","Street","street","City","city","State","state","PostalCode","postalCode","Country","country","mapAddressFromXml","xml","mapAddressTypeFromXml","mapContactToXml","Phone","phone","mapContactTypeToXml","number","Email","email","mapEmailTypeToXml","address","mapContactFromXml","mapContactTypeFromXml","mapEmailTypeFromXml","mapPassengerToXml","id","mapPassengerTypeToXml","title","mapTitleToXml","FirstName","firstName","LastName","lastName","MiddleName","middleName","DateOfBirth","dateOfBirth","Gender","gender","mapGenderToXml","Nationality","nationality","Passport","passport","expiryDate","issuingCountry","Address","ContactInfo","contact","mapPassengerFromXml","mapPassengerTypeFromXml","mapTitleFromXml","createDateString","mapGenderFromXml","mapServiceToXml","mapServiceTypeToXml","mapServiceStatusToXml","status","ServiceDetails","Code","code","Name","name","Description","description","StartDate","startDate","EndDate","endDate","Price","price","currency","amount","mapServiceFromXml","mapServiceTypeFromXml","mapServiceStatusFromXml","mapPaymentToXml","mapPaymentTypeToXml","mapPaymentStatusToXml","Amount","PaymentDetails","details","CardNumber","cardNumber","ExpiryDate","CardHolderName","cardHolderName","mapPaymentFromXml","mapPaymentTypeFromXml","mapPaymentStatusFromXml","mapSearchCustomerToXml","SearchCriteria","MasterRecordType","mapCustomerTypeToXml","SearchFields","Field","fields","map","field","value","operator","mapSearchOperatorToXml","Pagination","pagination","pageSize","pageNumber","mapCustomerToXml","mapCustomerStatusToXml","PersonalInfo","personalInfo","Title","BusinessInfo","businessInfo","CompanyName","companyName","TaxID","taxId","LicenseNumber","licenseNumber","Preferences","preferences","Language","language","Currency","CommunicationMethod","communicationMethod","mapCommunicationMethodToXml","mapCreateBookingToXml","BookingDetails","mapBookingTypeToXml","mapPriorityToXml","priority","CustomerInfo","customerId","CustomerDetails","customerDetails","PassengerList","Passenger","passengers","SelectedServiceList","Service","services","SpecialRequests","specialRequests","Request","req","mapSpecialRequestTypeToXml","mapCancelBookingToXml","bookingId","CancellationDetails","mapCancelReasonToXml","reason","RefundRequest","refundRequest","mapRefundMethodToXml","method","mapPrintDocumentToXml","DocumentRequest","mapDocumentTypeToXml","documentType","mapDocumentFormatToXml","format","DeliveryMethod","deliveryMethod","mapDeliveryMethodToXml","mapAddPaymentToXml","PaymentList","Payment","payments","mapCustomerFromXml","xml","id","type","mapCustomerTypeFromXml","status","mapCustomerStatusFromXml","personalInfo","PersonalInfo","title","Title","firstName","FirstName","lastName","LastName","middleName","MiddleName","dateOfBirth","DateOfBirth","createDateString","undefined","gender","Gender","nationality","Nationality","contact","ContactInfo","mapContactFromXml","address","Address","mapAddressFromXml","businessInfo","BusinessInfo","companyName","CompanyName","taxId","TaxID","licenseNumber","LicenseNumber","preferences","Preferences","language","Language","currency","Currency","communicationMethod","CommunicationMethod","mapCommunicationMethodFromXml","mapBookingFromXml","mapBookingStatusFromXml","createdAt","createDateTimeString","updatedAt","customer","CustomerInfo","passengers","PassengerList","Passenger","map","mapPassengerFromXml","services","ServiceList","Service","mapServiceFromXml","pricing","totalAmount","Pricing","TotalAmount","amount","breakdowns","Breakdown","Item","item","mapPricingItemTypeFromXml","description","mapBookingResponseFromXml","booking","BookingFile","success","OperationResult","message","data","mapSearchResponseFromXml","results","SearchResults","MasterRecord","pagination","PaginationInfo","totalRecords","pageSize","pageNumber","totalPages","mapDocumentResponseFromXml","DocumentInfo","format","size","downloadUrl","DownloadURL","deliveryStatus","DeliveryStatus","mapDeliveryStatusFromXml","method","mapCancelResponseFromXml","refundInfo","RefundInfo","refundAmount","refundMethod","processingTime","mapPaymentResponseFromXml","paymentSummary","totalPaid","PaymentSummary","TotalPaid","outstandingAmount","OutstandingAmount","paymentHistory","PaymentHistory","Payment","mapPaymentFromXml","mapMasterRecordFromXml","toLowerCase","import_common","import_config","import_common","AVES_SDK_CONFIG","Symbol","XML_HTTP_CLIENT","RequestPayload","payload","RqHeader","Body","Object","assign","_RequestPayload","WrapRequestDto","Request","_WrapRequestDto","AvesService","config","http","buildHeader","hostId","xtoken","languageCode","wrapRequest","body","WrapRequestDto","RqHeader","Body","searchMasterRecord","payload","postXml","insertOrUpdateMasterRecord","createBookingFile","modBookingFileHeader","modBookingFileServices","setBookingFileStatus","cancelBookingFile","insertFilePaymentList","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","MiddleName","DateOfBirth","datetime","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","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_zod","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","city","state","postalCode","country","customerContactSchema","phone","number","min","email","address","customerSchema","id","status","personalInfo","title","firstName","lastName","middleName","dateOfBirth","gender","nationality","contact","businessInfo","companyName","taxId","licenseNumber","preferences","language","currency","communicationMethod","bookingPassengerSchema","passport","expiryDate","issuingCountry","bookingServiceSchema","code","name","description","startDate","endDate","price","amount","positive","bookingPaymentSchema","details","cardNumber","cardHolderName","searchCustomerRequestSchema","fields","array","value","operator","pagination","pageSize","int","pageNumber","createBookingRequestSchema","priority","customerId","customerDetails","passengers","services","specialRequests","cancelBookingRequestSchema","bookingId","reason","refundRequest","method","printDocumentRequestSchema","documentType","format","deliveryMethod","addPaymentRequestSchema","payments","bookingResponseSchema","createdAt","updatedAt","customer","pricing","totalAmount","breakdowns","searchResponseSchema","results","totalRecords","totalPages","documentResponseSchema","size","downloadUrl","url","deliveryStatus","operationResponseSchema","success","boolean","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","bookingResponse","searchResponse","documentResponse","operationResponse","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"]}