@atom8n/task-runner 2.2.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 (88) hide show
  1. package/dist/build.tsbuildinfo +1 -0
  2. package/dist/config/base-runner-config.d.ts +16 -0
  3. package/dist/config/base-runner-config.js +83 -0
  4. package/dist/config/base-runner-config.js.map +1 -0
  5. package/dist/config/js-runner-config.d.ts +5 -0
  6. package/dist/config/js-runner-config.js +37 -0
  7. package/dist/config/js-runner-config.js.map +1 -0
  8. package/dist/config/main-config.d.ts +8 -0
  9. package/dist/config/main-config.js +35 -0
  10. package/dist/config/main-config.js.map +1 -0
  11. package/dist/config/sentry-config.d.ts +6 -0
  12. package/dist/config/sentry-config.js +42 -0
  13. package/dist/config/sentry-config.js.map +1 -0
  14. package/dist/data-request/data-request-response-reconstruct.d.ts +6 -0
  15. package/dist/data-request/data-request-response-reconstruct.js +30 -0
  16. package/dist/data-request/data-request-response-reconstruct.js.map +1 -0
  17. package/dist/health-check-server.d.ts +5 -0
  18. package/dist/health-check-server.js +43 -0
  19. package/dist/health-check-server.js.map +1 -0
  20. package/dist/index.d.ts +4 -0
  21. package/dist/index.js +20 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/js-task-runner/built-ins-parser/acorn-helpers.d.ts +6 -0
  24. package/dist/js-task-runner/built-ins-parser/acorn-helpers.js +23 -0
  25. package/dist/js-task-runner/built-ins-parser/acorn-helpers.js.map +1 -0
  26. package/dist/js-task-runner/built-ins-parser/built-ins-parser-state.d.ts +19 -0
  27. package/dist/js-task-runner/built-ins-parser/built-ins-parser-state.js +59 -0
  28. package/dist/js-task-runner/built-ins-parser/built-ins-parser-state.js.map +1 -0
  29. package/dist/js-task-runner/built-ins-parser/built-ins-parser.d.ts +12 -0
  30. package/dist/js-task-runner/built-ins-parser/built-ins-parser.js +120 -0
  31. package/dist/js-task-runner/built-ins-parser/built-ins-parser.js.map +1 -0
  32. package/dist/js-task-runner/errors/disallowed-module.error.d.ts +4 -0
  33. package/dist/js-task-runner/errors/disallowed-module.error.js +11 -0
  34. package/dist/js-task-runner/errors/disallowed-module.error.js.map +1 -0
  35. package/dist/js-task-runner/errors/error-like.d.ts +5 -0
  36. package/dist/js-task-runner/errors/error-like.js +10 -0
  37. package/dist/js-task-runner/errors/error-like.js.map +1 -0
  38. package/dist/js-task-runner/errors/execution-error.d.ts +14 -0
  39. package/dist/js-task-runner/errors/execution-error.js +85 -0
  40. package/dist/js-task-runner/errors/execution-error.js.map +1 -0
  41. package/dist/js-task-runner/errors/serializable-error.d.ts +4 -0
  42. package/dist/js-task-runner/errors/serializable-error.js +27 -0
  43. package/dist/js-task-runner/errors/serializable-error.js.map +1 -0
  44. package/dist/js-task-runner/errors/task-cancelled-error.d.ts +4 -0
  45. package/dist/js-task-runner/errors/task-cancelled-error.js +11 -0
  46. package/dist/js-task-runner/errors/task-cancelled-error.js.map +1 -0
  47. package/dist/js-task-runner/errors/timeout-error.d.ts +5 -0
  48. package/dist/js-task-runner/errors/timeout-error.js +22 -0
  49. package/dist/js-task-runner/errors/timeout-error.js.map +1 -0
  50. package/dist/js-task-runner/errors/unsupported-function.error.d.ts +4 -0
  51. package/dist/js-task-runner/errors/unsupported-function.error.js +13 -0
  52. package/dist/js-task-runner/errors/unsupported-function.error.js.map +1 -0
  53. package/dist/js-task-runner/js-task-runner.d.ts +59 -0
  54. package/dist/js-task-runner/js-task-runner.js +381 -0
  55. package/dist/js-task-runner/js-task-runner.js.map +1 -0
  56. package/dist/js-task-runner/obj-utils.d.ts +1 -0
  57. package/dist/js-task-runner/obj-utils.js +7 -0
  58. package/dist/js-task-runner/obj-utils.js.map +1 -0
  59. package/dist/js-task-runner/require-resolver.d.ts +6 -0
  60. package/dist/js-task-runner/require-resolver.js +22 -0
  61. package/dist/js-task-runner/require-resolver.js.map +1 -0
  62. package/dist/message-types.d.ts +186 -0
  63. package/dist/message-types.js +3 -0
  64. package/dist/message-types.js.map +1 -0
  65. package/dist/node-types.d.ts +13 -0
  66. package/dist/node-types.js +67 -0
  67. package/dist/node-types.js.map +1 -0
  68. package/dist/runner-types.d.ts +77 -0
  69. package/dist/runner-types.js +32 -0
  70. package/dist/runner-types.js.map +1 -0
  71. package/dist/start.d.ts +1 -0
  72. package/dist/start.js +107 -0
  73. package/dist/start.js.map +1 -0
  74. package/dist/task-runner-javascript/node_modules/.bin/acorn +21 -0
  75. package/dist/task-runner-javascript/node_modules/.bin/n8n-copy-static-files +21 -0
  76. package/dist/task-runner-javascript/node_modules/.bin/n8n-generate-metadata +21 -0
  77. package/dist/task-runner-javascript/node_modules/.bin/n8n-generate-translations +21 -0
  78. package/dist/task-runner-javascript/node_modules/.bin/nanoid +21 -0
  79. package/dist/task-runner-sentry.d.ts +12 -0
  80. package/dist/task-runner-sentry.js +68 -0
  81. package/dist/task-runner-sentry.js.map +1 -0
  82. package/dist/task-runner.d.ts +85 -0
  83. package/dist/task-runner.js +441 -0
  84. package/dist/task-runner.js.map +1 -0
  85. package/dist/task-state.d.ts +17 -0
  86. package/dist/task-state.js +63 -0
  87. package/dist/task-state.js.map +1 -0
  88. package/package.json +55 -0
@@ -0,0 +1,381 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.JsTaskRunner = void 0;
40
+ const isObject_1 = __importDefault(require("lodash/isObject"));
41
+ const set_1 = __importDefault(require("lodash/set"));
42
+ const luxon_1 = require("luxon");
43
+ const n8n_core_1 = require("n8n-core");
44
+ const n8n_workflow_1 = require("n8n-workflow");
45
+ const a = __importStar(require("node:assert"));
46
+ const node_vm_1 = require("node:vm");
47
+ const unsupported_function_error_1 = require("../js-task-runner/errors/unsupported-function.error");
48
+ const runner_types_1 = require("../runner-types");
49
+ const task_runner_1 = require("../task-runner");
50
+ const built_ins_parser_1 = require("./built-ins-parser/built-ins-parser");
51
+ const built_ins_parser_state_1 = require("./built-ins-parser/built-ins-parser-state");
52
+ const error_like_1 = require("./errors/error-like");
53
+ const execution_error_1 = require("./errors/execution-error");
54
+ const serializable_error_1 = require("./errors/serializable-error");
55
+ const timeout_error_1 = require("./errors/timeout-error");
56
+ const require_resolver_1 = require("./require-resolver");
57
+ const data_request_response_reconstruct_1 = require("../data-request/data-request-response-reconstruct");
58
+ class JsTaskRunner extends task_runner_1.TaskRunner {
59
+ constructor(config, name = 'JS Task Runner') {
60
+ super({
61
+ taskType: 'javascript',
62
+ name,
63
+ ...config.baseRunnerConfig,
64
+ });
65
+ this.builtInsParser = new built_ins_parser_1.BuiltInsParser();
66
+ this.taskDataReconstruct = new data_request_response_reconstruct_1.DataRequestResponseReconstruct();
67
+ this.mode = 'secure';
68
+ const { jsRunnerConfig } = config;
69
+ const parseModuleAllowList = (moduleList) => moduleList === '*'
70
+ ? '*'
71
+ : new Set(moduleList
72
+ .split(',')
73
+ .map((x) => x.trim())
74
+ .filter((x) => x !== ''));
75
+ const allowedBuiltInModules = parseModuleAllowList(jsRunnerConfig.allowedBuiltInModules ?? '');
76
+ const allowedExternalModules = parseModuleAllowList(jsRunnerConfig.allowedExternalModules ?? '');
77
+ this.mode = jsRunnerConfig.insecureMode ? 'insecure' : 'secure';
78
+ this.requireResolver = (0, require_resolver_1.createRequireResolver)({
79
+ allowedBuiltInModules,
80
+ allowedExternalModules,
81
+ });
82
+ if (this.mode === 'secure')
83
+ this.preventPrototypePollution(allowedExternalModules);
84
+ }
85
+ preventPrototypePollution(allowedExternalModules) {
86
+ if (allowedExternalModules instanceof Set) {
87
+ for (const module of allowedExternalModules) {
88
+ try {
89
+ require(module);
90
+ }
91
+ catch (error) {
92
+ if (error instanceof Error && 'code' in error && error.code === 'MODULE_NOT_FOUND') {
93
+ console.error(`Allowlisted module '${module}' is not installed. Please either install it or remove it from the allowlist in the n8n-task-runners.json config file. See: https://docs.n8n.io/hosting/configuration/task-runners/#adding-extra-dependencies`);
94
+ continue;
95
+ }
96
+ throw error;
97
+ }
98
+ }
99
+ }
100
+ if (process.env.NODE_ENV !== 'test') {
101
+ Object.getOwnPropertyNames(globalThis)
102
+ .map((name) => globalThis[name])
103
+ .filter((value) => typeof value === 'function')
104
+ .forEach((fn) => Object.freeze(fn.prototype));
105
+ }
106
+ [n8n_workflow_1.Workflow, n8n_workflow_1.Expression, n8n_workflow_1.WorkflowDataProxy, luxon_1.DateTime, luxon_1.Interval, luxon_1.Duration]
107
+ .map((constructor) => constructor.prototype)
108
+ .forEach(Object.freeze);
109
+ }
110
+ async executeTask(taskParams, abortSignal) {
111
+ const { taskId, settings } = taskParams;
112
+ a.ok(settings, 'JS Code not sent to runner');
113
+ this.validateTaskSettings(settings);
114
+ const neededBuiltInsResult = this.builtInsParser.parseUsedBuiltIns(settings.code);
115
+ const neededBuiltIns = neededBuiltInsResult.ok
116
+ ? neededBuiltInsResult.result
117
+ : built_ins_parser_state_1.BuiltInsParserState.newNeedsAllDataState();
118
+ const dataResponse = await this.requestData(taskId, neededBuiltIns.toDataRequestParams(settings.chunk));
119
+ const data = this.reconstructTaskData(dataResponse, settings.chunk);
120
+ await this.requestNodeTypeIfNeeded(neededBuiltIns, data.workflow, taskId);
121
+ const workflowParams = data.workflow;
122
+ const workflow = new n8n_workflow_1.Workflow({
123
+ ...workflowParams,
124
+ nodeTypes: this.nodeTypes,
125
+ });
126
+ workflow.staticData = n8n_workflow_1.ObservableObject.create(workflow.staticData);
127
+ const result = settings.nodeMode === 'runOnceForAllItems'
128
+ ? await this.runForAllItems(taskId, settings, data, workflow, abortSignal)
129
+ : await this.runForEachItem(taskId, settings, data, workflow, abortSignal);
130
+ return {
131
+ result,
132
+ customData: data.runExecutionData.resultData.metadata,
133
+ staticData: workflow.staticData.__dataChanged ? workflow.staticData : undefined,
134
+ };
135
+ }
136
+ validateTaskSettings(settings) {
137
+ a.ok(settings.code, 'No code to execute');
138
+ if (settings.nodeMode === 'runOnceForAllItems') {
139
+ a.ok(settings.chunk === undefined, 'Chunking is not supported for runOnceForAllItems');
140
+ }
141
+ }
142
+ getNativeVariables() {
143
+ const { mode } = this;
144
+ return {
145
+ Buffer: new Proxy(Buffer, {
146
+ get(target, prop) {
147
+ if (mode === 'insecure')
148
+ return target[prop];
149
+ if (prop === 'allocUnsafe' || prop === 'allocUnsafeSlow') {
150
+ return Buffer.alloc;
151
+ }
152
+ return target[prop];
153
+ },
154
+ }),
155
+ setTimeout,
156
+ setInterval,
157
+ setImmediate,
158
+ clearTimeout,
159
+ clearInterval,
160
+ clearImmediate,
161
+ btoa,
162
+ atob,
163
+ TextDecoder,
164
+ TextDecoderStream,
165
+ TextEncoder,
166
+ TextEncoderStream,
167
+ FormData,
168
+ };
169
+ }
170
+ async runForAllItems(taskId, settings, data, workflow, signal) {
171
+ const dataProxy = this.createDataProxy(data, workflow, data.itemIndex);
172
+ const inputItems = data.connectionInputData;
173
+ const context = this.buildContext(taskId, workflow, data.node, dataProxy, {
174
+ items: inputItems,
175
+ ...settings.additionalProperties,
176
+ });
177
+ try {
178
+ const result = await new Promise((resolve, reject) => {
179
+ const abortHandler = () => {
180
+ reject(new timeout_error_1.TimeoutError(this.taskTimeout));
181
+ };
182
+ signal.addEventListener('abort', abortHandler, { once: true });
183
+ let taskResult;
184
+ if (this.mode === 'secure') {
185
+ taskResult = (0, node_vm_1.runInContext)(this.createVmExecutableCode(settings.code), context, {
186
+ timeout: this.taskTimeout * 1000,
187
+ });
188
+ }
189
+ else {
190
+ taskResult = this.runDirectly(settings.code, context);
191
+ }
192
+ void taskResult
193
+ .then(resolve)
194
+ .catch(reject)
195
+ .finally(() => {
196
+ signal.removeEventListener('abort', abortHandler);
197
+ });
198
+ });
199
+ if (result === null) {
200
+ return [];
201
+ }
202
+ return result;
203
+ }
204
+ catch (e) {
205
+ const error = this.toExecutionErrorIfNeeded(e);
206
+ if (settings.continueOnFail) {
207
+ return [{ json: { error: error.message } }];
208
+ }
209
+ throw error;
210
+ }
211
+ }
212
+ async runForEachItem(taskId, settings, data, workflow, signal) {
213
+ const inputItems = data.connectionInputData;
214
+ const returnData = [];
215
+ const chunkStartIdx = settings.chunk ? settings.chunk.startIndex : 0;
216
+ const chunkEndIdx = settings.chunk
217
+ ? settings.chunk.startIndex + settings.chunk.count
218
+ : inputItems.length;
219
+ const context = this.buildContext(taskId, workflow, data.node, undefined, settings.additionalProperties);
220
+ for (let index = chunkStartIdx; index < chunkEndIdx; index++) {
221
+ const dataProxy = this.createDataProxy(data, workflow, index);
222
+ Object.assign(context, dataProxy, { item: inputItems[index] });
223
+ try {
224
+ const result = await new Promise((resolve, reject) => {
225
+ const abortHandler = () => {
226
+ reject(new timeout_error_1.TimeoutError(this.taskTimeout));
227
+ };
228
+ signal.addEventListener('abort', abortHandler);
229
+ let taskResult;
230
+ if (this.mode === 'secure') {
231
+ taskResult = (0, node_vm_1.runInContext)(this.createVmExecutableCode(settings.code), context, {
232
+ timeout: this.taskTimeout * 1000,
233
+ });
234
+ }
235
+ else {
236
+ taskResult = this.runDirectly(settings.code, context);
237
+ }
238
+ void taskResult
239
+ .then(resolve)
240
+ .catch(reject)
241
+ .finally(() => {
242
+ signal.removeEventListener('abort', abortHandler);
243
+ });
244
+ });
245
+ if (result === null) {
246
+ continue;
247
+ }
248
+ if (result) {
249
+ const jsonData = this.extractJsonData(result);
250
+ returnData.push(result.binary
251
+ ? {
252
+ json: jsonData,
253
+ pairedItem: { item: index },
254
+ binary: result.binary,
255
+ }
256
+ : {
257
+ json: jsonData,
258
+ pairedItem: { item: index },
259
+ });
260
+ }
261
+ }
262
+ catch (e) {
263
+ const error = this.toExecutionErrorIfNeeded(e);
264
+ if (!settings.continueOnFail) {
265
+ throw error;
266
+ }
267
+ returnData.push({
268
+ json: { error: error.message },
269
+ pairedItem: {
270
+ item: index,
271
+ },
272
+ });
273
+ }
274
+ }
275
+ return returnData;
276
+ }
277
+ createDataProxy(data, workflow, itemIndex) {
278
+ return new n8n_workflow_1.WorkflowDataProxy(workflow, data.runExecutionData, data.runIndex, itemIndex, data.activeNodeName, data.connectionInputData, data.siblingParameters, data.mode, (0, n8n_core_1.getAdditionalKeys)(data.additionalData, data.mode, data.runExecutionData), data.executeData, data.defaultReturnRunIndex, data.selfData, data.contextNodeName, data.envProviderState ?? {
279
+ env: {},
280
+ isEnvAccessBlocked: false,
281
+ isProcessAvailable: true,
282
+ }).getDataProxy({ throwOnMissingExecutionData: false });
283
+ }
284
+ extractJsonData(result) {
285
+ if (!(0, isObject_1.default)(result))
286
+ return result;
287
+ if ('json' in result)
288
+ return result.json;
289
+ if ('binary' in result) {
290
+ return result.json ?? {};
291
+ }
292
+ return result;
293
+ }
294
+ toExecutionErrorIfNeeded(error) {
295
+ if (error instanceof Error) {
296
+ return (0, serializable_error_1.makeSerializable)(error);
297
+ }
298
+ if ((0, error_like_1.isErrorLike)(error)) {
299
+ return new execution_error_1.ExecutionError(error);
300
+ }
301
+ return new execution_error_1.ExecutionError({ message: JSON.stringify(error) });
302
+ }
303
+ reconstructTaskData(response, chunk) {
304
+ const inputData = this.taskDataReconstruct.reconstructConnectionInputItems(response.inputData, chunk);
305
+ return {
306
+ ...response,
307
+ connectionInputData: inputData,
308
+ executeData: this.taskDataReconstruct.reconstructExecuteData(response, inputData),
309
+ };
310
+ }
311
+ async requestNodeTypeIfNeeded(neededBuiltIns, workflow, taskId) {
312
+ if (neededBuiltIns.needsAllNodes) {
313
+ const uniqueNodeTypes = new Map(workflow.nodes.map((node) => [
314
+ `${node.type}|${node.typeVersion}`,
315
+ { name: node.type, version: node.typeVersion },
316
+ ]));
317
+ const unknownNodeTypes = this.nodeTypes.onlyUnknown([...uniqueNodeTypes.values()]);
318
+ const nodeTypes = await this.requestNodeTypes(taskId, unknownNodeTypes);
319
+ this.nodeTypes.addNodeTypeDescriptions(nodeTypes);
320
+ }
321
+ }
322
+ buildRpcCallObject(taskId) {
323
+ const rpcObject = {};
324
+ for (const rpcMethod of runner_types_1.EXPOSED_RPC_METHODS) {
325
+ (0, set_1.default)(rpcObject, rpcMethod.split('.'), async (...args) => await this.makeRpcCall(taskId, rpcMethod, args));
326
+ }
327
+ for (const rpcMethod of runner_types_1.UNSUPPORTED_HELPER_FUNCTIONS) {
328
+ (0, set_1.default)(rpcObject, rpcMethod.split('.'), () => {
329
+ throw new unsupported_function_error_1.UnsupportedFunctionError(rpcMethod);
330
+ });
331
+ }
332
+ return rpcObject;
333
+ }
334
+ buildCustomConsole(taskId) {
335
+ return {
336
+ ...Object.keys(console).reduce((acc, name) => {
337
+ acc[name] = task_runner_1.noOp;
338
+ return acc;
339
+ }, {}),
340
+ log: (...args) => {
341
+ const formattedLogArgs = args.map((arg) => {
342
+ if ((0, isObject_1.default)(arg) && '__isExecutionContext' in arg)
343
+ return '[[ExecutionContext]]';
344
+ if (typeof arg === 'string')
345
+ return `'${arg}'`;
346
+ return (0, n8n_workflow_1.jsonStringify)(arg, { replaceCircularRefs: true });
347
+ });
348
+ void this.makeRpcCall(taskId, 'logNodeOutput', formattedLogArgs);
349
+ },
350
+ };
351
+ }
352
+ buildContext(taskId, workflow, node, dataProxy, additionalProperties = {}) {
353
+ return (0, node_vm_1.createContext)({
354
+ __isExecutionContext: true,
355
+ require: this.requireResolver,
356
+ module: {},
357
+ console: this.buildCustomConsole(taskId),
358
+ $getWorkflowStaticData: (type) => workflow.getStaticData(type, node),
359
+ ...this.getNativeVariables(),
360
+ ...dataProxy,
361
+ ...this.buildRpcCallObject(taskId),
362
+ ...additionalProperties,
363
+ });
364
+ }
365
+ createVmExecutableCode(code) {
366
+ return [
367
+ 'globalThis.global = globalThis',
368
+ 'Object.getPrototypeOf = () => ({})',
369
+ 'Reflect.getPrototypeOf = () => ({})',
370
+ 'Object.setPrototypeOf = () => false',
371
+ 'Reflect.setPrototypeOf = () => false',
372
+ `module.exports = async function VmCodeWrapper() {${code}\n}()`,
373
+ ].join('; ');
374
+ }
375
+ async runDirectly(code, context) {
376
+ const fn = new Function('context', `with(context) { return (async function() {${code}\n})(); }`);
377
+ return await fn(context);
378
+ }
379
+ }
380
+ exports.JsTaskRunner = JsTaskRunner;
381
+ //# sourceMappingURL=js-task-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"js-task-runner.js","sourceRoot":"","sources":["../../src/js-task-runner/js-task-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function isObject(maybe: unknown): maybe is object;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isObject = isObject;
4
+ function isObject(maybe) {
5
+ return (typeof maybe === 'object' && maybe !== null && !Array.isArray(maybe) && !(maybe instanceof Date));
6
+ }
7
+ //# sourceMappingURL=obj-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"obj-utils.js","sourceRoot":"","sources":["../../src/js-task-runner/obj-utils.ts"],"names":[],"mappings":";;AAAA,4BAIC;AAJD,SAAgB,QAAQ,CAAC,KAAc;IACtC,OAAO,CACN,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,YAAY,IAAI,CAAC,CAChG,CAAC;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ export type RequireResolverOpts = {
2
+ allowedBuiltInModules: Set<string> | '*';
3
+ allowedExternalModules: Set<string> | '*';
4
+ };
5
+ export type RequireResolver = (request: string) => unknown;
6
+ export declare function createRequireResolver({ allowedBuiltInModules, allowedExternalModules, }: RequireResolverOpts): (request: string) => unknown;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createRequireResolver = createRequireResolver;
4
+ const node_module_1 = require("node:module");
5
+ const disallowed_module_error_1 = require("./errors/disallowed-module.error");
6
+ const execution_error_1 = require("./errors/execution-error");
7
+ function createRequireResolver({ allowedBuiltInModules, allowedExternalModules, }) {
8
+ return (request) => {
9
+ const checkIsAllowed = (allowList, moduleName) => {
10
+ return allowList === '*' || allowList.has(moduleName);
11
+ };
12
+ const isAllowed = (0, node_module_1.isBuiltin)(request)
13
+ ? checkIsAllowed(allowedBuiltInModules, request)
14
+ : checkIsAllowed(allowedExternalModules, request);
15
+ if (!isAllowed) {
16
+ const error = new disallowed_module_error_1.DisallowedModuleError(request);
17
+ throw new execution_error_1.ExecutionError(error);
18
+ }
19
+ return require(request);
20
+ };
21
+ }
22
+ //# sourceMappingURL=require-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"require-resolver.js","sourceRoot":"","sources":["../../src/js-task-runner/require-resolver.ts"],"names":[],"mappings":";;AAqBA,sDAoBC;AAzCD,6CAAwC;AAExC,8EAAyE;AACzE,8DAA0D;AAkB1D,SAAgB,qBAAqB,CAAC,EACrC,qBAAqB,EACrB,sBAAsB,GACD;IACrB,OAAO,CAAC,OAAe,EAAE,EAAE;QAC1B,MAAM,cAAc,GAAG,CAAC,SAA4B,EAAE,UAAkB,EAAE,EAAE;YAC3E,OAAO,SAAS,KAAK,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACvD,CAAC,CAAC;QAEF,MAAM,SAAS,GAAG,IAAA,uBAAS,EAAC,OAAO,CAAC;YACnC,CAAC,CAAC,cAAc,CAAC,qBAAqB,EAAE,OAAO,CAAC;YAChD,CAAC,CAAC,cAAc,CAAC,sBAAsB,EAAE,OAAO,CAAC,CAAC;QAEnD,IAAI,CAAC,SAAS,EAAE,CAAC;YAChB,MAAM,KAAK,GAAG,IAAI,+CAAqB,CAAC,OAAO,CAAC,CAAC;YACjD,MAAM,IAAI,gCAAc,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;QAED,OAAO,OAAO,CAAC,OAAO,CAAY,CAAC;IACpC,CAAC,CAAC;AACH,CAAC"}
@@ -0,0 +1,186 @@
1
+ import type { INodeTypeBaseDescription } from 'n8n-workflow';
2
+ import type { NeededNodeType, AVAILABLE_RPC_METHODS, TaskDataRequestParams, TaskResultData } from './runner-types';
3
+ export declare namespace BrokerMessage {
4
+ namespace ToRunner {
5
+ interface InfoRequest {
6
+ type: 'broker:inforequest';
7
+ }
8
+ interface RunnerRegistered {
9
+ type: 'broker:runnerregistered';
10
+ }
11
+ interface TaskOfferAccept {
12
+ type: 'broker:taskofferaccept';
13
+ taskId: string;
14
+ offerId: string;
15
+ }
16
+ interface TaskCancel {
17
+ type: 'broker:taskcancel';
18
+ taskId: string;
19
+ reason: string;
20
+ }
21
+ interface TaskSettings {
22
+ type: 'broker:tasksettings';
23
+ taskId: string;
24
+ settings: unknown;
25
+ }
26
+ interface RPCResponse {
27
+ type: 'broker:rpcresponse';
28
+ callId: string;
29
+ taskId: string;
30
+ status: 'success' | 'error';
31
+ data: unknown;
32
+ }
33
+ interface TaskDataResponse {
34
+ type: 'broker:taskdataresponse';
35
+ taskId: string;
36
+ requestId: string;
37
+ data: unknown;
38
+ }
39
+ interface NodeTypes {
40
+ type: 'broker:nodetypes';
41
+ taskId: string;
42
+ requestId: string;
43
+ nodeTypes: INodeTypeBaseDescription[];
44
+ }
45
+ type All = InfoRequest | TaskOfferAccept | TaskCancel | TaskSettings | RunnerRegistered | RPCResponse | TaskDataResponse | NodeTypes;
46
+ }
47
+ namespace ToRequester {
48
+ interface TaskReady {
49
+ type: 'broker:taskready';
50
+ requestId: string;
51
+ taskId: string;
52
+ }
53
+ interface TaskDone {
54
+ type: 'broker:taskdone';
55
+ taskId: string;
56
+ data: TaskResultData;
57
+ }
58
+ interface TaskError {
59
+ type: 'broker:taskerror';
60
+ taskId: string;
61
+ error: unknown;
62
+ }
63
+ interface RequestExpired {
64
+ type: 'broker:requestexpired';
65
+ requestId: string;
66
+ reason: 'timeout';
67
+ }
68
+ interface TaskDataRequest {
69
+ type: 'broker:taskdatarequest';
70
+ taskId: string;
71
+ requestId: string;
72
+ requestParams: TaskDataRequestParams;
73
+ }
74
+ interface NodeTypesRequest {
75
+ type: 'broker:nodetypesrequest';
76
+ taskId: string;
77
+ requestId: string;
78
+ requestParams: NeededNodeType[];
79
+ }
80
+ interface RPC {
81
+ type: 'broker:rpc';
82
+ callId: string;
83
+ taskId: string;
84
+ name: (typeof AVAILABLE_RPC_METHODS)[number];
85
+ params: unknown[];
86
+ }
87
+ type All = TaskReady | TaskDone | TaskError | RequestExpired | TaskDataRequest | NodeTypesRequest | RPC;
88
+ }
89
+ }
90
+ export declare namespace RequesterMessage {
91
+ namespace ToBroker {
92
+ interface TaskSettings {
93
+ type: 'requester:tasksettings';
94
+ taskId: string;
95
+ settings: unknown;
96
+ }
97
+ interface TaskCancel {
98
+ type: 'requester:taskcancel';
99
+ taskId: string;
100
+ reason: string;
101
+ }
102
+ interface TaskDataResponse {
103
+ type: 'requester:taskdataresponse';
104
+ taskId: string;
105
+ requestId: string;
106
+ data: unknown;
107
+ }
108
+ interface NodeTypesResponse {
109
+ type: 'requester:nodetypesresponse';
110
+ taskId: string;
111
+ requestId: string;
112
+ nodeTypes: INodeTypeBaseDescription[];
113
+ }
114
+ interface RPCResponse {
115
+ type: 'requester:rpcresponse';
116
+ taskId: string;
117
+ callId: string;
118
+ status: 'success' | 'error';
119
+ data: unknown;
120
+ }
121
+ interface TaskRequest {
122
+ type: 'requester:taskrequest';
123
+ requestId: string;
124
+ taskType: string;
125
+ }
126
+ type All = TaskSettings | TaskCancel | RPCResponse | TaskDataResponse | NodeTypesResponse | TaskRequest;
127
+ }
128
+ }
129
+ export declare namespace RunnerMessage {
130
+ namespace ToBroker {
131
+ interface Info {
132
+ type: 'runner:info';
133
+ name: string;
134
+ types: string[];
135
+ }
136
+ interface TaskAccepted {
137
+ type: 'runner:taskaccepted';
138
+ taskId: string;
139
+ }
140
+ interface TaskRejected {
141
+ type: 'runner:taskrejected';
142
+ taskId: string;
143
+ reason: string;
144
+ }
145
+ interface TaskDeferred {
146
+ type: 'runner:taskdeferred';
147
+ taskId: string;
148
+ }
149
+ interface TaskDone {
150
+ type: 'runner:taskdone';
151
+ taskId: string;
152
+ data: TaskResultData;
153
+ }
154
+ interface TaskError {
155
+ type: 'runner:taskerror';
156
+ taskId: string;
157
+ error: unknown;
158
+ }
159
+ interface TaskOffer {
160
+ type: 'runner:taskoffer';
161
+ offerId: string;
162
+ taskType: string;
163
+ validFor: number;
164
+ }
165
+ interface TaskDataRequest {
166
+ type: 'runner:taskdatarequest';
167
+ taskId: string;
168
+ requestId: string;
169
+ requestParams: TaskDataRequestParams;
170
+ }
171
+ interface NodeTypesRequest {
172
+ type: 'runner:nodetypesrequest';
173
+ taskId: string;
174
+ requestId: string;
175
+ requestParams: NeededNodeType[];
176
+ }
177
+ interface RPC {
178
+ type: 'runner:rpc';
179
+ callId: string;
180
+ taskId: string;
181
+ name: (typeof AVAILABLE_RPC_METHODS)[number];
182
+ params: unknown[];
183
+ }
184
+ type All = Info | TaskDone | TaskError | TaskAccepted | TaskRejected | TaskDeferred | TaskOffer | RPC | TaskDataRequest | NodeTypesRequest;
185
+ }
186
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=message-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-types.js","sourceRoot":"","sources":["../src/message-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ import { type IDataObject, type INodeType, type INodeTypeDescription, type INodeTypes, type IVersionedNodeType } from 'n8n-workflow';
2
+ import type { NeededNodeType } from './runner-types';
3
+ export declare const DEFAULT_NODETYPE_VERSION = 1;
4
+ export declare class TaskRunnerNodeTypes implements INodeTypes {
5
+ private nodeTypesByVersion;
6
+ constructor(nodeTypes: INodeTypeDescription[]);
7
+ private parseNodeTypes;
8
+ getByName(_nodeType: string): INodeType | IVersionedNodeType;
9
+ getByNameAndVersion(nodeType: string, version?: number): INodeType;
10
+ getKnownTypes(): IDataObject;
11
+ addNodeTypeDescriptions(nodeTypeDescriptions: INodeTypeDescription[]): void;
12
+ onlyUnknown(nodeTypes: NeededNodeType[]): NeededNodeType[];
13
+ }