@stackone/core 1.1.0 → 1.3.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.
@@ -0,0 +1,4 @@
1
+ import { BlockFieldConfigs, BlockFunction } from './types';
2
+ export declare const getBlockPipeFunctionsFromConfigs: ({ fieldConfigs, }: {
3
+ fieldConfigs?: BlockFieldConfigs | undefined;
4
+ }) => BlockFunction[];
@@ -0,0 +1,7 @@
1
+ import { BlockFunctionType } from './functions/functionsDirectoryTypes';
2
+ import { BlockFunction } from './types';
3
+ export declare class BlockFunctionsFactory {
4
+ static build({ type }: {
5
+ type: BlockFunctionType;
6
+ }): BlockFunction;
7
+ }
@@ -0,0 +1,5 @@
1
+ import { Block, BlockFunction } from './types';
2
+ export declare const blockPipe: ({ blockFunctions, block, }: {
3
+ blockFunctions: BlockFunction[];
4
+ block: Block;
5
+ }) => Promise<Block>;
@@ -0,0 +1,10 @@
1
+ export declare enum BlockFunctionType {
2
+ MAP = "map"
3
+ }
4
+ export type BlockFunctionArgs = {
5
+ [BlockFunctionType.MAP]: {
6
+ expression: string;
7
+ targetFieldKey: string;
8
+ type: string;
9
+ };
10
+ };
@@ -0,0 +1,2 @@
1
+ import { BlockFunction } from '../../types';
2
+ export declare const mapBlockFunction: BlockFunction;
@@ -0,0 +1,26 @@
1
+ import { HttpResponse } from '@stackone/transport';
2
+ import { BlockFunctionType } from './functions/functionsDirectoryTypes';
3
+ export type Block = {
4
+ fieldConfigs?: BlockFieldConfigs;
5
+ providerResponse?: HttpResponse;
6
+ result?: BlockIndexedRecord[] | BlockIndexedRecord;
7
+ context: BlockContext;
8
+ };
9
+ export type BlockContext = {
10
+ projectSecureId: string;
11
+ accountSecureId: string;
12
+ connector: string;
13
+ service: string;
14
+ resource: string;
15
+ operationType: string;
16
+ };
17
+ export type BlockFieldConfigs = {
18
+ [K in BlockFunctionType]?: unknown;
19
+ };
20
+ export type BlockIndexedRecord = {
21
+ id: string;
22
+ [key: string]: unknown;
23
+ };
24
+ export type BlockFunction = ({ block, }: {
25
+ block: Readonly<Block>;
26
+ }) => Promise<Block>;
package/dist/index.d.ts CHANGED
@@ -1,3 +1,7 @@
1
1
  export { IConnector, HttpOperations, HttpParameter, HttpParameterLocation, HttpParameterType, } from './types';
2
2
  export { BaseConnector } from './baseConnector';
3
3
  export { REQUEST_BODY_PARAM } from './constants';
4
+ export { Block, BlockFunction, BlockIndexedRecord, BlockContext, BlockFieldConfigs, } from './blocks/types';
5
+ export { BlockFunctionType } from './blocks/functions/functionsDirectoryTypes';
6
+ export { blockPipe } from './blocks/blockPipe';
7
+ export { getBlockPipeFunctionsFromConfigs } from './blocks/blockFunctionsConfigs';
package/dist/index.es.mjs CHANGED
@@ -1 +1 @@
1
- import{HttpClient as t}from"@stackone/transport";const e=(t,s="")=>{let r=[];if("object"===t.type&&t.properties){const n=""===s||s.endsWith(".")?s:`${s}.`;for(const s in t.properties)r=r.concat(e(t.properties[s],`${n}${s}`))}else"array"===t.type&&t.items?r=r.concat(e(t.items,`${s}[].`)):r.push({name:s.endsWith(".")?s.slice(0,-1):s,type:t.type,description:t.description});return r};class s{constructor({version:s="1",key:r,name:n,services:o={},httpOperations:i={},auth:a,proxy:p,httpClient:c=new t}){this.listOperations=()=>Object.keys(this.httpOperations||{}),this.getOperation=t=>{const e=this.httpOperations?.[t];if(!e)throw new Error(`Operation ${t} not found`);return e},this.getOperationResponseFieldsMetadata=t=>{const s=this.getOperation(t).responses;if(!s)return null;const r=(t=>{const e=Object.entries(t).find((([t])=>t.startsWith("2")));return e?e[1]:null})(s);return r&&r.content["application/json"]?.schema?e(r.content["application/json"]?.schema):null},this.callOperation=async({operationId:t,params:e,credentials:s})=>{const r=this.httpOperations?.[t];if(!r)throw new Error(`Operation ${t} not found`);const n=(({params:t,httpOperation:e})=>{const{url:s,method:r}=e;let n=s;const o=[],i=[],a={};let p;Object.entries(t||{}).forEach((([t,s])=>{const r=e.parameters?.[t];if(r)switch(r.in){case"path":n=n.replace(`{${t}}`,s).replace(`:${t}`,s);break;case"query":o.push(`${t}=${s}`);break;case"header":a[t]=s;break;case"cookie":i.push(`${t}=${s}; `);break;case"body":p=s}}));const c=o.length>0?`?${o.join("&")}`:"";return i.length>0&&(a.cookie=i.join("")),{url:`${n}${c}`,method:r,headers:Object.keys(a).length>0?a:void 0,body:p||void 0}})({params:e,httpOperation:r}),{method:o,url:i,headers:a,body:p}=n,{apiKey:c}=s;return{connector:this,input:{operationId:t,params:e},response:await this.httpClient.request({method:o,url:i,headers:{...a,authorization:c},payload:p}),credentials:s}},this.version=s,this.key=r,this.name=n,this.services=o,this.httpOperations=i,this.auth=a,this.proxy=p,this.httpClient=c}}const r="request_body";export{s as BaseConnector,r as REQUEST_BODY_PARAM};
1
+ import{HttpClient as t}from"@stackone/transport";const e=(t,r="")=>{if("object"===t.type&&t.properties){const s=""===r||r.endsWith(".")?r:`${r}.`;return Object.entries(t.properties).flatMap((([t,r])=>e(r,`${s}${t}`)))}return"array"===t.type&&t.items?e(t.items,`${r}[].`):[{name:r.endsWith(".")?r.slice(0,-1):r,type:t.type,description:t.description}]};class r{constructor({version:r="1",key:s,name:n,services:o={},httpOperations:i={},auth:a,proxy:c,httpClient:p=new t}){this.listOperations=()=>Object.keys(this.httpOperations||{}),this.getOperation=t=>{const e=this.httpOperations?.[t];if(!e)throw new Error(`Operation ${t} not found`);return e},this.getOperationResponseFieldsMetadata=t=>{const r=this.getOperation(t).responses;if(!r)return null;const s=(t=>{const e=Object.entries(t).find((([t])=>t.startsWith("2")));return e?e[1]:null})(r);return s&&s.content["application/json"]?.schema?e(s.content["application/json"]?.schema):null},this.callOperation=async({operationId:t,params:e,credentials:r})=>{const s=this.httpOperations?.[t];if(!s)throw new Error(`Operation ${t} not found`);const n=(({params:t,httpOperation:e})=>{const{url:r,method:s}=e;let n=r;const o=[],i=[],a={};let c;Object.entries(t||{}).forEach((([t,r])=>{const s=e.parameters?.[t];if(s)switch(s.in){case"path":n=n.replace(`{${t}}`,r).replace(`:${t}`,r);break;case"query":o.push(`${t}=${r}`);break;case"header":a[t]=r;break;case"cookie":i.push(`${t}=${r}; `);break;case"body":c=r}}));const p=o.length>0?`?${o.join("&")}`:"";return i.length>0&&(a.cookie=i.join("")),{url:`${n}${p}`,method:s,headers:Object.keys(a).length>0?a:void 0,body:c||void 0}})({params:e,httpOperation:s}),{method:o,url:i,headers:a,body:c}=n,{apiKey:p}=r;return{connector:this,input:{operationId:t,params:e},response:await this.httpClient.request({method:o,url:i,headers:{...a,authorization:p},payload:c}),credentials:r}},this.version=r,this.key=s,this.name=n,this.services=o,this.httpOperations=i,this.auth=a,this.proxy=c,this.httpClient=p}}const s="request_body";var n;!function(t){t.MAP="map"}(n||(n={}));const o=async({blockFunctions:t,block:e})=>t.reduce((async(t,e)=>e({block:await t})),Promise.resolve(e)),i=async({block:t})=>{const e=t?.fieldConfigs?.[n.MAP];if(!e)return t;let r;return r=Array.isArray(t.result)?t.result.map((r=>{const s=(t.providerResponse?.data?.[t.context.resource]).find((t=>t.id===r.id));return a(r,e,s)})):a(t.result,e,t.providerResponse?.data),{...t,result:r}},a=(t,e,r)=>{if(!r)return t;const s={...t};return e.forEach((t=>{const{expression:e,targetFieldKey:n}=t;r[e]&&(s[n]=r[e])})),{...s}};class c{static build({type:t}){if(t===n.MAP)return i;throw new Error(`Unknown block function: ${t}`)}}const p=({fieldConfigs:t})=>Object.keys(t||{}).reduce(((t,e)=>{const r=c.build({type:e});return t.push(r),t}),[]);export{r as BaseConnector,n as BlockFunctionType,s as REQUEST_BODY_PARAM,o as blockPipe,p as getBlockPipeFunctionsFromConfigs};
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var t=require("@stackone/transport");const e=(t,s="")=>{let r=[];if("object"===t.type&&t.properties){const n=""===s||s.endsWith(".")?s:`${s}.`;for(const s in t.properties)r=r.concat(e(t.properties[s],`${n}${s}`))}else"array"===t.type&&t.items?r=r.concat(e(t.items,`${s}[].`)):r.push({name:s.endsWith(".")?s.slice(0,-1):s,type:t.type,description:t.description});return r};exports.BaseConnector=class{constructor({version:s="1",key:r,name:n,services:o={},httpOperations:i={},auth:a,proxy:p,httpClient:c=new t.HttpClient}){this.listOperations=()=>Object.keys(this.httpOperations||{}),this.getOperation=t=>{const e=this.httpOperations?.[t];if(!e)throw new Error(`Operation ${t} not found`);return e},this.getOperationResponseFieldsMetadata=t=>{const s=this.getOperation(t).responses;if(!s)return null;const r=(t=>{const e=Object.entries(t).find((([t])=>t.startsWith("2")));return e?e[1]:null})(s);return r&&r.content["application/json"]?.schema?e(r.content["application/json"]?.schema):null},this.callOperation=async({operationId:t,params:e,credentials:s})=>{const r=this.httpOperations?.[t];if(!r)throw new Error(`Operation ${t} not found`);const n=(({params:t,httpOperation:e})=>{const{url:s,method:r}=e;let n=s;const o=[],i=[],a={};let p;Object.entries(t||{}).forEach((([t,s])=>{const r=e.parameters?.[t];if(r)switch(r.in){case"path":n=n.replace(`{${t}}`,s).replace(`:${t}`,s);break;case"query":o.push(`${t}=${s}`);break;case"header":a[t]=s;break;case"cookie":i.push(`${t}=${s}; `);break;case"body":p=s}}));const c=o.length>0?`?${o.join("&")}`:"";return i.length>0&&(a.cookie=i.join("")),{url:`${n}${c}`,method:r,headers:Object.keys(a).length>0?a:void 0,body:p||void 0}})({params:e,httpOperation:r}),{method:o,url:i,headers:a,body:p}=n,{apiKey:c}=s;return{connector:this,input:{operationId:t,params:e},response:await this.httpClient.request({method:o,url:i,headers:{...a,authorization:c},payload:p}),credentials:s}},this.version=s,this.key=r,this.name=n,this.services=o,this.httpOperations=i,this.auth=a,this.proxy=p,this.httpClient=c}},exports.REQUEST_BODY_PARAM="request_body";
1
+ "use strict";var t=require("@stackone/transport");const e=(t,r="")=>{if("object"===t.type&&t.properties){const s=""===r||r.endsWith(".")?r:`${r}.`;return Object.entries(t.properties).flatMap((([t,r])=>e(r,`${s}${t}`)))}return"array"===t.type&&t.items?e(t.items,`${r}[].`):[{name:r.endsWith(".")?r.slice(0,-1):r,type:t.type,description:t.description}]};exports.BlockFunctionType=void 0,(exports.BlockFunctionType||(exports.BlockFunctionType={})).MAP="map";const r=async({block:t})=>{const e=t?.fieldConfigs?.[exports.BlockFunctionType.MAP];if(!e)return t;let r;return r=Array.isArray(t.result)?t.result.map((r=>{const o=(t.providerResponse?.data?.[t.context.resource]).find((t=>t.id===r.id));return s(r,e,o)})):s(t.result,e,t.providerResponse?.data),{...t,result:r}},s=(t,e,r)=>{if(!r)return t;const s={...t};return e.forEach((t=>{const{expression:e,targetFieldKey:o}=t;r[e]&&(s[o]=r[e])})),{...s}};class o{static build({type:t}){if(t===exports.BlockFunctionType.MAP)return r;throw new Error(`Unknown block function: ${t}`)}}exports.BaseConnector=class{constructor({version:r="1",key:s,name:o,services:n={},httpOperations:i={},auth:a,proxy:c,httpClient:p=new t.HttpClient}){this.listOperations=()=>Object.keys(this.httpOperations||{}),this.getOperation=t=>{const e=this.httpOperations?.[t];if(!e)throw new Error(`Operation ${t} not found`);return e},this.getOperationResponseFieldsMetadata=t=>{const r=this.getOperation(t).responses;if(!r)return null;const s=(t=>{const e=Object.entries(t).find((([t])=>t.startsWith("2")));return e?e[1]:null})(r);return s&&s.content["application/json"]?.schema?e(s.content["application/json"]?.schema):null},this.callOperation=async({operationId:t,params:e,credentials:r})=>{const s=this.httpOperations?.[t];if(!s)throw new Error(`Operation ${t} not found`);const o=(({params:t,httpOperation:e})=>{const{url:r,method:s}=e;let o=r;const n=[],i=[],a={};let c;Object.entries(t||{}).forEach((([t,r])=>{const s=e.parameters?.[t];if(s)switch(s.in){case"path":o=o.replace(`{${t}}`,r).replace(`:${t}`,r);break;case"query":n.push(`${t}=${r}`);break;case"header":a[t]=r;break;case"cookie":i.push(`${t}=${r}; `);break;case"body":c=r}}));const p=n.length>0?`?${n.join("&")}`:"";return i.length>0&&(a.cookie=i.join("")),{url:`${o}${p}`,method:s,headers:Object.keys(a).length>0?a:void 0,body:c||void 0}})({params:e,httpOperation:s}),{method:n,url:i,headers:a,body:c}=o,{apiKey:p}=r;return{connector:this,input:{operationId:t,params:e},response:await this.httpClient.request({method:n,url:i,headers:{...a,authorization:p},payload:c}),credentials:r}},this.version=r,this.key=s,this.name=o,this.services=n,this.httpOperations=i,this.auth=a,this.proxy=c,this.httpClient=p}},exports.REQUEST_BODY_PARAM="request_body",exports.blockPipe=async({blockFunctions:t,block:e})=>t.reduce((async(t,e)=>e({block:await t})),Promise.resolve(e)),exports.getBlockPipeFunctionsFromConfigs=({fieldConfigs:t})=>Object.keys(t||{}).reduce(((t,e)=>{const r=o.build({type:e});return t.push(r),t}),[]);
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@stackone/core",
3
- "version": "1.1.0",
3
+ "version": "1.3.0",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.es.js",
7
- "types": "dist/index.d.ts",
7
+ "types": "dist/types/index.d.ts",
8
8
  "files": [
9
9
  "dist",
10
10
  "package.json",