n8n-core 1.64.0 → 1.66.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/dist/InstanceSettings.d.ts +10 -1
  2. package/dist/InstanceSettings.js +62 -3
  3. package/dist/InstanceSettings.js.map +1 -1
  4. package/dist/InstanceSettingsConfig.d.ts +3 -0
  5. package/dist/InstanceSettingsConfig.js +27 -0
  6. package/dist/InstanceSettingsConfig.js.map +1 -0
  7. package/dist/NodeExecuteFunctions.d.ts +2 -1
  8. package/dist/NodeExecuteFunctions.js +136 -26
  9. package/dist/NodeExecuteFunctions.js.map +1 -1
  10. package/dist/PartialExecutionUtils/DirectedGraph.d.ts +6 -0
  11. package/dist/PartialExecutionUtils/DirectedGraph.js +69 -0
  12. package/dist/PartialExecutionUtils/DirectedGraph.js.map +1 -1
  13. package/dist/PartialExecutionUtils/cleanRunData.d.ts +1 -1
  14. package/dist/PartialExecutionUtils/cleanRunData.js.map +1 -1
  15. package/dist/PartialExecutionUtils/findStartNodes.d.ts +1 -1
  16. package/dist/PartialExecutionUtils/findStartNodes.js +1 -1
  17. package/dist/PartialExecutionUtils/findStartNodes.js.map +1 -1
  18. package/dist/PartialExecutionUtils/getIncomingData.d.ts +4 -0
  19. package/dist/PartialExecutionUtils/getIncomingData.js +14 -0
  20. package/dist/PartialExecutionUtils/getIncomingData.js.map +1 -1
  21. package/dist/PartialExecutionUtils/getSourceDataGroups.d.ts +6 -1
  22. package/dist/PartialExecutionUtils/getSourceDataGroups.js +34 -13
  23. package/dist/PartialExecutionUtils/getSourceDataGroups.js.map +1 -1
  24. package/dist/PartialExecutionUtils/handleCycles.d.ts +3 -0
  25. package/dist/PartialExecutionUtils/handleCycles.js +50 -0
  26. package/dist/PartialExecutionUtils/handleCycles.js.map +1 -0
  27. package/dist/PartialExecutionUtils/index.d.ts +2 -1
  28. package/dist/PartialExecutionUtils/index.js +5 -3
  29. package/dist/PartialExecutionUtils/index.js.map +1 -1
  30. package/dist/PartialExecutionUtils/recreateNodeExecutionStack.d.ts +4 -2
  31. package/dist/PartialExecutionUtils/recreateNodeExecutionStack.js +67 -57
  32. package/dist/PartialExecutionUtils/recreateNodeExecutionStack.js.map +1 -1
  33. package/dist/WorkflowExecute.js +4 -8
  34. package/dist/WorkflowExecute.js.map +1 -1
  35. package/dist/build.tsbuildinfo +1 -1
  36. package/package.json +5 -4
  37. package/dist/PartialExecutionUtils/findCycles.d.ts +0 -2
  38. package/dist/PartialExecutionUtils/findCycles.js +0 -7
  39. package/dist/PartialExecutionUtils/findCycles.js.map +0 -1
@@ -1,19 +1,25 @@
1
+ import { InstanceSettingsConfig } from './InstanceSettingsConfig';
1
2
  interface WritableSettings {
2
3
  tunnelSubdomain?: string;
3
4
  }
4
5
  type InstanceRole = 'unset' | 'leader' | 'follower';
5
6
  export type InstanceType = 'main' | 'webhook' | 'worker';
6
7
  export declare class InstanceSettings {
8
+ private readonly config;
7
9
  private readonly userHome;
8
10
  readonly n8nFolder: string;
9
11
  readonly staticCacheDir: string;
10
12
  readonly customExtensionDir: string;
11
13
  readonly nodesDownloadDir: string;
12
14
  private readonly settingsFile;
15
+ readonly enforceSettingsFilePermissions: {
16
+ isSet: boolean;
17
+ enforce: boolean;
18
+ };
13
19
  private settings;
14
20
  readonly instanceId: string;
15
21
  readonly instanceType: InstanceType;
16
- constructor();
22
+ constructor(config: InstanceSettingsConfig);
17
23
  instanceRole: InstanceRole;
18
24
  readonly hostId: string;
19
25
  get isLeader(): boolean;
@@ -27,5 +33,8 @@ export declare class InstanceSettings {
27
33
  private loadOrCreate;
28
34
  private generateInstanceId;
29
35
  private save;
36
+ private loadEnforceSettingsFilePermissionsFlag;
37
+ private ensureSettingsFilePermissions;
38
+ private isWindows;
30
39
  }
31
40
  export {};
@@ -19,16 +19,19 @@ const n8n_workflow_1 = require("n8n-workflow");
19
19
  const nanoid_1 = require("nanoid");
20
20
  const path_1 = __importDefault(require("path"));
21
21
  const typedi_1 = require("typedi");
22
+ const InstanceSettingsConfig_1 = require("./InstanceSettingsConfig");
22
23
  const nanoid = (0, nanoid_1.customAlphabet)(n8n_workflow_1.ALPHABET, 16);
23
24
  const inTest = process.env.NODE_ENV === 'test';
24
25
  let InstanceSettings = class InstanceSettings {
25
- constructor() {
26
+ constructor(config) {
27
+ this.config = config;
26
28
  this.userHome = this.getUserHome();
27
29
  this.n8nFolder = path_1.default.join(this.userHome, '.n8n');
28
30
  this.staticCacheDir = path_1.default.join(this.userHome, '.cache/n8n/public');
29
31
  this.customExtensionDir = path_1.default.join(this.n8nFolder, 'custom');
30
32
  this.nodesDownloadDir = path_1.default.join(this.n8nFolder, 'nodes');
31
33
  this.settingsFile = path_1.default.join(this.n8nFolder, 'config');
34
+ this.enforceSettingsFilePermissions = this.loadEnforceSettingsFilePermissionsFlag();
32
35
  this.settings = this.loadOrCreate();
33
36
  this.instanceId = this.generateInstanceId();
34
37
  this.instanceRole = 'unset';
@@ -66,6 +69,7 @@ let InstanceSettings = class InstanceSettings {
66
69
  loadOrCreate() {
67
70
  if ((0, fs_1.existsSync)(this.settingsFile)) {
68
71
  const content = (0, fs_1.readFileSync)(this.settingsFile, 'utf8');
72
+ this.ensureSettingsFilePermissions();
69
73
  const settings = (0, n8n_workflow_1.jsonParse)(content, {
70
74
  errorMessage: `Error parsing n8n-config file "${this.settingsFile}". It does not seem to be valid JSON.`,
71
75
  });
@@ -84,6 +88,7 @@ let InstanceSettings = class InstanceSettings {
84
88
  if (!inTest && !process.env.N8N_ENCRYPTION_KEY) {
85
89
  console.info(`No encryption key found - Auto-generated and saved to: ${this.settingsFile}`);
86
90
  }
91
+ this.ensureSettingsFilePermissions();
87
92
  return settings;
88
93
  }
89
94
  generateInstanceId() {
@@ -94,12 +99,66 @@ let InstanceSettings = class InstanceSettings {
94
99
  }
95
100
  save(settings) {
96
101
  this.settings = settings;
97
- (0, fs_1.writeFileSync)(this.settingsFile, JSON.stringify(settings, null, '\t'), 'utf-8');
102
+ (0, fs_1.writeFileSync)(this.settingsFile, JSON.stringify(this.settings, null, '\t'), {
103
+ mode: this.enforceSettingsFilePermissions.enforce ? 0o600 : undefined,
104
+ encoding: 'utf-8',
105
+ });
106
+ }
107
+ loadEnforceSettingsFilePermissionsFlag() {
108
+ const { enforceSettingsFilePermissions } = this.config;
109
+ const isEnvVarSet = !!process.env.N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS;
110
+ if (this.isWindows()) {
111
+ if (isEnvVarSet) {
112
+ console.warn('Ignoring N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS as it is not supported on Windows.');
113
+ }
114
+ return {
115
+ isSet: isEnvVarSet,
116
+ enforce: false,
117
+ };
118
+ }
119
+ return {
120
+ isSet: isEnvVarSet,
121
+ enforce: enforceSettingsFilePermissions,
122
+ };
123
+ }
124
+ ensureSettingsFilePermissions() {
125
+ if (this.enforceSettingsFilePermissions.isSet && !this.enforceSettingsFilePermissions.enforce) {
126
+ return;
127
+ }
128
+ if (this.isWindows()) {
129
+ return;
130
+ }
131
+ const permissionsResult = (0, n8n_workflow_1.toResult)(() => {
132
+ const stats = (0, fs_1.statSync)(this.settingsFile);
133
+ return stats.mode & 0o777;
134
+ });
135
+ if (!permissionsResult.ok) {
136
+ console.warn(`Could not ensure settings file permissions: ${permissionsResult.error.message}. To skip this check, set N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=false.`);
137
+ return;
138
+ }
139
+ const arePermissionsCorrect = permissionsResult.result === 0o600;
140
+ if (arePermissionsCorrect) {
141
+ return;
142
+ }
143
+ if (!this.enforceSettingsFilePermissions.isSet) {
144
+ console.warn(`Permissions 0${permissionsResult.result.toString(8)} for n8n settings file ${this.settingsFile} are too wide. This is ignored for now, but in the future n8n will attempt to change the permissions automatically. To automatically enforce correct permissions now set N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true (recommended), or turn this check off set N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=false.`);
145
+ return;
146
+ }
147
+ if (this.enforceSettingsFilePermissions.enforce) {
148
+ console.warn(`Permissions 0${permissionsResult.result.toString(8)} for n8n settings file ${this.settingsFile} are too wide. Changing permissions to 0600..`);
149
+ const chmodResult = (0, n8n_workflow_1.toResult)(() => (0, fs_1.chmodSync)(this.settingsFile, 0o600));
150
+ if (!chmodResult.ok) {
151
+ console.warn(`Could not enforce settings file permissions: ${chmodResult.error.message}. To skip this check, set N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=false.`);
152
+ }
153
+ }
154
+ }
155
+ isWindows() {
156
+ return process.platform === 'win32';
98
157
  }
99
158
  };
100
159
  exports.InstanceSettings = InstanceSettings;
101
160
  exports.InstanceSettings = InstanceSettings = __decorate([
102
161
  (0, typedi_1.Service)(),
103
- __metadata("design:paramtypes", [])
162
+ __metadata("design:paramtypes", [InstanceSettingsConfig_1.InstanceSettingsConfig])
104
163
  ], InstanceSettings);
105
164
  //# sourceMappingURL=InstanceSettings.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"InstanceSettings.js","sourceRoot":"","sources":["../src/InstanceSettings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"InstanceSettings.js","sourceRoot":"","sources":["../src/InstanceSettings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare class InstanceSettingsConfig {
2
+ enforceSettingsFilePermissions: boolean;
3
+ }
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.InstanceSettingsConfig = void 0;
13
+ const config_1 = require("@n8n/config");
14
+ let InstanceSettingsConfig = class InstanceSettingsConfig {
15
+ constructor() {
16
+ this.enforceSettingsFilePermissions = false;
17
+ }
18
+ };
19
+ exports.InstanceSettingsConfig = InstanceSettingsConfig;
20
+ __decorate([
21
+ (0, config_1.Env)('N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS'),
22
+ __metadata("design:type", Boolean)
23
+ ], InstanceSettingsConfig.prototype, "enforceSettingsFilePermissions", void 0);
24
+ exports.InstanceSettingsConfig = InstanceSettingsConfig = __decorate([
25
+ config_1.Config
26
+ ], InstanceSettingsConfig);
27
+ //# sourceMappingURL=InstanceSettingsConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InstanceSettingsConfig.js","sourceRoot":"","sources":["../src/InstanceSettingsConfig.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wCAA0C;AAGnC,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IAA5B;QAON,mCAA8B,GAAY,KAAK,CAAC;IACjD,CAAC;CAAA,CAAA;AARY,wDAAsB;AAOlC;IADC,IAAA,YAAG,EAAC,uCAAuC,CAAC;;8EACG;iCAPpC,sBAAsB;IADlC,eAAM;GACM,sBAAsB,CAQlC"}
@@ -1,6 +1,6 @@
1
1
  import type { AxiosRequestConfig } from 'axios';
2
2
  import { IncomingMessage } from 'http';
3
- import type { CloseFunction, IAdditionalCredentialOptions, IAllExecuteFunctions, IBinaryData, ICredentialDataDecryptedObject, ICredentialTestFunctions, IDataObject, IExecuteData, IExecuteFunctions, IExecuteSingleFunctions, IGetNodeParameterOptions, IHookFunctions, IHttpRequestOptions, ILoadOptionsFunctions, INode, INodeExecutionData, INodeType, IOAuth2Options, IPairedItemData, IPollFunctions, IRequestOptions, IRunExecutionData, ITaskDataConnections, ITriggerFunctions, IWebhookData, IWebhookDescription, IWebhookFunctions, IWorkflowDataProxyAdditionalKeys, IWorkflowExecuteAdditionalData, NodeExecutionWithMetadata, NodeParameterValueType, Workflow, WorkflowActivateMode, WorkflowExecuteMode, EnsureTypeOptions, IDeduplicationOutput, IDeduplicationOutputItems, ICheckProcessedOptions, DeduplicationScope, DeduplicationItemTypes, ICheckProcessedContextData } from 'n8n-workflow';
3
+ import type { CloseFunction, IAdditionalCredentialOptions, IAllExecuteFunctions, IBinaryData, ICredentialDataDecryptedObject, ICredentialTestFunctions, IDataObject, IExecuteData, IExecuteFunctions, IExecuteSingleFunctions, IGetNodeParameterOptions, IHookFunctions, IHttpRequestOptions, ILoadOptionsFunctions, INode, INodeExecutionData, INodeType, IOAuth2Options, IPairedItemData, IPollFunctions, IRequestOptions, IRunExecutionData, ITaskDataConnections, ITriggerFunctions, IWebhookData, IWebhookDescription, IWebhookFunctions, IWorkflowDataProxyAdditionalKeys, IWorkflowExecuteAdditionalData, NodeExecutionWithMetadata, NodeParameterValueType, Workflow, WorkflowActivateMode, WorkflowExecuteMode, EnsureTypeOptions, IDeduplicationOutput, IDeduplicationOutputItems, ICheckProcessedOptions, DeduplicationScope, DeduplicationItemTypes, ICheckProcessedContextData, ISupplyDataFunctions } from 'n8n-workflow';
4
4
  import { Readable } from 'stream';
5
5
  import type { BinaryData } from './BinaryData/types';
6
6
  export declare function parseRequestObject(requestObject: IRequestOptions): Promise<AxiosRequestConfig<any>>;
@@ -48,6 +48,7 @@ export declare function copyInputItems(items: INodeExecutionData[], properties:
48
48
  export declare function getExecutePollFunctions(workflow: Workflow, node: INode, additionalData: IWorkflowExecuteAdditionalData, mode: WorkflowExecuteMode, activation: WorkflowActivateMode): IPollFunctions;
49
49
  export declare function getExecuteTriggerFunctions(workflow: Workflow, node: INode, additionalData: IWorkflowExecuteAdditionalData, mode: WorkflowExecuteMode, activation: WorkflowActivateMode): ITriggerFunctions;
50
50
  export declare function getExecuteFunctions(workflow: Workflow, runExecutionData: IRunExecutionData, runIndex: number, connectionInputData: INodeExecutionData[], inputData: ITaskDataConnections, node: INode, additionalData: IWorkflowExecuteAdditionalData, executeData: IExecuteData, mode: WorkflowExecuteMode, closeFunctions: CloseFunction[], abortSignal?: AbortSignal): IExecuteFunctions;
51
+ export declare function getSupplyDataFunctions(workflow: Workflow, runExecutionData: IRunExecutionData, runIndex: number, connectionInputData: INodeExecutionData[], inputData: ITaskDataConnections, node: INode, additionalData: IWorkflowExecuteAdditionalData, executeData: IExecuteData, mode: WorkflowExecuteMode, closeFunctions: CloseFunction[], abortSignal?: AbortSignal): ISupplyDataFunctions;
51
52
  export declare function getExecuteSingleFunctions(workflow: Workflow, runExecutionData: IRunExecutionData, runIndex: number, connectionInputData: INodeExecutionData[], inputData: ITaskDataConnections, node: INode, itemIndex: number, additionalData: IWorkflowExecuteAdditionalData, executeData: IExecuteData, mode: WorkflowExecuteMode, abortSignal?: AbortSignal): IExecuteSingleFunctions;
52
53
  export declare function getCredentialTestFunctions(): ICredentialTestFunctions;
53
54
  export declare function getLoadOptionsFunctions(workflow: Workflow, node: INode, path: string, additionalData: IWorkflowExecuteAdditionalData): ILoadOptionsFunctions;
@@ -62,6 +62,7 @@ exports.copyInputItems = copyInputItems;
62
62
  exports.getExecutePollFunctions = getExecutePollFunctions;
63
63
  exports.getExecuteTriggerFunctions = getExecuteTriggerFunctions;
64
64
  exports.getExecuteFunctions = getExecuteFunctions;
65
+ exports.getSupplyDataFunctions = getSupplyDataFunctions;
65
66
  exports.getExecuteSingleFunctions = getExecuteSingleFunctions;
66
67
  exports.getCredentialTestFunctions = getCredentialTestFunctions;
67
68
  exports.getLoadOptionsFunctions = getLoadOptionsFunctions;
@@ -1782,7 +1783,7 @@ const addExecutionDataFunctions = async (type, nodeName, data, runExecutionData,
1782
1783
  });
1783
1784
  }
1784
1785
  };
1785
- async function getInputConnectionData(workflow, runExecutionData, runIndex, connectionInputData, additionalData, executeData, mode, closeFunctions, inputName, itemIndex) {
1786
+ async function getInputConnectionData(workflow, runExecutionData, runIndex, connectionInputData, inputData, additionalData, executeData, mode, closeFunctions, inputName, itemIndex, abortSignal) {
1786
1787
  const node = this.getNode();
1787
1788
  const nodeType = workflow.nodeTypes.getByNameAndVersion(node.type, node.typeVersion);
1788
1789
  const inputs = n8n_workflow_1.NodeHelpers.getNodeInputs(workflow, node, nodeType.description);
@@ -1816,26 +1817,7 @@ async function getInputConnectionData(workflow, runExecutionData, runIndex, conn
1816
1817
  .filter((connectedNode) => connectedNode.disabled !== true)
1817
1818
  .map(async (connectedNode) => {
1818
1819
  const nodeType = workflow.nodeTypes.getByNameAndVersion(connectedNode.type, connectedNode.typeVersion);
1819
- const context = Object.assign({}, this);
1820
- context.getNodeParameter = (parameterName, itemIndex, fallbackValue, options) => {
1821
- return getNodeParameter(workflow, runExecutionData, runIndex, connectionInputData, connectedNode, parameterName, itemIndex, mode, getAdditionalKeys(additionalData, mode, runExecutionData), executeData, fallbackValue, { ...(options || {}), contextNode: node });
1822
- };
1823
- context.getNode = () => {
1824
- return (0, n8n_workflow_1.deepCopy)(connectedNode);
1825
- };
1826
- context.getCredentials = async (key) => {
1827
- try {
1828
- return await getCredentials(workflow, connectedNode, key, additionalData, mode, executeData, runExecutionData, runIndex, connectionInputData, itemIndex);
1829
- }
1830
- catch (error) {
1831
- let currentNodeRunIndex = 0;
1832
- if (runExecutionData.resultData.runData.hasOwnProperty(node.name)) {
1833
- currentNodeRunIndex = runExecutionData.resultData.runData[node.name].length;
1834
- }
1835
- await addExecutionDataFunctions('input', connectedNode.name, error, runExecutionData, inputName, additionalData, node.name, runIndex, currentNodeRunIndex);
1836
- throw error;
1837
- }
1838
- };
1820
+ const context = getSupplyDataFunctions(workflow, runExecutionData, runIndex, connectionInputData, inputData, connectedNode, additionalData, executeData, mode, closeFunctions, abortSignal);
1839
1821
  if (!nodeType.supplyData) {
1840
1822
  if (nodeType.description.outputs.includes("ai_tool")) {
1841
1823
  nodeType.supplyData = async function () {
@@ -2313,7 +2295,7 @@ function getExecuteFunctions(workflow, runExecutionData, runIndex, connectionInp
2313
2295
  continueOnFail: () => {
2314
2296
  return continueOnFail(node);
2315
2297
  },
2316
- evaluateExpression: (expression, itemIndex) => {
2298
+ evaluateExpression(expression, itemIndex) {
2317
2299
  return workflow.expression.resolveSimpleParameterValue(`=${expression}`, {}, runExecutionData, runIndex, itemIndex, node.name, connectionInputData, mode, getAdditionalKeys(additionalData, mode, runExecutionData), executeData);
2318
2300
  },
2319
2301
  async executeWorkflow(workflowInfo, inputData, parentCallbackManager) {
@@ -2331,7 +2313,7 @@ function getExecuteFunctions(workflow, runExecutionData, runIndex, connectionInp
2331
2313
  return n8n_workflow_1.NodeHelpers.getContext(runExecutionData, type, node);
2332
2314
  },
2333
2315
  async getInputConnectionData(inputName, itemIndex) {
2334
- return await getInputConnectionData.call(this, workflow, runExecutionData, runIndex, connectionInputData, additionalData, executeData, mode, closeFunctions, inputName, itemIndex);
2316
+ return await getInputConnectionData.call(this, workflow, runExecutionData, runIndex, connectionInputData, inputData, additionalData, executeData, mode, closeFunctions, inputName, itemIndex, abortSignal);
2335
2317
  },
2336
2318
  getNodeInputs() {
2337
2319
  const nodeType = workflow.nodeTypes.getByNameAndVersion(node.type, node.typeVersion);
@@ -2458,7 +2440,7 @@ function getExecuteFunctions(workflow, runExecutionData, runIndex, connectionInp
2458
2440
  constructExecutionMetaData,
2459
2441
  },
2460
2442
  nodeHelpers: getNodeHelperFunctions(additionalData, workflow.id),
2461
- logAiEvent: async (eventName, msg) => {
2443
+ logAiEvent: (eventName, msg) => {
2462
2444
  return additionalData.logAiEvent(eventName, {
2463
2445
  executionId: additionalData.executionId ?? 'unsaved-execution',
2464
2446
  nodeName: node.name,
@@ -2473,6 +2455,120 @@ function getExecuteFunctions(workflow, runExecutionData, runIndex, connectionInp
2473
2455
  };
2474
2456
  })(workflow, runExecutionData, connectionInputData, inputData, node);
2475
2457
  }
2458
+ function getSupplyDataFunctions(workflow, runExecutionData, runIndex, connectionInputData, inputData, node, additionalData, executeData, mode, closeFunctions, abortSignal) {
2459
+ return {
2460
+ ...getCommonWorkflowFunctions(workflow, node, additionalData),
2461
+ ...executionCancellationFunctions(abortSignal),
2462
+ getMode: () => mode,
2463
+ getCredentials: async (type, itemIndex) => await getCredentials(workflow, node, type, additionalData, mode, executeData, runExecutionData, runIndex, connectionInputData, itemIndex),
2464
+ continueOnFail: () => continueOnFail(node),
2465
+ evaluateExpression: (expression, itemIndex) => workflow.expression.resolveSimpleParameterValue(`=${expression}`, {}, runExecutionData, runIndex, itemIndex, node.name, connectionInputData, mode, getAdditionalKeys(additionalData, mode, runExecutionData), executeData),
2466
+ executeWorkflow: async (workflowInfo, inputData, parentCallbackManager) => await additionalData
2467
+ .executeWorkflow(workflowInfo, additionalData, {
2468
+ parentWorkflowId: workflow.id?.toString(),
2469
+ inputData,
2470
+ parentWorkflowSettings: workflow.settings,
2471
+ node,
2472
+ parentCallbackManager,
2473
+ })
2474
+ .then(async (result) => await typedi_1.default.get(BinaryData_service_1.BinaryDataService).duplicateBinaryData(workflow.id, additionalData.executionId, result)),
2475
+ getNodeOutputs() {
2476
+ const nodeType = workflow.nodeTypes.getByNameAndVersion(node.type, node.typeVersion);
2477
+ return n8n_workflow_1.NodeHelpers.getNodeOutputs(workflow, node, nodeType.description).map((output) => {
2478
+ if (typeof output === 'string') {
2479
+ return {
2480
+ type: output,
2481
+ };
2482
+ }
2483
+ return output;
2484
+ });
2485
+ },
2486
+ async getInputConnectionData(inputName, itemIndex) {
2487
+ return await getInputConnectionData.call(this, workflow, runExecutionData, runIndex, connectionInputData, inputData, additionalData, executeData, mode, closeFunctions, inputName, itemIndex, abortSignal);
2488
+ },
2489
+ getInputData: (inputIndex = 0, inputName = 'main') => {
2490
+ if (!inputData.hasOwnProperty(inputName)) {
2491
+ return [];
2492
+ }
2493
+ if (inputData[inputName].length < inputIndex) {
2494
+ throw new n8n_workflow_1.ApplicationError('Could not get input with given index', {
2495
+ extra: { inputIndex, inputName },
2496
+ });
2497
+ }
2498
+ if (inputData[inputName][inputIndex] === null) {
2499
+ throw new n8n_workflow_1.ApplicationError('Value of input was not set', {
2500
+ extra: { inputIndex, inputName },
2501
+ });
2502
+ }
2503
+ return inputData[inputName][inputIndex];
2504
+ },
2505
+ getNodeParameter: ((parameterName, itemIndex, fallbackValue, options) => getNodeParameter(workflow, runExecutionData, runIndex, connectionInputData, node, parameterName, itemIndex, mode, getAdditionalKeys(additionalData, mode, runExecutionData), executeData, fallbackValue, options)),
2506
+ getWorkflowDataProxy: (itemIndex) => new n8n_workflow_1.WorkflowDataProxy(workflow, runExecutionData, runIndex, itemIndex, node.name, connectionInputData, {}, mode, getAdditionalKeys(additionalData, mode, runExecutionData), executeData).getDataProxy(),
2507
+ sendMessageToUI(...args) {
2508
+ if (mode !== 'manual') {
2509
+ return;
2510
+ }
2511
+ try {
2512
+ if (additionalData.sendDataToUI) {
2513
+ args = args.map((arg) => {
2514
+ if (arg.isLuxonDateTime && arg.invalidReason)
2515
+ return { ...arg };
2516
+ if (arg.isLuxonDateTime)
2517
+ return new Date(arg.ts).toString();
2518
+ if (arg instanceof Date)
2519
+ return arg.toString();
2520
+ return arg;
2521
+ });
2522
+ additionalData.sendDataToUI('sendConsoleMessage', {
2523
+ source: `[Node: "${node.name}"]`,
2524
+ messages: args,
2525
+ });
2526
+ }
2527
+ }
2528
+ catch (error) {
2529
+ n8n_workflow_1.LoggerProxy.warn(`There was a problem sending message to UI: ${error.message}`);
2530
+ }
2531
+ },
2532
+ logAiEvent: (eventName, msg) => additionalData.logAiEvent(eventName, {
2533
+ executionId: additionalData.executionId ?? 'unsaved-execution',
2534
+ nodeName: node.name,
2535
+ workflowName: workflow.name ?? 'Unnamed workflow',
2536
+ nodeType: node.type,
2537
+ workflowId: workflow.id ?? 'unsaved-workflow',
2538
+ msg,
2539
+ }),
2540
+ addInputData(connectionType, data) {
2541
+ const nodeName = this.getNode().name;
2542
+ let currentNodeRunIndex = 0;
2543
+ if (runExecutionData.resultData.runData.hasOwnProperty(nodeName)) {
2544
+ currentNodeRunIndex = runExecutionData.resultData.runData[nodeName].length;
2545
+ }
2546
+ addExecutionDataFunctions('input', this.getNode().name, data, runExecutionData, connectionType, additionalData, node.name, runIndex, currentNodeRunIndex).catch((error) => {
2547
+ n8n_workflow_1.LoggerProxy.warn(`There was a problem logging input data of node "${this.getNode().name}": ${error.message}`);
2548
+ });
2549
+ return { index: currentNodeRunIndex };
2550
+ },
2551
+ addOutputData(connectionType, currentNodeRunIndex, data) {
2552
+ addExecutionDataFunctions('output', this.getNode().name, data, runExecutionData, connectionType, additionalData, node.name, runIndex, currentNodeRunIndex).catch((error) => {
2553
+ n8n_workflow_1.LoggerProxy.warn(`There was a problem logging output data of node "${this.getNode().name}": ${error.message}`);
2554
+ });
2555
+ },
2556
+ helpers: {
2557
+ createDeferredPromise: n8n_workflow_1.createDeferredPromise,
2558
+ copyInputItems,
2559
+ ...getRequestHelperFunctions(workflow, node, additionalData, runExecutionData, connectionInputData),
2560
+ ...getSSHTunnelFunctions(),
2561
+ ...getFileSystemHelperFunctions(node),
2562
+ ...getBinaryHelperFunctions(additionalData, workflow.id),
2563
+ ...getCheckProcessedHelperFunctions(workflow, node),
2564
+ assertBinaryData: (itemIndex, propertyName) => assertBinaryData(inputData, node, itemIndex, propertyName, 0),
2565
+ getBinaryDataBuffer: async (itemIndex, propertyName) => await getBinaryDataBuffer(inputData, itemIndex, propertyName, 0),
2566
+ returnJsonArray,
2567
+ normalizeItems,
2568
+ constructExecutionMetaData,
2569
+ },
2570
+ };
2571
+ }
2476
2572
  function getExecuteSingleFunctions(workflow, runExecutionData, runIndex, connectionInputData, inputData, node, itemIndex, additionalData, executeData, mode, abortSignal) {
2477
2573
  return ((workflow, runExecutionData, connectionInputData, inputData, node, itemIndex) => {
2478
2574
  return {
@@ -2532,7 +2628,7 @@ function getExecuteSingleFunctions(workflow, runExecutionData, runIndex, connect
2532
2628
  assertBinaryData: (propertyName, inputIndex = 0) => assertBinaryData(inputData, node, itemIndex, propertyName, inputIndex),
2533
2629
  getBinaryDataBuffer: async (propertyName, inputIndex = 0) => await getBinaryDataBuffer(inputData, itemIndex, propertyName, inputIndex),
2534
2630
  },
2535
- logAiEvent: async (eventName, msg) => {
2631
+ logAiEvent: (eventName, msg) => {
2536
2632
  return additionalData.logAiEvent(eventName, {
2537
2633
  executionId: additionalData.executionId ?? 'unsaved-execution',
2538
2634
  nodeName: node.name,
@@ -2655,9 +2751,23 @@ function getExecuteWebhookFunctions(workflow, node, additionalData, mode, webhoo
2655
2751
  source: null,
2656
2752
  };
2657
2753
  const runIndex = 0;
2658
- return await getInputConnectionData.call(this, workflow, runExecutionData, runIndex, connectionInputData, additionalData, executeData, mode, closeFunctions, inputName, itemIndex);
2754
+ return await getInputConnectionData.call(this, workflow, runExecutionData, runIndex, connectionInputData, {}, additionalData, executeData, mode, closeFunctions, inputName, itemIndex);
2659
2755
  },
2660
2756
  getMode: () => mode,
2757
+ evaluateExpression: (expression, evaluateItemIndex) => {
2758
+ const itemIndex = evaluateItemIndex === undefined ? 0 : evaluateItemIndex;
2759
+ const runIndex = 0;
2760
+ let connectionInputData = [];
2761
+ let executionData;
2762
+ if (runExecutionData?.executionData !== undefined) {
2763
+ executionData = runExecutionData.executionData.nodeExecutionStack[0];
2764
+ if (executionData !== undefined) {
2765
+ connectionInputData = executionData.data.main[0];
2766
+ }
2767
+ }
2768
+ const additionalKeys = getAdditionalKeys(additionalData, mode, runExecutionData);
2769
+ return workflow.expression.resolveSimpleParameterValue(`=${expression}`, {}, runExecutionData, runIndex, itemIndex, node.name, connectionInputData, mode, additionalKeys, executionData);
2770
+ },
2661
2771
  getNodeParameter: (parameterName, fallbackValue, options) => {
2662
2772
  const itemIndex = 0;
2663
2773
  const runIndex = 0;