aves-sdk 1.3.4 → 1.5.0

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.
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import{request as e}from"undici";import*as t from"valibot";import{ValiError as n,parse as r,safeParse as i}from"valibot";import{XMLBuilder as a,XMLParser as o}from"fast-xml-parser";const s={VALIDATION:`validation`,API:`api`,UNKNOWN:`unknown`};var c=class extends Error{constructor(e,t,n,r){super(t),this.kind=e,this.message=t,this.status=n,this.code=r,this.name=`AvesError`,this.status=n?.toLowerCase(),this.code=this.parseCode(r)}parseCode(e){return typeof e==`string`?Number.parseInt(e,10):e??0}};function l(e){return new c(s.VALIDATION,e)}function u(e,t,n){return new c(s.API,e,t,n)}function d(e){return new c(s.UNKNOWN,e)}function f(e){return e.map(p).join(`; `)}function p(e){let t=m(e.path),n=e.message??`Invalid value`;return t?`${t}: ${n}`:n}function m(e){if(!e||e.length===0)return;let t=e.map(h).filter(e=>e!==void 0);return t.length>0?t.join(`.`):void 0}function h(e){if(typeof e==`string`||typeof e==`number`)return String(e);if(typeof e==`object`&&e&&`key`in e)return String(e.key)}function ee(e){return e instanceof Error&&e.name===`AbortError`}function te(e){return e.charAt(0).toUpperCase()+e.slice(1)}function ne(e){return e.charAt(0).toLowerCase()+e.slice(1)}function g(e){return e instanceof Date||e instanceof RegExp||e instanceof Map||e instanceof Set||e instanceof Error}const _=new Set(Object.values({header:[`hostID`,`xtoken`,`interface`,`userName`,`status`],masterRecord:[`recordCode`,`insertCriteria`],financialDetail:[`currencyCode`,`creditLimit`,`c_PaymentType`,`c_SpecPaymentTypeCode`,`s_PaymentType`,`s_SpecPaymentTypeCode`,`enableElectronicInvoicing`,`electronicInvoicingType`],idDocumentDetail:[`idType`,`idCode`,`idIssueLocation`,`idIssueCounty`,`idIssueDate`,`idExpireDate`],accountPolicies:[`acceptProfilingPolicies`,`acceptPrivacyPolicies`,`acceptNewsletterPolicies`],dynamicFields:[`key`,`value`],search:[`minDate`,`maxDate`],bookingFileStatus:[`value`,`expiredDate`],statisticCodes:[`sCode1`,`sCode2`,`sCode3`,`sCode4`,`sCode5`,`sCode6`],destination:[`code`,`iataCode`,`nationCode`],customerDetail:[`recordCode`],bookingFileDocument:[`printDoc`,`sendDocViaEmail`],financialDeadlineDetail:[`reschedulingCode`,`expireDate`,`totalAmount`],deadlineDetail:[`deadlineCode`,`description`,`expireDate`],paymentDetail:[`paymentDate`,`paumentNote`,`amount`,`paymentUser`,`paymentType`],selectedPackageDetail:[`pCode`,`getServicesFromPackage`],selectedServiceDetail:[`sCode`,`ssCode`,`supplierMasterCode`,`supplierName`,`supplierMasterSearchField`,`supplierFiscalCode`],extraQuoteServiceDetail:[`sCode`,`ssCode`,`supplierMasterCode`,`supplierName`,`supplierMasterSearchField`,`supplierFiscalCode`],noteDetail:[`nType`,`title`],passengerDetail:[`rph`,`roomRph`,`billingHolder`],bookingFinancialInfo:[`customer_PaymentType`,`customer_SpecPaymentTypeCode`],reservationFormCustomizablePrintParameters:[`makeDocumentTo`]}).flat()),re=(e,t,n=!1)=>n||t===`sCode`||t===`ssCode`?`@${t}`:`@${e}`,v=new Map([[`toServiceType`,`TOServiceType`],[`rph`,`RPH`]]);function y(e,t){if(!e||typeof e!=`object`||g(e))return e;if(Array.isArray(e))return e.map(e=>y(e));let n=t?.excludeFromAttributePrefix,r=t?.excludeAttributeFromCamelToPascal,i={};for(let[t,a]of Object.entries(e)){let e=v.has(t)?v.get(t):te(t),o=_.has(t)&&!n?.includes(t),s=re(e,t,r?.includes(t)),c=o?s:e;i[c]=x(a,e=>y(e,void 0))}return i}function b(e){if(typeof e!=`object`||!e||g(e))return e;if(Array.isArray(e))return e.map(e=>b(e));let t={};for(let[n,r]of Object.entries(e)){let e=ne(n.startsWith(`@`)?n.slice(1):n);t[e]=x(r,b)}return t}function x(e,t){return!e||typeof e!=`object`||g(e)?e:Array.isArray(e)?e.map(e=>x(e,t)):t(e)}function S(e){return t.pipe(e,t.transform(e=>y(e)))}function C(e){return t.pipe(e,t.transform(e=>b(e)))}function w(e){let n={};for(let t in e.entries){let r=_.has(t),i=t.charAt(0).toUpperCase()+t.slice(1),a=r?`@${i}`:i;n[a]=e.entries[t]}return t.object(n)}const T=t.object({"@HostID":t.pipe(t.string(),t.minLength(6),t.maxLength(6)),"@Xtoken":t.string(),"@Interface":t.literal(`WEB`),"@UserName":t.literal(`WEB`),"@LanguageCode":t.optional(t.pipe(t.string(),t.minLength(2),t.maxLength(2)))}),ie=t.optional(t.pipe(t.string(),t.transform(e=>e.split(`,`)))),E=t.pipe(t.object({"@Status":t.union([t.literal(`OK`),t.literal(`ERROR`),t.literal(`WARNING`),t.literal(`TIMEOUT`)]),ErrorCode:t.optional(t.pipe(t.union([t.string(),t.number()]),t.transform(e=>Number(e)))),ErrorDescription:t.optional(t.string()),Warnings:ie}),t.transform(e=>({status:e[`@Status`],errorCode:e.ErrorCode,errorDescription:e.ErrorDescription,warnings:e.Warnings}))),ae=t.union([t.literal(`QUOTATION`),t.literal(`WORK_IN_PROGRESS`),t.literal(`CONFIRMED`),t.literal(`OPTIONED`),t.literal(`CANCELED`)]),oe=t.object({value:ae,expiredDate:t.optional(t.string())}),se=t.object({sCode1:t.optional(t.pipe(t.string(),t.maxLength(4))),sCode2:t.optional(t.pipe(t.string(),t.maxLength(4))),sCode3:t.optional(t.pipe(t.string(),t.maxLength(4))),sCode4:t.optional(t.pipe(t.string(),t.maxLength(4))),sCode5:t.optional(t.pipe(t.string(),t.maxLength(4))),sCode6:t.optional(t.pipe(t.string(),t.maxLength(4)))}),ce=t.object({code:t.optional(t.string()),iataCode:t.optional(t.string()),nationCode:t.optional(t.string())}),le=t.object({recordCode:t.optional(t.string())}),ue=t.union([t.literal(`VISA_REQUEST`),t.literal(`TRAVEL_INFORMATION`),t.literal(`VOUCHER`),t.literal(`BOOKING_CONTRACT`),t.literal(`BOOKING_CONFIRMATION`),t.literal(`SUPPLIER_SERVICE_LIST`),t.literal(`INVOICE`),t.literal(`PROFORMA_INVOICE`),t.literal(`ADEGUAMENTO`),t.literal(`RESERVATION_FORM`),t.literal(`OPEN_XML`),t.literal(`SALES_INVOICE`),t.literal(`TICKETING_TMASTER`),t.literal(`SUMMARY_FORM`)]),de=t.object({makeDocumentTo:t.optional(t.union([t.literal(`BOOKING_CUSTOMER`),t.literal(`FIRST_PASSENGER`)]))}),fe=t.object({fillInCode:t.optional(t.string())}),pe=t.union([de,fe]),me=t.object({documentType:ue,documentCustomizablePrintParameters:t.optional(pe)}),he=t.object({printDoc:t.optional(t.union([t.literal(`true`),t.literal(`false`),t.boolean()])),sendDocViaEmail:t.optional(t.union([t.literal(`true`),t.literal(`false`),t.boolean()])),infoDocumentsToPrint:t.optional(t.array(me))}),ge=t.object({reschedulingCode:t.optional(t.string()),expireDate:t.optional(t.string()),totalAmount:t.optional(t.string())}),_e=t.object({deadlineCode:t.optional(t.string()),description:t.optional(t.string()),expireDate:t.optional(t.string())}),D=t.union([t.literal(`C`),t.literal(`B`),t.literal(`D`),t.literal(`T`),t.literal(`P`),t.literal(`R`),t.literal(`A`),t.literal(`H`),t.literal(`I`),t.literal(`J`),t.literal(`K`),t.literal(`L`),t.literal(`M`),t.literal(`N`),t.literal(`O`),t.literal(`Q`),t.literal(`S`),t.literal(`U`),t.literal(`V`)]),O=t.object({paymentDate:t.optional(t.string()),paumentNote:t.optional(t.string()),amount:t.optional(t.string()),paymentUser:t.optional(t.string()),paymentType:t.optional(D)}),k=t.object({deadlineDetail:t.optional(t.array(ge))}),A=t.object({deadlineDetail:t.optional(t.array(_e))}),j=t.object({paymentDetail:t.optional(t.array(O))}),M=t.object({pCode:t.optional(t.string()),startDate:t.optional(t.string()),endDate:t.optional(t.string()),getServicesFromPackage:t.optional(t.union([t.literal(`true`),t.literal(`false`),t.boolean()]))}),N=t.object({packageCode:t.optional(t.string()),packageReference:t.optional(t.string())}),P=t.union([t.literal(`TOP`),t.literal(`TOP_SS`),t.literal(`ADV`),t.literal(`GRP`),t.literal(`OTHER`)]),F=t.union([t.literal(`ACCOMODATION`),t.literal(`TRANSPORT`),t.literal(`CHARTER`),t.literal(`TRANSFER`),t.literal(`PULLMAN`),t.literal(`FERRY`),t.literal(`CRUISE`),t.literal(`INSURANCE`),t.literal(`EXTRAFEE`),t.literal(`PENALTY`),t.literal(`PROMO`),t.literal(`OTHER`),t.literal(`NOT_SET`),t.literal(`RESIDENCE`)]),I=t.object({pax:t.string()}),L=t.object({sCode:t.string(),ssCode:t.optional(t.string()),avesServiceType:P,toServiceType:t.optional(F),subServiceDesc:t.optional(t.string()),startDate:t.string(),endDate:t.string(),qty:t.string(),pax:t.string(),paxAssociated:t.optional(t.array(I)),avesSession:t.string(),avesServiceInfo:t.optional(N),supplierMasterCode:t.optional(t.string()),voucherMasterCode:t.optional(t.string()),hotelServiceInfo:t.optional(t.string()),carRentalServiceInfo:t.optional(t.string()),flightServiceInfo:t.optional(t.string()),shipServiceInfo:t.optional(t.string()),ticketServiceInfo:t.optional(t.string()),commission:t.optional(t.string()),noteList:t.optional(t.string()),voucherInfo:t.optional(t.string()),firstDescription:t.optional(t.string()),secondDescription:t.optional(t.string())}),ve=t.object({selectedPackageDetail:t.optional(t.array(M))}),ye=t.object({selectedServiceDetail:L}),be=t.object({extraQuoteServiceDetail:t.optional(t.array(L))}),R=t.object({nType:t.optional(t.string()),title:t.optional(t.string()),text:t.optional(t.string())}),xe=t.object({noteDetail:t.optional(t.array(R))}),Se=t.union([t.literal(`AD`),t.literal(`CH`),t.literal(`IN`),t.literal(`OV`)]),Ce=t.object({rph:t.string(),roomRph:t.optional(t.string()),billingHolder:t.optional(t.union([t.literal(`true`),t.literal(`false`),t.boolean()])),masterRecordCode:t.optional(t.string()),name:t.string(),categoryCode:Se,sex:t.union([t.literal(`M`),t.literal(`F`)]),birthDate:t.optional(t.string()),birthPlace:t.optional(t.string()),nationCode:t.optional(t.string()),citizenshipCode:t.optional(t.string()),fiscalCode:t.optional(t.string()),phoneNumber:t.optional(t.string()),eMail:t.optional(t.string()),notes:t.optional(t.array(R)),flagStatus:t.optional(t.string()),offerCode:t.optional(t.string()),idDocInfo:t.optional(t.object({idType:t.optional(t.string()),idCode:t.optional(t.string()),idIssueLocation:t.optional(t.string()),idIssueCounty:t.optional(t.string()),idIssueDate:t.optional(t.string()),idExpireDate:t.optional(t.string())}))}),we=t.object({passengerDetail:Ce}),Te=t.union([t.literal(`CASH`),t.literal(`BANK`),t.literal(`RID`),t.literal(`RIBA`),t.literal(`SPECIFIC_CODE`),t.literal(`NOT_SET`)]),Ee=t.object({customer_PaymentType:t.optional(Te),customer_SpecPaymentTypeCode:t.optional(t.string())}),De=t.union([t.literal(`GROUPED_PAX`),t.literal(`NOT_GROUPED_PAX`),t.literal(`ONE_PAX_ONLY`)]),Oe=t.union([t.literal(`AVES2AVES`),t.literal(`AVES2AVESVIA`),t.literal(`AVES2AVESITA`)]),ke=t.object({createDate:t.optional(t.string()),bookingFileRefCode:t.optional(t.string()),travelAgentCode:t.optional(t.string()),clerkName:t.optional(t.string()),customerDetail:le,currencyCode:t.optional(t.string()),markupCode:t.optional(t.string()),bookingFileStatus:oe,statisticCodes:t.optional(se),destination:t.optional(ce),bookingFileDescription:t.optional(t.string()),startDate:t.string(),endDate:t.string(),earlyBookingDate:t.optional(t.string()),cupCode:t.optional(t.string()),cigCode:t.optional(t.string()),customerPromoterCode:t.optional(t.string()),billingReferenceCode:t.optional(t.string()),paymentReferenceCode:t.optional(t.string()),bookingFileDocument:t.optional(he),financialDeadlineList:t.optional(k),deadlineList:t.optional(A),paymentList:t.optional(j),selectedPackageList:t.optional(ve),selectedServiceList:t.array(ye),extraQuotaRefCode:t.optional(t.string()),extraQuoteServiceList:t.optional(be),getExtraQuoteFromSystem:t.optional(t.union([t.literal(`true`),t.literal(`false`),t.boolean()])),passengerList:t.array(we),noteList:t.optional(xe),bookingFinancialInfo:t.optional(Ee),bookingFileCode:t.optional(t.string()),groupingPaxPolicy:t.optional(De),groupBookingFile:t.optional(t.union([t.literal(`true`),t.literal(`false`),t.boolean()])),typeDownloadFile:t.optional(Oe),setBookingFileCodeFromStartDate:t.optional(t.union([t.literal(`true`),t.literal(`false`),t.boolean()]))}),Ae=t.pipe(ke,t.transform(e=>{let t=e=>Array.isArray(e)&&!e.length?``:e,n=e=>{if(typeof e!=`object`||!e)return e;if(Array.isArray(e))return e.map(n);let r={};for(let[i,a]of Object.entries(e))i===`paxAssociated`?r[i]=t(a):r[i]=n(a);return r};return y(n(e),{excludeFromAttributePrefix:[`startDate`,`endDate`],excludeAttributeFromCamelToPascal:[`sCode`,`ssCode`]})})),je=C(t.object({RsStatus:E,BookingFileDetail:t.optional(t.any())})),z=t.union([t.literal(`CASH`),t.literal(`BANK`),t.literal(`RID`),t.literal(`RIBA`),t.literal(`SPECIFIC_CODE`)]),B=t.object({currencyCode:t.optional(t.string()),creditLimit:t.optional(t.string()),c_PaymentType:t.optional(z),c_SpecPaymentTypeCode:t.optional(t.string()),s_PaymentType:t.optional(z),s_SpecPaymentTypeCode:t.optional(t.string()),enableElectronicInvoicing:t.optional(t.union([t.literal(`true`),t.literal(`false`),t.boolean()])),electronicInvoicingType:t.optional(t.string())});S(B);const Me=w(B),V=t.object({idType:t.optional(t.string()),idCode:t.optional(t.string()),idIssueLocation:t.optional(t.string()),idIssueCounty:t.optional(t.string()),idIssueDate:t.optional(t.string()),idExpireDate:t.optional(t.string())});S(V);const Ne=w(V),H=t.object({key:t.string(),value:t.string()});S(H);const Pe=w(H),U=t.union([t.literal(0),t.literal(1)]),W=t.union([t.literal(`ENABLED`),t.literal(`DISABLED`),t.literal(`WARNING`),t.literal(`BLACKLISTED`)]),Fe=t.union([t.literal(`CUSTOMER`),t.literal(`SUPPLIER`),t.literal(`GENERAL`)]),G=t.union([t.literal(`S`),t.literal(`N`),t.literal(`T`),t.literal(`M`)]),K=t.object({acceptProfilingPolicies:t.optional(U),acceptPrivacyPolicies:t.optional(U),acceptNewsletterPolicies:t.optional(U)});S(K);const Ie=w(K),q=S(t.object({recordCode:t.optional(t.pipe(t.string(),t.minLength(6),t.maxLength(6))),insertCriteria:t.optional(G),createdDate:t.optional(t.string()),recordType:t.optional(t.union([Fe],`CUSTOMER`)),recordStatus:t.optional(t.union([W],`ENABLED`)),moniker:t.optional(t.string()),name:t.optional(t.string()),extraInfo:t.optional(t.string()),languageCode:t.pipe(t.string(),t.minLength(2),t.maxLength(2)),address:t.optional(t.string()),zipCode:t.optional(t.string()),cityName:t.optional(t.string()),countyCode:t.optional(t.string()),stateCode:t.optional(t.string()),categoryCode:t.optional(t.string()),firstPhoneNumber:t.optional(t.string()),mobilePhoneNumber:t.optional(t.string()),email:t.optional(t.string()),gender:t.optional(t.union([t.literal(`M`),t.literal(`F`)])),birthDate:t.optional(t.string()),birthCity:t.optional(t.string()),birthCounty:t.optional(t.string()),fiscalCode:t.optional(t.string()),vatCode:t.optional(t.string()),thirdPartRecordCode:t.optional(t.string()),idDocumentDetail:t.optional(V),accountPolicies:t.optional(K),financialDetail:t.optional(B),dynamicFields:t.optional(H)}));C(q);const J=t.object({"@RecordCode":t.optional(t.pipe(t.string(),t.minLength(6),t.maxLength(6))),"@InsertCriteria":t.optional(G),CreatedDate:t.optional(t.string()),ModifiedDate:t.optional(t.string()),RecordType:t.optional(t.union([t.literal(`CUSTOMER`),t.literal(`SUPPLIER`),t.literal(`GENERAL`)])),LoginType:t.optional(t.string()),RecordStatus:t.optional(W),Moniker:t.optional(t.string()),Name:t.optional(t.string()),ExtraInfo:t.optional(t.string()),LanguageCode:t.optional(t.pipe(t.string(),t.minLength(1),t.maxLength(2))),Address:t.optional(t.string()),ZipCode:t.optional(t.string()),CityName:t.optional(t.string()),CountyCode:t.optional(t.string()),StateCode:t.optional(t.string()),CategoryCode:t.optional(t.string()),PromoterCode:t.optional(t.string()),FirstPhoneNumber:t.optional(t.string()),MobilePhoneNumber:t.optional(t.string()),Email:t.optional(t.string()),Gender:t.optional(t.union([t.literal(`M`),t.literal(`F`)])),BirthDate:t.optional(t.string()),BirthCity:t.optional(t.string()),BirthCounty:t.optional(t.string()),EncryptedPassword:t.optional(t.union([t.literal(`true`),t.literal(`false`),t.boolean()])),FiscalCode:t.optional(t.string()),VatCode:t.optional(t.string()),ThirdPartRecordCode:t.optional(t.string()),IdDocumentDetail:t.optional(Ne),NewsletterDisabled:t.optional(t.union([t.literal(`true`),t.literal(`false`),t.boolean()])),SupplierRefMasterRecords:t.optional(t.any()),AccountPolicies:t.optional(Ie),FinancialDetail:t.optional(Me),DynamicFields:t.optional(Pe)}),Le=t.object({minDate:t.string(),maxDate:t.string()}),Y=t.optional(t.pipe(t.string(),t.minLength(2),t.maxLength(2))),Re=t.object({searchType:t.literal(`CODE`),recordCode:t.pipe(t.string(),t.minLength(5),t.maxLength(6)),languageCode:Y}),ze=t.object({searchType:t.literal(`NAME`),name:t.string(),city:t.optional(t.string()),languageCode:Y}),Be=t.object({searchType:t.literal(`VATCODE`),vatCode:t.string(),phoneNumber:t.optional(t.string()),languageCode:Y}),Ve=t.object({searchType:t.literal(`ZONE`),zipCode:t.string(),countyCode:t.string(),city:t.optional(t.string()),languageCode:Y}),He=t.object({searchType:t.literal(`CATEGORY`),categoryCode:t.string(),languageCode:Y}),Ue=t.object({searchType:t.literal(`EMAIL`),email:t.string(),languageCode:Y}),We=t.object({searchType:t.literal(`LASTMODDATE`),lastModificationDate:Le,languageCode:Y}),Ge=t.object({searchType:t.literal(`SEARCH_FIELD`),searchFieldValue:t.string(),languageCode:Y}),Ke=t.object({searchType:t.literal(`EXTERNAL_REF_CODE`),searchFieldValue:t.string(),languageCode:Y}),qe=t.union([Re,ze,Be,Ve,He,Ue,We,Ge,Ke]),Je=e=>{if(!(`@RecordCode`in e))return e;let t=e[`@RecordCode`];if(!t)return e;let{"@RecordCode":n,...r}=e;return{...r,RecordCode:t}},Ye=t.pipe(S(qe),t.transform(e=>Je(e))),Xe=t.pipe(t.object({RqHeader:T,SearchMasterRecord:Ye}),t.transform(e=>{let{SearchMasterRecord:t,RqHeader:n,...r}=e;return{RqHeader:n,...t,...r}})),Ze=t.object({MasterRecordDetail:t.optional(t.pipe(t.union([t.array(J),J]),t.transform(e=>{if(e)return Array.isArray(e)?e:[e]})))}),Qe=C(t.object({RsStatus:E,MasterRecordList:t.optional(Ze)})),$e=t.object({RqHeader:T,MasterRecordDetail:J}),et=C(t.object({RsStatus:E,MasterRecordDetail:t.optional(J)}));function tt(e){return{success:!0,data:e}}function X(e){return{success:!1,error:e}}function nt(e){return e===200}function rt(e){let t=new AbortController;if(!e||e<=0)return{signal:t.signal};let n=setTimeout(()=>t.abort(),e);return{signal:t.signal,clear:()=>clearTimeout(n)}}function Z(e,t){try{let n=new URL(e),r=(n.pathname.endsWith(`/`)?n.pathname.slice(0,-1):n.pathname)+t;return new URL(r,n)}catch(e){throw new c(`validation`,`Invalid baseURL: ${e instanceof Error?e.message:`Invalid URL format`}`)}}function it(e,t){if(!t.startsWith(`/`))throw new c(`validation`,`Invalid endpoint: endpoint must start with '/' but got '${t}'`);let n=Z(e.replace(/\/$/,``),t);if(n.protocol!==`http:`&&n.protocol!==`https:`)throw new c(`validation`,`Invalid protocol: baseURL must use http:// or https:// but got '${n.protocol}'`);return n.toString()}const at={ignoreAttributes:!1,attributeNamePrefix:`@`,parseAttributeValue:!1,trimValues:!0,ignoreNameSpace:!0,removeNSPrefix:!0,parseTagValue:!1},ot={ignoreAttributes:!1,attributeNamePrefix:`@`,suppressEmptyNode:!0},st=new o(at),ct=new a(ot);function lt(e){try{return ct.build(e)}catch(e){throw new c(`validation`,`Failed to convert JSON to XML: ${e instanceof Error?e.message:`Unknown error`}`)}}function ut(e){try{return st.parse(e)}catch(e){throw new c(`validation`,`Failed to convert XML to JSON: ${e instanceof Error?e.message:`Unknown error`}`)}}const Q={SEARCH_REQUEST:`SearchMasterRecordRQ`,SEARCH_RESPONSE:`SearchMasterRecordRS`,UPSERT_REQUEST:`ManageMasterRecordRQ`,UPSERT_RESPONSE:`ManageMasterRecordRS`,BOOKING_REQUEST:`BookFileRQ`,BOOKING_RESPONSE:`BookingFileRS`};function $(e,t){return{[e]:t}}var dt=class{constructor(e){this.options=e}createRqHeader(){return{"@HostID":this.options.hostID,"@Xtoken":this.options.xtoken,"@Interface":`WEB`,"@UserName":`WEB`,...this.options.languageCode&&{"@LanguageCode":this.options.languageCode}}}createUrl(e){return it(this.options.baseURL,e)}get endpoints(){return{search:`/interop/masterRecords/v2/rest/Search`,upsert:`/interop/masterRecords/v2/rest/InsertOrUpdate`,createBooking:`/interop/booking/v2/rest/CreateBookingFile`}}handleApiStatus(e){let t=e.rsStatus,n=t?.status;return n===`OK`?tt(e):X(u(t.errorDescription,n,t.errorCode))}toAvesError(e,t){return e instanceof c?e:e instanceof n?l(`Validation error: ${f(e.issues)}`):e instanceof Error?d(e.message):d(t)}async request(t,n,r,a){let{signal:o,clear:s}=rt(this.options.timeoutMs??3e4);try{let s=this.createUrl(t),c=lt(n);console.log(`xmlBody`,c);let d=await e(s,{method:`POST`,headers:{"Content-Type":`application/xml`},body:c,signal:o}),p=await d.body.text();if(!nt(d.statusCode))return X(u(p,`ERROR`,d.statusCode));let m=ut(p)[r];if(!m)return X(l(`Invalid response structure: missing root element '${r}'`));let h=i(a,m);return h.success?this.handleApiStatus(h.output):X(l(`Invalid response format: ${f(h.issues)}`))}catch(e){return ee(e)?X(u(`Request timed out`,`TIMEOUT`)):X(this.toAvesError(e,`Unknown error occurred`))}finally{s?.()}}async search(e){try{let t=r(Xe,{RqHeader:this.createRqHeader(),SearchMasterRecord:e}),n=$(Q.SEARCH_REQUEST,t);return this.request(this.endpoints.search,n,Q.SEARCH_RESPONSE,Qe)}catch(e){return X(this.toAvesError(e,`Validation error occurred during search`))}}async upsertRecord(e){try{let t=r(q,e),n=r($e,{RqHeader:this.createRqHeader(),MasterRecordDetail:t}),i=$(Q.UPSERT_REQUEST,n);return this.request(this.endpoints.upsert,i,Q.UPSERT_RESPONSE,et)}catch(e){return X(this.toAvesError(e,`Validation error occurred during upsert`))}}async createBooking(e){try{let t=r(Ae,e),n=$(Q.BOOKING_REQUEST,{RqHeader:this.createRqHeader(),...t});return this.request(this.endpoints.createBooking,n,Q.BOOKING_RESPONSE,je)}catch(e){return X(this.toAvesError(e,`Validation error occurred during createBooking`))}}};export{dt as AvesClient,c as AvesError};
1
+ import{request as e}from"undici";import*as t from"valibot";import{ValiError as n,parse as r,safeParse as i}from"valibot";import{XMLBuilder as a,XMLParser as o}from"fast-xml-parser";const s={VALIDATION:`validation`,API:`api`,UNKNOWN:`unknown`};var c=class extends Error{kind;message;status;code;constructor(e,t,n,r){super(t),this.kind=e,this.message=t,this.status=n,this.code=r,this.name=`AvesError`,this.status=n?.toLowerCase(),this.code=this.parseCode(r)}parseCode(e){return typeof e==`string`?Number.parseInt(e,10):e??0}};function l(e){return new c(s.VALIDATION,e)}function u(e,t,n){return new c(s.API,e,t,n)}function d(e){return new c(s.UNKNOWN,e)}function ee(e){return e.map(f).join(`; `)}function f(e){let t=te(e.path),n=e.message??`Invalid value`;return t?`${t}: ${n}`:n}function te(e){if(!e||e.length===0)return;let t=e.map(ne).filter(e=>e!==void 0);return t.length>0?t.join(`.`):void 0}function ne(e){if(typeof e==`string`||typeof e==`number`)return String(e);if(typeof e==`object`&&e&&`key`in e)return String(e.key)}function re(e){return e instanceof Error&&e.name===`AbortError`}function ie(e){return e.charAt(0).toUpperCase()+e.slice(1)}function ae(e){return e.charAt(0).toLowerCase()+e.slice(1)}function p(e){return e instanceof Date||e instanceof RegExp||e instanceof Map||e instanceof Set||e instanceof Error}const m=new Set(Object.values({header:[`hostID`,`xtoken`,`interface`,`userName`,`status`],masterRecord:[`recordCode`,`insertCriteria`],financialDetail:[`currencyCode`,`creditLimit`,`c_PaymentType`,`c_SpecPaymentTypeCode`,`s_PaymentType`,`s_SpecPaymentTypeCode`,`enableElectronicInvoicing`,`electronicInvoicingType`],idDocumentDetail:[`idType`,`idCode`,`idIssueLocation`,`idIssueCounty`,`idIssueDate`,`idExpireDate`],accountPolicies:[`acceptProfilingPolicies`,`acceptPrivacyPolicies`,`acceptNewsletterPolicies`],dynamicFields:[`key`,`value`],search:[`minDate`,`maxDate`],bookingFileStatus:[`value`,`expiredDate`],statisticCodes:[`sCode1`,`sCode2`,`sCode3`,`sCode4`,`sCode5`,`sCode6`],destination:[`code`,`iataCode`,`nationCode`],customerDetail:[`recordCode`],bookingFileDocument:[`printDoc`,`sendDocViaEmail`],financialDeadlineDetail:[`reschedulingCode`,`expireDate`,`totalAmount`],deadlineDetail:[`deadlineCode`,`description`,`expireDate`],paymentDetail:[`paymentDate`,`paumentNote`,`amount`,`paymentUser`,`paymentType`],filePaymentDetail:[`paymentDate`,`paymentNote`,`payerMasterCode`,`payerName`,`amount`,`paymentType`],selectedPackageDetail:[`pCode`,`startDate`,`endDate`,`getServicesFromPackage`],selectedServiceDetail:[`sCode`,`ssCode`,`supplierMasterCode`,`supplierName`,`supplierMasterSearchField`,`supplierFiscalCode`],extraQuoteServiceDetail:[`sCode`,`ssCode`,`supplierMasterCode`,`supplierName`,`supplierMasterSearchField`,`supplierFiscalCode`],serviceFare:[`currencyCode`,`exchangeRate`,`cost`,`costTax`,`costType`,`vatCostCurrencyCode`,`price`,`priceTax`,`priceType`],cancellableBookedServiceDetail:[`cancelOperationType`,`serviceRefType`,`serviceRefValue`],fileStatus:[`value`,`expiredDate`,`optionedFileExpireDatePolicy`],penalty:[`apply`,`specificCode`],noteDetail:[`nType`,`title`],passengerDetail:[`rph`,`roomRph`,`billingHolder`],bookingFinancialInfo:[`customer_PaymentType`,`customer_SpecPaymentTypeCode`],reservationFormCustomizablePrintParameters:[`makeDocumentTo`],supplierRefMasterRecords:[`supplierRefCode`,`companyMainBusinessType`,`carrierType`]}).flat()),oe=(e,t,n=!1)=>n||t===`sCode`||t===`ssCode`||t===`pCode`?`@${t}`:`@${e}`,h=new Map([[`toServiceType`,`TOServiceType`],[`rph`,`RPH`]]),se=new Map([[`TOServiceType`,`toServiceType`],[`RPH`,`rph`]]);function g(e,t){if(!e||typeof e!=`object`||p(e))return e;if(Array.isArray(e))return e.map(e=>g(e));let n=t?.excludeFromAttributePrefix,r=t?.excludeAttributeFromCamelToPascal,i={};for(let[t,a]of Object.entries(e)){let e=h.has(t)?h.get(t):ie(t),o=m.has(t)&&!n?.includes(t),s=oe(e,t,r?.includes(t)),c=o?s:e;i[c]=v(a,e=>g(e,void 0))}return i}function _(e){if(typeof e!=`object`||!e||p(e))return e;if(Array.isArray(e))return e.map(e=>_(e));let t={};for(let[n,r]of Object.entries(e)){let e=n.startsWith(`@`)?n.slice(1):n,i=se.has(e)?se.get(e):ae(e);t[i]=v(r,_)}return t}function v(e,t){return!e||typeof e!=`object`||p(e)?e:Array.isArray(e)?e.map(e=>v(e,t)):t(e)}function y(e){return t.pipe(e,t.transform(e=>g(e)))}function b(e){return t.pipe(e,t.transform(e=>_(e)))}function x(e){let n={};for(let t in e.entries){let r=m.has(t),i=t.charAt(0).toUpperCase()+t.slice(1),a=r?`@${i}`:i;n[a]=e.entries[t]}return t.object(n)}const S=t.union([t.literal(`true`),t.literal(`false`),t.boolean()]),ce=t.union([t.literal(`QUOTATION`),t.literal(`WORK_IN_PROGRESS`),t.literal(`CONFIRMED`),t.literal(`OPTIONED`),t.literal(`CANCELED`)]),le=t.union([t.literal(`QUOTATION`),t.literal(`WORK_IN_PROGRESS`),t.literal(`CONFIRMED`),t.literal(`OPTIONED`),t.literal(`NULLIFIED`),t.literal(`CANCELED`)]),ue=t.union([t.literal(`QUOTATION`),t.literal(`WORK_IN_PROGRESS`),t.literal(`CONFIRM`),t.literal(`CONFIRMED`),t.literal(`OPTION`),t.literal(`OPTIONED`),t.literal(`REQUEST`),t.literal(`REQUESTED`),t.literal(`NULLIFIED`),t.literal(`CANCELED`)]),C={CONFIRM:`CONFIRMED`,OPTION:`OPTIONED`,REQUESTED:`REQUEST`};function de(e){return e in C?C[e]:e}const fe=t.union([t.literal(`TOP`),t.literal(`TOP_SS`),t.literal(`ADV`),t.literal(`GRP`),t.literal(`OTHER`)]),w=t.union([t.literal(`ACCOMODATION`),t.literal(`TRANSPORT`),t.literal(`CHARTER`),t.literal(`TRANSFER`),t.literal(`PULLMAN`),t.literal(`FERRY`),t.literal(`CRUISE`),t.literal(`INSURANCE`),t.literal(`EXTRAFEE`),t.literal(`PENALTY`),t.literal(`PROMO`),t.literal(`OTHER`),t.literal(`NOT_SET`),t.literal(`RESIDENCE`)]),pe=t.union([t.literal(`REQUEST`),t.literal(`ALLOTMENT_REQUEST`),t.literal(`CONFIRMED_REQUEST`),t.literal(`CONFIRMED_EXTRA_ALLOTMENT`),t.literal(`WAITLISTED`),t.literal(`ALLOTMENT`),t.literal(`REFUSED`),t.literal(`NULLIFIED`),t.literal(`CANCELED`),t.literal(`MESSAGE`)]);function me(e){let t=e=>{if(typeof e!=`object`||!e)return e;if(Array.isArray(e))return e.map(t);let n={};for(let[r,i]of Object.entries(e)){if(r===`paxAssociated`&&Array.isArray(i)&&!i.length){n[r]=``;continue}n[r]=t(i)}return n};return t(e)}function he(e){return g(me(e),{excludeFromAttributePrefix:[`startDate`,`endDate`],excludeAttributeFromCamelToPascal:[`sCode`,`ssCode`,`pCode`]})}function T(e){return t.pipe(e,t.transform(he))}function E(e){return t.pipe(t.union([t.array(e),e]),t.transform(e=>Array.isArray(e)?e:[e]))}const D=t.union([t.string(),t.number()]),ge=t.pipe(t.object({"@Value":ue,"@ExpiredDate":t.optional(t.string()),"@ExpireDate":t.optional(t.string())}),t.transform(e=>({"@Value":de(e[`@Value`]),"@ExpiredDate":e[`@ExpiredDate`]??e[`@ExpireDate`]}))),_e=t.object({"@PaxRef":t.string(),"@Price":D}),ve=t.object({PricePerPaxDetail:t.optional(E(_e))}),ye=t.object({"@CommissionCode":t.optional(t.string()),"@CommissionPercentage":t.optional(D),"@CommissionAmount":t.optional(D),"@PriceListCode":t.optional(t.string()),"@CostListCode":t.optional(t.string()),"@ServiceTotalPrice":t.optional(D),PaxPriceList:t.optional(ve)}),be=t.object({"@Code":t.optional(t.string()),"@Name":t.optional(t.string()),"@Email":t.optional(t.string()),"@LanguageCode":t.optional(t.string())}),xe=t.object({"@Code":t.optional(t.string()),"@Description":t.optional(t.string())}),Se=t.object({"@RPH":t.string(),"@ServiceCode":t.optional(t.string()),"@FromExternalProvider":t.optional(D),"@isFromExternalProvider":t.optional(D),AvesServiceType:t.optional(fe),TOServiceType:t.optional(w),FirstDescription:t.optional(t.string()),SecondDescription:t.optional(t.string()),ThirdDescription:t.optional(t.string()),FourthDescription:t.optional(t.string()),ServiceStatus:t.optional(pe),StartDate:t.optional(t.string()),EndDate:t.optional(t.string()),Qty:t.optional(D),Pax:t.optional(D),PeriodType:t.optional(t.string()),PaxMultiplier:t.optional(t.string()),ExternalProviderCode:t.optional(t.string()),WebStatisticCode:t.optional(t.string()),WebStatisticDescription:t.optional(t.string()),WebStatistic:t.optional(xe),SupplierInfo:t.optional(be),ServiceTotalAmountDetail:t.optional(ye)}),Ce=t.pipe(Se,t.transform(e=>({"@RPH":e[`@RPH`],"@ServiceCode":e[`@ServiceCode`],"@FromExternalProvider":e[`@FromExternalProvider`]??e[`@isFromExternalProvider`],AvesServiceType:e.AvesServiceType,TOServiceType:e.TOServiceType,FirstDescription:e.FirstDescription,SecondDescription:e.SecondDescription,ThirdDescription:e.ThirdDescription,FourthDescription:e.FourthDescription,ServiceStatus:e.ServiceStatus,StartDate:e.StartDate,EndDate:e.EndDate,Qty:e.Qty,Pax:e.Pax,PeriodType:e.PeriodType,PaxMultiplier:e.PaxMultiplier,ExternalProviderCode:e.ExternalProviderCode,WebStatisticCode:e.WebStatisticCode,WebStatisticDescription:e.WebStatisticDescription,WebStatistic:e.WebStatistic,SupplierInfo:e.SupplierInfo,ServiceTotalAmountDetail:e.ServiceTotalAmountDetail}))),we=t.object({BookedServiceDetail:t.optional(E(Ce))}),O=t.object({"@CurrencyCode":t.optional(t.string()),"@TotalAmountBeforeDiscount":t.optional(D),"@TotalAmountAfterDiscount":t.optional(D),"@TotalDiscount":t.optional(D),"@TotalAmountWithoutVat":t.optional(D),"@DueAmount":t.optional(D),"@PaiedAmount":t.optional(D),"@Balance":t.optional(D)}),Te=t.object({"@RPH":t.string(),"@RoomRPH":t.optional(t.string()),"@BillingHolder":t.optional(D),Name:t.optional(t.string()),CategoryCode:t.optional(t.string()),Sex:t.optional(t.string()),BirthDate:t.optional(t.string()),BirthPlace:t.optional(t.string()),NationCode:t.optional(t.string()),CitizenshipCode:t.optional(t.string()),FiscalCode:t.optional(t.string()),PhoneNumber:t.optional(t.string()),EMail:t.optional(t.string()),MasterRecordCode:t.optional(t.string())}),Ee=t.object({PassengerDetail:t.optional(E(Te))}),De=t.object({"@ReschedulingCode":t.optional(t.string()),"@ExpireDate":t.optional(t.string()),"@TotalAmount":t.optional(D),ReschedulingCode:t.optional(t.string()),ExpireDate:t.optional(t.string()),TotalAmount:t.optional(D)}),Oe=t.pipe(De,t.transform(e=>({"@ReschedulingCode":e[`@ReschedulingCode`]??e.ReschedulingCode,"@ExpireDate":e[`@ExpireDate`]??e.ExpireDate,"@TotalAmount":e[`@TotalAmount`]??e.TotalAmount}))),ke=t.object({DeadlineDetail:t.optional(E(Oe))}),Ae=t.object({DocumentRefCode:t.optional(t.string()),DocumentType:t.optional(t.string()),DocumentName:t.optional(t.string()),ArchiviationDescription:t.optional(t.string())}),je=t.object({StoredDocumentDetail:t.optional(E(Ae))}),Me=t.object({DocumentType:t.optional(t.string()),DocumentName:t.optional(t.string()),Enabled:t.optional(D)}),k=t.object({PrintableDocumentDetail:t.optional(E(Me))}),Ne=t.object({"@BookingFileCode":t.optional(t.string()),BookingFileCode:t.optional(t.string()),CustomerRecordCode:t.optional(t.string()),CustomerName:t.optional(t.string()),CustomerEmail:t.optional(t.string()),TravelAgencyName:t.optional(t.string()),TravelAgencyEmail:t.optional(t.string()),BookingFileStatus:t.optional(ge),Description:t.optional(t.string()),Nation:t.optional(t.string()),Destination:t.optional(t.string()),CreationDate:t.optional(t.string()),FirstConfirmationDate:t.optional(t.string()),StartDate:t.optional(t.string()),EndDate:t.optional(t.string()),PackageCode:t.optional(t.string()),BookedServiceList:t.optional(we),TotalAmountDetail:t.optional(O),PaxNumber:t.optional(D),PassengerList:t.optional(Ee),Reference:t.optional(t.string()),ClerkName:t.optional(t.string()),StoredDocumentsList:t.optional(je),PrintableDocumentsList:t.optional(k),FinancialDeadlineList:t.optional(ke)}),Pe=t.pipe(Ne,t.transform(e=>({"@BookingFileCode":e[`@BookingFileCode`]??e.BookingFileCode,CustomerRecordCode:e.CustomerRecordCode,CustomerName:e.CustomerName,CustomerEmail:e.CustomerEmail,TravelAgencyName:e.TravelAgencyName,TravelAgencyEmail:e.TravelAgencyEmail,BookingFileStatus:e.BookingFileStatus,Description:e.Description,Nation:e.Nation,Destination:e.Destination,CreationDate:e.CreationDate,FirstConfirmationDate:e.FirstConfirmationDate,StartDate:e.StartDate,EndDate:e.EndDate,PackageCode:e.PackageCode,BookedServiceList:e.BookedServiceList,TotalAmountDetail:e.TotalAmountDetail,PaxNumber:e.PaxNumber,PassengerList:e.PassengerList,Reference:e.Reference,ClerkName:e.ClerkName,StoredDocumentsList:e.StoredDocumentsList,PrintableDocumentsList:e.PrintableDocumentsList,FinancialDeadlineList:e.FinancialDeadlineList}))),A=t.object({"@HostID":t.pipe(t.string(),t.minLength(6),t.maxLength(6)),"@Xtoken":t.string(),"@Interface":t.literal(`WEB`),"@UserName":t.literal(`WEB`),"@LanguageCode":t.optional(t.pipe(t.string(),t.minLength(2),t.maxLength(2)))}),Fe=t.optional(t.pipe(t.string(),t.transform(e=>e.split(`,`)))),j=t.pipe(t.object({"@Status":t.union([t.literal(`OK`),t.literal(`ERROR`),t.literal(`WARNING`),t.literal(`TIMEOUT`)]),ErrorCode:t.optional(t.pipe(t.union([t.string(),t.number()]),t.transform(e=>Number(e)))),ErrorDescription:t.optional(t.string()),Warnings:Fe}),t.transform(e=>({status:e[`@Status`],errorCode:e.ErrorCode,errorDescription:e.ErrorDescription,warnings:e.Warnings}))),Ie=t.object({value:ce,expiredDate:t.optional(t.string())}),Le=t.object({sCode1:t.optional(t.pipe(t.string(),t.maxLength(4))),sCode2:t.optional(t.pipe(t.string(),t.maxLength(4))),sCode3:t.optional(t.pipe(t.string(),t.maxLength(4))),sCode4:t.optional(t.pipe(t.string(),t.maxLength(4))),sCode5:t.optional(t.pipe(t.string(),t.maxLength(4))),sCode6:t.optional(t.pipe(t.string(),t.maxLength(4)))}),Re=t.object({code:t.optional(t.string()),iataCode:t.optional(t.string()),nationCode:t.optional(t.string())}),ze=t.object({recordCode:t.optional(t.string())}),Be=t.union([t.literal(`VISA_REQUEST`),t.literal(`TRAVEL_INFORMATION`),t.literal(`VOUCHER`),t.literal(`BOOKING_CONTRACT`),t.literal(`BOOKING_CONFIRMATION`),t.literal(`SUPPLIER_SERVICE_LIST`),t.literal(`INVOICE`),t.literal(`PROFORMA_INVOICE`),t.literal(`ADEGUAMENTO`),t.literal(`RESERVATION_FORM`),t.literal(`OPEN_XML`),t.literal(`SALES_INVOICE`),t.literal(`TICKETING_TMASTER`),t.literal(`SUMMARY_FORM`)]),Ve=t.object({makeDocumentTo:t.optional(t.union([t.literal(`BOOKING_CUSTOMER`),t.literal(`FIRST_PASSENGER`)]))}),He=t.object({fillInCode:t.optional(t.string())}),Ue=t.union([Ve,He]),We=t.object({documentType:Be,documentCustomizablePrintParameters:t.optional(Ue)}),Ge=t.object({printDoc:t.optional(S),sendDocViaEmail:t.optional(S),infoDocumentsToPrint:t.optional(t.array(We))}),Ke=t.object({reschedulingCode:t.optional(t.string()),expireDate:t.optional(t.string()),totalAmount:t.optional(t.string())}),qe=t.object({deadlineCode:t.optional(t.string()),description:t.optional(t.string()),expireDate:t.optional(t.string())}),Je=t.union([t.literal(`C`),t.literal(`B`),t.literal(`D`),t.literal(`T`),t.literal(`P`),t.literal(`R`),t.literal(`A`),t.literal(`H`),t.literal(`I`),t.literal(`J`),t.literal(`K`),t.literal(`L`),t.literal(`M`),t.literal(`N`),t.literal(`O`),t.literal(`Q`),t.literal(`S`),t.literal(`U`),t.literal(`V`)]),Ye=t.object({paymentDate:t.optional(t.string()),paumentNote:t.optional(t.string()),amount:t.optional(t.string()),paymentUser:t.optional(t.string()),paymentType:t.optional(Je)}),Xe=t.object({deadlineDetail:t.optional(t.array(Ke))}),Ze=t.object({deadlineDetail:t.optional(t.array(qe))}),Qe=t.object({paymentDetail:t.optional(t.array(Ye))}),$e=t.union([t.literal(`PAX_QTY_DAY`),t.literal(`PAX_QTY_NIGHT`),t.literal(`PAX_QTY_WEEK`),t.literal(`PAX_QTY`),t.literal(`PAX_DAY`),t.literal(`PAX_NIGHT`),t.literal(`PAX_WEEK`),t.literal(`PAX`),t.literal(`QTY_DAY`),t.literal(`QTY_NIGHT`),t.literal(`QTY_WEE`),t.literal(`QTY`),t.literal(`DAY`),t.literal(`NIGHT`),t.literal(`WEEK`),t.literal(`FORFAIT`)]),et=t.object({currencyCode:t.optional(t.string()),exchangeRate:t.optional(t.string()),cost:t.optional(t.string()),costTax:t.optional(t.string()),costType:t.optional($e),vatCostCurrencyCode:t.optional(t.string()),price:t.optional(t.string()),priceTax:t.optional(t.string()),priceType:t.optional($e)}),tt=t.object({packageCode:t.optional(t.string()),packageReference:t.optional(t.string()),suballotmentCode:t.optional(t.string()),priceListCode:t.optional(t.string()),costListCode:t.optional(t.string()),externalFileCode:t.optional(t.string()),externalReference:t.optional(t.string()),serviceStatus:t.optional(t.string()),serviceStatisticCode:t.optional(t.string()),serviceFare:t.optional(et)}),nt=t.object({pax:t.string()}),M=t.object({sCode:t.string(),ssCode:t.optional(t.string()),avesServiceType:fe,toServiceType:t.optional(w),subServiceDesc:t.optional(t.string()),startDate:t.string(),endDate:t.string(),qty:t.string(),pax:t.string(),paxAssociated:t.optional(t.array(nt)),avesSession:t.string(),avesServiceInfo:t.optional(tt),serviceFare:t.optional(et),bookedServiceRef:t.optional(t.string()),supplierMasterCode:t.optional(t.string()),voucherMasterCode:t.optional(t.string()),hotelServiceInfo:t.optional(t.string()),carRentalServiceInfo:t.optional(t.string()),flightServiceInfo:t.optional(t.string()),shipServiceInfo:t.optional(t.string()),ticketServiceInfo:t.optional(t.string()),commission:t.optional(t.string()),noteList:t.optional(t.string()),voucherInfo:t.optional(t.string()),firstDescription:t.optional(t.string()),secondDescription:t.optional(t.string())}),N=t.object({pCode:t.string(),startDate:t.string(),endDate:t.string(),getServicesFromPackage:t.optional(S)}),rt=t.object({selectedPackageDetail:t.optional(t.array(N))}),it=t.object({selectedServiceDetail:M}),at=t.object({extraQuoteServiceDetail:t.optional(t.array(M))}),P=t.object({nType:t.optional(t.string()),title:t.optional(t.string()),text:t.optional(t.string())}),ot=t.object({noteDetail:t.optional(t.array(P))}),F=t.union([t.literal(`AD`),t.literal(`CH`),t.literal(`IN`),t.literal(`OV`)]),I={rph:t.string(),roomRph:t.optional(t.string()),billingHolder:t.optional(S),masterRecordCode:t.optional(t.string()),name:t.string(),sex:t.union([t.literal(`M`),t.literal(`F`)]),birthDate:t.optional(t.string()),birthPlace:t.optional(t.string()),nationCode:t.optional(t.string()),citizenshipCode:t.optional(t.string()),fiscalCode:t.optional(t.string()),phoneNumber:t.optional(t.string()),eMail:t.optional(t.string()),notes:t.optional(t.array(P)),flagStatus:t.optional(t.string()),offerCode:t.optional(t.string()),idDocInfo:t.optional(t.object({idType:t.optional(t.string()),idCode:t.optional(t.string()),idIssueLocation:t.optional(t.string()),idIssueCounty:t.optional(t.string()),idIssueDate:t.optional(t.string()),idExpireDate:t.optional(t.string())}))},st=t.object({...I,categoryCode:F}),L=t.object({...I,categoryCode:t.optional(F)}),ct=t.object({passengerDetail:st}),lt=t.union([t.literal(`CASH`),t.literal(`BANK`),t.literal(`RID`),t.literal(`RIBA`),t.literal(`SPECIFIC_CODE`),t.literal(`NOT_SET`)]),R=t.object({customer_PaymentType:t.optional(lt),customer_SpecPaymentTypeCode:t.optional(t.string())}),ut=t.union([t.literal(`GROUPED_PAX`),t.literal(`NOT_GROUPED_PAX`),t.literal(`ONE_PAX_ONLY`)]),dt=t.union([t.literal(`AVES2AVES`),t.literal(`AVES2AVESVIA`),t.literal(`AVES2AVESITA`)]),ft=T(t.object({createDate:t.optional(t.string()),bookingFileRefCode:t.optional(t.string()),travelAgentCode:t.optional(t.string()),clerkName:t.optional(t.string()),customerDetail:ze,currencyCode:t.optional(t.string()),markupCode:t.optional(t.string()),bookingFileStatus:Ie,statisticCodes:t.optional(Le),destination:t.optional(Re),bookingFileDescription:t.optional(t.string()),startDate:t.string(),endDate:t.string(),earlyBookingDate:t.optional(t.string()),cupCode:t.optional(t.string()),cigCode:t.optional(t.string()),customerPromoterCode:t.optional(t.string()),billingReferenceCode:t.optional(t.string()),paymentReferenceCode:t.optional(t.string()),bookingFileDocument:t.optional(Ge),financialDeadlineList:t.optional(Xe),deadlineList:t.optional(Ze),paymentList:t.optional(Qe),selectedPackageList:t.optional(rt),selectedServiceList:t.array(it),extraQuotaRefCode:t.optional(t.string()),extraQuoteServiceList:t.optional(at),getExtraQuoteFromSystem:t.optional(S),passengerList:t.array(ct),noteList:t.optional(ot),bookingFinancialInfo:t.optional(R),bookingFileCode:t.optional(t.string()),groupingPaxPolicy:t.optional(ut),groupBookingFile:t.optional(S),typeDownloadFile:t.optional(dt),setBookingFileCodeFromStartDate:t.optional(S)})),z=b(t.object({RsStatus:j,BookingFileDetail:t.optional(Pe),PrintableDocumentsList:t.optional(k),TotalAmountDetailAfterCancellation:t.optional(O),Base64DocContent:t.optional(t.string())})),B=b(t.object({RsStatus:j})),V=z,pt=t.object({reschedulingCode:t.string(),description:t.optional(t.string()),expireDate:t.optional(t.string())}),mt=t.object({cancelOperationType:t.union([t.literal(`NULLIFY`),t.literal(`DELETE`)]),serviceRefType:t.union([t.literal(`RPH`),t.literal(`FILE`)]),serviceRefValue:t.string()}),ht=T(t.object({customerRecordCode:t.string(),bookingFileCode:t.string(),currencyCode:t.optional(t.string()),deadlineList:t.optional(t.object({deadlineDetail:t.optional(t.array(pt))})),selectedPackageDetail:t.optional(N),selectedServiceList:t.object({selectedServiceDetail:t.pipe(t.array(M),t.minLength(1))}),cancellableBookedServiceList:t.optional(t.object({cancellableBookedServiceDetail:t.optional(t.array(mt))})),passengerList:t.optional(t.object({passengerDetail:t.optional(t.array(L))}))})),gt=y(t.object({bookingFileCode:t.string(),bookingFileStartDate:t.string(),customerRecordCode:t.string(),newCustomerRecordCode:t.optional(t.string()),bookingFileReferenceName:t.optional(t.string()),travelAgentCode:t.optional(t.string()),billingReferenceCode:t.optional(t.string()),paymentReferenceCode:t.optional(t.string()),cupCode:t.optional(t.string()),cigCode:t.optional(t.string()),customerPromoterCode:t.optional(t.string()),bookingNote:t.optional(t.string()),passengerList:t.optional(t.object({passengerDetail:t.optional(t.array(L))})),statisticCodes:t.optional(Le),bookingFinancialInfo:t.optional(R),financialDeadlineList:t.optional(t.object({deadlineDetail:t.optional(t.array(t.object({reschedulingCode:t.string(),expireDate:t.string(),totalAmount:t.string()})))}))})),_t=y(t.object({bookingFileCode:t.string(),customerRecordCode:t.string()})),vt=t.union([t.literal(`NOT_SET`),t.literal(`CONSIDER_HOLIDAY`),t.literal(`CONSIDER_HOLIDAY_AND_SATURDAY`)]),yt=y(t.object({customerRecordCode:t.string(),bookingFileCode:t.string(),fileStatus:t.object({value:le,expiredDate:t.optional(t.string()),optionedFileExpireDatePolicy:t.optional(vt)}),backOfficeRequest:t.optional(S),bookingFileDocument:t.optional(Ge),penalty:t.optional(t.object({apply:t.optional(S),specificCode:t.optional(t.string())})),simulateCancelAndGetPenaltyAmount:t.optional(S)})),bt=y(t.object({customerRecordCode:t.string(),bookingFileCode:t.string(),bookingServiceRef:t.string(),bookingFileServiceStatus:t.literal(`NULLIFIED`),bookingFileServiceStatusDate:t.optional(t.string())})),xt=t.union([t.literal(`C`),t.literal(`B`),t.literal(`D`),t.literal(`T`),t.literal(`P`),t.literal(`R`),t.literal(`A`),t.literal(`H`),t.literal(`I`),t.literal(`J`),t.literal(`K`),t.literal(`L`),t.literal(`M`),t.literal(`N`),t.literal(`O`),t.literal(`Q`),t.literal(`S`),t.literal(`U`),t.literal(`V`)]),St=t.union([t.literal(`AbsoluteAmountsInsertion`),t.literal(`FinalAmountToAchieve`),t.literal(`FinalAmountToAchieveWithoutControls`)]),Ct=t.object({paymentDate:t.string(),paymentNote:t.optional(t.string()),payerMasterCode:t.optional(t.string()),payerName:t.optional(t.string()),amount:t.string(),paymentType:xt}),wt=y(t.pipe(t.object({bookingFileCode:t.optional(t.string()),bookingFileRefCode:t.optional(t.string()),paymentUser:t.optional(t.string()),enableMultiplePayments:S,operationType:St,filePaymentList:t.object({filePaymentDetail:t.pipe(t.array(Ct),t.minLength(1))})}),t.check(e=>!!(e.bookingFileCode||e.bookingFileRefCode),`bookingFileCode or bookingFileRefCode is required`))),H=t.union([t.literal(`CASH`),t.literal(`BANK`),t.literal(`RID`),t.literal(`RIBA`),t.literal(`SPECIFIC_CODE`)]),U=t.object({currencyCode:t.optional(t.string()),creditLimit:t.optional(t.string()),c_PaymentType:t.optional(H),c_SpecPaymentTypeCode:t.optional(t.string()),s_PaymentType:t.optional(H),s_SpecPaymentTypeCode:t.optional(t.string()),enableElectronicInvoicing:t.optional(t.union([t.literal(`true`),t.literal(`false`),t.boolean()])),electronicInvoicingType:t.optional(t.string())});y(U);const Tt=x(U),W=t.object({idType:t.optional(t.string()),idCode:t.optional(t.string()),idIssueLocation:t.optional(t.string()),idIssueCounty:t.optional(t.string()),idIssueDate:t.optional(t.string()),idExpireDate:t.optional(t.string())});y(W);const Et=x(W),G=t.object({key:t.string(),value:t.string()});y(t.array(G));const Dt=x(G),Ot=t.union([t.literal(`NOT_SET`),t.literal(`FLIGHT`),t.literal(`SHIP`),t.literal(`TRAIN`),t.literal(`RENTCAR`),t.literal(`BUS`),t.literal(`DP_HOTEL`),t.literal(`TO_HOTEL`),t.literal(`TO_TOUR`),t.literal(`TO_HOTEL_AND_TOUR`),t.literal(`DP_AUTO`),t.literal(`DP_GDS_NAVI`),t.literal(`DP_GDS_VOLI`),t.literal(`TOUR_OPERATOR`),t.literal(`TICKETING_EV`),t.literal(`OTHER`)]),K=t.object({supplierRefCode:t.optional(t.string()),companyMainBusinessType:t.optional(t.string()),carrierType:t.optional(Ot)});y(K);const kt=x(K),q=t.union([t.literal(0),t.literal(1)]),At=t.union([t.literal(`ENABLED`),t.literal(`DISABLED`),t.literal(`WARNING`),t.literal(`BLACKLISTED`)]),jt=t.union([t.literal(`CUSTOMER`),t.literal(`SUPPLIER`),t.literal(`GENERAL`)]),Mt=t.union([t.literal(`S`),t.literal(`N`),t.literal(`T`),t.literal(`M`)]),J=t.object({acceptProfilingPolicies:t.optional(q),acceptPrivacyPolicies:t.optional(q),acceptNewsletterPolicies:t.optional(q)});y(J);const Nt=x(J),Pt=y(t.object({recordCode:t.optional(t.pipe(t.string(),t.minLength(6),t.maxLength(6))),insertCriteria:t.optional(Mt),createdDate:t.optional(t.string()),recordType:t.optional(t.union([jt],`CUSTOMER`)),recordStatus:t.optional(t.union([At],`ENABLED`)),moniker:t.optional(t.string()),name:t.optional(t.string()),extraInfo:t.optional(t.string()),languageCode:t.pipe(t.string(),t.minLength(2),t.maxLength(2)),address:t.optional(t.string()),zipCode:t.optional(t.string()),cityName:t.optional(t.string()),countyCode:t.optional(t.string()),stateCode:t.optional(t.string()),categoryCode:t.optional(t.string()),firstPhoneNumber:t.optional(t.string()),mobilePhoneNumber:t.optional(t.string()),email:t.optional(t.string()),gender:t.optional(t.union([t.literal(`M`),t.literal(`F`)])),birthDate:t.optional(t.string()),birthCity:t.optional(t.string()),birthCounty:t.optional(t.string()),fiscalCode:t.optional(t.string()),vatCode:t.optional(t.string()),thirdPartRecordCode:t.optional(t.string()),idDocumentDetail:t.optional(W),accountPolicies:t.optional(J),financialDetail:t.optional(U),dynamicFields:t.optional(G),supplierRefMasterRecords:t.optional(K)}));b(Pt);const Y=t.object({"@RecordCode":t.optional(t.pipe(t.string(),t.minLength(6),t.maxLength(6))),"@InsertCriteria":t.optional(Mt),CreatedDate:t.optional(t.string()),ModifiedDate:t.optional(t.string()),RecordType:t.optional(t.union([t.literal(`CUSTOMER`),t.literal(`SUPPLIER`),t.literal(`GENERAL`)])),LoginType:t.optional(t.string()),RecordStatus:t.optional(At),Moniker:t.optional(t.string()),Name:t.optional(t.string()),ExtraInfo:t.optional(t.string()),LanguageCode:t.optional(t.pipe(t.string(),t.minLength(1),t.maxLength(2))),Address:t.optional(t.string()),ZipCode:t.optional(t.string()),CityName:t.optional(t.string()),CountyCode:t.optional(t.string()),StateCode:t.optional(t.string()),CategoryCode:t.optional(t.string()),PromoterCode:t.optional(t.string()),FirstPhoneNumber:t.optional(t.string()),MobilePhoneNumber:t.optional(t.string()),Email:t.optional(t.string()),Gender:t.optional(t.union([t.literal(`M`),t.literal(`F`)])),BirthDate:t.optional(t.string()),BirthCity:t.optional(t.string()),BirthCounty:t.optional(t.string()),EncryptedPassword:t.optional(t.union([t.literal(`true`),t.literal(`false`),t.boolean()])),FiscalCode:t.optional(t.string()),VatCode:t.optional(t.string()),ThirdPartRecordCode:t.optional(t.string()),IdDocumentDetail:t.optional(Et),NewsletterDisabled:t.optional(t.union([t.literal(`true`),t.literal(`false`),t.boolean()])),SupplierRefMasterRecords:t.optional(kt),AccountPolicies:t.optional(Nt),FinancialDetail:t.optional(Tt),DynamicFields:t.optional(Dt)}),Ft=t.object({minDate:t.string(),maxDate:t.string()}),X=t.optional(t.pipe(t.string(),t.minLength(2),t.maxLength(2))),It=t.object({searchType:t.literal(`CODE`),recordCode:t.pipe(t.string(),t.minLength(5),t.maxLength(6)),languageCode:X}),Lt=t.object({searchType:t.literal(`NAME`),name:t.string(),city:t.optional(t.string()),languageCode:X}),Rt=t.object({searchType:t.literal(`VATCODE`),vatCode:t.string(),phoneNumber:t.optional(t.string()),languageCode:X}),zt=t.object({searchType:t.literal(`ZONE`),zipCode:t.string(),countyCode:t.string(),city:t.optional(t.string()),languageCode:X}),Bt=t.object({searchType:t.literal(`CATEGORY`),categoryCode:t.string(),languageCode:X}),Vt=t.object({searchType:t.literal(`EMAIL`),email:t.string(),languageCode:X}),Ht=t.object({searchType:t.literal(`LASTMODDATE`),lastModificationDate:Ft,languageCode:X}),Ut=t.object({searchType:t.literal(`SEARCH_FIELD`),searchFieldValue:t.string(),languageCode:X}),Wt=t.object({searchType:t.literal(`EXTERNAL_REF_CODE`),searchFieldValue:t.string(),languageCode:X}),Gt=t.union([It,Lt,Rt,zt,Bt,Vt,Ht,Ut,Wt]),Kt=e=>{if(!(`@RecordCode`in e))return e;let t=e[`@RecordCode`];if(!t)return e;let{"@RecordCode":n,...r}=e;return{...r,RecordCode:t}},qt=t.pipe(y(Gt),t.transform(e=>Kt(e))),Jt=t.pipe(t.object({RqHeader:A,SearchMasterRecord:qt}),t.transform(e=>{let{SearchMasterRecord:t,RqHeader:n,...r}=e;return{RqHeader:n,...t,...r}})),Yt=t.object({MasterRecordDetail:t.optional(t.pipe(t.union([t.array(Y),Y]),t.transform(e=>{if(e)return Array.isArray(e)?e:[e]})))}),Xt=b(t.object({RsStatus:j,MasterRecordList:t.optional(Yt)})),Zt=t.object({RqHeader:A,MasterRecordDetail:Y}),Qt=b(t.object({RsStatus:j,MasterRecordDetail:t.optional(Y)}));function $t(e){return{success:!0,data:e}}function Z(e){return{success:!1,error:e}}function en(e){return e===200}function tn(e){let t=new AbortController;if(!e||e<=0)return{signal:t.signal};let n=setTimeout(()=>t.abort(),e);return{signal:t.signal,clear:()=>clearTimeout(n)}}function nn(e,t){try{let n=new URL(e),r=(n.pathname.endsWith(`/`)?n.pathname.slice(0,-1):n.pathname)+t;return new URL(r,n)}catch(e){throw new c(`validation`,`Invalid baseURL: ${e instanceof Error?e.message:`Invalid URL format`}`)}}function rn(e,t){if(!t.startsWith(`/`))throw new c(`validation`,`Invalid endpoint: endpoint must start with '/' but got '${t}'`);let n=nn(e.replace(/\/$/,``),t);if(n.protocol!==`http:`&&n.protocol!==`https:`)throw new c(`validation`,`Invalid protocol: baseURL must use http:// or https:// but got '${n.protocol}'`);return n.toString()}const an={ignoreAttributes:!1,attributeNamePrefix:`@`,parseAttributeValue:!1,trimValues:!0,ignoreNameSpace:!0,removeNSPrefix:!0,parseTagValue:!1},on={ignoreAttributes:!1,attributeNamePrefix:`@`,suppressEmptyNode:!0},sn=new o(an),cn=new a(on);function ln(e){try{return cn.build(e)}catch(e){throw new c(`validation`,`Failed to convert JSON to XML: ${e instanceof Error?e.message:`Unknown error`}`)}}function un(e){try{return sn.parse(e)}catch(e){throw new c(`validation`,`Failed to convert XML to JSON: ${e instanceof Error?e.message:`Unknown error`}`)}}const Q={SEARCH_REQUEST:`SearchMasterRecordRQ`,SEARCH_RESPONSE:`SearchMasterRecordRS`,UPSERT_REQUEST:`ManageMasterRecordRQ`,UPSERT_RESPONSE:`ManageMasterRecordRS`,BOOKING_REQUEST:`BookFileRQ`,BOOKING_RESPONSE:`BookingFileRS`,MOD_FILE_SERVICES_REQUEST:`ModFileServicesRQ`,MOD_FILE_HEADER_REQUEST:`ModFileHeaderRQ`,MOD_FILE_HEADER_RESPONSE:`ModFileHeaderRS`,CANCEL_FILE_REQUEST:`CancelFileRQ`,CANCEL_FILE_RESPONSE:`CancelFileRS`,SET_STATUS_REQUEST:`SetStatusRQ`,SET_STATUS_RESPONSE:`SetStatusRS`,SET_STATUS_SERVICE_REQUEST:`SetStatusServiceRQ`,SET_STATUS_SERVICE_RESPONSE:`SetStatusServiceRS`,FILE_PAYMENT_LIST_REQUEST:`FilePaymentListRQ`,FILE_PAYMENT_LIST_RESPONSE:`FilePaymentListRS`};function $(e,t){return{[e]:t}}var dn=class{options;constructor(e){this.options=e}createRqHeader(){return{"@HostID":this.options.hostID,"@Xtoken":this.options.xtoken,"@Interface":`WEB`,"@UserName":`WEB`,...this.options.languageCode&&{"@LanguageCode":this.options.languageCode}}}createUrl(e){return rn(this.options.baseURL,e)}get endpoints(){return{search:`/interop/masterRecords/v2/rest/Search`,upsert:`/interop/masterRecords/v2/rest/InsertOrUpdate`,createBooking:`/interop/booking/v2/rest/CreateBookingFile`,modBookingServices:`/interop/booking/v2/rest/ModBookingFileServices`,modBookingHeader:`/interop/booking/v2/rest/ModBookingFileHeader`,cancelBooking:`/interop/booking/v2/rest/CancelBookingFile`,setBookingStatus:`/interop/booking/v2/rest/SetBookingFileStatus`,setBookingServiceStatus:`/interop/booking/v2/rest/SetBookingFileServiceStatus`,insertFilePaymentList:`/interop/booking/v2/rest/InsertFilePaymentList`}}handleApiStatus(e){let t=e.rsStatus,n=t?.status;return n===`OK`?$t(e):Z(u(t.errorDescription,n,t.errorCode))}toAvesError(e,t){return e instanceof c?e:e instanceof n?l(`Validation error: ${ee(e.issues)}`):e instanceof Error?d(e.message):d(t)}async request(t,n,r,a){let{signal:o,clear:s}=tn(this.options.timeoutMs??3e4);try{let s=await e(this.createUrl(t),{method:`POST`,headers:{"Content-Type":`application/xml`},body:ln(n),signal:o}),c=await s.body.text();if(!en(s.statusCode))return Z(u(c,`ERROR`,s.statusCode));let d=un(c)[r];if(!d)return Z(l(`Invalid response structure: missing root element '${r}'`));let f=i(a,d);return f.success?this.handleApiStatus(f.output):Z(l(`Invalid response format: ${ee(f.issues)}`))}catch(e){return re(e)?Z(u(`Request timed out`,`TIMEOUT`)):Z(this.toAvesError(e,`Unknown error occurred`))}finally{s?.()}}async invokeOp(e){try{let t=r(e.apiSchema,e.params);return this.request(e.endpoint,$(e.requestRoot,{RqHeader:this.createRqHeader(),...t}),e.responseRoot,e.responseSchema)}catch(t){return Z(this.toAvesError(t,`Validation error occurred during ${e.op}`))}}async search(e){try{let t=r(Jt,{RqHeader:this.createRqHeader(),SearchMasterRecord:e}),n=$(Q.SEARCH_REQUEST,t);return this.request(this.endpoints.search,n,Q.SEARCH_RESPONSE,Xt)}catch(e){return Z(this.toAvesError(e,`Validation error occurred during search`))}}async upsertRecord(e){try{let t=r(Pt,e),n=r(Zt,{RqHeader:this.createRqHeader(),MasterRecordDetail:t}),i=$(Q.UPSERT_REQUEST,n);return this.request(this.endpoints.upsert,i,Q.UPSERT_RESPONSE,Qt)}catch(e){return Z(this.toAvesError(e,`Validation error occurred during upsert`))}}async createBooking(e){return this.invokeOp({op:`createBooking`,params:e,apiSchema:ft,endpoint:this.endpoints.createBooking,requestRoot:Q.BOOKING_REQUEST,responseRoot:Q.BOOKING_RESPONSE,responseSchema:z})}async modBookingServices(e){return this.invokeOp({op:`modBookingServices`,params:e,apiSchema:ht,endpoint:this.endpoints.modBookingServices,requestRoot:Q.MOD_FILE_SERVICES_REQUEST,responseRoot:Q.BOOKING_RESPONSE,responseSchema:V})}async modBookingHeader(e){return this.invokeOp({op:`modBookingHeader`,params:e,apiSchema:gt,endpoint:this.endpoints.modBookingHeader,requestRoot:Q.MOD_FILE_HEADER_REQUEST,responseRoot:Q.MOD_FILE_HEADER_RESPONSE,responseSchema:B})}async cancelBooking(e){return this.invokeOp({op:`cancelBooking`,params:e,apiSchema:_t,endpoint:this.endpoints.cancelBooking,requestRoot:Q.CANCEL_FILE_REQUEST,responseRoot:Q.CANCEL_FILE_RESPONSE,responseSchema:B})}async setBookingStatus(e){return this.invokeOp({op:`setBookingStatus`,params:e,apiSchema:yt,endpoint:this.endpoints.setBookingStatus,requestRoot:Q.SET_STATUS_REQUEST,responseRoot:Q.SET_STATUS_RESPONSE,responseSchema:V})}async setBookingServiceStatus(e){return this.invokeOp({op:`setBookingServiceStatus`,params:e,apiSchema:bt,endpoint:this.endpoints.setBookingServiceStatus,requestRoot:Q.SET_STATUS_SERVICE_REQUEST,responseRoot:Q.SET_STATUS_SERVICE_RESPONSE,responseSchema:V})}async insertFilePaymentList(e){return this.invokeOp({op:`insertFilePaymentList`,params:e,apiSchema:wt,endpoint:this.endpoints.insertFilePaymentList,requestRoot:Q.FILE_PAYMENT_LIST_REQUEST,responseRoot:Q.FILE_PAYMENT_LIST_RESPONSE,responseSchema:B})}};export{dn as AvesClient,c as AvesError};
2
2
  //# sourceMappingURL=index.mjs.map