@stackone/core 1.26.1 → 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()];
|
|
@@ -13,7 +13,7 @@ export type Connector = {
|
|
|
13
13
|
[entrypointUrl: string]: Operation;
|
|
14
14
|
};
|
|
15
15
|
};
|
|
16
|
-
export type OperationType = 'list' | 'get' | 'create' | 'update' | 'delete' | 'custom';
|
|
16
|
+
export type OperationType = 'list' | 'get' | 'create' | 'update' | 'delete' | 'custom' | 'unknown';
|
|
17
17
|
export type InputLocation = 'body' | 'query' | 'path' | 'headers';
|
|
18
18
|
export type Input = {
|
|
19
19
|
name: string;
|
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;
|