UNPKG

@commercelayer/sdk-utils

Version:
2 lines (1 loc) 15.6 kB
"use strict";var Ee=Object.create;var v=Object.defineProperty;var Oe=Object.getOwnPropertyDescriptor;var Je=Object.getOwnPropertyNames;var Ae=Object.getPrototypeOf,ze=Object.prototype.hasOwnProperty;var ie=e=>{throw TypeError(e)};var ve=(e,r)=>{for(var t in r)v(e,t,{get:r[t],enumerable:!0})},ae=(e,r,t,i)=>{if(r&&typeof r=="object"||typeof r=="function")for(let a of Je(r))!ze.call(e,a)&&a!==t&&v(e,a,{get:()=>r[a],enumerable:!(i=Oe(r,a))||i.enumerable});return e};var Ue=(e,r,t)=>(t=e!=null?Ee(Ae(e)):{},ae(r||!e||!e.__esModule?v(t,"default",{value:e,enumerable:!0}):t,e)),De=e=>ae(v({},"__esModule",{value:!0}),e);var ne=(e,r,t)=>r.has(e)||ie("Cannot "+t);var $=(e,r,t)=>(ne(e,r,"read from private field"),t?t.call(e):r.get(e)),ce=(e,r,t)=>r.has(e)?ie("Cannot add the same private member more than once"):r instanceof WeakSet?r.add(e):r.set(e,t),ue=(e,r,t,i)=>(ne(e,r,"write to private field"),i?i.call(e,t):r.set(e,t),t);var Ke={};ve(Ke,{CommerceLayerUtils:()=>G,all:()=>fe,batch:()=>he,checkSignature:()=>oe,cleanups:()=>Ce,cleanupsToBatchTasks:()=>K,default:()=>b,deleteAll:()=>de,denormalizePayload:()=>Q,executeBatch:()=>W,executeCleanup:()=>Y,executeExport:()=>ee,executeImport:()=>te,exportsToBatchTasks:()=>Z,exportz:()=>Pe,headerRateLimits:()=>T,imports:()=>_e,importsToBatchTasks:()=>re,retrieveAll:()=>V,retrievePage:()=>ge,splitCleanup:()=>B,splitExport:()=>M,splitImport:()=>q,updateAll:()=>X,webhooks:()=>Se});module.exports=De(Ke);var w,j=class{constructor(){ce(this,w)}set sdk(r){if(r==null)throw Error("Invalid Commerce Layer client provided");ue(this,w,r)}get sdk(){if(!$(this,w))throw Error("CommerceLayer Utils not initialized");return $(this,w)}};w=new WeakMap;var pe=new j,G=e=>{if(e)if(e.application)pe.sdk=e;else throw Error("Only SDK 6 client is supported");return pe},b=G;var y={api:{page_max_size:25},exports:{max_size:1e4,queue_size:10},cleanups:{max_size:1e4,queue_size:10},imports:{max_size:1e4,queue_size:10},webhooks:{signature:{algorithm:"sha256",digest:"base64",header:"x-commercelayer-signature"},topic:"x-commercelayer-topic",jsonapi:{maxResourceIncluded:2}}};var T=e=>{if(!e)throw new Error("Unable to find rate limit headers in response");return{interval:Number(e["x-ratelimit-interval"]),limit:Number(e["x-ratelimit-limit"]),remaining:Number(e["x-ratelimit-remaining"])}},C=(e,r,t,i)=>{let a=i||"test",o=10*1e3,s=a==="live"?50:25,u=typeof r=="string"?r:r.resourceType,n={limit:e.limit,interval:e.interval,delay:0},c=t||e?.limit*2||0;if(e){let l=typeof c=="number"?c:c.length;n.requests=l,l>=e.limit?n.delay=Math.ceil(e.interval*1e3/e.limit):(typeof c=="number"?l:c.filter(d=>d.resourceType===u).length)>=s&&(n.delay=Math.ceil(o/s))}return n};var le=require("@commercelayer/sdk"),h=async e=>new Promise(r=>setTimeout(r,e)),H=()=>{let e=Math.trunc(Math.random()*46656),r=Math.trunc(Math.random()*46656),t=("000"+e.toString(36)).slice(-3),i=("000"+r.toString(36)).slice(-3);return t+i},me=e=>le.CommerceLayerStatic.isApiError(e)&&e.status===401&&e.first().code==="INVALID_TOKEN";var V=async(e,r)=>{let t=b().sdk,i=t[e],a=t.addRawResponseReader({headers:!0}),o=null,s=null,u=null,n=(r?.limit||0)>0?r?.limit:void 0;n&&r&&delete r.limit;let c=r||{};c.pageNumber=1,c.pageSize=y.api.page_max_size,c.sort=["id"],c.filters||(c.filters={});do{s&&(c.filters.id_gt=s),u&&await h(u.delay);let m=await i.list(c);if(o===null?o=m:o.push(...m),s=m.last()?.id,!u)try{let d=T(a.headers);u=C(d,e,o.pageCount),u&&t.removeRawResponseReader()}catch{}}while(o.length<Math.min(n||o.recordCount,o.recordCount));n&&o.splice(n,o.length-n);let l=o.meta;return delete l.currentPage,o},X=async(e,r,t)=>{let i=b().sdk,a=i[e],o=i.addRawResponseReader({headers:!0}),s={total:0,processed:0,errors:0,resources:{}},u=null,n=null,c=t||{};c.pageNumber=1,c.pageSize=y.api.page_max_size,c.sort=["id"],c.filters||(c.filters={});do{u&&(c.filters.id_gt=u),n&&await h(n.delay);let l=await a.list(c);if(u||(s.total=l.recordCount),!n)try{let m=T(o.headers);n=C(m,e,s.total+l.pageCount),n&&i.removeRawResponseReader()}catch{}for(let m of l){s.resources[m.id]={success:!1};let d=s.resources[m.id];try{let R={...r,id:m.id,type:e};n&&await h(n.delay),await a.update(R),s.processed++,d.success=!0}catch(R){s.errors++,i.isApiError(R)&&(d.error=R),d.errorMessage=R.message}}u=l.last()?.id}while(s.processed+s.errors<s.total);return s},de=async(e,r)=>{let t=b().sdk,i=t[e],a=t.addRawResponseReader({headers:!0}),o={total:0,processed:0,errors:0,resources:{}},s=null,u=null,n=r||{};n.pageNumber=1,n.pageSize=y.api.page_max_size,n.sort=["id"],n.filters||(n.filters={});do{s&&(n.filters.id_gt=s),u&&await h(u.delay);let c=await i.list(n);if(s||(o.total=c.recordCount),!u)try{let l=T(a.headers);u=C(l,e,o.total+c.pageCount),u&&t.removeRawResponseReader()}catch{}for(let l of c){o.resources[l.id]={success:!1};let m=o.resources[l.id];try{u&&await h(u.delay),await i.delete(l.id),o.processed++,m.success=!0}catch(d){o.errors++,t.isApiError(d)&&(m.error=d),m.errorMessage=d.message}}s=c.last()?.id}while(o.processed+o.errors<o.total);return o},fe={retrieveAll:V,updateAll:X};var ye=e=>JSON.parse(atob(e.split(".")[1]));var Re=typeof process>"u"?void 0:process.env.CL_SDK_TEST,f=typeof process>"u"?void 0:process.env.CL_SDK_DEBUG,Be=Re?950:1e3,Me=Re?475:500,ge=async(e,r)=>{let t=0,i=b().sdk,a=i[e],o=null,s={fields:r?.fields,filters:r?.filters,sort:r?.sort,include:r?.include},n=ye(i.currentAccessToken).test?Me:Be;f&&console.log("maxPageSize: "+n);let c=Math.max(1,r?.pageSize||1);if(f&&console.log("pageSize: "+c),c>n)throw new Error(`Page size exceeds the maximum allowed of ${n}: [${c}]`);f&&console.log("requests: "+ ++t);let l=await a.count(s);f&&console.log("recordCount: "+l);let m=Math.max(1,r?.pageNumber||1);f&&console.log("pageNumber: "+m);let d=Math.ceil(l/c);if(m>d)throw new Error(`Page number greater than the last page number ${d}: [${m}]`);if(c<=y.api.page_max_size)s.pageSize=c,s.pageNumber=m,f&&console.log("requests: "+ ++t),o=await a.list(s);else{let R=y.api.page_max_size;s.pageSize=R;let P=c*(m-1)+1,I=Math.min(P+c-1,l);f&&console.log("recordStart: "+P),f&&console.log("recordEnd: "+I);let k=Math.ceil(P/R),_=Math.ceil(I/R);f&&console.log("pageStartApi: "+k),f&&console.log("pageEndApi: "+_);for(let L=k;L<=_;L++){s.pageNumber=L,f&&console.log("FOR requests: "+ ++t);let se=await a.list(s);o===null?o=se:o.push(...se)}if(!o)throw new Error(`Error retrieving ${e} page`);if(f&&console.log("result.length: "+o.length),o.length===0)return o;f&&console.log("requests: "+ ++t),f&&console.log("requests: "+ ++t);let g=(await a.list({...s,pageNumber:P,pageSize:1})).first(),O=(await a.list({...s,pageNumber:I,pageSize:1})).first();f&&console.log("firstResource: "+g?.id),f&&console.log("lastResource: "+O?.id);let A=o.findIndex(L=>L.id===g?.id),z=o.findIndex(L=>L.id===O?.id);f&&console.log("firstResourceIdx: "+A),f&&console.log("lastResourceIdx: "+z),o.splice(z+1),f&&console.log("End trim - result.length: "+o.length),o.splice(0,A),f&&console.log("Start trim - result.length: "+o.length);let J=o.meta;J.recordsPerPage=c,J.currentPage=m,J.pageCount=d,f&&console.log(J),f&&console.log("requests: "+ ++t)}return o};var U=class extends Error{constructor(r){super(r.first().detail),this.cause=r}},qe=e=>e.resource&&["create","retrieve","update","delete"].includes(e.operation),xe=(e,r,t)=>{t&&(e.rateLimits||(e.rateLimits={}),Object.assign(e.rateLimits||{},{[r.resourceType]:{[r.operation]:t}}));let i=e.rateLimits?.[r.resourceType];return i?i[r.operation]:void 0},be=async(e,r,t={})=>{let i=e[r.resourceType],a;try{if(r.executed=!1,!i[r.operation])throw new Error(`Unsupported operation [resource: ${r.resourceType}, operation: ${r.operation}]`);switch(r.operation){case"list":{a=await i[r.operation](r.params,r.options);break}case"delete":{await i[r.operation](r.resource,r.options);break}case"create":case"retrieve":case"update":{a=await i[r.operation](r.resource,r.params,r.options);break}}r.onSuccess||(r.onSuccess={});let s=r.onSuccess;if(s.result=a,s.callback)try{await s.callback(s.result,r)}catch{}return a}catch(o){if(me(o))throw new U(o);r.onFailure||(r.onFailure={});let s=r.onFailure;s.error=o;let u=t.haltOnError||s.haltOnError;if(s.errorHandler)try{u=u||await s.errorHandler(s.error,r)}catch{}if(u)throw o}finally{r.executed=!0}},Fe=(e,r)=>{},W=async e=>{let r=b().sdk,t=r.addRawResponseReader({headers:!0});e.running=!1;let i={startedAt:new Date},a=-1,o;for(let s of e.tasks){a++,e.running=!0,e.runningTask=s.label||String(a);let u=xe(e,s);u&&await h(u.delay);try{if(o&&qe(s)){let n;try{s.resource&&s.prepareResource?n=await s.prepareResource(s.resource,o):n=await Fe(s.resource,o)}catch{n=void 0}n&&(s.resource=n)}o=void 0,o=await be(r,s,e.options)}catch(n){if(n instanceof U&&e.options?.refreshToken){let c=await e.options.refreshToken(n,s);r.config({accessToken:c}),await be(r,s,e.options)}else throw n}finally{e.running=!1,e.runningTask=void 0}if(!u)try{let n=T(t.headers);u=C(n,s,e.tasks),xe(e,s,u)}catch{}}return r&&t&&r.removeRawResponseReader(),i.finishedAt=new Date,i},he={execute:W};var Te=(e,r,t)=>{let i=[];if(!e?.inputs||e.inputs.length===0)return i;let a=t?.noGroupId?void 0:H(),o=t?.size,s=o?Math.min(Math.max(1,o),y[r].max_size):y[r].max_size,u=e.inputs,n=Math.ceil(u.length/s),c=0;for(;u.length>0;){c++;let l={...e,inputs:u.splice(0,s),metadata:{...e.metadata}};a&&(l.reference=`${a}-${c}`),t?.noMetadata||(l.metadata||(l.metadata={}),l.metadata.progress_number=`${c}/${n}`,a&&(l.metadata.group_id=a)),i.push(l)}return i},D=async(e,r,t)=>{let i=b().sdk,a=i.addRawResponseReader({headers:!0}),o=i[e.resource_type],s=t?.size,u=s?Math.min(Math.max(1,s),y[r].max_size):y[r].max_size,n=t?.delay,c=await o.count({filters:e.filters,pageSize:1,pageNumber:1});if(!n){let k=T(a.headers);n=C(k,r).delay}i.removeRawResponseReader();let l=Math.ceil(c/u),m=[],d=t?.noGroupId?void 0:H(),R=null,P=null,I=0;for(let k=0;k<l;k++){let _=k+1,g={...e,filters:{...e.filters},metadata:{...e.metadata}};d&&(g.reference=`${d}-${_}`),g.filters||(g.filters={}),t?.noMetadata||(g.metadata||(g.metadata={}),g.metadata.progress_number=`${_}/${l}`,d&&(g.metadata.group_id=d));let O=1,A=Math.min(u,c-u*k),z=Math.ceil(A/O);I+=z,await h(n),P=(await o.list({filters:e.filters,pageSize:O,pageNumber:I,sort:{id:"asc"}})).last()?.id,R&&(g.filters.id_gt=R),_<l&&(g.filters.id_lteq=P),m.push(g),R=P}return m},S=(e,r,t)=>e.map(i=>{let a={operation:"create",resourceType:r,resource:{...i}};return t&&(a.onFailure=t.onFailure,a.onSuccess=t.onSuccess,a.params=t.params,a.options=t.options),a}),Ne=e=>!e.status||["pending","in_progress"].includes(e.status),Qe=e=>e.filter(r=>Ne(r)).length,ke=e=>["completed","interrupted"].includes(e.status),$e=e=>e.filter(r=>ke(r)).length,E=async(e,r,t)=>{let a=b().sdk,o=a.addRawResponseReader({headers:!0}),s=a[r],u=[],n=t?.queueLength||y[r].queue_size||e.length,c=-1;do{for(;Qe(u)<n&&u.length<e.length;){let l=await s.create(e[u.length]);if(u.push(l),c<0){let m=T(o.headers);c=C(m,r).delay,a.removeRawResponseReader()}else await h(c)}for(let l of u){if(ke(l))continue;await h(c);let m=await s.retrieve(l);Object.assign(l,m)}await h(1e3)}while($e(u)<e.length);return u};var B=async(e,r)=>D(e,"cleanups",r),K=(e,r)=>S(e,"cleanups",r),je=async(e,r)=>E(e,"cleanups",r),Y=async(e,r)=>{let t=await B(e,r);return je(t,r)},Ce={split:B,execute:Y,toBatchTasks:K};var M=async(e,r)=>D(e,"exports",r),Z=(e,r)=>S(e,"exports",r),Ge=async(e,r)=>E(e,"exports",r),ee=async(e,r)=>{let t=await M(e,r);return Ge(t,r)},Pe={split:M,execute:ee,toBatchTasks:Z};var q=(e,r)=>Te(e,"imports",r),re=(e,r)=>S(e,"imports",r),He=async(e,r)=>E(e,"imports",r),te=async(e,r)=>{let t=q(e,r);return He(t,r)},_e={split:q,execute:te,toBatchTasks:re};var Ie=require("@commercelayer/sdk"),we=Ue(require("crypto"));var Ve=e=>{let r;try{r=JSON.parse(e)}catch(t){throw new Error(`Error parsing payload [${t.message}]`)}if(!Ie.CommerceLayerStatic.resources().includes(r.data?.type))throw new Error(`Invalid resource type [${r.data?.type}]`);return r},Q=e=>{let r,t=Ve(e);t.links&&delete t.links;let i=t.data,a=t.included;return i?Array.isArray(i)?r=i.map(o=>F(o,a)):r=F(i,a):r=i,r},Le=(e,r=[])=>r.find(i=>e.id===i.id&&e.type===i.type)||e,F=(e,r,t=[])=>{if(!e)return e;let i={id:e.id,type:e.type,...e.attributes};return e.relationships&&Object.keys(e.relationships).forEach(a=>{let o=e.relationships[a].data;o?(t.filter(s=>s.id===o.id&&s.type===o.type).length>=y.webhooks.jsonapi.maxResourceIncluded&&(i[a]=o),Array.isArray(o)?i[a]=o.map(s=>F(Le(s,r),r,[...t,s])):i[a]=F(Le(o,r),r,[...t,o])):o===null&&(i[a]=null)}),i},Xe=(e,r)=>{let{algorithm:t,digest:i}=y.webhooks.signature;return we.default.createHmac(t,r).update(e).digest(i)},oe=(e,r,t)=>{let i={ok:!1};try{let a=typeof r=="string"?void 0:r[y.webhooks.topic],o=typeof r=="string"?r:r[y.webhooks.signature.header];if(!t)return{...i,message:"Missing shared secret"};if(!o)return{...i,message:"Missing webhook signature"};let s=Xe(e,t);i.topic=a,o===s?(i.ok=!0,i.message="Signature successfully checked"):i.message="Payload signature verification failed"}catch(a){i.ok=!1,i.message=a.message}return i},N=class extends Error{constructor(r){super(r),this.name="ParseError"}},p=(e,r)=>{try{let t=Q(e),i=t.type;if(i!==r)throw new N(`Invalid resource type [${i}]`);return t}catch(t){throw new N(`Payload parse error [${t.message}]`)}},We={addresses(e){return p(e,"addresses")},authorizations(e){return p(e,"authorizations")},avalara_accounts(e){return p(e,"avalara_accounts")},bundles(e){return p(e,"bundles")},buy_x_pay_y_promotions(e){return p(e,"buy_x_pay_y_promotions")},captures(e){return p(e,"captures")},cleanups(e){return p(e,"cleanups")},coupons(e){return p(e,"coupons")},customer_addresses(e){return p(e,"customer_addresses")},customer_password_resets(e){return p(e,"customer_password_resets")},customer_subscriptions(e){return p(e,"customer_subscriptions")},customers(e){return p(e,"customers")},exports(e){return p(e,"exports")},external_promotions(e){return p(e,"external_promotions")},fixed_amount_promotions(e){return p(e,"fixed_amount_promotions")},fixed_price_promotions(e){return p(e,"fixed_price_promotions")},free_gift_promotions(e){return p(e,"free_gift_promotions")},free_shipping_promotions(e){return p(e,"free_shipping_promotions")},gift_cards(e){return p(e,"gift_cards")},imports(e){return p(e,"imports")},in_stock_subscriptions(e){return p(e,"in_stock_subscriptions")},line_items(e){return p(e,"line_items")},line_items_options(e){return p(e,"line_items_options")},orders(e){return p(e,"orders")},order_copies(e){return p(e,"order_copies")},order_subscriptions(e){return p(e,"order_subscriptions")},parcels(e){return p(e,"parcels")},percentage_discount_promotions(e){return p(e,"percentage_discount_promotions")},price_frequency_tiers(e){return p(e,"price_frequency_tiers")},price_volume_tiers(e){return p(e,"price_volume_tiers")},promotions(e){return p(e,"promotions")},recurring_order_copies(e){return p(e,"recurring_order_copies")},refunds(e){return p(e,"refunds")},returns(e){return p(e,"returns")},shipments(e){return p(e,"shipments")},shipping_weight_tiers(e){return p(e,"shipping_weight_tiers")},skus(e){return p(e,"skus")},sku_options(e){return p(e,"sku_options")},stock_transfers(e){return p(e,"stock_transfers")},transactions(e){return p(e,"transactions")},voids(e){return p(e,"voids")}},Se={denormalizePayload:Q,checkSignature:oe,parse:We};0&&(module.exports={CommerceLayerUtils,all,batch,checkSignature,cleanups,cleanupsToBatchTasks,deleteAll,denormalizePayload,executeBatch,executeCleanup,executeExport,executeImport,exportsToBatchTasks,exportz,headerRateLimits,imports,importsToBatchTasks,retrieveAll,retrievePage,splitCleanup,splitExport,splitImport,updateAll,webhooks});