@stackone/core 1.27.0 → 1.28.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,
|
|
1
|
+
import{notMissing as e,isMissing as t,safeParseToDateTimeString as r,safeParseToBoolean as s,safeParseToNumber as n,safeParseToString as o}from"@stackone/utils";import{z as i}from"zod";import{evaluate as a,safeEvaluateRecord as u}from"@stackone/expressions";import{RequestParameterLocations as c,HttpMethods as l,RequestClientFactory as d,parseRequestParameters as p,createAuthorizationHeaders as f}from"@stackone/transport";const m=i.object({stepsDataToGroup:i.array(i.string()),isSingleRecord:i.boolean().optional()}),g=i.object({data:i.unknown()}),y=(e,t,r)=>Object.entries(e).reduce(((e,[s,n])=>{const o=n?.output?.data;return Array.isArray(o)&&o.length===t?e[s]={output:{data:o[r]}}:e[s]=n,e}),{}),b=(e,t,r)=>{if(!e||!r)return{record:e};const s={unified:{...e},..."object"==typeof r?r:{}},n={},o=[],i={...e};for(const r of t){const{error:t,value:a}=h(s,e.id,r);t?o.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:o.length>0?o:void 0}},h=(e,t,r)=>{const{expression:s,targetFieldKey:n}=r;if(!s)return{error:{message:"Expression is empty",id:t,targetField:n}};let o;try{o=a(s,e)}catch{return{error:{message:"Invalid expression",id:t,targetField:n}}}return void 0===o?{error:{message:"Expression returned no value",id:t,targetField:n}}:{value:o}},k=i.object({fields:i.object({expression:i.string(),targetFieldKey:i.string(),type:i.string(),isUnified:i.boolean().optional()}).array(),dataSource:i.string()}),v=i.object({data:i.unknown()}),S=(e,t)=>{if(!t)return;const r={},s=[],n={};for(const o of e){const{error:e,value:i}=_(t,t?.id,o);e?s.push(e):o.isUnified?n[o.targetFieldKey]=i:r[o.targetFieldKey]=i}return{record:{...n,unified_custom_fields:Object.keys(r).length>0?r:void 0},errors:s.length>0?s:void 0}},_=(e,t,r)=>{const{expression:s,targetFieldKey:n}=r;if(!s)return{error:{message:"Expression is empty",id:t,targetField:n}};let o;try{o=a(s,e)}catch{return{error:{message:"Invalid expression",id:t,targetField:n}}}return void 0===o?{error:{message:"Expression returned no value",id:t,targetField:n}}:{value:o}},F=i.object({type:i.literal("basic"),username:i.string(),password:i.string(),encoding:i.string().optional()}),j=i.object({type:i.literal("bearer"),token:i.string()}),A=i.discriminatedUnion("type",[F,j]),w=i.object({baseUrl:i.string(),url:i.string(),method:i.enum(l),response:i.object({collection:i.boolean().optional(),indexField:i.string().optional(),dataKey:i.string().optional()}).optional(),args:i.object({name:i.string(),value:i.unknown(),in:i.enum(c),condition:i.string().optional()}).array().optional()}),x=i.object({data:i.unknown(),raw:i.unknown().optional()}),E=(e,t)=>{if(t?.collection&&t?.indexField&&Array.isArray(e))return e.reduce(((e,r)=>{const s=t.indexField;return s&&r[s]&&(e[r[s]]=r),e}),{});if(!t?.collection&&t?.indexField){const r=t.indexField;return r&&e[r]?{[e[r]]:e}:e}return e},T=i.object({fields:i.object({targetFieldKey:i.string(),type:i.string(),isUnified:i.boolean().optional()}).array().optional(),dataSource:i.string()}),U=i.object({data:i.unknown()});var K;!function(e){e.String="string",e.Number="number",e.Boolean="boolean",e.DateTimeString="datetime_string"}(K||(K={}));const C=({value:e,type:i,format:a})=>{if(t(e))return null;switch(i){case K.String:return o({value:e});case K.Number:return n({value:e});case K.Boolean:return s({value:e});case K.DateTimeString:return r({value:e,format:a});default:return e}},O=e=>Object.values(K).includes(e),R=(t,r)=>{const s={...t};return r.forEach((r=>{const{targetFieldKey:n,type:o}=r;O(o)&&(r.isUnified&&e(s[n])?s[n]=C({value:t[n],type:o}):s.unified_custom_fields&&e(s.unified_custom_fields?.[n])&&(s.unified_custom_fields[n]=C({value:t.unified_custom_fields?.[n],type:o})))})),{...s}},D=(t,r)=>{const s={...t};return r.forEach((r=>{const{targetFieldKey:n,type:o}=r;O(o)&&(r.isUnified&&e(s[n])?s[n]=C({value:t[n],type:o}):s.unified_custom_fields&&e(s.unified_custom_fields?.[n])&&(s.unified_custom_fields[n]=C({value:t.unified_custom_fields?.[n],type:o})))})),{...s}};var M;!function(e){e.TYPECAST="typecast",e.MAP_FIELDS="map_fields",e.GROUP_DATA="group_data",e.REQUEST="request"}(M||(M={}));const P={[M.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=>R(e,t))):R(e.result,t),{block:{...e,result:r},successful:!0}}},v2:{fn:async({block:e,params:t})=>{const{fields:r,dataSource:s}=T.parse(t),n=a(s,e);if(!r||"disabled"===e?.debug?.custom_mappings)return{block:e,successful:!0};let o;return o=Array.isArray(n)?n.map((e=>D(e,r))):D(n,r),{block:{...e},successful:!0,output:{data:o}}},inputSchema:T,outputSchema:U}},[M.MAP_FIELDS]:{v1:{fn:async({block:e})=>{const t=e?.fieldConfigs,r=[],s=e.steps;if(!t||"disabled"===e?.debug?.custom_mappings||!s)return{block:e,successful:!0};let n;if(Array.isArray(e.result)){const o=e.result.length;n=e.result.map(((e,n)=>{const i=y(s,o,n),a=b(e,t,i);return r.push(...a.errors||[]),a.record}))}else{const o=b(e.result,t,s);n=o.record,r.push(...o.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 r=[],{fields:s,dataSource:n}=k.parse(t),o=a(n,e);if(!s||!n||"disabled"===e?.debug?.custom_mappings||!o)return{block:e,successful:!0};let i;if(Array.isArray(o))i=o.map((e=>{const t=S(s,e);return r.push(...t?.errors||[]),t?.record}));else{const e=S(s,o);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:k,outputSchema:v}},[M.REQUEST]:{v1:{fn:async({block:e,params:t})=>{const r=d.build();if(!e.httpClient)throw new Error("HTTP client is not configured");const{args:s}=t,n=s?s.filter((t=>!t.condition||!0===a(t.condition,e))).map((e=>({...e,condition:void 0}))):void 0,o=t?u({...t,args:n},e):{},{baseUrl:i,url:c,method:l,response:m,args:g}=w.parse(o),y=o?.authentication?.[e.context.authenticationType]?.[e.context.environment]?.authorization,b=A.parse(y),h=g?p(g):{query:{},body:{},headers:{}},k=f(b),v={...h?.headers??{},...k};let S;try{S=await r.performRequest({httpClient:e.httpClient,url:`${i}${c}`,queryParams:h?.query,method:l,headers:v,body:h?.body})}catch(t){return{block:e,successful:!1,errors:[t]}}const _=m?.dataKey?S.data[m?.dataKey]:S.data,F=E(_,m);return{block:e,successful:!0,output:{data:F,raw:S}}},inputSchema:w,outputSchema:x}},[M.GROUP_DATA]:{v1:{fn:async({block:t,params:r})=>{const{stepsDataToGroup:s,isSingleRecord:n}=m.parse(r),o=s.reduce(((r,s)=>{const o=t.steps?.[s]?.output?.data;return o?n?{...r,[s]:{...o}}:(Object.keys(o).forEach((t=>{const n=e(r[t])?r[t]:{};r[t]={...n,[s]:{...o[t]}}})),r):r}),{});return{block:{...t},successful:!0,output:{data:n?o:Object.values(o)}}},inputSchema:m,outputSchema:g}}},I=(e,t)=>async({block:r,params:s})=>{try{e.inputSchema&&e.inputSchema.parse(s)}catch{return{block:r,successful:!1,errors:[{message:`Input parameters for ${t} are invalid`}]}}const n=await e.fn({block:r,params:s});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},L={build({functionName:e,version:t="1",validateSchemas:r=!1,stepFunctionsList:s=P}){const n=s?.[e]?.[`v${t}`];if(!n)throw new Error(`Unknown step function: ${e} v${t}`);return r?{...n,fn:I(n,e)}:n}},$={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"}},q=e=>$[e.toLowerCase()]??null,G=e=>!!$[e.toLowerCase()];export{A as AUTHENTICATION_SCHEMA,M as StepFunctionName,L as StepFunctionsFactory,q as getCategoryDetails,G as isValidCategory};
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var e=require("@stackone/utils"),t=require("zod"),r=require("@stackone/expressions"),s=require("@stackone/transport");
|
|
1
|
+
"use strict";var e=require("@stackone/utils"),t=require("zod"),r=require("@stackone/expressions"),s=require("@stackone/transport");const n=t.z.object({stepsDataToGroup:t.z.array(t.z.string()),isSingleRecord:t.z.boolean().optional()}),o=t.z.object({data:t.z.unknown()}),a=(e,t,r)=>Object.entries(e).reduce(((e,[s,n])=>{const o=n?.output?.data;return Array.isArray(o)&&o.length===t?e[s]={output:{data:o[r]}}:e[s]=n,e}),{}),i=(e,t,r)=>{if(!e||!r)return{record:e};const s={unified:{...e},..."object"==typeof r?r:{}},n={},o=[],a={...e};for(const r of t){const{error:t,value:i}=u(s,e.id,r);t?o.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:o.length>0?o:void 0}},u=(e,t,s)=>{const{expression:n,targetFieldKey:o}=s;if(!n)return{error:{message:"Expression is empty",id:t,targetField:o}};let a;try{a=r.evaluate(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}},c=t.z.object({fields:t.z.object({expression:t.z.string(),targetFieldKey:t.z.string(),type:t.z.string(),isUnified:t.z.boolean().optional()}).array(),dataSource:t.z.string()}),l=t.z.object({data:t.z.unknown()}),d=(e,t)=>{if(!t)return;const r={},s=[],n={};for(const o of e){const{error:e,value:a}=p(t,t?.id,o);e?s.push(e):o.isUnified?n[o.targetFieldKey]=a:r[o.targetFieldKey]=a}return{record:{...n,unified_custom_fields:Object.keys(r).length>0?r:void 0},errors:s.length>0?s:void 0}},p=(e,t,s)=>{const{expression:n,targetFieldKey:o}=s;if(!n)return{error:{message:"Expression is empty",id:t,targetField:o}};let a;try{a=r.evaluate(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}},f=t.z.object({type:t.z.literal("basic"),username:t.z.string(),password:t.z.string(),encoding:t.z.string().optional()}),m=t.z.object({type:t.z.literal("bearer"),token:t.z.string()}),g=t.z.discriminatedUnion("type",[f,m]),y=t.z.object({baseUrl:t.z.string(),url:t.z.string(),method:t.z.enum(s.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(s.RequestParameterLocations),condition:t.z.string().optional()}).array().optional()}),b=t.z.object({data:t.z.unknown(),raw:t.z.unknown().optional()}),h=(e,t)=>{if(t?.collection&&t?.indexField&&Array.isArray(e))return e.reduce(((e,r)=>{const s=t.indexField;return s&&r[s]&&(e[r[s]]=r),e}),{});if(!t?.collection&&t?.indexField){const r=t.indexField;return r&&e[r]?{[e[r]]:e}:e}return e},v=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()}),z=t.z.object({data:t.z.unknown()});var k;!function(e){e.String="string",e.Number="number",e.Boolean="boolean",e.DateTimeString="datetime_string"}(k||(k={}));const S=({value:t,type:r,format:s})=>{if(e.isMissing(t))return null;switch(r){case k.String:return e.safeParseToString({value:t});case k.Number:return e.safeParseToNumber({value:t});case k.Boolean:return e.safeParseToBoolean({value:t});case k.DateTimeString:return e.safeParseToDateTimeString({value:t,format:s});default:return t}},F=e=>Object.values(k).includes(e),_=(t,r)=>{const s={...t};return r.forEach((r=>{const{targetFieldKey:n,type:o}=r;F(o)&&(r.isUnified&&e.notMissing(s[n])?s[n]=S({value:t[n],type:o}):s.unified_custom_fields&&e.notMissing(s.unified_custom_fields?.[n])&&(s.unified_custom_fields[n]=S({value:t.unified_custom_fields?.[n],type:o})))})),{...s}},x=(t,r)=>{const s={...t};return r.forEach((r=>{const{targetFieldKey:n,type:o}=r;F(o)&&(r.isUnified&&e.notMissing(s[n])?s[n]=S({value:t[n],type:o}):s.unified_custom_fields&&e.notMissing(s.unified_custom_fields?.[n])&&(s.unified_custom_fields[n]=S({value:t.unified_custom_fields?.[n],type:o})))})),{...s}};var A;exports.StepFunctionName=void 0,(A=exports.StepFunctionName||(exports.StepFunctionName={})).TYPECAST="typecast",A.MAP_FIELDS="map_fields",A.GROUP_DATA="group_data",A.REQUEST="request";const T={[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=>_(e,t))):_(e.result,t),{block:{...e,result:r},successful:!0}}},v2:{fn:async({block:e,params:t})=>{const{fields:s,dataSource:n}=v.parse(t),o=r.evaluate(n,e);if(!s||"disabled"===e?.debug?.custom_mappings)return{block:e,successful:!0};let a;return a=Array.isArray(o)?o.map((e=>x(e,s))):x(o,s),{block:{...e},successful:!0,output:{data:a}}},inputSchema:v,outputSchema:z}},[exports.StepFunctionName.MAP_FIELDS]:{v1:{fn:async({block:e})=>{const t=e?.fieldConfigs,r=[],s=e.steps;if(!t||"disabled"===e?.debug?.custom_mappings||!s)return{block:e,successful:!0};let n;if(Array.isArray(e.result)){const o=e.result.length;n=e.result.map(((e,n)=>{const u=a(s,o,n),c=i(e,t,u);return r.push(...c.errors||[]),c.record}))}else{const o=i(e.result,t,s);n=o.record,r.push(...o.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 s=[],{fields:n,dataSource:o}=c.parse(t),a=r.evaluate(o,e);if(!n||!o||"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 s.push(...t?.errors||[]),t?.record}));else{const e=d(n,a);i=e?.record,s.push(...e?.errors||[])}return{block:{...e},successful:!0,output:{data:i},errors:Object.keys(s).length>0?s:void 0}},inputSchema:c,outputSchema:l}},[exports.StepFunctionName.REQUEST]:{v1:{fn:async({block:e,params:t})=>{const n=s.RequestClientFactory.build();if(!e.httpClient)throw new Error("HTTP client is not configured");const{args:o}=t,a=o?o.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}=y.parse(i),f=i?.authentication?.[e.context.authenticationType]?.[e.context.environment]?.authorization,m=g.parse(f),b=p?s.parseRequestParameters(p):{query:{},body:{},headers:{}},v=s.createAuthorizationHeaders(m),z={...b?.headers??{},...v};let k;try{k=await n.performRequest({httpClient:e.httpClient,url:`${u}${c}`,queryParams:b?.query,method:l,headers:z,body:b?.body})}catch(t){return{block:e,successful:!1,errors:[t]}}const S=d?.dataKey?k.data[d?.dataKey]:k.data,F=h(S,d);return{block:e,successful:!0,output:{data:F,raw:k}}},inputSchema:y,outputSchema:b}},[exports.StepFunctionName.GROUP_DATA]:{v1:{fn:async({block:t,params:r})=>{const{stepsDataToGroup:s,isSingleRecord:o}=n.parse(r),a=s.reduce(((r,s)=>{const n=t.steps?.[s]?.output?.data;return n?o?{...r,[s]:{...n}}:(Object.keys(n).forEach((t=>{const o=e.notMissing(r[t])?r[t]:{};r[t]={...o,[s]:{...n[t]}}})),r):r}),{});return{block:{...t},successful:!0,output:{data:o?a:Object.values(a)}}},inputSchema:n,outputSchema:o}}},j=(e,t)=>async({block:r,params:s})=>{try{e.inputSchema&&e.inputSchema.parse(s)}catch{return{block:r,successful:!1,errors:[{message:`Input parameters for ${t} are invalid`}]}}const n=await e.fn({block:r,params:s});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},E={build({functionName:e,version:t="1",validateSchemas:r=!1,stepFunctionsList:s=T}){const n=s?.[e]?.[`v${t}`];if(!n)throw new Error(`Unknown step function: ${e} v${t}`);return r?{...n,fn:j(n,e)}:n}},w={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"}};exports.AUTHENTICATION_SCHEMA=g,exports.StepFunctionsFactory=E,exports.getCategoryDetails=e=>w[e.toLowerCase()]??null,exports.isValidCategory=e=>!!w[e.toLowerCase()];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stackone/core",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.28.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.es.mjs",
|
|
@@ -34,7 +34,6 @@
|
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"@stackone/expressions": "*",
|
|
36
36
|
"@stackone/transport": "*",
|
|
37
|
-
"@stackone/utils": "*"
|
|
38
|
-
"date-fns": "4.1.0"
|
|
37
|
+
"@stackone/utils": "*"
|
|
39
38
|
}
|
|
40
39
|
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
export declare const safeParseToString: ({ value, }: {
|
|
2
|
-
value: unknown;
|
|
3
|
-
}) => string | null;
|
|
4
|
-
export declare const safeParseToNumber: ({ value, }: {
|
|
5
|
-
value: unknown;
|
|
6
|
-
}) => number | null;
|
|
7
|
-
export declare const safeParseToBoolean: ({ value, }: {
|
|
8
|
-
value: unknown;
|
|
9
|
-
}) => boolean | null;
|
|
10
|
-
export declare const safeParseToDateTime: ({ value, format, }: {
|
|
11
|
-
value: unknown;
|
|
12
|
-
format?: string;
|
|
13
|
-
}) => Date | null;
|
|
14
|
-
export declare const safeParseToDateTimeString: ({ value, format, }: {
|
|
15
|
-
value: unknown;
|
|
16
|
-
format?: string;
|
|
17
|
-
}) => string | null;
|