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.
Files changed (148) hide show
  1. package/dist/auth/auth.service.js +2 -0
  2. package/dist/auth/auth.service.js.map +1 -1
  3. package/dist/build.tsbuildinfo +1 -1
  4. package/dist/commands/start.d.ts +1 -0
  5. package/dist/commands/start.js +17 -0
  6. package/dist/commands/start.js.map +1 -1
  7. package/dist/constants.d.ts +2 -0
  8. package/dist/constants.js +3 -1
  9. package/dist/constants.js.map +1 -1
  10. package/dist/controllers/dynamic-node-parameters.controller.js +6 -16
  11. package/dist/controllers/dynamic-node-parameters.controller.js.map +1 -1
  12. package/dist/controllers/e2e.controller.js +1 -0
  13. package/dist/controllers/e2e.controller.js.map +1 -1
  14. package/dist/controllers/folder.controller.d.ts +7 -2
  15. package/dist/controllers/folder.controller.js +24 -3
  16. package/dist/controllers/folder.controller.js.map +1 -1
  17. package/dist/controllers/role.controller.d.ts +5 -4
  18. package/dist/controllers/role.controller.js +21 -15
  19. package/dist/controllers/role.controller.js.map +1 -1
  20. package/dist/environments.ee/source-control/source-control.service.ee.js +2 -5
  21. package/dist/environments.ee/source-control/source-control.service.ee.js.map +1 -1
  22. package/dist/events/maps/relay.event-map.d.ts +4 -0
  23. package/dist/execution-lifecycle/execution-lifecycle-hooks.js +8 -1
  24. package/dist/execution-lifecycle/execution-lifecycle-hooks.js.map +1 -1
  25. package/dist/executions/execution-recovery.service.js +2 -1
  26. package/dist/executions/execution-recovery.service.js.map +1 -1
  27. package/dist/executions/execution.service.d.ts +2 -2
  28. package/dist/executions/execution.service.js +14 -1
  29. package/dist/executions/execution.service.js.map +1 -1
  30. package/dist/executions/execution.types.d.ts +2 -5
  31. package/dist/executions/executions.controller.d.ts +2 -2
  32. package/dist/middlewares/list-query/dtos/workflow.filter.dto.d.ts +1 -0
  33. package/dist/middlewares/list-query/dtos/workflow.filter.dto.js +6 -0
  34. package/dist/middlewares/list-query/dtos/workflow.filter.dto.js.map +1 -1
  35. package/dist/modules/community-packages/npm-utils.js +10 -0
  36. package/dist/modules/community-packages/npm-utils.js.map +1 -1
  37. package/dist/modules/data-table/data-store-aggregate.controller.d.ts +7 -1
  38. package/dist/modules/data-table/data-store-aggregate.controller.js +15 -2
  39. package/dist/modules/data-table/data-store-aggregate.controller.js.map +1 -1
  40. package/dist/modules/data-table/data-store-column.repository.js +1 -1
  41. package/dist/modules/data-table/data-store-column.repository.js.map +1 -1
  42. package/dist/modules/data-table/data-store-proxy.service.d.ts +3 -3
  43. package/dist/modules/data-table/data-store-proxy.service.js +13 -13
  44. package/dist/modules/data-table/data-store-proxy.service.js.map +1 -1
  45. package/dist/modules/data-table/data-store-rows.repository.d.ts +13 -20
  46. package/dist/modules/data-table/data-store-rows.repository.js +144 -125
  47. package/dist/modules/data-table/data-store-rows.repository.js.map +1 -1
  48. package/dist/modules/data-table/data-store-size-validator.service.d.ts +16 -0
  49. package/dist/modules/data-table/data-store-size-validator.service.js +79 -0
  50. package/dist/modules/data-table/data-store-size-validator.service.js.map +1 -0
  51. package/dist/modules/data-table/data-store.controller.d.ts +9 -9
  52. package/dist/modules/data-table/data-store.controller.js +16 -14
  53. package/dist/modules/data-table/data-store.controller.js.map +1 -1
  54. package/dist/modules/data-table/data-store.repository.d.ts +4 -1
  55. package/dist/modules/data-table/data-store.repository.js +47 -5
  56. package/dist/modules/data-table/data-store.repository.js.map +1 -1
  57. package/dist/modules/data-table/data-store.service.d.ts +19 -11
  58. package/dist/modules/data-table/data-store.service.js +102 -73
  59. package/dist/modules/data-table/data-store.service.js.map +1 -1
  60. package/dist/modules/data-table/data-store.types.d.ts +2 -0
  61. package/dist/modules/data-table/data-store.types.js +7 -0
  62. package/dist/modules/data-table/data-store.types.js.map +1 -1
  63. package/dist/modules/data-table/data-table.module.js +1 -1
  64. package/dist/modules/data-table/utils/sql-utils.d.ts +2 -5
  65. package/dist/modules/data-table/utils/sql-utils.js +7 -17
  66. package/dist/modules/data-table/utils/sql-utils.js.map +1 -1
  67. package/dist/public-api/types.d.ts +5 -0
  68. package/dist/public-api/v1/handlers/executions/executions.handler.d.ts +1 -0
  69. package/dist/public-api/v1/handlers/executions/executions.handler.js +34 -1
  70. package/dist/public-api/v1/handlers/executions/executions.handler.js.map +1 -1
  71. package/dist/public-api/v1/openapi.yml +60 -7
  72. package/dist/push/abstract.push.d.ts +2 -2
  73. package/dist/push/abstract.push.js +4 -4
  74. package/dist/push/abstract.push.js.map +1 -1
  75. package/dist/push/index.d.ts +3 -2
  76. package/dist/push/index.js +30 -26
  77. package/dist/push/index.js.map +1 -1
  78. package/dist/push/origin-validator.d.ts +13 -0
  79. package/dist/push/origin-validator.js +145 -0
  80. package/dist/push/origin-validator.js.map +1 -0
  81. package/dist/push/websocket.push.d.ts +1 -1
  82. package/dist/push/websocket.push.js +2 -2
  83. package/dist/push/websocket.push.js.map +1 -1
  84. package/dist/scaling/constants.d.ts +2 -2
  85. package/dist/scaling/pubsub/pubsub.event-map.d.ts +2 -0
  86. package/dist/scaling/pubsub/pubsub.registry.d.ts +1 -0
  87. package/dist/scaling/pubsub/pubsub.registry.js +9 -2
  88. package/dist/scaling/pubsub/pubsub.registry.js.map +1 -1
  89. package/dist/scaling/pubsub/pubsub.types.d.ts +2 -1
  90. package/dist/scaling/scaling.service.d.ts +1 -1
  91. package/dist/scaling/scaling.service.js +0 -4
  92. package/dist/scaling/scaling.service.js.map +1 -1
  93. package/dist/server.js +22 -23
  94. package/dist/server.js.map +1 -1
  95. package/dist/services/dynamic-node-parameters.service.d.ts +7 -1
  96. package/dist/services/dynamic-node-parameters.service.js +15 -2
  97. package/dist/services/dynamic-node-parameters.service.js.map +1 -1
  98. package/dist/services/frontend.service.js +5 -0
  99. package/dist/services/frontend.service.js.map +1 -1
  100. package/dist/services/ownership.service.d.ts +1 -0
  101. package/dist/services/ownership.service.js +6 -0
  102. package/dist/services/ownership.service.js.map +1 -1
  103. package/dist/services/public-api-key.service.js +2 -0
  104. package/dist/services/public-api-key.service.js.map +1 -1
  105. package/dist/services/role.service.d.ts +2 -2
  106. package/dist/services/role.service.js +3 -3
  107. package/dist/services/role.service.js.map +1 -1
  108. package/dist/sso.ee/oidc/oidc.service.ee.d.ts +25 -4
  109. package/dist/sso.ee/oidc/oidc.service.ee.js +167 -22
  110. package/dist/sso.ee/oidc/oidc.service.ee.js.map +1 -1
  111. package/dist/sso.ee/oidc/routes/oidc.controller.ee.d.ts +6 -2
  112. package/dist/sso.ee/oidc/routes/oidc.controller.ee.js +41 -7
  113. package/dist/sso.ee/oidc/routes/oidc.controller.ee.js.map +1 -1
  114. package/dist/sso.ee/sso-helpers.d.ts +1 -0
  115. package/dist/sso.ee/sso-helpers.js +19 -0
  116. package/dist/sso.ee/sso-helpers.js.map +1 -1
  117. package/dist/task-runners/errors/missing-requirements.error.d.ts +6 -0
  118. package/dist/task-runners/errors/missing-requirements.error.js +17 -0
  119. package/dist/task-runners/errors/missing-requirements.error.js.map +1 -0
  120. package/dist/task-runners/internal-task-runner-disconnect-analyzer.d.ts +2 -2
  121. package/dist/task-runners/internal-task-runner-disconnect-analyzer.js +2 -2
  122. package/dist/task-runners/internal-task-runner-disconnect-analyzer.js.map +1 -1
  123. package/dist/task-runners/task-runner-module.d.ts +5 -3
  124. package/dist/task-runners/task-runner-module.js +25 -13
  125. package/dist/task-runners/task-runner-module.js.map +1 -1
  126. package/dist/task-runners/task-runner-process-base.d.ts +39 -0
  127. package/dist/task-runners/task-runner-process-base.js +111 -0
  128. package/dist/task-runners/task-runner-process-base.js.map +1 -0
  129. package/dist/task-runners/task-runner-process-js.d.ts +21 -0
  130. package/dist/task-runners/{task-runner-process.js → task-runner-process-js.js} +35 -108
  131. package/dist/task-runners/task-runner-process-js.js.map +1 -0
  132. package/dist/task-runners/task-runner-process-py.d.ts +15 -0
  133. package/dist/task-runners/task-runner-process-py.js +76 -0
  134. package/dist/task-runners/task-runner-process-py.js.map +1 -0
  135. package/dist/task-runners/task-runner-process-restart-loop-detector.d.ts +2 -2
  136. package/dist/task-runners/task-runner-process-restart-loop-detector.js.map +1 -1
  137. package/dist/user-management/email/templates/credentials-shared.handlebars +48 -40
  138. package/dist/user-management/email/templates/n8n-logo.png +0 -0
  139. package/dist/user-management/email/templates/password-reset-requested.handlebars +68 -60
  140. package/dist/user-management/email/templates/project-shared.handlebars +43 -35
  141. package/dist/user-management/email/templates/user-invited.handlebars +48 -40
  142. package/dist/user-management/email/templates/workflow-shared.handlebars +48 -40
  143. package/dist/workflows/workflow.request.d.ts +1 -0
  144. package/dist/workflows/workflow.service.ee.js +1 -0
  145. package/dist/workflows/workflow.service.ee.js.map +1 -1
  146. package/package.json +24 -18
  147. package/dist/task-runners/task-runner-process.d.ts +0 -36
  148. 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 task_runner_process_1 = require("./task-runner-process");
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
- task_runner_process_1.TaskRunnerProcess])
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,+DAA0D;AAOnD,IAAM,oCAAoC,GAA1C,MAAM,oCAAqC,SAAQ,6EAAmC;IAG5F,YACkB,YAA+B,EAC/B,iBAAoC;QAErD,KAAK,EAAE,CAAC;QAHS,iBAAY,GAAZ,YAAY,CAAmB;QAC/B,sBAAiB,GAAjB,iBAAiB,CAAmB;QASrD,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,uCAAiB;GAL1C,oCAAoC,CAwChD"}
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 taskRunnerProcess;
12
- private taskRunnerProcessRestartLoopDetector;
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 startInternalTaskRunner;
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.startInternalTaskRunner();
78
- }
76
+ if (mode === 'internal')
77
+ await this.startInternalTaskRunners();
79
78
  }
80
79
  async stop() {
81
80
  const stopRunnerProcessTask = (async () => {
82
- if (this.taskRunnerProcess) {
83
- await this.taskRunnerProcess.stop();
84
- this.taskRunnerProcess = undefined;
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 startInternalTaskRunner() {
112
+ async startInternalTaskRunners() {
108
113
  a.ok(this.taskBrokerWsServer, 'Task Runner WS Server not loaded');
109
- const { TaskRunnerProcess } = await Promise.resolve().then(() => __importStar(require('../task-runners/task-runner-process')));
110
- this.taskRunnerProcess = di_1.Container.get(TaskRunnerProcess);
111
- this.taskRunnerProcessRestartLoopDetector = new task_runner_process_restart_loop_detector_1.TaskRunnerProcessRestartLoopDetector(this.taskRunnerProcess);
112
- this.taskRunnerProcessRestartLoopDetector.on('restart-loop-detected', this.onRunnerRestartLoopDetected);
113
- await this.taskRunnerProcess.start();
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":"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"}
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.TaskRunnerProcess = void 0;
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 a = __importStar(require("node:assert/strict"));
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 typed_emitter_1 = require("../typed-emitter");
58
- let TaskRunnerProcess = class TaskRunnerProcess extends typed_emitter_1.TypedEmitter {
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.process = null;
74
- this._runPromise = null;
66
+ this.name = 'runnner:js';
67
+ this.loggerScope = 'task-runner-js';
75
68
  this.oomDetector = null;
76
- this.isShuttingDown = false;
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
- startNode(grantToken, taskBrokerUri) {
71
+ async startProcess(grantToken, taskBrokerUri) {
112
72
  const startScript = require.resolve('@n8n/task-runner/start');
113
- const flags = this.mode === 'secure'
114
- ? ['--disallow-code-generation-from-strings', '--disable-proto=delete']
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
- async stop() {
121
- if (!this.process)
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
- async forceRestart() {
129
- if (!this.process)
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
- ...this.getPassthroughEnvVars(),
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.TaskRunnerProcess = TaskRunnerProcess;
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
- ], TaskRunnerProcess);
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wDAA6C;AAC7C,wCAAgD;AAChD,gCAAkC;AAClC,gEAAwC;AACxC,2DAA2C;AAC3C,sDAAwC;AAExC,2EAAqE;AACrE,0FAAoF;AACpF,iFAA2E;AAC3E,yEAA6F;AAOtF,IAAM,mBAAmB,GAAzB,MAAM,mBAAoB,SAAQ,gDAAqB;IAO7D,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;QAVjD,SAAI,GAAG,YAAY,CAAC;QAEpB,gBAAW,GAAG,gBAAgB,CAAC;QAEhC,gBAAW,GAAkC,IAAI,CAAC;QAUzD,IAAA,gBAAM,EAAC,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,kCAAkC,CAAC,CAAC;IACrF,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,UAAkB,EAAE,aAAqB;QAC3D,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;QAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY;YAC3C,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,CAAC,yCAAyC,EAAE,wBAAwB,CAAC,CAAC;QAEzE,OAAO,IAAA,0BAAK,EAAC,MAAM,EAAE,CAAC,GAAG,KAAK,EAAE,WAAW,CAAC,EAAE;YAC7C,GAAG,EAAE,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,aAAa,CAAC;SACtD,CAAC,CAAC;IACJ,CAAC;IAED,sBAAsB,CAAC,OAAqB;QAC3C,IAAI,CAAC,WAAW,GAAG,IAAI,kDAAsB,CAAC,OAAO,CAAC,CAAC;IACxD,CAAC;IAED,iBAAiB;QAChB,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IACxE,CAAC;IAEO,iBAAiB,CAAC,UAAkB,EAAE,aAAqB;QAClE,MAAM,OAAO,GAAuC;YAEnD,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI;YACtB,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI;YACtB,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS;YAGhC,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB;YAC9C,2BAA2B,EAAE,OAAO,CAAC,GAAG,CAAC,2BAA2B;YACpE,4BAA4B,EAAE,OAAO,CAAC,GAAG,CAAC,4BAA4B;YAGtE,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc;YAC1C,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW;YACpC,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW;YACpC,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe;YAG5C,uBAAuB,EAAE,UAAU;YACnC,2BAA2B,EAAE,aAAa;YAC1C,uBAAuB,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,QAAQ,EAAE;YAChE,2BAA2B,EAAE,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,QAAQ,EAAE;YACxE,wBAAwB,EAAE,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,QAAQ,EAAE;YAClE,8BAA8B,EAAE,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,QAAQ,EAAE;YAC9E,yBAAyB,EAAE,OAAO,CAAC,GAAG,CAAC,yBAAyB;SAChE,CAAC;QAEF,IAAI,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC;YACvC,OAAO,CAAC,YAAY,GAAG,wBAAwB,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC;QACpF,CAAC;QAED,OAAO,OAAO,CAAC;IAChB,CAAC;CACD,CAAA;AAvEY,kDAAmB;8BAAnB,mBAAmB;IAD/B,IAAA,YAAO,GAAE;qCASS,uBAAM;QACA,0BAAiB;QAClB,gDAAqB;QACX,wDAAyB;GAX9C,mBAAmB,CAuE/B"}
@@ -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: 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;AAElG,mDAA+C;AAE/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,iBAAoC;QAChE,KAAK,EAAE,CAAC;QADoB,sBAAiB,GAAjB,iBAAiB,CAAmB;QAbhD,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"}
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"}