@stackone/core 1.25.1 → 1.26.1

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,isDate as t,isString as r,isBoolean as n,isNumber as s,isObject as o,isMissing as i}from"@stackone/utils";import{z as a}from"zod";import{evaluate as u,safeEvaluateRecord as c}from"@stackone/expressions";import{RequestParameterLocations as l,HttpMethods as d,RequestClientFactory as p,parseRequestParameters as y,createAuthorizationHeaders as f}from"@stackone/transport";import*as m from"date-fns";const g=a.object({stepsDataToGroup:a.array(a.string()),isSingleRecord:a.boolean().optional()}),b=a.object({data:a.unknown()}),h=(e,t,r)=>Object.entries(e).reduce(((e,[n,s])=>{const o=s?.output?.data;return Array.isArray(o)&&o.length===t?e[n]={output:{data:o[r]}}:e[n]=s,e}),{}),v=(e,t,r)=>{if(!e||!r)return{record:e};const n={unified:{...e},..."object"==typeof r?r:{}},s={},o=[],i={...e};for(const r of t){const{error:t,value:a}=k(n,e.id,r);t?o.push(t):r.isUnified?i[r.targetFieldKey]=a:s[r.targetFieldKey]=a}return{record:{...i,unified_custom_fields:Object.keys(s).length>0?s:void 0},errors:o.length>0?o:void 0}},k=(e,t,r)=>{const{expression:n,targetFieldKey:s}=r;if(!n)return{error:{message:"Expression is empty",id:t,targetField:s}};let o;try{o=u(n,e)}catch(e){return{error:{message:"Invalid expression",id:t,targetField:s}}}return void 0===o?{error:{message:"Expression returned no value",id:t,targetField:s}}:{value:o}},S=a.object({fields:a.object({expression:a.string(),targetFieldKey:a.string(),type:a.string(),isUnified:a.boolean().optional()}).array(),dataSource:a.string()}),_=a.object({data:a.unknown()}),F=(e,t)=>{if(!t)return;const r={},n=[],s={};for(const o of e){const{error:e,value:i}=M(t,t?.id,o);e?n.push(e):o.isUnified?s[o.targetFieldKey]=i:r[o.targetFieldKey]=i}return{record:{...s,unified_custom_fields:Object.keys(r).length>0?r:void 0},errors:n.length>0?n:void 0}},M=(e,t,r)=>{const{expression:n,targetFieldKey:s}=r;if(!n)return{error:{message:"Expression is empty",id:t,targetField:s}};let o;try{o=u(n,e)}catch(e){return{error:{message:"Invalid expression",id:t,targetField:s}}}return void 0===o?{error:{message:"Expression returned no value",id:t,targetField:s}}:{value:o}},j=a.object({type:a.literal("basic"),username:a.string(),password:a.string(),encoding:a.string().optional()}),A=a.object({type:a.literal("bearer"),token:a.string()}),w=a.discriminatedUnion("type",[j,A]),x=a.object({baseUrl:a.string(),url:a.string(),method:a.enum(d),response:a.object({collection:a.boolean().optional(),indexField:a.string().optional(),dataKey:a.string().optional()}).optional(),args:a.object({name:a.string(),value:a.unknown(),in:a.enum(l),condition:a.string().optional()}).array().optional()}),T=a.object({data:a.unknown(),raw:a.unknown().optional()}),E=(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},O=a.object({fields:a.object({targetFieldKey:a.string(),type:a.string(),isUnified:a.boolean().optional()}).array().optional(),dataSource:a.string()}),U=a.object({data:a.unknown()}),K="yyyy-MM-dd",C=["yyyy-MM-dd","yyyy/MM/dd","dd/MM/yyyy","dd-MM-yyyy","yyyy-dd-MM","yyyy/dd/MM","MM/dd/yyyy","MM-dd-yyyy"],R=({value:e})=>{const t=m.parseISO(e);if(m.isValid(t))return t;const r=new Date;for(const t of C){const n=m.parse(e,t,r);if(m.isValid(n))return n.setUTCHours(0,0,0,0),n}return null},D=({value:e,format:n=K})=>{const s=(({value:e,format:n=K})=>{if(t(e))return e;if(!r(e))return null;try{const t=m.parse(e,n,new Date);return m.isValid(t)?t:R({value:e})}catch(e){return null}})({value:e,format:n});return s?s.toISOString():null};var I;!function(e){e.String="string",e.Number="number",e.Boolean="boolean",e.DateTimeString="datetime_string"}(I||(I={}));const P=({value:e,type:a,format:u})=>{if(i(e))return null;switch(a){case I.String:return(({value:e})=>r(e)?e:t(e)?e.toISOString():o(e)?JSON.stringify(e):String(e))({value:e});case I.Number:return(({value:e})=>{if(s(e))return e;if(t(e))return null;const r=Number(e);return isNaN(r)?null:r})({value:e});case I.Boolean:return(({value:e})=>n(e)?e:"false"!==e&&"0"!==e&&0!==e&&Boolean(e))({value:e});case I.DateTimeString:return D({value:e,format:u});default:return e}},L=e=>Object.values(I).includes(e),N=(t,r)=>{const n={...t};return r.forEach((r=>{const{targetFieldKey:s,type:o}=r;L(o)&&(r.isUnified&&e(n[s])?n[s]=P({value:t[s],type:o}):n.unified_custom_fields&&e(n.unified_custom_fields?.[s])&&(n.unified_custom_fields[s]=P({value:t.unified_custom_fields?.[s],type:o})))})),{...n}},$=(t,r)=>{const n={...t};return r.forEach((r=>{const{targetFieldKey:s,type:o}=r;L(o)&&(r.isUnified&&e(n[s])?n[s]=P({value:t[s],type:o}):n.unified_custom_fields&&e(n.unified_custom_fields?.[s])&&(n.unified_custom_fields[s]=P({value:t.unified_custom_fields?.[s],type:o})))})),{...n}};var q;!function(e){e.TYPECAST="typecast",e.MAP_FIELDS="map_fields",e.GROUP_DATA="group_data",e.REQUEST="request"}(q||(q={}));const G={[q.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:r,dataSource:n}=O.parse(t),s=u(n,e);if(!r||"disabled"===e?.debug?.custom_mappings)return{block:e,successful:!0};let o;return o=Array.isArray(s)?s.map((e=>$(e,r))):$(s,r),{block:{...e},successful:!0,output:{data:o}}},inputSchema:O,outputSchema:U}},[q.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 s;if(Array.isArray(e.result)){const o=e.result.length;s=e.result.map(((e,s)=>{const i=h(n,o,s),a=v(e,t,i);return r.push(...a.errors||[]),a.record}))}else{const o=v(e.result,t,n);s=o.record,r.push(...o.errors||[])}return{block:{...e,result:s},successful:!0,errors:Object.keys(r).length>0?r:void 0}}},v2:{fn:async({block:e,params:t})=>{const r=[],{fields:n,dataSource:s}=S.parse(t),o=u(s,e);if(!n||!s||"disabled"===e?.debug?.custom_mappings||!o)return{block:e,successful:!0};let i;if(Array.isArray(o))i=o.map((e=>{const t=F(n,e);return r.push(...t?.errors||[]),t?.record}));else{const e=F(n,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:S,outputSchema:_}},[q.REQUEST]:{v1:{fn:async({block:e,params:t})=>{const r=p.build();if(!e.httpClient)throw new Error("HTTP client is not configured");const{args:n}=t,s=n?n.filter((t=>!t.condition||!0===u(t.condition,e))).map((e=>({...e,condition:void 0}))):void 0,o=t?c({...t,args:s},e):{},{baseUrl:i,url:a,method:l,response:d,args:m}=x.parse(o),g=o?.authentication?.[e.context.authenticationType]?.[e.context.environment]?.authorization,b=w.parse(g),h=m?y(m):{query:{},body:{},headers:{}},v=f(b),k={...h?.headers??{},...v};let S;try{S=await r.performRequest({httpClient:e.httpClient,url:`${i}${a}`,queryParams:h?.query,method:l,headers:k,body:h?.body})}catch(t){return{block:e,successful:!1,errors:[t]}}const _=d?.dataKey?S.data[d?.dataKey]:S.data,F=E(_,d);return{block:e,successful:!0,output:{data:F,raw:S}}},inputSchema:x,outputSchema:T}},[q.GROUP_DATA]:{v1:{fn:async({block:t,params:r})=>{const{stepsDataToGroup:n,isSingleRecord:s}=g.parse(r),o=n.reduce(((r,n)=>{const o=t.steps?.[n]?.output?.data;return o?s?{...r,[n]:{...o}}:(Object.keys(o).forEach((t=>{const s=e(r[t])?r[t]:{};r[t]={...s,[n]:{...o[t]}}})),r):r}),{});return{block:{...t},successful:!0,output:{data:s?o:Object.values(o)}}},inputSchema:g,outputSchema:b}}},H=(e,t)=>async({block:r,params:n})=>{try{e.inputSchema&&e.inputSchema.parse(n)}catch(e){return{block:r,successful:!1,errors:[{message:`Input parameters for ${t} are invalid`}]}}const s=await e.fn({block:r,params:n});try{e.outputSchema&&e.outputSchema.parse(s.output)}catch(e){return{block:r,successful:!1,errors:[{message:`Output data of ${t} has unexpected format`}]}}return s},B={build({functionName:e,version:t="1",validateSchemas:r=!1,stepFunctionsList:n=G}){const s=n?.[e]?.[`v${t}`];if(!s)throw new Error(`Unknown step function: ${e} v${t}`);return r?{...s,fn:H(s,e)}:s}},V={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"}},z=e=>V[e.toLowerCase()]??null,Q=e=>!!V[e.toLowerCase()];export{w as AUTHENTICATION_SCHEMA,q as StepFunctionName,B as StepFunctionsFactory,z as getCategoryDetails,Q as isValidCategory};
1
+ import{notMissing as e,isBoolean as t,isNumber as r,isDate as n,isString as s,isObject as o,isMissing as i}from"@stackone/utils";import{z as a}from"zod";import{evaluate as u,safeEvaluateRecord as c}from"@stackone/expressions";import{RequestParameterLocations as l,HttpMethods as d,RequestClientFactory as p,parseRequestParameters as y,createAuthorizationHeaders as f}from"@stackone/transport";import*as m from"date-fns";const g=a.object({stepsDataToGroup:a.array(a.string()),isSingleRecord:a.boolean().optional()}),b=a.object({data:a.unknown()}),h=(e,t,r)=>Object.entries(e).reduce(((e,[n,s])=>{const o=s?.output?.data;return Array.isArray(o)&&o.length===t?e[n]={output:{data:o[r]}}:e[n]=s,e}),{}),v=(e,t,r)=>{if(!e||!r)return{record:e};const n={unified:{...e},..."object"==typeof r?r:{}},s={},o=[],i={...e};for(const r of t){const{error:t,value:a}=k(n,e.id,r);t?o.push(t):r.isUnified?i[r.targetFieldKey]=a:s[r.targetFieldKey]=a}return{record:{...i,unified_custom_fields:Object.keys(s).length>0?s:void 0},errors:o.length>0?o:void 0}},k=(e,t,r)=>{const{expression:n,targetFieldKey:s}=r;if(!n)return{error:{message:"Expression is empty",id:t,targetField:s}};let o;try{o=u(n,e)}catch(e){return{error:{message:"Invalid expression",id:t,targetField:s}}}return void 0===o?{error:{message:"Expression returned no value",id:t,targetField:s}}:{value:o}},S=a.object({fields:a.object({expression:a.string(),targetFieldKey:a.string(),type:a.string(),isUnified:a.boolean().optional()}).array(),dataSource:a.string()}),_=a.object({data:a.unknown()}),F=(e,t)=>{if(!t)return;const r={},n=[],s={};for(const o of e){const{error:e,value:i}=M(t,t?.id,o);e?n.push(e):o.isUnified?s[o.targetFieldKey]=i:r[o.targetFieldKey]=i}return{record:{...s,unified_custom_fields:Object.keys(r).length>0?r:void 0},errors:n.length>0?n:void 0}},M=(e,t,r)=>{const{expression:n,targetFieldKey:s}=r;if(!n)return{error:{message:"Expression is empty",id:t,targetField:s}};let o;try{o=u(n,e)}catch(e){return{error:{message:"Invalid expression",id:t,targetField:s}}}return void 0===o?{error:{message:"Expression returned no value",id:t,targetField:s}}:{value:o}},j=a.object({type:a.literal("basic"),username:a.string(),password:a.string(),encoding:a.string().optional()}),A=a.object({type:a.literal("bearer"),token:a.string()}),w=a.discriminatedUnion("type",[j,A]),x=a.object({baseUrl:a.string(),url:a.string(),method:a.enum(d),response:a.object({collection:a.boolean().optional(),indexField:a.string().optional(),dataKey:a.string().optional()}).optional(),args:a.object({name:a.string(),value:a.unknown(),in:a.enum(l),condition:a.string().optional()}).array().optional()}),T=a.object({data:a.unknown(),raw:a.unknown().optional()}),E=(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},O=a.object({fields:a.object({targetFieldKey:a.string(),type:a.string(),isUnified:a.boolean().optional()}).array().optional(),dataSource:a.string()}),U=a.object({data:a.unknown()}),K="yyyy-MM-dd",C=["yyyy-MM-dd","yyyy/MM/dd","dd/MM/yyyy","dd-MM-yyyy","yyyy-dd-MM","yyyy/dd/MM","MM/dd/yyyy","MM-dd-yyyy"],R=({value:e})=>{const t=m.parseISO(e);if(m.isValid(t))return t;const r=new Date;for(const t of C){const n=m.parse(e,t,r);if(m.isValid(n))return n.setUTCHours(0,0,0,0),n}return null},D=({value:e,format:t=K})=>{const r=(({value:e,format:t=K})=>{if(n(e))return e;if(!s(e))return null;try{const r=m.parse(e,t,new Date);return m.isValid(r)?r:R({value:e})}catch(e){return null}})({value:e,format:t});return r?r.toISOString():null};var I;!function(e){e.String="string",e.Number="number",e.Boolean="boolean",e.DateTimeString="datetime_string"}(I||(I={}));const P=({value:e,type:a,format:u})=>{if(i(e))return null;switch(a){case I.String:return(({value:e})=>s(e)?e:n(e)?e.toISOString():o(e)?JSON.stringify(e):String(e))({value:e});case I.Number:return(({value:e})=>{if(r(e))return e;if(n(e))return null;const t=Number(e);return isNaN(t)?null:t})({value:e});case I.Boolean:return(({value:e})=>t(e)?e:"false"!==e&&"0"!==e&&0!==e&&Boolean(e))({value:e});case I.DateTimeString:return D({value:e,format:u});default:return e}},L=e=>Object.values(I).includes(e),N=(t,r)=>{const n={...t};return r.forEach((r=>{const{targetFieldKey:s,type:o}=r;L(o)&&(r.isUnified&&e(n[s])?n[s]=P({value:t[s],type:o}):n.unified_custom_fields&&e(n.unified_custom_fields?.[s])&&(n.unified_custom_fields[s]=P({value:t.unified_custom_fields?.[s],type:o})))})),{...n}},$=(t,r)=>{const n={...t};return r.forEach((r=>{const{targetFieldKey:s,type:o}=r;L(o)&&(r.isUnified&&e(n[s])?n[s]=P({value:t[s],type:o}):n.unified_custom_fields&&e(n.unified_custom_fields?.[s])&&(n.unified_custom_fields[s]=P({value:t.unified_custom_fields?.[s],type:o})))})),{...n}};var q;!function(e){e.TYPECAST="typecast",e.MAP_FIELDS="map_fields",e.GROUP_DATA="group_data",e.REQUEST="request"}(q||(q={}));const G={[q.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:r,dataSource:n}=O.parse(t),s=u(n,e);if(!r||"disabled"===e?.debug?.custom_mappings)return{block:e,successful:!0};let o;return o=Array.isArray(s)?s.map((e=>$(e,r))):$(s,r),{block:{...e},successful:!0,output:{data:o}}},inputSchema:O,outputSchema:U}},[q.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 s;if(Array.isArray(e.result)){const o=e.result.length;s=e.result.map(((e,s)=>{const i=h(n,o,s),a=v(e,t,i);return r.push(...a.errors||[]),a.record}))}else{const o=v(e.result,t,n);s=o.record,r.push(...o.errors||[])}return{block:{...e,result:s},successful:!0,errors:Object.keys(r).length>0?r:void 0}}},v2:{fn:async({block:e,params:t})=>{const r=[],{fields:n,dataSource:s}=S.parse(t),o=u(s,e);if(!n||!s||"disabled"===e?.debug?.custom_mappings||!o)return{block:e,successful:!0};let i;if(Array.isArray(o))i=o.map((e=>{const t=F(n,e);return r.push(...t?.errors||[]),t?.record}));else{const e=F(n,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:S,outputSchema:_}},[q.REQUEST]:{v1:{fn:async({block:e,params:t})=>{const r=p.build();if(!e.httpClient)throw new Error("HTTP client is not configured");const{args:n}=t,s=n?n.filter((t=>!t.condition||!0===u(t.condition,e))).map((e=>({...e,condition:void 0}))):void 0,o=t?c({...t,args:s},e):{},{baseUrl:i,url:a,method:l,response:d,args:m}=x.parse(o),g=o?.authentication?.[e.context.authenticationType]?.[e.context.environment]?.authorization,b=w.parse(g),h=m?y(m):{query:{},body:{},headers:{}},v=f(b),k={...h?.headers??{},...v};let S;try{S=await r.performRequest({httpClient:e.httpClient,url:`${i}${a}`,queryParams:h?.query,method:l,headers:k,body:h?.body})}catch(t){return{block:e,successful:!1,errors:[t]}}const _=d?.dataKey?S.data[d?.dataKey]:S.data,F=E(_,d);return{block:e,successful:!0,output:{data:F,raw:S}}},inputSchema:x,outputSchema:T}},[q.GROUP_DATA]:{v1:{fn:async({block:t,params:r})=>{const{stepsDataToGroup:n,isSingleRecord:s}=g.parse(r),o=n.reduce(((r,n)=>{const o=t.steps?.[n]?.output?.data;return o?s?{...r,[n]:{...o}}:(Object.keys(o).forEach((t=>{const s=e(r[t])?r[t]:{};r[t]={...s,[n]:{...o[t]}}})),r):r}),{});return{block:{...t},successful:!0,output:{data:s?o:Object.values(o)}}},inputSchema:g,outputSchema:b}}},H=(e,t)=>async({block:r,params:n})=>{try{e.inputSchema&&e.inputSchema.parse(n)}catch(e){return{block:r,successful:!1,errors:[{message:`Input parameters for ${t} are invalid`}]}}const s=await e.fn({block:r,params:n});try{e.outputSchema&&e.outputSchema.parse(s.output)}catch(e){return{block:r,successful:!1,errors:[{message:`Output data of ${t} has unexpected format`}]}}return s},B={build({functionName:e,version:t="1",validateSchemas:r=!1,stepFunctionsList:n=G}){const s=n?.[e]?.[`v${t}`];if(!s)throw new Error(`Unknown step function: ${e} v${t}`);return r?{...s,fn:H(s,e)}:s}},V={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"}},z=e=>V[e.toLowerCase()]??null,Q=e=>!!V[e.toLowerCase()];export{w as AUTHENTICATION_SCHEMA,q as StepFunctionName,B as StepFunctionsFactory,z as getCategoryDetails,Q as isValidCategory};
@@ -0,0 +1,10 @@
1
+ export type Account = {
2
+ providerKey: string;
3
+ providerVersion: string;
4
+ authConfigKey: string;
5
+ environment: string;
6
+ organizationId: number;
7
+ secureId: string;
8
+ credentials?: Record<string, unknown>;
9
+ projectSecureId: string;
10
+ };
@@ -22,7 +22,8 @@ export type Block = {
22
22
  export type BlockContext = {
23
23
  projectSecureId: string;
24
24
  accountSecureId: string;
25
- connector: string;
25
+ connectorKey: string;
26
+ connectorVersion: string;
26
27
  category: Category;
27
28
  schema?: string;
28
29
  operationType: OperationType;
@@ -7,7 +7,7 @@ export type Connector = {
7
7
  version: string;
8
8
  key: string;
9
9
  description?: string;
10
- categories: Category[];
10
+ categories?: Category[];
11
11
  authentication?: Authentication;
12
12
  operations?: {
13
13
  [entrypointUrl: string]: Operation;
@@ -9,3 +9,4 @@ export { getCategoryDetails, isValidCategory } from './categories';
9
9
  export { Connector, Operation, OperationType, Authentication, Input, InputLocation, AuthenticationField, SupportConfig, AuthenticationConfig, } from './connector/types';
10
10
  export { AUTHENTICATION_SCHEMA } from './stepFunctions/request/schemas';
11
11
  export { ILogger } from './logger/types';
12
+ export type { Account } from './accounts/types';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stackone/core",
3
- "version": "1.25.1",
3
+ "version": "1.26.1",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.es.mjs",
@@ -35,6 +35,6 @@
35
35
  "@stackone/expressions": "*",
36
36
  "@stackone/transport": "*",
37
37
  "@stackone/utils": "*",
38
- "date-fns": "^3.4.0"
38
+ "date-fns": "4.1.0"
39
39
  }
40
40
  }