aves-sdk 1.2.7 → 1.2.8

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,2 +1,2 @@
1
- "use strict";var Y=Object.create;var x=Object.defineProperty;var ee=Object.getOwnPropertyDescriptor;var te=Object.getOwnPropertyNames;var re=Object.getPrototypeOf,ae=Object.prototype.hasOwnProperty;var oe=(a,o)=>{for(var i in o)x(a,i,{get:o[i],enumerable:!0})},k=(a,o,i,n)=>{if(o&&typeof o=="object"||typeof o=="function")for(let c of te(o))!ae.call(a,c)&&c!==i&&x(a,c,{get:()=>o[c],enumerable:!(n=ee(o,c))||n.enumerable});return a};var T=(a,o,i)=>(i=a!=null?Y(re(a)):{},k(o||!a||!a.__esModule?x(i,"default",{value:a,enumerable:!0}):i,a)),ne=a=>k(x({},"__esModule",{value:!0}),a);var Ae={};oe(Ae,{AvesClient:()=>w,AvesError:()=>v,FinancialDetailSchema:()=>y,ManageMasterRecordRequestSchema:()=>b,ManageMasterRecordResponseSchema:()=>F,MasterRecordDetailApiSchema:()=>D,MasterRecordDetailResponseSchema:()=>W,MasterRecordDetailSchema:()=>$,RqHeaderSchema:()=>g,RsStatusSchema:()=>R,SearchMasterRecordApiSchema:()=>U,SearchMasterRecordRequestSchema:()=>N,SearchMasterRecordResponseSchema:()=>I,SearchMasterRecordSchema:()=>_});module.exports=ne(Ae);var Z=require("undici"),C=require("valibot");var L=require("fast-xml-parser"),ie={ignoreAttributes:!1,attributeNamePrefix:"@",parseAttributeValue:!0,parseTrueNumberOnly:!1,trimValues:!0,ignoreNameSpace:!0,removeNSPrefix:!0,parseTagValue:!0},se={ignoreAttributes:!1,attributeNamePrefix:"@",suppressEmptyNode:!1},ce=new L.XMLParser(ie),le=new L.XMLBuilder(se);function q(a){return le.build(a)}function z(a){return ce.parse(a)}var e=T(require("valibot"),1);var s=T(require("valibot"),1),g=s.object({"@HostID":s.pipe(s.string(),s.minLength(6),s.maxLength(6)),"@Xtoken":s.string(),"@Interface":s.literal("WEB"),"@UserName":s.literal("WEB"),"@LanguageCode":s.optional(s.pipe(s.string(),s.minLength(2),s.maxLength(2)))}),ve=s.optional(s.pipe(s.string(),s.transform(a=>a.split(",")))),R=s.object({"@Status":s.union([s.literal("OK"),s.literal("ERROR"),s.literal("WARNING"),s.literal("TIMEOUT")]),ErrorCode:s.optional(s.string()),ErrorDescription:s.optional(s.string()),Warnings:ve});var t=T(require("valibot"),1);var S=T(require("valibot"),1);function pe(a){return a.charAt(0).toUpperCase()+a.slice(1)}function K(a){return a.charAt(0).toLowerCase()+a.slice(1)}var me=new Set(["recordCode","insertCriteria","currencyCode","creditLimit","c_PaymentType","c_SpecPaymentTypeCode","s_PaymentType","s_SpecPaymentTypeCode","key","value","minDate","maxDate","hostID","xtoken","interface","userName","status"]);function E(a){if(!a||typeof a!="object")return a;if(Array.isArray(a))return a.map(i=>E(i));if(a instanceof Date||a instanceof RegExp||a instanceof Map||a instanceof Set||a instanceof Error)return a;let o={};for(let[i,n]of Object.entries(a)){let c=me.has(i),l=pe(i),u=c?`@${l}`:l;n&&typeof n=="object"&&!Array.isArray(n)?n instanceof Date||n instanceof RegExp||n instanceof Map||n instanceof Set||n instanceof Error?o[u]=n:o[u]=E(n):Array.isArray(n)?o[u]=n.map(p=>typeof p=="object"&&p&&!Array.isArray(p)?E(p):p):o[u]=n}return o}function M(a){if(!a||typeof a!="object")return a;if(Array.isArray(a))return a.map(i=>M(i));if(a instanceof Date||a instanceof RegExp||a instanceof Map||a instanceof Set||a instanceof Error)return a;let o={};for(let[i,n]of Object.entries(a))if(i.startsWith("@")){let c=i.slice(1),l=K(c);o[l]=n}else{let c=K(i);n&&typeof n=="object"&&!Array.isArray(n)?n instanceof Date||n instanceof RegExp||n instanceof Map||n instanceof Set||n instanceof Error?o[c]=n:o[c]=M(n):Array.isArray(n)?o[c]=n.map(l=>typeof l=="object"&&l&&!Array.isArray(l)?M(l):l):o[c]=n}return o}function h(a){return S.pipe(a,S.transform(o=>E(o)))}function f(a){return S.pipe(a,S.transform(o=>M(o)))}var j=t.object({currencyCode:t.string(),creditLimit:t.optional(t.string()),c_PaymentType:t.optional(t.union([t.literal("CASH"),t.literal("BANK"),t.literal("RID"),t.literal("RIBA"),t.literal("SPECIFIC_CODE")])),c_SpecPaymentTypeCode:t.optional(t.string()),s_PaymentType:t.optional(t.union([t.literal("CASH"),t.literal("BANK"),t.literal("RID"),t.literal("RIBA"),t.literal("SPECIFIC_CODE")])),s_SpecPaymentTypeCode:t.optional(t.string())}),y=h(j),V=t.object({key:t.string(),value:t.string()}),P=h(V),$=t.object({recordCode:t.optional(t.pipe(t.string(),t.minLength(6),t.maxLength(6))),insertCriteria:t.optional(t.union([t.literal("S"),t.literal("N"),t.literal("T"),t.literal("M")])),createdDate:t.optional(t.string()),recordType:t.optional(t.union([t.literal("CUSTOMER"),t.literal("SUPPLIER")],"CUSTOMER")),recordStatus:t.optional(t.union([t.literal("ENABLED"),t.literal("DISABLED"),t.literal("WARNING"),t.literal("BLACKLISTED")],"ENABLED")),moniker:t.optional(t.string()),name:t.optional(t.string()),extraInfo:t.optional(t.string()),languageCode:t.pipe(t.string(),t.minLength(2),t.maxLength(2)),address:t.optional(t.string()),zipCode:t.optional(t.string()),cityName:t.optional(t.string()),countyCode:t.optional(t.string()),stateCode:t.optional(t.string()),categoryCode:t.optional(t.string()),firstPhoneNumber:t.optional(t.string()),mobilePhoneNumber:t.optional(t.string()),email:t.optional(t.string()),gender:t.optional(t.string()),birthDate:t.optional(t.string()),fiscalCode:t.optional(t.string()),vatCode:t.optional(t.string()),financialDetail:t.optional(j),dynamicFields:t.optional(t.array(V))}),D=h($),W=f(D);var de=e.object({minDate:e.string(),maxDate:e.string()}),m=e.optional(e.pipe(e.string(),e.minLength(2),e.maxLength(2))),ue=e.object({searchType:e.literal("CODE"),recordCode:e.pipe(e.string(),e.minLength(6),e.maxLength(6)),languageCode:m}),ge=e.object({searchType:e.literal("NAME"),name:e.string(),city:e.optional(e.string()),languageCode:m}),Re=e.object({searchType:e.literal("VATCODE"),vatCode:e.string(),phoneNumber:e.optional(e.string()),languageCode:m}),Se=e.object({searchType:e.literal("ZONE"),zipCode:e.string(),countyCode:e.string(),city:e.optional(e.string()),languageCode:m}),he=e.object({searchType:e.literal("CATEGORY"),categoryCode:e.string(),languageCode:m}),fe=e.object({searchType:e.literal("EMAIL"),email:e.string(),languageCode:m}),ye=e.object({searchType:e.literal("LASTMODDATE"),lastModificationDate:de,languageCode:m}),Ce=e.object({searchType:e.literal("SEARCH_FIELD"),searchFieldValue:e.string(),languageCode:m}),Te=e.object({searchType:e.literal("EXTERNAL_REF_CODE"),searchFieldValue:e.string(),languageCode:m}),_=e.union([ue,ge,Re,Se,he,fe,ye,Ce,Te]),U=h(_),N=e.object({RqHeader:g,SearchMasterRecord:U}),X=e.object({"@RecordCode":e.optional(e.pipe(e.union([e.string(),e.number()]),e.transform(a=>String(a)),e.minLength(6),e.maxLength(6))),"@InsertCriteria":e.optional(e.union([e.literal("S"),e.literal("N"),e.literal("T"),e.literal("M")])),CreatedDate:e.optional(e.string()),RecordType:e.optional(e.union([e.literal("CUSTOMER"),e.literal("SUPPLIER")])),RecordStatus:e.optional(e.union([e.literal("ENABLED"),e.literal("DISABLED"),e.literal("WARNING"),e.literal("BLACKLISTED")],"ENABLED")),Moniker:e.optional(e.string()),Name:e.optional(e.string()),LanguageCode:e.optional(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()),NewsletterDisabled:e.optional(e.union([e.literal("true"),e.literal("false"),e.boolean()])),FinancialDetail:e.optional(y),DynamicFields:e.optional(e.array(P))}),Ee=e.object({MasterRecordDetail:e.optional(e.pipe(e.union([e.array(X),X]),e.transform(a=>{if(a)return Array.isArray(a)?a:[a]})))}),I=f(e.object({RsStatus:R,MasterRecordList:e.optional(Ee)}));var r=T(require("valibot"),1);var Me=r.object({CustomerRecordCode:r.pipe(r.union([r.string(),r.number()]),r.transform(a=>String(a)),r.minLength(6),r.maxLength(6))}),De=r.object({"@RecordCode":r.optional(r.pipe(r.string(),r.minLength(6),r.maxLength(6))),"@InsertCriteria":r.optional(r.union([r.literal("S"),r.literal("N"),r.literal("T"),r.literal("M")])),CreatedDate:r.optional(r.string()),RecordType:r.optional(r.union([r.literal("CUSTOMER"),r.literal("SUPPLIER")])),RecordStatus:r.optional(r.union([r.literal("ENABLED"),r.literal("DISABLED"),r.literal("WARNING"),r.literal("BLACKLISTED")],"ENABLED")),Moniker:r.optional(r.string()),Name:r.optional(r.string()),LanguageCode:r.optional(r.pipe(r.string(),r.minLength(2),r.maxLength(2))),Address:r.optional(r.string()),ZipCode:r.optional(r.string()),CityName:r.optional(r.string()),CountyCode:r.optional(r.string()),StateCode:r.optional(r.string()),CategoryCode:r.optional(r.string()),FirstPhoneNumber:r.optional(r.string()),MobilePhoneNumber:r.optional(r.string()),Email:r.optional(r.string()),Gender:r.optional(r.string()),BirthDate:r.optional(r.string()),FiscalCode:r.optional(r.string()),NewsletterDisabled:r.optional(r.union([r.literal("true"),r.literal("false"),r.boolean()])),FinancialDetail:r.optional(y),DynamicFields:r.optional(r.array(P))}),b=r.object({RqHeader:g,MasterRecordDetail:r.intersect([De,r.object({"@InsertCriteria":r.union([r.literal("S"),r.literal("N"),r.literal("T"),r.literal("M")])})])}),F=f(r.object({RsStatus:R,CustomerRecordRS:r.optional(Me)}));function G(a){return{success:!0,data:a}}function d(a){return{success:!1,error:a}}function Q(a,o){return{[a]:o}}var O={SEARCH_REQUEST:"SearchMasterRecordRQ",SEARCH_RESPONSE:"SearchMasterRecordRS",UPSERT_REQUEST:"ManageMasterRecordRQ",UPSERT_RESPONSE:"ManageMasterRecordRS"},v=class extends Error{constructor(i,n,c,l){super(i);this.status=n;this.errorCode=c;this.errorDescription=l;this.name="AvesError"}},w=class{constructor(o,i,n,c){this.baseURL=o;this.hostID=i;this.xtoken=n;this.languageCode=c;this.baseURL=o.replace(/\/$/,"")}createRqHeader(){return{"@HostID":this.hostID,"@Xtoken":this.xtoken,"@Interface":"WEB","@UserName":"WEB",...this.languageCode&&{"@LanguageCode":this.languageCode}}}createUrl(o){return`${this.baseURL}${o}`}get endpoints(){return{search:"/interop/masterRecords/v2/rest/Search",upsert:"/interop/masterRecords/v2/rest/InsertOrUpdate"}}handleApiStatus(o,i){let n=i?.status;if(n==="ERROR"||n==="TIMEOUT")return d(new v(i.errorDescription||`API Error: ${n}`,n,i.errorCode,i.errorDescription));if(n==="WARNING"){let c=i.warnings?.join(", ");console.warn("AVES API Warning:",c)}return G(o)}toAvesError(o,i){return o instanceof v?o:o instanceof Error?new v(o.message):new v(i)}async request(o,i,n,c){try{let l=this.createUrl(o),u=q(i),p=await(0,Z.request)(l,{method:"POST",headers:{"Content-Type":"application/xml"},body:u}),B=await p.body.text();if(p.statusCode!==200)return d(new v(B,p.statusCode.toString()));let H=z(B)[n];if(!H)return d(new v(`Invalid response structure: missing root element '${n}'`,void 0,"VALIDATION_ERROR"));let A=(0,C.safeParse)(c,H);return A.success?this.handleApiStatus(A.output,A.output.rsStatus):d(new v(`Invalid response format: ${A.issues.map(J=>J.message).join(", ")}`,"400","VALIDATION_ERROR"))}catch(l){return d(this.toAvesError(l,"Unknown error occurred"))}}async search(o){try{let i=(0,C.parse)(N,{RqHeader:this.createRqHeader(),SearchMasterRecord:o}),n=Q(O.SEARCH_REQUEST,i);return await this.request(this.endpoints.search,n,O.SEARCH_RESPONSE,I)}catch(i){return d(this.toAvesError(i,"Validation error occurred during search"))}}async upsertRecord(o){try{let n={"@InsertCriteria":"T",...(0,C.parse)(D,o)},c=(0,C.parse)(b,{RqHeader:this.createRqHeader(),MasterRecordDetail:n}),l=Q(O.UPSERT_REQUEST,c);return await this.request(this.endpoints.upsert,l,O.UPSERT_RESPONSE,F)}catch(i){return d(this.toAvesError(i,"Validation error occurred during upsert"))}}};0&&(module.exports={AvesClient,AvesError,FinancialDetailSchema,ManageMasterRecordRequestSchema,ManageMasterRecordResponseSchema,MasterRecordDetailApiSchema,MasterRecordDetailResponseSchema,MasterRecordDetailSchema,RqHeaderSchema,RsStatusSchema,SearchMasterRecordApiSchema,SearchMasterRecordRequestSchema,SearchMasterRecordResponseSchema,SearchMasterRecordSchema});
1
+ "use strict";var G=Object.create;var E=Object.defineProperty;var Q=Object.getOwnPropertyDescriptor;var Z=Object.getOwnPropertyNames;var J=Object.getPrototypeOf,Y=Object.prototype.hasOwnProperty;var ee=(a,n)=>{for(var i in n)E(a,i,{get:n[i],enumerable:!0})},O=(a,n,i,o)=>{if(n&&typeof n=="object"||typeof n=="function")for(let c of Z(n))!Y.call(a,c)&&c!==i&&E(a,c,{get:()=>n[c],enumerable:!(o=Q(n,c))||o.enumerable});return a};var f=(a,n,i)=>(i=a!=null?G(J(a)):{},O(n||!a||!a.__esModule?E(i,"default",{value:a,enumerable:!0}):i,a)),te=a=>O(E({},"__esModule",{value:!0}),a);var Ae={};ee(Ae,{AvesClient:()=>N,AvesError:()=>v});module.exports=te(Ae);var W=require("undici"),h=require("valibot");var D=require("fast-xml-parser"),re={ignoreAttributes:!1,attributeNamePrefix:"@",parseAttributeValue:!0,parseTrueNumberOnly:!1,trimValues:!0,ignoreNameSpace:!0,removeNSPrefix:!0,parseTagValue:!0},ae={ignoreAttributes:!1,attributeNamePrefix:"@",suppressEmptyNode:!1},ne=new D.XMLParser(re),oe=new D.XMLBuilder(ae);function w(a){return oe.build(a)}function $(a){return ne.parse(a)}var e=f(require("valibot"),1);var s=f(require("valibot"),1),A=s.object({"@HostID":s.pipe(s.string(),s.minLength(6),s.maxLength(6)),"@Xtoken":s.string(),"@Interface":s.literal("WEB"),"@UserName":s.literal("WEB"),"@LanguageCode":s.optional(s.pipe(s.string(),s.minLength(2),s.maxLength(2)))}),ie=s.optional(s.pipe(s.string(),s.transform(a=>a.split(",")))),M=s.object({"@Status":s.union([s.literal("OK"),s.literal("ERROR"),s.literal("WARNING"),s.literal("TIMEOUT")]),ErrorCode:s.optional(s.string()),ErrorDescription:s.optional(s.string()),Warnings:ie});var t=f(require("valibot"),1);var g=f(require("valibot"),1);function se(a){return a.charAt(0).toUpperCase()+a.slice(1)}function _(a){return a.charAt(0).toLowerCase()+a.slice(1)}var ce=new Set(["recordCode","insertCriteria","currencyCode","creditLimit","c_PaymentType","c_SpecPaymentTypeCode","s_PaymentType","s_SpecPaymentTypeCode","key","value","minDate","maxDate","hostID","xtoken","interface","userName","status"]);function y(a){if(!a||typeof a!="object")return a;if(Array.isArray(a))return a.map(i=>y(i));if(a instanceof Date||a instanceof RegExp||a instanceof Map||a instanceof Set||a instanceof Error)return a;let n={};for(let[i,o]of Object.entries(a)){let c=ce.has(i),l=se(i),u=c?`@${l}`:l;o&&typeof o=="object"&&!Array.isArray(o)?o instanceof Date||o instanceof RegExp||o instanceof Map||o instanceof Set||o instanceof Error?n[u]=o:n[u]=y(o):Array.isArray(o)?n[u]=o.map(p=>typeof p=="object"&&p&&!Array.isArray(p)?y(p):p):n[u]=o}return n}function C(a){if(!a||typeof a!="object")return a;if(Array.isArray(a))return a.map(i=>C(i));if(a instanceof Date||a instanceof RegExp||a instanceof Map||a instanceof Set||a instanceof Error)return a;let n={};for(let[i,o]of Object.entries(a))if(i.startsWith("@")){let c=i.slice(1),l=_(c);n[l]=o}else{let c=_(i);o&&typeof o=="object"&&!Array.isArray(o)?o instanceof Date||o instanceof RegExp||o instanceof Map||o instanceof Set||o instanceof Error?n[c]=o:n[c]=C(o):Array.isArray(o)?n[c]=o.map(l=>typeof l=="object"&&l&&!Array.isArray(l)?C(l):l):n[c]=o}return n}function R(a){return g.pipe(a,g.transform(n=>y(n)))}function S(a){return g.pipe(a,g.transform(n=>C(n)))}var U=t.object({currencyCode:t.string(),creditLimit:t.optional(t.string()),c_PaymentType:t.optional(t.union([t.literal("CASH"),t.literal("BANK"),t.literal("RID"),t.literal("RIBA"),t.literal("SPECIFIC_CODE")])),c_SpecPaymentTypeCode:t.optional(t.string()),s_PaymentType:t.optional(t.union([t.literal("CASH"),t.literal("BANK"),t.literal("RID"),t.literal("RIBA"),t.literal("SPECIFIC_CODE")])),s_SpecPaymentTypeCode:t.optional(t.string())}),x=R(U),B=t.object({key:t.string(),value:t.string()}),L=R(B),le=t.object({recordCode:t.optional(t.pipe(t.string(),t.minLength(6),t.maxLength(6))),insertCriteria:t.optional(t.union([t.literal("S"),t.literal("N"),t.literal("T"),t.literal("M")])),createdDate:t.optional(t.string()),recordType:t.optional(t.union([t.literal("CUSTOMER"),t.literal("SUPPLIER")],"CUSTOMER")),recordStatus:t.optional(t.union([t.literal("ENABLED"),t.literal("DISABLED"),t.literal("WARNING"),t.literal("BLACKLISTED")],"ENABLED")),moniker:t.optional(t.string()),name:t.optional(t.string()),extraInfo:t.optional(t.string()),languageCode:t.pipe(t.string(),t.minLength(2),t.maxLength(2)),address:t.optional(t.string()),zipCode:t.optional(t.string()),cityName:t.optional(t.string()),countyCode:t.optional(t.string()),stateCode:t.optional(t.string()),categoryCode:t.optional(t.string()),firstPhoneNumber:t.optional(t.string()),mobilePhoneNumber:t.optional(t.string()),email:t.optional(t.string()),gender:t.optional(t.string()),birthDate:t.optional(t.string()),fiscalCode:t.optional(t.string()),vatCode:t.optional(t.string()),financialDetail:t.optional(U),dynamicFields:t.optional(t.array(B))}),I=R(le),Oe=S(I);var ve=e.object({minDate:e.string(),maxDate:e.string()}),m=e.optional(e.pipe(e.string(),e.minLength(2),e.maxLength(2))),pe=e.object({searchType:e.literal("CODE"),recordCode:e.pipe(e.string(),e.minLength(6),e.maxLength(6)),languageCode:m}),me=e.object({searchType:e.literal("NAME"),name:e.string(),city:e.optional(e.string()),languageCode:m}),de=e.object({searchType:e.literal("VATCODE"),vatCode:e.string(),phoneNumber:e.optional(e.string()),languageCode:m}),ue=e.object({searchType:e.literal("ZONE"),zipCode:e.string(),countyCode:e.string(),city:e.optional(e.string()),languageCode:m}),ge=e.object({searchType:e.literal("CATEGORY"),categoryCode:e.string(),languageCode:m}),Re=e.object({searchType:e.literal("EMAIL"),email:e.string(),languageCode:m}),Se=e.object({searchType:e.literal("LASTMODDATE"),lastModificationDate:ve,languageCode:m}),he=e.object({searchType:e.literal("SEARCH_FIELD"),searchFieldValue:e.string(),languageCode:m}),fe=e.object({searchType:e.literal("EXTERNAL_REF_CODE"),searchFieldValue:e.string(),languageCode:m}),ye=e.union([pe,me,de,ue,ge,Re,Se,he,fe]),Ce=R(ye),H=e.object({RqHeader:A,SearchMasterRecord:Ce}),k=e.object({"@RecordCode":e.optional(e.pipe(e.union([e.string(),e.number()]),e.transform(a=>String(a)),e.minLength(6),e.maxLength(6))),"@InsertCriteria":e.optional(e.union([e.literal("S"),e.literal("N"),e.literal("T"),e.literal("M")])),CreatedDate:e.optional(e.string()),RecordType:e.optional(e.union([e.literal("CUSTOMER"),e.literal("SUPPLIER")])),RecordStatus:e.optional(e.union([e.literal("ENABLED"),e.literal("DISABLED"),e.literal("WARNING"),e.literal("BLACKLISTED")],"ENABLED")),Moniker:e.optional(e.string()),Name:e.optional(e.string()),LanguageCode:e.optional(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()),NewsletterDisabled:e.optional(e.union([e.literal("true"),e.literal("false"),e.boolean()])),FinancialDetail:e.optional(x),DynamicFields:e.optional(e.array(L))}),Te=e.object({MasterRecordDetail:e.optional(e.pipe(e.union([e.array(k),k]),e.transform(a=>{if(a)return Array.isArray(a)?a:[a]})))}),z=S(e.object({RsStatus:M,MasterRecordList:e.optional(Te)}));var r=f(require("valibot"),1);var Ee=r.object({CustomerRecordCode:r.pipe(r.union([r.string(),r.number()]),r.transform(a=>String(a)),r.minLength(6),r.maxLength(6))}),De=r.object({"@RecordCode":r.optional(r.pipe(r.string(),r.minLength(6),r.maxLength(6))),"@InsertCriteria":r.optional(r.union([r.literal("S"),r.literal("N"),r.literal("T"),r.literal("M")])),CreatedDate:r.optional(r.string()),RecordType:r.optional(r.union([r.literal("CUSTOMER"),r.literal("SUPPLIER")])),RecordStatus:r.optional(r.union([r.literal("ENABLED"),r.literal("DISABLED"),r.literal("WARNING"),r.literal("BLACKLISTED")],"ENABLED")),Moniker:r.optional(r.string()),Name:r.optional(r.string()),LanguageCode:r.optional(r.pipe(r.string(),r.minLength(2),r.maxLength(2))),Address:r.optional(r.string()),ZipCode:r.optional(r.string()),CityName:r.optional(r.string()),CountyCode:r.optional(r.string()),StateCode:r.optional(r.string()),CategoryCode:r.optional(r.string()),FirstPhoneNumber:r.optional(r.string()),MobilePhoneNumber:r.optional(r.string()),Email:r.optional(r.string()),Gender:r.optional(r.string()),BirthDate:r.optional(r.string()),FiscalCode:r.optional(r.string()),NewsletterDisabled:r.optional(r.union([r.literal("true"),r.literal("false"),r.boolean()])),FinancialDetail:r.optional(x),DynamicFields:r.optional(r.array(L))}),q=r.object({RqHeader:A,MasterRecordDetail:r.intersect([De,r.object({"@InsertCriteria":r.union([r.literal("S"),r.literal("N"),r.literal("T"),r.literal("M")])})])}),K=S(r.object({RsStatus:M,CustomerRecordRS:r.optional(Ee)}));function j(a){return{success:!0,data:a}}function d(a){return{success:!1,error:a}}function V(a,n){return{[a]:n}}var P={SEARCH_REQUEST:"SearchMasterRecordRQ",SEARCH_RESPONSE:"SearchMasterRecordRS",UPSERT_REQUEST:"ManageMasterRecordRQ",UPSERT_RESPONSE:"ManageMasterRecordRS"},v=class extends Error{constructor(i,o,c,l){super(i);this.status=o;this.errorCode=c;this.errorDescription=l;this.name="AvesError"}},N=class{constructor(n,i,o,c){this.baseURL=n;this.hostID=i;this.xtoken=o;this.languageCode=c;this.baseURL=n.replace(/\/$/,"")}createRqHeader(){return{"@HostID":this.hostID,"@Xtoken":this.xtoken,"@Interface":"WEB","@UserName":"WEB",...this.languageCode&&{"@LanguageCode":this.languageCode}}}createUrl(n){return`${this.baseURL}${n}`}get endpoints(){return{search:"/interop/masterRecords/v2/rest/Search",upsert:"/interop/masterRecords/v2/rest/InsertOrUpdate"}}handleApiStatus(n,i){let o=i?.status;if(o==="ERROR"||o==="TIMEOUT")return d(new v(i.errorDescription||`API Error: ${o}`,o,i.errorCode,i.errorDescription));if(o==="WARNING"){let c=i.warnings?.join(", ");console.warn("AVES API Warning:",c)}return j(n)}toAvesError(n,i){return n instanceof v?n:n instanceof Error?new v(n.message):new v(i)}async request(n,i,o,c){try{let l=this.createUrl(n),u=w(i),p=await(0,W.request)(l,{method:"POST",headers:{"Content-Type":"application/xml"},body:u}),b=await p.body.text();if(p.statusCode!==200)return d(new v(b,p.statusCode.toString()));let F=$(b)[o];if(!F)return d(new v(`Invalid response structure: missing root element '${o}'`,void 0,"VALIDATION_ERROR"));let T=(0,h.safeParse)(c,F);return T.success?this.handleApiStatus(T.output,T.output.rsStatus):d(new v(`Invalid response format: ${T.issues.map(X=>X.message).join(", ")}`,"400","VALIDATION_ERROR"))}catch(l){return d(this.toAvesError(l,"Unknown error occurred"))}}async search(n){try{let i=(0,h.parse)(H,{RqHeader:this.createRqHeader(),SearchMasterRecord:n}),o=V(P.SEARCH_REQUEST,i);return await this.request(this.endpoints.search,o,P.SEARCH_RESPONSE,z)}catch(i){return d(this.toAvesError(i,"Validation error occurred during search"))}}async upsertRecord(n){try{let o={"@InsertCriteria":"T",...(0,h.parse)(I,n)},c=(0,h.parse)(q,{RqHeader:this.createRqHeader(),MasterRecordDetail:o}),l=V(P.UPSERT_REQUEST,c);return await this.request(this.endpoints.upsert,l,P.UPSERT_RESPONSE,K)}catch(i){return d(this.toAvesError(i,"Validation error occurred during upsert"))}}};0&&(module.exports={AvesClient,AvesError});
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/client.ts","../src/xml-client.ts","../src/schemas/search.ts","../src/schemas/common.ts","../src/schemas/master-record.ts","../src/utils/schema-transform.ts","../src/utils/case-transform.ts","../src/schemas/upsert.ts","../src/utils/result.ts"],"sourcesContent":["// Main client\nexport { AvesClient, AvesError } from './client.js';\n\n// Types\nexport type {\n RqHeader,\n RsStatus,\n FinancialDetail,\n MasterRecordDetail,\n MasterRecordDetailResponse,\n SearchMasterRecord,\n SearchMasterRecordRS,\n ManageMasterRecordRequest,\n ManageMasterRecordRS,\n} from './types.js';\n\n// Schemas (for advanced usage)\nexport { RqHeaderSchema, RsStatusSchema } from './schemas/common.js';\n\nexport {\n MasterRecordDetailSchema,\n MasterRecordDetailApiSchema,\n MasterRecordDetailResponseSchema,\n FinancialDetailSchema,\n} from './schemas/master-record.js';\n\nexport {\n SearchMasterRecordSchema,\n SearchMasterRecordApiSchema,\n SearchMasterRecordRequestSchema,\n SearchMasterRecordResponseSchema,\n} from './schemas/search.js';\n\nexport {\n ManageMasterRecordRequestSchema,\n ManageMasterRecordResponseSchema,\n} from './schemas/upsert.js';\n","import { request as r } from 'undici';\nimport { parse, safeParse } 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 ManageMasterRecordRS,\n MasterRecordDetail,\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';\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 * Error thrown by AVES API operations\n */\nexport class AvesError extends Error {\n constructor(\n message: string,\n public readonly status?: string,\n public readonly errorCode?: string,\n public readonly errorDescription?: string\n ) {\n super(message);\n this.name = 'AvesError';\n }\n}\n\n/**\n * AVES XML REST API client\n */\nexport class AvesClient {\n /**\n * @param baseURL - Base URL of the AVES API\n * @param hostID - 6-digit identification code\n * @param xtoken - Authentication token\n * @param languageCode - Optional 2-digit language code\n */\n constructor(\n private readonly baseURL: string,\n private readonly hostID: string,\n private readonly xtoken: string,\n private readonly languageCode?: string\n ) {\n this.baseURL = baseURL.replace(/\\/$/, '');\n }\n\n private createRqHeader() {\n return {\n '@HostID': this.hostID,\n '@Xtoken': this.xtoken,\n '@Interface': 'WEB' as const,\n '@UserName': 'WEB' as const,\n ...(this.languageCode && { '@LanguageCode': this.languageCode }),\n };\n }\n\n private createUrl(endpoint: string) {\n return `${this.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>(\n output: T,\n rsStatus: {\n status?: string;\n errorCode?: string;\n errorDescription?: string;\n warnings?: string[];\n }\n ): Result<T, AvesError> {\n const status = rsStatus?.status;\n\n if (status === 'ERROR' || status === 'TIMEOUT') {\n return err(\n new AvesError(\n rsStatus.errorDescription || `API Error: ${status}`,\n status,\n rsStatus.errorCode,\n rsStatus.errorDescription\n )\n );\n }\n\n if (status === 'WARNING') {\n const warnings = rsStatus.warnings?.join(', ');\n console.warn('AVES API Warning:', warnings);\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 Error) {\n return new AvesError(error.message);\n }\n return new AvesError(defaultMessage);\n }\n\n private async request<T>(\n endpoint: string,\n requestBody: Record<string, unknown>,\n responseRootKey: string,\n responseSchema:\n | typeof ManageMasterRecordResponseSchema\n | typeof SearchMasterRecordResponseSchema\n ): Promise<Result<T, AvesError>> {\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 });\n\n const responseText = await response.body.text();\n\n if (response.statusCode !== 200) {\n return err(new AvesError(responseText, response.statusCode.toString()));\n }\n\n const jsonResponse = xmlToJson(responseText);\n const rootElement = jsonResponse[responseRootKey];\n\n if (!rootElement) {\n return err(\n new AvesError(\n `Invalid response structure: missing root element '${responseRootKey}'`,\n undefined,\n 'VALIDATION_ERROR'\n )\n );\n }\n\n const parseResult = safeParse(responseSchema, rootElement);\n\n if (!parseResult.success) {\n return err(\n new AvesError(\n `Invalid response format: ${parseResult.issues\n .map((i) => i.message)\n .join(', ')}`,\n '400',\n 'VALIDATION_ERROR'\n )\n );\n }\n\n return this.handleApiStatus(\n parseResult.output as T,\n parseResult.output.rsStatus\n );\n } catch (error) {\n return err(this.toAvesError(error, 'Unknown error occurred'));\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 await 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 masterRecordDetail = {\n '@InsertCriteria': 'T' as const,\n ...apiRecord,\n };\n\n const requestData = parse(ManageMasterRecordRequestSchema, {\n RqHeader: this.createRqHeader(),\n MasterRecordDetail: masterRecordDetail,\n });\n\n const requestBody = createRootElement(\n XML_ROOT_ELEMENTS.UPSERT_REQUEST,\n requestData\n );\n\n return await 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","import { XMLParser, XMLBuilder } from 'fast-xml-parser';\n\nconst parserOptions = {\n ignoreAttributes: false,\n attributeNamePrefix: '@',\n parseAttributeValue: true,\n parseTrueNumberOnly: false,\n trimValues: true,\n ignoreNameSpace: true,\n removeNSPrefix: true,\n parseTagValue: true,\n};\n\nconst builderOptions = {\n ignoreAttributes: false,\n attributeNamePrefix: '@',\n suppressEmptyNode: false,\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 return builder.build(json);\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 return parser.parse(xml);\n}\n","import * as v from 'valibot';\nimport { RqHeaderSchema, RsStatusSchema } from './common.js';\nimport { FinancialDetailSchema, DynamicFieldsSchema } 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(6), 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\n/**\n * Search master record schema for API requests (transforms to PascalCase)\n */\nexport const SearchMasterRecordApiSchema = createApiSchema(\n SearchMasterRecordSchema\n);\n\n/**\n * Complete search request schema with header\n */\nexport const SearchMasterRecordRequestSchema = v.object({\n RqHeader: RqHeaderSchema,\n SearchMasterRecord: SearchMasterRecordApiSchema,\n});\n\nconst MasterRecordDetailApiValidationSchema = v.object({\n '@RecordCode': v.optional(\n v.pipe(\n v.union([v.string(), v.number()]),\n v.transform((val) => String(val)),\n v.minLength(6),\n v.maxLength(6)\n )\n ),\n '@InsertCriteria': v.optional(\n v.union([v.literal('S'), v.literal('N'), v.literal('T'), v.literal('M')])\n ),\n CreatedDate: v.optional(v.string()),\n RecordType: v.optional(\n v.union([v.literal('CUSTOMER'), v.literal('SUPPLIER')])\n ),\n RecordStatus: v.optional(\n v.union(\n [\n v.literal('ENABLED'),\n v.literal('DISABLED'),\n v.literal('WARNING'),\n v.literal('BLACKLISTED'),\n ],\n 'ENABLED'\n )\n ),\n Moniker: v.optional(v.string()),\n Name: v.optional(v.string()),\n LanguageCode: v.optional(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 NewsletterDisabled: v.optional(\n v.union([v.literal('true'), v.literal('false'), v.boolean()])\n ),\n FinancialDetail: v.optional(FinancialDetailSchema),\n DynamicFields: v.optional(v.array(DynamicFieldsSchema)),\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';\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.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(v.string()),\n ErrorDescription: v.optional(v.string()),\n Warnings: warningsSchema,\n});\n","import * as v from 'valibot';\nimport {\n createApiSchema,\n createResponseSchema,\n} from '../utils/schema-transform.js';\n\nconst FinancialDetailInputSchema = v.object({\n currencyCode: v.string(),\n creditLimit: v.optional(v.string()),\n c_PaymentType: v.optional(\n 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 ),\n c_SpecPaymentTypeCode: v.optional(v.string()),\n s_PaymentType: v.optional(\n 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 ),\n s_SpecPaymentTypeCode: 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\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 * 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(\n v.union([v.literal('S'), v.literal('N'), v.literal('T'), v.literal('M')])\n ),\n createdDate: v.optional(v.string()),\n recordType: v.optional(\n v.union([v.literal('CUSTOMER'), v.literal('SUPPLIER')], 'CUSTOMER')\n ),\n recordStatus: v.optional(\n v.union(\n [\n v.literal('ENABLED'),\n v.literal('DISABLED'),\n v.literal('WARNING'),\n v.literal('BLACKLISTED'),\n ],\n 'ENABLED'\n )\n ),\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 financialDetail: v.optional(FinancialDetailInputSchema),\n dynamicFields: v.optional(v.array(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","import * as v from 'valibot';\nimport type { BaseSchema } from 'valibot';\nimport { camelToPascalKeys, pascalToCamelKeys } 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","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\nconst 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 'key',\n 'value',\n 'minDate',\n 'maxDate',\n 'hostID',\n 'xtoken',\n 'interface',\n 'userName',\n 'status',\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 (\n obj instanceof Date ||\n obj instanceof RegExp ||\n obj instanceof Map ||\n obj instanceof Set ||\n obj instanceof Error\n ) {\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 (\n value instanceof Date ||\n value instanceof RegExp ||\n value instanceof Map ||\n value instanceof Set ||\n value instanceof Error\n ) {\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 (\n obj instanceof Date ||\n obj instanceof RegExp ||\n obj instanceof Map ||\n obj instanceof Set ||\n obj instanceof Error\n ) {\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 (\n value instanceof Date ||\n value instanceof RegExp ||\n value instanceof Map ||\n value instanceof Set ||\n value instanceof Error\n ) {\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 { RqHeaderSchema, RsStatusSchema } from './common.js';\nimport { FinancialDetailSchema, DynamicFieldsSchema } from './master-record.js';\nimport { createResponseSchema } from '../utils/schema-transform.js';\n\nconst CustomerRecordApiSchema = v.object({\n CustomerRecordCode: v.pipe(\n v.union([v.string(), v.number()]),\n v.transform((val) => String(val)),\n v.minLength(6),\n v.maxLength(6)\n ),\n});\n\nconst MasterRecordDetailApiValidationSchema = v.object({\n '@RecordCode': v.optional(v.pipe(v.string(), v.minLength(6), v.maxLength(6))),\n '@InsertCriteria': v.optional(\n v.union([v.literal('S'), v.literal('N'), v.literal('T'), v.literal('M')])\n ),\n CreatedDate: v.optional(v.string()),\n RecordType: v.optional(\n v.union([v.literal('CUSTOMER'), v.literal('SUPPLIER')])\n ),\n RecordStatus: v.optional(\n v.union(\n [\n v.literal('ENABLED'),\n v.literal('DISABLED'),\n v.literal('WARNING'),\n v.literal('BLACKLISTED'),\n ],\n 'ENABLED'\n )\n ),\n Moniker: v.optional(v.string()),\n Name: v.optional(v.string()),\n LanguageCode: v.optional(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 NewsletterDisabled: v.optional(\n v.union([v.literal('true'), v.literal('false'), v.boolean()])\n ),\n FinancialDetail: v.optional(FinancialDetailSchema),\n DynamicFields: v.optional(v.array(DynamicFieldsSchema)),\n});\n\n/**\n * Complete upsert request schema with header and required InsertCriteria\n */\nexport const ManageMasterRecordRequestSchema = v.object({\n RqHeader: RqHeaderSchema,\n MasterRecordDetail: v.intersect([\n MasterRecordDetailApiValidationSchema,\n v.object({\n '@InsertCriteria': v.union([\n v.literal('S'),\n v.literal('N'),\n v.literal('T'),\n v.literal('M'),\n ]),\n }),\n ]),\n});\n\n/**\n * Upsert master record response schema (transforms to camelCase)\n */\nexport const ManageMasterRecordResponseSchema = createResponseSchema(\n v.object({\n RsStatus: RsStatusSchema,\n CustomerRecordRS: v.optional(CustomerRecordApiSchema),\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"],"mappings":"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","names":["index_exports","__export","AvesClient","AvesError","FinancialDetailSchema","ManageMasterRecordRequestSchema","ManageMasterRecordResponseSchema","MasterRecordDetailApiSchema","MasterRecordDetailResponseSchema","MasterRecordDetailSchema","RqHeaderSchema","RsStatusSchema","SearchMasterRecordApiSchema","SearchMasterRecordRequestSchema","SearchMasterRecordResponseSchema","SearchMasterRecordSchema","__toCommonJS","import_undici","import_valibot","import_fast_xml_parser","parserOptions","builderOptions","parser","builder","jsonToXml","json","xmlToJson","xml","v","v","RqHeaderSchema","warningsSchema","input","RsStatusSchema","v","v","camelToPascal","str","pascalToCamel","ATTRIBUTE_FIELDS","camelToPascalKeys","obj","item","result","key","value","isAttribute","pascalKey","finalKey","pascalToCamelKeys","strippedKey","camelKey","createApiSchema","inputSchema","input","camelToPascalKeys","createResponseSchema","apiSchema","pascalToCamelKeys","FinancialDetailInputSchema","FinancialDetailSchema","createApiSchema","DynamicFieldsInputSchema","DynamicFieldsSchema","MasterRecordDetailSchema","MasterRecordDetailApiSchema","MasterRecordDetailResponseSchema","createResponseSchema","LastModificationDateInputSchema","languageCodeField","CodeSearchSchema","NameSearchSchema","VatCodeSearchSchema","ZoneSearchSchema","CategorySearchSchema","EmailSearchSchema","LastModDateSearchSchema","SearchFieldSearchSchema","ExternalRefCodeSearchSchema","SearchMasterRecordSchema","SearchMasterRecordApiSchema","createApiSchema","SearchMasterRecordRequestSchema","RqHeaderSchema","MasterRecordDetailApiValidationSchema","val","FinancialDetailSchema","DynamicFieldsSchema","MasterRecordListApiSchema","input","SearchMasterRecordResponseSchema","createResponseSchema","RsStatusSchema","v","CustomerRecordApiSchema","val","MasterRecordDetailApiValidationSchema","FinancialDetailSchema","DynamicFieldsSchema","ManageMasterRecordRequestSchema","RqHeaderSchema","ManageMasterRecordResponseSchema","createResponseSchema","RsStatusSchema","ok","data","err","error","createRootElement","name","object","XML_ROOT_ELEMENTS","AvesError","message","status","errorCode","errorDescription","AvesClient","baseURL","hostID","xtoken","languageCode","endpoint","output","rsStatus","err","warnings","ok","error","defaultMessage","requestBody","responseRootKey","responseSchema","url","xmlBody","jsonToXml","response","r","responseText","rootElement","xmlToJson","parseResult","i","params","requestData","SearchMasterRecordRequestSchema","SearchMasterRecordResponseSchema","record","masterRecordDetail","MasterRecordDetailApiSchema","ManageMasterRecordRequestSchema","ManageMasterRecordResponseSchema"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/client.ts","../src/xml-client.ts","../src/schemas/search.ts","../src/schemas/common.ts","../src/schemas/master-record.ts","../src/utils/schema-transform.ts","../src/utils/case-transform.ts","../src/schemas/upsert.ts","../src/utils/result.ts"],"sourcesContent":["// Main client\nexport { AvesClient, AvesError } from './client.js';\n\n// Types\nexport type {\n RqHeader,\n RsStatus,\n FinancialDetail,\n MasterRecordDetail,\n MasterRecordDetailResponse,\n SearchMasterRecord,\n SearchMasterRecordRS,\n ManageMasterRecordRequest,\n ManageMasterRecordRS,\n} from './types.js';\n","import { request as r } from 'undici';\nimport { parse, safeParse } 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 ManageMasterRecordRS,\n MasterRecordDetail,\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';\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 * Error thrown by AVES API operations\n */\nexport class AvesError extends Error {\n constructor(\n message: string,\n public readonly status?: string,\n public readonly errorCode?: string,\n public readonly errorDescription?: string\n ) {\n super(message);\n this.name = 'AvesError';\n }\n}\n\n/**\n * AVES XML REST API client\n */\nexport class AvesClient {\n /**\n * @param baseURL - Base URL of the AVES API\n * @param hostID - 6-digit identification code\n * @param xtoken - Authentication token\n * @param languageCode - Optional 2-digit language code\n */\n constructor(\n private readonly baseURL: string,\n private readonly hostID: string,\n private readonly xtoken: string,\n private readonly languageCode?: string\n ) {\n this.baseURL = baseURL.replace(/\\/$/, '');\n }\n\n private createRqHeader() {\n return {\n '@HostID': this.hostID,\n '@Xtoken': this.xtoken,\n '@Interface': 'WEB' as const,\n '@UserName': 'WEB' as const,\n ...(this.languageCode && { '@LanguageCode': this.languageCode }),\n };\n }\n\n private createUrl(endpoint: string) {\n return `${this.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>(\n output: T,\n rsStatus: {\n status?: string;\n errorCode?: string;\n errorDescription?: string;\n warnings?: string[];\n }\n ): Result<T, AvesError> {\n const status = rsStatus?.status;\n\n if (status === 'ERROR' || status === 'TIMEOUT') {\n return err(\n new AvesError(\n rsStatus.errorDescription || `API Error: ${status}`,\n status,\n rsStatus.errorCode,\n rsStatus.errorDescription\n )\n );\n }\n\n if (status === 'WARNING') {\n const warnings = rsStatus.warnings?.join(', ');\n console.warn('AVES API Warning:', warnings);\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 Error) {\n return new AvesError(error.message);\n }\n return new AvesError(defaultMessage);\n }\n\n private async request<T>(\n endpoint: string,\n requestBody: Record<string, unknown>,\n responseRootKey: string,\n responseSchema:\n | typeof ManageMasterRecordResponseSchema\n | typeof SearchMasterRecordResponseSchema\n ): Promise<Result<T, AvesError>> {\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 });\n\n const responseText = await response.body.text();\n\n if (response.statusCode !== 200) {\n return err(new AvesError(responseText, response.statusCode.toString()));\n }\n\n const jsonResponse = xmlToJson(responseText);\n const rootElement = jsonResponse[responseRootKey];\n\n if (!rootElement) {\n return err(\n new AvesError(\n `Invalid response structure: missing root element '${responseRootKey}'`,\n undefined,\n 'VALIDATION_ERROR'\n )\n );\n }\n\n const parseResult = safeParse(responseSchema, rootElement);\n\n if (!parseResult.success) {\n return err(\n new AvesError(\n `Invalid response format: ${parseResult.issues\n .map((i) => i.message)\n .join(', ')}`,\n '400',\n 'VALIDATION_ERROR'\n )\n );\n }\n\n return this.handleApiStatus(\n parseResult.output as T,\n parseResult.output.rsStatus\n );\n } catch (error) {\n return err(this.toAvesError(error, 'Unknown error occurred'));\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 await 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 masterRecordDetail = {\n '@InsertCriteria': 'T' as const,\n ...apiRecord,\n };\n\n const requestData = parse(ManageMasterRecordRequestSchema, {\n RqHeader: this.createRqHeader(),\n MasterRecordDetail: masterRecordDetail,\n });\n\n const requestBody = createRootElement(\n XML_ROOT_ELEMENTS.UPSERT_REQUEST,\n requestData\n );\n\n return await 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","import { XMLParser, XMLBuilder } from 'fast-xml-parser';\n\nconst parserOptions = {\n ignoreAttributes: false,\n attributeNamePrefix: '@',\n parseAttributeValue: true,\n parseTrueNumberOnly: false,\n trimValues: true,\n ignoreNameSpace: true,\n removeNSPrefix: true,\n parseTagValue: true,\n};\n\nconst builderOptions = {\n ignoreAttributes: false,\n attributeNamePrefix: '@',\n suppressEmptyNode: false,\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 return builder.build(json);\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 return parser.parse(xml);\n}\n","import * as v from 'valibot';\nimport { RqHeaderSchema, RsStatusSchema } from './common.js';\nimport { FinancialDetailSchema, DynamicFieldsSchema } 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(6), 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\n/**\n * Search master record schema for API requests (transforms to PascalCase)\n */\nexport const SearchMasterRecordApiSchema = createApiSchema(\n SearchMasterRecordSchema\n);\n\n/**\n * Complete search request schema with header\n */\nexport const SearchMasterRecordRequestSchema = v.object({\n RqHeader: RqHeaderSchema,\n SearchMasterRecord: SearchMasterRecordApiSchema,\n});\n\nconst MasterRecordDetailApiValidationSchema = v.object({\n '@RecordCode': v.optional(\n v.pipe(\n v.union([v.string(), v.number()]),\n v.transform((val) => String(val)),\n v.minLength(6),\n v.maxLength(6)\n )\n ),\n '@InsertCriteria': v.optional(\n v.union([v.literal('S'), v.literal('N'), v.literal('T'), v.literal('M')])\n ),\n CreatedDate: v.optional(v.string()),\n RecordType: v.optional(\n v.union([v.literal('CUSTOMER'), v.literal('SUPPLIER')])\n ),\n RecordStatus: v.optional(\n v.union(\n [\n v.literal('ENABLED'),\n v.literal('DISABLED'),\n v.literal('WARNING'),\n v.literal('BLACKLISTED'),\n ],\n 'ENABLED'\n )\n ),\n Moniker: v.optional(v.string()),\n Name: v.optional(v.string()),\n LanguageCode: v.optional(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 NewsletterDisabled: v.optional(\n v.union([v.literal('true'), v.literal('false'), v.boolean()])\n ),\n FinancialDetail: v.optional(FinancialDetailSchema),\n DynamicFields: v.optional(v.array(DynamicFieldsSchema)),\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';\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.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(v.string()),\n ErrorDescription: v.optional(v.string()),\n Warnings: warningsSchema,\n});\n","import * as v from 'valibot';\nimport {\n createApiSchema,\n createResponseSchema,\n} from '../utils/schema-transform.js';\n\nconst FinancialDetailInputSchema = v.object({\n currencyCode: v.string(),\n creditLimit: v.optional(v.string()),\n c_PaymentType: v.optional(\n 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 ),\n c_SpecPaymentTypeCode: v.optional(v.string()),\n s_PaymentType: v.optional(\n 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 ),\n s_SpecPaymentTypeCode: 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\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 * 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(\n v.union([v.literal('S'), v.literal('N'), v.literal('T'), v.literal('M')])\n ),\n createdDate: v.optional(v.string()),\n recordType: v.optional(\n v.union([v.literal('CUSTOMER'), v.literal('SUPPLIER')], 'CUSTOMER')\n ),\n recordStatus: v.optional(\n v.union(\n [\n v.literal('ENABLED'),\n v.literal('DISABLED'),\n v.literal('WARNING'),\n v.literal('BLACKLISTED'),\n ],\n 'ENABLED'\n )\n ),\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 financialDetail: v.optional(FinancialDetailInputSchema),\n dynamicFields: v.optional(v.array(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","import * as v from 'valibot';\nimport type { BaseSchema } from 'valibot';\nimport { camelToPascalKeys, pascalToCamelKeys } 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","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\nconst 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 'key',\n 'value',\n 'minDate',\n 'maxDate',\n 'hostID',\n 'xtoken',\n 'interface',\n 'userName',\n 'status',\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 (\n obj instanceof Date ||\n obj instanceof RegExp ||\n obj instanceof Map ||\n obj instanceof Set ||\n obj instanceof Error\n ) {\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 (\n value instanceof Date ||\n value instanceof RegExp ||\n value instanceof Map ||\n value instanceof Set ||\n value instanceof Error\n ) {\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 (\n obj instanceof Date ||\n obj instanceof RegExp ||\n obj instanceof Map ||\n obj instanceof Set ||\n obj instanceof Error\n ) {\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 (\n value instanceof Date ||\n value instanceof RegExp ||\n value instanceof Map ||\n value instanceof Set ||\n value instanceof Error\n ) {\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 { RqHeaderSchema, RsStatusSchema } from './common.js';\nimport { FinancialDetailSchema, DynamicFieldsSchema } from './master-record.js';\nimport { createResponseSchema } from '../utils/schema-transform.js';\n\nconst CustomerRecordApiSchema = v.object({\n CustomerRecordCode: v.pipe(\n v.union([v.string(), v.number()]),\n v.transform((val) => String(val)),\n v.minLength(6),\n v.maxLength(6)\n ),\n});\n\nconst MasterRecordDetailApiValidationSchema = v.object({\n '@RecordCode': v.optional(v.pipe(v.string(), v.minLength(6), v.maxLength(6))),\n '@InsertCriteria': v.optional(\n v.union([v.literal('S'), v.literal('N'), v.literal('T'), v.literal('M')])\n ),\n CreatedDate: v.optional(v.string()),\n RecordType: v.optional(\n v.union([v.literal('CUSTOMER'), v.literal('SUPPLIER')])\n ),\n RecordStatus: v.optional(\n v.union(\n [\n v.literal('ENABLED'),\n v.literal('DISABLED'),\n v.literal('WARNING'),\n v.literal('BLACKLISTED'),\n ],\n 'ENABLED'\n )\n ),\n Moniker: v.optional(v.string()),\n Name: v.optional(v.string()),\n LanguageCode: v.optional(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 NewsletterDisabled: v.optional(\n v.union([v.literal('true'), v.literal('false'), v.boolean()])\n ),\n FinancialDetail: v.optional(FinancialDetailSchema),\n DynamicFields: v.optional(v.array(DynamicFieldsSchema)),\n});\n\n/**\n * Complete upsert request schema with header and required InsertCriteria\n */\nexport const ManageMasterRecordRequestSchema = v.object({\n RqHeader: RqHeaderSchema,\n MasterRecordDetail: v.intersect([\n MasterRecordDetailApiValidationSchema,\n v.object({\n '@InsertCriteria': v.union([\n v.literal('S'),\n v.literal('N'),\n v.literal('T'),\n v.literal('M'),\n ]),\n }),\n ]),\n});\n\n/**\n * Upsert master record response schema (transforms to camelCase)\n */\nexport const ManageMasterRecordResponseSchema = createResponseSchema(\n v.object({\n RsStatus: RsStatusSchema,\n CustomerRecordRS: v.optional(CustomerRecordApiSchema),\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"],"mappings":"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","names":["index_exports","__export","AvesClient","AvesError","__toCommonJS","import_undici","import_valibot","import_fast_xml_parser","parserOptions","builderOptions","parser","builder","jsonToXml","json","xmlToJson","xml","v","v","RqHeaderSchema","warningsSchema","input","RsStatusSchema","v","v","camelToPascal","str","pascalToCamel","ATTRIBUTE_FIELDS","camelToPascalKeys","obj","item","result","key","value","isAttribute","pascalKey","finalKey","pascalToCamelKeys","strippedKey","camelKey","createApiSchema","inputSchema","input","camelToPascalKeys","createResponseSchema","apiSchema","pascalToCamelKeys","FinancialDetailInputSchema","FinancialDetailSchema","createApiSchema","DynamicFieldsInputSchema","DynamicFieldsSchema","MasterRecordDetailSchema","MasterRecordDetailApiSchema","MasterRecordDetailResponseSchema","createResponseSchema","LastModificationDateInputSchema","languageCodeField","CodeSearchSchema","NameSearchSchema","VatCodeSearchSchema","ZoneSearchSchema","CategorySearchSchema","EmailSearchSchema","LastModDateSearchSchema","SearchFieldSearchSchema","ExternalRefCodeSearchSchema","SearchMasterRecordSchema","SearchMasterRecordApiSchema","createApiSchema","SearchMasterRecordRequestSchema","RqHeaderSchema","MasterRecordDetailApiValidationSchema","val","FinancialDetailSchema","DynamicFieldsSchema","MasterRecordListApiSchema","input","SearchMasterRecordResponseSchema","createResponseSchema","RsStatusSchema","v","CustomerRecordApiSchema","val","MasterRecordDetailApiValidationSchema","FinancialDetailSchema","DynamicFieldsSchema","ManageMasterRecordRequestSchema","RqHeaderSchema","ManageMasterRecordResponseSchema","createResponseSchema","RsStatusSchema","ok","data","err","error","createRootElement","name","object","XML_ROOT_ELEMENTS","AvesError","message","status","errorCode","errorDescription","AvesClient","baseURL","hostID","xtoken","languageCode","endpoint","output","rsStatus","err","warnings","ok","error","defaultMessage","requestBody","responseRootKey","responseSchema","url","xmlBody","jsonToXml","response","r","responseText","rootElement","xmlToJson","parseResult","i","params","requestData","SearchMasterRecordRequestSchema","SearchMasterRecordResponseSchema","record","masterRecordDetail","MasterRecordDetailApiSchema","ManageMasterRecordRequestSchema","ManageMasterRecordResponseSchema"]}
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import{request as Re}from"undici";import{parse as I,safeParse as Se}from"valibot";import{XMLParser as W,XMLBuilder as X}from"fast-xml-parser";var G={ignoreAttributes:!1,attributeNamePrefix:"@",parseAttributeValue:!0,parseTrueNumberOnly:!1,trimValues:!0,ignoreNameSpace:!0,removeNSPrefix:!0,parseTagValue:!0},Q={ignoreAttributes:!1,attributeNamePrefix:"@",suppressEmptyNode:!1},Z=new W(G),J=new X(Q);function w(a){return J.build(a)}function $(a){return Z.parse(a)}import*as e from"valibot";import*as i from"valibot";var h=i.object({"@HostID":i.pipe(i.string(),i.minLength(6),i.maxLength(6)),"@Xtoken":i.string(),"@Interface":i.literal("WEB"),"@UserName":i.literal("WEB"),"@LanguageCode":i.optional(i.pipe(i.string(),i.minLength(2),i.maxLength(2)))}),Y=i.optional(i.pipe(i.string(),i.transform(a=>a.split(",")))),f=i.object({"@Status":i.union([i.literal("OK"),i.literal("ERROR"),i.literal("WARNING"),i.literal("TIMEOUT")]),ErrorCode:i.optional(i.string()),ErrorDescription:i.optional(i.string()),Warnings:Y});import*as t from"valibot";import*as g from"valibot";function ee(a){return a.charAt(0).toUpperCase()+a.slice(1)}function _(a){return a.charAt(0).toLowerCase()+a.slice(1)}var te=new Set(["recordCode","insertCriteria","currencyCode","creditLimit","c_PaymentType","c_SpecPaymentTypeCode","s_PaymentType","s_SpecPaymentTypeCode","key","value","minDate","maxDate","hostID","xtoken","interface","userName","status"]);function y(a){if(!a||typeof a!="object")return a;if(Array.isArray(a))return a.map(s=>y(s));if(a instanceof Date||a instanceof RegExp||a instanceof Map||a instanceof Set||a instanceof Error)return a;let n={};for(let[s,o]of Object.entries(a)){let l=te.has(s),c=ee(s),u=l?`@${c}`:c;o&&typeof o=="object"&&!Array.isArray(o)?o instanceof Date||o instanceof RegExp||o instanceof Map||o instanceof Set||o instanceof Error?n[u]=o:n[u]=y(o):Array.isArray(o)?n[u]=o.map(p=>typeof p=="object"&&p&&!Array.isArray(p)?y(p):p):n[u]=o}return n}function C(a){if(!a||typeof a!="object")return a;if(Array.isArray(a))return a.map(s=>C(s));if(a instanceof Date||a instanceof RegExp||a instanceof Map||a instanceof Set||a instanceof Error)return a;let n={};for(let[s,o]of Object.entries(a))if(s.startsWith("@")){let l=s.slice(1),c=_(l);n[c]=o}else{let l=_(s);o&&typeof o=="object"&&!Array.isArray(o)?o instanceof Date||o instanceof RegExp||o instanceof Map||o instanceof Set||o instanceof Error?n[l]=o:n[l]=C(o):Array.isArray(o)?n[l]=o.map(c=>typeof c=="object"&&c&&!Array.isArray(c)?C(c):c):n[l]=o}return n}function R(a){return g.pipe(a,g.transform(n=>y(n)))}function S(a){return g.pipe(a,g.transform(n=>C(n)))}var U=t.object({currencyCode:t.string(),creditLimit:t.optional(t.string()),c_PaymentType:t.optional(t.union([t.literal("CASH"),t.literal("BANK"),t.literal("RID"),t.literal("RIBA"),t.literal("SPECIFIC_CODE")])),c_SpecPaymentTypeCode:t.optional(t.string()),s_PaymentType:t.optional(t.union([t.literal("CASH"),t.literal("BANK"),t.literal("RID"),t.literal("RIBA"),t.literal("SPECIFIC_CODE")])),s_SpecPaymentTypeCode:t.optional(t.string())}),T=R(U),B=t.object({key:t.string(),value:t.string()}),M=R(B),H=t.object({recordCode:t.optional(t.pipe(t.string(),t.minLength(6),t.maxLength(6))),insertCriteria:t.optional(t.union([t.literal("S"),t.literal("N"),t.literal("T"),t.literal("M")])),createdDate:t.optional(t.string()),recordType:t.optional(t.union([t.literal("CUSTOMER"),t.literal("SUPPLIER")],"CUSTOMER")),recordStatus:t.optional(t.union([t.literal("ENABLED"),t.literal("DISABLED"),t.literal("WARNING"),t.literal("BLACKLISTED")],"ENABLED")),moniker:t.optional(t.string()),name:t.optional(t.string()),extraInfo:t.optional(t.string()),languageCode:t.pipe(t.string(),t.minLength(2),t.maxLength(2)),address:t.optional(t.string()),zipCode:t.optional(t.string()),cityName:t.optional(t.string()),countyCode:t.optional(t.string()),stateCode:t.optional(t.string()),categoryCode:t.optional(t.string()),firstPhoneNumber:t.optional(t.string()),mobilePhoneNumber:t.optional(t.string()),email:t.optional(t.string()),gender:t.optional(t.string()),birthDate:t.optional(t.string()),fiscalCode:t.optional(t.string()),vatCode:t.optional(t.string()),financialDetail:t.optional(U),dynamicFields:t.optional(t.array(B))}),D=R(H),re=S(D);var ae=e.object({minDate:e.string(),maxDate:e.string()}),m=e.optional(e.pipe(e.string(),e.minLength(2),e.maxLength(2))),oe=e.object({searchType:e.literal("CODE"),recordCode:e.pipe(e.string(),e.minLength(6),e.maxLength(6)),languageCode:m}),ne=e.object({searchType:e.literal("NAME"),name:e.string(),city:e.optional(e.string()),languageCode:m}),ie=e.object({searchType:e.literal("VATCODE"),vatCode:e.string(),phoneNumber:e.optional(e.string()),languageCode:m}),se=e.object({searchType:e.literal("ZONE"),zipCode:e.string(),countyCode:e.string(),city:e.optional(e.string()),languageCode:m}),ce=e.object({searchType:e.literal("CATEGORY"),categoryCode:e.string(),languageCode:m}),le=e.object({searchType:e.literal("EMAIL"),email:e.string(),languageCode:m}),ve=e.object({searchType:e.literal("LASTMODDATE"),lastModificationDate:ae,languageCode:m}),pe=e.object({searchType:e.literal("SEARCH_FIELD"),searchFieldValue:e.string(),languageCode:m}),me=e.object({searchType:e.literal("EXTERNAL_REF_CODE"),searchFieldValue:e.string(),languageCode:m}),q=e.union([oe,ne,ie,se,ce,le,ve,pe,me]),z=R(q),x=e.object({RqHeader:h,SearchMasterRecord:z}),k=e.object({"@RecordCode":e.optional(e.pipe(e.union([e.string(),e.number()]),e.transform(a=>String(a)),e.minLength(6),e.maxLength(6))),"@InsertCriteria":e.optional(e.union([e.literal("S"),e.literal("N"),e.literal("T"),e.literal("M")])),CreatedDate:e.optional(e.string()),RecordType:e.optional(e.union([e.literal("CUSTOMER"),e.literal("SUPPLIER")])),RecordStatus:e.optional(e.union([e.literal("ENABLED"),e.literal("DISABLED"),e.literal("WARNING"),e.literal("BLACKLISTED")],"ENABLED")),Moniker:e.optional(e.string()),Name:e.optional(e.string()),LanguageCode:e.optional(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()),NewsletterDisabled:e.optional(e.union([e.literal("true"),e.literal("false"),e.boolean()])),FinancialDetail:e.optional(T),DynamicFields:e.optional(e.array(M))}),de=e.object({MasterRecordDetail:e.optional(e.pipe(e.union([e.array(k),k]),e.transform(a=>{if(a)return Array.isArray(a)?a:[a]})))}),L=S(e.object({RsStatus:f,MasterRecordList:e.optional(de)}));import*as r from"valibot";var ue=r.object({CustomerRecordCode:r.pipe(r.union([r.string(),r.number()]),r.transform(a=>String(a)),r.minLength(6),r.maxLength(6))}),ge=r.object({"@RecordCode":r.optional(r.pipe(r.string(),r.minLength(6),r.maxLength(6))),"@InsertCriteria":r.optional(r.union([r.literal("S"),r.literal("N"),r.literal("T"),r.literal("M")])),CreatedDate:r.optional(r.string()),RecordType:r.optional(r.union([r.literal("CUSTOMER"),r.literal("SUPPLIER")])),RecordStatus:r.optional(r.union([r.literal("ENABLED"),r.literal("DISABLED"),r.literal("WARNING"),r.literal("BLACKLISTED")],"ENABLED")),Moniker:r.optional(r.string()),Name:r.optional(r.string()),LanguageCode:r.optional(r.pipe(r.string(),r.minLength(2),r.maxLength(2))),Address:r.optional(r.string()),ZipCode:r.optional(r.string()),CityName:r.optional(r.string()),CountyCode:r.optional(r.string()),StateCode:r.optional(r.string()),CategoryCode:r.optional(r.string()),FirstPhoneNumber:r.optional(r.string()),MobilePhoneNumber:r.optional(r.string()),Email:r.optional(r.string()),Gender:r.optional(r.string()),BirthDate:r.optional(r.string()),FiscalCode:r.optional(r.string()),NewsletterDisabled:r.optional(r.union([r.literal("true"),r.literal("false"),r.boolean()])),FinancialDetail:r.optional(T),DynamicFields:r.optional(r.array(M))}),P=r.object({RqHeader:h,MasterRecordDetail:r.intersect([ge,r.object({"@InsertCriteria":r.union([r.literal("S"),r.literal("N"),r.literal("T"),r.literal("M")])})])}),N=S(r.object({RsStatus:f,CustomerRecordRS:r.optional(ue)}));function K(a){return{success:!0,data:a}}function d(a){return{success:!1,error:a}}function j(a,n){return{[a]:n}}var A={SEARCH_REQUEST:"SearchMasterRecordRQ",SEARCH_RESPONSE:"SearchMasterRecordRS",UPSERT_REQUEST:"ManageMasterRecordRQ",UPSERT_RESPONSE:"ManageMasterRecordRS"},v=class extends Error{constructor(s,o,l,c){super(s);this.status=o;this.errorCode=l;this.errorDescription=c;this.name="AvesError"}},b=class{constructor(n,s,o,l){this.baseURL=n;this.hostID=s;this.xtoken=o;this.languageCode=l;this.baseURL=n.replace(/\/$/,"")}createRqHeader(){return{"@HostID":this.hostID,"@Xtoken":this.xtoken,"@Interface":"WEB","@UserName":"WEB",...this.languageCode&&{"@LanguageCode":this.languageCode}}}createUrl(n){return`${this.baseURL}${n}`}get endpoints(){return{search:"/interop/masterRecords/v2/rest/Search",upsert:"/interop/masterRecords/v2/rest/InsertOrUpdate"}}handleApiStatus(n,s){let o=s?.status;if(o==="ERROR"||o==="TIMEOUT")return d(new v(s.errorDescription||`API Error: ${o}`,o,s.errorCode,s.errorDescription));if(o==="WARNING"){let l=s.warnings?.join(", ");console.warn("AVES API Warning:",l)}return K(n)}toAvesError(n,s){return n instanceof v?n:n instanceof Error?new v(n.message):new v(s)}async request(n,s,o,l){try{let c=this.createUrl(n),u=w(s),p=await Re(c,{method:"POST",headers:{"Content-Type":"application/xml"},body:u}),F=await p.body.text();if(p.statusCode!==200)return d(new v(F,p.statusCode.toString()));let O=$(F)[o];if(!O)return d(new v(`Invalid response structure: missing root element '${o}'`,void 0,"VALIDATION_ERROR"));let E=Se(l,O);return E.success?this.handleApiStatus(E.output,E.output.rsStatus):d(new v(`Invalid response format: ${E.issues.map(V=>V.message).join(", ")}`,"400","VALIDATION_ERROR"))}catch(c){return d(this.toAvesError(c,"Unknown error occurred"))}}async search(n){try{let s=I(x,{RqHeader:this.createRqHeader(),SearchMasterRecord:n}),o=j(A.SEARCH_REQUEST,s);return await this.request(this.endpoints.search,o,A.SEARCH_RESPONSE,L)}catch(s){return d(this.toAvesError(s,"Validation error occurred during search"))}}async upsertRecord(n){try{let o={"@InsertCriteria":"T",...I(D,n)},l=I(P,{RqHeader:this.createRqHeader(),MasterRecordDetail:o}),c=j(A.UPSERT_REQUEST,l);return await this.request(this.endpoints.upsert,c,A.UPSERT_RESPONSE,N)}catch(s){return d(this.toAvesError(s,"Validation error occurred during upsert"))}}};export{b as AvesClient,v as AvesError,T as FinancialDetailSchema,P as ManageMasterRecordRequestSchema,N as ManageMasterRecordResponseSchema,D as MasterRecordDetailApiSchema,re as MasterRecordDetailResponseSchema,H as MasterRecordDetailSchema,h as RqHeaderSchema,f as RsStatusSchema,z as SearchMasterRecordApiSchema,x as SearchMasterRecordRequestSchema,L as SearchMasterRecordResponseSchema,q as SearchMasterRecordSchema};
1
+ import{request as ge}from"undici";import{parse as x,safeParse as Re}from"valibot";import{XMLParser as K,XMLBuilder as j}from"fast-xml-parser";var V={ignoreAttributes:!1,attributeNamePrefix:"@",parseAttributeValue:!0,parseTrueNumberOnly:!1,trimValues:!0,ignoreNameSpace:!0,removeNSPrefix:!0,parseTagValue:!0},W={ignoreAttributes:!1,attributeNamePrefix:"@",suppressEmptyNode:!1},X=new K(V),G=new j(W);function I(a){return G.build(a)}function b(a){return X.parse(a)}import*as e from"valibot";import*as i from"valibot";var C=i.object({"@HostID":i.pipe(i.string(),i.minLength(6),i.maxLength(6)),"@Xtoken":i.string(),"@Interface":i.literal("WEB"),"@UserName":i.literal("WEB"),"@LanguageCode":i.optional(i.pipe(i.string(),i.minLength(2),i.maxLength(2)))}),Q=i.optional(i.pipe(i.string(),i.transform(a=>a.split(",")))),T=i.object({"@Status":i.union([i.literal("OK"),i.literal("ERROR"),i.literal("WARNING"),i.literal("TIMEOUT")]),ErrorCode:i.optional(i.string()),ErrorDescription:i.optional(i.string()),Warnings:Q});import*as t from"valibot";import*as g from"valibot";function Z(a){return a.charAt(0).toUpperCase()+a.slice(1)}function F(a){return a.charAt(0).toLowerCase()+a.slice(1)}var J=new Set(["recordCode","insertCriteria","currencyCode","creditLimit","c_PaymentType","c_SpecPaymentTypeCode","s_PaymentType","s_SpecPaymentTypeCode","key","value","minDate","maxDate","hostID","xtoken","interface","userName","status"]);function h(a){if(!a||typeof a!="object")return a;if(Array.isArray(a))return a.map(s=>h(s));if(a instanceof Date||a instanceof RegExp||a instanceof Map||a instanceof Set||a instanceof Error)return a;let o={};for(let[s,n]of Object.entries(a)){let l=J.has(s),c=Z(s),u=l?`@${c}`:c;n&&typeof n=="object"&&!Array.isArray(n)?n instanceof Date||n instanceof RegExp||n instanceof Map||n instanceof Set||n instanceof Error?o[u]=n:o[u]=h(n):Array.isArray(n)?o[u]=n.map(p=>typeof p=="object"&&p&&!Array.isArray(p)?h(p):p):o[u]=n}return o}function f(a){if(!a||typeof a!="object")return a;if(Array.isArray(a))return a.map(s=>f(s));if(a instanceof Date||a instanceof RegExp||a instanceof Map||a instanceof Set||a instanceof Error)return a;let o={};for(let[s,n]of Object.entries(a))if(s.startsWith("@")){let l=s.slice(1),c=F(l);o[c]=n}else{let l=F(s);n&&typeof n=="object"&&!Array.isArray(n)?n instanceof Date||n instanceof RegExp||n instanceof Map||n instanceof Set||n instanceof Error?o[l]=n:o[l]=f(n):Array.isArray(n)?o[l]=n.map(c=>typeof c=="object"&&c&&!Array.isArray(c)?f(c):c):o[l]=n}return o}function R(a){return g.pipe(a,g.transform(o=>h(o)))}function S(a){return g.pipe(a,g.transform(o=>f(o)))}var O=t.object({currencyCode:t.string(),creditLimit:t.optional(t.string()),c_PaymentType:t.optional(t.union([t.literal("CASH"),t.literal("BANK"),t.literal("RID"),t.literal("RIBA"),t.literal("SPECIFIC_CODE")])),c_SpecPaymentTypeCode:t.optional(t.string()),s_PaymentType:t.optional(t.union([t.literal("CASH"),t.literal("BANK"),t.literal("RID"),t.literal("RIBA"),t.literal("SPECIFIC_CODE")])),s_SpecPaymentTypeCode:t.optional(t.string())}),E=R(O),w=t.object({key:t.string(),value:t.string()}),D=R(w),Y=t.object({recordCode:t.optional(t.pipe(t.string(),t.minLength(6),t.maxLength(6))),insertCriteria:t.optional(t.union([t.literal("S"),t.literal("N"),t.literal("T"),t.literal("M")])),createdDate:t.optional(t.string()),recordType:t.optional(t.union([t.literal("CUSTOMER"),t.literal("SUPPLIER")],"CUSTOMER")),recordStatus:t.optional(t.union([t.literal("ENABLED"),t.literal("DISABLED"),t.literal("WARNING"),t.literal("BLACKLISTED")],"ENABLED")),moniker:t.optional(t.string()),name:t.optional(t.string()),extraInfo:t.optional(t.string()),languageCode:t.pipe(t.string(),t.minLength(2),t.maxLength(2)),address:t.optional(t.string()),zipCode:t.optional(t.string()),cityName:t.optional(t.string()),countyCode:t.optional(t.string()),stateCode:t.optional(t.string()),categoryCode:t.optional(t.string()),firstPhoneNumber:t.optional(t.string()),mobilePhoneNumber:t.optional(t.string()),email:t.optional(t.string()),gender:t.optional(t.string()),birthDate:t.optional(t.string()),fiscalCode:t.optional(t.string()),vatCode:t.optional(t.string()),financialDetail:t.optional(O),dynamicFields:t.optional(t.array(w))}),M=R(Y),Ae=S(M);var ee=e.object({minDate:e.string(),maxDate:e.string()}),m=e.optional(e.pipe(e.string(),e.minLength(2),e.maxLength(2))),te=e.object({searchType:e.literal("CODE"),recordCode:e.pipe(e.string(),e.minLength(6),e.maxLength(6)),languageCode:m}),re=e.object({searchType:e.literal("NAME"),name:e.string(),city:e.optional(e.string()),languageCode:m}),ae=e.object({searchType:e.literal("VATCODE"),vatCode:e.string(),phoneNumber:e.optional(e.string()),languageCode:m}),ne=e.object({searchType:e.literal("ZONE"),zipCode:e.string(),countyCode:e.string(),city:e.optional(e.string()),languageCode:m}),oe=e.object({searchType:e.literal("CATEGORY"),categoryCode:e.string(),languageCode:m}),ie=e.object({searchType:e.literal("EMAIL"),email:e.string(),languageCode:m}),se=e.object({searchType:e.literal("LASTMODDATE"),lastModificationDate:ee,languageCode:m}),ce=e.object({searchType:e.literal("SEARCH_FIELD"),searchFieldValue:e.string(),languageCode:m}),le=e.object({searchType:e.literal("EXTERNAL_REF_CODE"),searchFieldValue:e.string(),languageCode:m}),ve=e.union([te,re,ae,ne,oe,ie,se,ce,le]),pe=R(ve),_=e.object({RqHeader:C,SearchMasterRecord:pe}),$=e.object({"@RecordCode":e.optional(e.pipe(e.union([e.string(),e.number()]),e.transform(a=>String(a)),e.minLength(6),e.maxLength(6))),"@InsertCriteria":e.optional(e.union([e.literal("S"),e.literal("N"),e.literal("T"),e.literal("M")])),CreatedDate:e.optional(e.string()),RecordType:e.optional(e.union([e.literal("CUSTOMER"),e.literal("SUPPLIER")])),RecordStatus:e.optional(e.union([e.literal("ENABLED"),e.literal("DISABLED"),e.literal("WARNING"),e.literal("BLACKLISTED")],"ENABLED")),Moniker:e.optional(e.string()),Name:e.optional(e.string()),LanguageCode:e.optional(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()),NewsletterDisabled:e.optional(e.union([e.literal("true"),e.literal("false"),e.boolean()])),FinancialDetail:e.optional(E),DynamicFields:e.optional(e.array(D))}),me=e.object({MasterRecordDetail:e.optional(e.pipe(e.union([e.array($),$]),e.transform(a=>{if(a)return Array.isArray(a)?a:[a]})))}),U=S(e.object({RsStatus:T,MasterRecordList:e.optional(me)}));import*as r from"valibot";var de=r.object({CustomerRecordCode:r.pipe(r.union([r.string(),r.number()]),r.transform(a=>String(a)),r.minLength(6),r.maxLength(6))}),ue=r.object({"@RecordCode":r.optional(r.pipe(r.string(),r.minLength(6),r.maxLength(6))),"@InsertCriteria":r.optional(r.union([r.literal("S"),r.literal("N"),r.literal("T"),r.literal("M")])),CreatedDate:r.optional(r.string()),RecordType:r.optional(r.union([r.literal("CUSTOMER"),r.literal("SUPPLIER")])),RecordStatus:r.optional(r.union([r.literal("ENABLED"),r.literal("DISABLED"),r.literal("WARNING"),r.literal("BLACKLISTED")],"ENABLED")),Moniker:r.optional(r.string()),Name:r.optional(r.string()),LanguageCode:r.optional(r.pipe(r.string(),r.minLength(2),r.maxLength(2))),Address:r.optional(r.string()),ZipCode:r.optional(r.string()),CityName:r.optional(r.string()),CountyCode:r.optional(r.string()),StateCode:r.optional(r.string()),CategoryCode:r.optional(r.string()),FirstPhoneNumber:r.optional(r.string()),MobilePhoneNumber:r.optional(r.string()),Email:r.optional(r.string()),Gender:r.optional(r.string()),BirthDate:r.optional(r.string()),FiscalCode:r.optional(r.string()),NewsletterDisabled:r.optional(r.union([r.literal("true"),r.literal("false"),r.boolean()])),FinancialDetail:r.optional(E),DynamicFields:r.optional(r.array(D))}),B=r.object({RqHeader:C,MasterRecordDetail:r.intersect([ue,r.object({"@InsertCriteria":r.union([r.literal("S"),r.literal("N"),r.literal("T"),r.literal("M")])})])}),k=S(r.object({RsStatus:T,CustomerRecordRS:r.optional(de)}));function H(a){return{success:!0,data:a}}function d(a){return{success:!1,error:a}}function z(a,o){return{[a]:o}}var A={SEARCH_REQUEST:"SearchMasterRecordRQ",SEARCH_RESPONSE:"SearchMasterRecordRS",UPSERT_REQUEST:"ManageMasterRecordRQ",UPSERT_RESPONSE:"ManageMasterRecordRS"},v=class extends Error{constructor(s,n,l,c){super(s);this.status=n;this.errorCode=l;this.errorDescription=c;this.name="AvesError"}},L=class{constructor(o,s,n,l){this.baseURL=o;this.hostID=s;this.xtoken=n;this.languageCode=l;this.baseURL=o.replace(/\/$/,"")}createRqHeader(){return{"@HostID":this.hostID,"@Xtoken":this.xtoken,"@Interface":"WEB","@UserName":"WEB",...this.languageCode&&{"@LanguageCode":this.languageCode}}}createUrl(o){return`${this.baseURL}${o}`}get endpoints(){return{search:"/interop/masterRecords/v2/rest/Search",upsert:"/interop/masterRecords/v2/rest/InsertOrUpdate"}}handleApiStatus(o,s){let n=s?.status;if(n==="ERROR"||n==="TIMEOUT")return d(new v(s.errorDescription||`API Error: ${n}`,n,s.errorCode,s.errorDescription));if(n==="WARNING"){let l=s.warnings?.join(", ");console.warn("AVES API Warning:",l)}return H(o)}toAvesError(o,s){return o instanceof v?o:o instanceof Error?new v(o.message):new v(s)}async request(o,s,n,l){try{let c=this.createUrl(o),u=I(s),p=await ge(c,{method:"POST",headers:{"Content-Type":"application/xml"},body:u}),P=await p.body.text();if(p.statusCode!==200)return d(new v(P,p.statusCode.toString()));let N=b(P)[n];if(!N)return d(new v(`Invalid response structure: missing root element '${n}'`,void 0,"VALIDATION_ERROR"));let y=Re(l,N);return y.success?this.handleApiStatus(y.output,y.output.rsStatus):d(new v(`Invalid response format: ${y.issues.map(q=>q.message).join(", ")}`,"400","VALIDATION_ERROR"))}catch(c){return d(this.toAvesError(c,"Unknown error occurred"))}}async search(o){try{let s=x(_,{RqHeader:this.createRqHeader(),SearchMasterRecord:o}),n=z(A.SEARCH_REQUEST,s);return await this.request(this.endpoints.search,n,A.SEARCH_RESPONSE,U)}catch(s){return d(this.toAvesError(s,"Validation error occurred during search"))}}async upsertRecord(o){try{let n={"@InsertCriteria":"T",...x(M,o)},l=x(B,{RqHeader:this.createRqHeader(),MasterRecordDetail:n}),c=z(A.UPSERT_REQUEST,l);return await this.request(this.endpoints.upsert,c,A.UPSERT_RESPONSE,k)}catch(s){return d(this.toAvesError(s,"Validation error occurred during upsert"))}}};export{L as AvesClient,v as AvesError};
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/client.ts","../src/xml-client.ts","../src/schemas/search.ts","../src/schemas/common.ts","../src/schemas/master-record.ts","../src/utils/schema-transform.ts","../src/utils/case-transform.ts","../src/schemas/upsert.ts","../src/utils/result.ts"],"sourcesContent":["import { request as r } from 'undici';\nimport { parse, safeParse } 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 ManageMasterRecordRS,\n MasterRecordDetail,\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';\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 * Error thrown by AVES API operations\n */\nexport class AvesError extends Error {\n constructor(\n message: string,\n public readonly status?: string,\n public readonly errorCode?: string,\n public readonly errorDescription?: string\n ) {\n super(message);\n this.name = 'AvesError';\n }\n}\n\n/**\n * AVES XML REST API client\n */\nexport class AvesClient {\n /**\n * @param baseURL - Base URL of the AVES API\n * @param hostID - 6-digit identification code\n * @param xtoken - Authentication token\n * @param languageCode - Optional 2-digit language code\n */\n constructor(\n private readonly baseURL: string,\n private readonly hostID: string,\n private readonly xtoken: string,\n private readonly languageCode?: string\n ) {\n this.baseURL = baseURL.replace(/\\/$/, '');\n }\n\n private createRqHeader() {\n return {\n '@HostID': this.hostID,\n '@Xtoken': this.xtoken,\n '@Interface': 'WEB' as const,\n '@UserName': 'WEB' as const,\n ...(this.languageCode && { '@LanguageCode': this.languageCode }),\n };\n }\n\n private createUrl(endpoint: string) {\n return `${this.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>(\n output: T,\n rsStatus: {\n status?: string;\n errorCode?: string;\n errorDescription?: string;\n warnings?: string[];\n }\n ): Result<T, AvesError> {\n const status = rsStatus?.status;\n\n if (status === 'ERROR' || status === 'TIMEOUT') {\n return err(\n new AvesError(\n rsStatus.errorDescription || `API Error: ${status}`,\n status,\n rsStatus.errorCode,\n rsStatus.errorDescription\n )\n );\n }\n\n if (status === 'WARNING') {\n const warnings = rsStatus.warnings?.join(', ');\n console.warn('AVES API Warning:', warnings);\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 Error) {\n return new AvesError(error.message);\n }\n return new AvesError(defaultMessage);\n }\n\n private async request<T>(\n endpoint: string,\n requestBody: Record<string, unknown>,\n responseRootKey: string,\n responseSchema:\n | typeof ManageMasterRecordResponseSchema\n | typeof SearchMasterRecordResponseSchema\n ): Promise<Result<T, AvesError>> {\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 });\n\n const responseText = await response.body.text();\n\n if (response.statusCode !== 200) {\n return err(new AvesError(responseText, response.statusCode.toString()));\n }\n\n const jsonResponse = xmlToJson(responseText);\n const rootElement = jsonResponse[responseRootKey];\n\n if (!rootElement) {\n return err(\n new AvesError(\n `Invalid response structure: missing root element '${responseRootKey}'`,\n undefined,\n 'VALIDATION_ERROR'\n )\n );\n }\n\n const parseResult = safeParse(responseSchema, rootElement);\n\n if (!parseResult.success) {\n return err(\n new AvesError(\n `Invalid response format: ${parseResult.issues\n .map((i) => i.message)\n .join(', ')}`,\n '400',\n 'VALIDATION_ERROR'\n )\n );\n }\n\n return this.handleApiStatus(\n parseResult.output as T,\n parseResult.output.rsStatus\n );\n } catch (error) {\n return err(this.toAvesError(error, 'Unknown error occurred'));\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 await 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 masterRecordDetail = {\n '@InsertCriteria': 'T' as const,\n ...apiRecord,\n };\n\n const requestData = parse(ManageMasterRecordRequestSchema, {\n RqHeader: this.createRqHeader(),\n MasterRecordDetail: masterRecordDetail,\n });\n\n const requestBody = createRootElement(\n XML_ROOT_ELEMENTS.UPSERT_REQUEST,\n requestData\n );\n\n return await 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","import { XMLParser, XMLBuilder } from 'fast-xml-parser';\n\nconst parserOptions = {\n ignoreAttributes: false,\n attributeNamePrefix: '@',\n parseAttributeValue: true,\n parseTrueNumberOnly: false,\n trimValues: true,\n ignoreNameSpace: true,\n removeNSPrefix: true,\n parseTagValue: true,\n};\n\nconst builderOptions = {\n ignoreAttributes: false,\n attributeNamePrefix: '@',\n suppressEmptyNode: false,\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 return builder.build(json);\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 return parser.parse(xml);\n}\n","import * as v from 'valibot';\nimport { RqHeaderSchema, RsStatusSchema } from './common.js';\nimport { FinancialDetailSchema, DynamicFieldsSchema } 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(6), 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\n/**\n * Search master record schema for API requests (transforms to PascalCase)\n */\nexport const SearchMasterRecordApiSchema = createApiSchema(\n SearchMasterRecordSchema\n);\n\n/**\n * Complete search request schema with header\n */\nexport const SearchMasterRecordRequestSchema = v.object({\n RqHeader: RqHeaderSchema,\n SearchMasterRecord: SearchMasterRecordApiSchema,\n});\n\nconst MasterRecordDetailApiValidationSchema = v.object({\n '@RecordCode': v.optional(\n v.pipe(\n v.union([v.string(), v.number()]),\n v.transform((val) => String(val)),\n v.minLength(6),\n v.maxLength(6)\n )\n ),\n '@InsertCriteria': v.optional(\n v.union([v.literal('S'), v.literal('N'), v.literal('T'), v.literal('M')])\n ),\n CreatedDate: v.optional(v.string()),\n RecordType: v.optional(\n v.union([v.literal('CUSTOMER'), v.literal('SUPPLIER')])\n ),\n RecordStatus: v.optional(\n v.union(\n [\n v.literal('ENABLED'),\n v.literal('DISABLED'),\n v.literal('WARNING'),\n v.literal('BLACKLISTED'),\n ],\n 'ENABLED'\n )\n ),\n Moniker: v.optional(v.string()),\n Name: v.optional(v.string()),\n LanguageCode: v.optional(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 NewsletterDisabled: v.optional(\n v.union([v.literal('true'), v.literal('false'), v.boolean()])\n ),\n FinancialDetail: v.optional(FinancialDetailSchema),\n DynamicFields: v.optional(v.array(DynamicFieldsSchema)),\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';\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.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(v.string()),\n ErrorDescription: v.optional(v.string()),\n Warnings: warningsSchema,\n});\n","import * as v from 'valibot';\nimport {\n createApiSchema,\n createResponseSchema,\n} from '../utils/schema-transform.js';\n\nconst FinancialDetailInputSchema = v.object({\n currencyCode: v.string(),\n creditLimit: v.optional(v.string()),\n c_PaymentType: v.optional(\n 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 ),\n c_SpecPaymentTypeCode: v.optional(v.string()),\n s_PaymentType: v.optional(\n 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 ),\n s_SpecPaymentTypeCode: 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\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 * 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(\n v.union([v.literal('S'), v.literal('N'), v.literal('T'), v.literal('M')])\n ),\n createdDate: v.optional(v.string()),\n recordType: v.optional(\n v.union([v.literal('CUSTOMER'), v.literal('SUPPLIER')], 'CUSTOMER')\n ),\n recordStatus: v.optional(\n v.union(\n [\n v.literal('ENABLED'),\n v.literal('DISABLED'),\n v.literal('WARNING'),\n v.literal('BLACKLISTED'),\n ],\n 'ENABLED'\n )\n ),\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 financialDetail: v.optional(FinancialDetailInputSchema),\n dynamicFields: v.optional(v.array(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","import * as v from 'valibot';\nimport type { BaseSchema } from 'valibot';\nimport { camelToPascalKeys, pascalToCamelKeys } 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","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\nconst 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 'key',\n 'value',\n 'minDate',\n 'maxDate',\n 'hostID',\n 'xtoken',\n 'interface',\n 'userName',\n 'status',\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 (\n obj instanceof Date ||\n obj instanceof RegExp ||\n obj instanceof Map ||\n obj instanceof Set ||\n obj instanceof Error\n ) {\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 (\n value instanceof Date ||\n value instanceof RegExp ||\n value instanceof Map ||\n value instanceof Set ||\n value instanceof Error\n ) {\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 (\n obj instanceof Date ||\n obj instanceof RegExp ||\n obj instanceof Map ||\n obj instanceof Set ||\n obj instanceof Error\n ) {\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 (\n value instanceof Date ||\n value instanceof RegExp ||\n value instanceof Map ||\n value instanceof Set ||\n value instanceof Error\n ) {\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 { RqHeaderSchema, RsStatusSchema } from './common.js';\nimport { FinancialDetailSchema, DynamicFieldsSchema } from './master-record.js';\nimport { createResponseSchema } from '../utils/schema-transform.js';\n\nconst CustomerRecordApiSchema = v.object({\n CustomerRecordCode: v.pipe(\n v.union([v.string(), v.number()]),\n v.transform((val) => String(val)),\n v.minLength(6),\n v.maxLength(6)\n ),\n});\n\nconst MasterRecordDetailApiValidationSchema = v.object({\n '@RecordCode': v.optional(v.pipe(v.string(), v.minLength(6), v.maxLength(6))),\n '@InsertCriteria': v.optional(\n v.union([v.literal('S'), v.literal('N'), v.literal('T'), v.literal('M')])\n ),\n CreatedDate: v.optional(v.string()),\n RecordType: v.optional(\n v.union([v.literal('CUSTOMER'), v.literal('SUPPLIER')])\n ),\n RecordStatus: v.optional(\n v.union(\n [\n v.literal('ENABLED'),\n v.literal('DISABLED'),\n v.literal('WARNING'),\n v.literal('BLACKLISTED'),\n ],\n 'ENABLED'\n )\n ),\n Moniker: v.optional(v.string()),\n Name: v.optional(v.string()),\n LanguageCode: v.optional(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 NewsletterDisabled: v.optional(\n v.union([v.literal('true'), v.literal('false'), v.boolean()])\n ),\n FinancialDetail: v.optional(FinancialDetailSchema),\n DynamicFields: v.optional(v.array(DynamicFieldsSchema)),\n});\n\n/**\n * Complete upsert request schema with header and required InsertCriteria\n */\nexport const ManageMasterRecordRequestSchema = v.object({\n RqHeader: RqHeaderSchema,\n MasterRecordDetail: v.intersect([\n MasterRecordDetailApiValidationSchema,\n v.object({\n '@InsertCriteria': v.union([\n v.literal('S'),\n v.literal('N'),\n v.literal('T'),\n v.literal('M'),\n ]),\n }),\n ]),\n});\n\n/**\n * Upsert master record response schema (transforms to camelCase)\n */\nexport const ManageMasterRecordResponseSchema = createResponseSchema(\n v.object({\n RsStatus: RsStatusSchema,\n CustomerRecordRS: v.optional(CustomerRecordApiSchema),\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"],"mappings":"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","names":["r","parse","safeParse","XMLParser","XMLBuilder","parserOptions","builderOptions","parser","builder","jsonToXml","json","xmlToJson","xml","v","v","RqHeaderSchema","warningsSchema","input","RsStatusSchema","v","v","camelToPascal","str","pascalToCamel","ATTRIBUTE_FIELDS","camelToPascalKeys","obj","item","result","key","value","isAttribute","pascalKey","finalKey","pascalToCamelKeys","strippedKey","camelKey","createApiSchema","inputSchema","input","camelToPascalKeys","createResponseSchema","apiSchema","pascalToCamelKeys","FinancialDetailInputSchema","FinancialDetailSchema","createApiSchema","DynamicFieldsInputSchema","DynamicFieldsSchema","MasterRecordDetailSchema","MasterRecordDetailApiSchema","MasterRecordDetailResponseSchema","createResponseSchema","LastModificationDateInputSchema","languageCodeField","CodeSearchSchema","NameSearchSchema","VatCodeSearchSchema","ZoneSearchSchema","CategorySearchSchema","EmailSearchSchema","LastModDateSearchSchema","SearchFieldSearchSchema","ExternalRefCodeSearchSchema","SearchMasterRecordSchema","SearchMasterRecordApiSchema","createApiSchema","SearchMasterRecordRequestSchema","RqHeaderSchema","MasterRecordDetailApiValidationSchema","val","FinancialDetailSchema","DynamicFieldsSchema","MasterRecordListApiSchema","input","SearchMasterRecordResponseSchema","createResponseSchema","RsStatusSchema","v","CustomerRecordApiSchema","val","MasterRecordDetailApiValidationSchema","FinancialDetailSchema","DynamicFieldsSchema","ManageMasterRecordRequestSchema","RqHeaderSchema","ManageMasterRecordResponseSchema","createResponseSchema","RsStatusSchema","ok","data","err","error","createRootElement","name","object","XML_ROOT_ELEMENTS","AvesError","message","status","errorCode","errorDescription","AvesClient","baseURL","hostID","xtoken","languageCode","endpoint","output","rsStatus","err","warnings","ok","error","defaultMessage","requestBody","responseRootKey","responseSchema","url","xmlBody","jsonToXml","response","r","responseText","rootElement","xmlToJson","parseResult","safeParse","i","params","requestData","parse","SearchMasterRecordRequestSchema","SearchMasterRecordResponseSchema","record","masterRecordDetail","MasterRecordDetailApiSchema","ManageMasterRecordRequestSchema","ManageMasterRecordResponseSchema"]}
1
+ {"version":3,"sources":["../src/client.ts","../src/xml-client.ts","../src/schemas/search.ts","../src/schemas/common.ts","../src/schemas/master-record.ts","../src/utils/schema-transform.ts","../src/utils/case-transform.ts","../src/schemas/upsert.ts","../src/utils/result.ts"],"sourcesContent":["import { request as r } from 'undici';\nimport { parse, safeParse } 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 ManageMasterRecordRS,\n MasterRecordDetail,\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';\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 * Error thrown by AVES API operations\n */\nexport class AvesError extends Error {\n constructor(\n message: string,\n public readonly status?: string,\n public readonly errorCode?: string,\n public readonly errorDescription?: string\n ) {\n super(message);\n this.name = 'AvesError';\n }\n}\n\n/**\n * AVES XML REST API client\n */\nexport class AvesClient {\n /**\n * @param baseURL - Base URL of the AVES API\n * @param hostID - 6-digit identification code\n * @param xtoken - Authentication token\n * @param languageCode - Optional 2-digit language code\n */\n constructor(\n private readonly baseURL: string,\n private readonly hostID: string,\n private readonly xtoken: string,\n private readonly languageCode?: string\n ) {\n this.baseURL = baseURL.replace(/\\/$/, '');\n }\n\n private createRqHeader() {\n return {\n '@HostID': this.hostID,\n '@Xtoken': this.xtoken,\n '@Interface': 'WEB' as const,\n '@UserName': 'WEB' as const,\n ...(this.languageCode && { '@LanguageCode': this.languageCode }),\n };\n }\n\n private createUrl(endpoint: string) {\n return `${this.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>(\n output: T,\n rsStatus: {\n status?: string;\n errorCode?: string;\n errorDescription?: string;\n warnings?: string[];\n }\n ): Result<T, AvesError> {\n const status = rsStatus?.status;\n\n if (status === 'ERROR' || status === 'TIMEOUT') {\n return err(\n new AvesError(\n rsStatus.errorDescription || `API Error: ${status}`,\n status,\n rsStatus.errorCode,\n rsStatus.errorDescription\n )\n );\n }\n\n if (status === 'WARNING') {\n const warnings = rsStatus.warnings?.join(', ');\n console.warn('AVES API Warning:', warnings);\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 Error) {\n return new AvesError(error.message);\n }\n return new AvesError(defaultMessage);\n }\n\n private async request<T>(\n endpoint: string,\n requestBody: Record<string, unknown>,\n responseRootKey: string,\n responseSchema:\n | typeof ManageMasterRecordResponseSchema\n | typeof SearchMasterRecordResponseSchema\n ): Promise<Result<T, AvesError>> {\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 });\n\n const responseText = await response.body.text();\n\n if (response.statusCode !== 200) {\n return err(new AvesError(responseText, response.statusCode.toString()));\n }\n\n const jsonResponse = xmlToJson(responseText);\n const rootElement = jsonResponse[responseRootKey];\n\n if (!rootElement) {\n return err(\n new AvesError(\n `Invalid response structure: missing root element '${responseRootKey}'`,\n undefined,\n 'VALIDATION_ERROR'\n )\n );\n }\n\n const parseResult = safeParse(responseSchema, rootElement);\n\n if (!parseResult.success) {\n return err(\n new AvesError(\n `Invalid response format: ${parseResult.issues\n .map((i) => i.message)\n .join(', ')}`,\n '400',\n 'VALIDATION_ERROR'\n )\n );\n }\n\n return this.handleApiStatus(\n parseResult.output as T,\n parseResult.output.rsStatus\n );\n } catch (error) {\n return err(this.toAvesError(error, 'Unknown error occurred'));\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 await 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 masterRecordDetail = {\n '@InsertCriteria': 'T' as const,\n ...apiRecord,\n };\n\n const requestData = parse(ManageMasterRecordRequestSchema, {\n RqHeader: this.createRqHeader(),\n MasterRecordDetail: masterRecordDetail,\n });\n\n const requestBody = createRootElement(\n XML_ROOT_ELEMENTS.UPSERT_REQUEST,\n requestData\n );\n\n return await 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","import { XMLParser, XMLBuilder } from 'fast-xml-parser';\n\nconst parserOptions = {\n ignoreAttributes: false,\n attributeNamePrefix: '@',\n parseAttributeValue: true,\n parseTrueNumberOnly: false,\n trimValues: true,\n ignoreNameSpace: true,\n removeNSPrefix: true,\n parseTagValue: true,\n};\n\nconst builderOptions = {\n ignoreAttributes: false,\n attributeNamePrefix: '@',\n suppressEmptyNode: false,\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 return builder.build(json);\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 return parser.parse(xml);\n}\n","import * as v from 'valibot';\nimport { RqHeaderSchema, RsStatusSchema } from './common.js';\nimport { FinancialDetailSchema, DynamicFieldsSchema } 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(6), 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\n/**\n * Search master record schema for API requests (transforms to PascalCase)\n */\nexport const SearchMasterRecordApiSchema = createApiSchema(\n SearchMasterRecordSchema\n);\n\n/**\n * Complete search request schema with header\n */\nexport const SearchMasterRecordRequestSchema = v.object({\n RqHeader: RqHeaderSchema,\n SearchMasterRecord: SearchMasterRecordApiSchema,\n});\n\nconst MasterRecordDetailApiValidationSchema = v.object({\n '@RecordCode': v.optional(\n v.pipe(\n v.union([v.string(), v.number()]),\n v.transform((val) => String(val)),\n v.minLength(6),\n v.maxLength(6)\n )\n ),\n '@InsertCriteria': v.optional(\n v.union([v.literal('S'), v.literal('N'), v.literal('T'), v.literal('M')])\n ),\n CreatedDate: v.optional(v.string()),\n RecordType: v.optional(\n v.union([v.literal('CUSTOMER'), v.literal('SUPPLIER')])\n ),\n RecordStatus: v.optional(\n v.union(\n [\n v.literal('ENABLED'),\n v.literal('DISABLED'),\n v.literal('WARNING'),\n v.literal('BLACKLISTED'),\n ],\n 'ENABLED'\n )\n ),\n Moniker: v.optional(v.string()),\n Name: v.optional(v.string()),\n LanguageCode: v.optional(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 NewsletterDisabled: v.optional(\n v.union([v.literal('true'), v.literal('false'), v.boolean()])\n ),\n FinancialDetail: v.optional(FinancialDetailSchema),\n DynamicFields: v.optional(v.array(DynamicFieldsSchema)),\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';\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.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(v.string()),\n ErrorDescription: v.optional(v.string()),\n Warnings: warningsSchema,\n});\n","import * as v from 'valibot';\nimport {\n createApiSchema,\n createResponseSchema,\n} from '../utils/schema-transform.js';\n\nconst FinancialDetailInputSchema = v.object({\n currencyCode: v.string(),\n creditLimit: v.optional(v.string()),\n c_PaymentType: v.optional(\n 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 ),\n c_SpecPaymentTypeCode: v.optional(v.string()),\n s_PaymentType: v.optional(\n 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 ),\n s_SpecPaymentTypeCode: 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\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 * 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(\n v.union([v.literal('S'), v.literal('N'), v.literal('T'), v.literal('M')])\n ),\n createdDate: v.optional(v.string()),\n recordType: v.optional(\n v.union([v.literal('CUSTOMER'), v.literal('SUPPLIER')], 'CUSTOMER')\n ),\n recordStatus: v.optional(\n v.union(\n [\n v.literal('ENABLED'),\n v.literal('DISABLED'),\n v.literal('WARNING'),\n v.literal('BLACKLISTED'),\n ],\n 'ENABLED'\n )\n ),\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 financialDetail: v.optional(FinancialDetailInputSchema),\n dynamicFields: v.optional(v.array(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","import * as v from 'valibot';\nimport type { BaseSchema } from 'valibot';\nimport { camelToPascalKeys, pascalToCamelKeys } 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","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\nconst 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 'key',\n 'value',\n 'minDate',\n 'maxDate',\n 'hostID',\n 'xtoken',\n 'interface',\n 'userName',\n 'status',\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 (\n obj instanceof Date ||\n obj instanceof RegExp ||\n obj instanceof Map ||\n obj instanceof Set ||\n obj instanceof Error\n ) {\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 (\n value instanceof Date ||\n value instanceof RegExp ||\n value instanceof Map ||\n value instanceof Set ||\n value instanceof Error\n ) {\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 (\n obj instanceof Date ||\n obj instanceof RegExp ||\n obj instanceof Map ||\n obj instanceof Set ||\n obj instanceof Error\n ) {\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 (\n value instanceof Date ||\n value instanceof RegExp ||\n value instanceof Map ||\n value instanceof Set ||\n value instanceof Error\n ) {\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 { RqHeaderSchema, RsStatusSchema } from './common.js';\nimport { FinancialDetailSchema, DynamicFieldsSchema } from './master-record.js';\nimport { createResponseSchema } from '../utils/schema-transform.js';\n\nconst CustomerRecordApiSchema = v.object({\n CustomerRecordCode: v.pipe(\n v.union([v.string(), v.number()]),\n v.transform((val) => String(val)),\n v.minLength(6),\n v.maxLength(6)\n ),\n});\n\nconst MasterRecordDetailApiValidationSchema = v.object({\n '@RecordCode': v.optional(v.pipe(v.string(), v.minLength(6), v.maxLength(6))),\n '@InsertCriteria': v.optional(\n v.union([v.literal('S'), v.literal('N'), v.literal('T'), v.literal('M')])\n ),\n CreatedDate: v.optional(v.string()),\n RecordType: v.optional(\n v.union([v.literal('CUSTOMER'), v.literal('SUPPLIER')])\n ),\n RecordStatus: v.optional(\n v.union(\n [\n v.literal('ENABLED'),\n v.literal('DISABLED'),\n v.literal('WARNING'),\n v.literal('BLACKLISTED'),\n ],\n 'ENABLED'\n )\n ),\n Moniker: v.optional(v.string()),\n Name: v.optional(v.string()),\n LanguageCode: v.optional(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 NewsletterDisabled: v.optional(\n v.union([v.literal('true'), v.literal('false'), v.boolean()])\n ),\n FinancialDetail: v.optional(FinancialDetailSchema),\n DynamicFields: v.optional(v.array(DynamicFieldsSchema)),\n});\n\n/**\n * Complete upsert request schema with header and required InsertCriteria\n */\nexport const ManageMasterRecordRequestSchema = v.object({\n RqHeader: RqHeaderSchema,\n MasterRecordDetail: v.intersect([\n MasterRecordDetailApiValidationSchema,\n v.object({\n '@InsertCriteria': v.union([\n v.literal('S'),\n v.literal('N'),\n v.literal('T'),\n v.literal('M'),\n ]),\n }),\n ]),\n});\n\n/**\n * Upsert master record response schema (transforms to camelCase)\n */\nexport const ManageMasterRecordResponseSchema = createResponseSchema(\n v.object({\n RsStatus: RsStatusSchema,\n CustomerRecordRS: v.optional(CustomerRecordApiSchema),\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"],"mappings":"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","names":["r","parse","safeParse","XMLParser","XMLBuilder","parserOptions","builderOptions","parser","builder","jsonToXml","json","xmlToJson","xml","v","v","RqHeaderSchema","warningsSchema","input","RsStatusSchema","v","v","camelToPascal","str","pascalToCamel","ATTRIBUTE_FIELDS","camelToPascalKeys","obj","item","result","key","value","isAttribute","pascalKey","finalKey","pascalToCamelKeys","strippedKey","camelKey","createApiSchema","inputSchema","input","camelToPascalKeys","createResponseSchema","apiSchema","pascalToCamelKeys","FinancialDetailInputSchema","FinancialDetailSchema","createApiSchema","DynamicFieldsInputSchema","DynamicFieldsSchema","MasterRecordDetailSchema","MasterRecordDetailApiSchema","MasterRecordDetailResponseSchema","createResponseSchema","LastModificationDateInputSchema","languageCodeField","CodeSearchSchema","NameSearchSchema","VatCodeSearchSchema","ZoneSearchSchema","CategorySearchSchema","EmailSearchSchema","LastModDateSearchSchema","SearchFieldSearchSchema","ExternalRefCodeSearchSchema","SearchMasterRecordSchema","SearchMasterRecordApiSchema","createApiSchema","SearchMasterRecordRequestSchema","RqHeaderSchema","MasterRecordDetailApiValidationSchema","val","FinancialDetailSchema","DynamicFieldsSchema","MasterRecordListApiSchema","input","SearchMasterRecordResponseSchema","createResponseSchema","RsStatusSchema","v","CustomerRecordApiSchema","val","MasterRecordDetailApiValidationSchema","FinancialDetailSchema","DynamicFieldsSchema","ManageMasterRecordRequestSchema","RqHeaderSchema","ManageMasterRecordResponseSchema","createResponseSchema","RsStatusSchema","ok","data","err","error","createRootElement","name","object","XML_ROOT_ELEMENTS","AvesError","message","status","errorCode","errorDescription","AvesClient","baseURL","hostID","xtoken","languageCode","endpoint","output","rsStatus","err","warnings","ok","error","defaultMessage","requestBody","responseRootKey","responseSchema","url","xmlBody","jsonToXml","response","r","responseText","rootElement","xmlToJson","parseResult","safeParse","i","params","requestData","parse","SearchMasterRecordRequestSchema","SearchMasterRecordResponseSchema","record","masterRecordDetail","MasterRecordDetailApiSchema","ManageMasterRecordRequestSchema","ManageMasterRecordResponseSchema"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aves-sdk",
3
- "version": "1.2.7",
3
+ "version": "1.2.8",
4
4
  "description": "TypeScript SDK for AVES XML REST",
5
5
  "homepage": "https://github.com/simoneguglielmi/aves-sdk#readme",
6
6
  "repository": [