@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.
Files changed (113) hide show
  1. package/README.md +11 -0
  2. package/dist/README.md +11 -0
  3. package/dist/package.json +44 -0
  4. package/dist/src/index.d.ts +15 -0
  5. package/dist/src/index.js +29 -0
  6. package/dist/src/index.js.map +1 -0
  7. package/dist/src/lib/ActiveWebhooks.d.ts +59 -0
  8. package/dist/src/lib/ActiveWebhooks.js +184 -0
  9. package/dist/src/lib/ActiveWebhooks.js.map +1 -0
  10. package/dist/src/lib/ActiveWorkflows.d.ts +58 -0
  11. package/dist/src/lib/ActiveWorkflows.js +244 -0
  12. package/dist/src/lib/ActiveWorkflows.js.map +1 -0
  13. package/dist/src/lib/BinaryDataManager/FileSystem.d.ts +26 -0
  14. package/dist/src/lib/BinaryDataManager/FileSystem.js +179 -0
  15. package/dist/src/lib/BinaryDataManager/FileSystem.js.map +1 -0
  16. package/dist/src/lib/BinaryDataManager/index.d.ts +21 -0
  17. package/dist/src/lib/BinaryDataManager/index.js +146 -0
  18. package/dist/src/lib/BinaryDataManager/index.js.map +1 -0
  19. package/dist/src/lib/ChangeCase.d.ts +9 -0
  20. package/dist/src/lib/ChangeCase.js +43 -0
  21. package/dist/src/lib/ChangeCase.js.map +1 -0
  22. package/dist/src/lib/Constants.d.ts +14 -0
  23. package/dist/src/lib/Constants.js +19 -0
  24. package/dist/src/lib/Constants.js.map +1 -0
  25. package/dist/src/lib/Credentials.d.ts +27 -0
  26. package/dist/src/lib/Credentials.js +89 -0
  27. package/dist/src/lib/Credentials.js.map +1 -0
  28. package/dist/src/lib/FileSystem.d.ts +26 -0
  29. package/dist/src/lib/FileSystem.js +179 -0
  30. package/dist/src/lib/FileSystem.js.map +1 -0
  31. package/dist/src/lib/InputConnectionDataLegacy.d.ts +2 -0
  32. package/dist/src/lib/InputConnectionDataLegacy.js +79 -0
  33. package/dist/src/lib/InputConnectionDataLegacy.js.map +1 -0
  34. package/dist/src/lib/Interfaces.d.ts +148 -0
  35. package/dist/src/lib/Interfaces.js +3 -0
  36. package/dist/src/lib/Interfaces.js.map +1 -0
  37. package/dist/src/lib/LoadNodeParameterOptions.d.ts +39 -0
  38. package/dist/src/lib/LoadNodeParameterOptions.js +150 -0
  39. package/dist/src/lib/LoadNodeParameterOptions.js.map +1 -0
  40. package/dist/src/lib/NodeExecuteFunctions.d.ts +226 -0
  41. package/dist/src/lib/NodeExecuteFunctions.js +2483 -0
  42. package/dist/src/lib/NodeExecuteFunctions.js.map +1 -0
  43. package/dist/src/lib/NodesLoader/constants.d.ts +5 -0
  44. package/dist/src/lib/NodesLoader/constants.js +106 -0
  45. package/dist/src/lib/NodesLoader/constants.js.map +1 -0
  46. package/dist/src/lib/NodesLoader/custom-directory-loader.d.ts +9 -0
  47. package/dist/src/lib/NodesLoader/custom-directory-loader.js +36 -0
  48. package/dist/src/lib/NodesLoader/custom-directory-loader.js.map +1 -0
  49. package/dist/src/lib/NodesLoader/directory-loader.d.ts +66 -0
  50. package/dist/src/lib/NodesLoader/directory-loader.js +325 -0
  51. package/dist/src/lib/NodesLoader/directory-loader.js.map +1 -0
  52. package/dist/src/lib/NodesLoader/index.d.ts +5 -0
  53. package/dist/src/lib/NodesLoader/index.js +12 -0
  54. package/dist/src/lib/NodesLoader/index.js.map +1 -0
  55. package/dist/src/lib/NodesLoader/lazy-package-directory-loader.d.ts +7 -0
  56. package/dist/src/lib/NodesLoader/lazy-package-directory-loader.js +52 -0
  57. package/dist/src/lib/NodesLoader/lazy-package-directory-loader.js.map +1 -0
  58. package/dist/src/lib/NodesLoader/load-class-in-isolation.d.ts +1 -0
  59. package/dist/src/lib/NodesLoader/load-class-in-isolation.js +22 -0
  60. package/dist/src/lib/NodesLoader/load-class-in-isolation.js.map +1 -0
  61. package/dist/src/lib/NodesLoader/package-directory-loader.d.ts +17 -0
  62. package/dist/src/lib/NodesLoader/package-directory-loader.js +100 -0
  63. package/dist/src/lib/NodesLoader/package-directory-loader.js.map +1 -0
  64. package/dist/src/lib/NodesLoader/types.d.ts +14 -0
  65. package/dist/src/lib/NodesLoader/types.js +3 -0
  66. package/dist/src/lib/NodesLoader/types.js.map +1 -0
  67. package/dist/src/lib/UserSettings.d.ts +80 -0
  68. package/dist/src/lib/UserSettings.js +261 -0
  69. package/dist/src/lib/UserSettings.js.map +1 -0
  70. package/dist/src/lib/WorkflowExecute.d.ts +53 -0
  71. package/dist/src/lib/WorkflowExecute.js +835 -0
  72. package/dist/src/lib/WorkflowExecute.js.map +1 -0
  73. package/dist/src/lib/index.d.ts +21 -0
  74. package/dist/src/lib/index.js +146 -0
  75. package/dist/src/lib/index.js.map +1 -0
  76. package/dist/src/utils/crypto.d.ts +1 -0
  77. package/dist/src/utils/crypto.js +8 -0
  78. package/dist/src/utils/crypto.js.map +1 -0
  79. package/eslint.config.js +19 -0
  80. package/jest.config.ts +10 -0
  81. package/package.json +44 -0
  82. package/project.json +19 -0
  83. package/src/index.ts +27 -0
  84. package/src/lib/ActiveWebhooks.ts +245 -0
  85. package/src/lib/ActiveWorkflows.ts +304 -0
  86. package/src/lib/BinaryDataManager/FileSystem.ts +214 -0
  87. package/src/lib/BinaryDataManager/index.ts +187 -0
  88. package/src/lib/ChangeCase.ts +45 -0
  89. package/src/lib/Constants.ts +16 -0
  90. package/src/lib/Credentials.ts +108 -0
  91. package/src/lib/FileSystem.ts +214 -0
  92. package/src/lib/InputConnectionDataLegacy.ts +123 -0
  93. package/src/lib/Interfaces.ts +338 -0
  94. package/src/lib/LoadNodeParameterOptions.ts +235 -0
  95. package/src/lib/NodeExecuteFunctions.ts +3704 -0
  96. package/src/lib/NodesLoader/constants.ts +112 -0
  97. package/src/lib/NodesLoader/custom-directory-loader.ts +31 -0
  98. package/src/lib/NodesLoader/directory-loader.ts +458 -0
  99. package/src/lib/NodesLoader/index.ts +5 -0
  100. package/src/lib/NodesLoader/lazy-package-directory-loader.ts +55 -0
  101. package/src/lib/NodesLoader/load-class-in-isolation.ts +19 -0
  102. package/src/lib/NodesLoader/package-directory-loader.ts +107 -0
  103. package/src/lib/NodesLoader/types.ts +14 -0
  104. package/src/lib/UserSettings.ts +292 -0
  105. package/src/lib/WorkflowExecute.ts +1108 -0
  106. package/src/lib/index.ts +187 -0
  107. package/src/utils/crypto.ts +5 -0
  108. package/tests/Credentials.test.ts +88 -0
  109. package/tests/Helpers.ts +808 -0
  110. package/tests/WorkflowExecute.test.ts +1242 -0
  111. package/tsconfig.json +42 -0
  112. package/tsconfig.lib.json +10 -0
  113. package/tsconfig.spec.json +14 -0
@@ -0,0 +1,244 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ActiveWorkflows = void 0;
4
+ const tslib_1 = require("tslib");
5
+ /* eslint-disable no-continue */
6
+ /* eslint-disable no-await-in-loop */
7
+ /* eslint-disable no-restricted-syntax */
8
+ const cron_1 = require("cron");
9
+ const workflow_1 = require("@fsai-flow/workflow");
10
+ const crypto_1 = require("../utils/crypto");
11
+ class ActiveWorkflows {
12
+ constructor() {
13
+ this.workflowData = {};
14
+ }
15
+ /**
16
+ * Returns if the workflow is active
17
+ *
18
+ * @param {string} id The id of the workflow to check
19
+ * @returns {boolean}
20
+ * @memberof ActiveWorkflows
21
+ */
22
+ isActive(id) {
23
+ // eslint-disable-next-line no-prototype-builtins
24
+ return this.workflowData.hasOwnProperty(id);
25
+ }
26
+ /**
27
+ * Returns the ids of the currently active workflows
28
+ *
29
+ * @returns {string[]}
30
+ * @memberof ActiveWorkflows
31
+ */
32
+ allActiveWorkflows() {
33
+ return Object.keys(this.workflowData);
34
+ }
35
+ /**
36
+ * Returns the Workflow data for the workflow with
37
+ * the given id if it is currently active
38
+ *
39
+ * @param {string} id
40
+ * @returns {(WorkflowData | undefined)}
41
+ * @memberof ActiveWorkflows
42
+ */
43
+ get(id) {
44
+ return this.workflowData[id];
45
+ }
46
+ /**
47
+ * Makes a workflow active
48
+ *
49
+ * @param {string} id The id of the workflow to activate
50
+ * @param {Workflow} workflow The workflow to activate
51
+ * @param {IWorkflowExecuteAdditionalData} additionalData The additional data which is needed to run workflows
52
+ * @returns {Promise<void>}
53
+ * @memberof ActiveWorkflows
54
+ */
55
+ add(id, workflow, additionalData, mode, activation, getTriggerFunctions, getPollFunctions) {
56
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
57
+ this.workflowData[id] = {};
58
+ const triggerNodes = workflow.getTriggerNodes();
59
+ let triggerResponse;
60
+ this.workflowData[id].triggerResponses = [];
61
+ for (const triggerNode of triggerNodes) {
62
+ triggerResponse = yield workflow.runTrigger(triggerNode, getTriggerFunctions, additionalData, mode, activation);
63
+ if (triggerResponse !== undefined) {
64
+ // If a response was given save it
65
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
66
+ this.workflowData[id].triggerResponses.push(triggerResponse);
67
+ }
68
+ }
69
+ const pollNodes = workflow.getPollNodes();
70
+ if (pollNodes.length) {
71
+ this.workflowData[id].pollResponses = [];
72
+ for (const pollNode of pollNodes) {
73
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
74
+ this.workflowData[id].pollResponses.push(yield this.activatePolling(pollNode, workflow, additionalData, getPollFunctions, mode, activation));
75
+ }
76
+ }
77
+ });
78
+ }
79
+ /**
80
+ * Activates polling for the given node
81
+ *
82
+ * @param {INode} node
83
+ * @param {Workflow} workflow
84
+ * @param {IWorkflowExecuteAdditionalData} additionalData
85
+ * @param {IGetExecutePollFunctions} getPollFunctions
86
+ * @returns {Promise<IPollResponse>}
87
+ * @memberof ActiveWorkflows
88
+ */
89
+ activatePolling(node, workflow, additionalData, getPollFunctions, mode, activation) {
90
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
91
+ const pollFunctions = getPollFunctions(workflow, node, additionalData, mode, activation);
92
+ const pollTimes = pollFunctions.getNodeParameter('pollTimes');
93
+ // Define the order the cron-time-parameter appear
94
+ const parameterOrder = [
95
+ 'second', // 0 - 59
96
+ 'minute', // 0 - 59
97
+ 'hour', // 0 - 23
98
+ 'dayOfMonth', // 1 - 31
99
+ 'month', // 0 - 11(Jan - Dec)
100
+ 'weekday', // 0 - 6(Sun - Sat)
101
+ ];
102
+ // Get all the trigger times
103
+ const cronTimes = [];
104
+ let cronTime;
105
+ let parameterName;
106
+ if (pollTimes.item !== undefined) {
107
+ for (const item of pollTimes.item) {
108
+ cronTime = [];
109
+ if (item.mode === 'custom') {
110
+ cronTimes.push(item['cronExpression'].trim());
111
+ continue;
112
+ }
113
+ if (item.mode === 'everyMinute') {
114
+ cronTimes.push(`${(0, crypto_1.secureRandomNumber)(1, 60).toString()} * * * * *`);
115
+ continue;
116
+ }
117
+ if (item.mode === 'everyX') {
118
+ if (item['unit'] === 'minutes') {
119
+ cronTimes.push(`${(0, crypto_1.secureRandomNumber)(1, 60).toString()} */${item['value']} * * * *`);
120
+ }
121
+ else if (item['unit'] === 'hours') {
122
+ cronTimes.push(`${(0, crypto_1.secureRandomNumber)(1, 60).toString()} 0 */${item['value']} * * *`);
123
+ }
124
+ else if (item['unit'] === 'seconds') {
125
+ cronTimes.push(`*/${item['value']} * * * * *`);
126
+ }
127
+ continue;
128
+ }
129
+ for (parameterName of parameterOrder) {
130
+ if (item[parameterName] !== undefined) {
131
+ // Value is set so use it
132
+ cronTime.push(item[parameterName]);
133
+ }
134
+ else if (parameterName === 'second') {
135
+ // For seconds we use by default a random one to make sure to
136
+ // balance the load a little bit over time
137
+ cronTime.push((0, crypto_1.secureRandomNumber)(1, 60).toString());
138
+ }
139
+ else {
140
+ // For all others set "any"
141
+ cronTime.push('*');
142
+ }
143
+ }
144
+ cronTimes.push(cronTime.join(' '));
145
+ }
146
+ }
147
+ // The trigger function to execute when the cron-time got reached
148
+ const executeTrigger = () => tslib_1.__awaiter(this, void 0, void 0, function* () {
149
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
150
+ workflow_1.LoggerProxy.debug(`Polling trigger initiated for workflow "${workflow.name}"`, {
151
+ workflowName: workflow.name,
152
+ workflowId: workflow.id,
153
+ });
154
+ const pollResponse = yield workflow.runPoll(node, pollFunctions);
155
+ if (pollResponse !== null) {
156
+ // eslint-disable-next-line no-underscore-dangle
157
+ pollFunctions.__emit(pollResponse);
158
+ }
159
+ });
160
+ // Execute the trigger directly to be able to know if it works
161
+ yield executeTrigger();
162
+ const timezone = pollFunctions.getTimezone();
163
+ // Start the cron-jobs
164
+ const cronJobs = [];
165
+ // eslint-disable-next-line @typescript-eslint/no-shadow
166
+ for (const cronTime of cronTimes) {
167
+ const cronTimeParts = cronTime.split(' ');
168
+ // Verificar se é polling em segundos
169
+ if (cronTimeParts.length === 6 && cronTimeParts[0].includes('/')) {
170
+ const secondsInterval = parseInt(cronTimeParts[0].replace('*/', ''), 10);
171
+ if (secondsInterval < 1) {
172
+ throw new Error('The polling interval is too short. It has to be at least 1 second!');
173
+ }
174
+ }
175
+ else if (cronTimeParts.length > 0 && cronTimeParts[0].includes('*') && !cronTimeParts[0].includes('/')) {
176
+ throw new Error('The polling interval is too short. It has to be at least a minute!');
177
+ }
178
+ cronJobs.push(new cron_1.CronJob(cronTime, executeTrigger, undefined, true, timezone));
179
+ }
180
+ // Stop the cron-jobs
181
+ function closeFunction() {
182
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
183
+ for (const cronJob of cronJobs) {
184
+ cronJob.stop();
185
+ }
186
+ });
187
+ }
188
+ return {
189
+ closeFunction,
190
+ };
191
+ });
192
+ }
193
+ /**
194
+ * Makes a workflow inactive
195
+ *
196
+ * @param {string} id The id of the workflow to deactivate
197
+ * @returns {Promise<void>}
198
+ * @memberof ActiveWorkflows
199
+ */
200
+ remove(id) {
201
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
202
+ if (!this.isActive(id)) {
203
+ // Workflow is currently not registered
204
+ throw new Error(`The workflow with the id "${id}" is currently not active and can so not be removed`);
205
+ }
206
+ const workflowData = this.workflowData[id];
207
+ if (workflowData.triggerResponses) {
208
+ for (const triggerResponse of workflowData.triggerResponses) {
209
+ if (triggerResponse.closeFunction) {
210
+ try {
211
+ yield triggerResponse.closeFunction();
212
+ }
213
+ catch (error) {
214
+ workflow_1.LoggerProxy.error(
215
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/restrict-template-expressions
216
+ `There was a problem deactivating trigger of workflow "${id}": "${error.message}"`, {
217
+ workflowId: id,
218
+ });
219
+ }
220
+ }
221
+ }
222
+ }
223
+ if (workflowData.pollResponses) {
224
+ for (const pollResponse of workflowData.pollResponses) {
225
+ if (pollResponse.closeFunction) {
226
+ try {
227
+ yield pollResponse.closeFunction();
228
+ }
229
+ catch (error) {
230
+ workflow_1.LoggerProxy.error(
231
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/restrict-template-expressions
232
+ `There was a problem deactivating polling trigger of workflow "${id}": "${error.message}"`, {
233
+ workflowId: id,
234
+ });
235
+ }
236
+ }
237
+ }
238
+ }
239
+ delete this.workflowData[id];
240
+ });
241
+ }
242
+ }
243
+ exports.ActiveWorkflows = ActiveWorkflows;
244
+ //# sourceMappingURL=ActiveWorkflows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ActiveWorkflows.js","sourceRoot":"","sources":["../../../src/lib/ActiveWorkflows.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/BinaryDataManager/FileSystem.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { IBinaryData, INodeExecutionData } from '@fsai-flow/workflow';
2
+ import { IBinaryDataConfig } from '../Interfaces';
3
+ export declare class BinaryDataManager {
4
+ private static instance;
5
+ private managers;
6
+ private binaryDataMode;
7
+ private availableModes;
8
+ constructor(config: IBinaryDataConfig);
9
+ static init(config: IBinaryDataConfig, mainManager?: boolean): Promise<void>;
10
+ static getInstance(): BinaryDataManager;
11
+ storeBinaryData(binaryData: IBinaryData, binaryBuffer: Buffer, executionId: string): Promise<IBinaryData>;
12
+ retrieveBinaryData(binaryData: IBinaryData): Promise<Buffer>;
13
+ retrieveBinaryDataByIdentifier(identifier: string): Promise<Buffer>;
14
+ markDataForDeletionByExecutionId(executionId: string): Promise<void>;
15
+ persistBinaryDataForExecutionId(executionId: string): Promise<void>;
16
+ deleteBinaryDataByExecutionId(executionId: string): Promise<void>;
17
+ duplicateBinaryData(inputData: Array<INodeExecutionData[] | null> | unknown, executionId: string): Promise<INodeExecutionData[][]>;
18
+ private generateBinaryId;
19
+ private splitBinaryModeFileId;
20
+ private duplicateBinaryDataInExecData;
21
+ }
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BinaryDataManager = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const Constants_1 = require("../Constants");
6
+ const FileSystem_1 = require("./FileSystem");
7
+ class BinaryDataManager {
8
+ constructor(config) {
9
+ this.binaryDataMode = config.mode;
10
+ this.availableModes = config.availableModes.split(',');
11
+ this.managers = {};
12
+ }
13
+ static init(config_1) {
14
+ return tslib_1.__awaiter(this, arguments, void 0, function* (config, mainManager = false) {
15
+ if (BinaryDataManager.instance) {
16
+ throw new Error('Binary Data Manager already initialized');
17
+ }
18
+ BinaryDataManager.instance = new BinaryDataManager(config);
19
+ if (BinaryDataManager.instance.availableModes.includes('filesystem')) {
20
+ BinaryDataManager.instance.managers['filesystem'] = new FileSystem_1.BinaryDataFileSystem(config);
21
+ yield BinaryDataManager.instance.managers['filesystem'].init(mainManager);
22
+ }
23
+ return undefined;
24
+ });
25
+ }
26
+ static getInstance() {
27
+ if (!BinaryDataManager.instance) {
28
+ throw new Error('Binary Data Manager not initialized');
29
+ }
30
+ return BinaryDataManager.instance;
31
+ }
32
+ storeBinaryData(binaryData, binaryBuffer, executionId) {
33
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
34
+ const retBinaryData = binaryData;
35
+ if (this.managers[this.binaryDataMode]) {
36
+ return this.managers[this.binaryDataMode]
37
+ .storeBinaryData(binaryBuffer, executionId)
38
+ .then((filename) => {
39
+ retBinaryData.id = this.generateBinaryId(filename);
40
+ return retBinaryData;
41
+ });
42
+ }
43
+ retBinaryData.data = binaryBuffer.toString(Constants_1.BINARY_ENCODING);
44
+ return binaryData;
45
+ });
46
+ }
47
+ retrieveBinaryData(binaryData) {
48
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
49
+ if (binaryData.id) {
50
+ return this.retrieveBinaryDataByIdentifier(binaryData.id);
51
+ }
52
+ return Buffer.from(binaryData.data, Constants_1.BINARY_ENCODING);
53
+ });
54
+ }
55
+ retrieveBinaryDataByIdentifier(identifier) {
56
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
57
+ const { mode, id } = this.splitBinaryModeFileId(identifier);
58
+ if (this.managers[mode]) {
59
+ return this.managers[mode].retrieveBinaryDataByIdentifier(id);
60
+ }
61
+ throw new Error('Storage mode used to store binary data not available');
62
+ });
63
+ }
64
+ markDataForDeletionByExecutionId(executionId) {
65
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
66
+ if (this.managers[this.binaryDataMode]) {
67
+ return this.managers[this.binaryDataMode].markDataForDeletionByExecutionId(executionId);
68
+ }
69
+ return Promise.resolve();
70
+ });
71
+ }
72
+ persistBinaryDataForExecutionId(executionId) {
73
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
74
+ if (this.managers[this.binaryDataMode]) {
75
+ return this.managers[this.binaryDataMode].persistBinaryDataForExecutionId(executionId);
76
+ }
77
+ return Promise.resolve();
78
+ });
79
+ }
80
+ deleteBinaryDataByExecutionId(executionId) {
81
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
82
+ if (this.managers[this.binaryDataMode]) {
83
+ return this.managers[this.binaryDataMode].deleteBinaryDataByExecutionId(executionId);
84
+ }
85
+ return Promise.resolve();
86
+ });
87
+ }
88
+ duplicateBinaryData(inputData, executionId) {
89
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
90
+ if (inputData && this.managers[this.binaryDataMode]) {
91
+ const returnInputData = inputData.map((executionDataArray) => tslib_1.__awaiter(this, void 0, void 0, function* () {
92
+ if (executionDataArray) {
93
+ return Promise.all(executionDataArray.map((executionData) => {
94
+ if (executionData.binary) {
95
+ return this.duplicateBinaryDataInExecData(executionData, executionId);
96
+ }
97
+ return executionData;
98
+ }));
99
+ }
100
+ return executionDataArray;
101
+ }));
102
+ return Promise.all(returnInputData);
103
+ }
104
+ return Promise.resolve(inputData);
105
+ });
106
+ }
107
+ generateBinaryId(filename) {
108
+ return `${this.binaryDataMode}:${filename}`;
109
+ }
110
+ splitBinaryModeFileId(fileId) {
111
+ const [mode, id] = fileId.split(':');
112
+ return { mode, id };
113
+ }
114
+ duplicateBinaryDataInExecData(executionData, executionId) {
115
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
116
+ const binaryManager = this.managers[this.binaryDataMode];
117
+ if (executionData.binary) {
118
+ const binaryDataKeys = Object.keys(executionData.binary);
119
+ const bdPromises = binaryDataKeys.map((key) => tslib_1.__awaiter(this, void 0, void 0, function* () {
120
+ if (!executionData.binary) {
121
+ return { key, newId: undefined };
122
+ }
123
+ const binaryDataId = executionData.binary[key].id;
124
+ if (!binaryDataId) {
125
+ return { key, newId: undefined };
126
+ }
127
+ return binaryManager === null || binaryManager === void 0 ? void 0 : binaryManager.duplicateBinaryDataByIdentifier(this.splitBinaryModeFileId(binaryDataId).id, executionId).then((filename) => ({
128
+ newId: this.generateBinaryId(filename),
129
+ key,
130
+ }));
131
+ }));
132
+ return Promise.all(bdPromises).then((b) => {
133
+ return b.reduce((acc, curr) => {
134
+ if (acc.binary && curr) {
135
+ acc.binary[curr.key].id = curr.newId;
136
+ }
137
+ return acc;
138
+ }, executionData);
139
+ });
140
+ }
141
+ return executionData;
142
+ });
143
+ }
144
+ }
145
+ exports.BinaryDataManager = BinaryDataManager;
146
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/BinaryDataManager/index.ts"],"names":[],"mappings":"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"}