aves-sdk 1.2.15 → 1.2.16

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.cjs CHANGED
@@ -1,3 +1,3 @@
1
- 'use strict';var undici=require('undici'),e=require('valibot'),fastXmlParser=require('fast-xml-parser');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var e__namespace=/*#__PURE__*/_interopNamespace(e);var L={VALIDATION:"validation",API:"api",UNKNOWN:"unknown"},l=class extends Error{constructor(a,n,s,c){super(n);this.kind=a;this.message=n;this.status=s;this.code=c;this.name="AvesError",this.status=s?.toLowerCase(),this.code=this.parseCode(c);}parseCode(a){return typeof a=="string"?Number.parseInt(a):a??0}};function E(t){return new l(L.VALIDATION,t)}function T(t,r,a){return new l(L.API,t,r,a)}function I(t){return new l(L.UNKNOWN,t)}function N(t){return t.map(r=>{let a=r.path&&r.path.length>0?r.path.map(s=>typeof s=="string"||typeof s=="number"?String(s):"key"in s?String(s.key):"").filter(Boolean).join("."):void 0,n=r.message??"Invalid value";return a?`${a}: ${n}`:n}).join("; ")}function H(t){return t instanceof Error&&t.name==="AbortError"}var ce={ignoreAttributes:false,attributeNamePrefix:"@",parseAttributeValue:false,trimValues:true,ignoreNameSpace:true,removeNSPrefix:true,parseTagValue:false},le={ignoreAttributes:false,attributeNamePrefix:"@",suppressEmptyNode:true},pe=new fastXmlParser.XMLParser(ce),ve=new fastXmlParser.XMLBuilder(le);function z(t){try{return ve.build(t)}catch(r){throw new l("validation",`Failed to convert JSON to XML: ${r instanceof Error?r.message:"Unknown error"}`)}}function q(t){try{return pe.parse(t)}catch(r){throw new l("validation",`Failed to convert XML to JSON: ${r instanceof Error?r.message:"Unknown error"}`)}}var C=e__namespace.object({"@HostID":e__namespace.pipe(e__namespace.string(),e__namespace.minLength(6),e__namespace.maxLength(6)),"@Xtoken":e__namespace.string(),"@Interface":e__namespace.literal("WEB"),"@UserName":e__namespace.literal("WEB"),"@LanguageCode":e__namespace.optional(e__namespace.pipe(e__namespace.string(),e__namespace.minLength(2),e__namespace.maxLength(2)))}),me=e__namespace.optional(e__namespace.pipe(e__namespace.string(),e__namespace.transform(t=>t.split(",")))),A=e__namespace.pipe(e__namespace.object({"@Status":e__namespace.union([e__namespace.literal("OK"),e__namespace.literal("ERROR"),e__namespace.literal("WARNING"),e__namespace.literal("TIMEOUT")]),ErrorCode:e__namespace.optional(e__namespace.pipe(e__namespace.union([e__namespace.string(),e__namespace.number()]),e__namespace.transform(t=>Number(t)))),ErrorDescription:e__namespace.optional(e__namespace.string()),Warnings:me}),e__namespace.transform(t=>({status:t["@Status"],errorCode:t.ErrorCode,errorDescription:t.ErrorDescription,warnings:t.Warnings})));function de(t){return t.charAt(0).toUpperCase()+t.slice(1)}function V(t){return t.charAt(0).toLowerCase()+t.slice(1)}function x(t){return t instanceof Date||t instanceof RegExp||t instanceof Map||t instanceof Set||t instanceof Error}var w=new Set(["recordCode","insertCriteria","currencyCode","creditLimit","c_PaymentType","c_SpecPaymentTypeCode","s_PaymentType","s_SpecPaymentTypeCode","enableElectronicInvoicing","electronicInvoicingType","key","value","minDate","maxDate","hostID","xtoken","interface","userName","status","acceptProfilingPolicies","acceptPrivacyPolicies","acceptNewsletterPolicies"]);function h(t){if(!t||typeof t!="object")return t;if(Array.isArray(t))return t.map(a=>h(a));if(x(t))return t;let r={};for(let[a,n]of Object.entries(t)){let s=w.has(a),c=de(a),g=s?`@${c}`:c;n&&typeof n=="object"&&!Array.isArray(n)?x(n)?r[g]=n:r[g]=h(n):Array.isArray(n)?r[g]=n.map(p=>typeof p=="object"&&p&&!Array.isArray(p)?h(p):p):r[g]=n;}return r}function f(t){if(!t||typeof t!="object")return t;if(Array.isArray(t))return t.map(a=>f(a));if(x(t))return t;let r={};for(let[a,n]of Object.entries(t))if(a.startsWith("@")){let s=a.slice(1),c=V(s);r[c]=n;}else {let s=V(a);n&&typeof n=="object"&&!Array.isArray(n)?x(n)?r[s]=n:r[s]=f(n):Array.isArray(n)?r[s]=n.map(c=>typeof c=="object"&&c&&!Array.isArray(c)?f(c):c):r[s]=n;}return r}function u(t){return e__namespace.pipe(t,e__namespace.transform(r=>h(r)))}function R(t){return e__namespace.pipe(t,e__namespace.transform(r=>f(r)))}function M(t){let r={};for(let a in t.entries){let n=w.has(a),s=a.charAt(0).toUpperCase()+a.slice(1),c=n?`@${s}`:s;r[c]=t.entries[a];}return e__namespace.object(r)}var X=e__namespace.union([e__namespace.literal("CASH"),e__namespace.literal("BANK"),e__namespace.literal("RID"),e__namespace.literal("RIBA"),e__namespace.literal("SPECIFIC_CODE")]),U=e__namespace.object({currencyCode:e__namespace.optional(e__namespace.string()),creditLimit:e__namespace.optional(e__namespace.string()),c_PaymentType:e__namespace.optional(X),c_SpecPaymentTypeCode:e__namespace.optional(e__namespace.string()),s_PaymentType:e__namespace.optional(X),s_SpecPaymentTypeCode:e__namespace.optional(e__namespace.string()),enableElectronicInvoicing:e__namespace.optional(e__namespace.union([e__namespace.literal("true"),e__namespace.literal("false"),e__namespace.boolean()])),electronicInvoicingType:e__namespace.optional(e__namespace.string())});u(U);var ue=M(U),k=e__namespace.object({key:e__namespace.string(),value:e__namespace.string()});u(k);var ge=M(k),O=e__namespace.union([e__namespace.literal(0),e__namespace.literal(1)]),W=e__namespace.union([e__namespace.literal("ENABLED"),e__namespace.literal("DISABLED"),e__namespace.literal("WARNING"),e__namespace.literal("BLACKLISTED")]),Re=e__namespace.union([e__namespace.literal("CUSTOMER"),e__namespace.literal("SUPPLIER"),e__namespace.literal("GENERAL")]),G=e__namespace.union([e__namespace.literal("S"),e__namespace.literal("N"),e__namespace.literal("T"),e__namespace.literal("M")]),$=e__namespace.object({acceptProfilingPolicies:e__namespace.optional(O),acceptPrivacyPolicies:e__namespace.optional(O),acceptNewsletterPolicies:e__namespace.optional(O)});u($);var Se=M($),he=e__namespace.object({recordCode:e__namespace.optional(e__namespace.pipe(e__namespace.string(),e__namespace.minLength(6),e__namespace.maxLength(6))),insertCriteria:e__namespace.optional(G),createdDate:e__namespace.optional(e__namespace.string()),recordType:e__namespace.optional(e__namespace.union([Re],"CUSTOMER")),recordStatus:e__namespace.optional(e__namespace.union([W],"ENABLED")),moniker:e__namespace.optional(e__namespace.string()),name:e__namespace.optional(e__namespace.string()),extraInfo:e__namespace.optional(e__namespace.string()),languageCode:e__namespace.pipe(e__namespace.string(),e__namespace.minLength(2),e__namespace.maxLength(2)),address:e__namespace.optional(e__namespace.string()),zipCode:e__namespace.optional(e__namespace.string()),cityName:e__namespace.optional(e__namespace.string()),countyCode:e__namespace.optional(e__namespace.string()),stateCode:e__namespace.optional(e__namespace.string()),categoryCode:e__namespace.optional(e__namespace.string()),firstPhoneNumber:e__namespace.optional(e__namespace.string()),mobilePhoneNumber:e__namespace.optional(e__namespace.string()),email:e__namespace.optional(e__namespace.string()),gender:e__namespace.optional(e__namespace.string()),birthDate:e__namespace.optional(e__namespace.string()),fiscalCode:e__namespace.optional(e__namespace.string()),vatCode:e__namespace.optional(e__namespace.string()),accountPolicies:e__namespace.optional($),financialDetail:e__namespace.optional(U),dynamicFields:e__namespace.optional(k)}),F=u(he);R(F);var S=e__namespace.object({"@RecordCode":e__namespace.optional(e__namespace.pipe(e__namespace.string(),e__namespace.minLength(5),e__namespace.maxLength(6))),"@InsertCriteria":e__namespace.optional(G),CreatedDate:e__namespace.optional(e__namespace.string()),ModifiedDate:e__namespace.optional(e__namespace.string()),RecordType:e__namespace.optional(e__namespace.union([e__namespace.literal("CUSTOMER"),e__namespace.literal("SUPPLIER"),e__namespace.literal("GENERAL")])),LoginType:e__namespace.optional(e__namespace.string()),RecordStatus:e__namespace.optional(W),Moniker:e__namespace.optional(e__namespace.string()),Name:e__namespace.optional(e__namespace.string()),ExtraInfo:e__namespace.optional(e__namespace.string()),LanguageCode:e__namespace.optional(e__namespace.pipe(e__namespace.string(),e__namespace.minLength(1),e__namespace.maxLength(2))),Address:e__namespace.optional(e__namespace.string()),ZipCode:e__namespace.optional(e__namespace.string()),CityName:e__namespace.optional(e__namespace.string()),CountyCode:e__namespace.optional(e__namespace.string()),StateCode:e__namespace.optional(e__namespace.string()),CategoryCode:e__namespace.optional(e__namespace.string()),PromoterCode:e__namespace.optional(e__namespace.string()),FirstPhoneNumber:e__namespace.optional(e__namespace.string()),MobilePhoneNumber:e__namespace.optional(e__namespace.string()),Email:e__namespace.optional(e__namespace.string()),Gender:e__namespace.optional(e__namespace.string()),BirthDate:e__namespace.optional(e__namespace.string()),EncryptedPassword:e__namespace.optional(e__namespace.union([e__namespace.literal("true"),e__namespace.literal("false"),e__namespace.boolean()])),FiscalCode:e__namespace.optional(e__namespace.string()),VatCode:e__namespace.optional(e__namespace.string()),NewsletterDisabled:e__namespace.optional(e__namespace.union([e__namespace.literal("true"),e__namespace.literal("false"),e__namespace.boolean()])),SupplierRefMasterRecords:e__namespace.optional(e__namespace.any()),AccountPolicies:e__namespace.optional(Se),FinancialDetail:e__namespace.optional(ue),DynamicFields:e__namespace.optional(e__namespace.array(ge))});var fe=e__namespace.object({minDate:e__namespace.string(),maxDate:e__namespace.string()}),v=e__namespace.optional(e__namespace.pipe(e__namespace.string(),e__namespace.minLength(2),e__namespace.maxLength(2))),ye=e__namespace.object({searchType:e__namespace.literal("CODE"),recordCode:e__namespace.pipe(e__namespace.string(),e__namespace.minLength(5),e__namespace.maxLength(6)),languageCode:v}),Ee=e__namespace.object({searchType:e__namespace.literal("NAME"),name:e__namespace.string(),city:e__namespace.optional(e__namespace.string()),languageCode:v}),Te=e__namespace.object({searchType:e__namespace.literal("VATCODE"),vatCode:e__namespace.string(),phoneNumber:e__namespace.optional(e__namespace.string()),languageCode:v}),Ce=e__namespace.object({searchType:e__namespace.literal("ZONE"),zipCode:e__namespace.string(),countyCode:e__namespace.string(),city:e__namespace.optional(e__namespace.string()),languageCode:v}),Ae=e__namespace.object({searchType:e__namespace.literal("CATEGORY"),categoryCode:e__namespace.string(),languageCode:v}),xe=e__namespace.object({searchType:e__namespace.literal("EMAIL"),email:e__namespace.string(),languageCode:v}),Me=e__namespace.object({searchType:e__namespace.literal("LASTMODDATE"),lastModificationDate:fe,languageCode:v}),De=e__namespace.object({searchType:e__namespace.literal("SEARCH_FIELD"),searchFieldValue:e__namespace.string(),languageCode:v}),be=e__namespace.object({searchType:e__namespace.literal("EXTERNAL_REF_CODE"),searchFieldValue:e__namespace.string(),languageCode:v}),Pe=e__namespace.union([ye,Ee,Te,Ce,Ae,xe,Me,De,be]),Le=t=>{if(!("@RecordCode"in t))return t;let r=t["@RecordCode"];if(!r)return t;let{["@RecordCode"]:a,...n}=t;return {...n,RecordCode:r}},Ie=e__namespace.pipe(u(Pe),e__namespace.transform(t=>Le(t))),Q=e__namespace.pipe(e__namespace.object({RqHeader:C,SearchMasterRecord:Ie}),e__namespace.transform(t=>{let{SearchMasterRecord:r,RqHeader:a,...n}=t;return {RqHeader:a,...r,...n}})),Ne=e__namespace.object({MasterRecordDetail:e__namespace.optional(e__namespace.pipe(e__namespace.union([e__namespace.array(S),S]),e__namespace.transform(t=>{if(t)return Array.isArray(t)?t:[t]})))}),J=R(e__namespace.object({RsStatus:A,MasterRecordList:e__namespace.optional(Ne)}));var Z=e__namespace.object({RqHeader:C,MasterRecordDetail:S}),Y=R(e__namespace.object({RsStatus:A,MasterRecordDetail:e__namespace.optional(S)}));function ee(t){return {success:true,data:t}}function m(t){return {success:false,error:t}}function we(t,r){try{let a=new URL(t),s=(a.pathname.endsWith("/")?a.pathname.slice(0,-1):a.pathname)+r;return new URL(s,a)}catch(a){throw new l("validation",`Invalid baseURL: ${a instanceof Error?a.message:"Invalid URL format"}`)}}function te(t,r){if(!r.startsWith("/"))throw new l("validation",`Invalid endpoint: endpoint must start with '/' but got '${r}'`);let a=t.replace(/\/$/,""),n=we(a,r);if(n.protocol!=="http:"&&n.protocol!=="https:")throw new l("validation",`Invalid protocol: baseURL must use http:// or https:// but got '${n.protocol}'`);return n.toString()}function re(t){let r=new AbortController;if(!t||t<=0)return {signal:r.signal};let a=setTimeout(()=>r.abort(),t);return {signal:r.signal,clear:()=>clearTimeout(a)}}function oe(t,r){return {[t]:r}}var D={SEARCH_REQUEST:"SearchMasterRecordRQ",SEARCH_RESPONSE:"SearchMasterRecordRS",UPSERT_REQUEST:"ManageMasterRecordRQ",UPSERT_RESPONSE:"ManageMasterRecordRS"},K=class{constructor(r){this.options=r;}createRqHeader(){return {"@HostID":this.options.hostID,"@Xtoken":this.options.xtoken,"@Interface":"WEB","@UserName":"WEB",...this.options.languageCode&&{"@LanguageCode":this.options.languageCode}}}createUrl(r){return te(this.options.baseURL,r)}get endpoints(){return {search:"/interop/masterRecords/v2/rest/Search",upsert:"/interop/masterRecords/v2/rest/InsertOrUpdate"}}handleApiStatus(r){let a=r.rsStatus,n=a?.status;return n!=="OK"?m(T(a.errorDescription,n,a.errorCode)):ee(r)}toAvesError(r,a){if(r instanceof l)return r;if(r instanceof e.ValiError){let n=N(r.issues);return E(`Validation error: ${n}`)}return r instanceof Error?I(r.message):I(a)}async request(r,a,n,s){let{signal:c,clear:g}=re(this.options.timeoutMs??3e4);try{let p=this.createUrl(r),ae=z(a),b=await undici.request(p,{method:"POST",headers:{"Content-Type":"application/xml"},body:ae,signal:c}),j=await b.body.text();if(b.statusCode!==200)return m(T(j,"ERROR",b.statusCode));let B=q(j)[n];if(!B)return m(E(`Invalid response structure: missing root element '${n}'`));let P=e.safeParse(s,B);if(!P.success){let ne=N(P.issues);return m(E(`Invalid response format: ${ne}`))}return this.handleApiStatus(P.output)}catch(p){return H(p)?m(T("Request timed out","TIMEOUT")):m(this.toAvesError(p,"Unknown error occurred"))}finally{g?.();}}async search(r){try{let a=e.parse(Q,{RqHeader:this.createRqHeader(),SearchMasterRecord:r}),n=oe(D.SEARCH_REQUEST,a);return this.request(this.endpoints.search,n,D.SEARCH_RESPONSE,J)}catch(a){return m(this.toAvesError(a,"Validation error occurred during search"))}}async upsertRecord(r){try{let a=e.parse(F,r),n=e.parse(Z,{RqHeader:this.createRqHeader(),MasterRecordDetail:a}),s=oe(D.UPSERT_REQUEST,n);return this.request(this.endpoints.upsert,s,D.UPSERT_RESPONSE,Y)}catch(a){return m(this.toAvesError(a,"Validation error occurred during upsert"))}}};
2
- exports.AvesClient=K;exports.AvesError=l;//# sourceMappingURL=index.cjs.map
1
+ 'use strict';var undici=require('undici'),e=require('valibot'),fastXmlParser=require('fast-xml-parser');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var e__namespace=/*#__PURE__*/_interopNamespace(e);var L={VALIDATION:"validation",API:"api",UNKNOWN:"unknown"},l=class extends Error{constructor(a,n,s,c){super(n);this.kind=a;this.message=n;this.status=s;this.code=c;this.name="AvesError",this.status=s?.toLowerCase(),this.code=this.parseCode(c);}parseCode(a){return typeof a=="string"?Number.parseInt(a):a??0}};function E(t){return new l(L.VALIDATION,t)}function T(t,r,a){return new l(L.API,t,r,a)}function I(t){return new l(L.UNKNOWN,t)}function N(t){return t.map(r=>{let a=r.path&&r.path.length>0?r.path.map(s=>typeof s=="string"||typeof s=="number"?String(s):"key"in s?String(s.key):"").filter(Boolean).join("."):void 0,n=r.message??"Invalid value";return a?`${a}: ${n}`:n}).join("; ")}function H(t){return t instanceof Error&&t.name==="AbortError"}var ce={ignoreAttributes:false,attributeNamePrefix:"@",parseAttributeValue:false,trimValues:true,ignoreNameSpace:true,removeNSPrefix:true,parseTagValue:false},le={ignoreAttributes:false,attributeNamePrefix:"@",suppressEmptyNode:true},pe=new fastXmlParser.XMLParser(ce),ve=new fastXmlParser.XMLBuilder(le);function z(t){try{return ve.build(t)}catch(r){throw new l("validation",`Failed to convert JSON to XML: ${r instanceof Error?r.message:"Unknown error"}`)}}function q(t){try{return pe.parse(t)}catch(r){throw new l("validation",`Failed to convert XML to JSON: ${r instanceof Error?r.message:"Unknown error"}`)}}var C=e__namespace.object({"@HostID":e__namespace.pipe(e__namespace.string(),e__namespace.minLength(6),e__namespace.maxLength(6)),"@Xtoken":e__namespace.string(),"@Interface":e__namespace.literal("WEB"),"@UserName":e__namespace.literal("WEB"),"@LanguageCode":e__namespace.optional(e__namespace.pipe(e__namespace.string(),e__namespace.minLength(2),e__namespace.maxLength(2)))}),me=e__namespace.optional(e__namespace.pipe(e__namespace.string(),e__namespace.transform(t=>t.split(",")))),A=e__namespace.pipe(e__namespace.object({"@Status":e__namespace.union([e__namespace.literal("OK"),e__namespace.literal("ERROR"),e__namespace.literal("WARNING"),e__namespace.literal("TIMEOUT")]),ErrorCode:e__namespace.optional(e__namespace.pipe(e__namespace.union([e__namespace.string(),e__namespace.number()]),e__namespace.transform(t=>Number(t)))),ErrorDescription:e__namespace.optional(e__namespace.string()),Warnings:me}),e__namespace.transform(t=>({status:t["@Status"],errorCode:t.ErrorCode,errorDescription:t.ErrorDescription,warnings:t.Warnings})));function ue(t){return t.charAt(0).toUpperCase()+t.slice(1)}function V(t){return t.charAt(0).toLowerCase()+t.slice(1)}function x(t){return t instanceof Date||t instanceof RegExp||t instanceof Map||t instanceof Set||t instanceof Error}var w=new Set(["recordCode","insertCriteria","currencyCode","creditLimit","c_PaymentType","c_SpecPaymentTypeCode","s_PaymentType","s_SpecPaymentTypeCode","enableElectronicInvoicing","electronicInvoicingType","key","value","minDate","maxDate","hostID","xtoken","interface","userName","status","acceptProfilingPolicies","acceptPrivacyPolicies","acceptNewsletterPolicies"]);function S(t){if(!t||typeof t!="object")return t;if(Array.isArray(t))return t.map(a=>S(a));if(x(t))return t;let r={};for(let[a,n]of Object.entries(t)){let s=w.has(a),c=ue(a),g=s?`@${c}`:c;n&&typeof n=="object"&&!Array.isArray(n)?x(n)?r[g]=n:r[g]=S(n):Array.isArray(n)?r[g]=n.map(p=>typeof p=="object"&&p&&!Array.isArray(p)?S(p):p):r[g]=n;}return r}function f(t){if(!t||typeof t!="object")return t;if(Array.isArray(t))return t.map(a=>f(a));if(x(t))return t;let r={};for(let[a,n]of Object.entries(t))if(a.startsWith("@")){let s=a.slice(1),c=V(s);r[c]=n;}else {let s=V(a);n&&typeof n=="object"&&!Array.isArray(n)?x(n)?r[s]=n:r[s]=f(n):Array.isArray(n)?r[s]=n.map(c=>typeof c=="object"&&c&&!Array.isArray(c)?f(c):c):r[s]=n;}return r}function d(t){return e__namespace.pipe(t,e__namespace.transform(r=>S(r)))}function R(t){return e__namespace.pipe(t,e__namespace.transform(r=>f(r)))}function M(t){let r={};for(let a in t.entries){let n=w.has(a),s=a.charAt(0).toUpperCase()+a.slice(1),c=n?`@${s}`:s;r[c]=t.entries[a];}return e__namespace.object(r)}var X=e__namespace.union([e__namespace.literal("CASH"),e__namespace.literal("BANK"),e__namespace.literal("RID"),e__namespace.literal("RIBA"),e__namespace.literal("SPECIFIC_CODE")]),U=e__namespace.object({currencyCode:e__namespace.optional(e__namespace.string()),creditLimit:e__namespace.optional(e__namespace.string()),c_PaymentType:e__namespace.optional(X),c_SpecPaymentTypeCode:e__namespace.optional(e__namespace.string()),s_PaymentType:e__namespace.optional(X),s_SpecPaymentTypeCode:e__namespace.optional(e__namespace.string()),enableElectronicInvoicing:e__namespace.optional(e__namespace.union([e__namespace.literal("true"),e__namespace.literal("false"),e__namespace.boolean()])),electronicInvoicingType:e__namespace.optional(e__namespace.string())});d(U);var de=M(U),k=e__namespace.object({key:e__namespace.string(),value:e__namespace.string()});d(k);var ge=M(k),O=e__namespace.union([e__namespace.literal(0),e__namespace.literal(1)]),W=e__namespace.union([e__namespace.literal("ENABLED"),e__namespace.literal("DISABLED"),e__namespace.literal("WARNING"),e__namespace.literal("BLACKLISTED")]),Re=e__namespace.union([e__namespace.literal("CUSTOMER"),e__namespace.literal("SUPPLIER"),e__namespace.literal("GENERAL")]),G=e__namespace.union([e__namespace.literal("S"),e__namespace.literal("N"),e__namespace.literal("T"),e__namespace.literal("M")]),F=e__namespace.object({acceptProfilingPolicies:e__namespace.optional(O),acceptPrivacyPolicies:e__namespace.optional(O),acceptNewsletterPolicies:e__namespace.optional(O)});d(F);var he=M(F),Se=e__namespace.object({recordCode:e__namespace.optional(e__namespace.pipe(e__namespace.string(),e__namespace.minLength(6),e__namespace.maxLength(6))),insertCriteria:e__namespace.optional(G),createdDate:e__namespace.optional(e__namespace.string()),recordType:e__namespace.optional(e__namespace.union([Re],"CUSTOMER")),recordStatus:e__namespace.optional(e__namespace.union([W],"ENABLED")),moniker:e__namespace.optional(e__namespace.string()),name:e__namespace.optional(e__namespace.string()),extraInfo:e__namespace.optional(e__namespace.string()),languageCode:e__namespace.pipe(e__namespace.string(),e__namespace.minLength(2),e__namespace.maxLength(2)),address:e__namespace.optional(e__namespace.string()),zipCode:e__namespace.optional(e__namespace.string()),cityName:e__namespace.optional(e__namespace.string()),countyCode:e__namespace.optional(e__namespace.string()),stateCode:e__namespace.optional(e__namespace.string()),categoryCode:e__namespace.optional(e__namespace.string()),firstPhoneNumber:e__namespace.optional(e__namespace.string()),mobilePhoneNumber:e__namespace.optional(e__namespace.string()),email:e__namespace.optional(e__namespace.string()),gender:e__namespace.optional(e__namespace.union([e__namespace.literal("M"),e__namespace.literal("F")])),birthDate:e__namespace.optional(e__namespace.string()),birthCity:e__namespace.optional(e__namespace.string()),birthCounty:e__namespace.optional(e__namespace.string()),fiscalCode:e__namespace.optional(e__namespace.string()),vatCode:e__namespace.optional(e__namespace.string()),accountPolicies:e__namespace.optional(F),financialDetail:e__namespace.optional(U),dynamicFields:e__namespace.optional(k)}),$=d(Se);R($);var h=e__namespace.object({"@RecordCode":e__namespace.optional(e__namespace.pipe(e__namespace.string(),e__namespace.minLength(5),e__namespace.maxLength(6))),"@InsertCriteria":e__namespace.optional(G),CreatedDate:e__namespace.optional(e__namespace.string()),ModifiedDate:e__namespace.optional(e__namespace.string()),RecordType:e__namespace.optional(e__namespace.union([e__namespace.literal("CUSTOMER"),e__namespace.literal("SUPPLIER"),e__namespace.literal("GENERAL")])),LoginType:e__namespace.optional(e__namespace.string()),RecordStatus:e__namespace.optional(W),Moniker:e__namespace.optional(e__namespace.string()),Name:e__namespace.optional(e__namespace.string()),ExtraInfo:e__namespace.optional(e__namespace.string()),LanguageCode:e__namespace.optional(e__namespace.pipe(e__namespace.string(),e__namespace.minLength(1),e__namespace.maxLength(2))),Address:e__namespace.optional(e__namespace.string()),ZipCode:e__namespace.optional(e__namespace.string()),CityName:e__namespace.optional(e__namespace.string()),CountyCode:e__namespace.optional(e__namespace.string()),StateCode:e__namespace.optional(e__namespace.string()),CategoryCode:e__namespace.optional(e__namespace.string()),PromoterCode:e__namespace.optional(e__namespace.string()),FirstPhoneNumber:e__namespace.optional(e__namespace.string()),MobilePhoneNumber:e__namespace.optional(e__namespace.string()),Email:e__namespace.optional(e__namespace.string()),Gender:e__namespace.optional(e__namespace.union([e__namespace.literal("M"),e__namespace.literal("F")])),BirthDate:e__namespace.optional(e__namespace.string()),BirthCity:e__namespace.optional(e__namespace.string()),BirthCounty:e__namespace.optional(e__namespace.string()),EncryptedPassword:e__namespace.optional(e__namespace.union([e__namespace.literal("true"),e__namespace.literal("false"),e__namespace.boolean()])),FiscalCode:e__namespace.optional(e__namespace.string()),VatCode:e__namespace.optional(e__namespace.string()),NewsletterDisabled:e__namespace.optional(e__namespace.union([e__namespace.literal("true"),e__namespace.literal("false"),e__namespace.boolean()])),SupplierRefMasterRecords:e__namespace.optional(e__namespace.any()),AccountPolicies:e__namespace.optional(he),FinancialDetail:e__namespace.optional(de),DynamicFields:e__namespace.optional(e__namespace.array(ge))});var fe=e__namespace.object({minDate:e__namespace.string(),maxDate:e__namespace.string()}),v=e__namespace.optional(e__namespace.pipe(e__namespace.string(),e__namespace.minLength(2),e__namespace.maxLength(2))),ye=e__namespace.object({searchType:e__namespace.literal("CODE"),recordCode:e__namespace.pipe(e__namespace.string(),e__namespace.minLength(5),e__namespace.maxLength(6)),languageCode:v}),Ee=e__namespace.object({searchType:e__namespace.literal("NAME"),name:e__namespace.string(),city:e__namespace.optional(e__namespace.string()),languageCode:v}),Te=e__namespace.object({searchType:e__namespace.literal("VATCODE"),vatCode:e__namespace.string(),phoneNumber:e__namespace.optional(e__namespace.string()),languageCode:v}),Ce=e__namespace.object({searchType:e__namespace.literal("ZONE"),zipCode:e__namespace.string(),countyCode:e__namespace.string(),city:e__namespace.optional(e__namespace.string()),languageCode:v}),Ae=e__namespace.object({searchType:e__namespace.literal("CATEGORY"),categoryCode:e__namespace.string(),languageCode:v}),xe=e__namespace.object({searchType:e__namespace.literal("EMAIL"),email:e__namespace.string(),languageCode:v}),Me=e__namespace.object({searchType:e__namespace.literal("LASTMODDATE"),lastModificationDate:fe,languageCode:v}),be=e__namespace.object({searchType:e__namespace.literal("SEARCH_FIELD"),searchFieldValue:e__namespace.string(),languageCode:v}),De=e__namespace.object({searchType:e__namespace.literal("EXTERNAL_REF_CODE"),searchFieldValue:e__namespace.string(),languageCode:v}),Pe=e__namespace.union([ye,Ee,Te,Ce,Ae,xe,Me,be,De]),Le=t=>{if(!("@RecordCode"in t))return t;let r=t["@RecordCode"];if(!r)return t;let{["@RecordCode"]:a,...n}=t;return {...n,RecordCode:r}},Ie=e__namespace.pipe(d(Pe),e__namespace.transform(t=>Le(t))),Q=e__namespace.pipe(e__namespace.object({RqHeader:C,SearchMasterRecord:Ie}),e__namespace.transform(t=>{let{SearchMasterRecord:r,RqHeader:a,...n}=t;return {RqHeader:a,...r,...n}})),Ne=e__namespace.object({MasterRecordDetail:e__namespace.optional(e__namespace.pipe(e__namespace.union([e__namespace.array(h),h]),e__namespace.transform(t=>{if(t)return Array.isArray(t)?t:[t]})))}),J=R(e__namespace.object({RsStatus:A,MasterRecordList:e__namespace.optional(Ne)}));var Z=e__namespace.object({RqHeader:C,MasterRecordDetail:h}),Y=R(e__namespace.object({RsStatus:A,MasterRecordDetail:e__namespace.optional(h)}));function ee(t){return {success:true,data:t}}function m(t){return {success:false,error:t}}function we(t,r){try{let a=new URL(t),s=(a.pathname.endsWith("/")?a.pathname.slice(0,-1):a.pathname)+r;return new URL(s,a)}catch(a){throw new l("validation",`Invalid baseURL: ${a instanceof Error?a.message:"Invalid URL format"}`)}}function te(t,r){if(!r.startsWith("/"))throw new l("validation",`Invalid endpoint: endpoint must start with '/' but got '${r}'`);let a=t.replace(/\/$/,""),n=we(a,r);if(n.protocol!=="http:"&&n.protocol!=="https:")throw new l("validation",`Invalid protocol: baseURL must use http:// or https:// but got '${n.protocol}'`);return n.toString()}function re(t){let r=new AbortController;if(!t||t<=0)return {signal:r.signal};let a=setTimeout(()=>r.abort(),t);return {signal:r.signal,clear:()=>clearTimeout(a)}}function oe(t,r){return {[t]:r}}var b={SEARCH_REQUEST:"SearchMasterRecordRQ",SEARCH_RESPONSE:"SearchMasterRecordRS",UPSERT_REQUEST:"ManageMasterRecordRQ",UPSERT_RESPONSE:"ManageMasterRecordRS"},B=class{constructor(r){this.options=r;}createRqHeader(){return {"@HostID":this.options.hostID,"@Xtoken":this.options.xtoken,"@Interface":"WEB","@UserName":"WEB",...this.options.languageCode&&{"@LanguageCode":this.options.languageCode}}}createUrl(r){return te(this.options.baseURL,r)}get endpoints(){return {search:"/interop/masterRecords/v2/rest/Search",upsert:"/interop/masterRecords/v2/rest/InsertOrUpdate"}}handleApiStatus(r){let a=r.rsStatus,n=a?.status;return n!=="OK"?m(T(a.errorDescription,n,a.errorCode)):ee(r)}toAvesError(r,a){if(r instanceof l)return r;if(r instanceof e.ValiError){let n=N(r.issues);return E(`Validation error: ${n}`)}return r instanceof Error?I(r.message):I(a)}async request(r,a,n,s){let{signal:c,clear:g}=re(this.options.timeoutMs??3e4);try{let p=this.createUrl(r),ae=z(a),D=await undici.request(p,{method:"POST",headers:{"Content-Type":"application/xml"},body:ae,signal:c}),K=await D.body.text();if(D.statusCode!==200)return m(T(K,"ERROR",D.statusCode));let j=q(K)[n];if(!j)return m(E(`Invalid response structure: missing root element '${n}'`));let P=e.safeParse(s,j);if(!P.success){let ne=N(P.issues);return m(E(`Invalid response format: ${ne}`))}return this.handleApiStatus(P.output)}catch(p){return H(p)?m(T("Request timed out","TIMEOUT")):m(this.toAvesError(p,"Unknown error occurred"))}finally{g?.();}}async search(r){try{let a=e.parse(Q,{RqHeader:this.createRqHeader(),SearchMasterRecord:r}),n=oe(b.SEARCH_REQUEST,a);return this.request(this.endpoints.search,n,b.SEARCH_RESPONSE,J)}catch(a){return m(this.toAvesError(a,"Validation error occurred during search"))}}async upsertRecord(r){try{let a=e.parse($,r),n=e.parse(Z,{RqHeader:this.createRqHeader(),MasterRecordDetail:a}),s=oe(b.UPSERT_REQUEST,n);return this.request(this.endpoints.upsert,s,b.UPSERT_RESPONSE,Y)}catch(a){return m(this.toAvesError(a,"Validation error occurred during upsert"))}}};
2
+ exports.AvesClient=B;exports.AvesError=l;//# sourceMappingURL=index.cjs.map
3
3
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/error.ts","../src/xml-client.ts","../src/schemas/common.ts","../src/utils/case-transform.ts","../src/utils/schema-transform.ts","../src/schemas/master-record.ts","../src/schemas/search.ts","../src/schemas/upsert.ts","../src/utils/result.ts","../src/utils/url.ts","../src/utils/timeout.ts","../src/client.ts"],"names":["ERROR_KINDS","AvesError","kind","message","status","code","validationError","apiError","unknownError","buildDetails","issues","issue","path","segment","text","isAbortError","error","parserOptions","builderOptions","parser","XMLParser","builder","XMLBuilder","jsonToXml","json","xmlToJson","xml","RqHeaderSchema","i","warningsSchema","input","RsStatusSchema","val","camelToPascal","str","pascalToCamel","isSpecialObject","obj","ATTRIBUTE_FIELDS","camelToPascalKeys","item","result","key","value","isAttribute","pascalKey","finalKey","pascalToCamelKeys","strippedKey","camelKey","createApiSchema","inputSchema","d","createResponseSchema","apiSchema","createApiValidationSchema","validationEntries","paymentTypeSchema","e","FinancialDetailInputSchema","FinancialDetailApiValidationSchema","DynamicFieldsInputSchema","DynamicFieldsApiValidationSchema","flagSchema","recordStatusSchema","recordTypeSchema","insertCriteriaSchema","AccountPoliciesInputSchema","AccountPoliciesApiValidationSchema","MasterRecordDetailSchema","MasterRecordDetailApiSchema","MasterRecordDetailApiValidationSchema","LastModificationDateInputSchema","o","languageCodeField","CodeSearchSchema","NameSearchSchema","VatCodeSearchSchema","ZoneSearchSchema","CategorySearchSchema","EmailSearchSchema","LastModDateSearchSchema","SearchFieldSearchSchema","ExternalRefCodeSearchSchema","SearchMasterRecordSchema","transformRecordCode","recordCode","_discard","rest","SearchMasterRecordApiSchema","SearchMasterRecordRequestSchema","searchFields","RqHeader","MasterRecordListApiSchema","SearchMasterRecordResponseSchema","ManageMasterRecordRequestSchema","y","ManageMasterRecordResponseSchema","ok","data","err","buildUrl","baseURL","endpoint","base","combinedPath","parseUrl","normalizedBaseURL","url","createTimeoutSignal","timeoutMs","controller","timeoutId","createRootElement","name","object","XML_ROOT_ELEMENTS","AvesClient","options","output","rsStatus","defaultMessage","ValiError","details","requestBody","responseRootKey","responseSchema","signal","clear","xmlBody","response","r","responseText","rootElement","parseResult","safeParse","params","requestData","parse","record","apiRecord"],"mappings":"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","file":"index.cjs","sourcesContent":["import { BaseIssue } from 'valibot';\n\nexport const ERROR_KINDS = {\n VALIDATION: 'validation',\n API: 'api',\n UNKNOWN: 'unknown',\n} as const;\n\nexport type ErrorKind = (typeof ERROR_KINDS)[keyof typeof ERROR_KINDS];\n\n/**\n * Error thrown by AVES API operations\n */\nexport class AvesError extends Error {\n constructor(\n public readonly kind: ErrorKind,\n public readonly message: string,\n public readonly status?: string,\n public readonly code?: number | string,\n ) {\n super(message);\n this.name = 'AvesError';\n this.status = status?.toLowerCase();\n this.code = this.parseCode(code);\n }\n\n private parseCode(code?: number | string): number {\n if (typeof code === 'string') {\n return Number.parseInt(code);\n }\n return code ?? 0;\n }\n}\n\nexport function validationError(message: string): AvesError {\n return new AvesError(ERROR_KINDS.VALIDATION, message);\n}\n\nexport function apiError(\n message: string,\n status?: string,\n code?: number | string,\n): AvesError {\n return new AvesError(ERROR_KINDS.API, message, status, code);\n}\n\nexport function unknownError(message: string): AvesError {\n return new AvesError(ERROR_KINDS.UNKNOWN, message);\n}\n\nexport function buildDetails(issues: readonly BaseIssue<unknown>[]): string {\n return issues\n .map((issue) => {\n const path =\n issue.path && issue.path.length > 0\n ? issue.path\n .map((segment) =>\n typeof segment === 'string' || typeof segment === 'number'\n ? String(segment)\n : 'key' in segment\n ? String((segment as any).key)\n : '',\n )\n .filter(Boolean)\n .join('.')\n : undefined;\n\n const text = issue.message ?? 'Invalid value';\n return path ? `${path}: ${text}` : text;\n })\n .join('; ');\n}\n\nexport function isAbortError(error: unknown): boolean {\n return error instanceof Error && error.name === 'AbortError';\n}\n","import { XMLParser, XMLBuilder } from 'fast-xml-parser';\nimport { AvesError } from './error.js';\n\nconst parserOptions = {\n ignoreAttributes: false,\n attributeNamePrefix: '@',\n parseAttributeValue: false,\n trimValues: true,\n ignoreNameSpace: true,\n removeNSPrefix: true,\n parseTagValue: false,\n};\n\nconst builderOptions = {\n ignoreAttributes: false,\n attributeNamePrefix: '@',\n suppressEmptyNode: true,\n};\n\nconst parser = new XMLParser(parserOptions);\nconst builder = new XMLBuilder(builderOptions);\n\n/**\n * Converts JSON to XML string\n */\nexport function jsonToXml(json: Record<string, unknown>): string {\n try {\n return builder.build(json);\n } catch (error) {\n throw new AvesError(\n 'validation',\n `Failed to convert JSON to XML: ${error instanceof Error ? error.message : 'Unknown error'}`,\n );\n }\n}\n\n/**\n * Converts XML string to JSON object\n * Attributes are parsed with @ prefix\n */\nexport function xmlToJson(xml: string): Record<string, unknown> {\n try {\n return parser.parse(xml);\n } catch (error) {\n throw new AvesError(\n 'validation',\n `Failed to convert XML to JSON: ${error instanceof Error ? error.message : 'Unknown error'}`,\n );\n }\n}\n","import * as v from 'valibot';\n\n/**\n * Request header schema with authentication credentials\n */\nexport const RqHeaderSchema = v.object({\n '@HostID': v.pipe(v.string(), v.minLength(6), v.maxLength(6)),\n '@Xtoken': v.string(),\n '@Interface': v.literal('WEB'),\n '@UserName': v.literal('WEB'),\n '@LanguageCode': v.optional(\n v.pipe(v.string(), v.minLength(2), v.maxLength(2)),\n ),\n});\n\nconst warningsSchema = v.optional(\n v.pipe(\n v.string(),\n v.transform((input) => input.split(',')),\n ),\n);\n\n/**\n * Response status schema indicating success, error, or warning\n */\nexport const RsStatusSchema = v.pipe(\n v.object({\n '@Status': v.union([\n v.literal('OK'),\n v.literal('ERROR'),\n v.literal('WARNING'),\n v.literal('TIMEOUT'),\n ]),\n ErrorCode: v.optional(\n v.pipe(\n v.union([v.string(), v.number()]),\n v.transform((val) => Number(val)),\n ),\n ),\n ErrorDescription: v.optional(v.string()),\n Warnings: warningsSchema,\n }),\n v.transform((input) => {\n return {\n status: input['@Status'],\n errorCode: input.ErrorCode,\n errorDescription: input.ErrorDescription,\n warnings: input.Warnings,\n };\n }),\n);\n","type CamelFromDelimiter<S extends string> = S extends `${infer H}_${infer T}`\n ? `${H}${Capitalize<CamelFromDelimiter<T>>}`\n : S extends `${infer H}-${infer T}`\n ? `${H}${Capitalize<CamelFromDelimiter<T>>}`\n : S;\n\ntype ToCamelCase<S extends string> =\n CamelFromDelimiter<S> extends `${infer F}${infer R}`\n ? `${Lowercase<F>}${R}`\n : CamelFromDelimiter<S>;\n\ntype PascalFromDelimiter<S extends string> = S extends `${infer H}_${infer T}`\n ? `${Capitalize<H>}${Capitalize<PascalFromDelimiter<T>>}`\n : S extends `${infer H}-${infer T}`\n ? `${Capitalize<H>}${Capitalize<PascalFromDelimiter<T>>}`\n : S;\n\ntype ToPascalCase<S extends string> =\n PascalFromDelimiter<S> extends `${infer F}${infer R}`\n ? `${Capitalize<F>}${R}`\n : Capitalize<PascalFromDelimiter<S>>;\n\nexport type Camelize<T> = T extends readonly (infer U)[]\n ? Camelize<U>[]\n : T extends object\n ? {\n [K in keyof T as K extends `@${infer Rest}`\n ? ToCamelCase<Rest> // Strip @ prefix and camelCase the rest\n : ToCamelCase<K & string>]: Camelize<T[K]>;\n }\n : T;\n\nexport type Pascalize<T> = T extends readonly (infer U)[]\n ? Pascalize<U>[]\n : T extends object\n ? {\n [K in keyof T as K extends `@${infer Rest}`\n ? ToPascalCase<Rest> // Strip @ prefix and PascalCase the rest\n : ToPascalCase<K & string>]: Pascalize<T[K]>;\n }\n : T;\n\nfunction camelToPascal(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nfunction pascalToCamel(str: string): string {\n return str.charAt(0).toLowerCase() + str.slice(1);\n}\n\n/**\n * Checks if an object is a special built-in type that should not be transformed\n */\nfunction isSpecialObject(obj: unknown): boolean {\n return (\n obj instanceof Date ||\n obj instanceof RegExp ||\n obj instanceof Map ||\n obj instanceof Set ||\n obj instanceof Error\n );\n}\n\nexport const ATTRIBUTE_FIELDS = new Set([\n 'recordCode',\n 'insertCriteria',\n 'currencyCode',\n 'creditLimit',\n 'c_PaymentType',\n 'c_SpecPaymentTypeCode',\n 's_PaymentType',\n 's_SpecPaymentTypeCode',\n 'enableElectronicInvoicing',\n 'electronicInvoicingType',\n 'key',\n 'value',\n 'minDate',\n 'maxDate',\n 'hostID',\n 'xtoken',\n 'interface',\n 'userName',\n 'status',\n 'acceptProfilingPolicies',\n 'acceptPrivacyPolicies',\n 'acceptNewsletterPolicies',\n]);\n\n/**\n * Transforms object keys from camelCase to PascalCase\n * Adds @ prefix to fields in ATTRIBUTE_FIELDS for XML attributes\n */\nexport function camelToPascalKeys<T>(obj: T): Pascalize<T> {\n if (!obj || typeof obj !== 'object') {\n return obj as Pascalize<T>;\n }\n\n if (Array.isArray(obj)) {\n return obj.map((item) => camelToPascalKeys(item)) as Pascalize<T>;\n }\n\n if (isSpecialObject(obj)) {\n return obj as Pascalize<T>;\n }\n\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj)) {\n const isAttribute = ATTRIBUTE_FIELDS.has(key);\n const pascalKey = camelToPascal(key);\n const finalKey = isAttribute ? `@${pascalKey}` : pascalKey;\n\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n if (isSpecialObject(value)) {\n result[finalKey] = value;\n } else {\n result[finalKey] = camelToPascalKeys(value as Record<string, unknown>);\n }\n } else if (Array.isArray(value)) {\n result[finalKey] = value.map((item) =>\n typeof item === 'object' && item && !Array.isArray(item)\n ? camelToPascalKeys(item as Record<string, unknown>)\n : item,\n );\n } else {\n result[finalKey] = value;\n }\n }\n return result as Pascalize<T>;\n}\n\n/**\n * Transforms object keys from PascalCase to camelCase\n * Strips @ prefix from XML attributes\n */\nexport function pascalToCamelKeys<T>(obj: T): Camelize<T> {\n if (!obj || typeof obj !== 'object') {\n return obj as Camelize<T>;\n }\n\n if (Array.isArray(obj)) {\n return obj.map((item) => pascalToCamelKeys(item)) as Camelize<T>;\n }\n\n if (isSpecialObject(obj)) {\n return obj as Camelize<T>;\n }\n\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj)) {\n if (key.startsWith('@')) {\n const strippedKey = key.slice(1);\n const camelKey = pascalToCamel(strippedKey);\n result[camelKey] = value;\n } else {\n const camelKey = pascalToCamel(key);\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n if (isSpecialObject(value)) {\n result[camelKey] = value;\n } else {\n result[camelKey] = pascalToCamelKeys(\n value as Record<string, unknown>,\n );\n }\n } else if (Array.isArray(value)) {\n result[camelKey] = value.map((item) =>\n typeof item === 'object' && item && !Array.isArray(item)\n ? pascalToCamelKeys(item as Record<string, unknown>)\n : item,\n );\n } else {\n result[camelKey] = value;\n }\n }\n }\n return result as Camelize<T>;\n}\n","import * as v from 'valibot';\nimport type { BaseSchema, ObjectEntries } from 'valibot';\nimport {\n camelToPascalKeys,\n pascalToCamelKeys,\n ATTRIBUTE_FIELDS,\n} from './case-transform.js';\n\n/**\n * Creates a schema that transforms camelCase input to PascalCase for API requests\n */\nexport function createApiSchema<TInput extends BaseSchema<any, any, any>>(\n inputSchema: TInput,\n) {\n return v.pipe(\n inputSchema,\n v.transform((input) => camelToPascalKeys(input)),\n );\n}\n\n/**\n * Creates a schema that transforms PascalCase API responses to camelCase\n */\nexport function createResponseSchema<TApi extends BaseSchema<any, any, any>>(\n apiSchema: TApi,\n) {\n return v.pipe(\n apiSchema,\n v.transform((input) => pascalToCamelKeys(input)),\n );\n}\n\n/**\n * Creates a validation schema for already-transformed PascalCase data with @ attributes\n * Used for nested objects like AccountPolicies, FinancialDetail, DynamicFields\n * Takes the same input schema used in createApiSchema and generates the validation schema\n * by directly using the ATTRIBUTE_FIELDS logic to determine which fields become attributes\n */\nexport function createApiValidationSchema<TEntries extends ObjectEntries>(\n inputSchema: v.ObjectSchema<TEntries, any>,\n) {\n const validationEntries: Record<string, any> = {};\n\n // Build validation schema based on ATTRIBUTE_FIELDS\n for (const key in inputSchema.entries) {\n const isAttribute = ATTRIBUTE_FIELDS.has(key);\n const pascalKey = key.charAt(0).toUpperCase() + key.slice(1);\n const finalKey = isAttribute ? `@${pascalKey}` : pascalKey;\n\n validationEntries[finalKey] = inputSchema.entries[key];\n }\n\n return v.object(validationEntries as TEntries);\n}\n","import * as v from 'valibot';\nimport {\n createApiSchema,\n createResponseSchema,\n createApiValidationSchema,\n} from '../utils/schema-transform.js';\n\nconst paymentTypeSchema = v.union([\n v.literal('CASH'),\n v.literal('BANK'),\n v.literal('RID'),\n v.literal('RIBA'),\n v.literal('SPECIFIC_CODE'),\n]);\n\nconst FinancialDetailInputSchema = v.object({\n currencyCode: v.optional(v.string()),\n creditLimit: v.optional(v.string()),\n c_PaymentType: v.optional(paymentTypeSchema),\n c_SpecPaymentTypeCode: v.optional(v.string()),\n s_PaymentType: v.optional(paymentTypeSchema),\n s_SpecPaymentTypeCode: v.optional(v.string()),\n enableElectronicInvoicing: v.optional(v.union([v.literal('true'), v.literal('false'), v.boolean()])),\n electronicInvoicingType: v.optional(v.string()),\n});\n\n/**\n * Financial detail schema for API requests (transforms to PascalCase)\n */\nexport const FinancialDetailSchema = createApiSchema(\n FinancialDetailInputSchema,\n);\n\n/**\n * Financial detail validation schema (already transformed PascalCase with @ attributes)\n */\nexport const FinancialDetailApiValidationSchema = createApiValidationSchema(\n FinancialDetailInputSchema,\n);\n\nconst DynamicFieldsInputSchema = v.object({\n key: v.string(),\n value: v.string(),\n});\n\n/**\n * Dynamic fields schema for API requests (transforms to PascalCase)\n */\nexport const DynamicFieldsSchema = createApiSchema(DynamicFieldsInputSchema);\n\n/**\n * Dynamic fields validation schema (already transformed PascalCase with @ attributes)\n */\nexport const DynamicFieldsApiValidationSchema = createApiValidationSchema(\n DynamicFieldsInputSchema,\n);\n\nconst flagSchema = v.union([v.literal(0), v.literal(1)]);\n\nconst recordStatusSchema = v.union([\n v.literal('ENABLED'),\n v.literal('DISABLED'),\n v.literal('WARNING'),\n v.literal('BLACKLISTED'),\n]);\n\nconst recordTypeSchema = v.union([\n v.literal('CUSTOMER'),\n v.literal('SUPPLIER'),\n v.literal('GENERAL'),\n]);\n\nconst insertCriteriaSchema = v.union([\n v.literal('S'),\n v.literal('N'),\n v.literal('T'),\n v.literal('M'),\n]);\n\nconst AccountPoliciesInputSchema = v.object({\n acceptProfilingPolicies: v.optional(flagSchema),\n acceptPrivacyPolicies: v.optional(flagSchema),\n acceptNewsletterPolicies: v.optional(flagSchema),\n});\n\n/**\n * Account policies schema for API requests (transforms to PascalCase with @ attributes)\n */\nexport const AccountPoliciesSchema = createApiSchema(\n AccountPoliciesInputSchema,\n);\n\n/**\n * Account policies validation schema (already transformed PascalCase with @ attributes)\n */\nexport const AccountPoliciesApiValidationSchema = createApiValidationSchema(\n AccountPoliciesInputSchema,\n);\n\n/**\n * Master record detail input schema (camelCase)\n */\nexport const MasterRecordDetailSchema = v.object({\n recordCode: v.optional(v.pipe(v.string(), v.minLength(6), v.maxLength(6))),\n insertCriteria: v.optional(insertCriteriaSchema),\n createdDate: v.optional(v.string()),\n recordType: v.optional(v.union([recordTypeSchema], 'CUSTOMER')),\n recordStatus: v.optional(v.union([recordStatusSchema], 'ENABLED')),\n moniker: v.optional(v.string()),\n name: v.optional(v.string()),\n extraInfo: v.optional(v.string()),\n languageCode: v.pipe(v.string(), v.minLength(2), v.maxLength(2)),\n address: v.optional(v.string()),\n zipCode: v.optional(v.string()),\n cityName: v.optional(v.string()),\n countyCode: v.optional(v.string()),\n stateCode: v.optional(v.string()),\n categoryCode: v.optional(v.string()),\n firstPhoneNumber: v.optional(v.string()),\n mobilePhoneNumber: v.optional(v.string()),\n email: v.optional(v.string()),\n gender: v.optional(v.string()),\n birthDate: v.optional(v.string()),\n fiscalCode: v.optional(v.string()),\n vatCode: v.optional(v.string()),\n accountPolicies: v.optional(AccountPoliciesInputSchema),\n financialDetail: v.optional(FinancialDetailInputSchema),\n dynamicFields: v.optional(DynamicFieldsInputSchema),\n});\n\n/**\n * Master record detail schema for API requests (transforms to PascalCase)\n */\nexport const MasterRecordDetailApiSchema = createApiSchema(\n MasterRecordDetailSchema,\n);\n\n/**\n * Master record detail response schema (transforms to camelCase)\n */\nexport const MasterRecordDetailResponseSchema = createResponseSchema(\n MasterRecordDetailApiSchema,\n);\n\n/**\n * Master record detail API validation schema (PascalCase with @ attributes)\n * Used for both search responses and upsert requests\n * All fields are optional as responses may not contain all fields\n */\nexport const MasterRecordDetailApiValidationSchema = v.object({\n '@RecordCode': v.optional(v.pipe(v.string(), v.minLength(5), v.maxLength(6))),\n '@InsertCriteria': v.optional(insertCriteriaSchema),\n CreatedDate: v.optional(v.string()),\n ModifiedDate: v.optional(v.string()),\n RecordType: v.optional(\n v.union([\n v.literal('CUSTOMER'),\n v.literal('SUPPLIER'),\n v.literal('GENERAL'),\n ]),\n ),\n LoginType: v.optional(v.string()),\n RecordStatus: v.optional(recordStatusSchema),\n Moniker: v.optional(v.string()),\n Name: v.optional(v.string()),\n ExtraInfo: v.optional(v.string()),\n LanguageCode: v.optional(v.pipe(v.string(), v.minLength(1), v.maxLength(2))),\n Address: v.optional(v.string()),\n ZipCode: v.optional(v.string()),\n CityName: v.optional(v.string()),\n CountyCode: v.optional(v.string()),\n StateCode: v.optional(v.string()),\n CategoryCode: v.optional(v.string()),\n PromoterCode: v.optional(v.string()),\n FirstPhoneNumber: v.optional(v.string()),\n MobilePhoneNumber: v.optional(v.string()),\n Email: v.optional(v.string()),\n Gender: v.optional(v.string()),\n BirthDate: v.optional(v.string()),\n EncryptedPassword: v.optional(v.union([v.literal('true'), v.literal('false'), v.boolean()])),\n FiscalCode: v.optional(v.string()),\n VatCode: v.optional(v.string()),\n NewsletterDisabled: v.optional(v.union([v.literal('true'), v.literal('false'), v.boolean()])),\n SupplierRefMasterRecords: v.optional(v.any()),\n AccountPolicies: v.optional(AccountPoliciesApiValidationSchema),\n FinancialDetail: v.optional(FinancialDetailApiValidationSchema),\n DynamicFields: v.optional(v.array(DynamicFieldsApiValidationSchema)),\n});\n","import * as v from 'valibot';\nimport { RqHeaderSchema, RsStatusSchema } from './common.js';\nimport { MasterRecordDetailApiValidationSchema } from './master-record.js';\nimport {\n createApiSchema,\n createResponseSchema,\n} from '../utils/schema-transform.js';\n\nconst LastModificationDateInputSchema = v.object({\n minDate: v.string(),\n maxDate: v.string(),\n});\n\nconst languageCodeField = v.optional(\n v.pipe(v.string(), v.minLength(2), v.maxLength(2)),\n);\n\n/**\n * Search by CODE - requires recordCode\n */\nconst CodeSearchSchema = v.object({\n searchType: v.literal('CODE'),\n recordCode: v.pipe(v.string(), v.minLength(5), v.maxLength(6)),\n languageCode: languageCodeField,\n});\n\n/**\n * Search by NAME - requires name, optionally city\n */\nconst NameSearchSchema = v.object({\n searchType: v.literal('NAME'),\n name: v.string(),\n city: v.optional(v.string()),\n languageCode: languageCodeField,\n});\n\n/**\n * Search by VATCODE - requires vatCode, optionally phoneNumber\n */\nconst VatCodeSearchSchema = v.object({\n searchType: v.literal('VATCODE'),\n vatCode: v.string(),\n phoneNumber: v.optional(v.string()),\n languageCode: languageCodeField,\n});\n\n/**\n * Search by ZONE - requires zipCode and countyCode, optionally city\n */\nconst ZoneSearchSchema = v.object({\n searchType: v.literal('ZONE'),\n zipCode: v.string(),\n countyCode: v.string(),\n city: v.optional(v.string()),\n languageCode: languageCodeField,\n});\n\n/**\n * Search by CATEGORY - requires categoryCode\n */\nconst CategorySearchSchema = v.object({\n searchType: v.literal('CATEGORY'),\n categoryCode: v.string(),\n languageCode: languageCodeField,\n});\n\n/**\n * Search by EMAIL - requires email\n */\nconst EmailSearchSchema = v.object({\n searchType: v.literal('EMAIL'),\n email: v.string(),\n languageCode: languageCodeField,\n});\n\n/**\n * Search by LASTMODDATE - requires lastModificationDate\n */\nconst LastModDateSearchSchema = v.object({\n searchType: v.literal('LASTMODDATE'),\n lastModificationDate: LastModificationDateInputSchema,\n languageCode: languageCodeField,\n});\n\n/**\n * Search by SEARCH FIELD - requires searchFieldValue\n */\nconst SearchFieldSearchSchema = v.object({\n searchType: v.literal('SEARCH_FIELD'),\n searchFieldValue: v.string(),\n languageCode: languageCodeField,\n});\n\n/**\n * Search by EXTERNAL_REF_CODE - requires searchFieldValue\n */\nconst ExternalRefCodeSearchSchema = v.object({\n searchType: v.literal('EXTERNAL_REF_CODE'),\n searchFieldValue: v.string(),\n languageCode: languageCodeField,\n});\n\n/**\n * Search master record input schema (camelCase)\n * Conditional fields based on searchType\n */\nexport const SearchMasterRecordSchema = v.union([\n CodeSearchSchema,\n NameSearchSchema,\n VatCodeSearchSchema,\n ZoneSearchSchema,\n CategorySearchSchema,\n EmailSearchSchema,\n LastModDateSearchSchema,\n SearchFieldSearchSchema,\n ExternalRefCodeSearchSchema,\n]);\n\nconst transformRecordCode = (input: Record<string, unknown>) => {\n if (!('@RecordCode' in input)) return input;\n const recordCode = input['@RecordCode'];\n if (!recordCode) return input;\n const { ['@RecordCode']: _discard, ...rest } = input;\n return {\n ...rest,\n RecordCode: recordCode,\n };\n};\n\n/**\n * Search master record schema for API requests (transforms to PascalCase)\n */\nexport const SearchMasterRecordApiSchema = v.pipe(\n createApiSchema(SearchMasterRecordSchema),\n v.transform((input) => transformRecordCode(input)),\n);\n\n/**\n * Complete search request schema with header\n * Flattens SearchMasterRecord fields to root level\n */\nexport const SearchMasterRecordRequestSchema = v.pipe(\n v.object({\n RqHeader: RqHeaderSchema,\n SearchMasterRecord: SearchMasterRecordApiSchema,\n }),\n v.transform((input) => {\n const { SearchMasterRecord: searchFields, RqHeader, ...rest } = input;\n return {\n RqHeader,\n ...searchFields,\n ...rest,\n };\n }),\n);\n\nconst MasterRecordListApiSchema = v.object({\n MasterRecordDetail: v.optional(\n v.pipe(\n v.union([\n v.array(MasterRecordDetailApiValidationSchema),\n MasterRecordDetailApiValidationSchema,\n ]),\n v.transform((input) => {\n if (!input) return undefined;\n return Array.isArray(input) ? input : [input];\n }),\n ),\n ),\n});\n\n/**\n * Search master record response schema (transforms to camelCase)\n */\nexport const SearchMasterRecordResponseSchema = createResponseSchema(\n v.object({\n RsStatus: RsStatusSchema,\n MasterRecordList: v.optional(MasterRecordListApiSchema),\n }),\n);\n","import * as v from 'valibot';\nimport { RqHeaderSchema, RsStatusSchema } from './common.js';\nimport { MasterRecordDetailApiValidationSchema } from './master-record.js';\nimport { createResponseSchema } from '../utils/schema-transform.js';\n\n/**\n * Complete upsert request schema with header and required InsertCriteria\n */\nexport const ManageMasterRecordRequestSchema = v.object({\n RqHeader: RqHeaderSchema,\n MasterRecordDetail: MasterRecordDetailApiValidationSchema,\n});\n\n/**\n * Upsert master record response schema (transforms to camelCase)\n */\nexport const ManageMasterRecordResponseSchema = createResponseSchema(\n v.object({\n RsStatus: RsStatusSchema,\n MasterRecordDetail: v.optional(MasterRecordDetailApiValidationSchema),\n }),\n);\n","/**\n * Result type for functional error handling\n */\nexport type Result<T, E = Error> =\n | { success: true; data: T }\n | { success: false; error: E };\n\n/**\n * Creates a successful result\n */\nexport function ok<T>(data: T): Result<T, never> {\n return { success: true, data };\n}\n\n/**\n * Creates an error result\n */\nexport function err<E>(error: E): Result<never, E> {\n return { success: false, error };\n}\n","import { AvesError } from '../error.js';\n\nfunction buildUrl(baseURL: string, endpoint: string): URL {\n try {\n const base = new URL(baseURL);\n const basePath = base.pathname.endsWith('/')\n ? base.pathname.slice(0, -1)\n : base.pathname;\n const combinedPath = basePath + endpoint;\n\n return new URL(combinedPath, base);\n } catch (error) {\n throw new AvesError(\n 'validation',\n `Invalid baseURL: ${error instanceof Error ? error.message : 'Invalid URL format'}`,\n );\n }\n}\n\n/**\n * Validates and combines baseURL with endpoint\n * @param baseURL - Base URL (must be http:// or https://)\n * @param endpoint - Endpoint path (must start with /)\n * @returns Combined URL string\n * @throws AvesError if URL is invalid or protocol is not http/https\n */\nexport function parseUrl(baseURL: string, endpoint: string): string {\n if (!endpoint.startsWith('/')) {\n throw new AvesError(\n 'validation',\n `Invalid endpoint: endpoint must start with '/' but got '${endpoint}'`,\n );\n }\n\n const normalizedBaseURL = baseURL.replace(/\\/$/, '');\n\n const url = buildUrl(normalizedBaseURL, endpoint);\n\n if (url.protocol !== 'http:' && url.protocol !== 'https:') {\n throw new AvesError(\n 'validation',\n `Invalid protocol: baseURL must use http:// or https:// but got '${url.protocol}'`,\n );\n }\n\n return url.toString();\n}\n","export interface TimeoutController {\n signal: AbortSignal;\n clear?: () => void;\n}\n\n/**\n * Create an AbortSignal that will automatically abort after `timeoutMs`.\n * If `timeoutMs` is not provided or <= 0, no automatic abort is scheduled.\n */\nexport function createTimeoutSignal(timeoutMs?: number): TimeoutController {\n const controller = new AbortController();\n\n if (!timeoutMs || timeoutMs <= 0) {\n return { signal: controller.signal };\n }\n\n const timeoutId = setTimeout(() => controller.abort(), timeoutMs);\n\n return {\n signal: controller.signal,\n clear: () => clearTimeout(timeoutId),\n };\n}\n","import { request as r } from 'undici';\nimport { BaseIssue, BaseSchema, parse, safeParse, ValiError } from 'valibot';\nimport { jsonToXml, xmlToJson } from './xml-client.js';\nimport {\n SearchMasterRecordRequestSchema,\n SearchMasterRecordResponseSchema,\n} from './schemas/search.js';\nimport {\n ManageMasterRecordRequestSchema,\n ManageMasterRecordResponseSchema,\n} from './schemas/upsert.js';\nimport type {\n AvesClientOptions,\n ManageMasterRecordRS,\n MasterRecordDetail,\n RsStatus,\n SearchMasterRecord,\n SearchMasterRecordRS,\n} from './types.js';\nimport { MasterRecordDetailApiSchema } from './schemas/master-record.js';\nimport type { Result } from './utils/result.js';\nimport { err, ok } from './utils/result.js';\nimport {\n apiError,\n AvesError,\n buildDetails,\n isAbortError,\n unknownError,\n validationError,\n} from './error.js';\nimport { parseUrl } from './utils/url.js';\nimport { createTimeoutSignal } from './utils/timeout.js';\n\nfunction createRootElement<T>(name: XMLRootElementValues, object: T) {\n return {\n [name]: object,\n };\n}\n\nconst XML_ROOT_ELEMENTS = {\n SEARCH_REQUEST: 'SearchMasterRecordRQ',\n SEARCH_RESPONSE: 'SearchMasterRecordRS',\n UPSERT_REQUEST: 'ManageMasterRecordRQ',\n UPSERT_RESPONSE: 'ManageMasterRecordRS',\n} as const;\n\ntype XMLRootElementValues =\n (typeof XML_ROOT_ELEMENTS)[keyof typeof XML_ROOT_ELEMENTS];\n\n/**\n * AVES XML REST API client\n */\nexport class AvesClient {\n /**\n * @param options - Client configuration options\n * @param options.baseURL - Base URL of the AVES API\n * @param options.hostID - 6-digit identification code\n * @param options.xtoken - Authentication token\n * @param options.languageCode - Optional 2-digit language code\n * @param options.timeoutMs - Optional request timeout in milliseconds\n */\n constructor(private readonly options: AvesClientOptions) {}\n\n private createRqHeader() {\n return {\n '@HostID': this.options.hostID,\n '@Xtoken': this.options.xtoken,\n '@Interface': 'WEB' as const,\n '@UserName': 'WEB' as const,\n ...(this.options.languageCode && {\n '@LanguageCode': this.options.languageCode,\n }),\n };\n }\n\n private createUrl(endpoint: string) {\n return parseUrl(this.options.baseURL, endpoint);\n }\n\n private get endpoints() {\n return {\n search: '/interop/masterRecords/v2/rest/Search',\n upsert: '/interop/masterRecords/v2/rest/InsertOrUpdate',\n } as const;\n }\n\n private handleApiStatus<T extends { rsStatus: RsStatus }>(\n output: T,\n ): Result<T, AvesError> {\n const rsStatus = output.rsStatus;\n const status = rsStatus?.status;\n\n if (status !== 'OK') {\n return err(\n apiError(\n rsStatus.errorDescription as string,\n status,\n rsStatus.errorCode,\n ),\n );\n }\n\n return ok(output);\n }\n\n private toAvesError(error: unknown, defaultMessage: string): AvesError {\n if (error instanceof AvesError) {\n return error;\n }\n if (error instanceof ValiError) {\n const details = buildDetails(error.issues);\n return validationError(`Validation error: ${details}`);\n }\n if (error instanceof Error) {\n return unknownError(error.message);\n }\n return unknownError(defaultMessage);\n }\n\n private async request<T extends { rsStatus: RsStatus }>(\n endpoint: string,\n requestBody: Record<string, unknown>,\n responseRootKey: string,\n responseSchema: BaseSchema<unknown, T, BaseIssue<unknown>>,\n ): Promise<Result<T, AvesError>> {\n const { signal, clear } = createTimeoutSignal(\n this.options.timeoutMs ?? 30_000,\n );\n\n try {\n const url = this.createUrl(endpoint);\n const xmlBody = jsonToXml(requestBody);\n\n const response = await r(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/xml',\n },\n body: xmlBody,\n signal,\n });\n\n const responseText = await response.body.text();\n\n if (response.statusCode !== 200) {\n return err(apiError(responseText, 'ERROR', response.statusCode));\n }\n\n const jsonResponse = xmlToJson(responseText);\n const rootElement = jsonResponse[responseRootKey];\n\n if (!rootElement) {\n return err(\n validationError(\n `Invalid response structure: missing root element '${responseRootKey}'`,\n ),\n );\n }\n\n const parseResult = safeParse(responseSchema, rootElement);\n if (!parseResult.success) {\n const details = buildDetails(parseResult.issues);\n return err(validationError(`Invalid response format: ${details}`));\n }\n return this.handleApiStatus(parseResult.output);\n } catch (error) {\n if (isAbortError(error)) {\n return err(apiError('Request timed out', 'TIMEOUT'));\n }\n return err(this.toAvesError(error, 'Unknown error occurred'));\n } finally {\n clear?.();\n }\n }\n\n /**\n * Search for master records\n * @returns Result containing list of matching master records in camelCase or error\n */\n async search(\n params: SearchMasterRecord,\n ): Promise<Result<SearchMasterRecordRS, AvesError>> {\n try {\n const requestData = parse(SearchMasterRecordRequestSchema, {\n RqHeader: this.createRqHeader(),\n SearchMasterRecord: params,\n });\n\n const requestBody = createRootElement(\n XML_ROOT_ELEMENTS.SEARCH_REQUEST,\n requestData,\n );\n\n return this.request<SearchMasterRecordRS>(\n this.endpoints.search,\n requestBody,\n XML_ROOT_ELEMENTS.SEARCH_RESPONSE,\n SearchMasterRecordResponseSchema,\n );\n } catch (error) {\n return err(\n this.toAvesError(error, 'Validation error occurred during search'),\n );\n }\n }\n\n /**\n * Insert or update a master record\n * @param record - Master record data in camelCase\n * @returns Result containing response with customer record code in camelCase or error\n */\n async upsertRecord(\n record: MasterRecordDetail,\n ): Promise<Result<ManageMasterRecordRS, AvesError>> {\n try {\n const apiRecord = parse(MasterRecordDetailApiSchema, record);\n\n const requestData = parse(ManageMasterRecordRequestSchema, {\n RqHeader: this.createRqHeader(),\n MasterRecordDetail: apiRecord,\n });\n\n const requestBody = createRootElement(\n XML_ROOT_ELEMENTS.UPSERT_REQUEST,\n requestData,\n );\n\n return this.request<ManageMasterRecordRS>(\n this.endpoints.upsert,\n requestBody,\n XML_ROOT_ELEMENTS.UPSERT_RESPONSE,\n ManageMasterRecordResponseSchema,\n );\n } catch (error) {\n return err(\n this.toAvesError(error, 'Validation error occurred during upsert'),\n );\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/error.ts","../src/xml-client.ts","../src/schemas/common.ts","../src/utils/case-transform.ts","../src/utils/schema-transform.ts","../src/schemas/master-record.ts","../src/schemas/search.ts","../src/schemas/upsert.ts","../src/utils/result.ts","../src/utils/url.ts","../src/utils/timeout.ts","../src/client.ts"],"names":["ERROR_KINDS","AvesError","kind","message","status","code","validationError","apiError","unknownError","buildDetails","issues","issue","path","segment","text","isAbortError","error","parserOptions","builderOptions","parser","XMLParser","builder","XMLBuilder","jsonToXml","json","xmlToJson","xml","RqHeaderSchema","i","warningsSchema","input","RsStatusSchema","val","camelToPascal","str","pascalToCamel","isSpecialObject","obj","ATTRIBUTE_FIELDS","camelToPascalKeys","item","result","key","value","isAttribute","pascalKey","finalKey","pascalToCamelKeys","strippedKey","camelKey","createApiSchema","inputSchema","u","createResponseSchema","apiSchema","createApiValidationSchema","validationEntries","paymentTypeSchema","e","FinancialDetailInputSchema","FinancialDetailApiValidationSchema","DynamicFieldsInputSchema","DynamicFieldsApiValidationSchema","flagSchema","recordStatusSchema","recordTypeSchema","insertCriteriaSchema","AccountPoliciesInputSchema","AccountPoliciesApiValidationSchema","MasterRecordDetailSchema","MasterRecordDetailApiSchema","MasterRecordDetailApiValidationSchema","LastModificationDateInputSchema","o","languageCodeField","CodeSearchSchema","NameSearchSchema","VatCodeSearchSchema","ZoneSearchSchema","CategorySearchSchema","EmailSearchSchema","LastModDateSearchSchema","SearchFieldSearchSchema","ExternalRefCodeSearchSchema","SearchMasterRecordSchema","transformRecordCode","recordCode","_discard","rest","SearchMasterRecordApiSchema","SearchMasterRecordRequestSchema","searchFields","RqHeader","MasterRecordListApiSchema","SearchMasterRecordResponseSchema","ManageMasterRecordRequestSchema","y","ManageMasterRecordResponseSchema","ok","data","err","buildUrl","baseURL","endpoint","base","combinedPath","parseUrl","normalizedBaseURL","url","createTimeoutSignal","timeoutMs","controller","timeoutId","createRootElement","name","object","XML_ROOT_ELEMENTS","AvesClient","options","output","rsStatus","defaultMessage","ValiError","details","requestBody","responseRootKey","responseSchema","signal","clear","xmlBody","response","r","responseText","rootElement","parseResult","safeParse","params","requestData","parse","record","apiRecord"],"mappings":"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","file":"index.cjs","sourcesContent":["import { BaseIssue } from 'valibot';\n\nexport const ERROR_KINDS = {\n VALIDATION: 'validation',\n API: 'api',\n UNKNOWN: 'unknown',\n} as const;\n\nexport type ErrorKind = (typeof ERROR_KINDS)[keyof typeof ERROR_KINDS];\n\n/**\n * Error thrown by AVES API operations\n */\nexport class AvesError extends Error {\n constructor(\n public readonly kind: ErrorKind,\n public readonly message: string,\n public readonly status?: string,\n public readonly code?: number | string,\n ) {\n super(message);\n this.name = 'AvesError';\n this.status = status?.toLowerCase();\n this.code = this.parseCode(code);\n }\n\n private parseCode(code?: number | string): number {\n if (typeof code === 'string') {\n return Number.parseInt(code);\n }\n return code ?? 0;\n }\n}\n\nexport function validationError(message: string): AvesError {\n return new AvesError(ERROR_KINDS.VALIDATION, message);\n}\n\nexport function apiError(\n message: string,\n status?: string,\n code?: number | string,\n): AvesError {\n return new AvesError(ERROR_KINDS.API, message, status, code);\n}\n\nexport function unknownError(message: string): AvesError {\n return new AvesError(ERROR_KINDS.UNKNOWN, message);\n}\n\nexport function buildDetails(issues: readonly BaseIssue<unknown>[]): string {\n return issues\n .map((issue) => {\n const path =\n issue.path && issue.path.length > 0\n ? issue.path\n .map((segment) =>\n typeof segment === 'string' || typeof segment === 'number'\n ? String(segment)\n : 'key' in segment\n ? String(segment.key)\n : '',\n )\n .filter(Boolean)\n .join('.')\n : undefined;\n\n const text = issue.message ?? 'Invalid value';\n return path ? `${path}: ${text}` : text;\n })\n .join('; ');\n}\n\nexport function isAbortError(error: unknown): boolean {\n return error instanceof Error && error.name === 'AbortError';\n}\n","import { XMLParser, XMLBuilder } from 'fast-xml-parser';\nimport { AvesError } from './error.js';\n\nconst parserOptions = {\n ignoreAttributes: false,\n attributeNamePrefix: '@',\n parseAttributeValue: false,\n trimValues: true,\n ignoreNameSpace: true,\n removeNSPrefix: true,\n parseTagValue: false,\n};\n\nconst builderOptions = {\n ignoreAttributes: false,\n attributeNamePrefix: '@',\n suppressEmptyNode: true,\n};\n\nconst parser = new XMLParser(parserOptions);\nconst builder = new XMLBuilder(builderOptions);\n\n/**\n * Converts JSON to XML string\n */\nexport function jsonToXml(json: Record<string, unknown>): string {\n try {\n return builder.build(json);\n } catch (error) {\n throw new AvesError(\n 'validation',\n `Failed to convert JSON to XML: ${error instanceof Error ? error.message : 'Unknown error'}`,\n );\n }\n}\n\n/**\n * Converts XML string to JSON object\n * Attributes are parsed with @ prefix\n */\nexport function xmlToJson(xml: string): Record<string, unknown> {\n try {\n return parser.parse(xml);\n } catch (error) {\n throw new AvesError(\n 'validation',\n `Failed to convert XML to JSON: ${error instanceof Error ? error.message : 'Unknown error'}`,\n );\n }\n}\n","import * as v from 'valibot';\n\n/**\n * Request header schema with authentication credentials\n */\nexport const RqHeaderSchema = v.object({\n '@HostID': v.pipe(v.string(), v.minLength(6), v.maxLength(6)),\n '@Xtoken': v.string(),\n '@Interface': v.literal('WEB'),\n '@UserName': v.literal('WEB'),\n '@LanguageCode': v.optional(\n v.pipe(v.string(), v.minLength(2), v.maxLength(2)),\n ),\n});\n\nconst warningsSchema = v.optional(\n v.pipe(\n v.string(),\n v.transform((input) => input.split(',')),\n ),\n);\n\n/**\n * Response status schema indicating success, error, or warning\n */\nexport const RsStatusSchema = v.pipe(\n v.object({\n '@Status': v.union([\n v.literal('OK'),\n v.literal('ERROR'),\n v.literal('WARNING'),\n v.literal('TIMEOUT'),\n ]),\n ErrorCode: v.optional(\n v.pipe(\n v.union([v.string(), v.number()]),\n v.transform((val) => Number(val)),\n ),\n ),\n ErrorDescription: v.optional(v.string()),\n Warnings: warningsSchema,\n }),\n v.transform((input) => {\n return {\n status: input['@Status'],\n errorCode: input.ErrorCode,\n errorDescription: input.ErrorDescription,\n warnings: input.Warnings,\n };\n }),\n);\n","type CamelFromDelimiter<S extends string> = S extends `${infer H}_${infer T}`\n ? `${H}${Capitalize<CamelFromDelimiter<T>>}`\n : S extends `${infer H}-${infer T}`\n ? `${H}${Capitalize<CamelFromDelimiter<T>>}`\n : S;\n\ntype ToCamelCase<S extends string> =\n CamelFromDelimiter<S> extends `${infer F}${infer R}`\n ? `${Lowercase<F>}${R}`\n : CamelFromDelimiter<S>;\n\ntype PascalFromDelimiter<S extends string> = S extends `${infer H}_${infer T}`\n ? `${Capitalize<H>}${Capitalize<PascalFromDelimiter<T>>}`\n : S extends `${infer H}-${infer T}`\n ? `${Capitalize<H>}${Capitalize<PascalFromDelimiter<T>>}`\n : S;\n\ntype ToPascalCase<S extends string> =\n PascalFromDelimiter<S> extends `${infer F}${infer R}`\n ? `${Capitalize<F>}${R}`\n : Capitalize<PascalFromDelimiter<S>>;\n\nexport type Camelize<T> = T extends readonly (infer U)[]\n ? Camelize<U>[]\n : T extends object\n ? {\n [K in keyof T as K extends `@${infer Rest}`\n ? ToCamelCase<Rest> // Strip @ prefix and camelCase the rest\n : ToCamelCase<K & string>]: Camelize<T[K]>;\n }\n : T;\n\nexport type Pascalize<T> = T extends readonly (infer U)[]\n ? Pascalize<U>[]\n : T extends object\n ? {\n [K in keyof T as K extends `@${infer Rest}`\n ? ToPascalCase<Rest> // Strip @ prefix and PascalCase the rest\n : ToPascalCase<K & string>]: Pascalize<T[K]>;\n }\n : T;\n\nfunction camelToPascal(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nfunction pascalToCamel(str: string): string {\n return str.charAt(0).toLowerCase() + str.slice(1);\n}\n\n/**\n * Checks if an object is a special built-in type that should not be transformed\n */\nfunction isSpecialObject(obj: unknown): boolean {\n return (\n obj instanceof Date ||\n obj instanceof RegExp ||\n obj instanceof Map ||\n obj instanceof Set ||\n obj instanceof Error\n );\n}\n\nexport const ATTRIBUTE_FIELDS = new Set([\n 'recordCode',\n 'insertCriteria',\n 'currencyCode',\n 'creditLimit',\n 'c_PaymentType',\n 'c_SpecPaymentTypeCode',\n 's_PaymentType',\n 's_SpecPaymentTypeCode',\n 'enableElectronicInvoicing',\n 'electronicInvoicingType',\n 'key',\n 'value',\n 'minDate',\n 'maxDate',\n 'hostID',\n 'xtoken',\n 'interface',\n 'userName',\n 'status',\n 'acceptProfilingPolicies',\n 'acceptPrivacyPolicies',\n 'acceptNewsletterPolicies',\n]);\n\n/**\n * Transforms object keys from camelCase to PascalCase\n * Adds @ prefix to fields in ATTRIBUTE_FIELDS for XML attributes\n */\nexport function camelToPascalKeys<T>(obj: T): Pascalize<T> {\n if (!obj || typeof obj !== 'object') {\n return obj as Pascalize<T>;\n }\n\n if (Array.isArray(obj)) {\n return obj.map((item) => camelToPascalKeys(item)) as Pascalize<T>;\n }\n\n if (isSpecialObject(obj)) {\n return obj as Pascalize<T>;\n }\n\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj)) {\n const isAttribute = ATTRIBUTE_FIELDS.has(key);\n const pascalKey = camelToPascal(key);\n const finalKey = isAttribute ? `@${pascalKey}` : pascalKey;\n\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n if (isSpecialObject(value)) {\n result[finalKey] = value;\n } else {\n result[finalKey] = camelToPascalKeys(value as Record<string, unknown>);\n }\n } else if (Array.isArray(value)) {\n result[finalKey] = value.map((item) =>\n typeof item === 'object' && item && !Array.isArray(item)\n ? camelToPascalKeys(item as Record<string, unknown>)\n : item,\n );\n } else {\n result[finalKey] = value;\n }\n }\n return result as Pascalize<T>;\n}\n\n/**\n * Transforms object keys from PascalCase to camelCase\n * Strips @ prefix from XML attributes\n */\nexport function pascalToCamelKeys<T>(obj: T): Camelize<T> {\n if (!obj || typeof obj !== 'object') {\n return obj as Camelize<T>;\n }\n\n if (Array.isArray(obj)) {\n return obj.map((item) => pascalToCamelKeys(item)) as Camelize<T>;\n }\n\n if (isSpecialObject(obj)) {\n return obj as Camelize<T>;\n }\n\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj)) {\n if (key.startsWith('@')) {\n const strippedKey = key.slice(1);\n const camelKey = pascalToCamel(strippedKey);\n result[camelKey] = value;\n } else {\n const camelKey = pascalToCamel(key);\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n if (isSpecialObject(value)) {\n result[camelKey] = value;\n } else {\n result[camelKey] = pascalToCamelKeys(\n value as Record<string, unknown>,\n );\n }\n } else if (Array.isArray(value)) {\n result[camelKey] = value.map((item) =>\n typeof item === 'object' && item && !Array.isArray(item)\n ? pascalToCamelKeys(item as Record<string, unknown>)\n : item,\n );\n } else {\n result[camelKey] = value;\n }\n }\n }\n return result as Camelize<T>;\n}\n","import * as v from 'valibot';\nimport type { BaseSchema, ObjectEntries } from 'valibot';\nimport {\n camelToPascalKeys,\n pascalToCamelKeys,\n ATTRIBUTE_FIELDS,\n} from './case-transform.js';\n\n/**\n * Creates a schema that transforms camelCase input to PascalCase for API requests\n */\nexport function createApiSchema<TInput extends BaseSchema<any, any, any>>(\n inputSchema: TInput,\n) {\n return v.pipe(\n inputSchema,\n v.transform((input) => camelToPascalKeys(input)),\n );\n}\n\n/**\n * Creates a schema that transforms PascalCase API responses to camelCase\n */\nexport function createResponseSchema<TApi extends BaseSchema<any, any, any>>(\n apiSchema: TApi,\n) {\n return v.pipe(\n apiSchema,\n v.transform((input) => pascalToCamelKeys(input)),\n );\n}\n\n/**\n * Creates a validation schema for already-transformed PascalCase data with @ attributes\n * Used for nested objects like AccountPolicies, FinancialDetail, DynamicFields\n * Takes the same input schema used in createApiSchema and generates the validation schema\n * by directly using the ATTRIBUTE_FIELDS logic to determine which fields become attributes\n */\nexport function createApiValidationSchema<TEntries extends ObjectEntries>(\n inputSchema: v.ObjectSchema<TEntries, any>,\n) {\n const validationEntries: Record<string, any> = {};\n\n // Build validation schema based on ATTRIBUTE_FIELDS\n for (const key in inputSchema.entries) {\n const isAttribute = ATTRIBUTE_FIELDS.has(key);\n const pascalKey = key.charAt(0).toUpperCase() + key.slice(1);\n const finalKey = isAttribute ? `@${pascalKey}` : pascalKey;\n\n validationEntries[finalKey] = inputSchema.entries[key];\n }\n\n return v.object(validationEntries as TEntries);\n}\n","import * as v from 'valibot';\nimport {\n createApiSchema,\n createResponseSchema,\n createApiValidationSchema,\n} from '../utils/schema-transform.js';\n\nconst paymentTypeSchema = v.union([\n v.literal('CASH'),\n v.literal('BANK'),\n v.literal('RID'),\n v.literal('RIBA'),\n v.literal('SPECIFIC_CODE'),\n]);\n\nconst FinancialDetailInputSchema = v.object({\n currencyCode: v.optional(v.string()),\n creditLimit: v.optional(v.string()),\n c_PaymentType: v.optional(paymentTypeSchema),\n c_SpecPaymentTypeCode: v.optional(v.string()),\n s_PaymentType: v.optional(paymentTypeSchema),\n s_SpecPaymentTypeCode: v.optional(v.string()),\n enableElectronicInvoicing: v.optional(v.union([v.literal('true'), v.literal('false'), v.boolean()])),\n electronicInvoicingType: v.optional(v.string()),\n});\n\n/**\n * Financial detail schema for API requests (transforms to PascalCase)\n */\nexport const FinancialDetailSchema = createApiSchema(\n FinancialDetailInputSchema,\n);\n\n/**\n * Financial detail validation schema (already transformed PascalCase with @ attributes)\n */\nexport const FinancialDetailApiValidationSchema = createApiValidationSchema(\n FinancialDetailInputSchema,\n);\n\nconst DynamicFieldsInputSchema = v.object({\n key: v.string(),\n value: v.string(),\n});\n\n/**\n * Dynamic fields schema for API requests (transforms to PascalCase)\n */\nexport const DynamicFieldsSchema = createApiSchema(DynamicFieldsInputSchema);\n\n/**\n * Dynamic fields validation schema (already transformed PascalCase with @ attributes)\n */\nexport const DynamicFieldsApiValidationSchema = createApiValidationSchema(\n DynamicFieldsInputSchema,\n);\n\nconst flagSchema = v.union([v.literal(0), v.literal(1)]);\n\nconst recordStatusSchema = v.union([\n v.literal('ENABLED'),\n v.literal('DISABLED'),\n v.literal('WARNING'),\n v.literal('BLACKLISTED'),\n]);\n\nconst recordTypeSchema = v.union([\n v.literal('CUSTOMER'),\n v.literal('SUPPLIER'),\n v.literal('GENERAL'),\n]);\n\nconst insertCriteriaSchema = v.union([\n v.literal('S'),\n v.literal('N'),\n v.literal('T'),\n v.literal('M'),\n]);\n\nconst AccountPoliciesInputSchema = v.object({\n acceptProfilingPolicies: v.optional(flagSchema),\n acceptPrivacyPolicies: v.optional(flagSchema),\n acceptNewsletterPolicies: v.optional(flagSchema),\n});\n\n/**\n * Account policies schema for API requests (transforms to PascalCase with @ attributes)\n */\nexport const AccountPoliciesSchema = createApiSchema(\n AccountPoliciesInputSchema,\n);\n\n/**\n * Account policies validation schema (already transformed PascalCase with @ attributes)\n */\nexport const AccountPoliciesApiValidationSchema = createApiValidationSchema(\n AccountPoliciesInputSchema,\n);\n\n/**\n * Master record detail input schema (camelCase)\n */\nexport const MasterRecordDetailSchema = v.object({\n recordCode: v.optional(v.pipe(v.string(), v.minLength(6), v.maxLength(6))),\n insertCriteria: v.optional(insertCriteriaSchema),\n createdDate: v.optional(v.string()),\n recordType: v.optional(v.union([recordTypeSchema], 'CUSTOMER')),\n recordStatus: v.optional(v.union([recordStatusSchema], 'ENABLED')),\n moniker: v.optional(v.string()),\n name: v.optional(v.string()),\n extraInfo: v.optional(v.string()),\n languageCode: v.pipe(v.string(), v.minLength(2), v.maxLength(2)),\n address: v.optional(v.string()),\n zipCode: v.optional(v.string()),\n cityName: v.optional(v.string()),\n countyCode: v.optional(v.string()),\n stateCode: v.optional(v.string()),\n categoryCode: v.optional(v.string()),\n firstPhoneNumber: v.optional(v.string()),\n mobilePhoneNumber: v.optional(v.string()),\n email: v.optional(v.string()),\n gender: v.optional(v.union([v.literal('M'), v.literal('F')])),\n birthDate: v.optional(v.string()),\n birthCity: v.optional(v.string()),\n birthCounty: v.optional(v.string()),\n fiscalCode: v.optional(v.string()),\n vatCode: v.optional(v.string()),\n accountPolicies: v.optional(AccountPoliciesInputSchema),\n financialDetail: v.optional(FinancialDetailInputSchema),\n dynamicFields: v.optional(DynamicFieldsInputSchema),\n});\n\n/**\n * Master record detail schema for API requests (transforms to PascalCase)\n */\nexport const MasterRecordDetailApiSchema = createApiSchema(\n MasterRecordDetailSchema,\n);\n\n/**\n * Master record detail response schema (transforms to camelCase)\n */\nexport const MasterRecordDetailResponseSchema = createResponseSchema(\n MasterRecordDetailApiSchema,\n);\n\n/**\n * Master record detail API validation schema (PascalCase with @ attributes)\n * Used for both search responses and upsert requests\n * All fields are optional as responses may not contain all fields\n */\nexport const MasterRecordDetailApiValidationSchema = v.object({\n '@RecordCode': v.optional(v.pipe(v.string(), v.minLength(5), v.maxLength(6))),\n '@InsertCriteria': v.optional(insertCriteriaSchema),\n CreatedDate: v.optional(v.string()),\n ModifiedDate: v.optional(v.string()),\n RecordType: v.optional(\n v.union([\n v.literal('CUSTOMER'),\n v.literal('SUPPLIER'),\n v.literal('GENERAL'),\n ]),\n ),\n LoginType: v.optional(v.string()),\n RecordStatus: v.optional(recordStatusSchema),\n Moniker: v.optional(v.string()),\n Name: v.optional(v.string()),\n ExtraInfo: v.optional(v.string()),\n LanguageCode: v.optional(v.pipe(v.string(), v.minLength(1), v.maxLength(2))),\n Address: v.optional(v.string()),\n ZipCode: v.optional(v.string()),\n CityName: v.optional(v.string()),\n CountyCode: v.optional(v.string()),\n StateCode: v.optional(v.string()),\n CategoryCode: v.optional(v.string()),\n PromoterCode: v.optional(v.string()),\n FirstPhoneNumber: v.optional(v.string()),\n MobilePhoneNumber: v.optional(v.string()),\n Email: v.optional(v.string()),\n Gender: v.optional(v.union([v.literal('M'), v.literal('F')])),\n BirthDate: v.optional(v.string()),\n BirthCity: v.optional(v.string()),\n BirthCounty: v.optional(v.string()),\n EncryptedPassword: v.optional(v.union([v.literal('true'), v.literal('false'), v.boolean()])),\n FiscalCode: v.optional(v.string()),\n VatCode: v.optional(v.string()),\n NewsletterDisabled: v.optional(v.union([v.literal('true'), v.literal('false'), v.boolean()])),\n SupplierRefMasterRecords: v.optional(v.any()),\n AccountPolicies: v.optional(AccountPoliciesApiValidationSchema),\n FinancialDetail: v.optional(FinancialDetailApiValidationSchema),\n DynamicFields: v.optional(v.array(DynamicFieldsApiValidationSchema)),\n});\n","import * as v from 'valibot';\nimport { RqHeaderSchema, RsStatusSchema } from './common.js';\nimport { MasterRecordDetailApiValidationSchema } from './master-record.js';\nimport {\n createApiSchema,\n createResponseSchema,\n} from '../utils/schema-transform.js';\n\nconst LastModificationDateInputSchema = v.object({\n minDate: v.string(),\n maxDate: v.string(),\n});\n\nconst languageCodeField = v.optional(\n v.pipe(v.string(), v.minLength(2), v.maxLength(2)),\n);\n\n/**\n * Search by CODE - requires recordCode\n */\nconst CodeSearchSchema = v.object({\n searchType: v.literal('CODE'),\n recordCode: v.pipe(v.string(), v.minLength(5), v.maxLength(6)),\n languageCode: languageCodeField,\n});\n\n/**\n * Search by NAME - requires name, optionally city\n */\nconst NameSearchSchema = v.object({\n searchType: v.literal('NAME'),\n name: v.string(),\n city: v.optional(v.string()),\n languageCode: languageCodeField,\n});\n\n/**\n * Search by VATCODE - requires vatCode, optionally phoneNumber\n */\nconst VatCodeSearchSchema = v.object({\n searchType: v.literal('VATCODE'),\n vatCode: v.string(),\n phoneNumber: v.optional(v.string()),\n languageCode: languageCodeField,\n});\n\n/**\n * Search by ZONE - requires zipCode and countyCode, optionally city\n */\nconst ZoneSearchSchema = v.object({\n searchType: v.literal('ZONE'),\n zipCode: v.string(),\n countyCode: v.string(),\n city: v.optional(v.string()),\n languageCode: languageCodeField,\n});\n\n/**\n * Search by CATEGORY - requires categoryCode\n */\nconst CategorySearchSchema = v.object({\n searchType: v.literal('CATEGORY'),\n categoryCode: v.string(),\n languageCode: languageCodeField,\n});\n\n/**\n * Search by EMAIL - requires email\n */\nconst EmailSearchSchema = v.object({\n searchType: v.literal('EMAIL'),\n email: v.string(),\n languageCode: languageCodeField,\n});\n\n/**\n * Search by LASTMODDATE - requires lastModificationDate\n */\nconst LastModDateSearchSchema = v.object({\n searchType: v.literal('LASTMODDATE'),\n lastModificationDate: LastModificationDateInputSchema,\n languageCode: languageCodeField,\n});\n\n/**\n * Search by SEARCH FIELD - requires searchFieldValue\n */\nconst SearchFieldSearchSchema = v.object({\n searchType: v.literal('SEARCH_FIELD'),\n searchFieldValue: v.string(),\n languageCode: languageCodeField,\n});\n\n/**\n * Search by EXTERNAL_REF_CODE - requires searchFieldValue\n */\nconst ExternalRefCodeSearchSchema = v.object({\n searchType: v.literal('EXTERNAL_REF_CODE'),\n searchFieldValue: v.string(),\n languageCode: languageCodeField,\n});\n\n/**\n * Search master record input schema (camelCase)\n * Conditional fields based on searchType\n */\nexport const SearchMasterRecordSchema = v.union([\n CodeSearchSchema,\n NameSearchSchema,\n VatCodeSearchSchema,\n ZoneSearchSchema,\n CategorySearchSchema,\n EmailSearchSchema,\n LastModDateSearchSchema,\n SearchFieldSearchSchema,\n ExternalRefCodeSearchSchema,\n]);\n\nconst transformRecordCode = (input: Record<string, unknown>) => {\n if (!('@RecordCode' in input)) return input;\n const recordCode = input['@RecordCode'];\n if (!recordCode) return input;\n const { ['@RecordCode']: _discard, ...rest } = input;\n return {\n ...rest,\n RecordCode: recordCode,\n };\n};\n\n/**\n * Search master record schema for API requests (transforms to PascalCase)\n */\nexport const SearchMasterRecordApiSchema = v.pipe(\n createApiSchema(SearchMasterRecordSchema),\n v.transform((input) => transformRecordCode(input)),\n);\n\n/**\n * Complete search request schema with header\n * Flattens SearchMasterRecord fields to root level\n */\nexport const SearchMasterRecordRequestSchema = v.pipe(\n v.object({\n RqHeader: RqHeaderSchema,\n SearchMasterRecord: SearchMasterRecordApiSchema,\n }),\n v.transform((input) => {\n const { SearchMasterRecord: searchFields, RqHeader, ...rest } = input;\n return {\n RqHeader,\n ...searchFields,\n ...rest,\n };\n }),\n);\n\nconst MasterRecordListApiSchema = v.object({\n MasterRecordDetail: v.optional(\n v.pipe(\n v.union([\n v.array(MasterRecordDetailApiValidationSchema),\n MasterRecordDetailApiValidationSchema,\n ]),\n v.transform((input) => {\n if (!input) return undefined;\n return Array.isArray(input) ? input : [input];\n }),\n ),\n ),\n});\n\n/**\n * Search master record response schema (transforms to camelCase)\n */\nexport const SearchMasterRecordResponseSchema = createResponseSchema(\n v.object({\n RsStatus: RsStatusSchema,\n MasterRecordList: v.optional(MasterRecordListApiSchema),\n }),\n);\n","import * as v from 'valibot';\nimport { RqHeaderSchema, RsStatusSchema } from './common.js';\nimport { MasterRecordDetailApiValidationSchema } from './master-record.js';\nimport { createResponseSchema } from '../utils/schema-transform.js';\n\n/**\n * Complete upsert request schema with header and required InsertCriteria\n */\nexport const ManageMasterRecordRequestSchema = v.object({\n RqHeader: RqHeaderSchema,\n MasterRecordDetail: MasterRecordDetailApiValidationSchema,\n});\n\n/**\n * Upsert master record response schema (transforms to camelCase)\n */\nexport const ManageMasterRecordResponseSchema = createResponseSchema(\n v.object({\n RsStatus: RsStatusSchema,\n MasterRecordDetail: v.optional(MasterRecordDetailApiValidationSchema),\n }),\n);\n","/**\n * Result type for functional error handling\n */\nexport type Result<T, E = Error> =\n | { success: true; data: T }\n | { success: false; error: E };\n\n/**\n * Creates a successful result\n */\nexport function ok<T>(data: T): Result<T, never> {\n return { success: true, data };\n}\n\n/**\n * Creates an error result\n */\nexport function err<E>(error: E): Result<never, E> {\n return { success: false, error };\n}\n","import { AvesError } from '../error.js';\n\nfunction buildUrl(baseURL: string, endpoint: string): URL {\n try {\n const base = new URL(baseURL);\n const basePath = base.pathname.endsWith('/')\n ? base.pathname.slice(0, -1)\n : base.pathname;\n const combinedPath = basePath + endpoint;\n\n return new URL(combinedPath, base);\n } catch (error) {\n throw new AvesError(\n 'validation',\n `Invalid baseURL: ${error instanceof Error ? error.message : 'Invalid URL format'}`,\n );\n }\n}\n\n/**\n * Validates and combines baseURL with endpoint\n * @param baseURL - Base URL (must be http:// or https://)\n * @param endpoint - Endpoint path (must start with /)\n * @returns Combined URL string\n * @throws AvesError if URL is invalid or protocol is not http/https\n */\nexport function parseUrl(baseURL: string, endpoint: string): string {\n if (!endpoint.startsWith('/')) {\n throw new AvesError(\n 'validation',\n `Invalid endpoint: endpoint must start with '/' but got '${endpoint}'`,\n );\n }\n\n const normalizedBaseURL = baseURL.replace(/\\/$/, '');\n\n const url = buildUrl(normalizedBaseURL, endpoint);\n\n if (url.protocol !== 'http:' && url.protocol !== 'https:') {\n throw new AvesError(\n 'validation',\n `Invalid protocol: baseURL must use http:// or https:// but got '${url.protocol}'`,\n );\n }\n\n return url.toString();\n}\n","export interface TimeoutController {\n signal: AbortSignal;\n clear?: () => void;\n}\n\n/**\n * Create an AbortSignal that will automatically abort after `timeoutMs`.\n * If `timeoutMs` is not provided or <= 0, no automatic abort is scheduled.\n */\nexport function createTimeoutSignal(timeoutMs?: number): TimeoutController {\n const controller = new AbortController();\n\n if (!timeoutMs || timeoutMs <= 0) {\n return { signal: controller.signal };\n }\n\n const timeoutId = setTimeout(() => controller.abort(), timeoutMs);\n\n return {\n signal: controller.signal,\n clear: () => clearTimeout(timeoutId),\n };\n}\n","import { request as r } from 'undici';\nimport { BaseIssue, BaseSchema, parse, safeParse, ValiError } from 'valibot';\nimport { jsonToXml, xmlToJson } from './xml-client.js';\nimport {\n SearchMasterRecordRequestSchema,\n SearchMasterRecordResponseSchema,\n} from './schemas/search.js';\nimport {\n ManageMasterRecordRequestSchema,\n ManageMasterRecordResponseSchema,\n} from './schemas/upsert.js';\nimport type {\n AvesClientOptions,\n ManageMasterRecordRS,\n MasterRecordDetail,\n RsStatus,\n SearchMasterRecord,\n SearchMasterRecordRS,\n} from './types.js';\nimport { MasterRecordDetailApiSchema } from './schemas/master-record.js';\nimport type { Result } from './utils/result.js';\nimport { err, ok } from './utils/result.js';\nimport {\n apiError,\n AvesError,\n buildDetails,\n isAbortError,\n unknownError,\n validationError,\n} from './error.js';\nimport { parseUrl } from './utils/url.js';\nimport { createTimeoutSignal } from './utils/timeout.js';\n\nfunction createRootElement<T>(name: XMLRootElementValues, object: T) {\n return {\n [name]: object,\n };\n}\n\nconst XML_ROOT_ELEMENTS = {\n SEARCH_REQUEST: 'SearchMasterRecordRQ',\n SEARCH_RESPONSE: 'SearchMasterRecordRS',\n UPSERT_REQUEST: 'ManageMasterRecordRQ',\n UPSERT_RESPONSE: 'ManageMasterRecordRS',\n} as const;\n\ntype XMLRootElementValues =\n (typeof XML_ROOT_ELEMENTS)[keyof typeof XML_ROOT_ELEMENTS];\n\n/**\n * AVES XML REST API client\n */\nexport class AvesClient {\n /**\n * @param options - Client configuration options\n * @param options.baseURL - Base URL of the AVES API\n * @param options.hostID - 6-digit identification code\n * @param options.xtoken - Authentication token\n * @param options.languageCode - Optional 2-digit language code\n * @param options.timeoutMs - Optional request timeout in milliseconds\n */\n constructor(private readonly options: AvesClientOptions) {}\n\n private createRqHeader() {\n return {\n '@HostID': this.options.hostID,\n '@Xtoken': this.options.xtoken,\n '@Interface': 'WEB' as const,\n '@UserName': 'WEB' as const,\n ...(this.options.languageCode && {\n '@LanguageCode': this.options.languageCode,\n }),\n };\n }\n\n private createUrl(endpoint: string) {\n return parseUrl(this.options.baseURL, endpoint);\n }\n\n private get endpoints() {\n return {\n search: '/interop/masterRecords/v2/rest/Search',\n upsert: '/interop/masterRecords/v2/rest/InsertOrUpdate',\n } as const;\n }\n\n private handleApiStatus<T extends { rsStatus: RsStatus }>(\n output: T,\n ): Result<T, AvesError> {\n const rsStatus = output.rsStatus;\n const status = rsStatus?.status;\n\n if (status !== 'OK') {\n return err(\n apiError(\n rsStatus.errorDescription as string,\n status,\n rsStatus.errorCode,\n ),\n );\n }\n\n return ok(output);\n }\n\n private toAvesError(error: unknown, defaultMessage: string): AvesError {\n if (error instanceof AvesError) {\n return error;\n }\n if (error instanceof ValiError) {\n const details = buildDetails(error.issues);\n return validationError(`Validation error: ${details}`);\n }\n if (error instanceof Error) {\n return unknownError(error.message);\n }\n return unknownError(defaultMessage);\n }\n\n private async request<T extends { rsStatus: RsStatus }>(\n endpoint: string,\n requestBody: Record<string, unknown>,\n responseRootKey: string,\n responseSchema: BaseSchema<unknown, T, BaseIssue<unknown>>,\n ): Promise<Result<T, AvesError>> {\n const { signal, clear } = createTimeoutSignal(\n this.options.timeoutMs ?? 30_000,\n );\n\n try {\n const url = this.createUrl(endpoint);\n const xmlBody = jsonToXml(requestBody);\n\n const response = await r(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/xml',\n },\n body: xmlBody,\n signal,\n });\n\n const responseText = await response.body.text();\n\n if (response.statusCode !== 200) {\n return err(apiError(responseText, 'ERROR', response.statusCode));\n }\n\n const jsonResponse = xmlToJson(responseText);\n const rootElement = jsonResponse[responseRootKey];\n\n if (!rootElement) {\n return err(\n validationError(\n `Invalid response structure: missing root element '${responseRootKey}'`,\n ),\n );\n }\n\n const parseResult = safeParse(responseSchema, rootElement);\n if (!parseResult.success) {\n const details = buildDetails(parseResult.issues);\n return err(validationError(`Invalid response format: ${details}`));\n }\n return this.handleApiStatus(parseResult.output);\n } catch (error) {\n if (isAbortError(error)) {\n return err(apiError('Request timed out', 'TIMEOUT'));\n }\n return err(this.toAvesError(error, 'Unknown error occurred'));\n } finally {\n clear?.();\n }\n }\n\n /**\n * Search for master records\n * @returns Result containing list of matching master records in camelCase or error\n */\n async search(\n params: SearchMasterRecord,\n ): Promise<Result<SearchMasterRecordRS, AvesError>> {\n try {\n const requestData = parse(SearchMasterRecordRequestSchema, {\n RqHeader: this.createRqHeader(),\n SearchMasterRecord: params,\n });\n\n const requestBody = createRootElement(\n XML_ROOT_ELEMENTS.SEARCH_REQUEST,\n requestData,\n );\n\n return this.request<SearchMasterRecordRS>(\n this.endpoints.search,\n requestBody,\n XML_ROOT_ELEMENTS.SEARCH_RESPONSE,\n SearchMasterRecordResponseSchema,\n );\n } catch (error) {\n return err(\n this.toAvesError(error, 'Validation error occurred during search'),\n );\n }\n }\n\n /**\n * Insert or update a master record\n * @param record - Master record data in camelCase\n * @returns Result containing response with customer record code in camelCase or error\n */\n async upsertRecord(\n record: MasterRecordDetail,\n ): Promise<Result<ManageMasterRecordRS, AvesError>> {\n try {\n const apiRecord = parse(MasterRecordDetailApiSchema, record);\n\n const requestData = parse(ManageMasterRecordRequestSchema, {\n RqHeader: this.createRqHeader(),\n MasterRecordDetail: apiRecord,\n });\n\n const requestBody = createRootElement(\n XML_ROOT_ELEMENTS.UPSERT_REQUEST,\n requestData,\n );\n\n return this.request<ManageMasterRecordRS>(\n this.endpoints.upsert,\n requestBody,\n XML_ROOT_ELEMENTS.UPSERT_RESPONSE,\n ManageMasterRecordResponseSchema,\n );\n } catch (error) {\n return err(\n this.toAvesError(error, 'Validation error occurred during upsert'),\n );\n }\n }\n}\n"]}
package/dist/index.d.cts CHANGED
@@ -90,8 +90,10 @@ declare const MasterRecordDetailSchema: v.ObjectSchema<{
90
90
  readonly firstPhoneNumber: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
91
91
  readonly mobilePhoneNumber: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
92
92
  readonly email: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
93
- readonly gender: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
93
+ readonly gender: v.OptionalSchema<v.UnionSchema<[v.LiteralSchema<"M", undefined>, v.LiteralSchema<"F", undefined>], undefined>, undefined>;
94
94
  readonly birthDate: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
95
+ readonly birthCity: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
96
+ readonly birthCounty: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
95
97
  readonly fiscalCode: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
96
98
  readonly vatCode: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
97
99
  readonly accountPolicies: v.OptionalSchema<v.ObjectSchema<{
@@ -136,8 +138,10 @@ declare const MasterRecordDetailResponseSchema: v.SchemaWithPipe<readonly [v.Sch
136
138
  readonly firstPhoneNumber: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
137
139
  readonly mobilePhoneNumber: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
138
140
  readonly email: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
139
- readonly gender: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
141
+ readonly gender: v.OptionalSchema<v.UnionSchema<[v.LiteralSchema<"M", undefined>, v.LiteralSchema<"F", undefined>], undefined>, undefined>;
140
142
  readonly birthDate: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
143
+ readonly birthCity: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
144
+ readonly birthCounty: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
141
145
  readonly fiscalCode: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
142
146
  readonly vatCode: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
143
147
  readonly accountPolicies: v.OptionalSchema<v.ObjectSchema<{
@@ -178,8 +182,10 @@ declare const MasterRecordDetailResponseSchema: v.SchemaWithPipe<readonly [v.Sch
178
182
  firstPhoneNumber?: string | undefined;
179
183
  mobilePhoneNumber?: string | undefined;
180
184
  email?: string | undefined;
181
- gender?: string | undefined;
185
+ gender?: "M" | "F" | undefined;
182
186
  birthDate?: string | undefined;
187
+ birthCity?: string | undefined;
188
+ birthCounty?: string | undefined;
183
189
  fiscalCode?: string | undefined;
184
190
  vatCode?: string | undefined;
185
191
  accountPolicies?: {
@@ -220,8 +226,10 @@ declare const MasterRecordDetailResponseSchema: v.SchemaWithPipe<readonly [v.Sch
220
226
  FirstPhoneNumber?: string | undefined;
221
227
  MobilePhoneNumber?: string | undefined;
222
228
  Email?: string | undefined;
223
- Gender?: string | undefined;
229
+ Gender?: "M" | "F" | undefined;
224
230
  BirthDate?: string | undefined;
231
+ BirthCity?: string | undefined;
232
+ BirthCounty?: string | undefined;
225
233
  FiscalCode?: string | undefined;
226
234
  VatCode?: string | undefined;
227
235
  AccountPolicies?: {
@@ -262,8 +270,10 @@ declare const MasterRecordDetailResponseSchema: v.SchemaWithPipe<readonly [v.Sch
262
270
  FirstPhoneNumber?: string | undefined;
263
271
  MobilePhoneNumber?: string | undefined;
264
272
  Email?: string | undefined;
265
- Gender?: string | undefined;
273
+ Gender?: "M" | "F" | undefined;
266
274
  BirthDate?: string | undefined;
275
+ BirthCity?: string | undefined;
276
+ BirthCounty?: string | undefined;
267
277
  FiscalCode?: string | undefined;
268
278
  VatCode?: string | undefined;
269
279
  AccountPolicies?: {
@@ -304,8 +314,10 @@ declare const MasterRecordDetailResponseSchema: v.SchemaWithPipe<readonly [v.Sch
304
314
  firstPhoneNumber?: string | undefined;
305
315
  mobilePhoneNumber?: string | undefined;
306
316
  email?: string | undefined;
307
- gender?: string | undefined;
317
+ gender?: "M" | "F" | undefined;
308
318
  birthDate?: string | undefined;
319
+ birthCity?: string | undefined;
320
+ birthCounty?: string | undefined;
309
321
  fiscalCode?: string | undefined;
310
322
  vatCode?: string | undefined;
311
323
  accountPolicies?: {
@@ -420,8 +432,10 @@ declare const SearchMasterRecordResponseSchema: v.SchemaWithPipe<readonly [v.Obj
420
432
  readonly FirstPhoneNumber: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
421
433
  readonly MobilePhoneNumber: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
422
434
  readonly Email: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
423
- readonly Gender: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
435
+ readonly Gender: v.OptionalSchema<v.UnionSchema<[v.LiteralSchema<"M", undefined>, v.LiteralSchema<"F", undefined>], undefined>, undefined>;
424
436
  readonly BirthDate: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
437
+ readonly BirthCity: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
438
+ readonly BirthCounty: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
425
439
  readonly EncryptedPassword: v.OptionalSchema<v.UnionSchema<[v.LiteralSchema<"true", undefined>, v.LiteralSchema<"false", undefined>, v.BooleanSchema<undefined>], undefined>, undefined>;
426
440
  readonly FiscalCode: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
427
441
  readonly VatCode: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
@@ -468,8 +482,10 @@ declare const SearchMasterRecordResponseSchema: v.SchemaWithPipe<readonly [v.Obj
468
482
  readonly FirstPhoneNumber: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
469
483
  readonly MobilePhoneNumber: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
470
484
  readonly Email: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
471
- readonly Gender: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
485
+ readonly Gender: v.OptionalSchema<v.UnionSchema<[v.LiteralSchema<"M", undefined>, v.LiteralSchema<"F", undefined>], undefined>, undefined>;
472
486
  readonly BirthDate: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
487
+ readonly BirthCity: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
488
+ readonly BirthCounty: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
473
489
  readonly EncryptedPassword: v.OptionalSchema<v.UnionSchema<[v.LiteralSchema<"true", undefined>, v.LiteralSchema<"false", undefined>, v.BooleanSchema<undefined>], undefined>, undefined>;
474
490
  readonly FiscalCode: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
475
491
  readonly VatCode: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
@@ -516,8 +532,10 @@ declare const SearchMasterRecordResponseSchema: v.SchemaWithPipe<readonly [v.Obj
516
532
  FirstPhoneNumber?: string | undefined;
517
533
  MobilePhoneNumber?: string | undefined;
518
534
  Email?: string | undefined;
519
- Gender?: string | undefined;
535
+ Gender?: "M" | "F" | undefined;
520
536
  BirthDate?: string | undefined;
537
+ BirthCity?: string | undefined;
538
+ BirthCounty?: string | undefined;
521
539
  EncryptedPassword?: boolean | "true" | "false" | undefined;
522
540
  FiscalCode?: string | undefined;
523
541
  VatCode?: string | undefined;
@@ -564,8 +582,10 @@ declare const SearchMasterRecordResponseSchema: v.SchemaWithPipe<readonly [v.Obj
564
582
  FirstPhoneNumber?: string | undefined;
565
583
  MobilePhoneNumber?: string | undefined;
566
584
  Email?: string | undefined;
567
- Gender?: string | undefined;
585
+ Gender?: "M" | "F" | undefined;
568
586
  BirthDate?: string | undefined;
587
+ BirthCity?: string | undefined;
588
+ BirthCounty?: string | undefined;
569
589
  EncryptedPassword?: boolean | "true" | "false" | undefined;
570
590
  FiscalCode?: string | undefined;
571
591
  VatCode?: string | undefined;
@@ -612,8 +632,10 @@ declare const SearchMasterRecordResponseSchema: v.SchemaWithPipe<readonly [v.Obj
612
632
  FirstPhoneNumber?: string | undefined;
613
633
  MobilePhoneNumber?: string | undefined;
614
634
  Email?: string | undefined;
615
- Gender?: string | undefined;
635
+ Gender?: "M" | "F" | undefined;
616
636
  BirthDate?: string | undefined;
637
+ BirthCity?: string | undefined;
638
+ BirthCounty?: string | undefined;
617
639
  EncryptedPassword?: boolean | "true" | "false" | undefined;
618
640
  FiscalCode?: string | undefined;
619
641
  VatCode?: string | undefined;
@@ -670,8 +692,10 @@ declare const SearchMasterRecordResponseSchema: v.SchemaWithPipe<readonly [v.Obj
670
692
  FirstPhoneNumber?: string | undefined;
671
693
  MobilePhoneNumber?: string | undefined;
672
694
  Email?: string | undefined;
673
- Gender?: string | undefined;
695
+ Gender?: "M" | "F" | undefined;
674
696
  BirthDate?: string | undefined;
697
+ BirthCity?: string | undefined;
698
+ BirthCounty?: string | undefined;
675
699
  EncryptedPassword?: boolean | "true" | "false" | undefined;
676
700
  FiscalCode?: string | undefined;
677
701
  VatCode?: string | undefined;
@@ -728,8 +752,10 @@ declare const SearchMasterRecordResponseSchema: v.SchemaWithPipe<readonly [v.Obj
728
752
  firstPhoneNumber?: string | undefined;
729
753
  mobilePhoneNumber?: string | undefined;
730
754
  email?: string | undefined;
731
- gender?: string | undefined;
755
+ gender?: "M" | "F" | undefined;
732
756
  birthDate?: string | undefined;
757
+ birthCity?: string | undefined;
758
+ birthCounty?: string | undefined;
733
759
  encryptedPassword?: boolean | "true" | "false" | undefined;
734
760
  fiscalCode?: string | undefined;
735
761
  vatCode?: string | undefined;
@@ -791,8 +817,10 @@ declare const ManageMasterRecordRequestSchema: v.ObjectSchema<{
791
817
  readonly FirstPhoneNumber: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
792
818
  readonly MobilePhoneNumber: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
793
819
  readonly Email: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
794
- readonly Gender: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
820
+ readonly Gender: v.OptionalSchema<v.UnionSchema<[v.LiteralSchema<"M", undefined>, v.LiteralSchema<"F", undefined>], undefined>, undefined>;
795
821
  readonly BirthDate: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
822
+ readonly BirthCity: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
823
+ readonly BirthCounty: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
796
824
  readonly EncryptedPassword: v.OptionalSchema<v.UnionSchema<[v.LiteralSchema<"true", undefined>, v.LiteralSchema<"false", undefined>, v.BooleanSchema<undefined>], undefined>, undefined>;
797
825
  readonly FiscalCode: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
798
826
  readonly VatCode: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
@@ -861,8 +889,10 @@ declare const ManageMasterRecordResponseSchema: v.SchemaWithPipe<readonly [v.Obj
861
889
  readonly FirstPhoneNumber: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
862
890
  readonly MobilePhoneNumber: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
863
891
  readonly Email: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
864
- readonly Gender: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
892
+ readonly Gender: v.OptionalSchema<v.UnionSchema<[v.LiteralSchema<"M", undefined>, v.LiteralSchema<"F", undefined>], undefined>, undefined>;
865
893
  readonly BirthDate: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
894
+ readonly BirthCity: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
895
+ readonly BirthCounty: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
866
896
  readonly EncryptedPassword: v.OptionalSchema<v.UnionSchema<[v.LiteralSchema<"true", undefined>, v.LiteralSchema<"false", undefined>, v.BooleanSchema<undefined>], undefined>, undefined>;
867
897
  readonly FiscalCode: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
868
898
  readonly VatCode: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
@@ -917,8 +947,10 @@ declare const ManageMasterRecordResponseSchema: v.SchemaWithPipe<readonly [v.Obj
917
947
  FirstPhoneNumber?: string | undefined;
918
948
  MobilePhoneNumber?: string | undefined;
919
949
  Email?: string | undefined;
920
- Gender?: string | undefined;
950
+ Gender?: "M" | "F" | undefined;
921
951
  BirthDate?: string | undefined;
952
+ BirthCity?: string | undefined;
953
+ BirthCounty?: string | undefined;
922
954
  EncryptedPassword?: boolean | "true" | "false" | undefined;
923
955
  FiscalCode?: string | undefined;
924
956
  VatCode?: string | undefined;
@@ -973,8 +1005,10 @@ declare const ManageMasterRecordResponseSchema: v.SchemaWithPipe<readonly [v.Obj
973
1005
  firstPhoneNumber?: string | undefined;
974
1006
  mobilePhoneNumber?: string | undefined;
975
1007
  email?: string | undefined;
976
- gender?: string | undefined;
1008
+ gender?: "M" | "F" | undefined;
977
1009
  birthDate?: string | undefined;
1010
+ birthCity?: string | undefined;
1011
+ birthCounty?: string | undefined;
978
1012
  encryptedPassword?: boolean | "true" | "false" | undefined;
979
1013
  fiscalCode?: string | undefined;
980
1014
  vatCode?: string | undefined;
package/dist/index.d.ts CHANGED
@@ -90,8 +90,10 @@ declare const MasterRecordDetailSchema: v.ObjectSchema<{
90
90
  readonly firstPhoneNumber: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
91
91
  readonly mobilePhoneNumber: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
92
92
  readonly email: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
93
- readonly gender: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
93
+ readonly gender: v.OptionalSchema<v.UnionSchema<[v.LiteralSchema<"M", undefined>, v.LiteralSchema<"F", undefined>], undefined>, undefined>;
94
94
  readonly birthDate: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
95
+ readonly birthCity: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
96
+ readonly birthCounty: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
95
97
  readonly fiscalCode: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
96
98
  readonly vatCode: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
97
99
  readonly accountPolicies: v.OptionalSchema<v.ObjectSchema<{
@@ -136,8 +138,10 @@ declare const MasterRecordDetailResponseSchema: v.SchemaWithPipe<readonly [v.Sch
136
138
  readonly firstPhoneNumber: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
137
139
  readonly mobilePhoneNumber: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
138
140
  readonly email: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
139
- readonly gender: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
141
+ readonly gender: v.OptionalSchema<v.UnionSchema<[v.LiteralSchema<"M", undefined>, v.LiteralSchema<"F", undefined>], undefined>, undefined>;
140
142
  readonly birthDate: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
143
+ readonly birthCity: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
144
+ readonly birthCounty: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
141
145
  readonly fiscalCode: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
142
146
  readonly vatCode: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
143
147
  readonly accountPolicies: v.OptionalSchema<v.ObjectSchema<{
@@ -178,8 +182,10 @@ declare const MasterRecordDetailResponseSchema: v.SchemaWithPipe<readonly [v.Sch
178
182
  firstPhoneNumber?: string | undefined;
179
183
  mobilePhoneNumber?: string | undefined;
180
184
  email?: string | undefined;
181
- gender?: string | undefined;
185
+ gender?: "M" | "F" | undefined;
182
186
  birthDate?: string | undefined;
187
+ birthCity?: string | undefined;
188
+ birthCounty?: string | undefined;
183
189
  fiscalCode?: string | undefined;
184
190
  vatCode?: string | undefined;
185
191
  accountPolicies?: {
@@ -220,8 +226,10 @@ declare const MasterRecordDetailResponseSchema: v.SchemaWithPipe<readonly [v.Sch
220
226
  FirstPhoneNumber?: string | undefined;
221
227
  MobilePhoneNumber?: string | undefined;
222
228
  Email?: string | undefined;
223
- Gender?: string | undefined;
229
+ Gender?: "M" | "F" | undefined;
224
230
  BirthDate?: string | undefined;
231
+ BirthCity?: string | undefined;
232
+ BirthCounty?: string | undefined;
225
233
  FiscalCode?: string | undefined;
226
234
  VatCode?: string | undefined;
227
235
  AccountPolicies?: {
@@ -262,8 +270,10 @@ declare const MasterRecordDetailResponseSchema: v.SchemaWithPipe<readonly [v.Sch
262
270
  FirstPhoneNumber?: string | undefined;
263
271
  MobilePhoneNumber?: string | undefined;
264
272
  Email?: string | undefined;
265
- Gender?: string | undefined;
273
+ Gender?: "M" | "F" | undefined;
266
274
  BirthDate?: string | undefined;
275
+ BirthCity?: string | undefined;
276
+ BirthCounty?: string | undefined;
267
277
  FiscalCode?: string | undefined;
268
278
  VatCode?: string | undefined;
269
279
  AccountPolicies?: {
@@ -304,8 +314,10 @@ declare const MasterRecordDetailResponseSchema: v.SchemaWithPipe<readonly [v.Sch
304
314
  firstPhoneNumber?: string | undefined;
305
315
  mobilePhoneNumber?: string | undefined;
306
316
  email?: string | undefined;
307
- gender?: string | undefined;
317
+ gender?: "M" | "F" | undefined;
308
318
  birthDate?: string | undefined;
319
+ birthCity?: string | undefined;
320
+ birthCounty?: string | undefined;
309
321
  fiscalCode?: string | undefined;
310
322
  vatCode?: string | undefined;
311
323
  accountPolicies?: {
@@ -420,8 +432,10 @@ declare const SearchMasterRecordResponseSchema: v.SchemaWithPipe<readonly [v.Obj
420
432
  readonly FirstPhoneNumber: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
421
433
  readonly MobilePhoneNumber: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
422
434
  readonly Email: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
423
- readonly Gender: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
435
+ readonly Gender: v.OptionalSchema<v.UnionSchema<[v.LiteralSchema<"M", undefined>, v.LiteralSchema<"F", undefined>], undefined>, undefined>;
424
436
  readonly BirthDate: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
437
+ readonly BirthCity: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
438
+ readonly BirthCounty: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
425
439
  readonly EncryptedPassword: v.OptionalSchema<v.UnionSchema<[v.LiteralSchema<"true", undefined>, v.LiteralSchema<"false", undefined>, v.BooleanSchema<undefined>], undefined>, undefined>;
426
440
  readonly FiscalCode: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
427
441
  readonly VatCode: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
@@ -468,8 +482,10 @@ declare const SearchMasterRecordResponseSchema: v.SchemaWithPipe<readonly [v.Obj
468
482
  readonly FirstPhoneNumber: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
469
483
  readonly MobilePhoneNumber: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
470
484
  readonly Email: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
471
- readonly Gender: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
485
+ readonly Gender: v.OptionalSchema<v.UnionSchema<[v.LiteralSchema<"M", undefined>, v.LiteralSchema<"F", undefined>], undefined>, undefined>;
472
486
  readonly BirthDate: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
487
+ readonly BirthCity: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
488
+ readonly BirthCounty: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
473
489
  readonly EncryptedPassword: v.OptionalSchema<v.UnionSchema<[v.LiteralSchema<"true", undefined>, v.LiteralSchema<"false", undefined>, v.BooleanSchema<undefined>], undefined>, undefined>;
474
490
  readonly FiscalCode: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
475
491
  readonly VatCode: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
@@ -516,8 +532,10 @@ declare const SearchMasterRecordResponseSchema: v.SchemaWithPipe<readonly [v.Obj
516
532
  FirstPhoneNumber?: string | undefined;
517
533
  MobilePhoneNumber?: string | undefined;
518
534
  Email?: string | undefined;
519
- Gender?: string | undefined;
535
+ Gender?: "M" | "F" | undefined;
520
536
  BirthDate?: string | undefined;
537
+ BirthCity?: string | undefined;
538
+ BirthCounty?: string | undefined;
521
539
  EncryptedPassword?: boolean | "true" | "false" | undefined;
522
540
  FiscalCode?: string | undefined;
523
541
  VatCode?: string | undefined;
@@ -564,8 +582,10 @@ declare const SearchMasterRecordResponseSchema: v.SchemaWithPipe<readonly [v.Obj
564
582
  FirstPhoneNumber?: string | undefined;
565
583
  MobilePhoneNumber?: string | undefined;
566
584
  Email?: string | undefined;
567
- Gender?: string | undefined;
585
+ Gender?: "M" | "F" | undefined;
568
586
  BirthDate?: string | undefined;
587
+ BirthCity?: string | undefined;
588
+ BirthCounty?: string | undefined;
569
589
  EncryptedPassword?: boolean | "true" | "false" | undefined;
570
590
  FiscalCode?: string | undefined;
571
591
  VatCode?: string | undefined;
@@ -612,8 +632,10 @@ declare const SearchMasterRecordResponseSchema: v.SchemaWithPipe<readonly [v.Obj
612
632
  FirstPhoneNumber?: string | undefined;
613
633
  MobilePhoneNumber?: string | undefined;
614
634
  Email?: string | undefined;
615
- Gender?: string | undefined;
635
+ Gender?: "M" | "F" | undefined;
616
636
  BirthDate?: string | undefined;
637
+ BirthCity?: string | undefined;
638
+ BirthCounty?: string | undefined;
617
639
  EncryptedPassword?: boolean | "true" | "false" | undefined;
618
640
  FiscalCode?: string | undefined;
619
641
  VatCode?: string | undefined;
@@ -670,8 +692,10 @@ declare const SearchMasterRecordResponseSchema: v.SchemaWithPipe<readonly [v.Obj
670
692
  FirstPhoneNumber?: string | undefined;
671
693
  MobilePhoneNumber?: string | undefined;
672
694
  Email?: string | undefined;
673
- Gender?: string | undefined;
695
+ Gender?: "M" | "F" | undefined;
674
696
  BirthDate?: string | undefined;
697
+ BirthCity?: string | undefined;
698
+ BirthCounty?: string | undefined;
675
699
  EncryptedPassword?: boolean | "true" | "false" | undefined;
676
700
  FiscalCode?: string | undefined;
677
701
  VatCode?: string | undefined;
@@ -728,8 +752,10 @@ declare const SearchMasterRecordResponseSchema: v.SchemaWithPipe<readonly [v.Obj
728
752
  firstPhoneNumber?: string | undefined;
729
753
  mobilePhoneNumber?: string | undefined;
730
754
  email?: string | undefined;
731
- gender?: string | undefined;
755
+ gender?: "M" | "F" | undefined;
732
756
  birthDate?: string | undefined;
757
+ birthCity?: string | undefined;
758
+ birthCounty?: string | undefined;
733
759
  encryptedPassword?: boolean | "true" | "false" | undefined;
734
760
  fiscalCode?: string | undefined;
735
761
  vatCode?: string | undefined;
@@ -791,8 +817,10 @@ declare const ManageMasterRecordRequestSchema: v.ObjectSchema<{
791
817
  readonly FirstPhoneNumber: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
792
818
  readonly MobilePhoneNumber: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
793
819
  readonly Email: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
794
- readonly Gender: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
820
+ readonly Gender: v.OptionalSchema<v.UnionSchema<[v.LiteralSchema<"M", undefined>, v.LiteralSchema<"F", undefined>], undefined>, undefined>;
795
821
  readonly BirthDate: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
822
+ readonly BirthCity: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
823
+ readonly BirthCounty: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
796
824
  readonly EncryptedPassword: v.OptionalSchema<v.UnionSchema<[v.LiteralSchema<"true", undefined>, v.LiteralSchema<"false", undefined>, v.BooleanSchema<undefined>], undefined>, undefined>;
797
825
  readonly FiscalCode: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
798
826
  readonly VatCode: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
@@ -861,8 +889,10 @@ declare const ManageMasterRecordResponseSchema: v.SchemaWithPipe<readonly [v.Obj
861
889
  readonly FirstPhoneNumber: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
862
890
  readonly MobilePhoneNumber: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
863
891
  readonly Email: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
864
- readonly Gender: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
892
+ readonly Gender: v.OptionalSchema<v.UnionSchema<[v.LiteralSchema<"M", undefined>, v.LiteralSchema<"F", undefined>], undefined>, undefined>;
865
893
  readonly BirthDate: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
894
+ readonly BirthCity: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
895
+ readonly BirthCounty: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
866
896
  readonly EncryptedPassword: v.OptionalSchema<v.UnionSchema<[v.LiteralSchema<"true", undefined>, v.LiteralSchema<"false", undefined>, v.BooleanSchema<undefined>], undefined>, undefined>;
867
897
  readonly FiscalCode: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
868
898
  readonly VatCode: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
@@ -917,8 +947,10 @@ declare const ManageMasterRecordResponseSchema: v.SchemaWithPipe<readonly [v.Obj
917
947
  FirstPhoneNumber?: string | undefined;
918
948
  MobilePhoneNumber?: string | undefined;
919
949
  Email?: string | undefined;
920
- Gender?: string | undefined;
950
+ Gender?: "M" | "F" | undefined;
921
951
  BirthDate?: string | undefined;
952
+ BirthCity?: string | undefined;
953
+ BirthCounty?: string | undefined;
922
954
  EncryptedPassword?: boolean | "true" | "false" | undefined;
923
955
  FiscalCode?: string | undefined;
924
956
  VatCode?: string | undefined;
@@ -973,8 +1005,10 @@ declare const ManageMasterRecordResponseSchema: v.SchemaWithPipe<readonly [v.Obj
973
1005
  firstPhoneNumber?: string | undefined;
974
1006
  mobilePhoneNumber?: string | undefined;
975
1007
  email?: string | undefined;
976
- gender?: string | undefined;
1008
+ gender?: "M" | "F" | undefined;
977
1009
  birthDate?: string | undefined;
1010
+ birthCity?: string | undefined;
1011
+ birthCounty?: string | undefined;
978
1012
  encryptedPassword?: boolean | "true" | "false" | undefined;
979
1013
  fiscalCode?: string | undefined;
980
1014
  vatCode?: string | undefined;
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- import {request}from'undici';import*as e from'valibot';import {ValiError,safeParse,parse}from'valibot';import {XMLParser,XMLBuilder}from'fast-xml-parser';var L={VALIDATION:"validation",API:"api",UNKNOWN:"unknown"},l=class extends Error{constructor(a,n,s,c){super(n);this.kind=a;this.message=n;this.status=s;this.code=c;this.name="AvesError",this.status=s?.toLowerCase(),this.code=this.parseCode(c);}parseCode(a){return typeof a=="string"?Number.parseInt(a):a??0}};function E(t){return new l(L.VALIDATION,t)}function T(t,r,a){return new l(L.API,t,r,a)}function I(t){return new l(L.UNKNOWN,t)}function N(t){return t.map(r=>{let a=r.path&&r.path.length>0?r.path.map(s=>typeof s=="string"||typeof s=="number"?String(s):"key"in s?String(s.key):"").filter(Boolean).join("."):void 0,n=r.message??"Invalid value";return a?`${a}: ${n}`:n}).join("; ")}function H(t){return t instanceof Error&&t.name==="AbortError"}var ce={ignoreAttributes:false,attributeNamePrefix:"@",parseAttributeValue:false,trimValues:true,ignoreNameSpace:true,removeNSPrefix:true,parseTagValue:false},le={ignoreAttributes:false,attributeNamePrefix:"@",suppressEmptyNode:true},pe=new XMLParser(ce),ve=new XMLBuilder(le);function z(t){try{return ve.build(t)}catch(r){throw new l("validation",`Failed to convert JSON to XML: ${r instanceof Error?r.message:"Unknown error"}`)}}function q(t){try{return pe.parse(t)}catch(r){throw new l("validation",`Failed to convert XML to JSON: ${r instanceof Error?r.message:"Unknown error"}`)}}var C=e.object({"@HostID":e.pipe(e.string(),e.minLength(6),e.maxLength(6)),"@Xtoken":e.string(),"@Interface":e.literal("WEB"),"@UserName":e.literal("WEB"),"@LanguageCode":e.optional(e.pipe(e.string(),e.minLength(2),e.maxLength(2)))}),me=e.optional(e.pipe(e.string(),e.transform(t=>t.split(",")))),A=e.pipe(e.object({"@Status":e.union([e.literal("OK"),e.literal("ERROR"),e.literal("WARNING"),e.literal("TIMEOUT")]),ErrorCode:e.optional(e.pipe(e.union([e.string(),e.number()]),e.transform(t=>Number(t)))),ErrorDescription:e.optional(e.string()),Warnings:me}),e.transform(t=>({status:t["@Status"],errorCode:t.ErrorCode,errorDescription:t.ErrorDescription,warnings:t.Warnings})));function de(t){return t.charAt(0).toUpperCase()+t.slice(1)}function V(t){return t.charAt(0).toLowerCase()+t.slice(1)}function x(t){return t instanceof Date||t instanceof RegExp||t instanceof Map||t instanceof Set||t instanceof Error}var w=new Set(["recordCode","insertCriteria","currencyCode","creditLimit","c_PaymentType","c_SpecPaymentTypeCode","s_PaymentType","s_SpecPaymentTypeCode","enableElectronicInvoicing","electronicInvoicingType","key","value","minDate","maxDate","hostID","xtoken","interface","userName","status","acceptProfilingPolicies","acceptPrivacyPolicies","acceptNewsletterPolicies"]);function h(t){if(!t||typeof t!="object")return t;if(Array.isArray(t))return t.map(a=>h(a));if(x(t))return t;let r={};for(let[a,n]of Object.entries(t)){let s=w.has(a),c=de(a),g=s?`@${c}`:c;n&&typeof n=="object"&&!Array.isArray(n)?x(n)?r[g]=n:r[g]=h(n):Array.isArray(n)?r[g]=n.map(p=>typeof p=="object"&&p&&!Array.isArray(p)?h(p):p):r[g]=n;}return r}function f(t){if(!t||typeof t!="object")return t;if(Array.isArray(t))return t.map(a=>f(a));if(x(t))return t;let r={};for(let[a,n]of Object.entries(t))if(a.startsWith("@")){let s=a.slice(1),c=V(s);r[c]=n;}else {let s=V(a);n&&typeof n=="object"&&!Array.isArray(n)?x(n)?r[s]=n:r[s]=f(n):Array.isArray(n)?r[s]=n.map(c=>typeof c=="object"&&c&&!Array.isArray(c)?f(c):c):r[s]=n;}return r}function u(t){return e.pipe(t,e.transform(r=>h(r)))}function R(t){return e.pipe(t,e.transform(r=>f(r)))}function M(t){let r={};for(let a in t.entries){let n=w.has(a),s=a.charAt(0).toUpperCase()+a.slice(1),c=n?`@${s}`:s;r[c]=t.entries[a];}return e.object(r)}var X=e.union([e.literal("CASH"),e.literal("BANK"),e.literal("RID"),e.literal("RIBA"),e.literal("SPECIFIC_CODE")]),U=e.object({currencyCode:e.optional(e.string()),creditLimit:e.optional(e.string()),c_PaymentType:e.optional(X),c_SpecPaymentTypeCode:e.optional(e.string()),s_PaymentType:e.optional(X),s_SpecPaymentTypeCode:e.optional(e.string()),enableElectronicInvoicing:e.optional(e.union([e.literal("true"),e.literal("false"),e.boolean()])),electronicInvoicingType:e.optional(e.string())});u(U);var ue=M(U),k=e.object({key:e.string(),value:e.string()});u(k);var ge=M(k),O=e.union([e.literal(0),e.literal(1)]),W=e.union([e.literal("ENABLED"),e.literal("DISABLED"),e.literal("WARNING"),e.literal("BLACKLISTED")]),Re=e.union([e.literal("CUSTOMER"),e.literal("SUPPLIER"),e.literal("GENERAL")]),G=e.union([e.literal("S"),e.literal("N"),e.literal("T"),e.literal("M")]),$=e.object({acceptProfilingPolicies:e.optional(O),acceptPrivacyPolicies:e.optional(O),acceptNewsletterPolicies:e.optional(O)});u($);var Se=M($),he=e.object({recordCode:e.optional(e.pipe(e.string(),e.minLength(6),e.maxLength(6))),insertCriteria:e.optional(G),createdDate:e.optional(e.string()),recordType:e.optional(e.union([Re],"CUSTOMER")),recordStatus:e.optional(e.union([W],"ENABLED")),moniker:e.optional(e.string()),name:e.optional(e.string()),extraInfo:e.optional(e.string()),languageCode:e.pipe(e.string(),e.minLength(2),e.maxLength(2)),address:e.optional(e.string()),zipCode:e.optional(e.string()),cityName:e.optional(e.string()),countyCode:e.optional(e.string()),stateCode:e.optional(e.string()),categoryCode:e.optional(e.string()),firstPhoneNumber:e.optional(e.string()),mobilePhoneNumber:e.optional(e.string()),email:e.optional(e.string()),gender:e.optional(e.string()),birthDate:e.optional(e.string()),fiscalCode:e.optional(e.string()),vatCode:e.optional(e.string()),accountPolicies:e.optional($),financialDetail:e.optional(U),dynamicFields:e.optional(k)}),F=u(he);R(F);var S=e.object({"@RecordCode":e.optional(e.pipe(e.string(),e.minLength(5),e.maxLength(6))),"@InsertCriteria":e.optional(G),CreatedDate:e.optional(e.string()),ModifiedDate:e.optional(e.string()),RecordType:e.optional(e.union([e.literal("CUSTOMER"),e.literal("SUPPLIER"),e.literal("GENERAL")])),LoginType:e.optional(e.string()),RecordStatus:e.optional(W),Moniker:e.optional(e.string()),Name:e.optional(e.string()),ExtraInfo:e.optional(e.string()),LanguageCode:e.optional(e.pipe(e.string(),e.minLength(1),e.maxLength(2))),Address:e.optional(e.string()),ZipCode:e.optional(e.string()),CityName:e.optional(e.string()),CountyCode:e.optional(e.string()),StateCode:e.optional(e.string()),CategoryCode:e.optional(e.string()),PromoterCode:e.optional(e.string()),FirstPhoneNumber:e.optional(e.string()),MobilePhoneNumber:e.optional(e.string()),Email:e.optional(e.string()),Gender:e.optional(e.string()),BirthDate:e.optional(e.string()),EncryptedPassword:e.optional(e.union([e.literal("true"),e.literal("false"),e.boolean()])),FiscalCode:e.optional(e.string()),VatCode:e.optional(e.string()),NewsletterDisabled:e.optional(e.union([e.literal("true"),e.literal("false"),e.boolean()])),SupplierRefMasterRecords:e.optional(e.any()),AccountPolicies:e.optional(Se),FinancialDetail:e.optional(ue),DynamicFields:e.optional(e.array(ge))});var fe=e.object({minDate:e.string(),maxDate:e.string()}),v=e.optional(e.pipe(e.string(),e.minLength(2),e.maxLength(2))),ye=e.object({searchType:e.literal("CODE"),recordCode:e.pipe(e.string(),e.minLength(5),e.maxLength(6)),languageCode:v}),Ee=e.object({searchType:e.literal("NAME"),name:e.string(),city:e.optional(e.string()),languageCode:v}),Te=e.object({searchType:e.literal("VATCODE"),vatCode:e.string(),phoneNumber:e.optional(e.string()),languageCode:v}),Ce=e.object({searchType:e.literal("ZONE"),zipCode:e.string(),countyCode:e.string(),city:e.optional(e.string()),languageCode:v}),Ae=e.object({searchType:e.literal("CATEGORY"),categoryCode:e.string(),languageCode:v}),xe=e.object({searchType:e.literal("EMAIL"),email:e.string(),languageCode:v}),Me=e.object({searchType:e.literal("LASTMODDATE"),lastModificationDate:fe,languageCode:v}),De=e.object({searchType:e.literal("SEARCH_FIELD"),searchFieldValue:e.string(),languageCode:v}),be=e.object({searchType:e.literal("EXTERNAL_REF_CODE"),searchFieldValue:e.string(),languageCode:v}),Pe=e.union([ye,Ee,Te,Ce,Ae,xe,Me,De,be]),Le=t=>{if(!("@RecordCode"in t))return t;let r=t["@RecordCode"];if(!r)return t;let{["@RecordCode"]:a,...n}=t;return {...n,RecordCode:r}},Ie=e.pipe(u(Pe),e.transform(t=>Le(t))),Q=e.pipe(e.object({RqHeader:C,SearchMasterRecord:Ie}),e.transform(t=>{let{SearchMasterRecord:r,RqHeader:a,...n}=t;return {RqHeader:a,...r,...n}})),Ne=e.object({MasterRecordDetail:e.optional(e.pipe(e.union([e.array(S),S]),e.transform(t=>{if(t)return Array.isArray(t)?t:[t]})))}),J=R(e.object({RsStatus:A,MasterRecordList:e.optional(Ne)}));var Z=e.object({RqHeader:C,MasterRecordDetail:S}),Y=R(e.object({RsStatus:A,MasterRecordDetail:e.optional(S)}));function ee(t){return {success:true,data:t}}function m(t){return {success:false,error:t}}function we(t,r){try{let a=new URL(t),s=(a.pathname.endsWith("/")?a.pathname.slice(0,-1):a.pathname)+r;return new URL(s,a)}catch(a){throw new l("validation",`Invalid baseURL: ${a instanceof Error?a.message:"Invalid URL format"}`)}}function te(t,r){if(!r.startsWith("/"))throw new l("validation",`Invalid endpoint: endpoint must start with '/' but got '${r}'`);let a=t.replace(/\/$/,""),n=we(a,r);if(n.protocol!=="http:"&&n.protocol!=="https:")throw new l("validation",`Invalid protocol: baseURL must use http:// or https:// but got '${n.protocol}'`);return n.toString()}function re(t){let r=new AbortController;if(!t||t<=0)return {signal:r.signal};let a=setTimeout(()=>r.abort(),t);return {signal:r.signal,clear:()=>clearTimeout(a)}}function oe(t,r){return {[t]:r}}var D={SEARCH_REQUEST:"SearchMasterRecordRQ",SEARCH_RESPONSE:"SearchMasterRecordRS",UPSERT_REQUEST:"ManageMasterRecordRQ",UPSERT_RESPONSE:"ManageMasterRecordRS"},K=class{constructor(r){this.options=r;}createRqHeader(){return {"@HostID":this.options.hostID,"@Xtoken":this.options.xtoken,"@Interface":"WEB","@UserName":"WEB",...this.options.languageCode&&{"@LanguageCode":this.options.languageCode}}}createUrl(r){return te(this.options.baseURL,r)}get endpoints(){return {search:"/interop/masterRecords/v2/rest/Search",upsert:"/interop/masterRecords/v2/rest/InsertOrUpdate"}}handleApiStatus(r){let a=r.rsStatus,n=a?.status;return n!=="OK"?m(T(a.errorDescription,n,a.errorCode)):ee(r)}toAvesError(r,a){if(r instanceof l)return r;if(r instanceof ValiError){let n=N(r.issues);return E(`Validation error: ${n}`)}return r instanceof Error?I(r.message):I(a)}async request(r,a,n,s){let{signal:c,clear:g}=re(this.options.timeoutMs??3e4);try{let p=this.createUrl(r),ae=z(a),b=await request(p,{method:"POST",headers:{"Content-Type":"application/xml"},body:ae,signal:c}),j=await b.body.text();if(b.statusCode!==200)return m(T(j,"ERROR",b.statusCode));let B=q(j)[n];if(!B)return m(E(`Invalid response structure: missing root element '${n}'`));let P=safeParse(s,B);if(!P.success){let ne=N(P.issues);return m(E(`Invalid response format: ${ne}`))}return this.handleApiStatus(P.output)}catch(p){return H(p)?m(T("Request timed out","TIMEOUT")):m(this.toAvesError(p,"Unknown error occurred"))}finally{g?.();}}async search(r){try{let a=parse(Q,{RqHeader:this.createRqHeader(),SearchMasterRecord:r}),n=oe(D.SEARCH_REQUEST,a);return this.request(this.endpoints.search,n,D.SEARCH_RESPONSE,J)}catch(a){return m(this.toAvesError(a,"Validation error occurred during search"))}}async upsertRecord(r){try{let a=parse(F,r),n=parse(Z,{RqHeader:this.createRqHeader(),MasterRecordDetail:a}),s=oe(D.UPSERT_REQUEST,n);return this.request(this.endpoints.upsert,s,D.UPSERT_RESPONSE,Y)}catch(a){return m(this.toAvesError(a,"Validation error occurred during upsert"))}}};
2
- export{K as AvesClient,l as AvesError};//# sourceMappingURL=index.js.map
1
+ import {request}from'undici';import*as e from'valibot';import {ValiError,safeParse,parse}from'valibot';import {XMLParser,XMLBuilder}from'fast-xml-parser';var L={VALIDATION:"validation",API:"api",UNKNOWN:"unknown"},l=class extends Error{constructor(a,n,s,c){super(n);this.kind=a;this.message=n;this.status=s;this.code=c;this.name="AvesError",this.status=s?.toLowerCase(),this.code=this.parseCode(c);}parseCode(a){return typeof a=="string"?Number.parseInt(a):a??0}};function E(t){return new l(L.VALIDATION,t)}function T(t,r,a){return new l(L.API,t,r,a)}function I(t){return new l(L.UNKNOWN,t)}function N(t){return t.map(r=>{let a=r.path&&r.path.length>0?r.path.map(s=>typeof s=="string"||typeof s=="number"?String(s):"key"in s?String(s.key):"").filter(Boolean).join("."):void 0,n=r.message??"Invalid value";return a?`${a}: ${n}`:n}).join("; ")}function H(t){return t instanceof Error&&t.name==="AbortError"}var ce={ignoreAttributes:false,attributeNamePrefix:"@",parseAttributeValue:false,trimValues:true,ignoreNameSpace:true,removeNSPrefix:true,parseTagValue:false},le={ignoreAttributes:false,attributeNamePrefix:"@",suppressEmptyNode:true},pe=new XMLParser(ce),ve=new XMLBuilder(le);function z(t){try{return ve.build(t)}catch(r){throw new l("validation",`Failed to convert JSON to XML: ${r instanceof Error?r.message:"Unknown error"}`)}}function q(t){try{return pe.parse(t)}catch(r){throw new l("validation",`Failed to convert XML to JSON: ${r instanceof Error?r.message:"Unknown error"}`)}}var C=e.object({"@HostID":e.pipe(e.string(),e.minLength(6),e.maxLength(6)),"@Xtoken":e.string(),"@Interface":e.literal("WEB"),"@UserName":e.literal("WEB"),"@LanguageCode":e.optional(e.pipe(e.string(),e.minLength(2),e.maxLength(2)))}),me=e.optional(e.pipe(e.string(),e.transform(t=>t.split(",")))),A=e.pipe(e.object({"@Status":e.union([e.literal("OK"),e.literal("ERROR"),e.literal("WARNING"),e.literal("TIMEOUT")]),ErrorCode:e.optional(e.pipe(e.union([e.string(),e.number()]),e.transform(t=>Number(t)))),ErrorDescription:e.optional(e.string()),Warnings:me}),e.transform(t=>({status:t["@Status"],errorCode:t.ErrorCode,errorDescription:t.ErrorDescription,warnings:t.Warnings})));function ue(t){return t.charAt(0).toUpperCase()+t.slice(1)}function V(t){return t.charAt(0).toLowerCase()+t.slice(1)}function x(t){return t instanceof Date||t instanceof RegExp||t instanceof Map||t instanceof Set||t instanceof Error}var w=new Set(["recordCode","insertCriteria","currencyCode","creditLimit","c_PaymentType","c_SpecPaymentTypeCode","s_PaymentType","s_SpecPaymentTypeCode","enableElectronicInvoicing","electronicInvoicingType","key","value","minDate","maxDate","hostID","xtoken","interface","userName","status","acceptProfilingPolicies","acceptPrivacyPolicies","acceptNewsletterPolicies"]);function S(t){if(!t||typeof t!="object")return t;if(Array.isArray(t))return t.map(a=>S(a));if(x(t))return t;let r={};for(let[a,n]of Object.entries(t)){let s=w.has(a),c=ue(a),g=s?`@${c}`:c;n&&typeof n=="object"&&!Array.isArray(n)?x(n)?r[g]=n:r[g]=S(n):Array.isArray(n)?r[g]=n.map(p=>typeof p=="object"&&p&&!Array.isArray(p)?S(p):p):r[g]=n;}return r}function f(t){if(!t||typeof t!="object")return t;if(Array.isArray(t))return t.map(a=>f(a));if(x(t))return t;let r={};for(let[a,n]of Object.entries(t))if(a.startsWith("@")){let s=a.slice(1),c=V(s);r[c]=n;}else {let s=V(a);n&&typeof n=="object"&&!Array.isArray(n)?x(n)?r[s]=n:r[s]=f(n):Array.isArray(n)?r[s]=n.map(c=>typeof c=="object"&&c&&!Array.isArray(c)?f(c):c):r[s]=n;}return r}function d(t){return e.pipe(t,e.transform(r=>S(r)))}function R(t){return e.pipe(t,e.transform(r=>f(r)))}function M(t){let r={};for(let a in t.entries){let n=w.has(a),s=a.charAt(0).toUpperCase()+a.slice(1),c=n?`@${s}`:s;r[c]=t.entries[a];}return e.object(r)}var X=e.union([e.literal("CASH"),e.literal("BANK"),e.literal("RID"),e.literal("RIBA"),e.literal("SPECIFIC_CODE")]),U=e.object({currencyCode:e.optional(e.string()),creditLimit:e.optional(e.string()),c_PaymentType:e.optional(X),c_SpecPaymentTypeCode:e.optional(e.string()),s_PaymentType:e.optional(X),s_SpecPaymentTypeCode:e.optional(e.string()),enableElectronicInvoicing:e.optional(e.union([e.literal("true"),e.literal("false"),e.boolean()])),electronicInvoicingType:e.optional(e.string())});d(U);var de=M(U),k=e.object({key:e.string(),value:e.string()});d(k);var ge=M(k),O=e.union([e.literal(0),e.literal(1)]),W=e.union([e.literal("ENABLED"),e.literal("DISABLED"),e.literal("WARNING"),e.literal("BLACKLISTED")]),Re=e.union([e.literal("CUSTOMER"),e.literal("SUPPLIER"),e.literal("GENERAL")]),G=e.union([e.literal("S"),e.literal("N"),e.literal("T"),e.literal("M")]),F=e.object({acceptProfilingPolicies:e.optional(O),acceptPrivacyPolicies:e.optional(O),acceptNewsletterPolicies:e.optional(O)});d(F);var he=M(F),Se=e.object({recordCode:e.optional(e.pipe(e.string(),e.minLength(6),e.maxLength(6))),insertCriteria:e.optional(G),createdDate:e.optional(e.string()),recordType:e.optional(e.union([Re],"CUSTOMER")),recordStatus:e.optional(e.union([W],"ENABLED")),moniker:e.optional(e.string()),name:e.optional(e.string()),extraInfo:e.optional(e.string()),languageCode:e.pipe(e.string(),e.minLength(2),e.maxLength(2)),address:e.optional(e.string()),zipCode:e.optional(e.string()),cityName:e.optional(e.string()),countyCode:e.optional(e.string()),stateCode:e.optional(e.string()),categoryCode:e.optional(e.string()),firstPhoneNumber:e.optional(e.string()),mobilePhoneNumber:e.optional(e.string()),email:e.optional(e.string()),gender:e.optional(e.union([e.literal("M"),e.literal("F")])),birthDate:e.optional(e.string()),birthCity:e.optional(e.string()),birthCounty:e.optional(e.string()),fiscalCode:e.optional(e.string()),vatCode:e.optional(e.string()),accountPolicies:e.optional(F),financialDetail:e.optional(U),dynamicFields:e.optional(k)}),$=d(Se);R($);var h=e.object({"@RecordCode":e.optional(e.pipe(e.string(),e.minLength(5),e.maxLength(6))),"@InsertCriteria":e.optional(G),CreatedDate:e.optional(e.string()),ModifiedDate:e.optional(e.string()),RecordType:e.optional(e.union([e.literal("CUSTOMER"),e.literal("SUPPLIER"),e.literal("GENERAL")])),LoginType:e.optional(e.string()),RecordStatus:e.optional(W),Moniker:e.optional(e.string()),Name:e.optional(e.string()),ExtraInfo:e.optional(e.string()),LanguageCode:e.optional(e.pipe(e.string(),e.minLength(1),e.maxLength(2))),Address:e.optional(e.string()),ZipCode:e.optional(e.string()),CityName:e.optional(e.string()),CountyCode:e.optional(e.string()),StateCode:e.optional(e.string()),CategoryCode:e.optional(e.string()),PromoterCode:e.optional(e.string()),FirstPhoneNumber:e.optional(e.string()),MobilePhoneNumber:e.optional(e.string()),Email:e.optional(e.string()),Gender:e.optional(e.union([e.literal("M"),e.literal("F")])),BirthDate:e.optional(e.string()),BirthCity:e.optional(e.string()),BirthCounty:e.optional(e.string()),EncryptedPassword:e.optional(e.union([e.literal("true"),e.literal("false"),e.boolean()])),FiscalCode:e.optional(e.string()),VatCode:e.optional(e.string()),NewsletterDisabled:e.optional(e.union([e.literal("true"),e.literal("false"),e.boolean()])),SupplierRefMasterRecords:e.optional(e.any()),AccountPolicies:e.optional(he),FinancialDetail:e.optional(de),DynamicFields:e.optional(e.array(ge))});var fe=e.object({minDate:e.string(),maxDate:e.string()}),v=e.optional(e.pipe(e.string(),e.minLength(2),e.maxLength(2))),ye=e.object({searchType:e.literal("CODE"),recordCode:e.pipe(e.string(),e.minLength(5),e.maxLength(6)),languageCode:v}),Ee=e.object({searchType:e.literal("NAME"),name:e.string(),city:e.optional(e.string()),languageCode:v}),Te=e.object({searchType:e.literal("VATCODE"),vatCode:e.string(),phoneNumber:e.optional(e.string()),languageCode:v}),Ce=e.object({searchType:e.literal("ZONE"),zipCode:e.string(),countyCode:e.string(),city:e.optional(e.string()),languageCode:v}),Ae=e.object({searchType:e.literal("CATEGORY"),categoryCode:e.string(),languageCode:v}),xe=e.object({searchType:e.literal("EMAIL"),email:e.string(),languageCode:v}),Me=e.object({searchType:e.literal("LASTMODDATE"),lastModificationDate:fe,languageCode:v}),be=e.object({searchType:e.literal("SEARCH_FIELD"),searchFieldValue:e.string(),languageCode:v}),De=e.object({searchType:e.literal("EXTERNAL_REF_CODE"),searchFieldValue:e.string(),languageCode:v}),Pe=e.union([ye,Ee,Te,Ce,Ae,xe,Me,be,De]),Le=t=>{if(!("@RecordCode"in t))return t;let r=t["@RecordCode"];if(!r)return t;let{["@RecordCode"]:a,...n}=t;return {...n,RecordCode:r}},Ie=e.pipe(d(Pe),e.transform(t=>Le(t))),Q=e.pipe(e.object({RqHeader:C,SearchMasterRecord:Ie}),e.transform(t=>{let{SearchMasterRecord:r,RqHeader:a,...n}=t;return {RqHeader:a,...r,...n}})),Ne=e.object({MasterRecordDetail:e.optional(e.pipe(e.union([e.array(h),h]),e.transform(t=>{if(t)return Array.isArray(t)?t:[t]})))}),J=R(e.object({RsStatus:A,MasterRecordList:e.optional(Ne)}));var Z=e.object({RqHeader:C,MasterRecordDetail:h}),Y=R(e.object({RsStatus:A,MasterRecordDetail:e.optional(h)}));function ee(t){return {success:true,data:t}}function m(t){return {success:false,error:t}}function we(t,r){try{let a=new URL(t),s=(a.pathname.endsWith("/")?a.pathname.slice(0,-1):a.pathname)+r;return new URL(s,a)}catch(a){throw new l("validation",`Invalid baseURL: ${a instanceof Error?a.message:"Invalid URL format"}`)}}function te(t,r){if(!r.startsWith("/"))throw new l("validation",`Invalid endpoint: endpoint must start with '/' but got '${r}'`);let a=t.replace(/\/$/,""),n=we(a,r);if(n.protocol!=="http:"&&n.protocol!=="https:")throw new l("validation",`Invalid protocol: baseURL must use http:// or https:// but got '${n.protocol}'`);return n.toString()}function re(t){let r=new AbortController;if(!t||t<=0)return {signal:r.signal};let a=setTimeout(()=>r.abort(),t);return {signal:r.signal,clear:()=>clearTimeout(a)}}function oe(t,r){return {[t]:r}}var b={SEARCH_REQUEST:"SearchMasterRecordRQ",SEARCH_RESPONSE:"SearchMasterRecordRS",UPSERT_REQUEST:"ManageMasterRecordRQ",UPSERT_RESPONSE:"ManageMasterRecordRS"},B=class{constructor(r){this.options=r;}createRqHeader(){return {"@HostID":this.options.hostID,"@Xtoken":this.options.xtoken,"@Interface":"WEB","@UserName":"WEB",...this.options.languageCode&&{"@LanguageCode":this.options.languageCode}}}createUrl(r){return te(this.options.baseURL,r)}get endpoints(){return {search:"/interop/masterRecords/v2/rest/Search",upsert:"/interop/masterRecords/v2/rest/InsertOrUpdate"}}handleApiStatus(r){let a=r.rsStatus,n=a?.status;return n!=="OK"?m(T(a.errorDescription,n,a.errorCode)):ee(r)}toAvesError(r,a){if(r instanceof l)return r;if(r instanceof ValiError){let n=N(r.issues);return E(`Validation error: ${n}`)}return r instanceof Error?I(r.message):I(a)}async request(r,a,n,s){let{signal:c,clear:g}=re(this.options.timeoutMs??3e4);try{let p=this.createUrl(r),ae=z(a),D=await request(p,{method:"POST",headers:{"Content-Type":"application/xml"},body:ae,signal:c}),K=await D.body.text();if(D.statusCode!==200)return m(T(K,"ERROR",D.statusCode));let j=q(K)[n];if(!j)return m(E(`Invalid response structure: missing root element '${n}'`));let P=safeParse(s,j);if(!P.success){let ne=N(P.issues);return m(E(`Invalid response format: ${ne}`))}return this.handleApiStatus(P.output)}catch(p){return H(p)?m(T("Request timed out","TIMEOUT")):m(this.toAvesError(p,"Unknown error occurred"))}finally{g?.();}}async search(r){try{let a=parse(Q,{RqHeader:this.createRqHeader(),SearchMasterRecord:r}),n=oe(b.SEARCH_REQUEST,a);return this.request(this.endpoints.search,n,b.SEARCH_RESPONSE,J)}catch(a){return m(this.toAvesError(a,"Validation error occurred during search"))}}async upsertRecord(r){try{let a=parse($,r),n=parse(Z,{RqHeader:this.createRqHeader(),MasterRecordDetail:a}),s=oe(b.UPSERT_REQUEST,n);return this.request(this.endpoints.upsert,s,b.UPSERT_RESPONSE,Y)}catch(a){return m(this.toAvesError(a,"Validation error occurred during upsert"))}}};
2
+ export{B as AvesClient,l as AvesError};//# sourceMappingURL=index.js.map
3
3
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/error.ts","../src/xml-client.ts","../src/schemas/common.ts","../src/utils/case-transform.ts","../src/utils/schema-transform.ts","../src/schemas/master-record.ts","../src/schemas/search.ts","../src/schemas/upsert.ts","../src/utils/result.ts","../src/utils/url.ts","../src/utils/timeout.ts","../src/client.ts"],"names":["ERROR_KINDS","AvesError","kind","message","status","code","validationError","apiError","unknownError","buildDetails","issues","issue","path","segment","text","isAbortError","error","parserOptions","builderOptions","parser","XMLParser","builder","XMLBuilder","jsonToXml","json","xmlToJson","xml","RqHeaderSchema","i","warningsSchema","input","RsStatusSchema","val","camelToPascal","str","pascalToCamel","isSpecialObject","obj","ATTRIBUTE_FIELDS","camelToPascalKeys","item","result","key","value","isAttribute","pascalKey","finalKey","pascalToCamelKeys","strippedKey","camelKey","createApiSchema","inputSchema","d","createResponseSchema","apiSchema","createApiValidationSchema","validationEntries","paymentTypeSchema","FinancialDetailInputSchema","FinancialDetailApiValidationSchema","DynamicFieldsInputSchema","DynamicFieldsApiValidationSchema","flagSchema","recordStatusSchema","recordTypeSchema","insertCriteriaSchema","AccountPoliciesInputSchema","AccountPoliciesApiValidationSchema","MasterRecordDetailSchema","MasterRecordDetailApiSchema","MasterRecordDetailApiValidationSchema","LastModificationDateInputSchema","o","languageCodeField","CodeSearchSchema","NameSearchSchema","VatCodeSearchSchema","ZoneSearchSchema","CategorySearchSchema","EmailSearchSchema","LastModDateSearchSchema","SearchFieldSearchSchema","ExternalRefCodeSearchSchema","SearchMasterRecordSchema","transformRecordCode","recordCode","_discard","rest","SearchMasterRecordApiSchema","SearchMasterRecordRequestSchema","searchFields","RqHeader","MasterRecordListApiSchema","SearchMasterRecordResponseSchema","ManageMasterRecordRequestSchema","y","ManageMasterRecordResponseSchema","ok","data","err","buildUrl","baseURL","endpoint","base","combinedPath","parseUrl","normalizedBaseURL","url","createTimeoutSignal","timeoutMs","controller","timeoutId","createRootElement","name","object","XML_ROOT_ELEMENTS","AvesClient","options","output","rsStatus","defaultMessage","ValiError","details","requestBody","responseRootKey","responseSchema","signal","clear","xmlBody","response","r","responseText","rootElement","parseResult","safeParse","params","requestData","parse","record","apiRecord"],"mappings":"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","file":"index.js","sourcesContent":["import { BaseIssue } from 'valibot';\n\nexport const ERROR_KINDS = {\n VALIDATION: 'validation',\n API: 'api',\n UNKNOWN: 'unknown',\n} as const;\n\nexport type ErrorKind = (typeof ERROR_KINDS)[keyof typeof ERROR_KINDS];\n\n/**\n * Error thrown by AVES API operations\n */\nexport class AvesError extends Error {\n constructor(\n public readonly kind: ErrorKind,\n public readonly message: string,\n public readonly status?: string,\n public readonly code?: number | string,\n ) {\n super(message);\n this.name = 'AvesError';\n this.status = status?.toLowerCase();\n this.code = this.parseCode(code);\n }\n\n private parseCode(code?: number | string): number {\n if (typeof code === 'string') {\n return Number.parseInt(code);\n }\n return code ?? 0;\n }\n}\n\nexport function validationError(message: string): AvesError {\n return new AvesError(ERROR_KINDS.VALIDATION, message);\n}\n\nexport function apiError(\n message: string,\n status?: string,\n code?: number | string,\n): AvesError {\n return new AvesError(ERROR_KINDS.API, message, status, code);\n}\n\nexport function unknownError(message: string): AvesError {\n return new AvesError(ERROR_KINDS.UNKNOWN, message);\n}\n\nexport function buildDetails(issues: readonly BaseIssue<unknown>[]): string {\n return issues\n .map((issue) => {\n const path =\n issue.path && issue.path.length > 0\n ? issue.path\n .map((segment) =>\n typeof segment === 'string' || typeof segment === 'number'\n ? String(segment)\n : 'key' in segment\n ? String((segment as any).key)\n : '',\n )\n .filter(Boolean)\n .join('.')\n : undefined;\n\n const text = issue.message ?? 'Invalid value';\n return path ? `${path}: ${text}` : text;\n })\n .join('; ');\n}\n\nexport function isAbortError(error: unknown): boolean {\n return error instanceof Error && error.name === 'AbortError';\n}\n","import { XMLParser, XMLBuilder } from 'fast-xml-parser';\nimport { AvesError } from './error.js';\n\nconst parserOptions = {\n ignoreAttributes: false,\n attributeNamePrefix: '@',\n parseAttributeValue: false,\n trimValues: true,\n ignoreNameSpace: true,\n removeNSPrefix: true,\n parseTagValue: false,\n};\n\nconst builderOptions = {\n ignoreAttributes: false,\n attributeNamePrefix: '@',\n suppressEmptyNode: true,\n};\n\nconst parser = new XMLParser(parserOptions);\nconst builder = new XMLBuilder(builderOptions);\n\n/**\n * Converts JSON to XML string\n */\nexport function jsonToXml(json: Record<string, unknown>): string {\n try {\n return builder.build(json);\n } catch (error) {\n throw new AvesError(\n 'validation',\n `Failed to convert JSON to XML: ${error instanceof Error ? error.message : 'Unknown error'}`,\n );\n }\n}\n\n/**\n * Converts XML string to JSON object\n * Attributes are parsed with @ prefix\n */\nexport function xmlToJson(xml: string): Record<string, unknown> {\n try {\n return parser.parse(xml);\n } catch (error) {\n throw new AvesError(\n 'validation',\n `Failed to convert XML to JSON: ${error instanceof Error ? error.message : 'Unknown error'}`,\n );\n }\n}\n","import * as v from 'valibot';\n\n/**\n * Request header schema with authentication credentials\n */\nexport const RqHeaderSchema = v.object({\n '@HostID': v.pipe(v.string(), v.minLength(6), v.maxLength(6)),\n '@Xtoken': v.string(),\n '@Interface': v.literal('WEB'),\n '@UserName': v.literal('WEB'),\n '@LanguageCode': v.optional(\n v.pipe(v.string(), v.minLength(2), v.maxLength(2)),\n ),\n});\n\nconst warningsSchema = v.optional(\n v.pipe(\n v.string(),\n v.transform((input) => input.split(',')),\n ),\n);\n\n/**\n * Response status schema indicating success, error, or warning\n */\nexport const RsStatusSchema = v.pipe(\n v.object({\n '@Status': v.union([\n v.literal('OK'),\n v.literal('ERROR'),\n v.literal('WARNING'),\n v.literal('TIMEOUT'),\n ]),\n ErrorCode: v.optional(\n v.pipe(\n v.union([v.string(), v.number()]),\n v.transform((val) => Number(val)),\n ),\n ),\n ErrorDescription: v.optional(v.string()),\n Warnings: warningsSchema,\n }),\n v.transform((input) => {\n return {\n status: input['@Status'],\n errorCode: input.ErrorCode,\n errorDescription: input.ErrorDescription,\n warnings: input.Warnings,\n };\n }),\n);\n","type CamelFromDelimiter<S extends string> = S extends `${infer H}_${infer T}`\n ? `${H}${Capitalize<CamelFromDelimiter<T>>}`\n : S extends `${infer H}-${infer T}`\n ? `${H}${Capitalize<CamelFromDelimiter<T>>}`\n : S;\n\ntype ToCamelCase<S extends string> =\n CamelFromDelimiter<S> extends `${infer F}${infer R}`\n ? `${Lowercase<F>}${R}`\n : CamelFromDelimiter<S>;\n\ntype PascalFromDelimiter<S extends string> = S extends `${infer H}_${infer T}`\n ? `${Capitalize<H>}${Capitalize<PascalFromDelimiter<T>>}`\n : S extends `${infer H}-${infer T}`\n ? `${Capitalize<H>}${Capitalize<PascalFromDelimiter<T>>}`\n : S;\n\ntype ToPascalCase<S extends string> =\n PascalFromDelimiter<S> extends `${infer F}${infer R}`\n ? `${Capitalize<F>}${R}`\n : Capitalize<PascalFromDelimiter<S>>;\n\nexport type Camelize<T> = T extends readonly (infer U)[]\n ? Camelize<U>[]\n : T extends object\n ? {\n [K in keyof T as K extends `@${infer Rest}`\n ? ToCamelCase<Rest> // Strip @ prefix and camelCase the rest\n : ToCamelCase<K & string>]: Camelize<T[K]>;\n }\n : T;\n\nexport type Pascalize<T> = T extends readonly (infer U)[]\n ? Pascalize<U>[]\n : T extends object\n ? {\n [K in keyof T as K extends `@${infer Rest}`\n ? ToPascalCase<Rest> // Strip @ prefix and PascalCase the rest\n : ToPascalCase<K & string>]: Pascalize<T[K]>;\n }\n : T;\n\nfunction camelToPascal(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nfunction pascalToCamel(str: string): string {\n return str.charAt(0).toLowerCase() + str.slice(1);\n}\n\n/**\n * Checks if an object is a special built-in type that should not be transformed\n */\nfunction isSpecialObject(obj: unknown): boolean {\n return (\n obj instanceof Date ||\n obj instanceof RegExp ||\n obj instanceof Map ||\n obj instanceof Set ||\n obj instanceof Error\n );\n}\n\nexport const ATTRIBUTE_FIELDS = new Set([\n 'recordCode',\n 'insertCriteria',\n 'currencyCode',\n 'creditLimit',\n 'c_PaymentType',\n 'c_SpecPaymentTypeCode',\n 's_PaymentType',\n 's_SpecPaymentTypeCode',\n 'enableElectronicInvoicing',\n 'electronicInvoicingType',\n 'key',\n 'value',\n 'minDate',\n 'maxDate',\n 'hostID',\n 'xtoken',\n 'interface',\n 'userName',\n 'status',\n 'acceptProfilingPolicies',\n 'acceptPrivacyPolicies',\n 'acceptNewsletterPolicies',\n]);\n\n/**\n * Transforms object keys from camelCase to PascalCase\n * Adds @ prefix to fields in ATTRIBUTE_FIELDS for XML attributes\n */\nexport function camelToPascalKeys<T>(obj: T): Pascalize<T> {\n if (!obj || typeof obj !== 'object') {\n return obj as Pascalize<T>;\n }\n\n if (Array.isArray(obj)) {\n return obj.map((item) => camelToPascalKeys(item)) as Pascalize<T>;\n }\n\n if (isSpecialObject(obj)) {\n return obj as Pascalize<T>;\n }\n\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj)) {\n const isAttribute = ATTRIBUTE_FIELDS.has(key);\n const pascalKey = camelToPascal(key);\n const finalKey = isAttribute ? `@${pascalKey}` : pascalKey;\n\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n if (isSpecialObject(value)) {\n result[finalKey] = value;\n } else {\n result[finalKey] = camelToPascalKeys(value as Record<string, unknown>);\n }\n } else if (Array.isArray(value)) {\n result[finalKey] = value.map((item) =>\n typeof item === 'object' && item && !Array.isArray(item)\n ? camelToPascalKeys(item as Record<string, unknown>)\n : item,\n );\n } else {\n result[finalKey] = value;\n }\n }\n return result as Pascalize<T>;\n}\n\n/**\n * Transforms object keys from PascalCase to camelCase\n * Strips @ prefix from XML attributes\n */\nexport function pascalToCamelKeys<T>(obj: T): Camelize<T> {\n if (!obj || typeof obj !== 'object') {\n return obj as Camelize<T>;\n }\n\n if (Array.isArray(obj)) {\n return obj.map((item) => pascalToCamelKeys(item)) as Camelize<T>;\n }\n\n if (isSpecialObject(obj)) {\n return obj as Camelize<T>;\n }\n\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj)) {\n if (key.startsWith('@')) {\n const strippedKey = key.slice(1);\n const camelKey = pascalToCamel(strippedKey);\n result[camelKey] = value;\n } else {\n const camelKey = pascalToCamel(key);\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n if (isSpecialObject(value)) {\n result[camelKey] = value;\n } else {\n result[camelKey] = pascalToCamelKeys(\n value as Record<string, unknown>,\n );\n }\n } else if (Array.isArray(value)) {\n result[camelKey] = value.map((item) =>\n typeof item === 'object' && item && !Array.isArray(item)\n ? pascalToCamelKeys(item as Record<string, unknown>)\n : item,\n );\n } else {\n result[camelKey] = value;\n }\n }\n }\n return result as Camelize<T>;\n}\n","import * as v from 'valibot';\nimport type { BaseSchema, ObjectEntries } from 'valibot';\nimport {\n camelToPascalKeys,\n pascalToCamelKeys,\n ATTRIBUTE_FIELDS,\n} from './case-transform.js';\n\n/**\n * Creates a schema that transforms camelCase input to PascalCase for API requests\n */\nexport function createApiSchema<TInput extends BaseSchema<any, any, any>>(\n inputSchema: TInput,\n) {\n return v.pipe(\n inputSchema,\n v.transform((input) => camelToPascalKeys(input)),\n );\n}\n\n/**\n * Creates a schema that transforms PascalCase API responses to camelCase\n */\nexport function createResponseSchema<TApi extends BaseSchema<any, any, any>>(\n apiSchema: TApi,\n) {\n return v.pipe(\n apiSchema,\n v.transform((input) => pascalToCamelKeys(input)),\n );\n}\n\n/**\n * Creates a validation schema for already-transformed PascalCase data with @ attributes\n * Used for nested objects like AccountPolicies, FinancialDetail, DynamicFields\n * Takes the same input schema used in createApiSchema and generates the validation schema\n * by directly using the ATTRIBUTE_FIELDS logic to determine which fields become attributes\n */\nexport function createApiValidationSchema<TEntries extends ObjectEntries>(\n inputSchema: v.ObjectSchema<TEntries, any>,\n) {\n const validationEntries: Record<string, any> = {};\n\n // Build validation schema based on ATTRIBUTE_FIELDS\n for (const key in inputSchema.entries) {\n const isAttribute = ATTRIBUTE_FIELDS.has(key);\n const pascalKey = key.charAt(0).toUpperCase() + key.slice(1);\n const finalKey = isAttribute ? `@${pascalKey}` : pascalKey;\n\n validationEntries[finalKey] = inputSchema.entries[key];\n }\n\n return v.object(validationEntries as TEntries);\n}\n","import * as v from 'valibot';\nimport {\n createApiSchema,\n createResponseSchema,\n createApiValidationSchema,\n} from '../utils/schema-transform.js';\n\nconst paymentTypeSchema = v.union([\n v.literal('CASH'),\n v.literal('BANK'),\n v.literal('RID'),\n v.literal('RIBA'),\n v.literal('SPECIFIC_CODE'),\n]);\n\nconst FinancialDetailInputSchema = v.object({\n currencyCode: v.optional(v.string()),\n creditLimit: v.optional(v.string()),\n c_PaymentType: v.optional(paymentTypeSchema),\n c_SpecPaymentTypeCode: v.optional(v.string()),\n s_PaymentType: v.optional(paymentTypeSchema),\n s_SpecPaymentTypeCode: v.optional(v.string()),\n enableElectronicInvoicing: v.optional(v.union([v.literal('true'), v.literal('false'), v.boolean()])),\n electronicInvoicingType: v.optional(v.string()),\n});\n\n/**\n * Financial detail schema for API requests (transforms to PascalCase)\n */\nexport const FinancialDetailSchema = createApiSchema(\n FinancialDetailInputSchema,\n);\n\n/**\n * Financial detail validation schema (already transformed PascalCase with @ attributes)\n */\nexport const FinancialDetailApiValidationSchema = createApiValidationSchema(\n FinancialDetailInputSchema,\n);\n\nconst DynamicFieldsInputSchema = v.object({\n key: v.string(),\n value: v.string(),\n});\n\n/**\n * Dynamic fields schema for API requests (transforms to PascalCase)\n */\nexport const DynamicFieldsSchema = createApiSchema(DynamicFieldsInputSchema);\n\n/**\n * Dynamic fields validation schema (already transformed PascalCase with @ attributes)\n */\nexport const DynamicFieldsApiValidationSchema = createApiValidationSchema(\n DynamicFieldsInputSchema,\n);\n\nconst flagSchema = v.union([v.literal(0), v.literal(1)]);\n\nconst recordStatusSchema = v.union([\n v.literal('ENABLED'),\n v.literal('DISABLED'),\n v.literal('WARNING'),\n v.literal('BLACKLISTED'),\n]);\n\nconst recordTypeSchema = v.union([\n v.literal('CUSTOMER'),\n v.literal('SUPPLIER'),\n v.literal('GENERAL'),\n]);\n\nconst insertCriteriaSchema = v.union([\n v.literal('S'),\n v.literal('N'),\n v.literal('T'),\n v.literal('M'),\n]);\n\nconst AccountPoliciesInputSchema = v.object({\n acceptProfilingPolicies: v.optional(flagSchema),\n acceptPrivacyPolicies: v.optional(flagSchema),\n acceptNewsletterPolicies: v.optional(flagSchema),\n});\n\n/**\n * Account policies schema for API requests (transforms to PascalCase with @ attributes)\n */\nexport const AccountPoliciesSchema = createApiSchema(\n AccountPoliciesInputSchema,\n);\n\n/**\n * Account policies validation schema (already transformed PascalCase with @ attributes)\n */\nexport const AccountPoliciesApiValidationSchema = createApiValidationSchema(\n AccountPoliciesInputSchema,\n);\n\n/**\n * Master record detail input schema (camelCase)\n */\nexport const MasterRecordDetailSchema = v.object({\n recordCode: v.optional(v.pipe(v.string(), v.minLength(6), v.maxLength(6))),\n insertCriteria: v.optional(insertCriteriaSchema),\n createdDate: v.optional(v.string()),\n recordType: v.optional(v.union([recordTypeSchema], 'CUSTOMER')),\n recordStatus: v.optional(v.union([recordStatusSchema], 'ENABLED')),\n moniker: v.optional(v.string()),\n name: v.optional(v.string()),\n extraInfo: v.optional(v.string()),\n languageCode: v.pipe(v.string(), v.minLength(2), v.maxLength(2)),\n address: v.optional(v.string()),\n zipCode: v.optional(v.string()),\n cityName: v.optional(v.string()),\n countyCode: v.optional(v.string()),\n stateCode: v.optional(v.string()),\n categoryCode: v.optional(v.string()),\n firstPhoneNumber: v.optional(v.string()),\n mobilePhoneNumber: v.optional(v.string()),\n email: v.optional(v.string()),\n gender: v.optional(v.string()),\n birthDate: v.optional(v.string()),\n fiscalCode: v.optional(v.string()),\n vatCode: v.optional(v.string()),\n accountPolicies: v.optional(AccountPoliciesInputSchema),\n financialDetail: v.optional(FinancialDetailInputSchema),\n dynamicFields: v.optional(DynamicFieldsInputSchema),\n});\n\n/**\n * Master record detail schema for API requests (transforms to PascalCase)\n */\nexport const MasterRecordDetailApiSchema = createApiSchema(\n MasterRecordDetailSchema,\n);\n\n/**\n * Master record detail response schema (transforms to camelCase)\n */\nexport const MasterRecordDetailResponseSchema = createResponseSchema(\n MasterRecordDetailApiSchema,\n);\n\n/**\n * Master record detail API validation schema (PascalCase with @ attributes)\n * Used for both search responses and upsert requests\n * All fields are optional as responses may not contain all fields\n */\nexport const MasterRecordDetailApiValidationSchema = v.object({\n '@RecordCode': v.optional(v.pipe(v.string(), v.minLength(5), v.maxLength(6))),\n '@InsertCriteria': v.optional(insertCriteriaSchema),\n CreatedDate: v.optional(v.string()),\n ModifiedDate: v.optional(v.string()),\n RecordType: v.optional(\n v.union([\n v.literal('CUSTOMER'),\n v.literal('SUPPLIER'),\n v.literal('GENERAL'),\n ]),\n ),\n LoginType: v.optional(v.string()),\n RecordStatus: v.optional(recordStatusSchema),\n Moniker: v.optional(v.string()),\n Name: v.optional(v.string()),\n ExtraInfo: v.optional(v.string()),\n LanguageCode: v.optional(v.pipe(v.string(), v.minLength(1), v.maxLength(2))),\n Address: v.optional(v.string()),\n ZipCode: v.optional(v.string()),\n CityName: v.optional(v.string()),\n CountyCode: v.optional(v.string()),\n StateCode: v.optional(v.string()),\n CategoryCode: v.optional(v.string()),\n PromoterCode: v.optional(v.string()),\n FirstPhoneNumber: v.optional(v.string()),\n MobilePhoneNumber: v.optional(v.string()),\n Email: v.optional(v.string()),\n Gender: v.optional(v.string()),\n BirthDate: v.optional(v.string()),\n EncryptedPassword: v.optional(v.union([v.literal('true'), v.literal('false'), v.boolean()])),\n FiscalCode: v.optional(v.string()),\n VatCode: v.optional(v.string()),\n NewsletterDisabled: v.optional(v.union([v.literal('true'), v.literal('false'), v.boolean()])),\n SupplierRefMasterRecords: v.optional(v.any()),\n AccountPolicies: v.optional(AccountPoliciesApiValidationSchema),\n FinancialDetail: v.optional(FinancialDetailApiValidationSchema),\n DynamicFields: v.optional(v.array(DynamicFieldsApiValidationSchema)),\n});\n","import * as v from 'valibot';\nimport { RqHeaderSchema, RsStatusSchema } from './common.js';\nimport { MasterRecordDetailApiValidationSchema } from './master-record.js';\nimport {\n createApiSchema,\n createResponseSchema,\n} from '../utils/schema-transform.js';\n\nconst LastModificationDateInputSchema = v.object({\n minDate: v.string(),\n maxDate: v.string(),\n});\n\nconst languageCodeField = v.optional(\n v.pipe(v.string(), v.minLength(2), v.maxLength(2)),\n);\n\n/**\n * Search by CODE - requires recordCode\n */\nconst CodeSearchSchema = v.object({\n searchType: v.literal('CODE'),\n recordCode: v.pipe(v.string(), v.minLength(5), v.maxLength(6)),\n languageCode: languageCodeField,\n});\n\n/**\n * Search by NAME - requires name, optionally city\n */\nconst NameSearchSchema = v.object({\n searchType: v.literal('NAME'),\n name: v.string(),\n city: v.optional(v.string()),\n languageCode: languageCodeField,\n});\n\n/**\n * Search by VATCODE - requires vatCode, optionally phoneNumber\n */\nconst VatCodeSearchSchema = v.object({\n searchType: v.literal('VATCODE'),\n vatCode: v.string(),\n phoneNumber: v.optional(v.string()),\n languageCode: languageCodeField,\n});\n\n/**\n * Search by ZONE - requires zipCode and countyCode, optionally city\n */\nconst ZoneSearchSchema = v.object({\n searchType: v.literal('ZONE'),\n zipCode: v.string(),\n countyCode: v.string(),\n city: v.optional(v.string()),\n languageCode: languageCodeField,\n});\n\n/**\n * Search by CATEGORY - requires categoryCode\n */\nconst CategorySearchSchema = v.object({\n searchType: v.literal('CATEGORY'),\n categoryCode: v.string(),\n languageCode: languageCodeField,\n});\n\n/**\n * Search by EMAIL - requires email\n */\nconst EmailSearchSchema = v.object({\n searchType: v.literal('EMAIL'),\n email: v.string(),\n languageCode: languageCodeField,\n});\n\n/**\n * Search by LASTMODDATE - requires lastModificationDate\n */\nconst LastModDateSearchSchema = v.object({\n searchType: v.literal('LASTMODDATE'),\n lastModificationDate: LastModificationDateInputSchema,\n languageCode: languageCodeField,\n});\n\n/**\n * Search by SEARCH FIELD - requires searchFieldValue\n */\nconst SearchFieldSearchSchema = v.object({\n searchType: v.literal('SEARCH_FIELD'),\n searchFieldValue: v.string(),\n languageCode: languageCodeField,\n});\n\n/**\n * Search by EXTERNAL_REF_CODE - requires searchFieldValue\n */\nconst ExternalRefCodeSearchSchema = v.object({\n searchType: v.literal('EXTERNAL_REF_CODE'),\n searchFieldValue: v.string(),\n languageCode: languageCodeField,\n});\n\n/**\n * Search master record input schema (camelCase)\n * Conditional fields based on searchType\n */\nexport const SearchMasterRecordSchema = v.union([\n CodeSearchSchema,\n NameSearchSchema,\n VatCodeSearchSchema,\n ZoneSearchSchema,\n CategorySearchSchema,\n EmailSearchSchema,\n LastModDateSearchSchema,\n SearchFieldSearchSchema,\n ExternalRefCodeSearchSchema,\n]);\n\nconst transformRecordCode = (input: Record<string, unknown>) => {\n if (!('@RecordCode' in input)) return input;\n const recordCode = input['@RecordCode'];\n if (!recordCode) return input;\n const { ['@RecordCode']: _discard, ...rest } = input;\n return {\n ...rest,\n RecordCode: recordCode,\n };\n};\n\n/**\n * Search master record schema for API requests (transforms to PascalCase)\n */\nexport const SearchMasterRecordApiSchema = v.pipe(\n createApiSchema(SearchMasterRecordSchema),\n v.transform((input) => transformRecordCode(input)),\n);\n\n/**\n * Complete search request schema with header\n * Flattens SearchMasterRecord fields to root level\n */\nexport const SearchMasterRecordRequestSchema = v.pipe(\n v.object({\n RqHeader: RqHeaderSchema,\n SearchMasterRecord: SearchMasterRecordApiSchema,\n }),\n v.transform((input) => {\n const { SearchMasterRecord: searchFields, RqHeader, ...rest } = input;\n return {\n RqHeader,\n ...searchFields,\n ...rest,\n };\n }),\n);\n\nconst MasterRecordListApiSchema = v.object({\n MasterRecordDetail: v.optional(\n v.pipe(\n v.union([\n v.array(MasterRecordDetailApiValidationSchema),\n MasterRecordDetailApiValidationSchema,\n ]),\n v.transform((input) => {\n if (!input) return undefined;\n return Array.isArray(input) ? input : [input];\n }),\n ),\n ),\n});\n\n/**\n * Search master record response schema (transforms to camelCase)\n */\nexport const SearchMasterRecordResponseSchema = createResponseSchema(\n v.object({\n RsStatus: RsStatusSchema,\n MasterRecordList: v.optional(MasterRecordListApiSchema),\n }),\n);\n","import * as v from 'valibot';\nimport { RqHeaderSchema, RsStatusSchema } from './common.js';\nimport { MasterRecordDetailApiValidationSchema } from './master-record.js';\nimport { createResponseSchema } from '../utils/schema-transform.js';\n\n/**\n * Complete upsert request schema with header and required InsertCriteria\n */\nexport const ManageMasterRecordRequestSchema = v.object({\n RqHeader: RqHeaderSchema,\n MasterRecordDetail: MasterRecordDetailApiValidationSchema,\n});\n\n/**\n * Upsert master record response schema (transforms to camelCase)\n */\nexport const ManageMasterRecordResponseSchema = createResponseSchema(\n v.object({\n RsStatus: RsStatusSchema,\n MasterRecordDetail: v.optional(MasterRecordDetailApiValidationSchema),\n }),\n);\n","/**\n * Result type for functional error handling\n */\nexport type Result<T, E = Error> =\n | { success: true; data: T }\n | { success: false; error: E };\n\n/**\n * Creates a successful result\n */\nexport function ok<T>(data: T): Result<T, never> {\n return { success: true, data };\n}\n\n/**\n * Creates an error result\n */\nexport function err<E>(error: E): Result<never, E> {\n return { success: false, error };\n}\n","import { AvesError } from '../error.js';\n\nfunction buildUrl(baseURL: string, endpoint: string): URL {\n try {\n const base = new URL(baseURL);\n const basePath = base.pathname.endsWith('/')\n ? base.pathname.slice(0, -1)\n : base.pathname;\n const combinedPath = basePath + endpoint;\n\n return new URL(combinedPath, base);\n } catch (error) {\n throw new AvesError(\n 'validation',\n `Invalid baseURL: ${error instanceof Error ? error.message : 'Invalid URL format'}`,\n );\n }\n}\n\n/**\n * Validates and combines baseURL with endpoint\n * @param baseURL - Base URL (must be http:// or https://)\n * @param endpoint - Endpoint path (must start with /)\n * @returns Combined URL string\n * @throws AvesError if URL is invalid or protocol is not http/https\n */\nexport function parseUrl(baseURL: string, endpoint: string): string {\n if (!endpoint.startsWith('/')) {\n throw new AvesError(\n 'validation',\n `Invalid endpoint: endpoint must start with '/' but got '${endpoint}'`,\n );\n }\n\n const normalizedBaseURL = baseURL.replace(/\\/$/, '');\n\n const url = buildUrl(normalizedBaseURL, endpoint);\n\n if (url.protocol !== 'http:' && url.protocol !== 'https:') {\n throw new AvesError(\n 'validation',\n `Invalid protocol: baseURL must use http:// or https:// but got '${url.protocol}'`,\n );\n }\n\n return url.toString();\n}\n","export interface TimeoutController {\n signal: AbortSignal;\n clear?: () => void;\n}\n\n/**\n * Create an AbortSignal that will automatically abort after `timeoutMs`.\n * If `timeoutMs` is not provided or <= 0, no automatic abort is scheduled.\n */\nexport function createTimeoutSignal(timeoutMs?: number): TimeoutController {\n const controller = new AbortController();\n\n if (!timeoutMs || timeoutMs <= 0) {\n return { signal: controller.signal };\n }\n\n const timeoutId = setTimeout(() => controller.abort(), timeoutMs);\n\n return {\n signal: controller.signal,\n clear: () => clearTimeout(timeoutId),\n };\n}\n","import { request as r } from 'undici';\nimport { BaseIssue, BaseSchema, parse, safeParse, ValiError } from 'valibot';\nimport { jsonToXml, xmlToJson } from './xml-client.js';\nimport {\n SearchMasterRecordRequestSchema,\n SearchMasterRecordResponseSchema,\n} from './schemas/search.js';\nimport {\n ManageMasterRecordRequestSchema,\n ManageMasterRecordResponseSchema,\n} from './schemas/upsert.js';\nimport type {\n AvesClientOptions,\n ManageMasterRecordRS,\n MasterRecordDetail,\n RsStatus,\n SearchMasterRecord,\n SearchMasterRecordRS,\n} from './types.js';\nimport { MasterRecordDetailApiSchema } from './schemas/master-record.js';\nimport type { Result } from './utils/result.js';\nimport { err, ok } from './utils/result.js';\nimport {\n apiError,\n AvesError,\n buildDetails,\n isAbortError,\n unknownError,\n validationError,\n} from './error.js';\nimport { parseUrl } from './utils/url.js';\nimport { createTimeoutSignal } from './utils/timeout.js';\n\nfunction createRootElement<T>(name: XMLRootElementValues, object: T) {\n return {\n [name]: object,\n };\n}\n\nconst XML_ROOT_ELEMENTS = {\n SEARCH_REQUEST: 'SearchMasterRecordRQ',\n SEARCH_RESPONSE: 'SearchMasterRecordRS',\n UPSERT_REQUEST: 'ManageMasterRecordRQ',\n UPSERT_RESPONSE: 'ManageMasterRecordRS',\n} as const;\n\ntype XMLRootElementValues =\n (typeof XML_ROOT_ELEMENTS)[keyof typeof XML_ROOT_ELEMENTS];\n\n/**\n * AVES XML REST API client\n */\nexport class AvesClient {\n /**\n * @param options - Client configuration options\n * @param options.baseURL - Base URL of the AVES API\n * @param options.hostID - 6-digit identification code\n * @param options.xtoken - Authentication token\n * @param options.languageCode - Optional 2-digit language code\n * @param options.timeoutMs - Optional request timeout in milliseconds\n */\n constructor(private readonly options: AvesClientOptions) {}\n\n private createRqHeader() {\n return {\n '@HostID': this.options.hostID,\n '@Xtoken': this.options.xtoken,\n '@Interface': 'WEB' as const,\n '@UserName': 'WEB' as const,\n ...(this.options.languageCode && {\n '@LanguageCode': this.options.languageCode,\n }),\n };\n }\n\n private createUrl(endpoint: string) {\n return parseUrl(this.options.baseURL, endpoint);\n }\n\n private get endpoints() {\n return {\n search: '/interop/masterRecords/v2/rest/Search',\n upsert: '/interop/masterRecords/v2/rest/InsertOrUpdate',\n } as const;\n }\n\n private handleApiStatus<T extends { rsStatus: RsStatus }>(\n output: T,\n ): Result<T, AvesError> {\n const rsStatus = output.rsStatus;\n const status = rsStatus?.status;\n\n if (status !== 'OK') {\n return err(\n apiError(\n rsStatus.errorDescription as string,\n status,\n rsStatus.errorCode,\n ),\n );\n }\n\n return ok(output);\n }\n\n private toAvesError(error: unknown, defaultMessage: string): AvesError {\n if (error instanceof AvesError) {\n return error;\n }\n if (error instanceof ValiError) {\n const details = buildDetails(error.issues);\n return validationError(`Validation error: ${details}`);\n }\n if (error instanceof Error) {\n return unknownError(error.message);\n }\n return unknownError(defaultMessage);\n }\n\n private async request<T extends { rsStatus: RsStatus }>(\n endpoint: string,\n requestBody: Record<string, unknown>,\n responseRootKey: string,\n responseSchema: BaseSchema<unknown, T, BaseIssue<unknown>>,\n ): Promise<Result<T, AvesError>> {\n const { signal, clear } = createTimeoutSignal(\n this.options.timeoutMs ?? 30_000,\n );\n\n try {\n const url = this.createUrl(endpoint);\n const xmlBody = jsonToXml(requestBody);\n\n const response = await r(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/xml',\n },\n body: xmlBody,\n signal,\n });\n\n const responseText = await response.body.text();\n\n if (response.statusCode !== 200) {\n return err(apiError(responseText, 'ERROR', response.statusCode));\n }\n\n const jsonResponse = xmlToJson(responseText);\n const rootElement = jsonResponse[responseRootKey];\n\n if (!rootElement) {\n return err(\n validationError(\n `Invalid response structure: missing root element '${responseRootKey}'`,\n ),\n );\n }\n\n const parseResult = safeParse(responseSchema, rootElement);\n if (!parseResult.success) {\n const details = buildDetails(parseResult.issues);\n return err(validationError(`Invalid response format: ${details}`));\n }\n return this.handleApiStatus(parseResult.output);\n } catch (error) {\n if (isAbortError(error)) {\n return err(apiError('Request timed out', 'TIMEOUT'));\n }\n return err(this.toAvesError(error, 'Unknown error occurred'));\n } finally {\n clear?.();\n }\n }\n\n /**\n * Search for master records\n * @returns Result containing list of matching master records in camelCase or error\n */\n async search(\n params: SearchMasterRecord,\n ): Promise<Result<SearchMasterRecordRS, AvesError>> {\n try {\n const requestData = parse(SearchMasterRecordRequestSchema, {\n RqHeader: this.createRqHeader(),\n SearchMasterRecord: params,\n });\n\n const requestBody = createRootElement(\n XML_ROOT_ELEMENTS.SEARCH_REQUEST,\n requestData,\n );\n\n return this.request<SearchMasterRecordRS>(\n this.endpoints.search,\n requestBody,\n XML_ROOT_ELEMENTS.SEARCH_RESPONSE,\n SearchMasterRecordResponseSchema,\n );\n } catch (error) {\n return err(\n this.toAvesError(error, 'Validation error occurred during search'),\n );\n }\n }\n\n /**\n * Insert or update a master record\n * @param record - Master record data in camelCase\n * @returns Result containing response with customer record code in camelCase or error\n */\n async upsertRecord(\n record: MasterRecordDetail,\n ): Promise<Result<ManageMasterRecordRS, AvesError>> {\n try {\n const apiRecord = parse(MasterRecordDetailApiSchema, record);\n\n const requestData = parse(ManageMasterRecordRequestSchema, {\n RqHeader: this.createRqHeader(),\n MasterRecordDetail: apiRecord,\n });\n\n const requestBody = createRootElement(\n XML_ROOT_ELEMENTS.UPSERT_REQUEST,\n requestData,\n );\n\n return this.request<ManageMasterRecordRS>(\n this.endpoints.upsert,\n requestBody,\n XML_ROOT_ELEMENTS.UPSERT_RESPONSE,\n ManageMasterRecordResponseSchema,\n );\n } catch (error) {\n return err(\n this.toAvesError(error, 'Validation error occurred during upsert'),\n );\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/error.ts","../src/xml-client.ts","../src/schemas/common.ts","../src/utils/case-transform.ts","../src/utils/schema-transform.ts","../src/schemas/master-record.ts","../src/schemas/search.ts","../src/schemas/upsert.ts","../src/utils/result.ts","../src/utils/url.ts","../src/utils/timeout.ts","../src/client.ts"],"names":["ERROR_KINDS","AvesError","kind","message","status","code","validationError","apiError","unknownError","buildDetails","issues","issue","path","segment","text","isAbortError","error","parserOptions","builderOptions","parser","XMLParser","builder","XMLBuilder","jsonToXml","json","xmlToJson","xml","RqHeaderSchema","i","warningsSchema","input","RsStatusSchema","val","camelToPascal","str","pascalToCamel","isSpecialObject","obj","ATTRIBUTE_FIELDS","camelToPascalKeys","item","result","key","value","isAttribute","pascalKey","finalKey","pascalToCamelKeys","strippedKey","camelKey","createApiSchema","inputSchema","u","createResponseSchema","apiSchema","createApiValidationSchema","validationEntries","paymentTypeSchema","FinancialDetailInputSchema","FinancialDetailApiValidationSchema","DynamicFieldsInputSchema","DynamicFieldsApiValidationSchema","flagSchema","recordStatusSchema","recordTypeSchema","insertCriteriaSchema","AccountPoliciesInputSchema","AccountPoliciesApiValidationSchema","MasterRecordDetailSchema","MasterRecordDetailApiSchema","MasterRecordDetailApiValidationSchema","LastModificationDateInputSchema","o","languageCodeField","CodeSearchSchema","NameSearchSchema","VatCodeSearchSchema","ZoneSearchSchema","CategorySearchSchema","EmailSearchSchema","LastModDateSearchSchema","SearchFieldSearchSchema","ExternalRefCodeSearchSchema","SearchMasterRecordSchema","transformRecordCode","recordCode","_discard","rest","SearchMasterRecordApiSchema","SearchMasterRecordRequestSchema","searchFields","RqHeader","MasterRecordListApiSchema","SearchMasterRecordResponseSchema","ManageMasterRecordRequestSchema","y","ManageMasterRecordResponseSchema","ok","data","err","buildUrl","baseURL","endpoint","base","combinedPath","parseUrl","normalizedBaseURL","url","createTimeoutSignal","timeoutMs","controller","timeoutId","createRootElement","name","object","XML_ROOT_ELEMENTS","AvesClient","options","output","rsStatus","defaultMessage","ValiError","details","requestBody","responseRootKey","responseSchema","signal","clear","xmlBody","response","r","responseText","rootElement","parseResult","safeParse","params","requestData","parse","record","apiRecord"],"mappings":"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","file":"index.js","sourcesContent":["import { BaseIssue } from 'valibot';\n\nexport const ERROR_KINDS = {\n VALIDATION: 'validation',\n API: 'api',\n UNKNOWN: 'unknown',\n} as const;\n\nexport type ErrorKind = (typeof ERROR_KINDS)[keyof typeof ERROR_KINDS];\n\n/**\n * Error thrown by AVES API operations\n */\nexport class AvesError extends Error {\n constructor(\n public readonly kind: ErrorKind,\n public readonly message: string,\n public readonly status?: string,\n public readonly code?: number | string,\n ) {\n super(message);\n this.name = 'AvesError';\n this.status = status?.toLowerCase();\n this.code = this.parseCode(code);\n }\n\n private parseCode(code?: number | string): number {\n if (typeof code === 'string') {\n return Number.parseInt(code);\n }\n return code ?? 0;\n }\n}\n\nexport function validationError(message: string): AvesError {\n return new AvesError(ERROR_KINDS.VALIDATION, message);\n}\n\nexport function apiError(\n message: string,\n status?: string,\n code?: number | string,\n): AvesError {\n return new AvesError(ERROR_KINDS.API, message, status, code);\n}\n\nexport function unknownError(message: string): AvesError {\n return new AvesError(ERROR_KINDS.UNKNOWN, message);\n}\n\nexport function buildDetails(issues: readonly BaseIssue<unknown>[]): string {\n return issues\n .map((issue) => {\n const path =\n issue.path && issue.path.length > 0\n ? issue.path\n .map((segment) =>\n typeof segment === 'string' || typeof segment === 'number'\n ? String(segment)\n : 'key' in segment\n ? String(segment.key)\n : '',\n )\n .filter(Boolean)\n .join('.')\n : undefined;\n\n const text = issue.message ?? 'Invalid value';\n return path ? `${path}: ${text}` : text;\n })\n .join('; ');\n}\n\nexport function isAbortError(error: unknown): boolean {\n return error instanceof Error && error.name === 'AbortError';\n}\n","import { XMLParser, XMLBuilder } from 'fast-xml-parser';\nimport { AvesError } from './error.js';\n\nconst parserOptions = {\n ignoreAttributes: false,\n attributeNamePrefix: '@',\n parseAttributeValue: false,\n trimValues: true,\n ignoreNameSpace: true,\n removeNSPrefix: true,\n parseTagValue: false,\n};\n\nconst builderOptions = {\n ignoreAttributes: false,\n attributeNamePrefix: '@',\n suppressEmptyNode: true,\n};\n\nconst parser = new XMLParser(parserOptions);\nconst builder = new XMLBuilder(builderOptions);\n\n/**\n * Converts JSON to XML string\n */\nexport function jsonToXml(json: Record<string, unknown>): string {\n try {\n return builder.build(json);\n } catch (error) {\n throw new AvesError(\n 'validation',\n `Failed to convert JSON to XML: ${error instanceof Error ? error.message : 'Unknown error'}`,\n );\n }\n}\n\n/**\n * Converts XML string to JSON object\n * Attributes are parsed with @ prefix\n */\nexport function xmlToJson(xml: string): Record<string, unknown> {\n try {\n return parser.parse(xml);\n } catch (error) {\n throw new AvesError(\n 'validation',\n `Failed to convert XML to JSON: ${error instanceof Error ? error.message : 'Unknown error'}`,\n );\n }\n}\n","import * as v from 'valibot';\n\n/**\n * Request header schema with authentication credentials\n */\nexport const RqHeaderSchema = v.object({\n '@HostID': v.pipe(v.string(), v.minLength(6), v.maxLength(6)),\n '@Xtoken': v.string(),\n '@Interface': v.literal('WEB'),\n '@UserName': v.literal('WEB'),\n '@LanguageCode': v.optional(\n v.pipe(v.string(), v.minLength(2), v.maxLength(2)),\n ),\n});\n\nconst warningsSchema = v.optional(\n v.pipe(\n v.string(),\n v.transform((input) => input.split(',')),\n ),\n);\n\n/**\n * Response status schema indicating success, error, or warning\n */\nexport const RsStatusSchema = v.pipe(\n v.object({\n '@Status': v.union([\n v.literal('OK'),\n v.literal('ERROR'),\n v.literal('WARNING'),\n v.literal('TIMEOUT'),\n ]),\n ErrorCode: v.optional(\n v.pipe(\n v.union([v.string(), v.number()]),\n v.transform((val) => Number(val)),\n ),\n ),\n ErrorDescription: v.optional(v.string()),\n Warnings: warningsSchema,\n }),\n v.transform((input) => {\n return {\n status: input['@Status'],\n errorCode: input.ErrorCode,\n errorDescription: input.ErrorDescription,\n warnings: input.Warnings,\n };\n }),\n);\n","type CamelFromDelimiter<S extends string> = S extends `${infer H}_${infer T}`\n ? `${H}${Capitalize<CamelFromDelimiter<T>>}`\n : S extends `${infer H}-${infer T}`\n ? `${H}${Capitalize<CamelFromDelimiter<T>>}`\n : S;\n\ntype ToCamelCase<S extends string> =\n CamelFromDelimiter<S> extends `${infer F}${infer R}`\n ? `${Lowercase<F>}${R}`\n : CamelFromDelimiter<S>;\n\ntype PascalFromDelimiter<S extends string> = S extends `${infer H}_${infer T}`\n ? `${Capitalize<H>}${Capitalize<PascalFromDelimiter<T>>}`\n : S extends `${infer H}-${infer T}`\n ? `${Capitalize<H>}${Capitalize<PascalFromDelimiter<T>>}`\n : S;\n\ntype ToPascalCase<S extends string> =\n PascalFromDelimiter<S> extends `${infer F}${infer R}`\n ? `${Capitalize<F>}${R}`\n : Capitalize<PascalFromDelimiter<S>>;\n\nexport type Camelize<T> = T extends readonly (infer U)[]\n ? Camelize<U>[]\n : T extends object\n ? {\n [K in keyof T as K extends `@${infer Rest}`\n ? ToCamelCase<Rest> // Strip @ prefix and camelCase the rest\n : ToCamelCase<K & string>]: Camelize<T[K]>;\n }\n : T;\n\nexport type Pascalize<T> = T extends readonly (infer U)[]\n ? Pascalize<U>[]\n : T extends object\n ? {\n [K in keyof T as K extends `@${infer Rest}`\n ? ToPascalCase<Rest> // Strip @ prefix and PascalCase the rest\n : ToPascalCase<K & string>]: Pascalize<T[K]>;\n }\n : T;\n\nfunction camelToPascal(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nfunction pascalToCamel(str: string): string {\n return str.charAt(0).toLowerCase() + str.slice(1);\n}\n\n/**\n * Checks if an object is a special built-in type that should not be transformed\n */\nfunction isSpecialObject(obj: unknown): boolean {\n return (\n obj instanceof Date ||\n obj instanceof RegExp ||\n obj instanceof Map ||\n obj instanceof Set ||\n obj instanceof Error\n );\n}\n\nexport const ATTRIBUTE_FIELDS = new Set([\n 'recordCode',\n 'insertCriteria',\n 'currencyCode',\n 'creditLimit',\n 'c_PaymentType',\n 'c_SpecPaymentTypeCode',\n 's_PaymentType',\n 's_SpecPaymentTypeCode',\n 'enableElectronicInvoicing',\n 'electronicInvoicingType',\n 'key',\n 'value',\n 'minDate',\n 'maxDate',\n 'hostID',\n 'xtoken',\n 'interface',\n 'userName',\n 'status',\n 'acceptProfilingPolicies',\n 'acceptPrivacyPolicies',\n 'acceptNewsletterPolicies',\n]);\n\n/**\n * Transforms object keys from camelCase to PascalCase\n * Adds @ prefix to fields in ATTRIBUTE_FIELDS for XML attributes\n */\nexport function camelToPascalKeys<T>(obj: T): Pascalize<T> {\n if (!obj || typeof obj !== 'object') {\n return obj as Pascalize<T>;\n }\n\n if (Array.isArray(obj)) {\n return obj.map((item) => camelToPascalKeys(item)) as Pascalize<T>;\n }\n\n if (isSpecialObject(obj)) {\n return obj as Pascalize<T>;\n }\n\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj)) {\n const isAttribute = ATTRIBUTE_FIELDS.has(key);\n const pascalKey = camelToPascal(key);\n const finalKey = isAttribute ? `@${pascalKey}` : pascalKey;\n\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n if (isSpecialObject(value)) {\n result[finalKey] = value;\n } else {\n result[finalKey] = camelToPascalKeys(value as Record<string, unknown>);\n }\n } else if (Array.isArray(value)) {\n result[finalKey] = value.map((item) =>\n typeof item === 'object' && item && !Array.isArray(item)\n ? camelToPascalKeys(item as Record<string, unknown>)\n : item,\n );\n } else {\n result[finalKey] = value;\n }\n }\n return result as Pascalize<T>;\n}\n\n/**\n * Transforms object keys from PascalCase to camelCase\n * Strips @ prefix from XML attributes\n */\nexport function pascalToCamelKeys<T>(obj: T): Camelize<T> {\n if (!obj || typeof obj !== 'object') {\n return obj as Camelize<T>;\n }\n\n if (Array.isArray(obj)) {\n return obj.map((item) => pascalToCamelKeys(item)) as Camelize<T>;\n }\n\n if (isSpecialObject(obj)) {\n return obj as Camelize<T>;\n }\n\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj)) {\n if (key.startsWith('@')) {\n const strippedKey = key.slice(1);\n const camelKey = pascalToCamel(strippedKey);\n result[camelKey] = value;\n } else {\n const camelKey = pascalToCamel(key);\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n if (isSpecialObject(value)) {\n result[camelKey] = value;\n } else {\n result[camelKey] = pascalToCamelKeys(\n value as Record<string, unknown>,\n );\n }\n } else if (Array.isArray(value)) {\n result[camelKey] = value.map((item) =>\n typeof item === 'object' && item && !Array.isArray(item)\n ? pascalToCamelKeys(item as Record<string, unknown>)\n : item,\n );\n } else {\n result[camelKey] = value;\n }\n }\n }\n return result as Camelize<T>;\n}\n","import * as v from 'valibot';\nimport type { BaseSchema, ObjectEntries } from 'valibot';\nimport {\n camelToPascalKeys,\n pascalToCamelKeys,\n ATTRIBUTE_FIELDS,\n} from './case-transform.js';\n\n/**\n * Creates a schema that transforms camelCase input to PascalCase for API requests\n */\nexport function createApiSchema<TInput extends BaseSchema<any, any, any>>(\n inputSchema: TInput,\n) {\n return v.pipe(\n inputSchema,\n v.transform((input) => camelToPascalKeys(input)),\n );\n}\n\n/**\n * Creates a schema that transforms PascalCase API responses to camelCase\n */\nexport function createResponseSchema<TApi extends BaseSchema<any, any, any>>(\n apiSchema: TApi,\n) {\n return v.pipe(\n apiSchema,\n v.transform((input) => pascalToCamelKeys(input)),\n );\n}\n\n/**\n * Creates a validation schema for already-transformed PascalCase data with @ attributes\n * Used for nested objects like AccountPolicies, FinancialDetail, DynamicFields\n * Takes the same input schema used in createApiSchema and generates the validation schema\n * by directly using the ATTRIBUTE_FIELDS logic to determine which fields become attributes\n */\nexport function createApiValidationSchema<TEntries extends ObjectEntries>(\n inputSchema: v.ObjectSchema<TEntries, any>,\n) {\n const validationEntries: Record<string, any> = {};\n\n // Build validation schema based on ATTRIBUTE_FIELDS\n for (const key in inputSchema.entries) {\n const isAttribute = ATTRIBUTE_FIELDS.has(key);\n const pascalKey = key.charAt(0).toUpperCase() + key.slice(1);\n const finalKey = isAttribute ? `@${pascalKey}` : pascalKey;\n\n validationEntries[finalKey] = inputSchema.entries[key];\n }\n\n return v.object(validationEntries as TEntries);\n}\n","import * as v from 'valibot';\nimport {\n createApiSchema,\n createResponseSchema,\n createApiValidationSchema,\n} from '../utils/schema-transform.js';\n\nconst paymentTypeSchema = v.union([\n v.literal('CASH'),\n v.literal('BANK'),\n v.literal('RID'),\n v.literal('RIBA'),\n v.literal('SPECIFIC_CODE'),\n]);\n\nconst FinancialDetailInputSchema = v.object({\n currencyCode: v.optional(v.string()),\n creditLimit: v.optional(v.string()),\n c_PaymentType: v.optional(paymentTypeSchema),\n c_SpecPaymentTypeCode: v.optional(v.string()),\n s_PaymentType: v.optional(paymentTypeSchema),\n s_SpecPaymentTypeCode: v.optional(v.string()),\n enableElectronicInvoicing: v.optional(v.union([v.literal('true'), v.literal('false'), v.boolean()])),\n electronicInvoicingType: v.optional(v.string()),\n});\n\n/**\n * Financial detail schema for API requests (transforms to PascalCase)\n */\nexport const FinancialDetailSchema = createApiSchema(\n FinancialDetailInputSchema,\n);\n\n/**\n * Financial detail validation schema (already transformed PascalCase with @ attributes)\n */\nexport const FinancialDetailApiValidationSchema = createApiValidationSchema(\n FinancialDetailInputSchema,\n);\n\nconst DynamicFieldsInputSchema = v.object({\n key: v.string(),\n value: v.string(),\n});\n\n/**\n * Dynamic fields schema for API requests (transforms to PascalCase)\n */\nexport const DynamicFieldsSchema = createApiSchema(DynamicFieldsInputSchema);\n\n/**\n * Dynamic fields validation schema (already transformed PascalCase with @ attributes)\n */\nexport const DynamicFieldsApiValidationSchema = createApiValidationSchema(\n DynamicFieldsInputSchema,\n);\n\nconst flagSchema = v.union([v.literal(0), v.literal(1)]);\n\nconst recordStatusSchema = v.union([\n v.literal('ENABLED'),\n v.literal('DISABLED'),\n v.literal('WARNING'),\n v.literal('BLACKLISTED'),\n]);\n\nconst recordTypeSchema = v.union([\n v.literal('CUSTOMER'),\n v.literal('SUPPLIER'),\n v.literal('GENERAL'),\n]);\n\nconst insertCriteriaSchema = v.union([\n v.literal('S'),\n v.literal('N'),\n v.literal('T'),\n v.literal('M'),\n]);\n\nconst AccountPoliciesInputSchema = v.object({\n acceptProfilingPolicies: v.optional(flagSchema),\n acceptPrivacyPolicies: v.optional(flagSchema),\n acceptNewsletterPolicies: v.optional(flagSchema),\n});\n\n/**\n * Account policies schema for API requests (transforms to PascalCase with @ attributes)\n */\nexport const AccountPoliciesSchema = createApiSchema(\n AccountPoliciesInputSchema,\n);\n\n/**\n * Account policies validation schema (already transformed PascalCase with @ attributes)\n */\nexport const AccountPoliciesApiValidationSchema = createApiValidationSchema(\n AccountPoliciesInputSchema,\n);\n\n/**\n * Master record detail input schema (camelCase)\n */\nexport const MasterRecordDetailSchema = v.object({\n recordCode: v.optional(v.pipe(v.string(), v.minLength(6), v.maxLength(6))),\n insertCriteria: v.optional(insertCriteriaSchema),\n createdDate: v.optional(v.string()),\n recordType: v.optional(v.union([recordTypeSchema], 'CUSTOMER')),\n recordStatus: v.optional(v.union([recordStatusSchema], 'ENABLED')),\n moniker: v.optional(v.string()),\n name: v.optional(v.string()),\n extraInfo: v.optional(v.string()),\n languageCode: v.pipe(v.string(), v.minLength(2), v.maxLength(2)),\n address: v.optional(v.string()),\n zipCode: v.optional(v.string()),\n cityName: v.optional(v.string()),\n countyCode: v.optional(v.string()),\n stateCode: v.optional(v.string()),\n categoryCode: v.optional(v.string()),\n firstPhoneNumber: v.optional(v.string()),\n mobilePhoneNumber: v.optional(v.string()),\n email: v.optional(v.string()),\n gender: v.optional(v.union([v.literal('M'), v.literal('F')])),\n birthDate: v.optional(v.string()),\n birthCity: v.optional(v.string()),\n birthCounty: v.optional(v.string()),\n fiscalCode: v.optional(v.string()),\n vatCode: v.optional(v.string()),\n accountPolicies: v.optional(AccountPoliciesInputSchema),\n financialDetail: v.optional(FinancialDetailInputSchema),\n dynamicFields: v.optional(DynamicFieldsInputSchema),\n});\n\n/**\n * Master record detail schema for API requests (transforms to PascalCase)\n */\nexport const MasterRecordDetailApiSchema = createApiSchema(\n MasterRecordDetailSchema,\n);\n\n/**\n * Master record detail response schema (transforms to camelCase)\n */\nexport const MasterRecordDetailResponseSchema = createResponseSchema(\n MasterRecordDetailApiSchema,\n);\n\n/**\n * Master record detail API validation schema (PascalCase with @ attributes)\n * Used for both search responses and upsert requests\n * All fields are optional as responses may not contain all fields\n */\nexport const MasterRecordDetailApiValidationSchema = v.object({\n '@RecordCode': v.optional(v.pipe(v.string(), v.minLength(5), v.maxLength(6))),\n '@InsertCriteria': v.optional(insertCriteriaSchema),\n CreatedDate: v.optional(v.string()),\n ModifiedDate: v.optional(v.string()),\n RecordType: v.optional(\n v.union([\n v.literal('CUSTOMER'),\n v.literal('SUPPLIER'),\n v.literal('GENERAL'),\n ]),\n ),\n LoginType: v.optional(v.string()),\n RecordStatus: v.optional(recordStatusSchema),\n Moniker: v.optional(v.string()),\n Name: v.optional(v.string()),\n ExtraInfo: v.optional(v.string()),\n LanguageCode: v.optional(v.pipe(v.string(), v.minLength(1), v.maxLength(2))),\n Address: v.optional(v.string()),\n ZipCode: v.optional(v.string()),\n CityName: v.optional(v.string()),\n CountyCode: v.optional(v.string()),\n StateCode: v.optional(v.string()),\n CategoryCode: v.optional(v.string()),\n PromoterCode: v.optional(v.string()),\n FirstPhoneNumber: v.optional(v.string()),\n MobilePhoneNumber: v.optional(v.string()),\n Email: v.optional(v.string()),\n Gender: v.optional(v.union([v.literal('M'), v.literal('F')])),\n BirthDate: v.optional(v.string()),\n BirthCity: v.optional(v.string()),\n BirthCounty: v.optional(v.string()),\n EncryptedPassword: v.optional(v.union([v.literal('true'), v.literal('false'), v.boolean()])),\n FiscalCode: v.optional(v.string()),\n VatCode: v.optional(v.string()),\n NewsletterDisabled: v.optional(v.union([v.literal('true'), v.literal('false'), v.boolean()])),\n SupplierRefMasterRecords: v.optional(v.any()),\n AccountPolicies: v.optional(AccountPoliciesApiValidationSchema),\n FinancialDetail: v.optional(FinancialDetailApiValidationSchema),\n DynamicFields: v.optional(v.array(DynamicFieldsApiValidationSchema)),\n});\n","import * as v from 'valibot';\nimport { RqHeaderSchema, RsStatusSchema } from './common.js';\nimport { MasterRecordDetailApiValidationSchema } from './master-record.js';\nimport {\n createApiSchema,\n createResponseSchema,\n} from '../utils/schema-transform.js';\n\nconst LastModificationDateInputSchema = v.object({\n minDate: v.string(),\n maxDate: v.string(),\n});\n\nconst languageCodeField = v.optional(\n v.pipe(v.string(), v.minLength(2), v.maxLength(2)),\n);\n\n/**\n * Search by CODE - requires recordCode\n */\nconst CodeSearchSchema = v.object({\n searchType: v.literal('CODE'),\n recordCode: v.pipe(v.string(), v.minLength(5), v.maxLength(6)),\n languageCode: languageCodeField,\n});\n\n/**\n * Search by NAME - requires name, optionally city\n */\nconst NameSearchSchema = v.object({\n searchType: v.literal('NAME'),\n name: v.string(),\n city: v.optional(v.string()),\n languageCode: languageCodeField,\n});\n\n/**\n * Search by VATCODE - requires vatCode, optionally phoneNumber\n */\nconst VatCodeSearchSchema = v.object({\n searchType: v.literal('VATCODE'),\n vatCode: v.string(),\n phoneNumber: v.optional(v.string()),\n languageCode: languageCodeField,\n});\n\n/**\n * Search by ZONE - requires zipCode and countyCode, optionally city\n */\nconst ZoneSearchSchema = v.object({\n searchType: v.literal('ZONE'),\n zipCode: v.string(),\n countyCode: v.string(),\n city: v.optional(v.string()),\n languageCode: languageCodeField,\n});\n\n/**\n * Search by CATEGORY - requires categoryCode\n */\nconst CategorySearchSchema = v.object({\n searchType: v.literal('CATEGORY'),\n categoryCode: v.string(),\n languageCode: languageCodeField,\n});\n\n/**\n * Search by EMAIL - requires email\n */\nconst EmailSearchSchema = v.object({\n searchType: v.literal('EMAIL'),\n email: v.string(),\n languageCode: languageCodeField,\n});\n\n/**\n * Search by LASTMODDATE - requires lastModificationDate\n */\nconst LastModDateSearchSchema = v.object({\n searchType: v.literal('LASTMODDATE'),\n lastModificationDate: LastModificationDateInputSchema,\n languageCode: languageCodeField,\n});\n\n/**\n * Search by SEARCH FIELD - requires searchFieldValue\n */\nconst SearchFieldSearchSchema = v.object({\n searchType: v.literal('SEARCH_FIELD'),\n searchFieldValue: v.string(),\n languageCode: languageCodeField,\n});\n\n/**\n * Search by EXTERNAL_REF_CODE - requires searchFieldValue\n */\nconst ExternalRefCodeSearchSchema = v.object({\n searchType: v.literal('EXTERNAL_REF_CODE'),\n searchFieldValue: v.string(),\n languageCode: languageCodeField,\n});\n\n/**\n * Search master record input schema (camelCase)\n * Conditional fields based on searchType\n */\nexport const SearchMasterRecordSchema = v.union([\n CodeSearchSchema,\n NameSearchSchema,\n VatCodeSearchSchema,\n ZoneSearchSchema,\n CategorySearchSchema,\n EmailSearchSchema,\n LastModDateSearchSchema,\n SearchFieldSearchSchema,\n ExternalRefCodeSearchSchema,\n]);\n\nconst transformRecordCode = (input: Record<string, unknown>) => {\n if (!('@RecordCode' in input)) return input;\n const recordCode = input['@RecordCode'];\n if (!recordCode) return input;\n const { ['@RecordCode']: _discard, ...rest } = input;\n return {\n ...rest,\n RecordCode: recordCode,\n };\n};\n\n/**\n * Search master record schema for API requests (transforms to PascalCase)\n */\nexport const SearchMasterRecordApiSchema = v.pipe(\n createApiSchema(SearchMasterRecordSchema),\n v.transform((input) => transformRecordCode(input)),\n);\n\n/**\n * Complete search request schema with header\n * Flattens SearchMasterRecord fields to root level\n */\nexport const SearchMasterRecordRequestSchema = v.pipe(\n v.object({\n RqHeader: RqHeaderSchema,\n SearchMasterRecord: SearchMasterRecordApiSchema,\n }),\n v.transform((input) => {\n const { SearchMasterRecord: searchFields, RqHeader, ...rest } = input;\n return {\n RqHeader,\n ...searchFields,\n ...rest,\n };\n }),\n);\n\nconst MasterRecordListApiSchema = v.object({\n MasterRecordDetail: v.optional(\n v.pipe(\n v.union([\n v.array(MasterRecordDetailApiValidationSchema),\n MasterRecordDetailApiValidationSchema,\n ]),\n v.transform((input) => {\n if (!input) return undefined;\n return Array.isArray(input) ? input : [input];\n }),\n ),\n ),\n});\n\n/**\n * Search master record response schema (transforms to camelCase)\n */\nexport const SearchMasterRecordResponseSchema = createResponseSchema(\n v.object({\n RsStatus: RsStatusSchema,\n MasterRecordList: v.optional(MasterRecordListApiSchema),\n }),\n);\n","import * as v from 'valibot';\nimport { RqHeaderSchema, RsStatusSchema } from './common.js';\nimport { MasterRecordDetailApiValidationSchema } from './master-record.js';\nimport { createResponseSchema } from '../utils/schema-transform.js';\n\n/**\n * Complete upsert request schema with header and required InsertCriteria\n */\nexport const ManageMasterRecordRequestSchema = v.object({\n RqHeader: RqHeaderSchema,\n MasterRecordDetail: MasterRecordDetailApiValidationSchema,\n});\n\n/**\n * Upsert master record response schema (transforms to camelCase)\n */\nexport const ManageMasterRecordResponseSchema = createResponseSchema(\n v.object({\n RsStatus: RsStatusSchema,\n MasterRecordDetail: v.optional(MasterRecordDetailApiValidationSchema),\n }),\n);\n","/**\n * Result type for functional error handling\n */\nexport type Result<T, E = Error> =\n | { success: true; data: T }\n | { success: false; error: E };\n\n/**\n * Creates a successful result\n */\nexport function ok<T>(data: T): Result<T, never> {\n return { success: true, data };\n}\n\n/**\n * Creates an error result\n */\nexport function err<E>(error: E): Result<never, E> {\n return { success: false, error };\n}\n","import { AvesError } from '../error.js';\n\nfunction buildUrl(baseURL: string, endpoint: string): URL {\n try {\n const base = new URL(baseURL);\n const basePath = base.pathname.endsWith('/')\n ? base.pathname.slice(0, -1)\n : base.pathname;\n const combinedPath = basePath + endpoint;\n\n return new URL(combinedPath, base);\n } catch (error) {\n throw new AvesError(\n 'validation',\n `Invalid baseURL: ${error instanceof Error ? error.message : 'Invalid URL format'}`,\n );\n }\n}\n\n/**\n * Validates and combines baseURL with endpoint\n * @param baseURL - Base URL (must be http:// or https://)\n * @param endpoint - Endpoint path (must start with /)\n * @returns Combined URL string\n * @throws AvesError if URL is invalid or protocol is not http/https\n */\nexport function parseUrl(baseURL: string, endpoint: string): string {\n if (!endpoint.startsWith('/')) {\n throw new AvesError(\n 'validation',\n `Invalid endpoint: endpoint must start with '/' but got '${endpoint}'`,\n );\n }\n\n const normalizedBaseURL = baseURL.replace(/\\/$/, '');\n\n const url = buildUrl(normalizedBaseURL, endpoint);\n\n if (url.protocol !== 'http:' && url.protocol !== 'https:') {\n throw new AvesError(\n 'validation',\n `Invalid protocol: baseURL must use http:// or https:// but got '${url.protocol}'`,\n );\n }\n\n return url.toString();\n}\n","export interface TimeoutController {\n signal: AbortSignal;\n clear?: () => void;\n}\n\n/**\n * Create an AbortSignal that will automatically abort after `timeoutMs`.\n * If `timeoutMs` is not provided or <= 0, no automatic abort is scheduled.\n */\nexport function createTimeoutSignal(timeoutMs?: number): TimeoutController {\n const controller = new AbortController();\n\n if (!timeoutMs || timeoutMs <= 0) {\n return { signal: controller.signal };\n }\n\n const timeoutId = setTimeout(() => controller.abort(), timeoutMs);\n\n return {\n signal: controller.signal,\n clear: () => clearTimeout(timeoutId),\n };\n}\n","import { request as r } from 'undici';\nimport { BaseIssue, BaseSchema, parse, safeParse, ValiError } from 'valibot';\nimport { jsonToXml, xmlToJson } from './xml-client.js';\nimport {\n SearchMasterRecordRequestSchema,\n SearchMasterRecordResponseSchema,\n} from './schemas/search.js';\nimport {\n ManageMasterRecordRequestSchema,\n ManageMasterRecordResponseSchema,\n} from './schemas/upsert.js';\nimport type {\n AvesClientOptions,\n ManageMasterRecordRS,\n MasterRecordDetail,\n RsStatus,\n SearchMasterRecord,\n SearchMasterRecordRS,\n} from './types.js';\nimport { MasterRecordDetailApiSchema } from './schemas/master-record.js';\nimport type { Result } from './utils/result.js';\nimport { err, ok } from './utils/result.js';\nimport {\n apiError,\n AvesError,\n buildDetails,\n isAbortError,\n unknownError,\n validationError,\n} from './error.js';\nimport { parseUrl } from './utils/url.js';\nimport { createTimeoutSignal } from './utils/timeout.js';\n\nfunction createRootElement<T>(name: XMLRootElementValues, object: T) {\n return {\n [name]: object,\n };\n}\n\nconst XML_ROOT_ELEMENTS = {\n SEARCH_REQUEST: 'SearchMasterRecordRQ',\n SEARCH_RESPONSE: 'SearchMasterRecordRS',\n UPSERT_REQUEST: 'ManageMasterRecordRQ',\n UPSERT_RESPONSE: 'ManageMasterRecordRS',\n} as const;\n\ntype XMLRootElementValues =\n (typeof XML_ROOT_ELEMENTS)[keyof typeof XML_ROOT_ELEMENTS];\n\n/**\n * AVES XML REST API client\n */\nexport class AvesClient {\n /**\n * @param options - Client configuration options\n * @param options.baseURL - Base URL of the AVES API\n * @param options.hostID - 6-digit identification code\n * @param options.xtoken - Authentication token\n * @param options.languageCode - Optional 2-digit language code\n * @param options.timeoutMs - Optional request timeout in milliseconds\n */\n constructor(private readonly options: AvesClientOptions) {}\n\n private createRqHeader() {\n return {\n '@HostID': this.options.hostID,\n '@Xtoken': this.options.xtoken,\n '@Interface': 'WEB' as const,\n '@UserName': 'WEB' as const,\n ...(this.options.languageCode && {\n '@LanguageCode': this.options.languageCode,\n }),\n };\n }\n\n private createUrl(endpoint: string) {\n return parseUrl(this.options.baseURL, endpoint);\n }\n\n private get endpoints() {\n return {\n search: '/interop/masterRecords/v2/rest/Search',\n upsert: '/interop/masterRecords/v2/rest/InsertOrUpdate',\n } as const;\n }\n\n private handleApiStatus<T extends { rsStatus: RsStatus }>(\n output: T,\n ): Result<T, AvesError> {\n const rsStatus = output.rsStatus;\n const status = rsStatus?.status;\n\n if (status !== 'OK') {\n return err(\n apiError(\n rsStatus.errorDescription as string,\n status,\n rsStatus.errorCode,\n ),\n );\n }\n\n return ok(output);\n }\n\n private toAvesError(error: unknown, defaultMessage: string): AvesError {\n if (error instanceof AvesError) {\n return error;\n }\n if (error instanceof ValiError) {\n const details = buildDetails(error.issues);\n return validationError(`Validation error: ${details}`);\n }\n if (error instanceof Error) {\n return unknownError(error.message);\n }\n return unknownError(defaultMessage);\n }\n\n private async request<T extends { rsStatus: RsStatus }>(\n endpoint: string,\n requestBody: Record<string, unknown>,\n responseRootKey: string,\n responseSchema: BaseSchema<unknown, T, BaseIssue<unknown>>,\n ): Promise<Result<T, AvesError>> {\n const { signal, clear } = createTimeoutSignal(\n this.options.timeoutMs ?? 30_000,\n );\n\n try {\n const url = this.createUrl(endpoint);\n const xmlBody = jsonToXml(requestBody);\n\n const response = await r(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/xml',\n },\n body: xmlBody,\n signal,\n });\n\n const responseText = await response.body.text();\n\n if (response.statusCode !== 200) {\n return err(apiError(responseText, 'ERROR', response.statusCode));\n }\n\n const jsonResponse = xmlToJson(responseText);\n const rootElement = jsonResponse[responseRootKey];\n\n if (!rootElement) {\n return err(\n validationError(\n `Invalid response structure: missing root element '${responseRootKey}'`,\n ),\n );\n }\n\n const parseResult = safeParse(responseSchema, rootElement);\n if (!parseResult.success) {\n const details = buildDetails(parseResult.issues);\n return err(validationError(`Invalid response format: ${details}`));\n }\n return this.handleApiStatus(parseResult.output);\n } catch (error) {\n if (isAbortError(error)) {\n return err(apiError('Request timed out', 'TIMEOUT'));\n }\n return err(this.toAvesError(error, 'Unknown error occurred'));\n } finally {\n clear?.();\n }\n }\n\n /**\n * Search for master records\n * @returns Result containing list of matching master records in camelCase or error\n */\n async search(\n params: SearchMasterRecord,\n ): Promise<Result<SearchMasterRecordRS, AvesError>> {\n try {\n const requestData = parse(SearchMasterRecordRequestSchema, {\n RqHeader: this.createRqHeader(),\n SearchMasterRecord: params,\n });\n\n const requestBody = createRootElement(\n XML_ROOT_ELEMENTS.SEARCH_REQUEST,\n requestData,\n );\n\n return this.request<SearchMasterRecordRS>(\n this.endpoints.search,\n requestBody,\n XML_ROOT_ELEMENTS.SEARCH_RESPONSE,\n SearchMasterRecordResponseSchema,\n );\n } catch (error) {\n return err(\n this.toAvesError(error, 'Validation error occurred during search'),\n );\n }\n }\n\n /**\n * Insert or update a master record\n * @param record - Master record data in camelCase\n * @returns Result containing response with customer record code in camelCase or error\n */\n async upsertRecord(\n record: MasterRecordDetail,\n ): Promise<Result<ManageMasterRecordRS, AvesError>> {\n try {\n const apiRecord = parse(MasterRecordDetailApiSchema, record);\n\n const requestData = parse(ManageMasterRecordRequestSchema, {\n RqHeader: this.createRqHeader(),\n MasterRecordDetail: apiRecord,\n });\n\n const requestBody = createRootElement(\n XML_ROOT_ELEMENTS.UPSERT_REQUEST,\n requestData,\n );\n\n return this.request<ManageMasterRecordRS>(\n this.endpoints.upsert,\n requestBody,\n XML_ROOT_ELEMENTS.UPSERT_RESPONSE,\n ManageMasterRecordResponseSchema,\n );\n } catch (error) {\n return err(\n this.toAvesError(error, 'Validation error occurred during upsert'),\n );\n }\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aves-sdk",
3
- "version": "1.2.15",
3
+ "version": "1.2.16",
4
4
  "description": "TypeScript SDK for AVES XML REST",
5
5
  "homepage": "https://github.com/simoneguglielmi/aves-sdk#readme",
6
6
  "repository": [
@@ -62,6 +62,7 @@
62
62
  "@types/node": "^24.6.2",
63
63
  "@typescript-eslint/eslint-plugin": "^8.53.1",
64
64
  "@typescript-eslint/parser": "^8.53.1",
65
+ "dotenv": "^17.2.3",
65
66
  "eslint": "^9.39.2",
66
67
  "rimraf": "^6.1.2",
67
68
  "tsup": "^8.5.1",