@n8n/task-runner 1.2.0 → 1.4.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/dist/build.tsbuildinfo +1 -1
- package/dist/config/base-runner-config.d.ts +6 -0
- package/dist/config/base-runner-config.js +42 -0
- package/dist/config/base-runner-config.js.map +1 -0
- package/dist/config/js-runner-config.d.ts +4 -0
- package/dist/config/js-runner-config.js +32 -0
- package/dist/config/js-runner-config.js.map +1 -0
- package/dist/config/main-config.d.ts +6 -0
- package/dist/config/main-config.js +30 -0
- package/dist/config/main-config.js.map +1 -0
- package/dist/js-task-runner/errors/serializable-error.d.ts +1 -1
- package/dist/js-task-runner/errors/serializable-error.js +17 -9
- package/dist/js-task-runner/errors/serializable-error.js.map +1 -1
- package/dist/js-task-runner/js-task-runner.d.ts +3 -9
- package/dist/js-task-runner/js-task-runner.js +35 -17
- package/dist/js-task-runner/js-task-runner.js.map +1 -1
- package/dist/node-types.d.ts +10 -0
- package/dist/node-types.js +45 -0
- package/dist/node-types.js.map +1 -0
- package/dist/runner-types.d.ts +6 -2
- package/dist/runner-types.js.map +1 -1
- package/dist/start.js +6 -53
- package/dist/start.js.map +1 -1
- package/dist/task-runner.d.ts +13 -4
- package/dist/task-runner.js +18 -10
- package/dist/task-runner.js.map +1 -1
- package/package.json +6 -4
- package/dist/authenticator.d.ts +0 -5
- package/dist/authenticator.js +0 -57
- package/dist/authenticator.js.map +0 -1
|
@@ -0,0 +1,42 @@
|
|
|
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.BaseRunnerConfig = void 0;
|
|
13
|
+
const config_1 = require("@n8n/config");
|
|
14
|
+
let BaseRunnerConfig = class BaseRunnerConfig {
|
|
15
|
+
constructor() {
|
|
16
|
+
this.n8nUri = '127.0.0.1:5679';
|
|
17
|
+
this.grantToken = '';
|
|
18
|
+
this.maxPayloadSize = 1024 * 1024 * 1024;
|
|
19
|
+
this.maxConcurrency = 5;
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
exports.BaseRunnerConfig = BaseRunnerConfig;
|
|
23
|
+
__decorate([
|
|
24
|
+
(0, config_1.Env)('N8N_RUNNERS_N8N_URI'),
|
|
25
|
+
__metadata("design:type", String)
|
|
26
|
+
], BaseRunnerConfig.prototype, "n8nUri", void 0);
|
|
27
|
+
__decorate([
|
|
28
|
+
(0, config_1.Env)('N8N_RUNNERS_GRANT_TOKEN'),
|
|
29
|
+
__metadata("design:type", String)
|
|
30
|
+
], BaseRunnerConfig.prototype, "grantToken", void 0);
|
|
31
|
+
__decorate([
|
|
32
|
+
(0, config_1.Env)('N8N_RUNNERS_MAX_PAYLOAD'),
|
|
33
|
+
__metadata("design:type", Number)
|
|
34
|
+
], BaseRunnerConfig.prototype, "maxPayloadSize", void 0);
|
|
35
|
+
__decorate([
|
|
36
|
+
(0, config_1.Env)('N8N_RUNNERS_MAX_CONCURRENCY'),
|
|
37
|
+
__metadata("design:type", Number)
|
|
38
|
+
], BaseRunnerConfig.prototype, "maxConcurrency", void 0);
|
|
39
|
+
exports.BaseRunnerConfig = BaseRunnerConfig = __decorate([
|
|
40
|
+
config_1.Config
|
|
41
|
+
], BaseRunnerConfig);
|
|
42
|
+
//# sourceMappingURL=base-runner-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-runner-config.js","sourceRoot":"","sources":["../../src/config/base-runner-config.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wCAA0C;AAGnC,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAAtB;QAEN,WAAM,GAAW,gBAAgB,CAAC;QAGlC,eAAU,GAAW,EAAE,CAAC;QAGxB,mBAAc,GAAW,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;QAG5C,mBAAc,GAAW,CAAC,CAAC;IAC5B,CAAC;CAAA,CAAA;AAZY,4CAAgB;AAE5B;IADC,IAAA,YAAG,EAAC,qBAAqB,CAAC;;gDACO;AAGlC;IADC,IAAA,YAAG,EAAC,yBAAyB,CAAC;;oDACP;AAGxB;IADC,IAAA,YAAG,EAAC,yBAAyB,CAAC;;wDACa;AAG5C;IADC,IAAA,YAAG,EAAC,6BAA6B,CAAC;;wDACR;2BAXf,gBAAgB;IAD5B,eAAM;GACM,gBAAgB,CAY5B"}
|
|
@@ -0,0 +1,32 @@
|
|
|
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.JsRunnerConfig = void 0;
|
|
13
|
+
const config_1 = require("@n8n/config");
|
|
14
|
+
let JsRunnerConfig = class JsRunnerConfig {
|
|
15
|
+
constructor() {
|
|
16
|
+
this.allowedBuiltInModules = '';
|
|
17
|
+
this.allowedExternalModules = '';
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
exports.JsRunnerConfig = JsRunnerConfig;
|
|
21
|
+
__decorate([
|
|
22
|
+
(0, config_1.Env)('NODE_FUNCTION_ALLOW_BUILTIN'),
|
|
23
|
+
__metadata("design:type", String)
|
|
24
|
+
], JsRunnerConfig.prototype, "allowedBuiltInModules", void 0);
|
|
25
|
+
__decorate([
|
|
26
|
+
(0, config_1.Env)('NODE_FUNCTION_ALLOW_EXTERNAL'),
|
|
27
|
+
__metadata("design:type", String)
|
|
28
|
+
], JsRunnerConfig.prototype, "allowedExternalModules", void 0);
|
|
29
|
+
exports.JsRunnerConfig = JsRunnerConfig = __decorate([
|
|
30
|
+
config_1.Config
|
|
31
|
+
], JsRunnerConfig);
|
|
32
|
+
//# sourceMappingURL=js-runner-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"js-runner-config.js","sourceRoot":"","sources":["../../src/config/js-runner-config.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wCAA0C;AAGnC,IAAM,cAAc,GAApB,MAAM,cAAc;IAApB;QAEN,0BAAqB,GAAW,EAAE,CAAC;QAGnC,2BAAsB,GAAW,EAAE,CAAC;IACrC,CAAC;CAAA,CAAA;AANY,wCAAc;AAE1B;IADC,IAAA,YAAG,EAAC,6BAA6B,CAAC;;6DACA;AAGnC;IADC,IAAA,YAAG,EAAC,8BAA8B,CAAC;;8DACA;yBALxB,cAAc;IAD1B,eAAM;GACM,cAAc,CAM1B"}
|
|
@@ -0,0 +1,30 @@
|
|
|
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.MainConfig = void 0;
|
|
13
|
+
const config_1 = require("@n8n/config");
|
|
14
|
+
const base_runner_config_1 = require("./base-runner-config");
|
|
15
|
+
const js_runner_config_1 = require("./js-runner-config");
|
|
16
|
+
let MainConfig = class MainConfig {
|
|
17
|
+
};
|
|
18
|
+
exports.MainConfig = MainConfig;
|
|
19
|
+
__decorate([
|
|
20
|
+
config_1.Nested,
|
|
21
|
+
__metadata("design:type", base_runner_config_1.BaseRunnerConfig)
|
|
22
|
+
], MainConfig.prototype, "baseRunnerConfig", void 0);
|
|
23
|
+
__decorate([
|
|
24
|
+
config_1.Nested,
|
|
25
|
+
__metadata("design:type", js_runner_config_1.JsRunnerConfig)
|
|
26
|
+
], MainConfig.prototype, "jsRunnerConfig", void 0);
|
|
27
|
+
exports.MainConfig = MainConfig = __decorate([
|
|
28
|
+
config_1.Config
|
|
29
|
+
], MainConfig);
|
|
30
|
+
//# sourceMappingURL=main-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main-config.js","sourceRoot":"","sources":["../../src/config/main-config.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wCAA6C;AAE7C,6DAAwD;AACxD,yDAAoD;AAG7C,IAAM,UAAU,GAAhB,MAAM,UAAU;CAMtB,CAAA;AANY,gCAAU;AAEtB;IADC,eAAM;8BACY,qCAAgB;oDAAC;AAGpC;IADC,eAAM;8BACU,iCAAc;kDAAC;qBALpB,UAAU;IADtB,eAAM;GACM,UAAU,CAMtB"}
|
|
@@ -1,18 +1,26 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.SerializableError = void 0;
|
|
4
|
+
exports.makeSerializable = makeSerializable;
|
|
5
|
+
function makeSerializable(error) {
|
|
6
|
+
Object.defineProperties(error, {
|
|
7
|
+
message: {
|
|
8
|
+
value: error.message,
|
|
9
|
+
enumerable: true,
|
|
10
|
+
configurable: true,
|
|
11
|
+
},
|
|
12
|
+
stack: {
|
|
13
|
+
value: error.stack,
|
|
14
|
+
enumerable: true,
|
|
15
|
+
configurable: true,
|
|
16
|
+
},
|
|
17
|
+
});
|
|
18
|
+
return error;
|
|
19
|
+
}
|
|
4
20
|
class SerializableError extends Error {
|
|
5
21
|
constructor(message) {
|
|
6
22
|
super(message);
|
|
7
|
-
this
|
|
8
|
-
}
|
|
9
|
-
makeMessageEnumerable() {
|
|
10
|
-
Object.defineProperty(this, 'message', {
|
|
11
|
-
value: this.message,
|
|
12
|
-
enumerable: true,
|
|
13
|
-
writable: true,
|
|
14
|
-
configurable: true,
|
|
15
|
-
});
|
|
23
|
+
makeSerializable(this);
|
|
16
24
|
}
|
|
17
25
|
}
|
|
18
26
|
exports.SerializableError = SerializableError;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serializable-error.js","sourceRoot":"","sources":["../../../src/js-task-runner/errors/serializable-error.ts"],"names":[],"mappings":";;;AAIA,
|
|
1
|
+
{"version":3,"file":"serializable-error.js","sourceRoot":"","sources":["../../../src/js-task-runner/errors/serializable-error.ts"],"names":[],"mappings":";;;AAIA,4CAeC;AAfD,SAAgB,gBAAgB,CAAC,KAAY;IAC5C,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE;QAC9B,OAAO,EAAE;YACR,KAAK,EAAE,KAAK,CAAC,OAAO;YACpB,UAAU,EAAE,IAAI;YAChB,YAAY,EAAE,IAAI;SAClB;QACD,KAAK,EAAE;YACN,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,UAAU,EAAE,IAAI;YAChB,YAAY,EAAE,IAAI;SAClB;KACD,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACd,CAAC;AAMD,MAAsB,iBAAkB,SAAQ,KAAK;IACpD,YAAY,OAAe;QAC1B,KAAK,CAAC,OAAO,CAAC,CAAC;QAEf,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;CACD;AAND,8CAMC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { CodeExecutionMode, INode, ITaskDataConnections, WorkflowParameters, IDataObject, IExecuteData, INodeExecutionData, INodeParameters, IRunExecutionData, WorkflowExecuteMode, EnvProviderState } from 'n8n-workflow';
|
|
2
2
|
import type { TaskResultData } from '../runner-types';
|
|
3
3
|
import { type Task, TaskRunner } from '../task-runner';
|
|
4
|
+
import type { MainConfig } from '../config/main-config';
|
|
4
5
|
export interface JSExecSettings {
|
|
5
6
|
code: string;
|
|
6
7
|
nodeMode: CodeExecutionMode;
|
|
@@ -40,18 +41,11 @@ export interface AllCodeTaskData {
|
|
|
40
41
|
contextNodeName: string;
|
|
41
42
|
additionalData: PartialAdditionalData;
|
|
42
43
|
}
|
|
43
|
-
export interface JsTaskRunnerOpts {
|
|
44
|
-
wsUrl: string;
|
|
45
|
-
grantToken: string;
|
|
46
|
-
maxConcurrency: number;
|
|
47
|
-
name?: string;
|
|
48
|
-
allowedBuiltInModules?: string;
|
|
49
|
-
allowedExternalModules?: string;
|
|
50
|
-
}
|
|
51
44
|
export declare class JsTaskRunner extends TaskRunner {
|
|
52
45
|
private readonly requireResolver;
|
|
53
|
-
constructor(
|
|
46
|
+
constructor(config: MainConfig, name?: string);
|
|
54
47
|
executeTask(task: Task<JSExecSettings>): Promise<TaskResultData>;
|
|
48
|
+
private getNativeVariables;
|
|
55
49
|
private runForAllItems;
|
|
56
50
|
private runForEachItem;
|
|
57
51
|
private createDataProxy;
|
|
@@ -31,15 +31,21 @@ const node_vm_1 = require("node:vm");
|
|
|
31
31
|
const task_runner_1 = require("../task-runner");
|
|
32
32
|
const error_like_1 = require("./errors/error-like");
|
|
33
33
|
const execution_error_1 = require("./errors/execution-error");
|
|
34
|
+
const serializable_error_1 = require("./errors/serializable-error");
|
|
34
35
|
const require_resolver_1 = require("./require-resolver");
|
|
35
36
|
const result_validation_1 = require("./result-validation");
|
|
36
37
|
class JsTaskRunner extends task_runner_1.TaskRunner {
|
|
37
|
-
constructor(
|
|
38
|
-
super(
|
|
38
|
+
constructor(config, name = 'JS Task Runner') {
|
|
39
|
+
super({
|
|
40
|
+
taskType: 'javascript',
|
|
41
|
+
name,
|
|
42
|
+
...config.baseRunnerConfig,
|
|
43
|
+
});
|
|
44
|
+
const { jsRunnerConfig } = config;
|
|
39
45
|
const parseModuleAllowList = (moduleList) => moduleList === '*' ? null : new Set(moduleList.split(',').map((x) => x.trim()));
|
|
40
46
|
this.requireResolver = (0, require_resolver_1.createRequireResolver)({
|
|
41
|
-
allowedBuiltInModules: parseModuleAllowList(allowedBuiltInModules ?? ''),
|
|
42
|
-
allowedExternalModules: parseModuleAllowList(allowedExternalModules ?? ''),
|
|
47
|
+
allowedBuiltInModules: parseModuleAllowList(jsRunnerConfig.allowedBuiltInModules ?? ''),
|
|
48
|
+
allowedExternalModules: parseModuleAllowList(jsRunnerConfig.allowedExternalModules ?? ''),
|
|
43
49
|
});
|
|
44
50
|
}
|
|
45
51
|
async executeTask(task) {
|
|
@@ -49,17 +55,7 @@ class JsTaskRunner extends task_runner_1.TaskRunner {
|
|
|
49
55
|
const workflowParams = allData.workflow;
|
|
50
56
|
const workflow = new n8n_workflow_1.Workflow({
|
|
51
57
|
...workflowParams,
|
|
52
|
-
nodeTypes:
|
|
53
|
-
getByNameAndVersion() {
|
|
54
|
-
return undefined;
|
|
55
|
-
},
|
|
56
|
-
getByName() {
|
|
57
|
-
return undefined;
|
|
58
|
-
},
|
|
59
|
-
getKnownTypes() {
|
|
60
|
-
return {};
|
|
61
|
-
},
|
|
62
|
-
},
|
|
58
|
+
nodeTypes: this.nodeTypes,
|
|
63
59
|
});
|
|
64
60
|
const customConsole = {
|
|
65
61
|
log: (...args) => {
|
|
@@ -77,6 +73,26 @@ class JsTaskRunner extends task_runner_1.TaskRunner {
|
|
|
77
73
|
customData: allData.runExecutionData.resultData.metadata,
|
|
78
74
|
};
|
|
79
75
|
}
|
|
76
|
+
getNativeVariables() {
|
|
77
|
+
return {
|
|
78
|
+
Buffer,
|
|
79
|
+
Function,
|
|
80
|
+
eval,
|
|
81
|
+
setTimeout,
|
|
82
|
+
setInterval,
|
|
83
|
+
setImmediate,
|
|
84
|
+
clearTimeout,
|
|
85
|
+
clearInterval,
|
|
86
|
+
clearImmediate,
|
|
87
|
+
btoa,
|
|
88
|
+
atob,
|
|
89
|
+
TextDecoder,
|
|
90
|
+
TextDecoderStream,
|
|
91
|
+
TextEncoder,
|
|
92
|
+
TextEncoderStream,
|
|
93
|
+
FormData,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
80
96
|
async runForAllItems(taskId, settings, allData, workflow, customConsole) {
|
|
81
97
|
const dataProxy = this.createDataProxy(allData, workflow, allData.itemIndex);
|
|
82
98
|
const inputItems = allData.connectionInputData;
|
|
@@ -85,11 +101,12 @@ class JsTaskRunner extends task_runner_1.TaskRunner {
|
|
|
85
101
|
module: {},
|
|
86
102
|
console: customConsole,
|
|
87
103
|
items: inputItems,
|
|
104
|
+
...this.getNativeVariables(),
|
|
88
105
|
...dataProxy,
|
|
89
106
|
...this.buildRpcCallObject(taskId),
|
|
90
107
|
};
|
|
91
108
|
try {
|
|
92
|
-
const result = (await (0, node_vm_1.runInNewContext)(`module.exports = async function VmCodeWrapper() {${settings.code}\n}()`, context));
|
|
109
|
+
const result = (await (0, node_vm_1.runInNewContext)(`globalThis.global = globalThis; module.exports = async function VmCodeWrapper() {${settings.code}\n}()`, context));
|
|
93
110
|
if (result === null) {
|
|
94
111
|
return [];
|
|
95
112
|
}
|
|
@@ -114,6 +131,7 @@ class JsTaskRunner extends task_runner_1.TaskRunner {
|
|
|
114
131
|
module: {},
|
|
115
132
|
console: customConsole,
|
|
116
133
|
item,
|
|
134
|
+
...this.getNativeVariables(),
|
|
117
135
|
...dataProxy,
|
|
118
136
|
...this.buildRpcCallObject(taskId),
|
|
119
137
|
};
|
|
@@ -160,7 +178,7 @@ class JsTaskRunner extends task_runner_1.TaskRunner {
|
|
|
160
178
|
}
|
|
161
179
|
toExecutionErrorIfNeeded(error) {
|
|
162
180
|
if (error instanceof Error) {
|
|
163
|
-
return error;
|
|
181
|
+
return (0, serializable_error_1.makeSerializable)(error);
|
|
164
182
|
}
|
|
165
183
|
if ((0, error_like_1.isErrorLike)(error)) {
|
|
166
184
|
return new execution_error_1.ExecutionError(error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"js-task-runner.js","sourceRoot":"","sources":["../../src/js-task-runner/js-task-runner.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAA6C;AAC7C,+CAIsB;
|
|
1
|
+
{"version":3,"file":"js-task-runner.js","sourceRoot":"","sources":["../../src/js-task-runner/js-task-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type IDataObject, type INodeType, type INodeTypeDescription, type INodeTypes, type IVersionedNodeType } from 'n8n-workflow';
|
|
2
|
+
export declare const DEFAULT_NODETYPE_VERSION = 1;
|
|
3
|
+
export declare class TaskRunnerNodeTypes implements INodeTypes {
|
|
4
|
+
private nodeTypesByVersion;
|
|
5
|
+
constructor(nodeTypes: INodeTypeDescription[]);
|
|
6
|
+
private parseNodeTypes;
|
|
7
|
+
getByName(_nodeType: string): INodeType | IVersionedNodeType;
|
|
8
|
+
getByNameAndVersion(nodeType: string, version?: number): INodeType;
|
|
9
|
+
getKnownTypes(): IDataObject;
|
|
10
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TaskRunnerNodeTypes = exports.DEFAULT_NODETYPE_VERSION = void 0;
|
|
4
|
+
const n8n_workflow_1 = require("n8n-workflow");
|
|
5
|
+
exports.DEFAULT_NODETYPE_VERSION = 1;
|
|
6
|
+
class TaskRunnerNodeTypes {
|
|
7
|
+
constructor(nodeTypes) {
|
|
8
|
+
this.nodeTypesByVersion = this.parseNodeTypes(nodeTypes);
|
|
9
|
+
}
|
|
10
|
+
parseNodeTypes(nodeTypes) {
|
|
11
|
+
const versionedTypes = new Map();
|
|
12
|
+
for (const nt of nodeTypes) {
|
|
13
|
+
const versions = Array.isArray(nt.version)
|
|
14
|
+
? nt.version
|
|
15
|
+
: [nt.version ?? exports.DEFAULT_NODETYPE_VERSION];
|
|
16
|
+
const versioned = versionedTypes.get(nt.name) ?? new Map();
|
|
17
|
+
for (const version of versions) {
|
|
18
|
+
versioned.set(version, { ...versioned.get(version), ...nt });
|
|
19
|
+
}
|
|
20
|
+
versionedTypes.set(nt.name, versioned);
|
|
21
|
+
}
|
|
22
|
+
return versionedTypes;
|
|
23
|
+
}
|
|
24
|
+
getByName(_nodeType) {
|
|
25
|
+
throw new n8n_workflow_1.ApplicationError('Unimplemented `getByName`', { level: 'error' });
|
|
26
|
+
}
|
|
27
|
+
getByNameAndVersion(nodeType, version) {
|
|
28
|
+
const versions = this.nodeTypesByVersion.get(nodeType);
|
|
29
|
+
if (!versions) {
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
const nodeVersion = versions.get(version ?? Math.max(...versions.keys()));
|
|
33
|
+
if (!nodeVersion) {
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
description: nodeVersion,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
getKnownTypes() {
|
|
41
|
+
throw new n8n_workflow_1.ApplicationError('Unimplemented `getKnownTypes`', { level: 'error' });
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.TaskRunnerNodeTypes = TaskRunnerNodeTypes;
|
|
45
|
+
//# sourceMappingURL=node-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-types.js","sourceRoot":"","sources":["../src/node-types.ts"],"names":[],"mappings":";;;AAAA,+CAOsB;AAIT,QAAA,wBAAwB,GAAG,CAAC,CAAC;AAE1C,MAAa,mBAAmB;IAG/B,YAAY,SAAiC;QAC5C,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IAC1D,CAAC;IAEO,cAAc,CAAC,SAAiC;QACvD,MAAM,cAAc,GAAG,IAAI,GAAG,EAA0B,CAAC;QAEzD,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC;gBACzC,CAAC,CAAC,EAAE,CAAC,OAAO;gBACZ,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,IAAI,gCAAwB,CAAC,CAAC;YAE5C,MAAM,SAAS,GACd,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,EAAgC,CAAC;YACxE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAChC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;YAC9D,CAAC;YAED,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACxC,CAAC;QAED,OAAO,cAAc,CAAC;IACvB,CAAC;IAGD,SAAS,CAAC,SAAiB;QAC1B,MAAM,IAAI,+BAAgB,CAAC,2BAA2B,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,mBAAmB,CAAC,QAAgB,EAAE,OAAgB;QACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACvD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACf,OAAO,SAAiC,CAAC;QAC1C,CAAC;QACD,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC1E,IAAI,CAAC,WAAW,EAAE,CAAC;YAClB,OAAO,SAAiC,CAAC;QAC1C,CAAC;QACD,OAAO;YACN,WAAW,EAAE,WAAW;SACxB,CAAC;IACH,CAAC;IAGD,aAAa;QACZ,MAAM,IAAI,+BAAgB,CAAC,+BAA+B,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IACjF,CAAC;CACD;AAlDD,kDAkDC"}
|
package/dist/runner-types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { INodeExecutionData } from 'n8n-workflow';
|
|
1
|
+
import type { INodeExecutionData, INodeTypeBaseDescription } from 'n8n-workflow';
|
|
2
2
|
export type DataRequestType = 'input' | 'node' | 'all';
|
|
3
3
|
export interface TaskResultData {
|
|
4
4
|
result: INodeExecutionData[];
|
|
@@ -40,7 +40,11 @@ export declare namespace N8nMessage {
|
|
|
40
40
|
requestId: string;
|
|
41
41
|
data: unknown;
|
|
42
42
|
}
|
|
43
|
-
|
|
43
|
+
interface NodeTypes {
|
|
44
|
+
type: 'broker:nodetypes';
|
|
45
|
+
nodeTypes: INodeTypeBaseDescription[];
|
|
46
|
+
}
|
|
47
|
+
type All = InfoRequest | TaskOfferAccept | TaskCancel | TaskSettings | RunnerRegistered | RPCResponse | TaskDataResponse | NodeTypes;
|
|
44
48
|
}
|
|
45
49
|
namespace ToRequester {
|
|
46
50
|
interface TaskReady {
|
package/dist/runner-types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner-types.js","sourceRoot":"","sources":["../src/runner-types.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"runner-types.js","sourceRoot":"","sources":["../src/runner-types.ts"],"names":[],"mappings":";;;AAoNa,QAAA,cAAc,GAAG;IAC7B,uCAAuC;IACvC,4CAA4C;IAI5C,6BAA6B;IAG7B,sBAAsB;IACtB,0BAA0B;IAE1B,4BAA4B;IAC5B,2BAA2B;IAC3B,6BAA6B;IAC7B,wBAAwB;IACxB,wBAAwB;IAGxB,yBAAyB;IACzB,2BAA2B;IAC3B,+BAA+B;IAC/B,qBAAqB;IACrB,eAAe;CACN,CAAC"}
|
package/dist/start.js
CHANGED
|
@@ -1,46 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var
|
|
3
|
-
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
24
4
|
};
|
|
25
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
6
|
const n8n_workflow_1 = require("n8n-workflow");
|
|
27
|
-
const
|
|
28
|
-
const
|
|
7
|
+
const typedi_1 = __importDefault(require("typedi"));
|
|
8
|
+
const main_config_1 = require("./config/main-config");
|
|
29
9
|
const js_task_runner_1 = require("./js-task-runner/js-task-runner");
|
|
30
10
|
let runner;
|
|
31
11
|
let isShuttingDown = false;
|
|
32
|
-
function readAndParseConfig() {
|
|
33
|
-
const authToken = process.env.N8N_RUNNERS_AUTH_TOKEN;
|
|
34
|
-
const grantToken = process.env.N8N_RUNNERS_GRANT_TOKEN;
|
|
35
|
-
if (!authToken && !grantToken) {
|
|
36
|
-
throw new n8n_workflow_1.ApplicationError('Missing task runner authentication. Use either N8N_RUNNERS_AUTH_TOKEN or N8N_RUNNERS_GRANT_TOKEN to configure it');
|
|
37
|
-
}
|
|
38
|
-
return {
|
|
39
|
-
n8nUri: process.env.N8N_RUNNERS_N8N_URI ?? '127.0.0.1:5679',
|
|
40
|
-
authToken,
|
|
41
|
-
grantToken,
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
12
|
function createSignalHandler(signal) {
|
|
45
13
|
return async function onSignal() {
|
|
46
14
|
if (isShuttingDown) {
|
|
@@ -64,23 +32,8 @@ function createSignalHandler(signal) {
|
|
|
64
32
|
};
|
|
65
33
|
}
|
|
66
34
|
void (async function start() {
|
|
67
|
-
const config =
|
|
68
|
-
|
|
69
|
-
if (!grantToken) {
|
|
70
|
-
a.ok(config.authToken);
|
|
71
|
-
grantToken = await (0, authenticator_1.authenticate)({
|
|
72
|
-
authToken: config.authToken,
|
|
73
|
-
n8nUri: config.n8nUri,
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
const wsUrl = `ws://${config.n8nUri}/runners/_ws`;
|
|
77
|
-
runner = new js_task_runner_1.JsTaskRunner({
|
|
78
|
-
wsUrl,
|
|
79
|
-
grantToken,
|
|
80
|
-
maxConcurrency: 5,
|
|
81
|
-
allowedBuiltInModules: process.env.NODE_FUNCTION_ALLOW_BUILTIN,
|
|
82
|
-
allowedExternalModules: process.env.NODE_FUNCTION_ALLOW_EXTERNAL,
|
|
83
|
-
});
|
|
35
|
+
const config = typedi_1.default.get(main_config_1.MainConfig);
|
|
36
|
+
runner = new js_task_runner_1.JsTaskRunner(config);
|
|
84
37
|
process.on('SIGINT', createSignalHandler('SIGINT'));
|
|
85
38
|
process.on('SIGTERM', createSignalHandler('SIGTERM'));
|
|
86
39
|
})().catch((e) => {
|
package/dist/start.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.js","sourceRoot":"","sources":["../src/start.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../src/start.ts"],"names":[],"mappings":";;;;;AAAA,+CAA2C;AAC3C,oDAA+B;AAE/B,sDAAkD;AAClD,oEAA+D;AAE/D,IAAI,MAAgC,CAAC;AACrC,IAAI,cAAc,GAAG,KAAK,CAAC;AAE3B,SAAS,mBAAmB,CAAC,MAAc;IAC1C,OAAO,KAAK,UAAU,QAAQ;QAC7B,IAAI,cAAc,EAAE,CAAC;YACpB,OAAO;QACR,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,2BAA2B,CAAC,CAAC;QAE3D,cAAc,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC;YACJ,IAAI,MAAM,EAAE,CAAC;gBACZ,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBACpB,MAAM,GAAG,SAAS,CAAC;YACpB,CAAC;QACF,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,MAAM,KAAK,GAAG,IAAA,0BAAW,EAAC,CAAC,CAAC,CAAC;YAC7B,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACxD,CAAC;gBAAS,CAAC;YACV,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACF,CAAC,CAAC;AACH,CAAC;AAED,KAAK,CAAC,KAAK,UAAU,KAAK;IACzB,MAAM,MAAM,GAAG,gBAAS,CAAC,GAAG,CAAC,wBAAU,CAAC,CAAC;IAEzC,MAAM,GAAG,IAAI,6BAAY,CAAC,MAAM,CAAC,CAAC;IAElC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpD,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC;AACvD,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;IAChB,MAAM,KAAK,GAAG,IAAA,0BAAW,EAAC,CAAC,CAAC,CAAC;IAC7B,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC"}
|
package/dist/task-runner.d.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
+
import { type INodeTypeDescription } from 'n8n-workflow';
|
|
1
2
|
import { WebSocket } from 'ws';
|
|
3
|
+
import type { BaseRunnerConfig } from './config/base-runner-config';
|
|
4
|
+
import { TaskRunnerNodeTypes } from './node-types';
|
|
2
5
|
import { type RunnerMessage, type N8nMessage, type TaskResultData } from './runner-types';
|
|
3
6
|
export interface Task<T = unknown> {
|
|
4
7
|
taskId: string;
|
|
@@ -23,10 +26,11 @@ interface RPCCall {
|
|
|
23
26
|
export interface RPCCallObject {
|
|
24
27
|
[name: string]: ((...args: unknown[]) => Promise<unknown>) | RPCCallObject;
|
|
25
28
|
}
|
|
26
|
-
export
|
|
29
|
+
export interface TaskRunnerOpts extends BaseRunnerConfig {
|
|
27
30
|
taskType: string;
|
|
28
|
-
|
|
29
|
-
|
|
31
|
+
name?: string;
|
|
32
|
+
}
|
|
33
|
+
export declare abstract class TaskRunner {
|
|
30
34
|
id: string;
|
|
31
35
|
ws: WebSocket;
|
|
32
36
|
canSendOffers: boolean;
|
|
@@ -35,7 +39,11 @@ export declare abstract class TaskRunner {
|
|
|
35
39
|
openOffers: Map<TaskOffer['offerId'], TaskOffer>;
|
|
36
40
|
dataRequests: Map<DataRequest['requestId'], DataRequest>;
|
|
37
41
|
rpcCalls: Map<RPCCall['callId'], RPCCall>;
|
|
38
|
-
|
|
42
|
+
nodeTypes: TaskRunnerNodeTypes;
|
|
43
|
+
taskType: string;
|
|
44
|
+
maxConcurrency: number;
|
|
45
|
+
name: string;
|
|
46
|
+
constructor(opts: TaskRunnerOpts);
|
|
39
47
|
private receiveMessage;
|
|
40
48
|
private stopTaskOffers;
|
|
41
49
|
private startTaskOffers;
|
|
@@ -43,6 +51,7 @@ export declare abstract class TaskRunner {
|
|
|
43
51
|
sendOffers(): void;
|
|
44
52
|
send(message: RunnerMessage.ToN8n.All): void;
|
|
45
53
|
onMessage(message: N8nMessage.ToRunner.All): void;
|
|
54
|
+
setNodeTypes(nodeTypes: INodeTypeDescription[]): void;
|
|
46
55
|
processDataResponse(requestId: string, data: unknown): void;
|
|
47
56
|
hasOpenTasks(): boolean;
|
|
48
57
|
offerAccepted(offerId: string, taskId: string): void;
|
package/dist/task-runner.js
CHANGED
|
@@ -3,22 +3,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.TaskRunner = void 0;
|
|
4
4
|
const n8n_workflow_1 = require("n8n-workflow");
|
|
5
5
|
const nanoid_1 = require("nanoid");
|
|
6
|
-
const node_url_1 = require("node:url");
|
|
7
6
|
const ws_1 = require("ws");
|
|
7
|
+
const node_types_1 = require("./node-types");
|
|
8
8
|
const runner_types_1 = require("./runner-types");
|
|
9
9
|
const VALID_TIME_MS = 1000;
|
|
10
10
|
const VALID_EXTRA_MS = 100;
|
|
11
11
|
class TaskRunner {
|
|
12
|
-
constructor(
|
|
13
|
-
this.taskType = taskType;
|
|
14
|
-
this.maxConcurrency = maxConcurrency;
|
|
15
|
-
this.name = name;
|
|
12
|
+
constructor(opts) {
|
|
16
13
|
this.id = (0, nanoid_1.nanoid)();
|
|
17
14
|
this.canSendOffers = false;
|
|
18
15
|
this.runningTasks = new Map();
|
|
19
16
|
this.openOffers = new Map();
|
|
20
17
|
this.dataRequests = new Map();
|
|
21
18
|
this.rpcCalls = new Map();
|
|
19
|
+
this.nodeTypes = new node_types_1.TaskRunnerNodeTypes([]);
|
|
22
20
|
this.receiveMessage = (message) => {
|
|
23
21
|
const data = JSON.parse(message.data);
|
|
24
22
|
void this.onMessage(data);
|
|
@@ -30,12 +28,15 @@ class TaskRunner {
|
|
|
30
28
|
this.offerInterval = undefined;
|
|
31
29
|
}
|
|
32
30
|
};
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
this.
|
|
31
|
+
this.taskType = opts.taskType;
|
|
32
|
+
this.name = opts.name ?? 'Node.js Task Runner SDK';
|
|
33
|
+
this.maxConcurrency = opts.maxConcurrency;
|
|
34
|
+
const wsUrl = `ws://${opts.n8nUri}/runners/_ws?id=${this.id}`;
|
|
35
|
+
this.ws = new ws_1.WebSocket(wsUrl, {
|
|
36
36
|
headers: {
|
|
37
|
-
authorization: `Bearer ${grantToken}`,
|
|
37
|
+
authorization: `Bearer ${opts.grantToken}`,
|
|
38
38
|
},
|
|
39
|
+
maxPayload: opts.maxPayloadSize,
|
|
39
40
|
});
|
|
40
41
|
this.ws.addEventListener('message', this.receiveMessage);
|
|
41
42
|
this.ws.addEventListener('close', this.stopTaskOffers);
|
|
@@ -80,7 +81,7 @@ class TaskRunner {
|
|
|
80
81
|
case 'broker:inforequest':
|
|
81
82
|
this.send({
|
|
82
83
|
type: 'runner:info',
|
|
83
|
-
name: this.name
|
|
84
|
+
name: this.name,
|
|
84
85
|
types: [this.taskType],
|
|
85
86
|
});
|
|
86
87
|
break;
|
|
@@ -101,8 +102,15 @@ class TaskRunner {
|
|
|
101
102
|
break;
|
|
102
103
|
case 'broker:rpcresponse':
|
|
103
104
|
this.handleRpcResponse(message.callId, message.status, message.data);
|
|
105
|
+
break;
|
|
106
|
+
case 'broker:nodetypes':
|
|
107
|
+
this.setNodeTypes(message.nodeTypes);
|
|
108
|
+
break;
|
|
104
109
|
}
|
|
105
110
|
}
|
|
111
|
+
setNodeTypes(nodeTypes) {
|
|
112
|
+
this.nodeTypes = new node_types_1.TaskRunnerNodeTypes(nodeTypes);
|
|
113
|
+
}
|
|
106
114
|
processDataResponse(requestId, data) {
|
|
107
115
|
const request = this.dataRequests.get(requestId);
|
|
108
116
|
if (!request) {
|