n8n-core 1.73.0 → 1.74.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.
- package/LICENSE.md +5 -3
- package/dist/ActiveWorkflows.d.ts +5 -3
- package/dist/ActiveWorkflows.js +17 -12
- package/dist/ActiveWorkflows.js.map +1 -1
- package/dist/BinaryData/BinaryData.service.js +3 -3
- package/dist/BinaryData/BinaryData.service.js.map +1 -1
- package/dist/BinaryData/ObjectStore.manager.js +2 -2
- package/dist/BinaryData/ObjectStore.manager.js.map +1 -1
- package/dist/Cipher.js +2 -2
- package/dist/Cipher.js.map +1 -1
- package/dist/Constants.d.ts +2 -0
- package/dist/Constants.js +4 -1
- package/dist/Constants.js.map +1 -1
- package/dist/CreateNodeAsTool.js.map +1 -1
- package/dist/Credentials.js +2 -2
- package/dist/Credentials.js.map +1 -1
- package/dist/DirectoryLoader.d.ts +2 -0
- package/dist/DirectoryLoader.js +7 -4
- package/dist/DirectoryLoader.js.map +1 -1
- package/dist/InstanceSettings.d.ts +4 -3
- package/dist/InstanceSettings.js +18 -17
- package/dist/InstanceSettings.js.map +1 -1
- package/dist/InstanceSettingsConfig.d.ts +3 -0
- package/dist/InstanceSettingsConfig.js +9 -1
- package/dist/InstanceSettingsConfig.js.map +1 -1
- package/dist/NodeExecuteFunctions.d.ts +1 -2
- package/dist/NodeExecuteFunctions.js +22 -127
- package/dist/NodeExecuteFunctions.js.map +1 -1
- package/dist/ObjectStore/ObjectStore.service.ee.d.ts +3 -1
- package/dist/ObjectStore/ObjectStore.service.ee.js +9 -4
- package/dist/ObjectStore/ObjectStore.service.ee.js.map +1 -1
- package/dist/SSHClientsManager.js +2 -2
- package/dist/SSHClientsManager.js.map +1 -1
- package/dist/ScheduledTaskManager.js +2 -2
- package/dist/ScheduledTaskManager.js.map +1 -1
- package/dist/SerializedBuffer.js +2 -4
- package/dist/SerializedBuffer.js.map +1 -1
- package/dist/TriggersAndPollers.js +2 -2
- package/dist/TriggersAndPollers.js.map +1 -1
- package/dist/WorkflowExecute.d.ts +2 -0
- package/dist/WorkflowExecute.js +116 -116
- package/dist/WorkflowExecute.js.map +1 -1
- package/dist/build.tsbuildinfo +1 -1
- package/dist/error-reporter.d.ts +3 -1
- package/dist/error-reporter.js +13 -6
- package/dist/error-reporter.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/logging/logger.d.ts +34 -0
- package/dist/logging/logger.js +210 -0
- package/dist/logging/logger.js.map +1 -0
- package/dist/node-execution-context/base-execute-context.d.ts +1 -3
- package/dist/node-execution-context/base-execute-context.js +2 -10
- package/dist/node-execution-context/base-execute-context.js.map +1 -1
- package/dist/node-execution-context/execute-context.js +3 -2
- package/dist/node-execution-context/execute-context.js.map +1 -1
- package/dist/node-execution-context/index.d.ts +2 -1
- package/dist/node-execution-context/index.js +5 -3
- package/dist/node-execution-context/index.js.map +1 -1
- package/dist/node-execution-context/local-load-options-context.d.ts +10 -0
- package/dist/node-execution-context/local-load-options-context.js +49 -0
- package/dist/node-execution-context/local-load-options-context.js.map +1 -0
- package/dist/node-execution-context/node-execution-context.d.ts +10 -4
- package/dist/node-execution-context/node-execution-context.js +70 -8
- package/dist/node-execution-context/node-execution-context.js.map +1 -1
- package/dist/node-execution-context/supply-data-context.js +2 -1
- package/dist/node-execution-context/supply-data-context.js.map +1 -1
- package/dist/node-execution-context/utils/cleanupParameterData.d.ts +2 -0
- package/dist/node-execution-context/utils/cleanupParameterData.js +27 -0
- package/dist/node-execution-context/utils/cleanupParameterData.js.map +1 -0
- package/dist/node-execution-context/utils/ensureType.d.ts +6 -0
- package/dist/node-execution-context/utils/ensureType.js +75 -0
- package/dist/node-execution-context/utils/ensureType.js.map +1 -0
- package/dist/node-execution-context/utils/getAdditionalKeys.d.ts +4 -0
- package/dist/node-execution-context/utils/getAdditionalKeys.js +57 -0
- package/dist/node-execution-context/utils/getAdditionalKeys.js.map +1 -0
- package/dist/node-execution-context/utils/getInputConnectionData.d.ts +4 -0
- package/dist/node-execution-context/utils/getInputConnectionData.js +99 -0
- package/dist/node-execution-context/utils/getInputConnectionData.js.map +1 -0
- package/dist/node-execution-context/utils/validateValueAgainstSchema.d.ts +2 -0
- package/dist/node-execution-context/utils/validateValueAgainstSchema.js +129 -0
- package/dist/node-execution-context/utils/validateValueAgainstSchema.js.map +1 -0
- package/dist/node-execution-context/webhook-context.js +2 -1
- package/dist/node-execution-context/webhook-context.js.map +1 -1
- package/dist/node-execution-context/workflow-node-context.d.ts +6 -0
- package/dist/node-execution-context/workflow-node-context.js +14 -0
- package/dist/node-execution-context/workflow-node-context.js.map +1 -0
- package/dist/utils.d.ts +5 -0
- package/dist/utils.js +10 -0
- package/dist/utils.js.map +1 -0
- package/package.json +9 -6
- package/dist/node-execution-context/utils.d.ts +0 -11
- package/dist/node-execution-context/utils.js +0 -275
- package/dist/node-execution-context/utils.js.map +0 -1
package/dist/InstanceSettings.js
CHANGED
|
@@ -13,22 +13,23 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.InstanceSettings = void 0;
|
|
16
|
+
const di_1 = require("@n8n/di");
|
|
16
17
|
const crypto_1 = require("crypto");
|
|
17
18
|
const n8n_workflow_1 = require("n8n-workflow");
|
|
18
19
|
const nanoid_1 = require("nanoid");
|
|
19
20
|
const node_fs_1 = require("node:fs");
|
|
20
21
|
const path_1 = __importDefault(require("path"));
|
|
21
|
-
const
|
|
22
|
+
const logger_1 = require("./logging/logger");
|
|
22
23
|
const decorators_1 = require("./decorators");
|
|
23
24
|
const InstanceSettingsConfig_1 = require("./InstanceSettingsConfig");
|
|
24
25
|
const nanoid = (0, nanoid_1.customAlphabet)(n8n_workflow_1.ALPHABET, 16);
|
|
25
26
|
const inTest = process.env.NODE_ENV === 'test';
|
|
26
27
|
let InstanceSettings = class InstanceSettings {
|
|
27
|
-
constructor(config) {
|
|
28
|
+
constructor(config, logger) {
|
|
28
29
|
this.config = config;
|
|
29
|
-
this.
|
|
30
|
-
this.n8nFolder =
|
|
31
|
-
this.staticCacheDir = path_1.default.join(this.userHome, '.cache/n8n/public');
|
|
30
|
+
this.logger = logger;
|
|
31
|
+
this.n8nFolder = this.config.n8nFolder;
|
|
32
|
+
this.staticCacheDir = path_1.default.join(this.config.userHome, '.cache/n8n/public');
|
|
32
33
|
this.customExtensionDir = path_1.default.join(this.n8nFolder, 'custom');
|
|
33
34
|
this.nodesDownloadDir = path_1.default.join(this.n8nFolder, 'nodes');
|
|
34
35
|
this.settingsFile = path_1.default.join(this.n8nFolder, 'config');
|
|
@@ -56,6 +57,9 @@ let InstanceSettings = class InstanceSettings {
|
|
|
56
57
|
get isSingleMain() {
|
|
57
58
|
return !this.isMultiMain;
|
|
58
59
|
}
|
|
60
|
+
get isWorker() {
|
|
61
|
+
return this.instanceType === 'worker';
|
|
62
|
+
}
|
|
59
63
|
get isLeader() {
|
|
60
64
|
return this.instanceRole === 'leader';
|
|
61
65
|
}
|
|
@@ -85,10 +89,6 @@ let InstanceSettings = class InstanceSettings {
|
|
|
85
89
|
update(newSettings) {
|
|
86
90
|
this.save({ ...this.settings, ...newSettings });
|
|
87
91
|
}
|
|
88
|
-
getUserHome() {
|
|
89
|
-
const homeVarName = process.platform === 'win32' ? 'USERPROFILE' : 'HOME';
|
|
90
|
-
return process.env.N8N_USER_FOLDER ?? process.env[homeVarName] ?? process.cwd();
|
|
91
|
-
}
|
|
92
92
|
loadOrCreate() {
|
|
93
93
|
if ((0, node_fs_1.existsSync)(this.settingsFile)) {
|
|
94
94
|
const content = (0, node_fs_1.readFileSync)(this.settingsFile, 'utf8');
|
|
@@ -109,7 +109,7 @@ let InstanceSettings = class InstanceSettings {
|
|
|
109
109
|
const settings = { encryptionKey };
|
|
110
110
|
this.save(settings);
|
|
111
111
|
if (!inTest && !process.env.N8N_ENCRYPTION_KEY) {
|
|
112
|
-
|
|
112
|
+
this.logger.info(`No encryption key found - Auto-generated and saved to: ${this.settingsFile}`);
|
|
113
113
|
}
|
|
114
114
|
this.ensureSettingsFilePermissions();
|
|
115
115
|
return settings;
|
|
@@ -153,10 +153,10 @@ let InstanceSettings = class InstanceSettings {
|
|
|
153
153
|
}
|
|
154
154
|
const permissionsResult = (0, n8n_workflow_1.toResult)(() => {
|
|
155
155
|
const stats = (0, node_fs_1.statSync)(this.settingsFile);
|
|
156
|
-
return stats
|
|
156
|
+
return stats?.mode & 0o777;
|
|
157
157
|
});
|
|
158
158
|
if (!permissionsResult.ok) {
|
|
159
|
-
|
|
159
|
+
this.logger.warn(`Could not ensure settings file permissions: ${permissionsResult.error.message}. To skip this check, set N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=false.`);
|
|
160
160
|
return;
|
|
161
161
|
}
|
|
162
162
|
const arePermissionsCorrect = permissionsResult.result === 0o600;
|
|
@@ -164,14 +164,14 @@ let InstanceSettings = class InstanceSettings {
|
|
|
164
164
|
return;
|
|
165
165
|
}
|
|
166
166
|
if (!this.enforceSettingsFilePermissions.isSet) {
|
|
167
|
-
|
|
167
|
+
this.logger.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.`);
|
|
168
168
|
return;
|
|
169
169
|
}
|
|
170
170
|
if (this.enforceSettingsFilePermissions.enforce) {
|
|
171
|
-
|
|
171
|
+
this.logger.warn(`Permissions 0${permissionsResult.result.toString(8)} for n8n settings file ${this.settingsFile} are too wide. Changing permissions to 0600..`);
|
|
172
172
|
const chmodResult = (0, n8n_workflow_1.toResult)(() => (0, node_fs_1.chmodSync)(this.settingsFile, 0o600));
|
|
173
173
|
if (!chmodResult.ok) {
|
|
174
|
-
|
|
174
|
+
this.logger.warn(`Could not enforce settings file permissions: ${chmodResult.error.message}. To skip this check, set N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=false.`);
|
|
175
175
|
}
|
|
176
176
|
}
|
|
177
177
|
}
|
|
@@ -186,7 +186,8 @@ __decorate([
|
|
|
186
186
|
__metadata("design:paramtypes", [])
|
|
187
187
|
], InstanceSettings.prototype, "isDocker", null);
|
|
188
188
|
exports.InstanceSettings = InstanceSettings = __decorate([
|
|
189
|
-
(0,
|
|
190
|
-
__metadata("design:paramtypes", [InstanceSettingsConfig_1.InstanceSettingsConfig
|
|
189
|
+
(0, di_1.Service)(),
|
|
190
|
+
__metadata("design:paramtypes", [InstanceSettingsConfig_1.InstanceSettingsConfig,
|
|
191
|
+
logger_1.Logger])
|
|
191
192
|
], InstanceSettings);
|
|
192
193
|
//# sourceMappingURL=InstanceSettings.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InstanceSettings.js","sourceRoot":"","sources":["../src/InstanceSettings.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,mCAAiD;AACjD,+CAA+E;AAC/E,mCAAwC;AACxC,qCAAkG;AAClG,gDAAwB;
|
|
1
|
+
{"version":3,"file":"InstanceSettings.js","sourceRoot":"","sources":["../src/InstanceSettings.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,12 +8,19 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
8
8
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
9
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
10
|
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
11
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
15
|
exports.InstanceSettingsConfig = void 0;
|
|
13
16
|
const config_1 = require("@n8n/config");
|
|
17
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
14
18
|
let InstanceSettingsConfig = class InstanceSettingsConfig {
|
|
15
19
|
constructor() {
|
|
16
20
|
this.enforceSettingsFilePermissions = false;
|
|
21
|
+
const homeVarName = process.platform === 'win32' ? 'USERPROFILE' : 'HOME';
|
|
22
|
+
this.userHome = process.env.N8N_USER_FOLDER ?? process.env[homeVarName] ?? process.cwd();
|
|
23
|
+
this.n8nFolder = node_path_1.default.join(this.userHome, '.n8n');
|
|
17
24
|
}
|
|
18
25
|
};
|
|
19
26
|
exports.InstanceSettingsConfig = InstanceSettingsConfig;
|
|
@@ -22,6 +29,7 @@ __decorate([
|
|
|
22
29
|
__metadata("design:type", Boolean)
|
|
23
30
|
], InstanceSettingsConfig.prototype, "enforceSettingsFilePermissions", void 0);
|
|
24
31
|
exports.InstanceSettingsConfig = InstanceSettingsConfig = __decorate([
|
|
25
|
-
config_1.Config
|
|
32
|
+
config_1.Config,
|
|
33
|
+
__metadata("design:paramtypes", [])
|
|
26
34
|
], InstanceSettingsConfig);
|
|
27
35
|
//# sourceMappingURL=InstanceSettingsConfig.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InstanceSettingsConfig.js","sourceRoot":"","sources":["../src/InstanceSettingsConfig.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"InstanceSettingsConfig.js","sourceRoot":"","sources":["../src/InstanceSettingsConfig.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,wCAA0C;AAC1C,0DAA6B;AAGtB,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IAiBlC;QAVA,mCAA8B,GAAY,KAAK,CAAC;QAW/C,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC;QAC1E,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAEzF,IAAI,CAAC,SAAS,GAAG,mBAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACnD,CAAC;CACD,CAAA;AAvBY,wDAAsB;AAOlC;IADC,IAAA,YAAG,EAAC,uCAAuC,CAAC;;8EACG;iCAPpC,sBAAsB;IADlC,eAAM;;GACM,sBAAsB,CAuBlC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { AxiosRequestConfig, AxiosResponse } from 'axios';
|
|
2
2
|
import { IncomingMessage } from 'http';
|
|
3
|
-
import type { BinaryHelperFunctions,
|
|
3
|
+
import type { BinaryHelperFunctions, FileSystemHelperFunctions, IAdditionalCredentialOptions, IAllExecuteFunctions, IBinaryData, ICredentialTestFunctions, IDataObject, IHttpRequestOptions, IN8nHttpFullResponse, IN8nHttpResponse, INode, INodeExecutionData, IOAuth2Options, IPairedItemData, IPollFunctions, IRequestOptions, IRunExecutionData, ITaskDataConnections, ITriggerFunctions, IWebhookDescription, IWorkflowDataProxyAdditionalKeys, IWorkflowExecuteAdditionalData, NodeExecutionWithMetadata, NodeHelperFunctions, PaginationOptions, RequestHelperFunctions, Workflow, WorkflowActivateMode, WorkflowExecuteMode, SSHTunnelFunctions, DeduplicationHelperFunctions, IDeduplicationOutput, IDeduplicationOutputItems, ICheckProcessedOptions, DeduplicationScope, DeduplicationItemTypes, ICheckProcessedContextData, WebhookType, SchedulingFunctions } from 'n8n-workflow';
|
|
4
4
|
import { Readable } from 'stream';
|
|
5
5
|
import type { BinaryData } from './BinaryData/types';
|
|
6
6
|
export declare const validateUrl: (url?: string) => boolean;
|
|
@@ -50,7 +50,6 @@ export declare function normalizeItems(executionData: INodeExecutionData | INode
|
|
|
50
50
|
export declare function requestWithAuthentication(this: IAllExecuteFunctions, credentialsType: string, requestOptions: IRequestOptions, workflow: Workflow, node: INode, additionalData: IWorkflowExecuteAdditionalData, additionalCredentialOptions?: IAdditionalCredentialOptions, itemIndex?: number): Promise<any>;
|
|
51
51
|
export declare function getNodeWebhookUrl(name: WebhookType, workflow: Workflow, node: INode, additionalData: IWorkflowExecuteAdditionalData, mode: WorkflowExecuteMode, additionalKeys: IWorkflowDataProxyAdditionalKeys, isTest?: boolean): string | undefined;
|
|
52
52
|
export declare function getWebhookDescription(name: WebhookType, workflow: Workflow, node: INode): IWebhookDescription | undefined;
|
|
53
|
-
export declare function getInputConnectionData(this: IAllExecuteFunctions, workflow: Workflow, runExecutionData: IRunExecutionData, parentRunIndex: number, connectionInputData: INodeExecutionData[], parentInputData: ITaskDataConnections, additionalData: IWorkflowExecuteAdditionalData, executeData: IExecuteData, mode: WorkflowExecuteMode, closeFunctions: CloseFunction[], connectionType: AINodeConnectionType, itemIndex: number, abortSignal?: AbortSignal): Promise<unknown>;
|
|
54
53
|
export declare const getRequestHelperFunctions: (workflow: Workflow, node: INode, additionalData: IWorkflowExecuteAdditionalData, runExecutionData?: IRunExecutionData | null, connectionInputData?: INodeExecutionData[]) => RequestHelperFunctions;
|
|
55
54
|
export declare const getSSHTunnelFunctions: () => SSHTunnelFunctions;
|
|
56
55
|
export declare const getSchedulingFunctions: (workflow: Workflow) => SchedulingFunctions;
|
|
@@ -69,13 +69,13 @@ exports.normalizeItems = normalizeItems;
|
|
|
69
69
|
exports.requestWithAuthentication = requestWithAuthentication;
|
|
70
70
|
exports.getNodeWebhookUrl = getNodeWebhookUrl;
|
|
71
71
|
exports.getWebhookDescription = getWebhookDescription;
|
|
72
|
-
exports.getInputConnectionData = getInputConnectionData;
|
|
73
72
|
exports.isFilePathBlocked = isFilePathBlocked;
|
|
74
73
|
exports.copyInputItems = copyInputItems;
|
|
75
74
|
exports.getExecutePollFunctions = getExecutePollFunctions;
|
|
76
75
|
exports.getExecuteTriggerFunctions = getExecuteTriggerFunctions;
|
|
77
76
|
exports.getCredentialTestFunctions = getCredentialTestFunctions;
|
|
78
77
|
const client_oauth2_1 = require("@n8n/client-oauth2");
|
|
78
|
+
const di_1 = require("@n8n/di");
|
|
79
79
|
const axios_1 = __importDefault(require("axios"));
|
|
80
80
|
const chardet_1 = __importDefault(require("chardet"));
|
|
81
81
|
const crypto_1 = __importStar(require("crypto"));
|
|
@@ -96,12 +96,11 @@ const oauth_1_0a_1 = __importDefault(require("oauth-1.0a"));
|
|
|
96
96
|
const path_1 = __importDefault(require("path"));
|
|
97
97
|
const qs_1 = require("qs");
|
|
98
98
|
const stream_1 = require("stream");
|
|
99
|
-
const typedi_1 = __importDefault(require("typedi"));
|
|
100
99
|
const url_1 = __importStar(require("url"));
|
|
100
|
+
const logger_1 = require("./logging/logger");
|
|
101
101
|
const BinaryData_service_1 = require("./BinaryData/BinaryData.service");
|
|
102
102
|
const utils_1 = require("./BinaryData/utils");
|
|
103
103
|
const Constants_1 = require("./Constants");
|
|
104
|
-
const CreateNodeAsTool_1 = require("./CreateNodeAsTool");
|
|
105
104
|
const data_deduplication_service_1 = require("./data-deduplication-service");
|
|
106
105
|
const InstanceSettings_1 = require("./InstanceSettings");
|
|
107
106
|
const node_execution_context_1 = require("./node-execution-context");
|
|
@@ -187,7 +186,7 @@ async function generateContentLengthHeader(config) {
|
|
|
187
186
|
};
|
|
188
187
|
}
|
|
189
188
|
catch (error) {
|
|
190
|
-
|
|
189
|
+
di_1.Container.get(logger_1.Logger).error('Unable to calculate form data length', { error });
|
|
191
190
|
}
|
|
192
191
|
}
|
|
193
192
|
const getHostFromRequestObject = (requestObject) => {
|
|
@@ -635,7 +634,7 @@ async function proxyRequestToAxios(workflow, additionalData, node, uriOrObject,
|
|
|
635
634
|
error.config = error.request = undefined;
|
|
636
635
|
error.options = (0, pick_1.default)(config ?? {}, ['url', 'method', 'data', 'headers']);
|
|
637
636
|
if (response) {
|
|
638
|
-
|
|
637
|
+
di_1.Container.get(logger_1.Logger).debug('Request proxied to Axios failed', { status: response.status });
|
|
639
638
|
let responseData = response.data;
|
|
640
639
|
if (Buffer.isBuffer(responseData) || responseData instanceof stream_1.Readable) {
|
|
641
640
|
responseData = await binaryToString(responseData);
|
|
@@ -778,13 +777,13 @@ async function httpRequest(requestOptions) {
|
|
|
778
777
|
return result.data;
|
|
779
778
|
}
|
|
780
779
|
function getBinaryPath(binaryDataId) {
|
|
781
|
-
return
|
|
780
|
+
return di_1.Container.get(BinaryData_service_1.BinaryDataService).getPath(binaryDataId);
|
|
782
781
|
}
|
|
783
782
|
async function getBinaryMetadata(binaryDataId) {
|
|
784
|
-
return await
|
|
783
|
+
return await di_1.Container.get(BinaryData_service_1.BinaryDataService).getMetadata(binaryDataId);
|
|
785
784
|
}
|
|
786
785
|
async function getBinaryStream(binaryDataId, chunkSize) {
|
|
787
|
-
return await
|
|
786
|
+
return await di_1.Container.get(BinaryData_service_1.BinaryDataService).getAsStream(binaryDataId, chunkSize);
|
|
788
787
|
}
|
|
789
788
|
function assertBinaryData(inputData, node, itemIndex, propertyName, inputIndex) {
|
|
790
789
|
const binaryKeyData = inputData.main[inputIndex][itemIndex].binary;
|
|
@@ -805,13 +804,13 @@ function assertBinaryData(inputData, node, itemIndex, propertyName, inputIndex)
|
|
|
805
804
|
}
|
|
806
805
|
async function getBinaryDataBuffer(inputData, itemIndex, propertyName, inputIndex) {
|
|
807
806
|
const binaryData = inputData.main[inputIndex][itemIndex].binary[propertyName];
|
|
808
|
-
return await
|
|
807
|
+
return await di_1.Container.get(BinaryData_service_1.BinaryDataService).getAsBuffer(binaryData);
|
|
809
808
|
}
|
|
810
809
|
function detectBinaryEncoding(buffer) {
|
|
811
810
|
return chardet_1.default.detect(buffer);
|
|
812
811
|
}
|
|
813
812
|
async function setBinaryDataBuffer(binaryData, bufferOrStream, workflowId, executionId) {
|
|
814
|
-
return await
|
|
813
|
+
return await di_1.Container.get(BinaryData_service_1.BinaryDataService).store(workflowId, executionId, bufferOrStream, binaryData);
|
|
815
814
|
}
|
|
816
815
|
async function copyBinaryFile(workflowId, executionId, filePath, fileName, mimeType) {
|
|
817
816
|
let fileExtension;
|
|
@@ -848,7 +847,7 @@ async function copyBinaryFile(workflowId, executionId, filePath, fileName, mimeT
|
|
|
848
847
|
else if (filePath) {
|
|
849
848
|
returnData.fileName = path_1.default.parse(filePath).base;
|
|
850
849
|
}
|
|
851
|
-
return await
|
|
850
|
+
return await di_1.Container.get(BinaryData_service_1.BinaryDataService).copyBinaryFile(workflowId, executionId, returnData, filePath);
|
|
852
851
|
}
|
|
853
852
|
async function prepareBinaryData(binaryData, executionId, workflowId, filePath, mimeType) {
|
|
854
853
|
let fileExtension;
|
|
@@ -998,7 +997,7 @@ async function requestOAuth2(credentialsType, requestOptions, node, additionalDa
|
|
|
998
997
|
if (isN8nRequest) {
|
|
999
998
|
return await this.helpers.httpRequest(newRequestOptions).catch(async (error) => {
|
|
1000
999
|
if (error.response?.status === 401) {
|
|
1001
|
-
|
|
1000
|
+
this.logger.debug(`OAuth2 token for "${credentialsType}" used by node "${node.name}" expired. Should revalidate.`);
|
|
1002
1001
|
const tokenRefreshOptions = {};
|
|
1003
1002
|
if (oAuth2Options?.includeCredentialsOnRefreshOnBody) {
|
|
1004
1003
|
const body = {
|
|
@@ -1013,14 +1012,14 @@ async function requestOAuth2(credentialsType, requestOptions, node, additionalDa
|
|
|
1013
1012
|
};
|
|
1014
1013
|
}
|
|
1015
1014
|
let newToken;
|
|
1016
|
-
|
|
1015
|
+
this.logger.debug(`OAuth2 token for "${credentialsType}" used by node "${node.name}" has been renewed.`);
|
|
1017
1016
|
if (credentials.grantType === 'clientCredentials') {
|
|
1018
1017
|
newToken = await token.client.credentials.getToken();
|
|
1019
1018
|
}
|
|
1020
1019
|
else {
|
|
1021
1020
|
newToken = await token.refresh(tokenRefreshOptions);
|
|
1022
1021
|
}
|
|
1023
|
-
|
|
1022
|
+
this.logger.debug(`OAuth2 token for "${credentialsType}" used by node "${node.name}" has been renewed.`);
|
|
1024
1023
|
credentials.oauthTokenData = newToken.data;
|
|
1025
1024
|
if (!node.credentials?.[credentialsType]) {
|
|
1026
1025
|
throw new n8n_workflow_1.ApplicationError('Node does not have credential type', {
|
|
@@ -1067,7 +1066,7 @@ async function requestOAuth2(credentialsType, requestOptions, node, additionalDa
|
|
|
1067
1066
|
Authorization: '',
|
|
1068
1067
|
};
|
|
1069
1068
|
}
|
|
1070
|
-
|
|
1069
|
+
this.logger.debug(`OAuth2 token for "${credentialsType}" used by node "${node.name}" expired. Should revalidate.`);
|
|
1071
1070
|
let newToken;
|
|
1072
1071
|
if (credentials.grantType === 'clientCredentials') {
|
|
1073
1072
|
newToken = await token.client.credentials.getToken();
|
|
@@ -1075,7 +1074,7 @@ async function requestOAuth2(credentialsType, requestOptions, node, additionalDa
|
|
|
1075
1074
|
else {
|
|
1076
1075
|
newToken = await token.refresh(tokenRefreshOptions);
|
|
1077
1076
|
}
|
|
1078
|
-
|
|
1077
|
+
this.logger.debug(`OAuth2 token for "${credentialsType}" used by node "${node.name}" has been renewed.`);
|
|
1079
1078
|
credentials.oauthTokenData = newToken.data;
|
|
1080
1079
|
if (!node.credentials?.[credentialsType]) {
|
|
1081
1080
|
throw new n8n_workflow_1.ApplicationError('Node does not have credential type', {
|
|
@@ -1085,7 +1084,7 @@ async function requestOAuth2(credentialsType, requestOptions, node, additionalDa
|
|
|
1085
1084
|
}
|
|
1086
1085
|
const nodeCredentials = node.credentials[credentialsType];
|
|
1087
1086
|
await additionalData.credentialsHelper.updateCredentials(nodeCredentials, credentialsType, credentials);
|
|
1088
|
-
|
|
1087
|
+
this.logger.debug(`OAuth2 token for "${credentialsType}" used by node "${node.name}" has been saved to database successfully.`);
|
|
1089
1088
|
const newRequestOptions = newToken.sign(requestOptions);
|
|
1090
1089
|
newRequestOptions.headers = newRequestOptions.headers ?? {};
|
|
1091
1090
|
if (oAuth2Options?.keyToIncludeInAccessTokenHeader) {
|
|
@@ -1327,111 +1326,6 @@ function getWebhookDescription(name, workflow, node) {
|
|
|
1327
1326
|
}
|
|
1328
1327
|
return undefined;
|
|
1329
1328
|
}
|
|
1330
|
-
async function getInputConnectionData(workflow, runExecutionData, parentRunIndex, connectionInputData, parentInputData, additionalData, executeData, mode, closeFunctions, connectionType, itemIndex, abortSignal) {
|
|
1331
|
-
const parentNode = this.getNode();
|
|
1332
|
-
const parentNodeType = workflow.nodeTypes.getByNameAndVersion(parentNode.type, parentNode.typeVersion);
|
|
1333
|
-
const inputs = n8n_workflow_1.NodeHelpers.getNodeInputs(workflow, parentNode, parentNodeType.description);
|
|
1334
|
-
let inputConfiguration = inputs.find((input) => {
|
|
1335
|
-
if (typeof input === 'string') {
|
|
1336
|
-
return input === connectionType;
|
|
1337
|
-
}
|
|
1338
|
-
return input.type === connectionType;
|
|
1339
|
-
});
|
|
1340
|
-
if (inputConfiguration === undefined) {
|
|
1341
|
-
throw new n8n_workflow_1.ApplicationError('Node does not have input of type', {
|
|
1342
|
-
extra: { nodeName: parentNode.name, connectionType },
|
|
1343
|
-
});
|
|
1344
|
-
}
|
|
1345
|
-
if (typeof inputConfiguration === 'string') {
|
|
1346
|
-
inputConfiguration = {
|
|
1347
|
-
type: inputConfiguration,
|
|
1348
|
-
};
|
|
1349
|
-
}
|
|
1350
|
-
const connectedNodes = workflow
|
|
1351
|
-
.getParentNodes(parentNode.name, connectionType, 1)
|
|
1352
|
-
.map((nodeName) => workflow.getNode(nodeName))
|
|
1353
|
-
.filter((connectedNode) => connectedNode.disabled !== true);
|
|
1354
|
-
if (connectedNodes.length === 0) {
|
|
1355
|
-
if (inputConfiguration.required) {
|
|
1356
|
-
throw new n8n_workflow_1.NodeOperationError(parentNode, `A ${inputConfiguration?.displayName ?? connectionType} sub-node must be connected and enabled`);
|
|
1357
|
-
}
|
|
1358
|
-
return inputConfiguration.maxConnections === 1 ? undefined : [];
|
|
1359
|
-
}
|
|
1360
|
-
if (inputConfiguration.maxConnections !== undefined &&
|
|
1361
|
-
connectedNodes.length > inputConfiguration.maxConnections) {
|
|
1362
|
-
throw new n8n_workflow_1.NodeOperationError(parentNode, `Only ${inputConfiguration.maxConnections} ${connectionType} sub-nodes are/is allowed to be connected`);
|
|
1363
|
-
}
|
|
1364
|
-
const nodes = [];
|
|
1365
|
-
for (const connectedNode of connectedNodes) {
|
|
1366
|
-
const connectedNodeType = workflow.nodeTypes.getByNameAndVersion(connectedNode.type, connectedNode.typeVersion);
|
|
1367
|
-
const contextFactory = (runIndex, inputData) => new node_execution_context_1.SupplyDataContext(workflow, connectedNode, additionalData, mode, runExecutionData, runIndex, connectionInputData, inputData, connectionType, executeData, closeFunctions, abortSignal);
|
|
1368
|
-
if (!connectedNodeType.supplyData) {
|
|
1369
|
-
if (connectedNodeType.description.outputs.includes("ai_tool")) {
|
|
1370
|
-
let toolRunIndex = 0;
|
|
1371
|
-
const supplyData = (0, CreateNodeAsTool_1.createNodeAsTool)({
|
|
1372
|
-
node: connectedNode,
|
|
1373
|
-
nodeType: connectedNodeType,
|
|
1374
|
-
handleToolInvocation: async (toolArgs) => {
|
|
1375
|
-
const runIndex = toolRunIndex++;
|
|
1376
|
-
const context = contextFactory(runIndex, {});
|
|
1377
|
-
context.addInputData("ai_tool", [[{ json: toolArgs }]]);
|
|
1378
|
-
try {
|
|
1379
|
-
const result = await connectedNodeType.execute?.call(context);
|
|
1380
|
-
const mappedResults = result?.[0]?.flatMap((item) => item.json);
|
|
1381
|
-
context.addOutputData("ai_tool", runIndex, [
|
|
1382
|
-
[{ json: { response: mappedResults } }],
|
|
1383
|
-
]);
|
|
1384
|
-
return JSON.stringify(mappedResults);
|
|
1385
|
-
}
|
|
1386
|
-
catch (error) {
|
|
1387
|
-
const nodeError = new n8n_workflow_1.NodeOperationError(connectedNode, error);
|
|
1388
|
-
context.addOutputData("ai_tool", runIndex, nodeError);
|
|
1389
|
-
return 'Error during node execution: ' + nodeError.description;
|
|
1390
|
-
}
|
|
1391
|
-
},
|
|
1392
|
-
});
|
|
1393
|
-
nodes.push(supplyData);
|
|
1394
|
-
}
|
|
1395
|
-
else {
|
|
1396
|
-
throw new n8n_workflow_1.ApplicationError('Node does not have a `supplyData` method defined', {
|
|
1397
|
-
extra: { nodeName: connectedNode.name },
|
|
1398
|
-
});
|
|
1399
|
-
}
|
|
1400
|
-
}
|
|
1401
|
-
else {
|
|
1402
|
-
const context = contextFactory(parentRunIndex, parentInputData);
|
|
1403
|
-
try {
|
|
1404
|
-
const supplyData = await connectedNodeType.supplyData.call(context, itemIndex);
|
|
1405
|
-
if (supplyData.closeFunction) {
|
|
1406
|
-
closeFunctions.push(supplyData.closeFunction);
|
|
1407
|
-
}
|
|
1408
|
-
nodes.push(supplyData);
|
|
1409
|
-
}
|
|
1410
|
-
catch (error) {
|
|
1411
|
-
if (error.functionality === 'configuration-node')
|
|
1412
|
-
throw error;
|
|
1413
|
-
if (!(error instanceof n8n_workflow_1.ExecutionBaseError)) {
|
|
1414
|
-
error = new n8n_workflow_1.NodeOperationError(connectedNode, error, {
|
|
1415
|
-
itemIndex,
|
|
1416
|
-
});
|
|
1417
|
-
}
|
|
1418
|
-
let currentNodeRunIndex = 0;
|
|
1419
|
-
if (runExecutionData.resultData.runData.hasOwnProperty(parentNode.name)) {
|
|
1420
|
-
currentNodeRunIndex = runExecutionData.resultData.runData[parentNode.name].length;
|
|
1421
|
-
}
|
|
1422
|
-
await context.addExecutionDataFunctions('input', error, connectionType, parentNode.name, currentNodeRunIndex);
|
|
1423
|
-
throw new n8n_workflow_1.NodeOperationError(connectedNode, `Error in sub-node ${connectedNode.name}`, {
|
|
1424
|
-
itemIndex,
|
|
1425
|
-
functionality: 'configuration-node',
|
|
1426
|
-
description: error.message,
|
|
1427
|
-
});
|
|
1428
|
-
}
|
|
1429
|
-
}
|
|
1430
|
-
}
|
|
1431
|
-
return inputConfiguration.maxConnections === 1
|
|
1432
|
-
? (nodes || [])[0]?.response
|
|
1433
|
-
: nodes.map((node) => node.response);
|
|
1434
|
-
}
|
|
1435
1329
|
const getRequestHelperFunctions = (workflow, node, additionalData, runExecutionData = null, connectionInputData = []) => {
|
|
1436
1330
|
const getResolvedValue = (parameterValue, itemIndex, runIndex, executeData, additionalKeys, returnObjectAsString = false) => {
|
|
1437
1331
|
const mode = 'internal';
|
|
@@ -1544,7 +1438,7 @@ const getRequestHelperFunctions = (workflow, node, additionalData, runExecutionD
|
|
|
1544
1438
|
}
|
|
1545
1439
|
responseData.push(tempResponseData);
|
|
1546
1440
|
additionalKeys.$response = newResponse;
|
|
1547
|
-
additionalKeys.$pageCount = additionalKeys.$pageCount + 1;
|
|
1441
|
+
additionalKeys.$pageCount = (additionalKeys.$pageCount ?? 0) + 1;
|
|
1548
1442
|
const maxRequests = getResolvedValue(paginationOptions.maxRequests, itemIndex, runIndex, executeData, additionalKeys, false);
|
|
1549
1443
|
if (maxRequests && additionalKeys.$pageCount >= maxRequests) {
|
|
1550
1444
|
break;
|
|
@@ -1595,11 +1489,11 @@ const getRequestHelperFunctions = (workflow, node, additionalData, runExecutionD
|
|
|
1595
1489
|
};
|
|
1596
1490
|
exports.getRequestHelperFunctions = getRequestHelperFunctions;
|
|
1597
1491
|
const getSSHTunnelFunctions = () => ({
|
|
1598
|
-
getSSHClient: async (credentials) => await
|
|
1492
|
+
getSSHClient: async (credentials) => await di_1.Container.get(SSHClientsManager_1.SSHClientsManager).getClient(credentials),
|
|
1599
1493
|
});
|
|
1600
1494
|
exports.getSSHTunnelFunctions = getSSHTunnelFunctions;
|
|
1601
1495
|
const getSchedulingFunctions = (workflow) => {
|
|
1602
|
-
const scheduledTaskManager =
|
|
1496
|
+
const scheduledTaskManager = di_1.Container.get(ScheduledTaskManager_1.ScheduledTaskManager);
|
|
1603
1497
|
return {
|
|
1604
1498
|
registerCron: (cronExpression, onTick) => scheduledTaskManager.registerCron(workflow, cronExpression, onTick),
|
|
1605
1499
|
};
|
|
@@ -1629,7 +1523,7 @@ function isFilePathBlocked(filePath) {
|
|
|
1629
1523
|
return true;
|
|
1630
1524
|
}
|
|
1631
1525
|
if (blockFileAccessToN8nFiles) {
|
|
1632
|
-
const { n8nFolder, staticCacheDir } =
|
|
1526
|
+
const { n8nFolder, staticCacheDir } = di_1.Container.get(InstanceSettings_1.InstanceSettings);
|
|
1633
1527
|
const restrictedPaths = [n8nFolder, staticCacheDir];
|
|
1634
1528
|
if (process.env[Constants_1.CONFIG_FILES]) {
|
|
1635
1529
|
restrictedPaths.push(...process.env[Constants_1.CONFIG_FILES].split(','));
|
|
@@ -1678,7 +1572,7 @@ const getFileSystemHelperFunctions = (node) => ({
|
|
|
1678
1572
|
return (0, fs_1.createReadStream)(filePath);
|
|
1679
1573
|
},
|
|
1680
1574
|
getStoragePath() {
|
|
1681
|
-
return path_1.default.join(
|
|
1575
|
+
return path_1.default.join(di_1.Container.get(InstanceSettings_1.InstanceSettings).n8nFolder, `storage/${node.type}`);
|
|
1682
1576
|
},
|
|
1683
1577
|
async writeContentToFile(filePath, content, flag) {
|
|
1684
1578
|
if (isFilePathBlocked(filePath)) {
|
|
@@ -1747,6 +1641,7 @@ function getExecuteTriggerFunctions(workflow, node, additionalData, mode, activa
|
|
|
1747
1641
|
}
|
|
1748
1642
|
function getCredentialTestFunctions() {
|
|
1749
1643
|
return {
|
|
1644
|
+
logger: di_1.Container.get(logger_1.Logger),
|
|
1750
1645
|
helpers: {
|
|
1751
1646
|
...(0, exports.getSSHTunnelFunctions)(),
|
|
1752
1647
|
request: async (uriOrObject, options) => {
|