@fsai-flow/core 0.0.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/README.md +11 -0
- package/dist/README.md +11 -0
- package/dist/package.json +44 -0
- package/dist/src/index.d.ts +15 -0
- package/dist/src/index.js +29 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/lib/ActiveWebhooks.d.ts +59 -0
- package/dist/src/lib/ActiveWebhooks.js +184 -0
- package/dist/src/lib/ActiveWebhooks.js.map +1 -0
- package/dist/src/lib/ActiveWorkflows.d.ts +58 -0
- package/dist/src/lib/ActiveWorkflows.js +244 -0
- package/dist/src/lib/ActiveWorkflows.js.map +1 -0
- package/dist/src/lib/BinaryDataManager/FileSystem.d.ts +26 -0
- package/dist/src/lib/BinaryDataManager/FileSystem.js +179 -0
- package/dist/src/lib/BinaryDataManager/FileSystem.js.map +1 -0
- package/dist/src/lib/BinaryDataManager/index.d.ts +21 -0
- package/dist/src/lib/BinaryDataManager/index.js +146 -0
- package/dist/src/lib/BinaryDataManager/index.js.map +1 -0
- package/dist/src/lib/ChangeCase.d.ts +9 -0
- package/dist/src/lib/ChangeCase.js +43 -0
- package/dist/src/lib/ChangeCase.js.map +1 -0
- package/dist/src/lib/Constants.d.ts +14 -0
- package/dist/src/lib/Constants.js +19 -0
- package/dist/src/lib/Constants.js.map +1 -0
- package/dist/src/lib/Credentials.d.ts +27 -0
- package/dist/src/lib/Credentials.js +89 -0
- package/dist/src/lib/Credentials.js.map +1 -0
- package/dist/src/lib/FileSystem.d.ts +26 -0
- package/dist/src/lib/FileSystem.js +179 -0
- package/dist/src/lib/FileSystem.js.map +1 -0
- package/dist/src/lib/InputConnectionDataLegacy.d.ts +2 -0
- package/dist/src/lib/InputConnectionDataLegacy.js +79 -0
- package/dist/src/lib/InputConnectionDataLegacy.js.map +1 -0
- package/dist/src/lib/Interfaces.d.ts +148 -0
- package/dist/src/lib/Interfaces.js +3 -0
- package/dist/src/lib/Interfaces.js.map +1 -0
- package/dist/src/lib/LoadNodeParameterOptions.d.ts +39 -0
- package/dist/src/lib/LoadNodeParameterOptions.js +150 -0
- package/dist/src/lib/LoadNodeParameterOptions.js.map +1 -0
- package/dist/src/lib/NodeExecuteFunctions.d.ts +226 -0
- package/dist/src/lib/NodeExecuteFunctions.js +2483 -0
- package/dist/src/lib/NodeExecuteFunctions.js.map +1 -0
- package/dist/src/lib/NodesLoader/constants.d.ts +5 -0
- package/dist/src/lib/NodesLoader/constants.js +106 -0
- package/dist/src/lib/NodesLoader/constants.js.map +1 -0
- package/dist/src/lib/NodesLoader/custom-directory-loader.d.ts +9 -0
- package/dist/src/lib/NodesLoader/custom-directory-loader.js +36 -0
- package/dist/src/lib/NodesLoader/custom-directory-loader.js.map +1 -0
- package/dist/src/lib/NodesLoader/directory-loader.d.ts +66 -0
- package/dist/src/lib/NodesLoader/directory-loader.js +325 -0
- package/dist/src/lib/NodesLoader/directory-loader.js.map +1 -0
- package/dist/src/lib/NodesLoader/index.d.ts +5 -0
- package/dist/src/lib/NodesLoader/index.js +12 -0
- package/dist/src/lib/NodesLoader/index.js.map +1 -0
- package/dist/src/lib/NodesLoader/lazy-package-directory-loader.d.ts +7 -0
- package/dist/src/lib/NodesLoader/lazy-package-directory-loader.js +52 -0
- package/dist/src/lib/NodesLoader/lazy-package-directory-loader.js.map +1 -0
- package/dist/src/lib/NodesLoader/load-class-in-isolation.d.ts +1 -0
- package/dist/src/lib/NodesLoader/load-class-in-isolation.js +22 -0
- package/dist/src/lib/NodesLoader/load-class-in-isolation.js.map +1 -0
- package/dist/src/lib/NodesLoader/package-directory-loader.d.ts +17 -0
- package/dist/src/lib/NodesLoader/package-directory-loader.js +100 -0
- package/dist/src/lib/NodesLoader/package-directory-loader.js.map +1 -0
- package/dist/src/lib/NodesLoader/types.d.ts +14 -0
- package/dist/src/lib/NodesLoader/types.js +3 -0
- package/dist/src/lib/NodesLoader/types.js.map +1 -0
- package/dist/src/lib/UserSettings.d.ts +80 -0
- package/dist/src/lib/UserSettings.js +261 -0
- package/dist/src/lib/UserSettings.js.map +1 -0
- package/dist/src/lib/WorkflowExecute.d.ts +53 -0
- package/dist/src/lib/WorkflowExecute.js +835 -0
- package/dist/src/lib/WorkflowExecute.js.map +1 -0
- package/dist/src/lib/index.d.ts +21 -0
- package/dist/src/lib/index.js +146 -0
- package/dist/src/lib/index.js.map +1 -0
- package/dist/src/utils/crypto.d.ts +1 -0
- package/dist/src/utils/crypto.js +8 -0
- package/dist/src/utils/crypto.js.map +1 -0
- package/eslint.config.js +19 -0
- package/jest.config.ts +10 -0
- package/package.json +44 -0
- package/project.json +19 -0
- package/src/index.ts +27 -0
- package/src/lib/ActiveWebhooks.ts +245 -0
- package/src/lib/ActiveWorkflows.ts +304 -0
- package/src/lib/BinaryDataManager/FileSystem.ts +214 -0
- package/src/lib/BinaryDataManager/index.ts +187 -0
- package/src/lib/ChangeCase.ts +45 -0
- package/src/lib/Constants.ts +16 -0
- package/src/lib/Credentials.ts +108 -0
- package/src/lib/FileSystem.ts +214 -0
- package/src/lib/InputConnectionDataLegacy.ts +123 -0
- package/src/lib/Interfaces.ts +338 -0
- package/src/lib/LoadNodeParameterOptions.ts +235 -0
- package/src/lib/NodeExecuteFunctions.ts +3704 -0
- package/src/lib/NodesLoader/constants.ts +112 -0
- package/src/lib/NodesLoader/custom-directory-loader.ts +31 -0
- package/src/lib/NodesLoader/directory-loader.ts +458 -0
- package/src/lib/NodesLoader/index.ts +5 -0
- package/src/lib/NodesLoader/lazy-package-directory-loader.ts +55 -0
- package/src/lib/NodesLoader/load-class-in-isolation.ts +19 -0
- package/src/lib/NodesLoader/package-directory-loader.ts +107 -0
- package/src/lib/NodesLoader/types.ts +14 -0
- package/src/lib/UserSettings.ts +292 -0
- package/src/lib/WorkflowExecute.ts +1108 -0
- package/src/lib/index.ts +187 -0
- package/src/utils/crypto.ts +5 -0
- package/tests/Credentials.test.ts +88 -0
- package/tests/Helpers.ts +808 -0
- package/tests/WorkflowExecute.test.ts +1242 -0
- package/tsconfig.json +42 -0
- package/tsconfig.lib.json +10 -0
- package/tsconfig.spec.json +14 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare class ChangeCase {
|
|
2
|
+
private static transformInput;
|
|
3
|
+
static toCamelCase(str: string): string;
|
|
4
|
+
static toPascalCase(str: string): string;
|
|
5
|
+
static toSnakeCase(str: string): string;
|
|
6
|
+
static toCapitalCase(str: string): string;
|
|
7
|
+
static toParamCase(str: string): string;
|
|
8
|
+
static noCase(str: string): string;
|
|
9
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ChangeCase = void 0;
|
|
4
|
+
class ChangeCase {
|
|
5
|
+
static transformInput(input) {
|
|
6
|
+
return input
|
|
7
|
+
.split(/[^a-zA-Z0-9]+/) // Split by non-alphanumeric characters
|
|
8
|
+
.filter((word) => word.length > 0) // Remove empty segments
|
|
9
|
+
.map((word) => word[0].toUpperCase() + word.slice(1).toLowerCase()); // Capitalize first letter and lowercase the rest
|
|
10
|
+
}
|
|
11
|
+
static toCamelCase(str) {
|
|
12
|
+
const words = ChangeCase.transformInput(str);
|
|
13
|
+
return words[0].toLowerCase() + words.slice(1).join('');
|
|
14
|
+
}
|
|
15
|
+
static toPascalCase(str) {
|
|
16
|
+
const words = str
|
|
17
|
+
.replace(/([a-z0-9])([A-Z])/g, '$1 $2') // insert space before capital letters in camelCase
|
|
18
|
+
.split(/[^a-zA-Z0-9]+|[\s]+/) // split by non-alphanumerics and added spaces
|
|
19
|
+
.filter(word => word.length > 0)
|
|
20
|
+
.map(word => word[0].toUpperCase() + word.slice(1).toLowerCase());
|
|
21
|
+
return words.join('');
|
|
22
|
+
}
|
|
23
|
+
static toSnakeCase(str) {
|
|
24
|
+
return str
|
|
25
|
+
.replace(/([a-z])([A-Z])/g, '$1_$2')
|
|
26
|
+
.replace(/[\W_]+/g, '_')
|
|
27
|
+
.toLowerCase();
|
|
28
|
+
}
|
|
29
|
+
static toCapitalCase(str) {
|
|
30
|
+
return str.replace(/\b\w/g, (chr) => chr.toUpperCase());
|
|
31
|
+
}
|
|
32
|
+
static toParamCase(str) {
|
|
33
|
+
return str
|
|
34
|
+
.replace(/([a-z])([A-Z])/g, '$1-$2')
|
|
35
|
+
.replace(/[\W_]+/g, '-')
|
|
36
|
+
.toLowerCase();
|
|
37
|
+
}
|
|
38
|
+
static noCase(str) {
|
|
39
|
+
return str.replace(/[^\w\s]/g, '').toLowerCase();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.ChangeCase = ChangeCase;
|
|
43
|
+
//# sourceMappingURL=ChangeCase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChangeCase.js","sourceRoot":"","sources":["../../../src/lib/ChangeCase.ts"],"names":[],"mappings":";;;AAAA,MAAa,UAAU;IACb,MAAM,CAAC,cAAc,CAAC,KAAa;QACzC,OAAO,KAAK;aACT,KAAK,CAAC,eAAe,CAAC,CAAC,uCAAuC;aAC9D,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,wBAAwB;aAC1D,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,iDAAiD;IAC1H,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,GAAW;QAC5B,MAAM,KAAK,GAAG,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAC7C,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,GAAW;QAC7B,MAAM,KAAK,GAAG,GAAG;aAChB,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC,mDAAmD;aAC1F,KAAK,CAAC,qBAAqB,CAAC,CAAC,8CAA8C;aAC3E,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;aAC/B,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QAElE,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,GAAW;QAC5B,OAAO,GAAG;aACP,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC;aACnC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;aACvB,WAAW,EAAE,CAAC;IACnB,CAAC;IAED,MAAM,CAAC,aAAa,CAAC,GAAW;QAC9B,OAAO,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,GAAW;QAC5B,OAAO,GAAG;aACP,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC;aACnC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;aACvB,WAAW,EAAE,CAAC;IACnB,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,GAAW;QACvB,OAAO,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACnD,CAAC;CACF;AA5CD,gCA4CC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare const inProduction: boolean;
|
|
2
|
+
export declare const inDevelopment: boolean;
|
|
3
|
+
export declare const inTest: boolean;
|
|
4
|
+
export declare const BINARY_ENCODING = "base64";
|
|
5
|
+
export declare const CUSTOM_EXTENSION_ENV = "N8N_CUSTOM_EXTENSIONS";
|
|
6
|
+
export declare const ENCRYPTION_KEY_ENV_OVERWRITE = "FSAI_FLOW_ENCRYPTION_KEY";
|
|
7
|
+
export declare const EXTENSIONS_SUBDIRECTORY = "custom";
|
|
8
|
+
export declare const USER_FOLDER_ENV_OVERWRITE = "N8N_USER_FOLDER";
|
|
9
|
+
export declare const USER_SETTINGS_FILE_NAME = "config";
|
|
10
|
+
export declare const USER_SETTINGS_SUBFOLDER = ".n8n";
|
|
11
|
+
export declare const PLACEHOLDER_EMPTY_EXECUTION_ID = "__UNKOWN__";
|
|
12
|
+
export declare const PLACEHOLDER_EMPTY_WORKFLOW_ID = "__EMPTY__";
|
|
13
|
+
export declare const TUNNEL_SUBDOMAIN_ENV = "N8N_TUNNEL_SUBDOMAIN";
|
|
14
|
+
export declare const WAIT_TIME_UNLIMITED = "3000-01-01T00:00:00.000Z";
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WAIT_TIME_UNLIMITED = exports.TUNNEL_SUBDOMAIN_ENV = exports.PLACEHOLDER_EMPTY_WORKFLOW_ID = exports.PLACEHOLDER_EMPTY_EXECUTION_ID = exports.USER_SETTINGS_SUBFOLDER = exports.USER_SETTINGS_FILE_NAME = exports.USER_FOLDER_ENV_OVERWRITE = exports.EXTENSIONS_SUBDIRECTORY = exports.ENCRYPTION_KEY_ENV_OVERWRITE = exports.CUSTOM_EXTENSION_ENV = exports.BINARY_ENCODING = exports.inTest = exports.inDevelopment = exports.inProduction = void 0;
|
|
4
|
+
const { NODE_ENV } = process.env;
|
|
5
|
+
exports.inProduction = NODE_ENV === 'production';
|
|
6
|
+
exports.inDevelopment = !NODE_ENV || NODE_ENV === 'development';
|
|
7
|
+
exports.inTest = NODE_ENV === 'test';
|
|
8
|
+
exports.BINARY_ENCODING = 'base64';
|
|
9
|
+
exports.CUSTOM_EXTENSION_ENV = 'N8N_CUSTOM_EXTENSIONS';
|
|
10
|
+
exports.ENCRYPTION_KEY_ENV_OVERWRITE = 'FSAI_FLOW_ENCRYPTION_KEY';
|
|
11
|
+
exports.EXTENSIONS_SUBDIRECTORY = 'custom';
|
|
12
|
+
exports.USER_FOLDER_ENV_OVERWRITE = 'N8N_USER_FOLDER';
|
|
13
|
+
exports.USER_SETTINGS_FILE_NAME = 'config';
|
|
14
|
+
exports.USER_SETTINGS_SUBFOLDER = '.n8n';
|
|
15
|
+
exports.PLACEHOLDER_EMPTY_EXECUTION_ID = '__UNKOWN__';
|
|
16
|
+
exports.PLACEHOLDER_EMPTY_WORKFLOW_ID = '__EMPTY__';
|
|
17
|
+
exports.TUNNEL_SUBDOMAIN_ENV = 'N8N_TUNNEL_SUBDOMAIN';
|
|
18
|
+
exports.WAIT_TIME_UNLIMITED = '3000-01-01T00:00:00.000Z';
|
|
19
|
+
//# sourceMappingURL=Constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Constants.js","sourceRoot":"","sources":["../../../src/lib/Constants.ts"],"names":[],"mappings":";;;AAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;AACpB,QAAA,YAAY,GAAG,QAAQ,KAAK,YAAY,CAAC;AACzC,QAAA,aAAa,GAAG,CAAC,QAAQ,IAAI,QAAQ,KAAK,aAAa,CAAC;AACxD,QAAA,MAAM,GAAG,QAAQ,KAAK,MAAM,CAAC;AAE7B,QAAA,eAAe,GAAG,QAAQ,CAAC;AAC3B,QAAA,oBAAoB,GAAG,uBAAuB,CAAC;AAC/C,QAAA,4BAA4B,GAAG,0BAA0B,CAAC;AAC1D,QAAA,uBAAuB,GAAG,QAAQ,CAAC;AACnC,QAAA,yBAAyB,GAAG,iBAAiB,CAAC;AAC9C,QAAA,uBAAuB,GAAG,QAAQ,CAAC;AACnC,QAAA,uBAAuB,GAAG,MAAM,CAAC;AACjC,QAAA,8BAA8B,GAAG,YAAY,CAAC;AAC9C,QAAA,6BAA6B,GAAG,WAAW,CAAC;AAC5C,QAAA,oBAAoB,GAAG,sBAAsB,CAAC;AAC9C,QAAA,mBAAmB,GAAG,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { CredentialInformation, ICredentialDataDecryptedObject, ICredentials, ICredentialsEncrypted } from '@fsai-flow/workflow';
|
|
2
|
+
export declare class Credentials extends ICredentials {
|
|
3
|
+
/**
|
|
4
|
+
* Returns if the given nodeType has access to data
|
|
5
|
+
*/
|
|
6
|
+
hasNodeAccess(nodeType: string): boolean;
|
|
7
|
+
/**
|
|
8
|
+
* Sets new credential object
|
|
9
|
+
*/
|
|
10
|
+
setData(data: ICredentialDataDecryptedObject, encryptionKey: string): void;
|
|
11
|
+
/**
|
|
12
|
+
* Sets new credentials for given key
|
|
13
|
+
*/
|
|
14
|
+
setDataKey(key: string, data: CredentialInformation, encryptionKey: string): void;
|
|
15
|
+
/**
|
|
16
|
+
* Returns the decrypted credential object
|
|
17
|
+
*/
|
|
18
|
+
getData(encryptionKey: string, nodeType?: string): ICredentialDataDecryptedObject;
|
|
19
|
+
/**
|
|
20
|
+
* Returns the decrypted credentials for given key
|
|
21
|
+
*/
|
|
22
|
+
getDataKey(key: string, encryptionKey: string, nodeType?: string): CredentialInformation;
|
|
23
|
+
/**
|
|
24
|
+
* Returns the encrypted credentials to be saved
|
|
25
|
+
*/
|
|
26
|
+
getDataToSave(): ICredentialsEncrypted;
|
|
27
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Credentials = void 0;
|
|
4
|
+
const workflow_1 = require("@fsai-flow/workflow");
|
|
5
|
+
const crypto_js_1 = require("crypto-js");
|
|
6
|
+
class Credentials extends workflow_1.ICredentials {
|
|
7
|
+
/**
|
|
8
|
+
* Returns if the given nodeType has access to data
|
|
9
|
+
*/
|
|
10
|
+
hasNodeAccess(nodeType) {
|
|
11
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
12
|
+
for (const accessData of this.nodesAccess) {
|
|
13
|
+
if (accessData.nodeType === nodeType) {
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Sets new credential object
|
|
21
|
+
*/
|
|
22
|
+
setData(data, encryptionKey) {
|
|
23
|
+
this.data = crypto_js_1.AES.encrypt(JSON.stringify(data), encryptionKey).toString();
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Sets new credentials for given key
|
|
27
|
+
*/
|
|
28
|
+
setDataKey(key, data, encryptionKey) {
|
|
29
|
+
let fullData;
|
|
30
|
+
try {
|
|
31
|
+
fullData = this.getData(encryptionKey);
|
|
32
|
+
}
|
|
33
|
+
catch (e) {
|
|
34
|
+
fullData = {};
|
|
35
|
+
}
|
|
36
|
+
fullData[key] = data;
|
|
37
|
+
return this.setData(fullData, encryptionKey);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Returns the decrypted credential object
|
|
41
|
+
*/
|
|
42
|
+
getData(encryptionKey, nodeType) {
|
|
43
|
+
if (nodeType && !this.hasNodeAccess(nodeType)) {
|
|
44
|
+
throw new Error(`The node of type "${nodeType}" does not have access to credentials "${this.name}" of type "${this.type}".`);
|
|
45
|
+
}
|
|
46
|
+
if (this.data === undefined) {
|
|
47
|
+
throw new Error('No data is set so nothing can be returned.');
|
|
48
|
+
}
|
|
49
|
+
const decryptedData = crypto_js_1.AES.decrypt(this.data, encryptionKey);
|
|
50
|
+
try {
|
|
51
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
52
|
+
return JSON.parse(decryptedData.toString(crypto_js_1.enc.Utf8));
|
|
53
|
+
}
|
|
54
|
+
catch (e) {
|
|
55
|
+
throw new Error('Credentials could not be decrypted. The likely reason is that a different "encryptionKey" was used to encrypt the data.');
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Returns the decrypted credentials for given key
|
|
60
|
+
*/
|
|
61
|
+
getDataKey(key, encryptionKey, nodeType) {
|
|
62
|
+
const fullData = this.getData(encryptionKey, nodeType);
|
|
63
|
+
if (fullData === null) {
|
|
64
|
+
throw new Error(`No data was set.`);
|
|
65
|
+
}
|
|
66
|
+
// eslint-disable-next-line no-prototype-builtins
|
|
67
|
+
if (!fullData.hasOwnProperty(key)) {
|
|
68
|
+
throw new Error(`No data for key "${key}" exists.`);
|
|
69
|
+
}
|
|
70
|
+
return fullData[key];
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Returns the encrypted credentials to be saved
|
|
74
|
+
*/
|
|
75
|
+
getDataToSave() {
|
|
76
|
+
if (this.data === undefined) {
|
|
77
|
+
throw new Error(`No credentials were set to save.`);
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
id: this.id,
|
|
81
|
+
name: this.name,
|
|
82
|
+
type: this.type,
|
|
83
|
+
data: this.data,
|
|
84
|
+
nodesAccess: this.nodesAccess,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
exports.Credentials = Credentials;
|
|
89
|
+
//# sourceMappingURL=Credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Credentials.js","sourceRoot":"","sources":["../../../src/lib/Credentials.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { IBinaryDataConfig, IBinaryDataManager } from './Interfaces';
|
|
2
|
+
export declare class BinaryDataFileSystem implements IBinaryDataManager {
|
|
3
|
+
private storagePath;
|
|
4
|
+
private binaryDataTTL;
|
|
5
|
+
private persistedBinaryDataTTL;
|
|
6
|
+
constructor(config: IBinaryDataConfig);
|
|
7
|
+
init(startPurger?: boolean): Promise<void>;
|
|
8
|
+
storeBinaryData(binaryBuffer: Buffer, executionId: string): Promise<string>;
|
|
9
|
+
retrieveBinaryDataByIdentifier(identifier: string): Promise<Buffer>;
|
|
10
|
+
markDataForDeletionByExecutionId(executionId: string): Promise<void>;
|
|
11
|
+
deleteMarkedFiles(): Promise<void>;
|
|
12
|
+
deleteMarkedPersistedFiles(): Promise<void>;
|
|
13
|
+
private addBinaryIdToPersistMeta;
|
|
14
|
+
private deleteMarkedFilesByMeta;
|
|
15
|
+
duplicateBinaryDataByIdentifier(binaryDataId: string, prefix: string): Promise<string>;
|
|
16
|
+
deleteBinaryDataByExecutionId(executionId: string): Promise<void>;
|
|
17
|
+
deleteBinaryDataByIdentifier(identifier: string): Promise<void>;
|
|
18
|
+
persistBinaryDataForExecutionId(executionId: string): Promise<void>;
|
|
19
|
+
private generateFileName;
|
|
20
|
+
private getBinaryDataMetaPath;
|
|
21
|
+
private getBinaryDataPersistMetaPath;
|
|
22
|
+
private deleteMetaFileByPath;
|
|
23
|
+
private deleteFromLocalStorage;
|
|
24
|
+
private saveToLocalStorage;
|
|
25
|
+
private retrieveFromLocalStorage;
|
|
26
|
+
}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BinaryDataFileSystem = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const fs_1 = require("fs");
|
|
6
|
+
const path = tslib_1.__importStar(require("path"));
|
|
7
|
+
const uuid_1 = require("uuid");
|
|
8
|
+
const PREFIX_METAFILE = 'binarymeta';
|
|
9
|
+
const PREFIX_PERSISTED_METAFILE = 'persistedmeta';
|
|
10
|
+
class BinaryDataFileSystem {
|
|
11
|
+
constructor(config) {
|
|
12
|
+
this.storagePath = config.localStoragePath;
|
|
13
|
+
this.binaryDataTTL = config.binaryDataTTL;
|
|
14
|
+
this.persistedBinaryDataTTL = config.persistedBinaryDataTTL;
|
|
15
|
+
}
|
|
16
|
+
init() {
|
|
17
|
+
return tslib_1.__awaiter(this, arguments, void 0, function* (startPurger = false) {
|
|
18
|
+
if (startPurger) {
|
|
19
|
+
setInterval(() => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
20
|
+
yield this.deleteMarkedFiles();
|
|
21
|
+
}), this.binaryDataTTL * 30000);
|
|
22
|
+
setInterval(() => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
23
|
+
yield this.deleteMarkedPersistedFiles();
|
|
24
|
+
}), this.persistedBinaryDataTTL * 30000);
|
|
25
|
+
}
|
|
26
|
+
return fs_1.promises
|
|
27
|
+
.readdir(this.storagePath)
|
|
28
|
+
.catch(() => tslib_1.__awaiter(this, void 0, void 0, function* () { return fs_1.promises.mkdir(this.storagePath, { recursive: true }); }))
|
|
29
|
+
.then(() => tslib_1.__awaiter(this, void 0, void 0, function* () { return fs_1.promises.readdir(this.getBinaryDataMetaPath()); }))
|
|
30
|
+
.catch(() => tslib_1.__awaiter(this, void 0, void 0, function* () { return fs_1.promises.mkdir(this.getBinaryDataMetaPath(), { recursive: true }); }))
|
|
31
|
+
.then(() => tslib_1.__awaiter(this, void 0, void 0, function* () { return fs_1.promises.readdir(this.getBinaryDataPersistMetaPath()); }))
|
|
32
|
+
.catch(() => tslib_1.__awaiter(this, void 0, void 0, function* () { return fs_1.promises.mkdir(this.getBinaryDataPersistMetaPath(), { recursive: true }); }))
|
|
33
|
+
.then(() => tslib_1.__awaiter(this, void 0, void 0, function* () { return this.deleteMarkedFiles(); }))
|
|
34
|
+
.then(() => tslib_1.__awaiter(this, void 0, void 0, function* () { return this.deleteMarkedPersistedFiles(); }))
|
|
35
|
+
.then(() => { });
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
storeBinaryData(binaryBuffer, executionId) {
|
|
39
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
40
|
+
const binaryDataId = this.generateFileName(executionId);
|
|
41
|
+
return this.addBinaryIdToPersistMeta(executionId, binaryDataId).then(() => tslib_1.__awaiter(this, void 0, void 0, function* () { return this.saveToLocalStorage(binaryBuffer, binaryDataId).then(() => binaryDataId); }));
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
retrieveBinaryDataByIdentifier(identifier) {
|
|
45
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
46
|
+
return this.retrieveFromLocalStorage(identifier);
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
markDataForDeletionByExecutionId(executionId) {
|
|
50
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
51
|
+
const tt = new Date(new Date().getTime() + this.binaryDataTTL * 60000);
|
|
52
|
+
return fs_1.promises.writeFile(path.join(this.getBinaryDataMetaPath(), `${PREFIX_METAFILE}_${executionId}_${tt.valueOf()}`), '');
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
deleteMarkedFiles() {
|
|
56
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
57
|
+
return this.deleteMarkedFilesByMeta(this.getBinaryDataMetaPath(), PREFIX_METAFILE);
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
deleteMarkedPersistedFiles() {
|
|
61
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
62
|
+
return this.deleteMarkedFilesByMeta(this.getBinaryDataPersistMetaPath(), PREFIX_PERSISTED_METAFILE);
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
addBinaryIdToPersistMeta(executionId, identifier) {
|
|
66
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
67
|
+
const currentTime = new Date().getTime();
|
|
68
|
+
const timeAtNextHour = currentTime + 3600000 - (currentTime % 3600000);
|
|
69
|
+
const timeoutTime = timeAtNextHour + this.persistedBinaryDataTTL * 60000;
|
|
70
|
+
const filePath = path.join(this.getBinaryDataPersistMetaPath(), `${PREFIX_PERSISTED_METAFILE}_${executionId}_${timeoutTime}`);
|
|
71
|
+
return fs_1.promises
|
|
72
|
+
.readFile(filePath)
|
|
73
|
+
.catch(() => tslib_1.__awaiter(this, void 0, void 0, function* () { return fs_1.promises.writeFile(filePath, identifier); }))
|
|
74
|
+
.then(() => { });
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
deleteMarkedFilesByMeta(metaPath, filePrefix) {
|
|
78
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
79
|
+
const currentTimeValue = new Date().valueOf();
|
|
80
|
+
const metaFileNames = yield fs_1.promises.readdir(metaPath);
|
|
81
|
+
const execsAdded = {};
|
|
82
|
+
const proms = metaFileNames.reduce((prev, curr) => {
|
|
83
|
+
const [prefix, executionId, ts] = curr.split('_');
|
|
84
|
+
if (prefix !== filePrefix) {
|
|
85
|
+
return prev;
|
|
86
|
+
}
|
|
87
|
+
const execTimestamp = parseInt(ts, 10);
|
|
88
|
+
if (execTimestamp < currentTimeValue) {
|
|
89
|
+
if (execsAdded[executionId]) {
|
|
90
|
+
// do not delete data, only meta file
|
|
91
|
+
prev.push(this.deleteMetaFileByPath(path.join(metaPath, curr)));
|
|
92
|
+
return prev;
|
|
93
|
+
}
|
|
94
|
+
execsAdded[executionId] = 1;
|
|
95
|
+
prev.push(this.deleteBinaryDataByExecutionId(executionId).then(() => tslib_1.__awaiter(this, void 0, void 0, function* () { return this.deleteMetaFileByPath(path.join(metaPath, curr)); })));
|
|
96
|
+
}
|
|
97
|
+
return prev;
|
|
98
|
+
}, [Promise.resolve()]);
|
|
99
|
+
return Promise.all(proms).then(() => { });
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
duplicateBinaryDataByIdentifier(binaryDataId, prefix) {
|
|
103
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
104
|
+
const newBinaryDataId = this.generateFileName(prefix);
|
|
105
|
+
return fs_1.promises
|
|
106
|
+
.copyFile(path.join(this.storagePath, binaryDataId), path.join(this.storagePath, newBinaryDataId))
|
|
107
|
+
.then(() => newBinaryDataId);
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
deleteBinaryDataByExecutionId(executionId) {
|
|
111
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
112
|
+
const regex = new RegExp(`${executionId}_*`);
|
|
113
|
+
const filenames = yield fs_1.promises.readdir(path.join(this.storagePath));
|
|
114
|
+
const proms = filenames.reduce((allProms, filename) => {
|
|
115
|
+
if (regex.test(filename)) {
|
|
116
|
+
allProms.push(fs_1.promises.rm(path.join(this.storagePath, filename)));
|
|
117
|
+
}
|
|
118
|
+
return allProms;
|
|
119
|
+
}, [Promise.resolve()]);
|
|
120
|
+
return Promise.all(proms).then(() => tslib_1.__awaiter(this, void 0, void 0, function* () { return Promise.resolve(); }));
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
deleteBinaryDataByIdentifier(identifier) {
|
|
124
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
125
|
+
return this.deleteFromLocalStorage(identifier);
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
persistBinaryDataForExecutionId(executionId) {
|
|
129
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
130
|
+
return fs_1.promises.readdir(this.getBinaryDataPersistMetaPath()).then((metafiles) => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
131
|
+
const proms = metafiles.reduce((prev, curr) => {
|
|
132
|
+
if (curr.startsWith(`${PREFIX_PERSISTED_METAFILE}_${executionId}_`)) {
|
|
133
|
+
prev.push(fs_1.promises.rm(path.join(this.getBinaryDataPersistMetaPath(), curr)));
|
|
134
|
+
return prev;
|
|
135
|
+
}
|
|
136
|
+
return prev;
|
|
137
|
+
}, [Promise.resolve()]);
|
|
138
|
+
return Promise.all(proms).then(() => { });
|
|
139
|
+
}));
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
generateFileName(prefix) {
|
|
143
|
+
return `${prefix}_${(0, uuid_1.v4)()}`;
|
|
144
|
+
}
|
|
145
|
+
getBinaryDataMetaPath() {
|
|
146
|
+
return path.join(this.storagePath, 'meta');
|
|
147
|
+
}
|
|
148
|
+
getBinaryDataPersistMetaPath() {
|
|
149
|
+
return path.join(this.storagePath, 'persistMeta');
|
|
150
|
+
}
|
|
151
|
+
deleteMetaFileByPath(metafilePath) {
|
|
152
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
153
|
+
return fs_1.promises.rm(metafilePath);
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
deleteFromLocalStorage(identifier) {
|
|
157
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
158
|
+
return fs_1.promises.rm(path.join(this.storagePath, identifier));
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
saveToLocalStorage(data, identifier) {
|
|
162
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
163
|
+
yield fs_1.promises.writeFile(path.join(this.storagePath, identifier), data);
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
retrieveFromLocalStorage(identifier) {
|
|
167
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
168
|
+
const filePath = path.join(this.storagePath, identifier);
|
|
169
|
+
try {
|
|
170
|
+
return yield fs_1.promises.readFile(filePath);
|
|
171
|
+
}
|
|
172
|
+
catch (e) {
|
|
173
|
+
throw new Error(`Error finding file: ${filePath}`);
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
exports.BinaryDataFileSystem = BinaryDataFileSystem;
|
|
179
|
+
//# sourceMappingURL=FileSystem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileSystem.js","sourceRoot":"","sources":["../../../src/lib/FileSystem.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { INodeType, ISupplyDataFunctions, Workflow, NodeConnectionType, IWebhookFunctions } from '@fsai-flow/workflow';
|
|
2
|
+
export declare function getInputConnectionDataLegacy(this: ISupplyDataFunctions | IWebhookFunctions, workflow: Workflow, connectionType: NodeConnectionType, itemIndex: number, nodeTypeData: INodeType): Promise<unknown>;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getInputConnectionDataLegacy = getInputConnectionDataLegacy;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const workflow_1 = require("@fsai-flow/workflow");
|
|
6
|
+
function getInputConnectionDataLegacy(workflow, connectionType, itemIndex, nodeTypeData) {
|
|
7
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
8
|
+
var _a, _b, _c, _d;
|
|
9
|
+
const parentNode = this.getNode();
|
|
10
|
+
const nodeInputs = getNodeInputs(workflow, parentNode, nodeTypeData.description).map((input) => (typeof input === 'string' ? { type: input } : input));
|
|
11
|
+
const inputConfiguration = nodeInputs.find((input) => input.type === connectionType);
|
|
12
|
+
if (inputConfiguration === undefined) {
|
|
13
|
+
throw new workflow_1.NodeOperationError(parentNode, `Node does not have input of type`, {
|
|
14
|
+
description: `Node ${parentNode.name} does not have input of type ${connectionType}`,
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
const connectedNodes = getConnectedNodes(workflow, parentNode, connectionType);
|
|
18
|
+
if (connectedNodes.length === 0) {
|
|
19
|
+
if (inputConfiguration.required) {
|
|
20
|
+
throw new workflow_1.NodeOperationError(parentNode, `A ${(_a = inputConfiguration === null || inputConfiguration === void 0 ? void 0 : inputConfiguration.displayName) !== null && _a !== void 0 ? _a : connectionType} sub-node must be connected and enabled`);
|
|
21
|
+
}
|
|
22
|
+
return inputConfiguration.maxConnections === 1 ? undefined : [];
|
|
23
|
+
}
|
|
24
|
+
if (inputConfiguration.maxConnections !== undefined &&
|
|
25
|
+
connectedNodes.length > inputConfiguration.maxConnections) {
|
|
26
|
+
throw new workflow_1.NodeOperationError(parentNode, `Only ${inputConfiguration.maxConnections} ${connectionType} sub-nodes are/is allowed to be connected`);
|
|
27
|
+
}
|
|
28
|
+
const nodes = [];
|
|
29
|
+
for (const connectedNode of connectedNodes) {
|
|
30
|
+
const connectedNodeType = workflow.nodeTypes.getByNameAndVersion(connectedNode.type, connectedNode.typeVersion);
|
|
31
|
+
if (!connectedNodeType) {
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
if (connectedNodeType && !connectedNodeType.supplyData) {
|
|
35
|
+
throw new workflow_1.NodeOperationError(connectedNode, 'Node does not have a `supplyData` method defined', {
|
|
36
|
+
itemIndex,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
try {
|
|
41
|
+
const supplyData = yield ((_b = connectedNodeType.supplyData) === null || _b === void 0 ? void 0 : _b.call(this, itemIndex));
|
|
42
|
+
if (supplyData) {
|
|
43
|
+
nodes.push(supplyData);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
throw new workflow_1.NodeOperationError(connectedNode, `Error in sub-node ${connectedNode.name}`, {
|
|
48
|
+
itemIndex,
|
|
49
|
+
description: (_c = error === null || error === void 0 ? void 0 : error.message) !== null && _c !== void 0 ? _c : 'Unknown error',
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return inputConfiguration.maxConnections === 1
|
|
55
|
+
? (_d = (nodes || [])[0]) === null || _d === void 0 ? void 0 : _d.response
|
|
56
|
+
: nodes.map((node) => node.response);
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
function getNodeInputs(workflow, node, nodeTypeData) {
|
|
60
|
+
if (Array.isArray(nodeTypeData === null || nodeTypeData === void 0 ? void 0 : nodeTypeData.inputs)) {
|
|
61
|
+
return nodeTypeData.inputs;
|
|
62
|
+
}
|
|
63
|
+
// Calculate the outputs dynamically
|
|
64
|
+
try {
|
|
65
|
+
return (workflow.expression.getSimpleParameterValue(node, nodeTypeData.inputs, 'internal', {}) || []);
|
|
66
|
+
}
|
|
67
|
+
catch (e) {
|
|
68
|
+
console.warn('Could not calculate inputs dynamically for node: ', node.name);
|
|
69
|
+
return [];
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
function getConnectedNodes(workflow, node, connectionType) {
|
|
73
|
+
return workflow
|
|
74
|
+
.getParentNodes(node.name, connectionType, 1)
|
|
75
|
+
.map((nodeName) => workflow.getNode(nodeName))
|
|
76
|
+
.filter((node) => !!node)
|
|
77
|
+
.filter((node) => node.disabled !== true);
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=InputConnectionDataLegacy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InputConnectionDataLegacy.js","sourceRoot":"","sources":["../../../src/lib/InputConnectionDataLegacy.ts"],"names":[],"mappings":"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"}
|