@stackone/core 1.42.0 → 1.44.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.es.mjs CHANGED
@@ -1 +1 @@
1
- import{notMissing as e,getCountrySubDivisionNameBySubDivisionCode as t,getCountryAlpha2CodeByCitizenship as r,getCountrySubDivisionCodeBySubDivisionName as n,getCountrySubDivisionsByAlpha2Code as o,getCountryCodeByCountryName as a,getCountryCodeByAlpha3Code as s,getCountryCodeByAlpha2Code as i,getCountryAlpha2CodeByCountryCode as u,getCountryAlpha2CodeByCountryName as c,getCountryAlpha2CodeByAlpha3Code as l,getCountryAlpha3CodeByCountryCode as d,getCountryAlpha3CodeByCountryName as p,getCountryAlpha3CodeByAlpha2Code as m,getCountryNameByCountryCode as y,getCountryNameByAlpha2Code as b,getCountryNameByAlpha3Code as g,getCountryNameByCountryName as f,getCountryCodeByCountryCode as _,getCountryAlpha3CodeByAlpha3Code as h,getCountryAlpha2CodeByAlpha2Code as v,isString as k,isMissing as S,safeParseToDateTimeString as j,safeParseToBoolean as F,safeParseToNumber as x,safeParseToString as w,encodeToBase64 as E,decodeFromBase64 as A,getContentHash as T}from"@stackone/utils";import{z as C}from"zod";import{evaluate as K,safeEvaluateRecord as U}from"@stackone/expressions";import{RequestParameterLocations as O,HttpMethods as P,RequestClientFactory as N,parseRequestParameters as I,createAuthorizationHeaders as R}from"@stackone/transport";const D=C.object({stepsDataToGroup:C.array(C.string()),isSingleRecord:C.boolean().optional()}),q=C.object({data:C.unknown()}),M=(e,t,r)=>Object.entries(e).reduce(((e,[n,o])=>{const a=o?.output?.data;return Array.isArray(a)&&a.length===t?e[n]={output:{data:a[r]}}:e[n]=o,e}),{}),$=(e,t,r)=>{if(!e||!r)return{record:e};const n={unified:{...e},..."object"==typeof r?r:{}},o={},a=[],s={...e};for(const r of t){const{error:t,value:i}=L(n,e.id,r);t?a.push(t):r.isUnified?s[r.targetFieldKey]=i:o[r.targetFieldKey]=i}return{record:{...s,unified_custom_fields:Object.keys(o).length>0?o:void 0},errors:a.length>0?a:void 0}},L=(e,t,r)=>{const{expression:n,targetFieldKey:o}=r;if(!n)return{error:{message:"Expression is empty",id:t,targetField:o}};let a;try{a=K(n,e)}catch{return{error:{message:"Invalid expression",id:t,targetField:o}}}return void 0===a?{error:{message:"Expression returned no value",id:t,targetField:o}}:{value:a}},G=C.object({fields:C.object({targetFieldKey:C.string(),expression:C.string(),type:C.enum(["string","number","boolean","datetime_string","enum"]),isUnified:C.boolean().optional(),enumMapper:C.object({matcher:C.string().or(C.object({matchExpression:C.string(),value:C.string()}).array())}).optional()}).array(),dataSource:C.string()}),z=C.object({data:C.unknown()}),H=(e,t)=>{if(!t)return;const r={},n=[],o={};for(const a of e){const{error:e,value:s}=Q(t,t?.id,a);e?n.push(e):a.isUnified?o[a.targetFieldKey]=s:r[a.targetFieldKey]=s}return{record:{...o,unified_custom_fields:Object.keys(r).length>0?r:void 0},errors:n.length>0?n:void 0}},Q=(e,t,r)=>{switch(r.type){case"string":case"number":case"boolean":case"datetime_string":return B(r,t,e);case"enum":return J(r,t,e);default:return{error:{message:"Invalid type",id:t,targetField:r.targetFieldKey}}}},B=(e,t,r)=>{if(!e.expression)return{error:{message:"Expression is empty",id:t,targetField:e.targetFieldKey}};let n;try{n=K(e.expression,r)}catch{return{error:{message:"Invalid expression",id:t,targetField:e.targetFieldKey}}}return void 0===n?{error:{message:"Expression returned no value",id:t,targetField:e.targetFieldKey}}:{value:n}},J=(S,j,F)=>{const x=B(S,j,F),w=e(x.value)?x.value:null;if(void 0===S.enumMapper)return{error:{message:"Enum mapper was not defined",id:j,targetField:S.targetFieldKey}};const E=S.enumMapper.matcher;if(k(E)){const k=(e=>{switch(e){case"country_alpha2code_by_alpha2code":return v;case"country_alpha3code_by_alpha3code":return h;case"country_code_by_country_code":return _;case"country_name_by_country_name":return f;case"country_name_by_alpha3code":return g;case"country_name_by_alpha2code":return b;case"country_name_by_country_code":return y;case"country_alpha3code_by_alpha2code":return m;case"country_alpha3code_by_country_name":return p;case"country_alpha3code_by_country_code":return d;case"country_alpha2code_by_alpha3code":return l;case"country_alpha2code_by_country_name":return c;case"country_alpha2code_by_country_code":return u;case"country_code_by_alpha2code":return i;case"country_code_by_alpha3code":return s;case"country_code_by_country_name":return a;case"country_subdivisions_by_alpha2code":return o;case"country_subdivision_code_by_subdivision_name":return n;case"country_alpha2code_by_citizenship":return r;case"country_subdivision_name_by_subdivision_code":return t;default:return}})(E);if(e(k)){return{value:{value:(e(w)?k(w):null)??"unmapped_value",source_value:w}}}return{error:{message:`The built-in matcher "${E}" is not supported`,id:j,targetField:S.targetFieldKey}}}for(const e of E){const{matchExpression:t,value:r}=e;if(!0===K(t,F))return{value:{value:r,source_value:w}}}return{value:{value:"unmapped_value",source_value:w}}},W=C.object({type:C.literal("basic"),username:C.string().optional(),password:C.string().optional(),encoding:C.string().optional()}),Y=C.object({type:C.literal("bearer"),token:C.string()}),V=C.discriminatedUnion("type",[W,Y]),X=C.object({baseUrl:C.string(),url:C.string(),method:C.enum(P),response:C.object({indexField:C.string().optional(),dataKey:C.string().optional(),nextKey:C.string().optional()}).optional(),iterator:C.object({key:C.string(),in:C.enum(O)}),cursor:C.object({token:C.string().optional().nullable(),position:C.number().optional().nullable()}).optional(),args:C.object({name:C.string(),value:C.unknown(),in:C.enum(O),condition:C.string().optional()}).array().optional()}),Z=C.object({data:C.unknown().optional(),raw:C.unknown().optional(),statusCode:C.number(),next:C.string().optional().nullable(),position:C.number().optional()}).optional(),ee=(e,t)=>{if(t?.indexField&&Array.isArray(e))return e.reduce(((e,r)=>{const n=t.indexField;return n&&r[n]&&(e[r[n]]=r),e}),{});if(t?.indexField){const r=t.indexField;return r&&e[r]?{[e[r]]:e}:e}return e},te=C.object({type:C.literal("basic"),username:C.string().optional(),password:C.string().optional(),encoding:C.string().optional()}),re=C.object({type:C.literal("bearer"),token:C.string()}),ne=C.discriminatedUnion("type",[te,re]),oe=C.object({baseUrl:C.string(),url:C.string(),method:C.enum(P),response:C.object({collection:C.boolean().optional(),indexField:C.string().optional(),dataKey:C.string().optional()}).optional(),args:C.object({name:C.string(),value:C.unknown(),in:C.enum(O),condition:C.string().optional()}).array().optional()}),ae=C.object({data:C.unknown().optional(),raw:C.unknown().optional(),statusCode:C.number()}).optional(),se=(e,t)=>{if(t?.collection&&t?.indexField&&Array.isArray(e))return e.reduce(((e,r)=>{const n=t.indexField;return n&&r[n]&&(e[r[n]]=r),e}),{});if(!t?.collection&&t?.indexField){const r=t.indexField;return r&&e[r]?{[e[r]]:e}:e}return e},ie=C.object({fields:C.object({targetFieldKey:C.string(),type:C.string(),isUnified:C.boolean().optional()}).array().optional(),dataSource:C.string()}),ue=C.object({data:C.unknown()});var ce;!function(e){e.String="string",e.Number="number",e.Boolean="boolean",e.DateTimeString="datetime_string"}(ce||(ce={}));const le=({value:e,type:t,format:r})=>{if(S(e))return null;switch(t){case ce.String:return w({value:e});case ce.Number:return x({value:e});case ce.Boolean:return F({value:e});case ce.DateTimeString:return j({value:e,format:r});default:return e}},de=e=>Object.values(ce).includes(e),pe=(t,r)=>{const n={...t};return r.forEach((r=>{const{targetFieldKey:o,type:a}=r;de(a)&&(r.isUnified&&e(n[o])?n[o]=le({value:t[o],type:a}):n.unified_custom_fields&&e(n.unified_custom_fields?.[o])&&(n.unified_custom_fields[o]=le({value:t.unified_custom_fields?.[o],type:a})))})),{...n}},me=(t,r)=>{const n={...t};return r.forEach((r=>{const{targetFieldKey:o,type:a}=r;de(a)&&(r.isUnified&&e(n[o])?n[o]=le({value:t[o],type:a}):n.unified_custom_fields&&e(n.unified_custom_fields?.[o])&&(n.unified_custom_fields[o]=le({value:t.unified_custom_fields?.[o],type:a})))})),{...n}};var ye;!function(e){e.TYPECAST="typecast",e.MAP_FIELDS="map_fields",e.GROUP_DATA="group_data",e.REQUEST="request",e.PAGINATED_REQUEST="paginated_request"}(ye||(ye={}));const be={[ye.TYPECAST]:{v1:{fn:async({block:e})=>{const t=e?.fieldConfigs;if(!t||"disabled"===e?.debug?.custom_mappings)return{block:e,successful:!0};let r;return r=Array.isArray(e.result)?e.result.map((e=>pe(e,t))):pe(e.result,t),{block:{...e,result:r},successful:!0}}},v2:{fn:async({block:e,params:t})=>{const{fields:r,dataSource:n}=ie.parse(t),o=K(n,e);if(!r||"disabled"===e?.debug?.custom_mappings)return{block:e,successful:!0};let a;return a=Array.isArray(o)?o.map((e=>me(e,r))):me(o,r),{block:{...e},successful:!0,output:{data:a}}},inputSchema:ie,outputSchema:ue}},[ye.MAP_FIELDS]:{v1:{fn:async({block:e})=>{const t=e?.fieldConfigs,r=[],n=e.steps;if(!t||"disabled"===e?.debug?.custom_mappings||!n)return{block:e,successful:!0};let o;if(Array.isArray(e.result)){const a=e.result.length;o=e.result.map(((e,o)=>{const s=M(n,a,o),i=$(e,t,s);return r.push(...i.errors||[]),i.record}))}else{const a=$(e.result,t,n);o=a.record,r.push(...a.errors||[])}return{block:{...e,result:o},successful:!0,errors:Object.keys(r).length>0?r:void 0}}},v2:{fn:async({block:e,params:t})=>{const r=[],{fields:n,dataSource:o}=G.parse(t),a=K(o,e);if(!n||!o||"disabled"===e?.debug?.custom_mappings||!a)return{block:e,successful:!0};let s;if(Array.isArray(a))s=a.map((e=>{const t=H(n,e);return r.push(...t?.errors||[]),t?.record}));else{const e=H(n,a);s=e?.record,r.push(...e?.errors||[])}return{block:{...e},successful:!0,output:{data:s},errors:Object.keys(r).length>0?r:void 0}},inputSchema:G,outputSchema:z}},[ye.REQUEST]:{v1:{fn:async({block:e,params:t})=>{const r=N.build();if(!e.httpClient)throw new Error("HTTP client is not configured");const{args:n}=t,o=n?n.filter((t=>!t.condition||!0===K(t.condition,e))).map((e=>({...e,condition:void 0}))):void 0,a=t?U({...t,args:o},e):{},{baseUrl:s,url:i,method:u,response:c,args:l}=oe.parse(a),d=a?.authentication?.[e.context.authenticationType]?.[e.context.environment]?.authorization,p=ne.parse(d),m=l?I(l):{query:{},body:{},headers:{}},y=R(p),b={...m?.headers??{},...y};let g;try{g=await r.performRequest({httpClient:e.httpClient,url:`${s}${i}`,queryParams:m?.query,method:u,headers:b,body:m?.body})}catch(t){const r=t;return{block:e,successful:!1,errors:[t],output:{statusCode:r?.response?.status??500}}}const f=c?.dataKey?g.data[c?.dataKey]:g.data,_=se(f,c);return{block:e,successful:!0,output:{data:_,raw:g,statusCode:g?.status}}},inputSchema:oe,outputSchema:ae}},[ye.GROUP_DATA]:{v1:{fn:async({block:t,params:r})=>{const{stepsDataToGroup:n,isSingleRecord:o}=D.parse(r),a=n.reduce(((r,n)=>{const a=t.steps?.[n]?.output?.data;return a?o?{...r,[n]:{...a}}:(Object.keys(a).forEach((t=>{const o=e(r[t])?r[t]:{};r[t]={...o,[n]:{...a[t]}}})),r):r}),{});return{block:{...t},successful:!0,output:{data:o?a:Object.values(a)}}},inputSchema:D,outputSchema:q}},[ye.PAGINATED_REQUEST]:{v1:{fn:async({block:t,params:r})=>{const n=N.build();if(!t.httpClient)throw new Error("HTTP client is not configured");const{args:o}=r,a=Number(t.inputs?.page_size),s=Number.isNaN(a)?25:a,i=o?o.filter((e=>!e.condition||!0===K(e.condition,t))).map((e=>({...e,condition:void 0}))):void 0,u=r?U({...r,args:i},t):{},{baseUrl:c,url:l,method:d,response:p,iterator:m,cursor:y,args:b}=X.parse(u),g=u?.authentication?.[t.context.authenticationType]?.[t.context.environment]?.authorization,f=V.parse(g),_=b?I(b):{query:{},body:{},headers:{}},h=R(f),v={..._?.headers??{},...h};let k=y?.token??null,j=null,F=null,x=[],w=[];const E=[];let A=s,T=y?.position??0,C=!0,O=!0;do{let e;C?C=!1:T=0,null!==k&&("query"===m.in?_.query[m.key]=k.toString():"body"===m.in&&(_.body[m.key]=k));try{e=await n.performRequest({httpClient:t.httpClient,url:`${c}${l}`,queryParams:_?.query,method:d,headers:v,body:_?.body})}catch(e){const r=e;return{block:t,successful:!1,errors:[e],output:{statusCode:r?.response?.status??500}}}j=k,w=p?.dataKey?e.data[p?.dataKey]:e.data;const r=w?.slice(T,A);A-=r.length,T+=r.length,E.push(e),x=x.concat(r),F=e?.status,k=p?.nextKey?e.data[p?.nextKey]:void 0,r.length===w.length&&0===A&&(T=0,j=k),O=S(k)&&x.length<s}while(e(k)&&x.length<s&&w?.length>0);const P=ee(x,p);return{block:t,successful:!0,output:{data:P,raw:E,statusCode:F,next:O?void 0:j,position:O?void 0:T}}},inputSchema:X,outputSchema:Z}}},ge=(e,t)=>async({block:r,params:n})=>{try{e.inputSchema&&e.inputSchema.parse(n)}catch{return{block:r,successful:!1,errors:[{message:`Input parameters for ${t} are invalid`}]}}const o=await e.fn({block:r,params:n});try{e.outputSchema&&e.outputSchema.parse(o.output)}catch{return{block:r,successful:!1,errors:[{message:`Output data of ${t} has unexpected format`}]}}return o},fe={build({functionName:e,version:t="1",validateSchemas:r=!1,stepFunctionsList:n=be}){const o=n?.[e]?.[`v${t}`];if(!o)throw new Error(`Unknown step function: ${e} v${t}`);return r?{...o,fn:ge(o,e)}:o}},_e={hris:{title:"HRIS",key:"hris",description:"Human Resource Information System"},crm:{title:"CRM",key:"crm",description:"Customer Relationship Management"},ats:{title:"ATS",key:"ats",description:"Applicant Tracking System"},lms:{title:"LMS",key:"lms",description:"Learning Management System"},marketing:{title:"Marketing",key:"marketing",description:"Marketing"},filestorage:{title:"File Storage",key:"filestorage",description:"File Storage"}},he=e=>_e[e.toLowerCase()]??null,ve=e=>!!_e[e.toLowerCase()];var ke;!function(e){e[e.Trace=0]="Trace",e[e.Debug=1]="Debug",e[e.Info=2]="Info",e[e.Warning=3]="Warning",e[e.Error=4]="Error"}(ke||(ke={}));const Se=C.object({r:C.record(C.string(),C.object({n:C.number().optional().nullable(),c:C.string().optional().nullable(),p:C.number().optional().nullable()})),v:C.number(),t:C.number()}),je=C.object({remote:C.record(C.string(),C.object({pageNumber:C.number().optional(),providerPageCursor:C.string().optional(),position:C.number().optional()})),version:C.number(),timestamp:C.number()}),Fe=e=>E(JSON.stringify(xe(e))),xe=e=>{const{remote:t,version:r,timestamp:n}=e;return{r:Object.fromEntries(Object.entries(t).map((([e,{pageNumber:t,providerPageCursor:r,position:n}])=>[e,{n:t,c:r,p:n}]))),v:r,t:n}},we=e=>{try{if(k(e)){const t=A(e),r=JSON.parse(t),n=Se.parse(r);return Ee(n)}return je.parse(e),e}catch{return null}},Ee=e=>{const{r:t,v:r,t:n}=e;return{remote:Object.fromEntries(Object.entries(t).map((([e,{n:t,c:r,p:n}])=>[e,{pageNumber:t,providerPageCursor:r,position:n}]))),version:r,timestamp:n}},Ae=(e,t)=>{const r="string"==typeof e?we(e):e,n="string"==typeof t?we(t):t;if(null===r||null===n)return r===n;const{timestamp:o,...a}=r,{timestamp:s,...i}=n;return T(a)===T(i)},Te=({cursor:e,ignoreStepIndex:t})=>!!S(e)||Object.keys(e?.remote??{}).reduce(((r,n)=>{const o=e?.remote?.[n];return(S(t)||n!==t.toString())&&(r=r&&S(o.pageNumber)&&S(o.position)&&S(o.providerPageCursor)),r}),!0),Ce=({cursor:e,stepIndex:t,pageNumber:r,providerPageCursor:n,position:o})=>{const a={pageNumber:r??void 0,providerPageCursor:n??void 0,position:o??void 0},s=S(r)&&S(n)&&S(o);return S(e)?{remote:s?{}:{[t]:a},version:2,timestamp:Date.now()}:s?(delete e.remote[t],e):{...e,remote:{...e.remote,[t]:a}}};export{ne as AUTHENTICATION_SCHEMA,ke as LogLevel,ye as StepFunctionName,fe as StepFunctionsFactory,Ae as areCursorsEqual,we as expandCursor,he as getCategoryDetails,Te as isCursorEmpty,ve as isValidCategory,Fe as minifyCursor,Ce as updateCursor};
1
+ import{notMissing as e,getCountrySubDivisionNameBySubDivisionCode as t,getCountryAlpha2CodeByCitizenship as r,getCountrySubDivisionCodeBySubDivisionName as n,getCountrySubDivisionsByAlpha2Code as o,getCountryCodeByCountryName as s,getCountryCodeByAlpha3Code as i,getCountryCodeByAlpha2Code as a,getCountryAlpha2CodeByCountryCode as u,getCountryAlpha2CodeByCountryName as c,getCountryAlpha2CodeByAlpha3Code as l,getCountryAlpha3CodeByCountryCode as d,getCountryAlpha3CodeByCountryName as p,getCountryAlpha3CodeByAlpha2Code as m,getCountryNameByCountryCode as y,getCountryNameByAlpha2Code as g,getCountryNameByAlpha3Code as b,getCountryNameByCountryName as f,getCountryCodeByCountryCode as _,getCountryAlpha3CodeByAlpha3Code as h,getCountryAlpha2CodeByAlpha2Code as v,isString as k,isMissing as S,safeParseToDateTimeString as E,safeParseToBoolean as I,safeParseToNumber as w,safeParseToString as x,encodeToBase64 as j,decodeFromBase64 as F,getContentHash as C}from"@stackone/utils";import{z as T}from"zod";import{evaluate as O,safeEvaluateRecord as R}from"@stackone/expressions";import{RequestParameterLocations as A,HttpMethods as D,RequestClientFactory as K,parseRequestParameters as N,createAuthorizationHeaders as P}from"@stackone/transport";const U=T.object({stepsDataToGroup:T.array(T.string()),isSingleRecord:T.boolean().optional()}),$=T.object({data:T.unknown()}),M=(e,t,r)=>Object.entries(e).reduce(((e,[n,o])=>{const s=o?.output?.data;return Array.isArray(s)&&s.length===t?e[n]={output:{data:s[r]}}:e[n]=o,e}),{}),q=(e,t,r)=>{if(!e||!r)return{record:e};const n={unified:{...e},..."object"==typeof r?r:{}},o={},s=[],i={...e};for(const r of t){const{error:t,value:a}=G(n,e.id,r);t?s.push(t):r.isUnified?i[r.targetFieldKey]=a:o[r.targetFieldKey]=a}return{record:{...i,unified_custom_fields:Object.keys(o).length>0?o:void 0},errors:s.length>0?s:void 0}},G=(e,t,r)=>{const{expression:n,targetFieldKey:o}=r;if(!n)return{error:{message:"Expression is empty",id:t,targetField:o}};let s;try{s=O(n,e)}catch{return{error:{message:"Invalid expression",id:t,targetField:o}}}return void 0===s?{error:{message:"Expression returned no value",id:t,targetField:o}}:{value:s}},L=T.object({fields:T.object({targetFieldKey:T.string(),expression:T.string(),type:T.enum(["string","number","boolean","datetime_string","enum"]),isUnified:T.boolean().optional(),enumMapper:T.object({matcher:T.string().or(T.object({matchExpression:T.string(),value:T.string()}).array())}).optional()}).array(),dataSource:T.string()}),B=T.object({data:T.unknown()}),H=(e,t)=>{if(!t)return;const r={},n=[],o={};for(const s of e){const{error:e,value:i}=z(t,t?.id,s);e?n.push(e):s.isUnified?o[s.targetFieldKey]=i:r[s.targetFieldKey]=i}return{record:{...o,unified_custom_fields:Object.keys(r).length>0?r:void 0},errors:n.length>0?n:void 0}},z=(e,t,r)=>{switch(r.type){case"string":case"number":case"boolean":case"datetime_string":return Q(r,t,e);case"enum":return W(r,t,e);default:return{error:{message:"Invalid type",id:t,targetField:r.targetFieldKey}}}},Q=(e,t,r)=>{if(!e.expression)return{error:{message:"Expression is empty",id:t,targetField:e.targetFieldKey}};let n;try{n=O(e.expression,r)}catch{return{error:{message:"Invalid expression",id:t,targetField:e.targetFieldKey}}}return void 0===n?{error:{message:"Expression returned no value",id:t,targetField:e.targetFieldKey}}:{value:n}},W=(S,E,I)=>{const w=Q(S,E,I),x=e(w.value)?w.value:null;if(void 0===S.enumMapper)return{error:{message:"Enum mapper was not defined",id:E,targetField:S.targetFieldKey}};const j=S.enumMapper.matcher;if(k(j)){const k=(e=>{switch(e){case"country_alpha2code_by_alpha2code":return v;case"country_alpha3code_by_alpha3code":return h;case"country_code_by_country_code":return _;case"country_name_by_country_name":return f;case"country_name_by_alpha3code":return b;case"country_name_by_alpha2code":return g;case"country_name_by_country_code":return y;case"country_alpha3code_by_alpha2code":return m;case"country_alpha3code_by_country_name":return p;case"country_alpha3code_by_country_code":return d;case"country_alpha2code_by_alpha3code":return l;case"country_alpha2code_by_country_name":return c;case"country_alpha2code_by_country_code":return u;case"country_code_by_alpha2code":return a;case"country_code_by_alpha3code":return i;case"country_code_by_country_name":return s;case"country_subdivisions_by_alpha2code":return o;case"country_subdivision_code_by_subdivision_name":return n;case"country_alpha2code_by_citizenship":return r;case"country_subdivision_name_by_subdivision_code":return t;default:return}})(j);if(e(k)){return{value:{value:(e(x)?k(x):null)??"unmapped_value",source_value:x}}}return{error:{message:`The built-in matcher "${j}" is not supported`,id:E,targetField:S.targetFieldKey}}}for(const e of j){const{matchExpression:t,value:r}=e;if(!0===O(t,I))return{value:{value:r,source_value:x}}}return{value:{value:"unmapped_value",source_value:x}}},Y=T.object({type:T.literal("basic"),username:T.string().optional(),password:T.string().optional(),encoding:T.string().optional()}),J=T.object({type:T.literal("bearer"),token:T.string()}),V=T.discriminatedUnion("type",[Y,J]),X=T.object({baseUrl:T.string(),url:T.string(),method:T.enum(D),response:T.object({indexField:T.string().optional(),dataKey:T.string().optional(),nextKey:T.string().optional()}).optional(),iterator:T.object({key:T.string(),in:T.enum(A)}),cursor:T.object({token:T.string().optional().nullable(),position:T.number().optional().nullable()}).optional(),args:T.object({name:T.string(),value:T.unknown(),in:T.enum(A),condition:T.string().optional()}).array().optional()}),Z=T.object({data:T.unknown().optional(),raw:T.unknown().optional(),statusCode:T.number(),next:T.string().optional().nullable(),position:T.number().optional()}).optional(),ee=(e,t)=>{if(t?.indexField&&Array.isArray(e))return e.reduce(((e,r)=>{const n=t.indexField;return n&&r[n]&&(e[r[n]]=r),e}),{});if(t?.indexField){const r=t.indexField;return r&&e[r]?{[e[r]]:e}:e}return e},te=T.object({type:T.literal("basic"),username:T.string().optional(),password:T.string().optional(),encoding:T.string().optional()}),re=T.object({type:T.literal("bearer"),token:T.string()}),ne=T.discriminatedUnion("type",[te,re]),oe=T.object({baseUrl:T.string(),url:T.string(),method:T.enum(D),response:T.object({collection:T.boolean().optional(),indexField:T.string().optional(),dataKey:T.string().optional()}).optional(),args:T.object({name:T.string(),value:T.unknown(),in:T.enum(A),condition:T.string().optional()}).array().optional()}),se=T.object({data:T.unknown().optional(),raw:T.unknown().optional(),statusCode:T.number()}).optional(),ie=(e,t)=>{if(t?.collection&&t?.indexField&&Array.isArray(e))return e.reduce(((e,r)=>{const n=t.indexField;return n&&r[n]&&(e[r[n]]=r),e}),{});if(!t?.collection&&t?.indexField){const r=t.indexField;return r&&e[r]?{[e[r]]:e}:e}return e},ae=T.object({fields:T.object({targetFieldKey:T.string(),type:T.string(),isUnified:T.boolean().optional()}).array().optional(),dataSource:T.string()}),ue=T.object({data:T.unknown()});var ce;!function(e){e.String="string",e.Number="number",e.Boolean="boolean",e.DateTimeString="datetime_string"}(ce||(ce={}));const le=({value:e,type:t,format:r})=>{if(S(e))return null;switch(t){case ce.String:return x({value:e});case ce.Number:return w({value:e});case ce.Boolean:return I({value:e});case ce.DateTimeString:return E({value:e,format:r});default:return e}},de=e=>Object.values(ce).includes(e),pe=(t,r)=>{const n={...t};return r.forEach((r=>{const{targetFieldKey:o,type:s}=r;de(s)&&(r.isUnified&&e(n[o])?n[o]=le({value:t[o],type:s}):n.unified_custom_fields&&e(n.unified_custom_fields?.[o])&&(n.unified_custom_fields[o]=le({value:t.unified_custom_fields?.[o],type:s})))})),{...n}},me=(t,r)=>{const n={...t};return r.forEach((r=>{const{targetFieldKey:o,type:s}=r;de(s)&&(r.isUnified&&e(n[o])?n[o]=le({value:t[o],type:s}):n.unified_custom_fields&&e(n.unified_custom_fields?.[o])&&(n.unified_custom_fields[o]=le({value:t.unified_custom_fields?.[o],type:s})))})),{...n}};var ye;!function(e){e.TYPECAST="typecast",e.MAP_FIELDS="map_fields",e.GROUP_DATA="group_data",e.REQUEST="request",e.PAGINATED_REQUEST="paginated_request"}(ye||(ye={}));const ge={[ye.TYPECAST]:{v1:{fn:async({block:e})=>{const t=e?.fieldConfigs;if(!t||"disabled"===e?.debug?.custom_mappings)return{block:e,successful:!0};let r;return r=Array.isArray(e.result)?e.result.map((e=>pe(e,t))):pe(e.result,t),{block:{...e,result:r},successful:!0}}},v2:{fn:async({block:e,params:t})=>{const{fields:r,dataSource:n}=ae.parse(t),o=O(n,e);if(!r||"disabled"===e?.debug?.custom_mappings)return{block:e,successful:!0};let s;return s=Array.isArray(o)?o.map((e=>me(e,r))):me(o,r),{block:{...e},successful:!0,output:{data:s}}},inputSchema:ae,outputSchema:ue}},[ye.MAP_FIELDS]:{v1:{fn:async({block:e})=>{const t=e?.fieldConfigs,r=[],n=e.steps;if(!t||"disabled"===e?.debug?.custom_mappings||!n)return{block:e,successful:!0};let o;if(Array.isArray(e.result)){const s=e.result.length;o=e.result.map(((e,o)=>{const i=M(n,s,o),a=q(e,t,i);return r.push(...a.errors||[]),a.record}))}else{const s=q(e.result,t,n);o=s.record,r.push(...s.errors||[])}return{block:{...e,result:o},successful:!0,errors:Object.keys(r).length>0?r:void 0}}},v2:{fn:async({block:e,params:t})=>{const r=[],{fields:n,dataSource:o}=L.parse(t),s=O(o,e);if(!n||!o||"disabled"===e?.debug?.custom_mappings||!s)return{block:e,successful:!0};let i;if(Array.isArray(s))i=s.map((e=>{const t=H(n,e);return r.push(...t?.errors||[]),t?.record}));else{const e=H(n,s);i=e?.record,r.push(...e?.errors||[])}return{block:{...e},successful:!0,output:{data:i},errors:Object.keys(r).length>0?r:void 0}},inputSchema:L,outputSchema:B}},[ye.REQUEST]:{v1:{fn:async({block:e,params:t})=>{const r=K.build();if(!e.httpClient)throw new Error("HTTP client is not configured");const{args:n}=t,o=n?n.filter((t=>!t.condition||!0===O(t.condition,e))).map((e=>({...e,condition:void 0}))):void 0,s=t?R({...t,args:o},e):{},{baseUrl:i,url:a,method:u,response:c,args:l}=oe.parse(s),d=s?.authentication?.[e.context.authenticationType]?.[e.context.environment]?.authorization,p=ne.parse(d),m=l?N(l):{query:{},body:{},headers:{}},y=P(p),g={...m?.headers??{},...y};let b;try{b=await r.performRequest({httpClient:e.httpClient,url:`${i}${a}`,queryParams:m?.query,method:u,headers:g,body:m?.body})}catch(t){const r=t;return{block:e,successful:!1,errors:[t],output:{statusCode:r?.response?.status??500}}}const f=c?.dataKey?b.data[c?.dataKey]:b.data,_=ie(f,c);return{block:e,successful:!0,output:{data:_,raw:b,statusCode:b?.status}}},inputSchema:oe,outputSchema:se}},[ye.GROUP_DATA]:{v1:{fn:async({block:t,params:r})=>{const{stepsDataToGroup:n,isSingleRecord:o}=U.parse(r),s=n.reduce(((r,n)=>{const s=t.steps?.[n]?.output?.data;return s?o?{...r,[n]:{...s}}:(Object.keys(s).forEach((t=>{const o=e(r[t])?r[t]:{};r[t]={...o,[n]:{...s[t]}}})),r):r}),{});return{block:{...t},successful:!0,output:{data:o?s:Object.values(s)}}},inputSchema:U,outputSchema:$}},[ye.PAGINATED_REQUEST]:{v1:{fn:async({block:t,params:r})=>{const n=K.build();if(!t.httpClient)throw new Error("HTTP client is not configured");const{args:o}=r,s=Number(t.inputs?.page_size),i=Number.isNaN(s)?25:s,a=o?o.filter((e=>!e.condition||!0===O(e.condition,t))).map((e=>({...e,condition:void 0}))):void 0,u=r?R({...r,args:a},t):{},{baseUrl:c,url:l,method:d,response:p,iterator:m,cursor:y,args:g}=X.parse(u),b=u?.authentication?.[t.context.authenticationType]?.[t.context.environment]?.authorization,f=V.parse(b),_=g?N(g):{query:{},body:{},headers:{}},h=P(f),v={..._?.headers??{},...h};let k=y?.token??null,E=null,I=null,w=[],x=[];const j=[];let F=i,C=y?.position??0,T=!0,A=!0;do{let e;T?T=!1:C=0,null!==k&&("query"===m.in?_.query[m.key]=k.toString():"body"===m.in&&(_.body[m.key]=k));try{e=await n.performRequest({httpClient:t.httpClient,url:`${c}${l}`,queryParams:_?.query,method:d,headers:v,body:_?.body})}catch(e){const r=e;return{block:t,successful:!1,errors:[e],output:{statusCode:r?.response?.status??500}}}E=k,x=p?.dataKey?e.data[p?.dataKey]:e.data;const r=x?.slice(C,F);F-=r.length,C+=r.length,j.push(e),w=w.concat(r),I=e?.status,k=p?.nextKey?e.data[p?.nextKey]:void 0,r.length===x.length&&0===F&&(C=0,E=k),A=S(k)&&w.length<i}while(e(k)&&w.length<i&&x?.length>0);const D=ee(w,p);return{block:t,successful:!0,output:{data:D,raw:j,statusCode:I,next:A?void 0:E,position:A?void 0:C}}},inputSchema:X,outputSchema:Z}}},be=(e,t)=>async({block:r,params:n})=>{try{e.inputSchema&&e.inputSchema.parse(n)}catch{return{block:r,successful:!1,errors:[{message:`Input parameters for ${t} are invalid`}]}}const o=await e.fn({block:r,params:n});try{e.outputSchema&&e.outputSchema.parse(o.output)}catch{return{block:r,successful:!1,errors:[{message:`Output data of ${t} has unexpected format`}]}}return o},fe={build({functionName:e,version:t="1",validateSchemas:r=!1,stepFunctionsList:n=ge}){const o=n?.[e]?.[`v${t}`];if(!o)throw new Error(`Unknown step function: ${e} v${t}`);return r?{...o,fn:be(o,e)}:o}},_e={hris:{title:"HRIS",key:"hris",description:"Human Resource Information System"},crm:{title:"CRM",key:"crm",description:"Customer Relationship Management"},ats:{title:"ATS",key:"ats",description:"Applicant Tracking System"},lms:{title:"LMS",key:"lms",description:"Learning Management System"},marketing:{title:"Marketing",key:"marketing",description:"Marketing"},filestorage:{title:"File Storage",key:"filestorage",description:"File Storage"}},he=e=>_e[e.toLowerCase()]??null,ve=e=>!!_e[e.toLowerCase()];var ke;!function(e){e[e.Trace=0]="Trace",e[e.Debug=1]="Debug",e[e.Info=2]="Info",e[e.Warning=3]="Warning",e[e.Error=4]="Error"}(ke||(ke={}));const Se=T.object({r:T.record(T.string(),T.object({n:T.number().optional().nullable(),c:T.string().optional().nullable(),p:T.number().optional().nullable()})),v:T.number(),t:T.number()}),Ee=T.object({remote:T.record(T.string(),T.object({pageNumber:T.number().optional(),providerPageCursor:T.string().optional(),position:T.number().optional()})),version:T.number(),timestamp:T.number()}),Ie=e=>j(JSON.stringify(we(e))),we=e=>{const{remote:t,version:r,timestamp:n}=e;return{r:Object.fromEntries(Object.entries(t).map((([e,{pageNumber:t,providerPageCursor:r,position:n}])=>[e,{n:t,c:r,p:n}]))),v:r,t:n}},xe=e=>{try{if(k(e)){const t=F(e),r=JSON.parse(t),n=Se.parse(r);return je(n)}return Ee.parse(e),e}catch{return null}},je=e=>{const{r:t,v:r,t:n}=e;return{remote:Object.fromEntries(Object.entries(t).map((([e,{n:t,c:r,p:n}])=>[e,{pageNumber:t,providerPageCursor:r,position:n}]))),version:r,timestamp:n}},Fe=(e,t)=>{const r="string"==typeof e?xe(e):e,n="string"==typeof t?xe(t):t;if(null===r||null===n)return r===n;const{timestamp:o,...s}=r,{timestamp:i,...a}=n;return C(s)===C(a)},Ce=({cursor:e,ignoreStepIndex:t})=>!!S(e)||Object.keys(e?.remote??{}).reduce(((r,n)=>{const o=e?.remote?.[n];return(S(t)||n!==t.toString())&&(r=r&&S(o.pageNumber)&&S(o.position)&&S(o.providerPageCursor)),r}),!0),Te=({cursor:e,stepIndex:t,pageNumber:r,providerPageCursor:n,position:o})=>{const s={pageNumber:r??void 0,providerPageCursor:n??void 0,position:o??void 0},i=S(r)&&S(n)&&S(o);return S(e)?{remote:i?{}:{[t]:s},version:2,timestamp:Date.now()}:i?(delete e.remote[t],e):{...e,remote:{...e.remote,[t]:s}}};class Oe extends Error{constructor({category:e,name:t,type:r,context:n,message:o}){super(o),this.name=t??"CoreError",this.type=r,this.category=e,this.context=n,Error.captureStackTrace&&Error.captureStackTrace(this,Oe)}toString(){const e=this.message?`: ${this.message}`:"";return`${this.category}-${this.name} [${this.type}]${e}`}}const Re=e=>e instanceof Oe,Ae=j("so1!"),De=":",Ke=",",Ne=new RegExp(`(?<!\\\\)${De}`,"g"),Pe=new RegExp(`(?<!\\\\)${Ke}`,"g"),Ue=1;class $e extends Oe{constructor(e,t,r){super({category:"CompositeId",name:t??"BaseCompositeIdError",type:e,message:r})}}class Me extends $e{constructor(e){super("COMPOSITE_ID_MISSING_HEADER_ERROR","CompositeIdMissingHeaderError",e??"Invalid compositeId, missing header")}}class qe extends $e{constructor(e){super("COMPOSITE_ID_MISSING_BODY_ERROR","CompositeIdMissingBodyError",e??"Invalid compositeId, missing body")}}class Ge extends $e{constructor(e){super("COMPOSITE_ID_UNKNOWN_IDENTIFIER_ERROR","CompositeIdUnknownIdentifierError",e??"Invalid compositeId, unknown identifier")}}class Le extends $e{constructor(e){super("COMPOSITE_ID_UNSUPPORTED_VERSION_ERROR","CompositeIdUnsupportedVersionError",e??"Invalid compositeId, unsupported version")}}const Be=(e,t={version:1})=>{if(1===t.version)return Je(ze(e,t.aliases));throw new Le(`Cannot generate ID, unsupported version number: ${t.version}`)},He=(e,t={version:1})=>{const r=Ye(e,t),n={};return r?(r.split(Pe).forEach((e=>{const[r,o]=e.split(Ne),s=We(r,t.aliases??{});n[s]=Ze(o)})),n):n},ze=(e,t={})=>{if((e=>!S(e)&&"value"in e&&void 0!==e.value)(e))return Qe({identifier:e,compositeIdAliases:t,isSoleIdentifier:!0});if((e=>!S(e)&&"identifiers"in e&&void 0!==e.identifiers)(e))return e.identifiers.map((e=>Qe({identifier:e,compositeIdAliases:t,isSoleIdentifier:!1}))).join(Ke);throw new Ge},Qe=({identifier:e,compositeIdAliases:t,isSoleIdentifier:r})=>[r?"id":t[e.key]||e.key,Xe(e.value)].filter(Boolean).join(De),We=(e,t)=>Object.keys(t).find((r=>t[r]===e))||e,Ye=(e,t)=>{if(1===t.version)return Ve(e);throw new Le(`Cannot decode ID, unsupported version number: ${t.version}`)},Je=e=>`${Ae}${j(e)}`,Ve=e=>{if(!e.startsWith(Ae))throw new Me(`Trying to decode an ID without the header: ${e}`);const t=e.split(Ae)[1];if(!t)throw new qe(`Trying to decode an ID without a body: ${e}`);return F(t)},Xe=e=>[Ke,De].reduce(((e,t)=>e.replace(t,"\\"+t)),e),Ze=e=>[Ke,De].reduce(((e,t)=>{const r="\\"+t;return e.replace(new RegExp("\\\\"+r,"g"),t)}),e);export{ne as AUTHENTICATION_SCHEMA,Ue as COMPOSITE_ID_LATEST_VERSION,Oe as CoreError,ke as LogLevel,ye as StepFunctionName,fe as StepFunctionsFactory,Fe as areCursorsEqual,He as decodeCompositeId,Be as encodeCompositeId,xe as expandCursor,he as getCategoryDetails,Re as isCoreError,Ce as isCursorEmpty,ve as isValidCategory,Ie as minifyCursor,Te as updateCursor};
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var e=require("@stackone/utils"),t=require("zod"),r=require("@stackone/expressions"),o=require("@stackone/transport");const n=t.z.object({stepsDataToGroup:t.z.array(t.z.string()),isSingleRecord:t.z.boolean().optional()}),s=t.z.object({data:t.z.unknown()}),a=(e,t,r)=>Object.entries(e).reduce(((e,[o,n])=>{const s=n?.output?.data;return Array.isArray(s)&&s.length===t?e[o]={output:{data:s[r]}}:e[o]=n,e}),{}),i=(e,t,r)=>{if(!e||!r)return{record:e};const o={unified:{...e},..."object"==typeof r?r:{}},n={},s=[],a={...e};for(const r of t){const{error:t,value:i}=u(o,e.id,r);t?s.push(t):r.isUnified?a[r.targetFieldKey]=i:n[r.targetFieldKey]=i}return{record:{...a,unified_custom_fields:Object.keys(n).length>0?n:void 0},errors:s.length>0?s:void 0}},u=(e,t,o)=>{const{expression:n,targetFieldKey:s}=o;if(!n)return{error:{message:"Expression is empty",id:t,targetField:s}};let a;try{a=r.evaluate(n,e)}catch{return{error:{message:"Invalid expression",id:t,targetField:s}}}return void 0===a?{error:{message:"Expression returned no value",id:t,targetField:s}}:{value:a}},c=t.z.object({fields:t.z.object({targetFieldKey:t.z.string(),expression:t.z.string(),type:t.z.enum(["string","number","boolean","datetime_string","enum"]),isUnified:t.z.boolean().optional(),enumMapper:t.z.object({matcher:t.z.string().or(t.z.object({matchExpression:t.z.string(),value:t.z.string()}).array())}).optional()}).array(),dataSource:t.z.string()}),l=t.z.object({data:t.z.unknown()}),d=(e,t)=>{if(!t)return;const r={},o=[],n={};for(const s of e){const{error:e,value:a}=p(t,t?.id,s);e?o.push(e):s.isUnified?n[s.targetFieldKey]=a:r[s.targetFieldKey]=a}return{record:{...n,unified_custom_fields:Object.keys(r).length>0?r:void 0},errors:o.length>0?o:void 0}},p=(e,t,r)=>{switch(r.type){case"string":case"number":case"boolean":case"datetime_string":return y(r,t,e);case"enum":return g(r,t,e);default:return{error:{message:"Invalid type",id:t,targetField:r.targetFieldKey}}}},y=(e,t,o)=>{if(!e.expression)return{error:{message:"Expression is empty",id:t,targetField:e.targetFieldKey}};let n;try{n=r.evaluate(e.expression,o)}catch{return{error:{message:"Invalid expression",id:t,targetField:e.targetFieldKey}}}return void 0===n?{error:{message:"Expression returned no value",id:t,targetField:e.targetFieldKey}}:{value:n}},g=(t,o,n)=>{const s=y(t,o,n),a=e.notMissing(s.value)?s.value:null;if(void 0===t.enumMapper)return{error:{message:"Enum mapper was not defined",id:o,targetField:t.targetFieldKey}};const i=t.enumMapper.matcher;if(e.isString(i)){const r=(t=>{switch(t){case"country_alpha2code_by_alpha2code":return e.getCountryAlpha2CodeByAlpha2Code;case"country_alpha3code_by_alpha3code":return e.getCountryAlpha3CodeByAlpha3Code;case"country_code_by_country_code":return e.getCountryCodeByCountryCode;case"country_name_by_country_name":return e.getCountryNameByCountryName;case"country_name_by_alpha3code":return e.getCountryNameByAlpha3Code;case"country_name_by_alpha2code":return e.getCountryNameByAlpha2Code;case"country_name_by_country_code":return e.getCountryNameByCountryCode;case"country_alpha3code_by_alpha2code":return e.getCountryAlpha3CodeByAlpha2Code;case"country_alpha3code_by_country_name":return e.getCountryAlpha3CodeByCountryName;case"country_alpha3code_by_country_code":return e.getCountryAlpha3CodeByCountryCode;case"country_alpha2code_by_alpha3code":return e.getCountryAlpha2CodeByAlpha3Code;case"country_alpha2code_by_country_name":return e.getCountryAlpha2CodeByCountryName;case"country_alpha2code_by_country_code":return e.getCountryAlpha2CodeByCountryCode;case"country_code_by_alpha2code":return e.getCountryCodeByAlpha2Code;case"country_code_by_alpha3code":return e.getCountryCodeByAlpha3Code;case"country_code_by_country_name":return e.getCountryCodeByCountryName;case"country_subdivisions_by_alpha2code":return e.getCountrySubDivisionsByAlpha2Code;case"country_subdivision_code_by_subdivision_name":return e.getCountrySubDivisionCodeBySubDivisionName;case"country_alpha2code_by_citizenship":return e.getCountryAlpha2CodeByCitizenship;case"country_subdivision_name_by_subdivision_code":return e.getCountrySubDivisionNameBySubDivisionCode;default:return}})(i);if(e.notMissing(r)){return{value:{value:(e.notMissing(a)?r(a):null)??"unmapped_value",source_value:a}}}return{error:{message:`The built-in matcher "${i}" is not supported`,id:o,targetField:t.targetFieldKey}}}for(const e of i){const{matchExpression:t,value:o}=e;if(!0===r.evaluate(t,n))return{value:{value:o,source_value:a}}}return{value:{value:"unmapped_value",source_value:a}}},m=t.z.object({type:t.z.literal("basic"),username:t.z.string().optional(),password:t.z.string().optional(),encoding:t.z.string().optional()}),b=t.z.object({type:t.z.literal("bearer"),token:t.z.string()}),h=t.z.discriminatedUnion("type",[m,b]),f=t.z.object({baseUrl:t.z.string(),url:t.z.string(),method:t.z.enum(o.HttpMethods),response:t.z.object({indexField:t.z.string().optional(),dataKey:t.z.string().optional(),nextKey:t.z.string().optional()}).optional(),iterator:t.z.object({key:t.z.string(),in:t.z.enum(o.RequestParameterLocations)}),cursor:t.z.object({token:t.z.string().optional().nullable(),position:t.z.number().optional().nullable()}).optional(),args:t.z.object({name:t.z.string(),value:t.z.unknown(),in:t.z.enum(o.RequestParameterLocations),condition:t.z.string().optional()}).array().optional()}),_=t.z.object({data:t.z.unknown().optional(),raw:t.z.unknown().optional(),statusCode:t.z.number(),next:t.z.string().optional().nullable(),position:t.z.number().optional()}).optional(),z=(e,t)=>{if(t?.indexField&&Array.isArray(e))return e.reduce(((e,r)=>{const o=t.indexField;return o&&r[o]&&(e[r[o]]=r),e}),{});if(t?.indexField){const r=t.indexField;return r&&e[r]?{[e[r]]:e}:e}return e},v=t.z.object({type:t.z.literal("basic"),username:t.z.string().optional(),password:t.z.string().optional(),encoding:t.z.string().optional()}),C=t.z.object({type:t.z.literal("bearer"),token:t.z.string()}),S=t.z.discriminatedUnion("type",[v,C]),k=t.z.object({baseUrl:t.z.string(),url:t.z.string(),method:t.z.enum(o.HttpMethods),response:t.z.object({collection:t.z.boolean().optional(),indexField:t.z.string().optional(),dataKey:t.z.string().optional()}).optional(),args:t.z.object({name:t.z.string(),value:t.z.unknown(),in:t.z.enum(o.RequestParameterLocations),condition:t.z.string().optional()}).array().optional()}),x=t.z.object({data:t.z.unknown().optional(),raw:t.z.unknown().optional(),statusCode:t.z.number()}).optional(),F=(e,t)=>{if(t?.collection&&t?.indexField&&Array.isArray(e))return e.reduce(((e,r)=>{const o=t.indexField;return o&&r[o]&&(e[r[o]]=r),e}),{});if(!t?.collection&&t?.indexField){const r=t.indexField;return r&&e[r]?{[e[r]]:e}:e}return e},A=t.z.object({fields:t.z.object({targetFieldKey:t.z.string(),type:t.z.string(),isUnified:t.z.boolean().optional()}).array().optional(),dataSource:t.z.string()}),j=t.z.object({data:t.z.unknown()});var N;!function(e){e.String="string",e.Number="number",e.Boolean="boolean",e.DateTimeString="datetime_string"}(N||(N={}));const E=({value:t,type:r,format:o})=>{if(e.isMissing(t))return null;switch(r){case N.String:return e.safeParseToString({value:t});case N.Number:return e.safeParseToNumber({value:t});case N.Boolean:return e.safeParseToBoolean({value:t});case N.DateTimeString:return e.safeParseToDateTimeString({value:t,format:o});default:return t}},T=e=>Object.values(N).includes(e),M=(t,r)=>{const o={...t};return r.forEach((r=>{const{targetFieldKey:n,type:s}=r;T(s)&&(r.isUnified&&e.notMissing(o[n])?o[n]=E({value:t[n],type:s}):o.unified_custom_fields&&e.notMissing(o.unified_custom_fields?.[n])&&(o.unified_custom_fields[n]=E({value:t.unified_custom_fields?.[n],type:s})))})),{...o}},w=(t,r)=>{const o={...t};return r.forEach((r=>{const{targetFieldKey:n,type:s}=r;T(s)&&(r.isUnified&&e.notMissing(o[n])?o[n]=E({value:t[n],type:s}):o.unified_custom_fields&&e.notMissing(o.unified_custom_fields?.[n])&&(o.unified_custom_fields[n]=E({value:t.unified_custom_fields?.[n],type:s})))})),{...o}};var P;exports.StepFunctionName=void 0,(P=exports.StepFunctionName||(exports.StepFunctionName={})).TYPECAST="typecast",P.MAP_FIELDS="map_fields",P.GROUP_DATA="group_data",P.REQUEST="request",P.PAGINATED_REQUEST="paginated_request";const B={[exports.StepFunctionName.TYPECAST]:{v1:{fn:async({block:e})=>{const t=e?.fieldConfigs;if(!t||"disabled"===e?.debug?.custom_mappings)return{block:e,successful:!0};let r;return r=Array.isArray(e.result)?e.result.map((e=>M(e,t))):M(e.result,t),{block:{...e,result:r},successful:!0}}},v2:{fn:async({block:e,params:t})=>{const{fields:o,dataSource:n}=A.parse(t),s=r.evaluate(n,e);if(!o||"disabled"===e?.debug?.custom_mappings)return{block:e,successful:!0};let a;return a=Array.isArray(s)?s.map((e=>w(e,o))):w(s,o),{block:{...e},successful:!0,output:{data:a}}},inputSchema:A,outputSchema:j}},[exports.StepFunctionName.MAP_FIELDS]:{v1:{fn:async({block:e})=>{const t=e?.fieldConfigs,r=[],o=e.steps;if(!t||"disabled"===e?.debug?.custom_mappings||!o)return{block:e,successful:!0};let n;if(Array.isArray(e.result)){const s=e.result.length;n=e.result.map(((e,n)=>{const u=a(o,s,n),c=i(e,t,u);return r.push(...c.errors||[]),c.record}))}else{const s=i(e.result,t,o);n=s.record,r.push(...s.errors||[])}return{block:{...e,result:n},successful:!0,errors:Object.keys(r).length>0?r:void 0}}},v2:{fn:async({block:e,params:t})=>{const o=[],{fields:n,dataSource:s}=c.parse(t),a=r.evaluate(s,e);if(!n||!s||"disabled"===e?.debug?.custom_mappings||!a)return{block:e,successful:!0};let i;if(Array.isArray(a))i=a.map((e=>{const t=d(n,e);return o.push(...t?.errors||[]),t?.record}));else{const e=d(n,a);i=e?.record,o.push(...e?.errors||[])}return{block:{...e},successful:!0,output:{data:i},errors:Object.keys(o).length>0?o:void 0}},inputSchema:c,outputSchema:l}},[exports.StepFunctionName.REQUEST]:{v1:{fn:async({block:e,params:t})=>{const n=o.RequestClientFactory.build();if(!e.httpClient)throw new Error("HTTP client is not configured");const{args:s}=t,a=s?s.filter((t=>!t.condition||!0===r.evaluate(t.condition,e))).map((e=>({...e,condition:void 0}))):void 0,i=t?r.safeEvaluateRecord({...t,args:a},e):{},{baseUrl:u,url:c,method:l,response:d,args:p}=k.parse(i),y=i?.authentication?.[e.context.authenticationType]?.[e.context.environment]?.authorization,g=S.parse(y),m=p?o.parseRequestParameters(p):{query:{},body:{},headers:{}},b=o.createAuthorizationHeaders(g),h={...m?.headers??{},...b};let f;try{f=await n.performRequest({httpClient:e.httpClient,url:`${u}${c}`,queryParams:m?.query,method:l,headers:h,body:m?.body})}catch(t){const r=t;return{block:e,successful:!1,errors:[t],output:{statusCode:r?.response?.status??500}}}const _=d?.dataKey?f.data[d?.dataKey]:f.data,z=F(_,d);return{block:e,successful:!0,output:{data:z,raw:f,statusCode:f?.status}}},inputSchema:k,outputSchema:x}},[exports.StepFunctionName.GROUP_DATA]:{v1:{fn:async({block:t,params:r})=>{const{stepsDataToGroup:o,isSingleRecord:s}=n.parse(r),a=o.reduce(((r,o)=>{const n=t.steps?.[o]?.output?.data;return n?s?{...r,[o]:{...n}}:(Object.keys(n).forEach((t=>{const s=e.notMissing(r[t])?r[t]:{};r[t]={...s,[o]:{...n[t]}}})),r):r}),{});return{block:{...t},successful:!0,output:{data:s?a:Object.values(a)}}},inputSchema:n,outputSchema:s}},[exports.StepFunctionName.PAGINATED_REQUEST]:{v1:{fn:async({block:t,params:n})=>{const s=o.RequestClientFactory.build();if(!t.httpClient)throw new Error("HTTP client is not configured");const{args:a}=n,i=Number(t.inputs?.page_size),u=Number.isNaN(i)?25:i,c=a?a.filter((e=>!e.condition||!0===r.evaluate(e.condition,t))).map((e=>({...e,condition:void 0}))):void 0,l=n?r.safeEvaluateRecord({...n,args:c},t):{},{baseUrl:d,url:p,method:y,response:g,iterator:m,cursor:b,args:_}=f.parse(l),v=l?.authentication?.[t.context.authenticationType]?.[t.context.environment]?.authorization,C=h.parse(v),S=_?o.parseRequestParameters(_):{query:{},body:{},headers:{}},k=o.createAuthorizationHeaders(C),x={...S?.headers??{},...k};let F=b?.token??null,A=null,j=null,N=[],E=[];const T=[];let M=u,w=b?.position??0,P=!0,B=!0;do{let r;P?P=!1:w=0,null!==F&&("query"===m.in?S.query[m.key]=F.toString():"body"===m.in&&(S.body[m.key]=F));try{r=await s.performRequest({httpClient:t.httpClient,url:`${d}${p}`,queryParams:S?.query,method:y,headers:x,body:S?.body})}catch(e){const r=e;return{block:t,successful:!1,errors:[e],output:{statusCode:r?.response?.status??500}}}A=F,E=g?.dataKey?r.data[g?.dataKey]:r.data;const o=E?.slice(w,M);M-=o.length,w+=o.length,T.push(r),N=N.concat(o),j=r?.status,F=g?.nextKey?r.data[g?.nextKey]:void 0,o.length===E.length&&0===M&&(w=0,A=F),B=e.isMissing(F)&&N.length<u}while(e.notMissing(F)&&N.length<u&&E?.length>0);const q=z(N,g);return{block:t,successful:!0,output:{data:q,raw:T,statusCode:j,next:B?void 0:A,position:B?void 0:w}}},inputSchema:f,outputSchema:_}}},q=(e,t)=>async({block:r,params:o})=>{try{e.inputSchema&&e.inputSchema.parse(o)}catch{return{block:r,successful:!1,errors:[{message:`Input parameters for ${t} are invalid`}]}}const n=await e.fn({block:r,params:o});try{e.outputSchema&&e.outputSchema.parse(n.output)}catch{return{block:r,successful:!1,errors:[{message:`Output data of ${t} has unexpected format`}]}}return n},K={build({functionName:e,version:t="1",validateSchemas:r=!1,stepFunctionsList:o=B}){const n=o?.[e]?.[`v${t}`];if(!n)throw new Error(`Unknown step function: ${e} v${t}`);return r?{...n,fn:q(n,e)}:n}},R={hris:{title:"HRIS",key:"hris",description:"Human Resource Information System"},crm:{title:"CRM",key:"crm",description:"Customer Relationship Management"},ats:{title:"ATS",key:"ats",description:"Applicant Tracking System"},lms:{title:"LMS",key:"lms",description:"Learning Management System"},marketing:{title:"Marketing",key:"marketing",description:"Marketing"},filestorage:{title:"File Storage",key:"filestorage",description:"File Storage"}};var D;exports.LogLevel=void 0,(D=exports.LogLevel||(exports.LogLevel={}))[D.Trace=0]="Trace",D[D.Debug=1]="Debug",D[D.Info=2]="Info",D[D.Warning=3]="Warning",D[D.Error=4]="Error";const U=t.z.object({r:t.z.record(t.z.string(),t.z.object({n:t.z.number().optional().nullable(),c:t.z.string().optional().nullable(),p:t.z.number().optional().nullable()})),v:t.z.number(),t:t.z.number()}),O=t.z.object({remote:t.z.record(t.z.string(),t.z.object({pageNumber:t.z.number().optional(),providerPageCursor:t.z.string().optional(),position:t.z.number().optional()})),version:t.z.number(),timestamp:t.z.number()}),I=e=>{const{remote:t,version:r,timestamp:o}=e;return{r:Object.fromEntries(Object.entries(t).map((([e,{pageNumber:t,providerPageCursor:r,position:o}])=>[e,{n:t,c:r,p:o}]))),v:r,t:o}},L=t=>{try{if(e.isString(t)){const r=e.decodeFromBase64(t),o=JSON.parse(r),n=U.parse(o);return H(n)}return O.parse(t),t}catch{return null}},H=e=>{const{r:t,v:r,t:o}=e;return{remote:Object.fromEntries(Object.entries(t).map((([e,{n:t,c:r,p:o}])=>[e,{pageNumber:t,providerPageCursor:r,position:o}]))),version:r,timestamp:o}};exports.AUTHENTICATION_SCHEMA=S,exports.StepFunctionsFactory=K,exports.areCursorsEqual=(t,r)=>{const o="string"==typeof t?L(t):t,n="string"==typeof r?L(r):r;if(null===o||null===n)return o===n;const{timestamp:s,...a}=o,{timestamp:i,...u}=n;return e.getContentHash(a)===e.getContentHash(u)},exports.expandCursor=L,exports.getCategoryDetails=e=>R[e.toLowerCase()]??null,exports.isCursorEmpty=({cursor:t,ignoreStepIndex:r})=>!!e.isMissing(t)||Object.keys(t?.remote??{}).reduce(((o,n)=>{const s=t?.remote?.[n];return(e.isMissing(r)||n!==r.toString())&&(o=o&&e.isMissing(s.pageNumber)&&e.isMissing(s.position)&&e.isMissing(s.providerPageCursor)),o}),!0),exports.isValidCategory=e=>!!R[e.toLowerCase()],exports.minifyCursor=t=>e.encodeToBase64(JSON.stringify(I(t))),exports.updateCursor=({cursor:t,stepIndex:r,pageNumber:o,providerPageCursor:n,position:s})=>{const a={pageNumber:o??void 0,providerPageCursor:n??void 0,position:s??void 0},i=e.isMissing(o)&&e.isMissing(n)&&e.isMissing(s);return e.isMissing(t)?{remote:i?{}:{[r]:a},version:2,timestamp:Date.now()}:i?(delete t.remote[r],t):{...t,remote:{...t.remote,[r]:a}}};
1
+ "use strict";var e=require("@stackone/utils"),t=require("zod"),r=require("@stackone/expressions"),o=require("@stackone/transport");const n=t.z.object({stepsDataToGroup:t.z.array(t.z.string()),isSingleRecord:t.z.boolean().optional()}),s=t.z.object({data:t.z.unknown()}),i=(e,t,r)=>Object.entries(e).reduce(((e,[o,n])=>{const s=n?.output?.data;return Array.isArray(s)&&s.length===t?e[o]={output:{data:s[r]}}:e[o]=n,e}),{}),a=(e,t,r)=>{if(!e||!r)return{record:e};const o={unified:{...e},..."object"==typeof r?r:{}},n={},s=[],i={...e};for(const r of t){const{error:t,value:a}=u(o,e.id,r);t?s.push(t):r.isUnified?i[r.targetFieldKey]=a:n[r.targetFieldKey]=a}return{record:{...i,unified_custom_fields:Object.keys(n).length>0?n:void 0},errors:s.length>0?s:void 0}},u=(e,t,o)=>{const{expression:n,targetFieldKey:s}=o;if(!n)return{error:{message:"Expression is empty",id:t,targetField:s}};let i;try{i=r.evaluate(n,e)}catch{return{error:{message:"Invalid expression",id:t,targetField:s}}}return void 0===i?{error:{message:"Expression returned no value",id:t,targetField:s}}:{value:i}},c=t.z.object({fields:t.z.object({targetFieldKey:t.z.string(),expression:t.z.string(),type:t.z.enum(["string","number","boolean","datetime_string","enum"]),isUnified:t.z.boolean().optional(),enumMapper:t.z.object({matcher:t.z.string().or(t.z.object({matchExpression:t.z.string(),value:t.z.string()}).array())}).optional()}).array(),dataSource:t.z.string()}),l=t.z.object({data:t.z.unknown()}),d=(e,t)=>{if(!t)return;const r={},o=[],n={};for(const s of e){const{error:e,value:i}=p(t,t?.id,s);e?o.push(e):s.isUnified?n[s.targetFieldKey]=i:r[s.targetFieldKey]=i}return{record:{...n,unified_custom_fields:Object.keys(r).length>0?r:void 0},errors:o.length>0?o:void 0}},p=(e,t,r)=>{switch(r.type){case"string":case"number":case"boolean":case"datetime_string":return m(r,t,e);case"enum":return y(r,t,e);default:return{error:{message:"Invalid type",id:t,targetField:r.targetFieldKey}}}},m=(e,t,o)=>{if(!e.expression)return{error:{message:"Expression is empty",id:t,targetField:e.targetFieldKey}};let n;try{n=r.evaluate(e.expression,o)}catch{return{error:{message:"Invalid expression",id:t,targetField:e.targetFieldKey}}}return void 0===n?{error:{message:"Expression returned no value",id:t,targetField:e.targetFieldKey}}:{value:n}},y=(t,o,n)=>{const s=m(t,o,n),i=e.notMissing(s.value)?s.value:null;if(void 0===t.enumMapper)return{error:{message:"Enum mapper was not defined",id:o,targetField:t.targetFieldKey}};const a=t.enumMapper.matcher;if(e.isString(a)){const r=(t=>{switch(t){case"country_alpha2code_by_alpha2code":return e.getCountryAlpha2CodeByAlpha2Code;case"country_alpha3code_by_alpha3code":return e.getCountryAlpha3CodeByAlpha3Code;case"country_code_by_country_code":return e.getCountryCodeByCountryCode;case"country_name_by_country_name":return e.getCountryNameByCountryName;case"country_name_by_alpha3code":return e.getCountryNameByAlpha3Code;case"country_name_by_alpha2code":return e.getCountryNameByAlpha2Code;case"country_name_by_country_code":return e.getCountryNameByCountryCode;case"country_alpha3code_by_alpha2code":return e.getCountryAlpha3CodeByAlpha2Code;case"country_alpha3code_by_country_name":return e.getCountryAlpha3CodeByCountryName;case"country_alpha3code_by_country_code":return e.getCountryAlpha3CodeByCountryCode;case"country_alpha2code_by_alpha3code":return e.getCountryAlpha2CodeByAlpha3Code;case"country_alpha2code_by_country_name":return e.getCountryAlpha2CodeByCountryName;case"country_alpha2code_by_country_code":return e.getCountryAlpha2CodeByCountryCode;case"country_code_by_alpha2code":return e.getCountryCodeByAlpha2Code;case"country_code_by_alpha3code":return e.getCountryCodeByAlpha3Code;case"country_code_by_country_name":return e.getCountryCodeByCountryName;case"country_subdivisions_by_alpha2code":return e.getCountrySubDivisionsByAlpha2Code;case"country_subdivision_code_by_subdivision_name":return e.getCountrySubDivisionCodeBySubDivisionName;case"country_alpha2code_by_citizenship":return e.getCountryAlpha2CodeByCitizenship;case"country_subdivision_name_by_subdivision_code":return e.getCountrySubDivisionNameBySubDivisionCode;default:return}})(a);if(e.notMissing(r)){return{value:{value:(e.notMissing(i)?r(i):null)??"unmapped_value",source_value:i}}}return{error:{message:`The built-in matcher "${a}" is not supported`,id:o,targetField:t.targetFieldKey}}}for(const e of a){const{matchExpression:t,value:o}=e;if(!0===r.evaluate(t,n))return{value:{value:o,source_value:i}}}return{value:{value:"unmapped_value",source_value:i}}},g=t.z.object({type:t.z.literal("basic"),username:t.z.string().optional(),password:t.z.string().optional(),encoding:t.z.string().optional()}),b=t.z.object({type:t.z.literal("bearer"),token:t.z.string()}),h=t.z.discriminatedUnion("type",[g,b]),f=t.z.object({baseUrl:t.z.string(),url:t.z.string(),method:t.z.enum(o.HttpMethods),response:t.z.object({indexField:t.z.string().optional(),dataKey:t.z.string().optional(),nextKey:t.z.string().optional()}).optional(),iterator:t.z.object({key:t.z.string(),in:t.z.enum(o.RequestParameterLocations)}),cursor:t.z.object({token:t.z.string().optional().nullable(),position:t.z.number().optional().nullable()}).optional(),args:t.z.object({name:t.z.string(),value:t.z.unknown(),in:t.z.enum(o.RequestParameterLocations),condition:t.z.string().optional()}).array().optional()}),_=t.z.object({data:t.z.unknown().optional(),raw:t.z.unknown().optional(),statusCode:t.z.number(),next:t.z.string().optional().nullable(),position:t.z.number().optional()}).optional(),v=(e,t)=>{if(t?.indexField&&Array.isArray(e))return e.reduce(((e,r)=>{const o=t.indexField;return o&&r[o]&&(e[r[o]]=r),e}),{});if(t?.indexField){const r=t.indexField;return r&&e[r]?{[e[r]]:e}:e}return e},z=t.z.object({type:t.z.literal("basic"),username:t.z.string().optional(),password:t.z.string().optional(),encoding:t.z.string().optional()}),C=t.z.object({type:t.z.literal("bearer"),token:t.z.string()}),S=t.z.discriminatedUnion("type",[z,C]),x=t.z.object({baseUrl:t.z.string(),url:t.z.string(),method:t.z.enum(o.HttpMethods),response:t.z.object({collection:t.z.boolean().optional(),indexField:t.z.string().optional(),dataKey:t.z.string().optional()}).optional(),args:t.z.object({name:t.z.string(),value:t.z.unknown(),in:t.z.enum(o.RequestParameterLocations),condition:t.z.string().optional()}).array().optional()}),E=t.z.object({data:t.z.unknown().optional(),raw:t.z.unknown().optional(),statusCode:t.z.number()}).optional(),k=(e,t)=>{if(t?.collection&&t?.indexField&&Array.isArray(e))return e.reduce(((e,r)=>{const o=t.indexField;return o&&r[o]&&(e[r[o]]=r),e}),{});if(!t?.collection&&t?.indexField){const r=t.indexField;return r&&e[r]?{[e[r]]:e}:e}return e},I=t.z.object({fields:t.z.object({targetFieldKey:t.z.string(),type:t.z.string(),isUnified:t.z.boolean().optional()}).array().optional(),dataSource:t.z.string()}),A=t.z.object({data:t.z.unknown()});var F;!function(e){e.String="string",e.Number="number",e.Boolean="boolean",e.DateTimeString="datetime_string"}(F||(F={}));const T=({value:t,type:r,format:o})=>{if(e.isMissing(t))return null;switch(r){case F.String:return e.safeParseToString({value:t});case F.Number:return e.safeParseToNumber({value:t});case F.Boolean:return e.safeParseToBoolean({value:t});case F.DateTimeString:return e.safeParseToDateTimeString({value:t,format:o});default:return t}},w=e=>Object.values(F).includes(e),N=(t,r)=>{const o={...t};return r.forEach((r=>{const{targetFieldKey:n,type:s}=r;w(s)&&(r.isUnified&&e.notMissing(o[n])?o[n]=T({value:t[n],type:s}):o.unified_custom_fields&&e.notMissing(o.unified_custom_fields?.[n])&&(o.unified_custom_fields[n]=T({value:t.unified_custom_fields?.[n],type:s})))})),{...o}},j=(t,r)=>{const o={...t};return r.forEach((r=>{const{targetFieldKey:n,type:s}=r;w(s)&&(r.isUnified&&e.notMissing(o[n])?o[n]=T({value:t[n],type:s}):o.unified_custom_fields&&e.notMissing(o.unified_custom_fields?.[n])&&(o.unified_custom_fields[n]=T({value:t.unified_custom_fields?.[n],type:s})))})),{...o}};var M;exports.StepFunctionName=void 0,(M=exports.StepFunctionName||(exports.StepFunctionName={})).TYPECAST="typecast",M.MAP_FIELDS="map_fields",M.GROUP_DATA="group_data",M.REQUEST="request",M.PAGINATED_REQUEST="paginated_request";const R={[exports.StepFunctionName.TYPECAST]:{v1:{fn:async({block:e})=>{const t=e?.fieldConfigs;if(!t||"disabled"===e?.debug?.custom_mappings)return{block:e,successful:!0};let r;return r=Array.isArray(e.result)?e.result.map((e=>N(e,t))):N(e.result,t),{block:{...e,result:r},successful:!0}}},v2:{fn:async({block:e,params:t})=>{const{fields:o,dataSource:n}=I.parse(t),s=r.evaluate(n,e);if(!o||"disabled"===e?.debug?.custom_mappings)return{block:e,successful:!0};let i;return i=Array.isArray(s)?s.map((e=>j(e,o))):j(s,o),{block:{...e},successful:!0,output:{data:i}}},inputSchema:I,outputSchema:A}},[exports.StepFunctionName.MAP_FIELDS]:{v1:{fn:async({block:e})=>{const t=e?.fieldConfigs,r=[],o=e.steps;if(!t||"disabled"===e?.debug?.custom_mappings||!o)return{block:e,successful:!0};let n;if(Array.isArray(e.result)){const s=e.result.length;n=e.result.map(((e,n)=>{const u=i(o,s,n),c=a(e,t,u);return r.push(...c.errors||[]),c.record}))}else{const s=a(e.result,t,o);n=s.record,r.push(...s.errors||[])}return{block:{...e,result:n},successful:!0,errors:Object.keys(r).length>0?r:void 0}}},v2:{fn:async({block:e,params:t})=>{const o=[],{fields:n,dataSource:s}=c.parse(t),i=r.evaluate(s,e);if(!n||!s||"disabled"===e?.debug?.custom_mappings||!i)return{block:e,successful:!0};let a;if(Array.isArray(i))a=i.map((e=>{const t=d(n,e);return o.push(...t?.errors||[]),t?.record}));else{const e=d(n,i);a=e?.record,o.push(...e?.errors||[])}return{block:{...e},successful:!0,output:{data:a},errors:Object.keys(o).length>0?o:void 0}},inputSchema:c,outputSchema:l}},[exports.StepFunctionName.REQUEST]:{v1:{fn:async({block:e,params:t})=>{const n=o.RequestClientFactory.build();if(!e.httpClient)throw new Error("HTTP client is not configured");const{args:s}=t,i=s?s.filter((t=>!t.condition||!0===r.evaluate(t.condition,e))).map((e=>({...e,condition:void 0}))):void 0,a=t?r.safeEvaluateRecord({...t,args:i},e):{},{baseUrl:u,url:c,method:l,response:d,args:p}=x.parse(a),m=a?.authentication?.[e.context.authenticationType]?.[e.context.environment]?.authorization,y=S.parse(m),g=p?o.parseRequestParameters(p):{query:{},body:{},headers:{}},b=o.createAuthorizationHeaders(y),h={...g?.headers??{},...b};let f;try{f=await n.performRequest({httpClient:e.httpClient,url:`${u}${c}`,queryParams:g?.query,method:l,headers:h,body:g?.body})}catch(t){const r=t;return{block:e,successful:!1,errors:[t],output:{statusCode:r?.response?.status??500}}}const _=d?.dataKey?f.data[d?.dataKey]:f.data,v=k(_,d);return{block:e,successful:!0,output:{data:v,raw:f,statusCode:f?.status}}},inputSchema:x,outputSchema:E}},[exports.StepFunctionName.GROUP_DATA]:{v1:{fn:async({block:t,params:r})=>{const{stepsDataToGroup:o,isSingleRecord:s}=n.parse(r),i=o.reduce(((r,o)=>{const n=t.steps?.[o]?.output?.data;return n?s?{...r,[o]:{...n}}:(Object.keys(n).forEach((t=>{const s=e.notMissing(r[t])?r[t]:{};r[t]={...s,[o]:{...n[t]}}})),r):r}),{});return{block:{...t},successful:!0,output:{data:s?i:Object.values(i)}}},inputSchema:n,outputSchema:s}},[exports.StepFunctionName.PAGINATED_REQUEST]:{v1:{fn:async({block:t,params:n})=>{const s=o.RequestClientFactory.build();if(!t.httpClient)throw new Error("HTTP client is not configured");const{args:i}=n,a=Number(t.inputs?.page_size),u=Number.isNaN(a)?25:a,c=i?i.filter((e=>!e.condition||!0===r.evaluate(e.condition,t))).map((e=>({...e,condition:void 0}))):void 0,l=n?r.safeEvaluateRecord({...n,args:c},t):{},{baseUrl:d,url:p,method:m,response:y,iterator:g,cursor:b,args:_}=f.parse(l),z=l?.authentication?.[t.context.authenticationType]?.[t.context.environment]?.authorization,C=h.parse(z),S=_?o.parseRequestParameters(_):{query:{},body:{},headers:{}},x=o.createAuthorizationHeaders(C),E={...S?.headers??{},...x};let k=b?.token??null,I=null,A=null,F=[],T=[];const w=[];let N=u,j=b?.position??0,M=!0,R=!0;do{let r;M?M=!1:j=0,null!==k&&("query"===g.in?S.query[g.key]=k.toString():"body"===g.in&&(S.body[g.key]=k));try{r=await s.performRequest({httpClient:t.httpClient,url:`${d}${p}`,queryParams:S?.query,method:m,headers:E,body:S?.body})}catch(e){const r=e;return{block:t,successful:!1,errors:[e],output:{statusCode:r?.response?.status??500}}}I=k,T=y?.dataKey?r.data[y?.dataKey]:r.data;const o=T?.slice(j,N);N-=o.length,j+=o.length,w.push(r),F=F.concat(o),A=r?.status,k=y?.nextKey?r.data[y?.nextKey]:void 0,o.length===T.length&&0===N&&(j=0,I=k),R=e.isMissing(k)&&F.length<u}while(e.notMissing(k)&&F.length<u&&T?.length>0);const O=v(F,y);return{block:t,successful:!0,output:{data:O,raw:w,statusCode:A,next:R?void 0:I,position:R?void 0:j}}},inputSchema:f,outputSchema:_}}},O=(e,t)=>async({block:r,params:o})=>{try{e.inputSchema&&e.inputSchema.parse(o)}catch{return{block:r,successful:!1,errors:[{message:`Input parameters for ${t} are invalid`}]}}const n=await e.fn({block:r,params:o});try{e.outputSchema&&e.outputSchema.parse(n.output)}catch{return{block:r,successful:!1,errors:[{message:`Output data of ${t} has unexpected format`}]}}return n},P={build({functionName:e,version:t="1",validateSchemas:r=!1,stepFunctionsList:o=R}){const n=o?.[e]?.[`v${t}`];if(!n)throw new Error(`Unknown step function: ${e} v${t}`);return r?{...n,fn:O(n,e)}:n}},D={hris:{title:"HRIS",key:"hris",description:"Human Resource Information System"},crm:{title:"CRM",key:"crm",description:"Customer Relationship Management"},ats:{title:"ATS",key:"ats",description:"Applicant Tracking System"},lms:{title:"LMS",key:"lms",description:"Learning Management System"},marketing:{title:"Marketing",key:"marketing",description:"Marketing"},filestorage:{title:"File Storage",key:"filestorage",description:"File Storage"}};var B;exports.LogLevel=void 0,(B=exports.LogLevel||(exports.LogLevel={}))[B.Trace=0]="Trace",B[B.Debug=1]="Debug",B[B.Info=2]="Info",B[B.Warning=3]="Warning",B[B.Error=4]="Error";const K=t.z.object({r:t.z.record(t.z.string(),t.z.object({n:t.z.number().optional().nullable(),c:t.z.string().optional().nullable(),p:t.z.number().optional().nullable()})),v:t.z.number(),t:t.z.number()}),U=t.z.object({remote:t.z.record(t.z.string(),t.z.object({pageNumber:t.z.number().optional(),providerPageCursor:t.z.string().optional(),position:t.z.number().optional()})),version:t.z.number(),timestamp:t.z.number()}),q=e=>{const{remote:t,version:r,timestamp:o}=e;return{r:Object.fromEntries(Object.entries(t).map((([e,{pageNumber:t,providerPageCursor:r,position:o}])=>[e,{n:t,c:r,p:o}]))),v:r,t:o}},$=t=>{try{if(e.isString(t)){const r=e.decodeFromBase64(t),o=JSON.parse(r),n=K.parse(o);return L(n)}return U.parse(t),t}catch{return null}},L=e=>{const{r:t,v:r,t:o}=e;return{remote:Object.fromEntries(Object.entries(t).map((([e,{n:t,c:r,p:o}])=>[e,{pageNumber:t,providerPageCursor:r,position:o}]))),version:r,timestamp:o}};class H extends Error{constructor({category:e,name:t,type:r,context:o,message:n}){super(n),this.name=t??"CoreError",this.type=r,this.category=e,this.context=o,Error.captureStackTrace&&Error.captureStackTrace(this,H)}toString(){const e=this.message?`: ${this.message}`:"";return`${this.category}-${this.name} [${this.type}]${e}`}}const G=e.encodeToBase64("so1!"),Q=":",V=",",W=new RegExp(`(?<!\\\\)${Q}`,"g"),Y=new RegExp(`(?<!\\\\)${V}`,"g");class J extends H{constructor(e,t,r){super({category:"CompositeId",name:t??"BaseCompositeIdError",type:e,message:r})}}class X extends J{constructor(e){super("COMPOSITE_ID_MISSING_HEADER_ERROR","CompositeIdMissingHeaderError",e??"Invalid compositeId, missing header")}}class Z extends J{constructor(e){super("COMPOSITE_ID_MISSING_BODY_ERROR","CompositeIdMissingBodyError",e??"Invalid compositeId, missing body")}}class ee extends J{constructor(e){super("COMPOSITE_ID_UNKNOWN_IDENTIFIER_ERROR","CompositeIdUnknownIdentifierError",e??"Invalid compositeId, unknown identifier")}}class te extends J{constructor(e){super("COMPOSITE_ID_UNSUPPORTED_VERSION_ERROR","CompositeIdUnsupportedVersionError",e??"Invalid compositeId, unsupported version")}}const re=(t,r={})=>{if((t=>!e.isMissing(t)&&"value"in t&&void 0!==t.value)(t))return oe({identifier:t,compositeIdAliases:r,isSoleIdentifier:!0});if((t=>!e.isMissing(t)&&"identifiers"in t&&void 0!==t.identifiers)(t))return t.identifiers.map((e=>oe({identifier:e,compositeIdAliases:r,isSoleIdentifier:!1}))).join(V);throw new ee},oe=({identifier:e,compositeIdAliases:t,isSoleIdentifier:r})=>[r?"id":t[e.key]||e.key,ue(e.value)].filter(Boolean).join(Q),ne=(e,t)=>Object.keys(t).find((r=>t[r]===e))||e,se=(e,t)=>{if(1===t.version)return ae(e);throw new te(`Cannot decode ID, unsupported version number: ${t.version}`)},ie=t=>`${G}${e.encodeToBase64(t)}`,ae=t=>{if(!t.startsWith(G))throw new X(`Trying to decode an ID without the header: ${t}`);const r=t.split(G)[1];if(!r)throw new Z(`Trying to decode an ID without a body: ${t}`);return e.decodeFromBase64(r)},ue=e=>[V,Q].reduce(((e,t)=>e.replace(t,"\\"+t)),e),ce=e=>[V,Q].reduce(((e,t)=>{const r="\\"+t;return e.replace(new RegExp("\\\\"+r,"g"),t)}),e);exports.AUTHENTICATION_SCHEMA=S,exports.COMPOSITE_ID_LATEST_VERSION=1,exports.CoreError=H,exports.StepFunctionsFactory=P,exports.areCursorsEqual=(t,r)=>{const o="string"==typeof t?$(t):t,n="string"==typeof r?$(r):r;if(null===o||null===n)return o===n;const{timestamp:s,...i}=o,{timestamp:a,...u}=n;return e.getContentHash(i)===e.getContentHash(u)},exports.decodeCompositeId=(e,t={version:1})=>{const r=se(e,t),o={};return r?(r.split(Y).forEach((e=>{const[r,n]=e.split(W),s=ne(r,t.aliases??{});o[s]=ce(n)})),o):o},exports.encodeCompositeId=(e,t={version:1})=>{if(1===t.version)return ie(re(e,t.aliases));throw new te(`Cannot generate ID, unsupported version number: ${t.version}`)},exports.expandCursor=$,exports.getCategoryDetails=e=>D[e.toLowerCase()]??null,exports.isCoreError=e=>e instanceof H,exports.isCursorEmpty=({cursor:t,ignoreStepIndex:r})=>!!e.isMissing(t)||Object.keys(t?.remote??{}).reduce(((o,n)=>{const s=t?.remote?.[n];return(e.isMissing(r)||n!==r.toString())&&(o=o&&e.isMissing(s.pageNumber)&&e.isMissing(s.position)&&e.isMissing(s.providerPageCursor)),o}),!0),exports.isValidCategory=e=>!!D[e.toLowerCase()],exports.minifyCursor=t=>e.encodeToBase64(JSON.stringify(q(t))),exports.updateCursor=({cursor:t,stepIndex:r,pageNumber:o,providerPageCursor:n,position:s})=>{const i={pageNumber:o??void 0,providerPageCursor:n??void 0,position:s??void 0},a=e.isMissing(o)&&e.isMissing(n)&&e.isMissing(s);return e.isMissing(t)?{remote:a?{}:{[r]:i},version:2,timestamp:Date.now()}:a?(delete t.remote[r],t):{...t,remote:{...t.remote,[r]:i}}};
@@ -0,0 +1,8 @@
1
+ export declare const COMPOSITE_ID_HEADER_V1 = "so1!";
2
+ export declare const ENCODED_COMPOSITE_ID_HEADER_V1: string;
3
+ export declare const COMPOSITE_ID_FIELD_SEPARATOR = ":";
4
+ export declare const COMPOSITE_ID_COMPOSED_SEPARATOR = ",";
5
+ export declare const COMPOSITE_ID_FIELD_SEPARATOR_REGEX: RegExp;
6
+ export declare const COMPOSITE_ID_COMPOSED_SEPARATOR_REGEX: RegExp;
7
+ export declare const COMPOSITE_ID_LATEST_VERSION = 1;
8
+ export declare const IDENTIFIER_REGEX: RegExp;
@@ -0,0 +1,18 @@
1
+ import { CoreError } from '../errors/coreError';
2
+ import { CompositeIdError } from './types';
3
+ declare class BaseCompositeIdError extends CoreError {
4
+ constructor(type: CompositeIdError, name: string, message?: string);
5
+ }
6
+ export declare class CompositeIdMissingHeaderError extends BaseCompositeIdError {
7
+ constructor(message?: string);
8
+ }
9
+ export declare class CompositeIdMissingBodyError extends BaseCompositeIdError {
10
+ constructor(message?: string);
11
+ }
12
+ export declare class CompositeIdUnknownIdentifierError extends BaseCompositeIdError {
13
+ constructor(message?: string);
14
+ }
15
+ export declare class CompositeIdUnsupportedVersionError extends BaseCompositeIdError {
16
+ constructor(message?: string);
17
+ }
18
+ export {};
@@ -0,0 +1,3 @@
1
+ import { CompositeIdentifier, CompositeIdentifierConfig } from './types';
2
+ export declare const encodeCompositeId: (identifier: CompositeIdentifier, compositeIdConfig?: CompositeIdentifierConfig) => string;
3
+ export declare const decodeCompositeId: (compositeId: string, compositeIdConfig?: CompositeIdentifierConfig) => Record<string, string>;
@@ -0,0 +1,3 @@
1
+ import { CompositeIdentifier, MultipleIdentifier, SingleIdentifier } from './types';
2
+ export declare const isSingleIdentifier: (identifier?: CompositeIdentifier) => identifier is SingleIdentifier;
3
+ export declare const isMultipleIdentifier: (identifier?: CompositeIdentifier) => identifier is MultipleIdentifier;
@@ -0,0 +1,28 @@
1
+ export type SingleIdentifier = {
2
+ value: string;
3
+ key: string;
4
+ };
5
+ export type MultipleIdentifier = {
6
+ identifiers: Array<SingleIdentifier>;
7
+ };
8
+ export type CompositeIdentifier = MultipleIdentifier | SingleIdentifier;
9
+ export type CompositeIdentifierConfig = {
10
+ version: number;
11
+ aliases?: Record<string, string>;
12
+ };
13
+ export type CompositeIdError = 'COMPOSITE_ID_MISSING_HEADER_ERROR' | 'COMPOSITE_ID_MISSING_BODY_ERROR' | 'COMPOSITE_ID_UNKNOWN_IDENTIFIER_ERROR' | 'COMPOSITE_ID_UNSUPPORTED_VERSION_ERROR';
14
+ type ComponentConfig = {
15
+ name: string;
16
+ expression: string;
17
+ alias?: string;
18
+ };
19
+ type ComponentFieldConfig = {
20
+ components: ComponentConfig[];
21
+ remote: string;
22
+ };
23
+ export type CompositeIdentifierConnectorConfig = {
24
+ enabled: boolean;
25
+ version: number;
26
+ fields?: ComponentFieldConfig[];
27
+ };
28
+ export {};
@@ -1,5 +1,6 @@
1
1
  import { HttpMethod } from '@stackone/transport';
2
2
  import { Category } from '../categories/types';
3
+ import { CompositeIdentifierConnectorConfig } from '../compositeIds/types';
3
4
  import { Schema } from '../schema/types';
4
5
  import { Step } from '../steps/types';
5
6
  export type Connector = {
@@ -43,6 +44,7 @@ export type Operation = {
43
44
  enabled: boolean;
44
45
  pageSize: number;
45
46
  };
47
+ compositeIdentifiers: CompositeIdentifierConnectorConfig;
46
48
  };
47
49
  export type OperationResponse = {
48
50
  statusCode: number;
@@ -0,0 +1,14 @@
1
+ import { BlockContext } from '../blocks/types';
2
+ export declare class CoreError extends Error {
3
+ readonly type: string;
4
+ readonly category: string;
5
+ readonly context?: BlockContext;
6
+ constructor({ category, name, type, context, message, }: {
7
+ category: string;
8
+ name: string;
9
+ type: string;
10
+ context?: BlockContext;
11
+ message?: string;
12
+ });
13
+ toString(): string;
14
+ }
@@ -0,0 +1,2 @@
1
+ import { CoreError } from './coreError';
2
+ export declare const isCoreError: (error: unknown) => error is CoreError;
@@ -12,3 +12,8 @@ export { ILogger, LogError, LogLevel, Log } from './logger/types';
12
12
  export type { Account } from './accounts/types';
13
13
  export type { Cursor } from './cursor/types';
14
14
  export { expandCursor, minifyCursor, areCursorsEqual, isCursorEmpty, updateCursor } from './cursor';
15
+ export { CoreError } from './errors/coreError';
16
+ export { isCoreError } from './errors/typeguards';
17
+ export { CompositeIdentifier, CompositeIdentifierConfig } from './compositeIds/types';
18
+ export { encodeCompositeId, decodeCompositeId } from './compositeIds';
19
+ export { COMPOSITE_ID_LATEST_VERSION } from './compositeIds/constants';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stackone/core",
3
- "version": "1.42.0",
3
+ "version": "1.44.0",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.es.mjs",