@n8n/task-runner 1.4.0 → 1.5.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.
package/dist/index.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  export * from './task-runner';
2
2
  export * from './runner-types';
3
+ export * from './message-types';
package/dist/index.js CHANGED
@@ -16,4 +16,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./task-runner"), exports);
18
18
  __exportStar(require("./runner-types"), exports);
19
+ __exportStar(require("./message-types"), exports);
19
20
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B;AAC9B,iDAA+B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B;AAC9B,iDAA+B;AAC/B,kDAAgC"}
@@ -0,0 +1,6 @@
1
+ import type { AssignmentExpression, Identifier, Literal, MemberExpression, Node, VariableDeclarator } from 'acorn';
2
+ export declare function isLiteral(node?: Node): node is Literal;
3
+ export declare function isIdentifier(node?: Node): node is Identifier;
4
+ export declare function isMemberExpression(node?: Node): node is MemberExpression;
5
+ export declare function isVariableDeclarator(node?: Node): node is VariableDeclarator;
6
+ export declare function isAssignmentExpression(node?: Node): node is AssignmentExpression;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isLiteral = isLiteral;
4
+ exports.isIdentifier = isIdentifier;
5
+ exports.isMemberExpression = isMemberExpression;
6
+ exports.isVariableDeclarator = isVariableDeclarator;
7
+ exports.isAssignmentExpression = isAssignmentExpression;
8
+ function isLiteral(node) {
9
+ return node?.type === 'Literal';
10
+ }
11
+ function isIdentifier(node) {
12
+ return node?.type === 'Identifier';
13
+ }
14
+ function isMemberExpression(node) {
15
+ return node?.type === 'MemberExpression';
16
+ }
17
+ function isVariableDeclarator(node) {
18
+ return node?.type === 'VariableDeclarator';
19
+ }
20
+ function isAssignmentExpression(node) {
21
+ return node?.type === 'AssignmentExpression';
22
+ }
23
+ //# sourceMappingURL=acorn-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorn-helpers.js","sourceRoot":"","sources":["../../../src/js-task-runner/built-ins-parser/acorn-helpers.ts"],"names":[],"mappings":";;AASA,8BAEC;AAED,oCAEC;AAED,gDAEC;AAED,oDAEC;AAED,wDAEC;AAlBD,SAAgB,SAAS,CAAC,IAAW;IACpC,OAAO,IAAI,EAAE,IAAI,KAAK,SAAS,CAAC;AACjC,CAAC;AAED,SAAgB,YAAY,CAAC,IAAW;IACvC,OAAO,IAAI,EAAE,IAAI,KAAK,YAAY,CAAC;AACpC,CAAC;AAED,SAAgB,kBAAkB,CAAC,IAAW;IAC7C,OAAO,IAAI,EAAE,IAAI,KAAK,kBAAkB,CAAC;AAC1C,CAAC;AAED,SAAgB,oBAAoB,CAAC,IAAW;IAC/C,OAAO,IAAI,EAAE,IAAI,KAAK,oBAAoB,CAAC;AAC5C,CAAC;AAED,SAAgB,sBAAsB,CAAC,IAAW;IACjD,OAAO,IAAI,EAAE,IAAI,KAAK,sBAAsB,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { BrokerMessage } from '../../message-types';
2
+ export declare class BuiltInsParserState {
3
+ neededNodeNames: Set<string>;
4
+ needsAllNodes: boolean;
5
+ needs$env: boolean;
6
+ needs$input: boolean;
7
+ needs$execution: boolean;
8
+ needs$prevNode: boolean;
9
+ constructor(opts?: Partial<BuiltInsParserState>);
10
+ markNeedsAllNodes(): void;
11
+ markNodeAsNeeded(nodeName: string): void;
12
+ markEnvAsNeeded(): void;
13
+ markInputAsNeeded(): void;
14
+ markExecutionAsNeeded(): void;
15
+ markPrevNodeAsNeeded(): void;
16
+ toDataRequestParams(): BrokerMessage.ToRequester.TaskDataRequest['requestParams'];
17
+ static newNeedsAllDataState(): BuiltInsParserState;
18
+ }
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BuiltInsParserState = void 0;
4
+ class BuiltInsParserState {
5
+ constructor(opts = {}) {
6
+ this.neededNodeNames = new Set();
7
+ this.needsAllNodes = false;
8
+ this.needs$env = false;
9
+ this.needs$input = false;
10
+ this.needs$execution = false;
11
+ this.needs$prevNode = false;
12
+ Object.assign(this, opts);
13
+ }
14
+ markNeedsAllNodes() {
15
+ this.needsAllNodes = true;
16
+ this.needs$input = true;
17
+ this.neededNodeNames = new Set();
18
+ }
19
+ markNodeAsNeeded(nodeName) {
20
+ if (this.needsAllNodes) {
21
+ return;
22
+ }
23
+ this.neededNodeNames.add(nodeName);
24
+ }
25
+ markEnvAsNeeded() {
26
+ this.needs$env = true;
27
+ }
28
+ markInputAsNeeded() {
29
+ this.needs$input = true;
30
+ }
31
+ markExecutionAsNeeded() {
32
+ this.needs$execution = true;
33
+ }
34
+ markPrevNodeAsNeeded() {
35
+ this.needs$prevNode = true;
36
+ }
37
+ toDataRequestParams() {
38
+ return {
39
+ dataOfNodes: this.needsAllNodes ? 'all' : Array.from(this.neededNodeNames),
40
+ env: this.needs$env,
41
+ input: this.needs$input,
42
+ prevNode: this.needs$prevNode,
43
+ };
44
+ }
45
+ static newNeedsAllDataState() {
46
+ const obj = new BuiltInsParserState();
47
+ obj.markNeedsAllNodes();
48
+ obj.markEnvAsNeeded();
49
+ obj.markInputAsNeeded();
50
+ obj.markExecutionAsNeeded();
51
+ obj.markPrevNodeAsNeeded();
52
+ return obj;
53
+ }
54
+ }
55
+ exports.BuiltInsParserState = BuiltInsParserState;
56
+ //# sourceMappingURL=built-ins-parser-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"built-ins-parser-state.js","sourceRoot":"","sources":["../../../src/js-task-runner/built-ins-parser/built-ins-parser-state.ts"],"names":[],"mappings":";;;AAKA,MAAa,mBAAmB;IAa/B,YAAY,OAAqC,EAAE;QAZnD,oBAAe,GAAgB,IAAI,GAAG,EAAE,CAAC;QAEzC,kBAAa,GAAG,KAAK,CAAC;QAEtB,cAAS,GAAG,KAAK,CAAC;QAElB,gBAAW,GAAG,KAAK,CAAC;QAEpB,oBAAe,GAAG,KAAK,CAAC;QAExB,mBAAc,GAAG,KAAK,CAAC;QAGtB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC3B,CAAC;IAKD,iBAAiB;QAChB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,eAAe,GAAG,IAAI,GAAG,EAAE,CAAC;IAClC,CAAC;IAED,gBAAgB,CAAC,QAAgB;QAChC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,OAAO;QACR,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED,eAAe;QACd,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IACvB,CAAC;IAED,iBAAiB;QAChB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IACzB,CAAC;IAED,qBAAqB;QACpB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;IAC7B,CAAC;IAED,oBAAoB;QACnB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;IAC5B,CAAC;IAED,mBAAmB;QAClB,OAAO;YACN,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;YAC1E,GAAG,EAAE,IAAI,CAAC,SAAS;YACnB,KAAK,EAAE,IAAI,CAAC,WAAW;YACvB,QAAQ,EAAE,IAAI,CAAC,cAAc;SAC7B,CAAC;IACH,CAAC;IAED,MAAM,CAAC,oBAAoB;QAC1B,MAAM,GAAG,GAAG,IAAI,mBAAmB,EAAE,CAAC;QACtC,GAAG,CAAC,iBAAiB,EAAE,CAAC;QACxB,GAAG,CAAC,eAAe,EAAE,CAAC;QACtB,GAAG,CAAC,iBAAiB,EAAE,CAAC;QACxB,GAAG,CAAC,qBAAqB,EAAE,CAAC;QAC5B,GAAG,CAAC,oBAAoB,EAAE,CAAC;QAC3B,OAAO,GAAG,CAAC;IACZ,CAAC;CACD;AApED,kDAoEC"}
@@ -0,0 +1,10 @@
1
+ import type { Result } from 'n8n-workflow';
2
+ import { BuiltInsParserState } from './built-ins-parser-state';
3
+ export declare class BuiltInsParser {
4
+ parseUsedBuiltIns(code: string): Result<BuiltInsParserState, Error>;
5
+ private identifyBuiltInsByWalkingAst;
6
+ private visitCallExpression;
7
+ private handlePrevNodeCall;
8
+ private visitIdentifier;
9
+ private isPairedItemProperty;
10
+ }
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BuiltInsParser = void 0;
4
+ const acorn_1 = require("acorn");
5
+ const acorn_walk_1 = require("acorn-walk");
6
+ const n8n_workflow_1 = require("n8n-workflow");
7
+ const acorn_helpers_1 = require("./acorn-helpers");
8
+ const built_ins_parser_state_1 = require("./built-ins-parser-state");
9
+ class BuiltInsParser {
10
+ constructor() {
11
+ this.visitCallExpression = (node, state, ancestors) => {
12
+ const isDollar = node.callee.type === 'Identifier' && node.callee.name === '$';
13
+ if (!isDollar)
14
+ return;
15
+ if (node.arguments.length === 0) {
16
+ return;
17
+ }
18
+ const firstArg = node.arguments[0];
19
+ if (!(0, acorn_helpers_1.isLiteral)(firstArg)) {
20
+ state.markNeedsAllNodes();
21
+ return;
22
+ }
23
+ if (typeof firstArg.value !== 'string') {
24
+ return;
25
+ }
26
+ state.markNodeAsNeeded(firstArg.value);
27
+ this.handlePrevNodeCall(node, state, ancestors);
28
+ };
29
+ this.visitIdentifier = (node, state) => {
30
+ if (node.name === '$env') {
31
+ state.markEnvAsNeeded();
32
+ }
33
+ else if (node.name === '$input' || node.name === '$json') {
34
+ state.markInputAsNeeded();
35
+ }
36
+ else if (node.name === '$execution') {
37
+ state.markExecutionAsNeeded();
38
+ }
39
+ else if (node.name === '$prevNode') {
40
+ state.markPrevNodeAsNeeded();
41
+ }
42
+ };
43
+ }
44
+ parseUsedBuiltIns(code) {
45
+ return (0, n8n_workflow_1.toResult)(() => {
46
+ const wrappedCode = `async function VmCodeWrapper() { ${code} }`;
47
+ const ast = (0, acorn_1.parse)(wrappedCode, { ecmaVersion: 2025, sourceType: 'module' });
48
+ return this.identifyBuiltInsByWalkingAst(ast);
49
+ });
50
+ }
51
+ identifyBuiltInsByWalkingAst(ast) {
52
+ const accessedBuiltIns = new built_ins_parser_state_1.BuiltInsParserState();
53
+ (0, acorn_walk_1.ancestor)(ast, {
54
+ CallExpression: this.visitCallExpression,
55
+ Identifier: this.visitIdentifier,
56
+ }, undefined, accessedBuiltIns);
57
+ return accessedBuiltIns;
58
+ }
59
+ handlePrevNodeCall(_node, state, ancestors) {
60
+ const directParent = ancestors[ancestors.length - 2];
61
+ if ((0, acorn_helpers_1.isMemberExpression)(directParent)) {
62
+ const accessedProperty = directParent.property;
63
+ if (directParent.computed) {
64
+ if ((0, acorn_helpers_1.isLiteral)(accessedProperty)) {
65
+ if (this.isPairedItemProperty(accessedProperty.value)) {
66
+ state.markNeedsAllNodes();
67
+ }
68
+ }
69
+ else if ((0, acorn_helpers_1.isIdentifier)(accessedProperty)) {
70
+ state.markNeedsAllNodes();
71
+ }
72
+ }
73
+ else if ((0, acorn_helpers_1.isIdentifier)(accessedProperty) && this.isPairedItemProperty(accessedProperty.name)) {
74
+ state.markNeedsAllNodes();
75
+ }
76
+ }
77
+ else if ((0, acorn_helpers_1.isVariableDeclarator)(directParent) || (0, acorn_helpers_1.isAssignmentExpression)(directParent)) {
78
+ state.markNeedsAllNodes();
79
+ }
80
+ else {
81
+ state.markNeedsAllNodes();
82
+ }
83
+ }
84
+ isPairedItemProperty(property) {
85
+ return property === 'item' || property === 'pairedItem' || property === 'itemMatching';
86
+ }
87
+ }
88
+ exports.BuiltInsParser = BuiltInsParser;
89
+ //# sourceMappingURL=built-ins-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"built-ins-parser.js","sourceRoot":"","sources":["../../../src/js-task-runner/built-ins-parser/built-ins-parser.ts"],"names":[],"mappings":"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"}
@@ -23,7 +23,7 @@ export interface PartialAdditionalData {
23
23
  userId?: string;
24
24
  variables: IDataObject;
25
25
  }
26
- export interface AllCodeTaskData {
26
+ export interface DataRequestResponse {
27
27
  workflow: Omit<WorkflowParameters, 'nodeTypes'>;
28
28
  inputData: ITaskDataConnections;
29
29
  node: INode;
@@ -43,6 +43,7 @@ export interface AllCodeTaskData {
43
43
  }
44
44
  export declare class JsTaskRunner extends TaskRunner {
45
45
  private readonly requireResolver;
46
+ private readonly builtInsParser;
46
47
  constructor(config: MainConfig, name?: string);
47
48
  executeTask(task: Task<JSExecSettings>): Promise<TaskResultData>;
48
49
  private getNativeVariables;
@@ -29,6 +29,8 @@ const n8n_workflow_1 = require("n8n-workflow");
29
29
  const a = __importStar(require("node:assert"));
30
30
  const node_vm_1 = require("node:vm");
31
31
  const task_runner_1 = require("../task-runner");
32
+ const built_ins_parser_1 = require("./built-ins-parser/built-ins-parser");
33
+ const built_ins_parser_state_1 = require("./built-ins-parser/built-ins-parser-state");
32
34
  const error_like_1 = require("./errors/error-like");
33
35
  const execution_error_1 = require("./errors/execution-error");
34
36
  const serializable_error_1 = require("./errors/serializable-error");
@@ -41,6 +43,7 @@ class JsTaskRunner extends task_runner_1.TaskRunner {
41
43
  name,
42
44
  ...config.baseRunnerConfig,
43
45
  });
46
+ this.builtInsParser = new built_ins_parser_1.BuiltInsParser();
44
47
  const { jsRunnerConfig } = config;
45
48
  const parseModuleAllowList = (moduleList) => moduleList === '*' ? null : new Set(moduleList.split(',').map((x) => x.trim()));
46
49
  this.requireResolver = (0, require_resolver_1.createRequireResolver)({
@@ -49,10 +52,23 @@ class JsTaskRunner extends task_runner_1.TaskRunner {
49
52
  });
50
53
  }
51
54
  async executeTask(task) {
52
- const allData = await this.requestData(task.taskId, 'all');
53
55
  const settings = task.settings;
54
56
  a.ok(settings, 'JS Code not sent to runner');
55
- const workflowParams = allData.workflow;
57
+ const neededBuiltInsResult = this.builtInsParser.parseUsedBuiltIns(settings.code);
58
+ const neededBuiltIns = neededBuiltInsResult.ok
59
+ ? neededBuiltInsResult.result
60
+ : built_ins_parser_state_1.BuiltInsParserState.newNeedsAllDataState();
61
+ const data = await this.requestData(task.taskId, neededBuiltIns.toDataRequestParams());
62
+ if (neededBuiltIns.needsAllNodes) {
63
+ const uniqueNodeTypes = new Map(data.workflow.nodes.map((node) => [
64
+ `${node.type}|${node.typeVersion}`,
65
+ { name: node.type, version: node.typeVersion },
66
+ ]));
67
+ const unknownNodeTypes = this.nodeTypes.onlyUnknown([...uniqueNodeTypes.values()]);
68
+ const nodeTypes = await this.requestNodeTypes(task.taskId, unknownNodeTypes);
69
+ this.nodeTypes.addNodeTypeDescriptions(nodeTypes);
70
+ }
71
+ const workflowParams = data.workflow;
56
72
  const workflow = new n8n_workflow_1.Workflow({
57
73
  ...workflowParams,
58
74
  nodeTypes: this.nodeTypes,
@@ -66,11 +82,11 @@ class JsTaskRunner extends task_runner_1.TaskRunner {
66
82
  },
67
83
  };
68
84
  const result = settings.nodeMode === 'runOnceForAllItems'
69
- ? await this.runForAllItems(task.taskId, settings, allData, workflow, customConsole)
70
- : await this.runForEachItem(task.taskId, settings, allData, workflow, customConsole);
85
+ ? await this.runForAllItems(task.taskId, settings, data, workflow, customConsole)
86
+ : await this.runForEachItem(task.taskId, settings, data, workflow, customConsole);
71
87
  return {
72
88
  result,
73
- customData: allData.runExecutionData.resultData.metadata,
89
+ customData: data.runExecutionData.resultData.metadata,
74
90
  };
75
91
  }
76
92
  getNativeVariables() {
@@ -93,9 +109,9 @@ class JsTaskRunner extends task_runner_1.TaskRunner {
93
109
  FormData,
94
110
  };
95
111
  }
96
- async runForAllItems(taskId, settings, allData, workflow, customConsole) {
97
- const dataProxy = this.createDataProxy(allData, workflow, allData.itemIndex);
98
- const inputItems = allData.connectionInputData;
112
+ async runForAllItems(taskId, settings, data, workflow, customConsole) {
113
+ const dataProxy = this.createDataProxy(data, workflow, data.itemIndex);
114
+ const inputItems = data.connectionInputData;
99
115
  const context = {
100
116
  require: this.requireResolver,
101
117
  module: {},
@@ -120,12 +136,12 @@ class JsTaskRunner extends task_runner_1.TaskRunner {
120
136
  throw error;
121
137
  }
122
138
  }
123
- async runForEachItem(taskId, settings, allData, workflow, customConsole) {
124
- const inputItems = allData.connectionInputData;
139
+ async runForEachItem(taskId, settings, data, workflow, customConsole) {
140
+ const inputItems = data.connectionInputData;
125
141
  const returnData = [];
126
142
  for (let index = 0; index < inputItems.length; index++) {
127
143
  const item = inputItems[index];
128
- const dataProxy = this.createDataProxy(allData, workflow, index);
144
+ const dataProxy = this.createDataProxy(data, workflow, index);
129
145
  const context = {
130
146
  require: this.requireResolver,
131
147
  module: {},
@@ -169,12 +185,12 @@ class JsTaskRunner extends task_runner_1.TaskRunner {
169
185
  }
170
186
  return returnData;
171
187
  }
172
- createDataProxy(allData, workflow, itemIndex) {
173
- return new n8n_workflow_1.WorkflowDataProxy(workflow, allData.runExecutionData, allData.runIndex, itemIndex, allData.activeNodeName, allData.connectionInputData, allData.siblingParameters, allData.mode, (0, n8n_core_1.getAdditionalKeys)(allData.additionalData, allData.mode, allData.runExecutionData), allData.executeData, allData.defaultReturnRunIndex, allData.selfData, allData.contextNodeName, allData.envProviderState ?? {
188
+ createDataProxy(data, workflow, itemIndex) {
189
+ 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 ?? {
174
190
  env: {},
175
191
  isEnvAccessBlocked: false,
176
192
  isProcessAvailable: true,
177
- }).getDataProxy();
193
+ }).getDataProxy({ throwOnMissingExecutionData: false });
178
194
  }
179
195
  toExecutionErrorIfNeeded(error) {
180
196
  if (error instanceof Error) {
@@ -1 +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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"}
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,177 @@
1
+ import type { INodeTypeBaseDescription } from 'n8n-workflow';
2
+ import type { NeededNodeType, RPC_ALLOW_LIST, 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 TaskDataRequest {
64
+ type: 'broker:taskdatarequest';
65
+ taskId: string;
66
+ requestId: string;
67
+ requestParams: TaskDataRequestParams;
68
+ }
69
+ interface NodeTypesRequest {
70
+ type: 'broker:nodetypesrequest';
71
+ taskId: string;
72
+ requestId: string;
73
+ requestParams: NeededNodeType[];
74
+ }
75
+ interface RPC {
76
+ type: 'broker:rpc';
77
+ callId: string;
78
+ taskId: string;
79
+ name: (typeof RPC_ALLOW_LIST)[number];
80
+ params: unknown[];
81
+ }
82
+ type All = TaskReady | TaskDone | TaskError | TaskDataRequest | NodeTypesRequest | RPC;
83
+ }
84
+ }
85
+ export declare namespace RequesterMessage {
86
+ namespace ToBroker {
87
+ interface TaskSettings {
88
+ type: 'requester:tasksettings';
89
+ taskId: string;
90
+ settings: unknown;
91
+ }
92
+ interface TaskCancel {
93
+ type: 'requester:taskcancel';
94
+ taskId: string;
95
+ reason: string;
96
+ }
97
+ interface TaskDataResponse {
98
+ type: 'requester:taskdataresponse';
99
+ taskId: string;
100
+ requestId: string;
101
+ data: unknown;
102
+ }
103
+ interface NodeTypesResponse {
104
+ type: 'requester:nodetypesresponse';
105
+ taskId: string;
106
+ requestId: string;
107
+ nodeTypes: INodeTypeBaseDescription[];
108
+ }
109
+ interface RPCResponse {
110
+ type: 'requester:rpcresponse';
111
+ taskId: string;
112
+ callId: string;
113
+ status: 'success' | 'error';
114
+ data: unknown;
115
+ }
116
+ interface TaskRequest {
117
+ type: 'requester:taskrequest';
118
+ requestId: string;
119
+ taskType: string;
120
+ }
121
+ type All = TaskSettings | TaskCancel | RPCResponse | TaskDataResponse | NodeTypesResponse | TaskRequest;
122
+ }
123
+ }
124
+ export declare namespace RunnerMessage {
125
+ namespace ToBroker {
126
+ interface Info {
127
+ type: 'runner:info';
128
+ name: string;
129
+ types: string[];
130
+ }
131
+ interface TaskAccepted {
132
+ type: 'runner:taskaccepted';
133
+ taskId: string;
134
+ }
135
+ interface TaskRejected {
136
+ type: 'runner:taskrejected';
137
+ taskId: string;
138
+ reason: string;
139
+ }
140
+ interface TaskDone {
141
+ type: 'runner:taskdone';
142
+ taskId: string;
143
+ data: TaskResultData;
144
+ }
145
+ interface TaskError {
146
+ type: 'runner:taskerror';
147
+ taskId: string;
148
+ error: unknown;
149
+ }
150
+ interface TaskOffer {
151
+ type: 'runner:taskoffer';
152
+ offerId: string;
153
+ taskType: string;
154
+ validFor: number;
155
+ }
156
+ interface TaskDataRequest {
157
+ type: 'runner:taskdatarequest';
158
+ taskId: string;
159
+ requestId: string;
160
+ requestParams: TaskDataRequestParams;
161
+ }
162
+ interface NodeTypesRequest {
163
+ type: 'runner:nodetypesrequest';
164
+ taskId: string;
165
+ requestId: string;
166
+ requestParams: NeededNodeType[];
167
+ }
168
+ interface RPC {
169
+ type: 'runner:rpc';
170
+ callId: string;
171
+ taskId: string;
172
+ name: (typeof RPC_ALLOW_LIST)[number];
173
+ params: unknown[];
174
+ }
175
+ type All = Info | TaskDone | TaskError | TaskAccepted | TaskRejected | TaskOffer | RPC | TaskDataRequest | NodeTypesRequest;
176
+ }
177
+ }
@@ -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":""}
@@ -1,4 +1,5 @@
1
1
  import { type IDataObject, type INodeType, type INodeTypeDescription, type INodeTypes, type IVersionedNodeType } from 'n8n-workflow';
2
+ import type { NeededNodeType } from './runner-types';
2
3
  export declare const DEFAULT_NODETYPE_VERSION = 1;
3
4
  export declare class TaskRunnerNodeTypes implements INodeTypes {
4
5
  private nodeTypesByVersion;
@@ -7,4 +8,6 @@ export declare class TaskRunnerNodeTypes implements INodeTypes {
7
8
  getByName(_nodeType: string): INodeType | IVersionedNodeType;
8
9
  getByNameAndVersion(nodeType: string, version?: number): INodeType;
9
10
  getKnownTypes(): IDataObject;
11
+ addNodeTypeDescriptions(nodeTypeDescriptions: INodeTypeDescription[]): void;
12
+ onlyUnknown(nodeTypes: NeededNodeType[]): NeededNodeType[];
10
13
  }
@@ -40,6 +40,28 @@ class TaskRunnerNodeTypes {
40
40
  getKnownTypes() {
41
41
  throw new n8n_workflow_1.ApplicationError('Unimplemented `getKnownTypes`', { level: 'error' });
42
42
  }
43
+ addNodeTypeDescriptions(nodeTypeDescriptions) {
44
+ const newNodeTypes = this.parseNodeTypes(nodeTypeDescriptions);
45
+ for (const [name, newVersions] of newNodeTypes.entries()) {
46
+ if (!this.nodeTypesByVersion.has(name)) {
47
+ this.nodeTypesByVersion.set(name, newVersions);
48
+ }
49
+ else {
50
+ const existingVersions = this.nodeTypesByVersion.get(name);
51
+ for (const [version, nodeType] of newVersions.entries()) {
52
+ existingVersions.set(version, nodeType);
53
+ }
54
+ }
55
+ }
56
+ }
57
+ onlyUnknown(nodeTypes) {
58
+ return nodeTypes.filter(({ name, version }) => {
59
+ const existingVersions = this.nodeTypesByVersion.get(name);
60
+ if (!existingVersions)
61
+ return true;
62
+ return !existingVersions.has(version);
63
+ });
64
+ }
43
65
  }
44
66
  exports.TaskRunnerNodeTypes = TaskRunnerNodeTypes;
45
67
  //# sourceMappingURL=node-types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"node-types.js","sourceRoot":"","sources":["../src/node-types.ts"],"names":[],"mappings":";;;AAAA,+CAOsB;AAIT,QAAA,wBAAwB,GAAG,CAAC,CAAC;AAE1C,MAAa,mBAAmB;IAG/B,YAAY,SAAiC;QAC5C,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IAC1D,CAAC;IAEO,cAAc,CAAC,SAAiC;QACvD,MAAM,cAAc,GAAG,IAAI,GAAG,EAA0B,CAAC;QAEzD,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC;gBACzC,CAAC,CAAC,EAAE,CAAC,OAAO;gBACZ,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,IAAI,gCAAwB,CAAC,CAAC;YAE5C,MAAM,SAAS,GACd,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,EAAgC,CAAC;YACxE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAChC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;YAC9D,CAAC;YAED,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACxC,CAAC;QAED,OAAO,cAAc,CAAC;IACvB,CAAC;IAGD,SAAS,CAAC,SAAiB;QAC1B,MAAM,IAAI,+BAAgB,CAAC,2BAA2B,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,mBAAmB,CAAC,QAAgB,EAAE,OAAgB;QACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACvD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACf,OAAO,SAAiC,CAAC;QAC1C,CAAC;QACD,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC1E,IAAI,CAAC,WAAW,EAAE,CAAC;YAClB,OAAO,SAAiC,CAAC;QAC1C,CAAC;QACD,OAAO;YACN,WAAW,EAAE,WAAW;SACxB,CAAC;IACH,CAAC;IAGD,aAAa;QACZ,MAAM,IAAI,+BAAgB,CAAC,+BAA+B,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IACjF,CAAC;CACD;AAlDD,kDAkDC"}
1
+ {"version":3,"file":"node-types.js","sourceRoot":"","sources":["../src/node-types.ts"],"names":[],"mappings":"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"}