n8n 1.110.1 → 1.112.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/auth/auth.service.js +2 -0
- package/dist/auth/auth.service.js.map +1 -1
- package/dist/build.tsbuildinfo +1 -1
- package/dist/commands/start.d.ts +1 -0
- package/dist/commands/start.js +17 -0
- package/dist/commands/start.js.map +1 -1
- package/dist/constants.d.ts +2 -0
- package/dist/constants.js +3 -1
- package/dist/constants.js.map +1 -1
- package/dist/controllers/dynamic-node-parameters.controller.js +6 -16
- package/dist/controllers/dynamic-node-parameters.controller.js.map +1 -1
- package/dist/controllers/e2e.controller.js +1 -0
- package/dist/controllers/e2e.controller.js.map +1 -1
- package/dist/controllers/folder.controller.d.ts +7 -2
- package/dist/controllers/folder.controller.js +24 -3
- package/dist/controllers/folder.controller.js.map +1 -1
- package/dist/controllers/role.controller.d.ts +5 -4
- package/dist/controllers/role.controller.js +21 -15
- package/dist/controllers/role.controller.js.map +1 -1
- package/dist/environments.ee/source-control/source-control.service.ee.js +2 -5
- package/dist/environments.ee/source-control/source-control.service.ee.js.map +1 -1
- package/dist/events/maps/relay.event-map.d.ts +4 -0
- package/dist/execution-lifecycle/execution-lifecycle-hooks.js +8 -1
- package/dist/execution-lifecycle/execution-lifecycle-hooks.js.map +1 -1
- package/dist/executions/execution-recovery.service.js +2 -1
- package/dist/executions/execution-recovery.service.js.map +1 -1
- package/dist/executions/execution.service.d.ts +2 -2
- package/dist/executions/execution.service.js +14 -1
- package/dist/executions/execution.service.js.map +1 -1
- package/dist/executions/execution.types.d.ts +2 -5
- package/dist/executions/executions.controller.d.ts +2 -2
- package/dist/middlewares/list-query/dtos/workflow.filter.dto.d.ts +1 -0
- package/dist/middlewares/list-query/dtos/workflow.filter.dto.js +6 -0
- package/dist/middlewares/list-query/dtos/workflow.filter.dto.js.map +1 -1
- package/dist/modules/community-packages/npm-utils.js +10 -0
- package/dist/modules/community-packages/npm-utils.js.map +1 -1
- package/dist/modules/data-table/data-store-aggregate.controller.d.ts +7 -1
- package/dist/modules/data-table/data-store-aggregate.controller.js +15 -2
- package/dist/modules/data-table/data-store-aggregate.controller.js.map +1 -1
- package/dist/modules/data-table/data-store-column.repository.js +1 -1
- package/dist/modules/data-table/data-store-column.repository.js.map +1 -1
- package/dist/modules/data-table/data-store-proxy.service.d.ts +3 -3
- package/dist/modules/data-table/data-store-proxy.service.js +13 -13
- package/dist/modules/data-table/data-store-proxy.service.js.map +1 -1
- package/dist/modules/data-table/data-store-rows.repository.d.ts +13 -20
- package/dist/modules/data-table/data-store-rows.repository.js +144 -125
- package/dist/modules/data-table/data-store-rows.repository.js.map +1 -1
- package/dist/modules/data-table/data-store-size-validator.service.d.ts +16 -0
- package/dist/modules/data-table/data-store-size-validator.service.js +79 -0
- package/dist/modules/data-table/data-store-size-validator.service.js.map +1 -0
- package/dist/modules/data-table/data-store.controller.d.ts +9 -9
- package/dist/modules/data-table/data-store.controller.js +16 -14
- package/dist/modules/data-table/data-store.controller.js.map +1 -1
- package/dist/modules/data-table/data-store.repository.d.ts +4 -1
- package/dist/modules/data-table/data-store.repository.js +47 -5
- package/dist/modules/data-table/data-store.repository.js.map +1 -1
- package/dist/modules/data-table/data-store.service.d.ts +19 -11
- package/dist/modules/data-table/data-store.service.js +102 -73
- package/dist/modules/data-table/data-store.service.js.map +1 -1
- package/dist/modules/data-table/data-store.types.d.ts +2 -0
- package/dist/modules/data-table/data-store.types.js +7 -0
- package/dist/modules/data-table/data-store.types.js.map +1 -1
- package/dist/modules/data-table/data-table.module.js +1 -1
- package/dist/modules/data-table/utils/sql-utils.d.ts +2 -5
- package/dist/modules/data-table/utils/sql-utils.js +7 -17
- package/dist/modules/data-table/utils/sql-utils.js.map +1 -1
- package/dist/public-api/types.d.ts +5 -0
- package/dist/public-api/v1/handlers/executions/executions.handler.d.ts +1 -0
- package/dist/public-api/v1/handlers/executions/executions.handler.js +34 -1
- package/dist/public-api/v1/handlers/executions/executions.handler.js.map +1 -1
- package/dist/public-api/v1/openapi.yml +60 -7
- package/dist/push/abstract.push.d.ts +2 -2
- package/dist/push/abstract.push.js +4 -4
- package/dist/push/abstract.push.js.map +1 -1
- package/dist/push/index.d.ts +3 -2
- package/dist/push/index.js +30 -26
- package/dist/push/index.js.map +1 -1
- package/dist/push/origin-validator.d.ts +13 -0
- package/dist/push/origin-validator.js +145 -0
- package/dist/push/origin-validator.js.map +1 -0
- package/dist/push/websocket.push.d.ts +1 -1
- package/dist/push/websocket.push.js +2 -2
- package/dist/push/websocket.push.js.map +1 -1
- package/dist/scaling/constants.d.ts +2 -2
- package/dist/scaling/pubsub/pubsub.event-map.d.ts +2 -0
- package/dist/scaling/pubsub/pubsub.registry.d.ts +1 -0
- package/dist/scaling/pubsub/pubsub.registry.js +9 -2
- package/dist/scaling/pubsub/pubsub.registry.js.map +1 -1
- package/dist/scaling/pubsub/pubsub.types.d.ts +2 -1
- package/dist/scaling/scaling.service.d.ts +1 -1
- package/dist/scaling/scaling.service.js +0 -4
- package/dist/scaling/scaling.service.js.map +1 -1
- package/dist/server.js +22 -23
- package/dist/server.js.map +1 -1
- package/dist/services/dynamic-node-parameters.service.d.ts +7 -1
- package/dist/services/dynamic-node-parameters.service.js +15 -2
- package/dist/services/dynamic-node-parameters.service.js.map +1 -1
- package/dist/services/frontend.service.js +5 -0
- package/dist/services/frontend.service.js.map +1 -1
- package/dist/services/ownership.service.d.ts +1 -0
- package/dist/services/ownership.service.js +6 -0
- package/dist/services/ownership.service.js.map +1 -1
- package/dist/services/public-api-key.service.js +2 -0
- package/dist/services/public-api-key.service.js.map +1 -1
- package/dist/services/role.service.d.ts +2 -2
- package/dist/services/role.service.js +3 -3
- package/dist/services/role.service.js.map +1 -1
- package/dist/sso.ee/oidc/oidc.service.ee.d.ts +25 -4
- package/dist/sso.ee/oidc/oidc.service.ee.js +167 -22
- package/dist/sso.ee/oidc/oidc.service.ee.js.map +1 -1
- package/dist/sso.ee/oidc/routes/oidc.controller.ee.d.ts +6 -2
- package/dist/sso.ee/oidc/routes/oidc.controller.ee.js +41 -7
- package/dist/sso.ee/oidc/routes/oidc.controller.ee.js.map +1 -1
- package/dist/sso.ee/sso-helpers.d.ts +1 -0
- package/dist/sso.ee/sso-helpers.js +19 -0
- package/dist/sso.ee/sso-helpers.js.map +1 -1
- package/dist/task-runners/errors/missing-requirements.error.d.ts +6 -0
- package/dist/task-runners/errors/missing-requirements.error.js +17 -0
- package/dist/task-runners/errors/missing-requirements.error.js.map +1 -0
- package/dist/task-runners/internal-task-runner-disconnect-analyzer.d.ts +2 -2
- package/dist/task-runners/internal-task-runner-disconnect-analyzer.js +2 -2
- package/dist/task-runners/internal-task-runner-disconnect-analyzer.js.map +1 -1
- package/dist/task-runners/task-runner-module.d.ts +5 -3
- package/dist/task-runners/task-runner-module.js +25 -13
- package/dist/task-runners/task-runner-module.js.map +1 -1
- package/dist/task-runners/task-runner-process-base.d.ts +39 -0
- package/dist/task-runners/task-runner-process-base.js +111 -0
- package/dist/task-runners/task-runner-process-base.js.map +1 -0
- package/dist/task-runners/task-runner-process-js.d.ts +21 -0
- package/dist/task-runners/{task-runner-process.js → task-runner-process-js.js} +35 -108
- package/dist/task-runners/task-runner-process-js.js.map +1 -0
- package/dist/task-runners/task-runner-process-py.d.ts +15 -0
- package/dist/task-runners/task-runner-process-py.js +76 -0
- package/dist/task-runners/task-runner-process-py.js.map +1 -0
- package/dist/task-runners/task-runner-process-restart-loop-detector.d.ts +2 -2
- package/dist/task-runners/task-runner-process-restart-loop-detector.js.map +1 -1
- package/dist/user-management/email/templates/credentials-shared.handlebars +48 -40
- package/dist/user-management/email/templates/n8n-logo.png +0 -0
- package/dist/user-management/email/templates/password-reset-requested.handlebars +68 -60
- package/dist/user-management/email/templates/project-shared.handlebars +43 -35
- package/dist/user-management/email/templates/user-invited.handlebars +48 -40
- package/dist/user-management/email/templates/workflow-shared.handlebars +48 -40
- package/dist/workflows/workflow.request.d.ts +1 -0
- package/dist/workflows/workflow.service.ee.js +1 -0
- package/dist/workflows/workflow.service.ee.js.map +1 -1
- package/package.json +24 -18
- package/dist/task-runners/task-runner-process.d.ts +0 -36
- package/dist/task-runners/task-runner-process.js.map +0 -1
|
@@ -15,7 +15,7 @@ const di_1 = require("@n8n/di");
|
|
|
15
15
|
const default_task_runner_disconnect_analyzer_1 = require("./default-task-runner-disconnect-analyzer");
|
|
16
16
|
const task_runner_oom_error_1 = require("./errors/task-runner-oom-error");
|
|
17
17
|
const sliding_window_signal_1 = require("./sliding-window-signal");
|
|
18
|
-
const
|
|
18
|
+
const task_runner_process_js_1 = require("./task-runner-process-js");
|
|
19
19
|
let InternalTaskRunnerDisconnectAnalyzer = class InternalTaskRunnerDisconnectAnalyzer extends default_task_runner_disconnect_analyzer_1.DefaultTaskRunnerDisconnectAnalyzer {
|
|
20
20
|
constructor(runnerConfig, taskRunnerProcess) {
|
|
21
21
|
super();
|
|
@@ -44,6 +44,6 @@ exports.InternalTaskRunnerDisconnectAnalyzer = InternalTaskRunnerDisconnectAnaly
|
|
|
44
44
|
exports.InternalTaskRunnerDisconnectAnalyzer = InternalTaskRunnerDisconnectAnalyzer = __decorate([
|
|
45
45
|
(0, di_1.Service)(),
|
|
46
46
|
__metadata("design:paramtypes", [config_1.TaskRunnersConfig,
|
|
47
|
-
|
|
47
|
+
task_runner_process_js_1.JsTaskRunnerProcess])
|
|
48
48
|
], InternalTaskRunnerDisconnectAnalyzer);
|
|
49
49
|
//# sourceMappingURL=internal-task-runner-disconnect-analyzer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internal-task-runner-disconnect-analyzer.js","sourceRoot":"","sources":["../../src/task-runners/internal-task-runner-disconnect-analyzer.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wCAAgD;AAChD,gCAAkC;AAIlC,uGAAgG;AAChG,0EAAoE;AACpE,mEAA8D;AAE9D
|
|
1
|
+
{"version":3,"file":"internal-task-runner-disconnect-analyzer.js","sourceRoot":"","sources":["../../src/task-runners/internal-task-runner-disconnect-analyzer.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wCAAgD;AAChD,gCAAkC;AAIlC,uGAAgG;AAChG,0EAAoE;AACpE,mEAA8D;AAE9D,qEAA+D;AAOxD,IAAM,oCAAoC,GAA1C,MAAM,oCAAqC,SAAQ,6EAAmC;IAG5F,YACkB,YAA+B,EAC/B,iBAAsC;QAEvD,KAAK,EAAE,CAAC;QAHS,iBAAY,GAAZ,YAAY,CAAmB;QAC/B,sBAAiB,GAAjB,iBAAiB,CAAqB;QASvD,IAAI,CAAC,gBAAgB,GAAG,IAAI,2CAAmB,CAAC,IAAI,CAAC,iBAAiB,EAAE,MAAM,EAAE;YAC/E,cAAc,EAAE,GAAG;SACnB,CAAC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,IAA4B;QACnD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC9C,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;YACxB,OAAO,IAAI,0CAAkB,CAAC,IAAI,CAAC,QAAQ,IAAI,mBAAmB,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC7F,CAAC;QAED,OAAO,MAAM,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;IAEO,KAAK,CAAC,eAAe;QAC5B,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAI3C,OAAO,SAAS,CAAC;QAClB,CAAC;QAED,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC;QAE/D,OAAO,cAAc,EAAE,MAAM,IAAI,SAAS,CAAC;IAC5C,CAAC;CACD,CAAA;AAxCY,oFAAoC;+CAApC,oCAAoC;IADhD,IAAA,YAAO,GAAE;qCAKuB,0BAAiB;QACZ,4CAAmB;GAL5C,oCAAoC,CAwChD"}
|
|
@@ -8,13 +8,15 @@ export declare class TaskRunnerModule {
|
|
|
8
8
|
private taskBrokerHttpServer;
|
|
9
9
|
private taskBrokerWsServer;
|
|
10
10
|
private taskRequester;
|
|
11
|
-
private
|
|
12
|
-
private
|
|
11
|
+
private jsRunnerProcess;
|
|
12
|
+
private pyRunnerProcess;
|
|
13
|
+
private jsRunnerProcessRestartLoopDetector;
|
|
14
|
+
private pyRunnerProcessRestartLoopDetector;
|
|
13
15
|
constructor(logger: Logger, errorReporter: ErrorReporter, runnerConfig: TaskRunnersConfig);
|
|
14
16
|
start(): Promise<void>;
|
|
15
17
|
stop(): Promise<void>;
|
|
16
18
|
private loadTaskRequester;
|
|
17
19
|
private loadTaskBroker;
|
|
18
|
-
private
|
|
20
|
+
private startInternalTaskRunners;
|
|
19
21
|
private onRunnerRestartLoopDetected;
|
|
20
22
|
}
|
|
@@ -73,15 +73,20 @@ let TaskRunnerModule = class TaskRunnerModule {
|
|
|
73
73
|
throw new missing_auth_token_error_1.MissingAuthTokenError();
|
|
74
74
|
await this.loadTaskRequester();
|
|
75
75
|
await this.loadTaskBroker();
|
|
76
|
-
if (mode === 'internal')
|
|
77
|
-
await this.
|
|
78
|
-
}
|
|
76
|
+
if (mode === 'internal')
|
|
77
|
+
await this.startInternalTaskRunners();
|
|
79
78
|
}
|
|
80
79
|
async stop() {
|
|
81
80
|
const stopRunnerProcessTask = (async () => {
|
|
82
|
-
if (this.
|
|
83
|
-
await this.
|
|
84
|
-
this.
|
|
81
|
+
if (this.jsRunnerProcess) {
|
|
82
|
+
await this.jsRunnerProcess.stop();
|
|
83
|
+
this.jsRunnerProcess = undefined;
|
|
84
|
+
}
|
|
85
|
+
})();
|
|
86
|
+
const stopPythonRunnerProcessTask = (async () => {
|
|
87
|
+
if (this.pyRunnerProcess) {
|
|
88
|
+
await this.pyRunnerProcess.stop();
|
|
89
|
+
this.pyRunnerProcess = undefined;
|
|
85
90
|
}
|
|
86
91
|
})();
|
|
87
92
|
const stopRunnerServerTask = (async () => {
|
|
@@ -90,7 +95,7 @@ let TaskRunnerModule = class TaskRunnerModule {
|
|
|
90
95
|
this.taskBrokerHttpServer = undefined;
|
|
91
96
|
}
|
|
92
97
|
})();
|
|
93
|
-
await Promise.all([stopRunnerProcessTask, stopRunnerServerTask]);
|
|
98
|
+
await Promise.all([stopRunnerProcessTask, stopPythonRunnerProcessTask, stopRunnerServerTask]);
|
|
94
99
|
}
|
|
95
100
|
async loadTaskRequester() {
|
|
96
101
|
const { TaskRequester } = await Promise.resolve().then(() => __importStar(require('../task-runners/task-managers/task-requester')));
|
|
@@ -104,13 +109,20 @@ let TaskRunnerModule = class TaskRunnerModule {
|
|
|
104
109
|
this.taskBrokerWsServer = di_1.Container.get(task_broker_ws_server_1.TaskBrokerWsServer);
|
|
105
110
|
await this.taskBrokerHttpServer.start();
|
|
106
111
|
}
|
|
107
|
-
async
|
|
112
|
+
async startInternalTaskRunners() {
|
|
108
113
|
a.ok(this.taskBrokerWsServer, 'Task Runner WS Server not loaded');
|
|
109
|
-
const {
|
|
110
|
-
this.
|
|
111
|
-
this.
|
|
112
|
-
this.
|
|
113
|
-
await this.
|
|
114
|
+
const { JsTaskRunnerProcess } = await Promise.resolve().then(() => __importStar(require('../task-runners/task-runner-process-js')));
|
|
115
|
+
this.jsRunnerProcess = di_1.Container.get(JsTaskRunnerProcess);
|
|
116
|
+
this.jsRunnerProcessRestartLoopDetector = new task_runner_process_restart_loop_detector_1.TaskRunnerProcessRestartLoopDetector(this.jsRunnerProcess);
|
|
117
|
+
this.jsRunnerProcessRestartLoopDetector.on('restart-loop-detected', this.onRunnerRestartLoopDetected);
|
|
118
|
+
await this.jsRunnerProcess.start();
|
|
119
|
+
if (this.runnerConfig.isNativePythonRunnerEnabled) {
|
|
120
|
+
const { PyTaskRunnerProcess } = await Promise.resolve().then(() => __importStar(require('../task-runners/task-runner-process-py')));
|
|
121
|
+
this.pyRunnerProcess = di_1.Container.get(PyTaskRunnerProcess);
|
|
122
|
+
this.pyRunnerProcessRestartLoopDetector = new task_runner_process_restart_loop_detector_1.TaskRunnerProcessRestartLoopDetector(this.pyRunnerProcess);
|
|
123
|
+
this.pyRunnerProcessRestartLoopDetector.on('restart-loop-detected', this.onRunnerRestartLoopDetected);
|
|
124
|
+
await this.pyRunnerProcess.start();
|
|
125
|
+
}
|
|
114
126
|
const { InternalTaskRunnerDisconnectAnalyzer } = await Promise.resolve().then(() => __importStar(require('../task-runners/internal-task-runner-disconnect-analyzer')));
|
|
115
127
|
this.taskBrokerWsServer.setDisconnectAnalyzer(di_1.Container.get(InternalTaskRunnerDisconnectAnalyzer));
|
|
116
128
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-runner-module.js","sourceRoot":"","sources":["../../src/task-runners/task-runner-module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wDAA6C;AAC7C,wCAAgD;AAChD,gDAA6C;AAC7C,gCAA6C;AAC7C,uCAAyC;AACzC,+CAAqC;AACrC,sDAAwC;AAGxC,4FAAsF;
|
|
1
|
+
{"version":3,"file":"task-runner-module.js","sourceRoot":"","sources":["../../src/task-runners/task-runner-module.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Logger } from '@n8n/backend-common';
|
|
2
|
+
import { LogScope, TaskRunnersConfig } from '@n8n/config';
|
|
3
|
+
import { spawn } from 'node:child_process';
|
|
4
|
+
import { TypedEmitter } from '../typed-emitter';
|
|
5
|
+
import { TaskBrokerAuthService } from './task-broker/auth/task-broker-auth.service';
|
|
6
|
+
import { TaskRunnerLifecycleEvents } from './task-runner-lifecycle-events';
|
|
7
|
+
export type ChildProcess = ReturnType<typeof spawn>;
|
|
8
|
+
export type ExitReason = 'unknown' | 'oom';
|
|
9
|
+
export type TaskRunnerProcessEventMap = {
|
|
10
|
+
exit: {
|
|
11
|
+
reason: ExitReason;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
export declare abstract class TaskRunnerProcessBase extends TypedEmitter<TaskRunnerProcessEventMap> {
|
|
15
|
+
protected readonly logger: Logger;
|
|
16
|
+
protected readonly runnerConfig: TaskRunnersConfig;
|
|
17
|
+
protected readonly authService: TaskBrokerAuthService;
|
|
18
|
+
protected readonly runnerLifecycleEvents: TaskRunnerLifecycleEvents;
|
|
19
|
+
protected readonly name: string;
|
|
20
|
+
protected readonly loggerScope: LogScope;
|
|
21
|
+
protected process: ChildProcess | null;
|
|
22
|
+
protected _runPromise: Promise<void> | null;
|
|
23
|
+
protected isShuttingDown: boolean;
|
|
24
|
+
constructor(logger: Logger, runnerConfig: TaskRunnersConfig, authService: TaskBrokerAuthService, runnerLifecycleEvents: TaskRunnerLifecycleEvents);
|
|
25
|
+
get isRunning(): boolean;
|
|
26
|
+
get pid(): number | undefined;
|
|
27
|
+
get runPromise(): Promise<void> | null;
|
|
28
|
+
get isInternal(): boolean;
|
|
29
|
+
start(): Promise<void>;
|
|
30
|
+
stop(): Promise<void>;
|
|
31
|
+
protected forceRestart(): Promise<void>;
|
|
32
|
+
protected onProcessExit(code: number | null, resolveFn: () => void): void;
|
|
33
|
+
protected monitorProcess(taskRunnerProcess: ChildProcess): void;
|
|
34
|
+
abstract startProcess(grantToken: string, taskBrokerUri: string): Promise<ChildProcess>;
|
|
35
|
+
setupProcessMonitoring?(process: ChildProcess): void;
|
|
36
|
+
analyzeExitReason?(code: number | null): {
|
|
37
|
+
reason: ExitReason;
|
|
38
|
+
};
|
|
39
|
+
}
|
|
@@ -0,0 +1,111 @@
|
|
|
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
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.TaskRunnerProcessBase = void 0;
|
|
16
|
+
const backend_common_1 = require("@n8n/backend-common");
|
|
17
|
+
const config_1 = require("@n8n/config");
|
|
18
|
+
const decorators_1 = require("@n8n/decorators");
|
|
19
|
+
const di_1 = require("@n8n/di");
|
|
20
|
+
const strict_1 = __importDefault(require("node:assert/strict"));
|
|
21
|
+
const typed_emitter_1 = require("../typed-emitter");
|
|
22
|
+
const forward_to_logger_1 = require("./forward-to-logger");
|
|
23
|
+
const task_broker_auth_service_1 = require("./task-broker/auth/task-broker-auth.service");
|
|
24
|
+
const task_runner_lifecycle_events_1 = require("./task-runner-lifecycle-events");
|
|
25
|
+
let TaskRunnerProcessBase = class TaskRunnerProcessBase extends typed_emitter_1.TypedEmitter {
|
|
26
|
+
constructor(logger, runnerConfig, authService, runnerLifecycleEvents) {
|
|
27
|
+
super();
|
|
28
|
+
this.logger = logger;
|
|
29
|
+
this.runnerConfig = runnerConfig;
|
|
30
|
+
this.authService = authService;
|
|
31
|
+
this.runnerLifecycleEvents = runnerLifecycleEvents;
|
|
32
|
+
this.process = null;
|
|
33
|
+
this._runPromise = null;
|
|
34
|
+
this.isShuttingDown = false;
|
|
35
|
+
this.logger = logger.scoped(this.loggerScope);
|
|
36
|
+
this.runnerLifecycleEvents.on('runner:failed-heartbeat-check', () => {
|
|
37
|
+
this.logger.warn('Task runner failed heartbeat check, restarting...');
|
|
38
|
+
void this.forceRestart();
|
|
39
|
+
});
|
|
40
|
+
this.runnerLifecycleEvents.on('runner:timed-out-during-task', () => {
|
|
41
|
+
this.logger.warn('Task runner timed out during task, restarting...');
|
|
42
|
+
void this.forceRestart();
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
get isRunning() {
|
|
46
|
+
return this.process !== null;
|
|
47
|
+
}
|
|
48
|
+
get pid() {
|
|
49
|
+
return this.process?.pid;
|
|
50
|
+
}
|
|
51
|
+
get runPromise() {
|
|
52
|
+
return this._runPromise;
|
|
53
|
+
}
|
|
54
|
+
get isInternal() {
|
|
55
|
+
return this.runnerConfig.mode === 'internal';
|
|
56
|
+
}
|
|
57
|
+
async start() {
|
|
58
|
+
(0, strict_1.default)(!this.process, `${this.name} already running`);
|
|
59
|
+
const grantToken = await this.authService.createGrantToken();
|
|
60
|
+
const taskBrokerUri = `http://127.0.0.1:${this.runnerConfig.port}`;
|
|
61
|
+
this.process = await this.startProcess(grantToken, taskBrokerUri);
|
|
62
|
+
(0, forward_to_logger_1.forwardToLogger)(this.logger, this.process, `[${this.name}] `);
|
|
63
|
+
this.monitorProcess(this.process);
|
|
64
|
+
}
|
|
65
|
+
async stop() {
|
|
66
|
+
if (!this.process)
|
|
67
|
+
return;
|
|
68
|
+
this.isShuttingDown = true;
|
|
69
|
+
this.process.kill();
|
|
70
|
+
await this._runPromise;
|
|
71
|
+
this.isShuttingDown = false;
|
|
72
|
+
}
|
|
73
|
+
async forceRestart() {
|
|
74
|
+
if (!this.process)
|
|
75
|
+
return;
|
|
76
|
+
this.process.kill('SIGKILL');
|
|
77
|
+
await this._runPromise;
|
|
78
|
+
}
|
|
79
|
+
onProcessExit(code, resolveFn) {
|
|
80
|
+
this.process = null;
|
|
81
|
+
const exitReason = this.analyzeExitReason?.(code) ?? { reason: 'unknown' };
|
|
82
|
+
this.emit('exit', exitReason);
|
|
83
|
+
resolveFn();
|
|
84
|
+
if (!this.isShuttingDown) {
|
|
85
|
+
setImmediate(async () => await this.start());
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
monitorProcess(taskRunnerProcess) {
|
|
89
|
+
this._runPromise = new Promise((resolve) => {
|
|
90
|
+
this.setupProcessMonitoring?.(taskRunnerProcess);
|
|
91
|
+
taskRunnerProcess.on('exit', (code) => {
|
|
92
|
+
this.onProcessExit(code, resolve);
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
exports.TaskRunnerProcessBase = TaskRunnerProcessBase;
|
|
98
|
+
__decorate([
|
|
99
|
+
(0, decorators_1.OnShutdown)(),
|
|
100
|
+
__metadata("design:type", Function),
|
|
101
|
+
__metadata("design:paramtypes", []),
|
|
102
|
+
__metadata("design:returntype", Promise)
|
|
103
|
+
], TaskRunnerProcessBase.prototype, "stop", null);
|
|
104
|
+
exports.TaskRunnerProcessBase = TaskRunnerProcessBase = __decorate([
|
|
105
|
+
(0, di_1.Service)(),
|
|
106
|
+
__metadata("design:paramtypes", [backend_common_1.Logger,
|
|
107
|
+
config_1.TaskRunnersConfig,
|
|
108
|
+
task_broker_auth_service_1.TaskBrokerAuthService,
|
|
109
|
+
task_runner_lifecycle_events_1.TaskRunnerLifecycleEvents])
|
|
110
|
+
], TaskRunnerProcessBase);
|
|
111
|
+
//# sourceMappingURL=task-runner-process-base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-runner-process-base.js","sourceRoot":"","sources":["../../src/task-runners/task-runner-process-base.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Logger } from '@n8n/backend-common';
|
|
2
|
+
import { TaskRunnersConfig } from '@n8n/config';
|
|
3
|
+
import { TaskBrokerAuthService } from './task-broker/auth/task-broker-auth.service';
|
|
4
|
+
import { TaskRunnerLifecycleEvents } from './task-runner-lifecycle-events';
|
|
5
|
+
import { ChildProcess, ExitReason, TaskRunnerProcessBase } from './task-runner-process-base';
|
|
6
|
+
export declare class JsTaskRunnerProcess extends TaskRunnerProcessBase {
|
|
7
|
+
readonly logger: Logger;
|
|
8
|
+
readonly runnerConfig: TaskRunnersConfig;
|
|
9
|
+
readonly authService: TaskBrokerAuthService;
|
|
10
|
+
readonly runnerLifecycleEvents: TaskRunnerLifecycleEvents;
|
|
11
|
+
readonly name = "runnner:js";
|
|
12
|
+
readonly loggerScope = "task-runner-js";
|
|
13
|
+
private oomDetector;
|
|
14
|
+
constructor(logger: Logger, runnerConfig: TaskRunnersConfig, authService: TaskBrokerAuthService, runnerLifecycleEvents: TaskRunnerLifecycleEvents);
|
|
15
|
+
startProcess(grantToken: string, taskBrokerUri: string): Promise<ChildProcess>;
|
|
16
|
+
setupProcessMonitoring(process: ChildProcess): void;
|
|
17
|
+
analyzeExitReason(): {
|
|
18
|
+
reason: ExitReason;
|
|
19
|
+
};
|
|
20
|
+
private getProcessEnvVars;
|
|
21
|
+
}
|
|
@@ -41,153 +41,80 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
41
41
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
42
42
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
43
43
|
};
|
|
44
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
45
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
46
|
+
};
|
|
44
47
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
-
exports.
|
|
48
|
+
exports.JsTaskRunnerProcess = void 0;
|
|
46
49
|
const backend_common_1 = require("@n8n/backend-common");
|
|
47
50
|
const config_1 = require("@n8n/config");
|
|
48
|
-
const decorators_1 = require("@n8n/decorators");
|
|
49
51
|
const di_1 = require("@n8n/di");
|
|
50
|
-
const
|
|
52
|
+
const strict_1 = __importDefault(require("node:assert/strict"));
|
|
51
53
|
const node_child_process_1 = require("node:child_process");
|
|
52
54
|
const process = __importStar(require("node:process"));
|
|
53
|
-
const forward_to_logger_1 = require("./forward-to-logger");
|
|
54
55
|
const node_process_oom_detector_1 = require("./node-process-oom-detector");
|
|
55
56
|
const task_broker_auth_service_1 = require("./task-broker/auth/task-broker-auth.service");
|
|
56
57
|
const task_runner_lifecycle_events_1 = require("./task-runner-lifecycle-events");
|
|
57
|
-
const
|
|
58
|
-
let
|
|
59
|
-
get isRunning() {
|
|
60
|
-
return this.process !== null;
|
|
61
|
-
}
|
|
62
|
-
get pid() {
|
|
63
|
-
return this.process?.pid;
|
|
64
|
-
}
|
|
65
|
-
get runPromise() {
|
|
66
|
-
return this._runPromise;
|
|
67
|
-
}
|
|
58
|
+
const task_runner_process_base_1 = require("./task-runner-process-base");
|
|
59
|
+
let JsTaskRunnerProcess = class JsTaskRunnerProcess extends task_runner_process_base_1.TaskRunnerProcessBase {
|
|
68
60
|
constructor(logger, runnerConfig, authService, runnerLifecycleEvents) {
|
|
69
|
-
super();
|
|
61
|
+
super(logger, runnerConfig, authService, runnerLifecycleEvents);
|
|
62
|
+
this.logger = logger;
|
|
70
63
|
this.runnerConfig = runnerConfig;
|
|
71
64
|
this.authService = authService;
|
|
72
65
|
this.runnerLifecycleEvents = runnerLifecycleEvents;
|
|
73
|
-
this.
|
|
74
|
-
this.
|
|
66
|
+
this.name = 'runnner:js';
|
|
67
|
+
this.loggerScope = 'task-runner-js';
|
|
75
68
|
this.oomDetector = null;
|
|
76
|
-
this.
|
|
77
|
-
this.passthroughEnvVars = [
|
|
78
|
-
'PATH',
|
|
79
|
-
'HOME',
|
|
80
|
-
'GENERIC_TIMEZONE',
|
|
81
|
-
'NODE_FUNCTION_ALLOW_BUILTIN',
|
|
82
|
-
'NODE_FUNCTION_ALLOW_EXTERNAL',
|
|
83
|
-
'N8N_SENTRY_DSN',
|
|
84
|
-
'N8N_RUNNERS_INSECURE_MODE',
|
|
85
|
-
'N8N_VERSION',
|
|
86
|
-
'ENVIRONMENT',
|
|
87
|
-
'DEPLOYMENT_NAME',
|
|
88
|
-
'NODE_PATH',
|
|
89
|
-
];
|
|
90
|
-
this.mode = 'secure';
|
|
91
|
-
a.ok(this.runnerConfig.mode !== 'external', 'Task Runner Process cannot be used in external mode');
|
|
92
|
-
this.mode = this.runnerConfig.insecureMode ? 'insecure' : 'secure';
|
|
93
|
-
this.logger = logger.scoped('task-runner');
|
|
94
|
-
this.runnerLifecycleEvents.on('runner:failed-heartbeat-check', () => {
|
|
95
|
-
this.logger.warn('Task runner failed heartbeat check, restarting...');
|
|
96
|
-
void this.forceRestart();
|
|
97
|
-
});
|
|
98
|
-
this.runnerLifecycleEvents.on('runner:timed-out-during-task', () => {
|
|
99
|
-
this.logger.warn('Task runner timed out during task, restarting...');
|
|
100
|
-
void this.forceRestart();
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
async start() {
|
|
104
|
-
a.ok(!this.process, 'Task Runner Process already running');
|
|
105
|
-
const grantToken = await this.authService.createGrantToken();
|
|
106
|
-
const taskBrokerUri = `http://127.0.0.1:${this.runnerConfig.port}`;
|
|
107
|
-
this.process = this.startNode(grantToken, taskBrokerUri);
|
|
108
|
-
(0, forward_to_logger_1.forwardToLogger)(this.logger, this.process, '[Task Runner]: ');
|
|
109
|
-
this.monitorProcess(this.process);
|
|
69
|
+
(0, strict_1.default)(this.isInternal, `${this.constructor.name} cannot be used in external mode`);
|
|
110
70
|
}
|
|
111
|
-
|
|
71
|
+
async startProcess(grantToken, taskBrokerUri) {
|
|
112
72
|
const startScript = require.resolve('@n8n/task-runner/start');
|
|
113
|
-
const flags = this.
|
|
114
|
-
? [
|
|
115
|
-
: [];
|
|
73
|
+
const flags = this.runnerConfig.insecureMode
|
|
74
|
+
? []
|
|
75
|
+
: ['--disallow-code-generation-from-strings', '--disable-proto=delete'];
|
|
116
76
|
return (0, node_child_process_1.spawn)('node', [...flags, startScript], {
|
|
117
77
|
env: this.getProcessEnvVars(grantToken, taskBrokerUri),
|
|
118
78
|
});
|
|
119
79
|
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
return;
|
|
123
|
-
this.isShuttingDown = true;
|
|
124
|
-
this.killNode();
|
|
125
|
-
await this._runPromise;
|
|
126
|
-
this.isShuttingDown = false;
|
|
80
|
+
setupProcessMonitoring(process) {
|
|
81
|
+
this.oomDetector = new node_process_oom_detector_1.NodeProcessOomDetector(process);
|
|
127
82
|
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
return;
|
|
131
|
-
this.process.kill('SIGKILL');
|
|
132
|
-
await this._runPromise;
|
|
133
|
-
}
|
|
134
|
-
killNode() {
|
|
135
|
-
if (!this.process)
|
|
136
|
-
return;
|
|
137
|
-
this.process.kill();
|
|
138
|
-
}
|
|
139
|
-
monitorProcess(taskRunnerProcess) {
|
|
140
|
-
this._runPromise = new Promise((resolve) => {
|
|
141
|
-
this.oomDetector = new node_process_oom_detector_1.NodeProcessOomDetector(taskRunnerProcess);
|
|
142
|
-
taskRunnerProcess.on('exit', (code) => {
|
|
143
|
-
this.onProcessExit(code, resolve);
|
|
144
|
-
});
|
|
145
|
-
});
|
|
146
|
-
}
|
|
147
|
-
onProcessExit(_code, resolveFn) {
|
|
148
|
-
this.process = null;
|
|
149
|
-
this.emit('exit', { reason: this.oomDetector?.didProcessOom ? 'oom' : 'unknown' });
|
|
150
|
-
resolveFn();
|
|
151
|
-
if (!this.isShuttingDown) {
|
|
152
|
-
setImmediate(async () => await this.start());
|
|
153
|
-
}
|
|
83
|
+
analyzeExitReason() {
|
|
84
|
+
return { reason: this.oomDetector?.didProcessOom ? 'oom' : 'unknown' };
|
|
154
85
|
}
|
|
155
86
|
getProcessEnvVars(grantToken, taskBrokerUri) {
|
|
156
87
|
const envVars = {
|
|
88
|
+
PATH: process.env.PATH,
|
|
89
|
+
HOME: process.env.HOME,
|
|
90
|
+
NODE_PATH: process.env.NODE_PATH,
|
|
91
|
+
GENERIC_TIMEZONE: process.env.GENERIC_TIMEZONE,
|
|
92
|
+
NODE_FUNCTION_ALLOW_BUILTIN: process.env.NODE_FUNCTION_ALLOW_BUILTIN,
|
|
93
|
+
NODE_FUNCTION_ALLOW_EXTERNAL: process.env.NODE_FUNCTION_ALLOW_EXTERNAL,
|
|
94
|
+
N8N_SENTRY_DSN: process.env.N8N_SENTRY_DSN,
|
|
95
|
+
N8N_VERSION: process.env.N8N_VERSION,
|
|
96
|
+
ENVIRONMENT: process.env.ENVIRONMENT,
|
|
97
|
+
DEPLOYMENT_NAME: process.env.DEPLOYMENT_NAME,
|
|
157
98
|
N8N_RUNNERS_GRANT_TOKEN: grantToken,
|
|
158
99
|
N8N_RUNNERS_TASK_BROKER_URI: taskBrokerUri,
|
|
159
100
|
N8N_RUNNERS_MAX_PAYLOAD: this.runnerConfig.maxPayload.toString(),
|
|
160
101
|
N8N_RUNNERS_MAX_CONCURRENCY: this.runnerConfig.maxConcurrency.toString(),
|
|
161
102
|
N8N_RUNNERS_TASK_TIMEOUT: this.runnerConfig.taskTimeout.toString(),
|
|
162
103
|
N8N_RUNNERS_HEARTBEAT_INTERVAL: this.runnerConfig.heartbeatInterval.toString(),
|
|
163
|
-
|
|
104
|
+
N8N_RUNNERS_INSECURE_MODE: process.env.N8N_RUNNERS_INSECURE_MODE,
|
|
164
105
|
};
|
|
165
106
|
if (this.runnerConfig.maxOldSpaceSize) {
|
|
166
107
|
envVars.NODE_OPTIONS = `--max-old-space-size=${this.runnerConfig.maxOldSpaceSize}`;
|
|
167
108
|
}
|
|
168
109
|
return envVars;
|
|
169
110
|
}
|
|
170
|
-
getPassthroughEnvVars() {
|
|
171
|
-
return this.passthroughEnvVars.reduce((env, key) => {
|
|
172
|
-
if (process.env[key]) {
|
|
173
|
-
env[key] = process.env[key];
|
|
174
|
-
}
|
|
175
|
-
return env;
|
|
176
|
-
}, {});
|
|
177
|
-
}
|
|
178
111
|
};
|
|
179
|
-
exports.
|
|
180
|
-
__decorate([
|
|
181
|
-
(0, decorators_1.OnShutdown)(),
|
|
182
|
-
__metadata("design:type", Function),
|
|
183
|
-
__metadata("design:paramtypes", []),
|
|
184
|
-
__metadata("design:returntype", Promise)
|
|
185
|
-
], TaskRunnerProcess.prototype, "stop", null);
|
|
186
|
-
exports.TaskRunnerProcess = TaskRunnerProcess = __decorate([
|
|
112
|
+
exports.JsTaskRunnerProcess = JsTaskRunnerProcess;
|
|
113
|
+
exports.JsTaskRunnerProcess = JsTaskRunnerProcess = __decorate([
|
|
187
114
|
(0, di_1.Service)(),
|
|
188
115
|
__metadata("design:paramtypes", [backend_common_1.Logger,
|
|
189
116
|
config_1.TaskRunnersConfig,
|
|
190
117
|
task_broker_auth_service_1.TaskBrokerAuthService,
|
|
191
118
|
task_runner_lifecycle_events_1.TaskRunnerLifecycleEvents])
|
|
192
|
-
],
|
|
193
|
-
//# sourceMappingURL=task-runner-process.js.map
|
|
119
|
+
], JsTaskRunnerProcess);
|
|
120
|
+
//# sourceMappingURL=task-runner-process-js.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-runner-process-js.js","sourceRoot":"","sources":["../../src/task-runners/task-runner-process-js.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Logger } from '@n8n/backend-common';
|
|
2
|
+
import { TaskRunnersConfig } from '@n8n/config';
|
|
3
|
+
import { TaskBrokerAuthService } from './task-broker/auth/task-broker-auth.service';
|
|
4
|
+
import { TaskRunnerLifecycleEvents } from './task-runner-lifecycle-events';
|
|
5
|
+
import { TaskRunnerProcessBase } from './task-runner-process-base';
|
|
6
|
+
export declare class PyTaskRunnerProcess extends TaskRunnerProcessBase {
|
|
7
|
+
readonly logger: Logger;
|
|
8
|
+
readonly runnerConfig: TaskRunnersConfig;
|
|
9
|
+
readonly authService: TaskBrokerAuthService;
|
|
10
|
+
readonly runnerLifecycleEvents: TaskRunnerLifecycleEvents;
|
|
11
|
+
protected readonly name = "runner:py";
|
|
12
|
+
protected readonly loggerScope = "task-runner-py";
|
|
13
|
+
constructor(logger: Logger, runnerConfig: TaskRunnersConfig, authService: TaskBrokerAuthService, runnerLifecycleEvents: TaskRunnerLifecycleEvents);
|
|
14
|
+
startProcess(grantToken: string, taskBrokerUri: string): Promise<import("child_process").ChildProcessWithoutNullStreams>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
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
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.PyTaskRunnerProcess = void 0;
|
|
16
|
+
const backend_common_1 = require("@n8n/backend-common");
|
|
17
|
+
const config_1 = require("@n8n/config");
|
|
18
|
+
const di_1 = require("@n8n/di");
|
|
19
|
+
const node_child_process_1 = require("node:child_process");
|
|
20
|
+
const promises_1 = require("node:fs/promises");
|
|
21
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
22
|
+
const node_util_1 = require("node:util");
|
|
23
|
+
const missing_requirements_error_1 = require("./errors/missing-requirements.error");
|
|
24
|
+
const task_broker_auth_service_1 = require("./task-broker/auth/task-broker-auth.service");
|
|
25
|
+
const task_runner_lifecycle_events_1 = require("./task-runner-lifecycle-events");
|
|
26
|
+
const task_runner_process_base_1 = require("./task-runner-process-base");
|
|
27
|
+
const asyncExec = (0, node_util_1.promisify)(node_child_process_1.exec);
|
|
28
|
+
let PyTaskRunnerProcess = class PyTaskRunnerProcess extends task_runner_process_base_1.TaskRunnerProcessBase {
|
|
29
|
+
constructor(logger, runnerConfig, authService, runnerLifecycleEvents) {
|
|
30
|
+
super(logger, runnerConfig, authService, runnerLifecycleEvents);
|
|
31
|
+
this.logger = logger;
|
|
32
|
+
this.runnerConfig = runnerConfig;
|
|
33
|
+
this.authService = authService;
|
|
34
|
+
this.runnerLifecycleEvents = runnerLifecycleEvents;
|
|
35
|
+
this.name = 'runner:py';
|
|
36
|
+
this.loggerScope = 'task-runner-py';
|
|
37
|
+
}
|
|
38
|
+
async startProcess(grantToken, taskBrokerUri) {
|
|
39
|
+
try {
|
|
40
|
+
await asyncExec('python3 --version', { timeout: 5000 });
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
throw new missing_requirements_error_1.MissingRequirementsError('python');
|
|
44
|
+
}
|
|
45
|
+
const pythonDir = node_path_1.default.join(__dirname, '../../../@n8n/task-runner-python');
|
|
46
|
+
const venvPath = node_path_1.default.join(pythonDir, '.venv/bin/python');
|
|
47
|
+
try {
|
|
48
|
+
await (0, promises_1.access)(venvPath);
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
throw new missing_requirements_error_1.MissingRequirementsError('venv');
|
|
52
|
+
}
|
|
53
|
+
return (0, node_child_process_1.spawn)(venvPath, ['-m', 'src.main'], {
|
|
54
|
+
cwd: pythonDir,
|
|
55
|
+
env: {
|
|
56
|
+
PATH: process.env.PATH,
|
|
57
|
+
HOME: process.env.HOME,
|
|
58
|
+
N8N_RUNNERS_GRANT_TOKEN: grantToken,
|
|
59
|
+
N8N_RUNNERS_TASK_BROKER_URI: taskBrokerUri,
|
|
60
|
+
N8N_RUNNERS_MAX_PAYLOAD: this.runnerConfig.maxPayload.toString(),
|
|
61
|
+
N8N_RUNNERS_MAX_CONCURRENCY: this.runnerConfig.maxConcurrency.toString(),
|
|
62
|
+
N8N_RUNNERS_TASK_TIMEOUT: this.runnerConfig.taskTimeout.toString(),
|
|
63
|
+
N8N_RUNNERS_HEARTBEAT_INTERVAL: this.runnerConfig.heartbeatInterval.toString(),
|
|
64
|
+
},
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
exports.PyTaskRunnerProcess = PyTaskRunnerProcess;
|
|
69
|
+
exports.PyTaskRunnerProcess = PyTaskRunnerProcess = __decorate([
|
|
70
|
+
(0, di_1.Service)(),
|
|
71
|
+
__metadata("design:paramtypes", [backend_common_1.Logger,
|
|
72
|
+
config_1.TaskRunnersConfig,
|
|
73
|
+
task_broker_auth_service_1.TaskBrokerAuthService,
|
|
74
|
+
task_runner_lifecycle_events_1.TaskRunnerLifecycleEvents])
|
|
75
|
+
], PyTaskRunnerProcess);
|
|
76
|
+
//# sourceMappingURL=task-runner-process-py.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-runner-process-py.js","sourceRoot":"","sources":["../../src/task-runners/task-runner-process-py.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,wDAA6C;AAC7C,wCAAgD;AAChD,gCAAkC;AAClC,2DAAiD;AACjD,+CAA0C;AAC1C,0DAA6B;AAC7B,yCAAsC;AAEtC,oFAA+E;AAC/E,0FAAoF;AACpF,iFAA2E;AAC3E,yEAAmE;AAEnE,MAAM,SAAS,GAAG,IAAA,qBAAS,EAAC,yBAAI,CAAC,CAAC;AAO3B,IAAM,mBAAmB,GAAzB,MAAM,mBAAoB,SAAQ,gDAAqB;IAK7D,YACU,MAAc,EACd,YAA+B,EAC/B,WAAkC,EAClC,qBAAgD;QAEzD,KAAK,CAAC,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,qBAAqB,CAAC,CAAC;QALvD,WAAM,GAAN,MAAM,CAAQ;QACd,iBAAY,GAAZ,YAAY,CAAmB;QAC/B,gBAAW,GAAX,WAAW,CAAuB;QAClC,0BAAqB,GAArB,qBAAqB,CAA2B;QARvC,SAAI,GAAG,WAAW,CAAC;QAEnB,gBAAW,GAAG,gBAAgB,CAAC;IASlD,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,UAAkB,EAAE,aAAqB;QAC3D,IAAI,CAAC;YACJ,MAAM,SAAS,CAAC,mBAAmB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,CAAC;QAAC,MAAM,CAAC;YACR,MAAM,IAAI,qDAAwB,CAAC,QAAQ,CAAC,CAAC;QAC9C,CAAC;QAED,MAAM,SAAS,GAAG,mBAAI,CAAC,IAAI,CAAC,SAAS,EAAE,kCAAkC,CAAC,CAAC;QAC3E,MAAM,QAAQ,GAAG,mBAAI,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;QAE1D,IAAI,CAAC;YACJ,MAAM,IAAA,iBAAM,EAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACR,MAAM,IAAI,qDAAwB,CAAC,MAAM,CAAC,CAAC;QAC5C,CAAC;QAED,OAAO,IAAA,0BAAK,EAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE;YAC1C,GAAG,EAAE,SAAS;YACd,GAAG,EAAE;gBAEJ,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI;gBACtB,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI;gBAGtB,uBAAuB,EAAE,UAAU;gBACnC,2BAA2B,EAAE,aAAa;gBAC1C,uBAAuB,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,QAAQ,EAAE;gBAChE,2BAA2B,EAAE,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,QAAQ,EAAE;gBACxE,wBAAwB,EAAE,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,QAAQ,EAAE;gBAClE,8BAA8B,EAAE,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,QAAQ,EAAE;aAC9E;SACD,CAAC,CAAC;IACJ,CAAC;CACD,CAAA;AA/CY,kDAAmB;8BAAnB,mBAAmB;IAD/B,IAAA,YAAO,GAAE;qCAOS,uBAAM;QACA,0BAAiB;QAClB,gDAAqB;QACX,wDAAyB;GAT9C,mBAAmB,CA+C/B"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { TaskRunnerRestartLoopError } from '../task-runners/errors/task-runner-restart-loop-error';
|
|
2
|
-
import type { TaskRunnerProcess } from '../task-runners/task-runner-process';
|
|
3
2
|
import { TypedEmitter } from '../typed-emitter';
|
|
3
|
+
import type { TaskRunnerProcessBase } from './task-runner-process-base';
|
|
4
4
|
type TaskRunnerProcessRestartLoopDetectorEventMap = {
|
|
5
5
|
'restart-loop-detected': TaskRunnerRestartLoopError;
|
|
6
6
|
};
|
|
@@ -10,7 +10,7 @@ export declare class TaskRunnerProcessRestartLoopDetector extends TypedEmitter<T
|
|
|
10
10
|
private readonly restartsWindow;
|
|
11
11
|
private numRestarts;
|
|
12
12
|
private firstRestartedAt;
|
|
13
|
-
constructor(taskRunnerProcess:
|
|
13
|
+
constructor(taskRunnerProcess: TaskRunnerProcessBase);
|
|
14
14
|
private increment;
|
|
15
15
|
private reset;
|
|
16
16
|
private isMaxCountExceeded;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-runner-process-restart-loop-detector.js","sourceRoot":"","sources":["../../src/task-runners/task-runner-process-restart-loop-detector.ts"],"names":[],"mappings":";;;AAAA,8CAAsC;AAEtC,yGAAkG;
|
|
1
|
+
{"version":3,"file":"task-runner-process-restart-loop-detector.js","sourceRoot":"","sources":["../../src/task-runners/task-runner-process-restart-loop-detector.ts"],"names":[],"mappings":";;;AAAA,8CAAsC;AAEtC,yGAAkG;AAClG,mDAA+C;AAI/C,MAAM,YAAY,GAAG,CAAC,CAAC;AACvB,MAAM,eAAe,GAAG,CAAC,GAAG,gBAAI,CAAC,OAAO,CAAC,cAAc,CAAC;AASxD,MAAa,oCAAqC,SAAQ,4BAA0D;IAkBnH,YAA6B,iBAAwC;QACpE,KAAK,EAAE,CAAC;QADoB,sBAAiB,GAAjB,iBAAiB,CAAuB;QAbpD,aAAQ,GAAG,YAAY,CAAC;QAMxB,mBAAc,GAAG,eAAe,CAAC;QAE1C,gBAAW,GAAG,CAAC,CAAC;QAGhB,qBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAKrC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YACtC,IAAI,CAAC,SAAS,EAAE,CAAC;YAEjB,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC;gBAC/B,IAAI,CAAC,IAAI,CACR,uBAAuB,EACvB,IAAI,2DAA0B,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAC9E,CAAC;YACH,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;IAKO,SAAS;QAChB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,GAAG,GAAG,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YACvD,IAAI,CAAC,KAAK,EAAE,CAAC;QACd,CAAC;QAED,IAAI,CAAC,WAAW,EAAE,CAAC;IACpB,CAAC;IAEO,KAAK;QACZ,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACpC,CAAC;IAEO,kBAAkB;QACzB,OAAO,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC;IAC1C,CAAC;IAEO,qBAAqB;QAC5B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC;IAC3C,CAAC;CACD;AAzDD,oFAyDC"}
|