@fsai-flow/workflow 0.0.2 → 0.0.3

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 (79) hide show
  1. package/dist/README.md +31 -0
  2. package/dist/package.json +42 -0
  3. package/dist/src/index.d.ts +21 -0
  4. package/dist/src/index.js +33 -0
  5. package/dist/src/index.js.map +1 -0
  6. package/dist/src/lib/Constants.d.ts +68 -0
  7. package/dist/src/lib/Constants.js +106 -0
  8. package/dist/src/lib/Constants.js.map +1 -0
  9. package/dist/src/lib/DeferredPromise.d.ts +6 -0
  10. package/dist/src/lib/DeferredPromise.js +11 -0
  11. package/dist/src/lib/DeferredPromise.js.map +1 -0
  12. package/dist/src/lib/Expression.d.ts +65 -0
  13. package/dist/src/lib/Expression.js +215 -0
  14. package/dist/src/lib/Expression.js.map +1 -0
  15. package/dist/src/lib/Interfaces.d.ts +1579 -0
  16. package/dist/src/lib/Interfaces.js +44 -0
  17. package/dist/src/lib/Interfaces.js.map +1 -0
  18. package/dist/src/lib/LoggerProxy.d.ts +9 -0
  19. package/dist/src/lib/LoggerProxy.js +40 -0
  20. package/dist/src/lib/LoggerProxy.js.map +1 -0
  21. package/dist/src/lib/MetadataUtils.d.ts +4 -0
  22. package/dist/src/lib/MetadataUtils.js +27 -0
  23. package/dist/src/lib/MetadataUtils.js.map +1 -0
  24. package/dist/src/lib/NodeErrors.d.ts +82 -0
  25. package/dist/src/lib/NodeErrors.js +289 -0
  26. package/dist/src/lib/NodeErrors.js.map +1 -0
  27. package/dist/src/lib/NodeHelpers.d.ts +198 -0
  28. package/dist/src/lib/NodeHelpers.js +1348 -0
  29. package/dist/src/lib/NodeHelpers.js.map +1 -0
  30. package/dist/src/lib/ObservableObject.d.ts +5 -0
  31. package/dist/src/lib/ObservableObject.js +61 -0
  32. package/dist/src/lib/ObservableObject.js.map +1 -0
  33. package/dist/src/lib/RoutingNode.d.ts +18 -0
  34. package/dist/src/lib/RoutingNode.js +508 -0
  35. package/dist/src/lib/RoutingNode.js.map +1 -0
  36. package/dist/src/lib/TelemetryHelpers.d.ts +3 -0
  37. package/dist/src/lib/TelemetryHelpers.js +69 -0
  38. package/dist/src/lib/TelemetryHelpers.js.map +1 -0
  39. package/dist/src/lib/TypeValidation.d.ts +21 -0
  40. package/dist/src/lib/TypeValidation.js +385 -0
  41. package/dist/src/lib/TypeValidation.js.map +1 -0
  42. package/dist/src/lib/VersionedNodeType.d.ts +9 -0
  43. package/dist/src/lib/VersionedNodeType.js +26 -0
  44. package/dist/src/lib/VersionedNodeType.js.map +1 -0
  45. package/dist/src/lib/Workflow.d.ts +248 -0
  46. package/dist/src/lib/Workflow.js +904 -0
  47. package/dist/src/lib/Workflow.js.map +1 -0
  48. package/dist/src/lib/WorkflowDataProxy.d.ts +87 -0
  49. package/dist/src/lib/WorkflowDataProxy.js +556 -0
  50. package/dist/src/lib/WorkflowDataProxy.js.map +1 -0
  51. package/dist/src/lib/WorkflowErrors.d.ts +9 -0
  52. package/dist/src/lib/WorkflowErrors.js +18 -0
  53. package/dist/src/lib/WorkflowErrors.js.map +1 -0
  54. package/dist/src/lib/WorkflowHooks.d.ts +11 -0
  55. package/dist/src/lib/WorkflowHooks.js +34 -0
  56. package/dist/src/lib/WorkflowHooks.js.map +1 -0
  57. package/dist/src/lib/errors/base/base.error.d.ts +30 -0
  58. package/dist/src/lib/errors/base/base.error.js +45 -0
  59. package/dist/src/lib/errors/base/base.error.js.map +1 -0
  60. package/dist/src/lib/errors/base/operational.error.d.ts +15 -0
  61. package/dist/src/lib/errors/base/operational.error.js +19 -0
  62. package/dist/src/lib/errors/base/operational.error.js.map +1 -0
  63. package/dist/src/lib/errors/error.types.d.ts +11 -0
  64. package/dist/src/lib/errors/error.types.js +3 -0
  65. package/dist/src/lib/errors/error.types.js.map +1 -0
  66. package/dist/src/lib/errors/index.d.ts +1 -0
  67. package/dist/src/lib/errors/index.js +6 -0
  68. package/dist/src/lib/errors/index.js.map +1 -0
  69. package/dist/src/lib/result.d.ts +19 -0
  70. package/dist/src/lib/result.js +36 -0
  71. package/dist/src/lib/result.js.map +1 -0
  72. package/dist/src/lib/utils.d.ts +50 -0
  73. package/dist/src/lib/utils.js +119 -0
  74. package/dist/src/lib/utils.js.map +1 -0
  75. package/package.json +5 -1
  76. package/src/lib/Interfaces.ts +28 -33
  77. package/src/lib/Workflow.ts +1 -1
  78. package/src/lib/WorkflowDataProxy.ts +1 -1
  79. package/src/lib/utils.ts +99 -120
@@ -0,0 +1,508 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RoutingNode = void 0;
4
+ /* eslint-disable @typescript-eslint/no-unsafe-call */
5
+ /* eslint-disable @typescript-eslint/no-non-null-assertion */
6
+ /* eslint-disable import/no-cycle */
7
+ /* eslint-disable @typescript-eslint/prefer-nullish-coalescing */
8
+ /* eslint-disable no-param-reassign */
9
+ /* eslint-disable no-continue */
10
+ /* eslint-disable @typescript-eslint/no-unsafe-return */
11
+ /* eslint-disable @typescript-eslint/no-unsafe-member-access */
12
+ /* eslint-disable @typescript-eslint/no-unsafe-assignment */
13
+ /* eslint-disable no-await-in-loop */
14
+ /* eslint-disable no-restricted-syntax */
15
+ const get = require('lodash.get');
16
+ const merge = require('lodash.merge');
17
+ const __1 = require("..");
18
+ class RoutingNode {
19
+ additionalData;
20
+ connectionInputData;
21
+ node;
22
+ mode;
23
+ runExecutionData;
24
+ workflow;
25
+ constructor(workflow, node, connectionInputData, runExecutionData, additionalData, mode) {
26
+ this.additionalData = additionalData;
27
+ this.connectionInputData = connectionInputData;
28
+ this.runExecutionData = runExecutionData;
29
+ this.mode = mode;
30
+ this.node = node;
31
+ this.workflow = workflow;
32
+ }
33
+ async runNode(inputData, runIndex, nodeType, nodeExecuteFunctions, credentialsDecrypted) {
34
+ const items = inputData['main'][0];
35
+ const returnData = [];
36
+ const closeFunctions = [];
37
+ let responseData;
38
+ let credentialType;
39
+ if (nodeType.description.credentials?.length) {
40
+ credentialType = nodeType.description.credentials[0].name;
41
+ }
42
+ const executeFunctions = nodeExecuteFunctions.getExecuteFunctions(this.workflow, this.runExecutionData, runIndex, this.connectionInputData, inputData, this.node, this.additionalData, this.mode, nodeType, closeFunctions);
43
+ let credentials;
44
+ if (credentialsDecrypted) {
45
+ credentials = credentialsDecrypted.data;
46
+ }
47
+ else if (credentialType) {
48
+ credentials = (await executeFunctions.getCredentials(credentialType)) || {};
49
+ }
50
+ // TODO: Think about how batching could be handled for REST APIs which support it
51
+ for (let i = 0; i < items.length; i++) {
52
+ try {
53
+ const thisArgs = nodeExecuteFunctions.getExecuteSingleFunctions(this.workflow, this.runExecutionData, runIndex, this.connectionInputData, inputData, this.node, i, this.additionalData, this.mode);
54
+ const requestData = {
55
+ options: {
56
+ qs: {},
57
+ body: {},
58
+ },
59
+ preSend: [],
60
+ postReceive: [],
61
+ requestOperations: {},
62
+ };
63
+ if (nodeType.description.requestOperations) {
64
+ requestData.requestOperations = { ...nodeType.description.requestOperations };
65
+ }
66
+ if (nodeType.description.requestDefaults) {
67
+ for (const key of Object.keys(nodeType.description.requestDefaults)) {
68
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
69
+ let value = nodeType.description.requestDefaults[key];
70
+ // If the value is an expression resolve it
71
+ value = this.getParameterValue(value, i, runIndex, { $credentials: credentials }, true);
72
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
73
+ requestData.options[key] = value;
74
+ }
75
+ }
76
+ for (const property of nodeType.description.properties) {
77
+ let value = get(this.node.parameters, property.name, []);
78
+ // If the value is an expression resolve it
79
+ value = this.getParameterValue(value, i, runIndex, { $credentials: credentials }, true);
80
+ const tempOptions = this.getRequestOptionsFromParameters(thisArgs, property, i, runIndex, '', { $credentials: credentials, $value: value });
81
+ this.mergeOptions(requestData, tempOptions);
82
+ }
83
+ // TODO: Change to handle some requests in parallel (should be configurable)
84
+ responseData = await this.makeRoutingRequest(requestData, thisArgs, i, runIndex, credentialType, requestData.requestOperations, credentialsDecrypted);
85
+ if (requestData.maxResults) {
86
+ // Remove not needed items in case APIs return to many
87
+ responseData.splice(requestData.maxResults);
88
+ }
89
+ returnData.push(...responseData);
90
+ }
91
+ catch (error) {
92
+ if (get(this.node, 'continueOnFail', false)) {
93
+ returnData.push({ json: {}, error: error.message });
94
+ continue;
95
+ }
96
+ const closeFunctionsResults = await Promise.allSettled(closeFunctions.map(async (fn) => await fn()));
97
+ const closingErrors = closeFunctionsResults
98
+ .filter((result) => result.status === 'rejected')
99
+ .map((result) => result.reason);
100
+ if (closingErrors.length > 0) {
101
+ if (closingErrors[0] instanceof Error)
102
+ throw closingErrors[0];
103
+ throw new Error(`Error on execution node's close function(s). Node Name: ${this.node.name}, Node Type: ${this.node.type}, Errors: ${closingErrors.join(', ')}`);
104
+ }
105
+ throw error;
106
+ }
107
+ }
108
+ const closeFunctionsResults = await Promise.allSettled(closeFunctions.map(async (fn) => await fn()));
109
+ const closingErrors = closeFunctionsResults
110
+ .filter((result) => result.status === 'rejected')
111
+ .map((result) => result.reason);
112
+ if (closingErrors.length > 0) {
113
+ if (closingErrors[0] instanceof Error)
114
+ throw closingErrors[0];
115
+ throw new Error(`Error on execution node's close function(s). Node Name: ${this.node.name}, Node Type: ${this.node.type}, Errors: ${closingErrors.join(', ')}`);
116
+ }
117
+ return [returnData];
118
+ }
119
+ mergeOptions(destinationOptions, sourceOptions) {
120
+ if (sourceOptions) {
121
+ destinationOptions.paginate = destinationOptions.paginate ?? sourceOptions.paginate;
122
+ destinationOptions.maxResults = sourceOptions.maxResults
123
+ ? sourceOptions.maxResults
124
+ : destinationOptions.maxResults;
125
+ merge(destinationOptions.options, sourceOptions.options);
126
+ destinationOptions.preSend.push(...sourceOptions.preSend);
127
+ destinationOptions.postReceive.push(...sourceOptions.postReceive);
128
+ if (sourceOptions.requestOperations) {
129
+ destinationOptions.requestOperations = Object.assign(destinationOptions.requestOperations || {}, sourceOptions.requestOperations || {});
130
+ }
131
+ }
132
+ }
133
+ async runPostReceiveAction(executeSingleFunctions, action, inputData, responseData, parameterValue, itemIndex, runIndex) {
134
+ if (typeof action === 'function') {
135
+ return action.call(executeSingleFunctions, inputData, responseData);
136
+ }
137
+ if (action.type === 'rootProperty') {
138
+ try {
139
+ return inputData.flatMap((item) => {
140
+ // let itemContent = item.json[action.properties.property];
141
+ let itemContent = get(item.json, action.properties.property);
142
+ if (!Array.isArray(itemContent)) {
143
+ itemContent = [itemContent];
144
+ }
145
+ return itemContent.map((json) => {
146
+ return {
147
+ json,
148
+ };
149
+ });
150
+ });
151
+ }
152
+ catch (e) {
153
+ throw new Error(
154
+ // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
155
+ `The rootProperty "${action.properties.property}" could not be found on item.`);
156
+ }
157
+ }
158
+ if (action.type === 'set') {
159
+ const { value } = action.properties;
160
+ // If the value is an expression resolve it
161
+ return [
162
+ {
163
+ json: this.getParameterValue(value, itemIndex, runIndex, { $response: responseData, $value: parameterValue }, false),
164
+ },
165
+ ];
166
+ }
167
+ if (action.type === 'sort') {
168
+ // Sort the returned options
169
+ const sortKey = action.properties.key;
170
+ inputData.sort((a, b) => {
171
+ const aSortValue = a.json[sortKey]
172
+ ? a.json[sortKey]?.toString().toLowerCase()
173
+ : '';
174
+ const bSortValue = b.json[sortKey]
175
+ ? b.json[sortKey]?.toString().toLowerCase()
176
+ : '';
177
+ if (aSortValue < bSortValue) {
178
+ return -1;
179
+ }
180
+ if (aSortValue > bSortValue) {
181
+ return 1;
182
+ }
183
+ return 0;
184
+ });
185
+ return inputData;
186
+ }
187
+ if (action.type === 'setKeyValue') {
188
+ const returnData = [];
189
+ // eslint-disable-next-line @typescript-eslint/no-loop-func
190
+ inputData.forEach((item) => {
191
+ const returnItem = {};
192
+ for (const key of Object.keys(action.properties)) {
193
+ let propertyValue = action.properties[key];
194
+ // If the value is an expression resolve it
195
+ propertyValue = this.getParameterValue(propertyValue, itemIndex, runIndex, {
196
+ $response: responseData,
197
+ $responseItem: item.json,
198
+ $value: parameterValue,
199
+ }, true);
200
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
201
+ returnItem[key] = propertyValue;
202
+ }
203
+ returnData.push({ json: returnItem });
204
+ });
205
+ return returnData;
206
+ }
207
+ if (action.type === 'binaryData') {
208
+ responseData.body = Buffer.from(responseData.body);
209
+ let { destinationProperty } = action.properties;
210
+ destinationProperty = this.getParameterValue(destinationProperty, itemIndex, runIndex, { $response: responseData, $value: parameterValue }, false);
211
+ const binaryData = await executeSingleFunctions.helpers['prepareBinaryData'](responseData.body);
212
+ return inputData.map((item) => {
213
+ if (typeof item.json === 'string') {
214
+ // By default is probably the binary data as string set, in this case remove it
215
+ item.json = {};
216
+ }
217
+ item.binary = {
218
+ [destinationProperty]: binaryData,
219
+ };
220
+ return item;
221
+ });
222
+ }
223
+ return [];
224
+ }
225
+ async rawRoutingRequest(executeSingleFunctions, requestData, itemIndex, runIndex, credentialType, credentialsDecrypted) {
226
+ let responseData;
227
+ requestData.options.returnFullResponse = true;
228
+ if (credentialType) {
229
+ responseData = (await executeSingleFunctions.helpers.httpRequestWithAuthentication.call(executeSingleFunctions, credentialType, requestData.options, { credentialsDecrypted }));
230
+ }
231
+ else {
232
+ responseData = (await executeSingleFunctions.helpers.httpRequest(requestData.options));
233
+ }
234
+ let returnData = [
235
+ {
236
+ json: responseData.body,
237
+ },
238
+ ];
239
+ if (requestData.postReceive.length) {
240
+ // If postReceive functionality got defined execute all of them
241
+ for (const postReceiveMethod of requestData.postReceive) {
242
+ for (const action of postReceiveMethod.actions) {
243
+ returnData = await this.runPostReceiveAction(executeSingleFunctions, action, returnData, responseData, postReceiveMethod.data.parameterValue, itemIndex, runIndex);
244
+ }
245
+ }
246
+ }
247
+ else {
248
+ // No postReceive functionality got defined so simply add data as it is
249
+ // eslint-disable-next-line no-lonely-if
250
+ if (Array.isArray(responseData.body)) {
251
+ returnData = responseData.body.map((json) => {
252
+ return {
253
+ json,
254
+ };
255
+ });
256
+ }
257
+ else {
258
+ returnData[0].json = responseData.body;
259
+ }
260
+ }
261
+ return returnData;
262
+ }
263
+ async makeRoutingRequest(requestData, executeSingleFunctions, itemIndex, runIndex, credentialType, requestOperations, credentialsDecrypted) {
264
+ let responseData;
265
+ for (const preSendMethod of requestData.preSend) {
266
+ requestData.options = await preSendMethod.call(executeSingleFunctions, requestData.options);
267
+ }
268
+ const executePaginationFunctions = {
269
+ ...executeSingleFunctions,
270
+ makeRoutingRequest: async (requestOptions) => {
271
+ return this.rawRoutingRequest(executeSingleFunctions, requestOptions, itemIndex, runIndex, credentialType, credentialsDecrypted);
272
+ },
273
+ };
274
+ if (requestData.paginate && requestOperations?.pagination) {
275
+ // Has pagination
276
+ if (typeof requestOperations.pagination === 'function') {
277
+ // Pagination via function
278
+ responseData = await requestOperations.pagination.call(executePaginationFunctions, requestData);
279
+ }
280
+ else {
281
+ // Pagination via JSON properties
282
+ const { properties } = requestOperations.pagination;
283
+ responseData = [];
284
+ if (!requestData.options.qs) {
285
+ requestData.options.qs = {};
286
+ }
287
+ // Different predefined pagination types
288
+ if (requestOperations.pagination.type === 'offset') {
289
+ const optionsType = properties.type === 'body' ? 'body' : 'qs';
290
+ if (properties.type === 'body' && !requestData.options.body) {
291
+ requestData.options.body = {};
292
+ }
293
+ requestData.options[optionsType][properties.limitParameter] =
294
+ properties.pageSize;
295
+ requestData.options[optionsType][properties.offsetParameter] = 0;
296
+ let tempResponseData;
297
+ do {
298
+ if (requestData?.maxResults) {
299
+ // Only request as many results as needed
300
+ const resultsMissing = requestData?.maxResults - responseData.length;
301
+ if (resultsMissing < 1) {
302
+ break;
303
+ }
304
+ requestData.options[optionsType][properties.limitParameter] =
305
+ Math.min(properties.pageSize, resultsMissing);
306
+ }
307
+ tempResponseData = await this.rawRoutingRequest(executeSingleFunctions, requestData, itemIndex, runIndex, credentialType, credentialsDecrypted);
308
+ requestData.options[optionsType][properties.offsetParameter] =
309
+ requestData.options[optionsType][properties.offsetParameter] + properties.pageSize;
310
+ if (properties.rootProperty) {
311
+ const tempResponseValue = get(tempResponseData[0].json, properties.rootProperty);
312
+ if (tempResponseValue === undefined) {
313
+ throw new Error(`The rootProperty "${properties.rootProperty}" could not be found on item.`);
314
+ }
315
+ tempResponseData = tempResponseValue.map((item) => {
316
+ return {
317
+ json: item,
318
+ };
319
+ });
320
+ }
321
+ responseData.push(...tempResponseData);
322
+ } while (tempResponseData.length && tempResponseData.length === properties.pageSize);
323
+ }
324
+ }
325
+ }
326
+ else {
327
+ // No pagination
328
+ responseData = await this.rawRoutingRequest(executeSingleFunctions, requestData, itemIndex, runIndex, credentialType, credentialsDecrypted);
329
+ }
330
+ return responseData;
331
+ }
332
+ getParameterValue(parameterValue, itemIndex, runIndex, additionalKeys, returnObjectAsString = false) {
333
+ if (typeof parameterValue === 'string' && parameterValue.charAt(0) === '=') {
334
+ return this.workflow.expression.getParameterValue(parameterValue, this.runExecutionData ?? null, runIndex, itemIndex, this.node.name, this.connectionInputData, this.mode, additionalKeys ?? {}, returnObjectAsString);
335
+ }
336
+ return parameterValue;
337
+ }
338
+ getRequestOptionsFromParameters(executeSingleFunctions, nodeProperties, itemIndex, runIndex, path, additionalKeys) {
339
+ const returnData = {
340
+ options: {
341
+ qs: {},
342
+ body: {},
343
+ },
344
+ preSend: [],
345
+ postReceive: [],
346
+ requestOperations: {},
347
+ };
348
+ let basePath = path ? `${path}.` : '';
349
+ if (!__1.NodeHelpers.displayParameter(this.node.parameters, nodeProperties, this.node.parameters)) {
350
+ return undefined;
351
+ }
352
+ if (nodeProperties.routing) {
353
+ let parameterValue;
354
+ if (basePath + nodeProperties.name && 'type' in nodeProperties) {
355
+ parameterValue = executeSingleFunctions.getNodeParameter(basePath + nodeProperties.name);
356
+ }
357
+ if (nodeProperties.routing.operations) {
358
+ returnData.requestOperations = { ...nodeProperties.routing.operations };
359
+ }
360
+ if (nodeProperties.routing.request) {
361
+ for (const key of Object.keys(nodeProperties.routing.request)) {
362
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
363
+ let propertyValue = nodeProperties.routing.request[key];
364
+ // If the value is an expression resolve it
365
+ propertyValue = this.getParameterValue(propertyValue, itemIndex, runIndex, { ...additionalKeys, $value: parameterValue }, true);
366
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
367
+ returnData.options[key] = propertyValue;
368
+ }
369
+ }
370
+ if (nodeProperties.routing.send) {
371
+ let propertyName = nodeProperties.routing.send.property;
372
+ if (propertyName !== undefined) {
373
+ // If the propertyName is an expression resolve it
374
+ propertyName = this.getParameterValue(propertyName, itemIndex, runIndex, additionalKeys, true);
375
+ let value = parameterValue;
376
+ if (nodeProperties.routing.send.value) {
377
+ const valueString = nodeProperties.routing.send.value;
378
+ // Special value got set
379
+ // If the valueString is an expression resolve it
380
+ value = this.getParameterValue(valueString, itemIndex, runIndex, { ...additionalKeys, $value: value }, true);
381
+ }
382
+ if (nodeProperties.routing.send.type === 'body') {
383
+ // Send in "body"
384
+ // eslint-disable-next-line no-lonely-if
385
+ if (nodeProperties.routing.send.propertyInDotNotation === false) {
386
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
387
+ returnData.options.body[propertyName] = value;
388
+ }
389
+ else {
390
+ const keys = propertyName.split('.');
391
+ let obj = returnData.options.body;
392
+ while (keys.length > 1) {
393
+ const key = keys.shift();
394
+ if (!(key in obj)) {
395
+ obj[key] = {};
396
+ }
397
+ obj = obj[key];
398
+ }
399
+ obj[keys[0]] = value;
400
+ }
401
+ }
402
+ else {
403
+ // Send in "query"
404
+ // eslint-disable-next-line no-lonely-if
405
+ if (nodeProperties.routing.send.propertyInDotNotation === false) {
406
+ returnData.options.qs[propertyName] = value;
407
+ }
408
+ else {
409
+ const keys = propertyName.split('.');
410
+ let obj = returnData.options.qs;
411
+ while (keys.length > 1) {
412
+ const key = keys.shift();
413
+ if (!(key in obj)) {
414
+ obj[key] = {};
415
+ }
416
+ obj = obj[key];
417
+ }
418
+ obj[keys[0]] = value;
419
+ }
420
+ }
421
+ }
422
+ if (nodeProperties.routing.send.paginate !== undefined) {
423
+ let paginateValue = nodeProperties.routing.send.paginate;
424
+ if (typeof paginateValue === 'string' && paginateValue.charAt(0) === '=') {
425
+ // If the propertyName is an expression resolve it
426
+ paginateValue = this.getParameterValue(paginateValue, itemIndex, runIndex, { ...additionalKeys, $value: parameterValue }, true);
427
+ }
428
+ returnData.paginate = !!paginateValue;
429
+ }
430
+ if (nodeProperties.routing.send.preSend) {
431
+ returnData.preSend.push(...nodeProperties.routing.send.preSend);
432
+ }
433
+ }
434
+ if (nodeProperties.routing.output) {
435
+ if (nodeProperties.routing.output.maxResults !== undefined) {
436
+ let maxResultsValue = nodeProperties.routing.output.maxResults;
437
+ if (typeof maxResultsValue === 'string' && maxResultsValue.charAt(0) === '=') {
438
+ // If the propertyName is an expression resolve it
439
+ maxResultsValue = this.getParameterValue(maxResultsValue, itemIndex, runIndex, { ...additionalKeys, $value: parameterValue }, true);
440
+ }
441
+ returnData.maxResults = maxResultsValue;
442
+ }
443
+ if (nodeProperties.routing.output.postReceive) {
444
+ returnData.postReceive.push({
445
+ data: {
446
+ parameterValue,
447
+ },
448
+ actions: nodeProperties.routing.output.postReceive,
449
+ });
450
+ }
451
+ }
452
+ }
453
+ // Check if there are any child properties
454
+ if (!Object.prototype.hasOwnProperty.call(nodeProperties, 'options')) {
455
+ // There are none so nothing else to check
456
+ return returnData;
457
+ }
458
+ // Everything after this point can only be of type INodeProperties
459
+ nodeProperties = nodeProperties;
460
+ // Check the child parameters
461
+ let value;
462
+ if (nodeProperties.type === 'options') {
463
+ const optionValue = __1.NodeHelpers.getParameterValueByPath(this.node.parameters, nodeProperties.name, basePath.slice(0, -1));
464
+ // Find the selected option
465
+ const selectedOption = nodeProperties.options.filter((option) => option.value === optionValue);
466
+ if (selectedOption.length) {
467
+ // Check only if option is set and if of type INodeProperties
468
+ const tempOptions = this.getRequestOptionsFromParameters(executeSingleFunctions, selectedOption[0], itemIndex, runIndex, `${basePath}${nodeProperties.name}`, { $value: optionValue });
469
+ this.mergeOptions(returnData, tempOptions);
470
+ }
471
+ }
472
+ else if (nodeProperties.type === 'collection') {
473
+ value = __1.NodeHelpers.getParameterValueByPath(this.node.parameters, nodeProperties.name, basePath.slice(0, -1));
474
+ for (const propertyOption of nodeProperties.options) {
475
+ if (Object.keys(value).includes(propertyOption.name) &&
476
+ propertyOption.type !== undefined) {
477
+ // Check only if option is set and if of type INodeProperties
478
+ const tempOptions = this.getRequestOptionsFromParameters(executeSingleFunctions, propertyOption, itemIndex, runIndex, `${basePath}${nodeProperties.name}`);
479
+ this.mergeOptions(returnData, tempOptions);
480
+ }
481
+ }
482
+ }
483
+ else if (nodeProperties.type === 'fixedCollection') {
484
+ basePath = `${basePath}${nodeProperties.name}.`;
485
+ for (const propertyOptions of nodeProperties.options) {
486
+ // Check if the option got set and if not skip it
487
+ value = __1.NodeHelpers.getParameterValueByPath(this.node.parameters, propertyOptions.name, basePath.slice(0, -1));
488
+ if (value === undefined) {
489
+ continue;
490
+ }
491
+ // Make sure that it is always an array to be able to use the same code for multi and single
492
+ if (!Array.isArray(value)) {
493
+ value = [value];
494
+ }
495
+ const loopBasePath = `${basePath}${propertyOptions.name}`;
496
+ for (let i = 0; i < value.length; i++) {
497
+ for (const option of propertyOptions.values) {
498
+ const tempOptions = this.getRequestOptionsFromParameters(executeSingleFunctions, option, itemIndex, runIndex, nodeProperties.typeOptions?.multipleValues ? `${loopBasePath}[${i}]` : loopBasePath, { ...(additionalKeys || {}), $index: i, $parent: value[i] });
499
+ this.mergeOptions(returnData, tempOptions);
500
+ }
501
+ }
502
+ }
503
+ }
504
+ return returnData;
505
+ }
506
+ }
507
+ exports.RoutingNode = RoutingNode;
508
+ //# sourceMappingURL=RoutingNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RoutingNode.js","sourceRoot":"","sources":["../../../src/lib/RoutingNode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { INode, INodesGraphResult, IWorkflowBase, INodeTypes } from '..';
2
+ export declare function getNodeTypeForName(workflow: IWorkflowBase, nodeName: string): INode | undefined;
3
+ export declare function generateNodesGraph(workflow: IWorkflowBase, nodeTypes: INodeTypes): INodesGraphResult;
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getNodeTypeForName = getNodeTypeForName;
4
+ exports.generateNodesGraph = generateNodesGraph;
5
+ const LoggerProxy_1 = require("./LoggerProxy");
6
+ function getNodeTypeForName(workflow, nodeName) {
7
+ return workflow.nodes.find((node) => node.name === nodeName);
8
+ }
9
+ function generateNodesGraph(workflow, nodeTypes) {
10
+ const nodesGraph = {
11
+ node_types: [],
12
+ node_connections: [],
13
+ nodes: {},
14
+ };
15
+ const nodeNameAndIndex = {};
16
+ try {
17
+ workflow.nodes.forEach((node, index) => {
18
+ nodesGraph.node_types.push(node.type);
19
+ const nodeItem = {
20
+ type: node.type,
21
+ position: node.position,
22
+ };
23
+ if (node.type === 'n8n-nodes-base.httpRequest') {
24
+ try {
25
+ nodeItem.domain = new URL(node.parameters['url']).hostname;
26
+ }
27
+ catch (e) {
28
+ nodeItem.domain = node.parameters['url'];
29
+ }
30
+ }
31
+ else {
32
+ const nodeType = nodeTypes.getByNameAndVersion(node.type);
33
+ nodeType?.description.properties.forEach((property) => {
34
+ if (property.name === 'operation' ||
35
+ property.name === 'resource' ||
36
+ property.name === 'mode') {
37
+ nodeItem[property.name] = property.default ? property.default.toString() : undefined;
38
+ }
39
+ });
40
+ nodeItem.operation = node.parameters['operation']?.toString() ?? nodeItem.operation;
41
+ nodeItem.resource = node.parameters['resource']?.toString() ?? nodeItem.resource;
42
+ nodeItem.mode = node.parameters['mode']?.toString() ?? nodeItem.mode;
43
+ }
44
+ nodesGraph.nodes[`${index}`] = nodeItem;
45
+ nodeNameAndIndex[node.name] = index.toString();
46
+ });
47
+ const getGraphConnectionItem = (startNode, connectionItem) => {
48
+ return { start: nodeNameAndIndex[startNode], end: nodeNameAndIndex[connectionItem.node] };
49
+ };
50
+ Object.keys(workflow.connections).forEach((nodeName) => {
51
+ const connections = workflow.connections[nodeName];
52
+ Object.keys(connections).forEach((connection) => {
53
+ connections[connection].forEach((element) => {
54
+ element.forEach((element2) => {
55
+ nodesGraph.node_connections.push(getGraphConnectionItem(nodeName, element2));
56
+ });
57
+ });
58
+ });
59
+ });
60
+ }
61
+ catch (e) {
62
+ const logger = (0, LoggerProxy_1.getInstance)();
63
+ logger.warn(`Failed to generate nodes graph for workflowId: ${workflow.id}`);
64
+ logger.warn(e.message);
65
+ logger.warn(e.stack ?? '');
66
+ }
67
+ return { nodeGraph: nodesGraph, nameIndices: nodeNameAndIndex };
68
+ }
69
+ //# sourceMappingURL=TelemetryHelpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TelemetryHelpers.js","sourceRoot":"","sources":["../../../src/lib/TelemetryHelpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { DateTime } from 'luxon';
2
+ import type { FieldType, FormFieldsParameter, INodePropertyOptions, ValidationResult } from './Interfaces';
3
+ export declare const tryToParseNumber: (value: unknown) => number;
4
+ export declare const tryToParseString: (value: unknown) => string;
5
+ export declare const tryToParseAlphanumericString: (value: unknown) => string;
6
+ export declare const tryToParseBoolean: (value: unknown) => value is boolean;
7
+ export declare const tryToParseDateTime: (value: unknown) => DateTime;
8
+ export declare const tryToParseTime: (value: unknown) => string;
9
+ export declare const tryToParseArray: (value: unknown) => unknown[];
10
+ export declare const tryToParseObject: (value: unknown) => object;
11
+ export declare const tryToParseJsonToFormFields: (value: unknown) => FormFieldsParameter;
12
+ export declare const getValueDescription: <T>(value: T) => string;
13
+ export declare const tryToParseUrl: (value: unknown) => string;
14
+ export declare const tryToParseJwt: (value: unknown) => string;
15
+ type ValidateFieldTypeOptions = Partial<{
16
+ valueOptions: INodePropertyOptions[];
17
+ strict: boolean;
18
+ parseStrings: boolean;
19
+ }>;
20
+ export declare function validateFieldType<K extends FieldType>(fieldName: string, value: unknown, type: K, options?: ValidateFieldTypeOptions): ValidationResult<K>;
21
+ export {};