n8n 1.111.1 → 1.112.1

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 (105) hide show
  1. package/dist/build.tsbuildinfo +1 -1
  2. package/dist/controllers/dynamic-node-parameters.controller.js +6 -16
  3. package/dist/controllers/dynamic-node-parameters.controller.js.map +1 -1
  4. package/dist/environments.ee/source-control/source-control.service.ee.js +2 -5
  5. package/dist/environments.ee/source-control/source-control.service.ee.js.map +1 -1
  6. package/dist/events/maps/relay.event-map.d.ts +4 -0
  7. package/dist/execution-lifecycle/execution-lifecycle-hooks.js +8 -1
  8. package/dist/execution-lifecycle/execution-lifecycle-hooks.js.map +1 -1
  9. package/dist/executions/execution-recovery.service.js +2 -1
  10. package/dist/executions/execution-recovery.service.js.map +1 -1
  11. package/dist/executions/execution.service.d.ts +2 -2
  12. package/dist/executions/execution.service.js +14 -1
  13. package/dist/executions/execution.service.js.map +1 -1
  14. package/dist/executions/execution.types.d.ts +2 -5
  15. package/dist/executions/executions.controller.d.ts +2 -2
  16. package/dist/modules/data-table/data-store-aggregate.controller.d.ts +7 -1
  17. package/dist/modules/data-table/data-store-aggregate.controller.js +15 -2
  18. package/dist/modules/data-table/data-store-aggregate.controller.js.map +1 -1
  19. package/dist/modules/data-table/data-store-column.repository.js +1 -1
  20. package/dist/modules/data-table/data-store-column.repository.js.map +1 -1
  21. package/dist/modules/data-table/data-store-proxy.service.d.ts +2 -2
  22. package/dist/modules/data-table/data-store-proxy.service.js +8 -8
  23. package/dist/modules/data-table/data-store-proxy.service.js.map +1 -1
  24. package/dist/modules/data-table/data-store-rows.repository.d.ts +13 -18
  25. package/dist/modules/data-table/data-store-rows.repository.js +112 -58
  26. package/dist/modules/data-table/data-store-rows.repository.js.map +1 -1
  27. package/dist/modules/data-table/data-store-size-validator.service.d.ts +16 -0
  28. package/dist/modules/data-table/data-store-size-validator.service.js +79 -0
  29. package/dist/modules/data-table/data-store-size-validator.service.js.map +1 -0
  30. package/dist/modules/data-table/data-store.controller.d.ts +6 -6
  31. package/dist/modules/data-table/data-store.controller.js +11 -9
  32. package/dist/modules/data-table/data-store.controller.js.map +1 -1
  33. package/dist/modules/data-table/data-store.repository.d.ts +4 -1
  34. package/dist/modules/data-table/data-store.repository.js +47 -5
  35. package/dist/modules/data-table/data-store.repository.js.map +1 -1
  36. package/dist/modules/data-table/data-store.service.d.ts +14 -7
  37. package/dist/modules/data-table/data-store.service.js +66 -33
  38. package/dist/modules/data-table/data-store.service.js.map +1 -1
  39. package/dist/modules/data-table/utils/sql-utils.d.ts +1 -0
  40. package/dist/modules/data-table/utils/sql-utils.js +7 -0
  41. package/dist/modules/data-table/utils/sql-utils.js.map +1 -1
  42. package/dist/public-api/types.d.ts +5 -0
  43. package/dist/public-api/v1/handlers/executions/executions.handler.d.ts +1 -0
  44. package/dist/public-api/v1/handlers/executions/executions.handler.js +34 -1
  45. package/dist/public-api/v1/handlers/executions/executions.handler.js.map +1 -1
  46. package/dist/public-api/v1/openapi.yml +42 -2
  47. package/dist/push/abstract.push.d.ts +2 -2
  48. package/dist/push/abstract.push.js +4 -4
  49. package/dist/push/abstract.push.js.map +1 -1
  50. package/dist/push/index.d.ts +3 -2
  51. package/dist/push/index.js +30 -26
  52. package/dist/push/index.js.map +1 -1
  53. package/dist/push/origin-validator.d.ts +13 -0
  54. package/dist/push/origin-validator.js +145 -0
  55. package/dist/push/origin-validator.js.map +1 -0
  56. package/dist/push/websocket.push.d.ts +1 -1
  57. package/dist/push/websocket.push.js +2 -2
  58. package/dist/push/websocket.push.js.map +1 -1
  59. package/dist/scaling/constants.d.ts +2 -2
  60. package/dist/scaling/pubsub/pubsub.event-map.d.ts +2 -0
  61. package/dist/scaling/pubsub/pubsub.registry.d.ts +1 -0
  62. package/dist/scaling/pubsub/pubsub.registry.js +9 -2
  63. package/dist/scaling/pubsub/pubsub.registry.js.map +1 -1
  64. package/dist/scaling/pubsub/pubsub.types.d.ts +2 -1
  65. package/dist/scaling/scaling.service.d.ts +1 -1
  66. package/dist/scaling/scaling.service.js +0 -4
  67. package/dist/scaling/scaling.service.js.map +1 -1
  68. package/dist/server.js +2 -0
  69. package/dist/server.js.map +1 -1
  70. package/dist/services/dynamic-node-parameters.service.d.ts +7 -1
  71. package/dist/services/dynamic-node-parameters.service.js +15 -2
  72. package/dist/services/dynamic-node-parameters.service.js.map +1 -1
  73. package/dist/services/frontend.service.js +5 -1
  74. package/dist/services/frontend.service.js.map +1 -1
  75. package/dist/services/public-api-key.service.js +2 -0
  76. package/dist/services/public-api-key.service.js.map +1 -1
  77. package/dist/sso.ee/oidc/oidc.service.ee.d.ts +7 -2
  78. package/dist/sso.ee/oidc/oidc.service.ee.js +63 -16
  79. package/dist/sso.ee/oidc/oidc.service.ee.js.map +1 -1
  80. package/dist/sso.ee/sso-helpers.d.ts +1 -0
  81. package/dist/sso.ee/sso-helpers.js +19 -0
  82. package/dist/sso.ee/sso-helpers.js.map +1 -1
  83. package/dist/task-runners/errors/missing-requirements.error.d.ts +6 -0
  84. package/dist/task-runners/errors/missing-requirements.error.js +17 -0
  85. package/dist/task-runners/errors/missing-requirements.error.js.map +1 -0
  86. package/dist/task-runners/internal-task-runner-disconnect-analyzer.d.ts +2 -2
  87. package/dist/task-runners/internal-task-runner-disconnect-analyzer.js +2 -2
  88. package/dist/task-runners/internal-task-runner-disconnect-analyzer.js.map +1 -1
  89. package/dist/task-runners/task-runner-module.d.ts +5 -3
  90. package/dist/task-runners/task-runner-module.js +25 -13
  91. package/dist/task-runners/task-runner-module.js.map +1 -1
  92. package/dist/task-runners/task-runner-process-base.d.ts +39 -0
  93. package/dist/task-runners/task-runner-process-base.js +111 -0
  94. package/dist/task-runners/task-runner-process-base.js.map +1 -0
  95. package/dist/task-runners/task-runner-process-js.d.ts +21 -0
  96. package/dist/task-runners/{task-runner-process.js → task-runner-process-js.js} +35 -108
  97. package/dist/task-runners/task-runner-process-js.js.map +1 -0
  98. package/dist/task-runners/task-runner-process-py.d.ts +15 -0
  99. package/dist/task-runners/task-runner-process-py.js +76 -0
  100. package/dist/task-runners/task-runner-process-py.js.map +1 -0
  101. package/dist/task-runners/task-runner-process-restart-loop-detector.d.ts +2 -2
  102. package/dist/task-runners/task-runner-process-restart-loop-detector.js.map +1 -1
  103. package/package.json +20 -20
  104. package/dist/task-runners/task-runner-process.d.ts +0 -36
  105. package/dist/task-runners/task-runner-process.js.map +0 -1
@@ -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":"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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: 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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "n8n",
3
- "version": "1.111.1",
3
+ "version": "1.112.1",
4
4
  "description": "n8n Workflow Automation Tool",
5
5
  "main": "dist/index",
6
6
  "types": "dist/index.d.ts",
@@ -22,8 +22,8 @@
22
22
  "bin",
23
23
  "templates",
24
24
  "dist",
25
- "LICENSE_EE.md",
26
- "LICENSE.md"
25
+ "LICENSE.md",
26
+ "LICENSE_EE.md"
27
27
  ],
28
28
  "devDependencies": {
29
29
  "@redocly/cli": "^1.28.5",
@@ -72,7 +72,7 @@
72
72
  "@parcel/watcher": "^2.5.1",
73
73
  "@sentry/node": "^9.42.1",
74
74
  "aws4": "1.11.0",
75
- "axios": "1.8.3",
75
+ "axios": "1.12.0",
76
76
  "bcryptjs": "2.4.3",
77
77
  "bull": "4.16.4",
78
78
  "cache-manager": "5.2.3",
@@ -126,7 +126,7 @@
126
126
  "samlify": "2.10.0",
127
127
  "semver": "7.5.4",
128
128
  "shelljs": "0.8.5",
129
- "simple-git": "3.17.0",
129
+ "simple-git": "3.28.0",
130
130
  "source-map-support": "0.5.21",
131
131
  "sqlite3": "5.1.7",
132
132
  "sshpk": "1.18.0",
@@ -141,24 +141,24 @@
141
141
  "yamljs": "0.3.0",
142
142
  "yargs-parser": "21.1.1",
143
143
  "zod": "3.25.67",
144
- "@n8n/ai-workflow-builder": "0.21.0",
145
- "@n8n/backend-common": "^0.21.0",
146
- "@n8n/config": "1.54.0",
147
- "@n8n/backend-test-utils": "^0.14.1",
148
- "@n8n/client-oauth2": "0.29.0",
149
- "@n8n/db": "^0.22.1",
150
- "@n8n/api-types": "0.45.0",
144
+ "@n8n/ai-workflow-builder": "0.22.0",
145
+ "@n8n/backend-common": "^0.22.0",
146
+ "@n8n/api-types": "0.46.0",
147
+ "@n8n/backend-test-utils": "^0.15.0",
148
+ "@n8n/config": "1.55.0",
151
149
  "@n8n/constants": "^0.12.0",
152
- "@n8n/decorators": "0.21.0",
150
+ "@n8n/client-oauth2": "0.29.0",
151
+ "@n8n/db": "^0.23.0",
152
+ "@n8n/decorators": "0.22.0",
153
153
  "@n8n/di": "0.9.0",
154
154
  "@n8n/errors": "0.5.0",
155
- "@n8n/n8n-nodes-langchain": "1.110.0",
156
- "@n8n/task-runner": "1.47.0",
157
- "@n8n/permissions": "0.34.0",
158
- "n8n-editor-ui": "1.111.0",
159
- "n8n-core": "1.110.0",
160
- "n8n-nodes-base": "1.109.0",
161
- "n8n-workflow": "1.108.0"
155
+ "@n8n/n8n-nodes-langchain": "1.111.1",
156
+ "@n8n/task-runner": "1.48.0",
157
+ "n8n-core": "1.111.0",
158
+ "@n8n/permissions": "0.35.0",
159
+ "n8n-editor-ui": "1.112.1",
160
+ "n8n-nodes-base": "1.110.1",
161
+ "n8n-workflow": "1.109.0"
162
162
  },
163
163
  "license": "SEE LICENSE IN LICENSE.md",
164
164
  "homepage": "https://n8n.io",
@@ -1,36 +0,0 @@
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 { TypedEmitter } from '../typed-emitter';
6
- export type ExitReason = 'unknown' | 'oom';
7
- export type TaskRunnerProcessEventMap = {
8
- exit: {
9
- reason: ExitReason;
10
- };
11
- };
12
- export declare class TaskRunnerProcess extends TypedEmitter<TaskRunnerProcessEventMap> {
13
- private readonly runnerConfig;
14
- private readonly authService;
15
- private readonly runnerLifecycleEvents;
16
- get isRunning(): boolean;
17
- get pid(): number | undefined;
18
- get runPromise(): Promise<void> | null;
19
- private process;
20
- private _runPromise;
21
- private oomDetector;
22
- private isShuttingDown;
23
- private logger;
24
- private readonly passthroughEnvVars;
25
- private readonly mode;
26
- constructor(logger: Logger, runnerConfig: TaskRunnersConfig, authService: TaskBrokerAuthService, runnerLifecycleEvents: TaskRunnerLifecycleEvents);
27
- start(): Promise<void>;
28
- startNode(grantToken: string, taskBrokerUri: string): import("child_process").ChildProcessWithoutNullStreams;
29
- stop(): Promise<void>;
30
- forceRestart(): Promise<void>;
31
- killNode(): void;
32
- private monitorProcess;
33
- private onProcessExit;
34
- private getProcessEnvVars;
35
- private getPassthroughEnvVars;
36
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"task-runner-process.js","sourceRoot":"","sources":["../../src/task-runners/task-runner-process.ts"],"names":[],"mappings":"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"}