n8n-core 1.111.0 → 1.112.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/build.tsbuildinfo +1 -1
- package/dist/execution-engine/index.d.ts +1 -0
- package/dist/execution-engine/index.js +3 -1
- package/dist/execution-engine/index.js.map +1 -1
- package/dist/execution-engine/node-execution-context/execute-context.d.ts +3 -2
- package/dist/execution-engine/node-execution-context/execute-context.js +2 -1
- package/dist/execution-engine/node-execution-context/execute-context.js.map +1 -1
- package/dist/execution-engine/node-execution-context/utils/get-input-connection-data.js +43 -10
- package/dist/execution-engine/node-execution-context/utils/get-input-connection-data.js.map +1 -1
- package/dist/execution-engine/requests-response.d.ts +23 -0
- package/dist/execution-engine/requests-response.js +111 -0
- package/dist/execution-engine/requests-response.js.map +1 -0
- package/dist/execution-engine/workflow-execute.d.ts +4 -3
- package/dist/execution-engine/workflow-execute.js +88 -26
- package/dist/execution-engine/workflow-execute.js.map +1 -1
- package/package.json +9 -9
|
@@ -20,3 +20,4 @@ export * from './node-execution-context/utils/execution-metadata';
|
|
|
20
20
|
export * from './workflow-execute';
|
|
21
21
|
export { ExecutionLifecycleHooks } from './execution-lifecycle-hooks';
|
|
22
22
|
export { ExternalSecretsProxy, type IExternalSecretsManager } from './external-secrets-proxy';
|
|
23
|
+
export { isEngineRequest } from './requests-response';
|
|
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.ExternalSecretsProxy = exports.ExecutionLifecycleHooks = void 0;
|
|
17
|
+
exports.isEngineRequest = exports.ExternalSecretsProxy = exports.ExecutionLifecycleHooks = void 0;
|
|
18
18
|
__exportStar(require("./active-workflows"), exports);
|
|
19
19
|
__exportStar(require("./routing-node"), exports);
|
|
20
20
|
__exportStar(require("./node-execution-context"), exports);
|
|
@@ -25,4 +25,6 @@ var execution_lifecycle_hooks_1 = require("./execution-lifecycle-hooks");
|
|
|
25
25
|
Object.defineProperty(exports, "ExecutionLifecycleHooks", { enumerable: true, get: function () { return execution_lifecycle_hooks_1.ExecutionLifecycleHooks; } });
|
|
26
26
|
var external_secrets_proxy_1 = require("./external-secrets-proxy");
|
|
27
27
|
Object.defineProperty(exports, "ExternalSecretsProxy", { enumerable: true, get: function () { return external_secrets_proxy_1.ExternalSecretsProxy; } });
|
|
28
|
+
var requests_response_1 = require("./requests-response");
|
|
29
|
+
Object.defineProperty(exports, "isEngineRequest", { enumerable: true, get: function () { return requests_response_1.isEngineRequest; } });
|
|
28
30
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/execution-engine/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAiBA,qDAAmC;AAEnC,iDAA+B;AAC/B,2DAAyC;AACzC,4DAA0C;AAC1C,oFAAkE;AAClE,qDAAmC;AACnC,yEAAsE;AAA7D,oIAAA,uBAAuB,OAAA;AAChC,mEAA8F;AAArF,8HAAA,oBAAoB,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/execution-engine/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAiBA,qDAAmC;AAEnC,iDAA+B;AAC/B,2DAAyC;AACzC,4DAA0C;AAC1C,oFAAkE;AAClE,qDAAmC;AACnC,yEAAsE;AAA7D,oIAAA,uBAAuB,OAAA;AAChC,mEAA8F;AAArF,8HAAA,oBAAoB,OAAA;AAC7B,yDAAsD;AAA7C,oHAAA,eAAe,OAAA"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import type { AINodeConnectionType, CallbackManager, ChunkType, CloseFunction, IDataObject, IExecuteData, IExecuteFunctions, IExecuteResponsePromiseData, INode, INodeExecutionData, IRunExecutionData, ITaskDataConnections, IWorkflowExecuteAdditionalData, NodeExecutionHint, Workflow, WorkflowExecuteMode } from 'n8n-workflow';
|
|
1
|
+
import type { AINodeConnectionType, CallbackManager, ChunkType, CloseFunction, IDataObject, IExecuteData, IExecuteFunctions, IExecuteResponsePromiseData, INode, INodeExecutionData, IRunExecutionData, ITaskDataConnections, IWorkflowExecuteAdditionalData, NodeExecutionHint, Workflow, WorkflowExecuteMode, EngineResponse } from 'n8n-workflow';
|
|
2
2
|
import { BaseExecuteContext } from './base-execute-context';
|
|
3
3
|
export declare class ExecuteContext extends BaseExecuteContext implements IExecuteFunctions {
|
|
4
4
|
private readonly closeFunctions;
|
|
5
|
+
subNodeExecutionResults?: EngineResponse | undefined;
|
|
5
6
|
readonly helpers: IExecuteFunctions['helpers'];
|
|
6
7
|
readonly nodeHelpers: IExecuteFunctions['nodeHelpers'];
|
|
7
8
|
readonly getNodeParameter: IExecuteFunctions['getNodeParameter'];
|
|
8
9
|
readonly hints: NodeExecutionHint[];
|
|
9
|
-
constructor(workflow: Workflow, node: INode, additionalData: IWorkflowExecuteAdditionalData, mode: WorkflowExecuteMode, runExecutionData: IRunExecutionData, runIndex: number, connectionInputData: INodeExecutionData[], inputData: ITaskDataConnections, executeData: IExecuteData, closeFunctions: CloseFunction[], abortSignal?: AbortSignal);
|
|
10
|
+
constructor(workflow: Workflow, node: INode, additionalData: IWorkflowExecuteAdditionalData, mode: WorkflowExecuteMode, runExecutionData: IRunExecutionData, runIndex: number, connectionInputData: INodeExecutionData[], inputData: ITaskDataConnections, executeData: IExecuteData, closeFunctions: CloseFunction[], abortSignal?: AbortSignal, subNodeExecutionResults?: EngineResponse | undefined);
|
|
10
11
|
isStreaming(): boolean;
|
|
11
12
|
sendChunk(type: ChunkType, itemIndex: number, content?: IDataObject | string): Promise<void>;
|
|
12
13
|
getInputConnectionData(connectionType: AINodeConnectionType, itemIndex: number): Promise<unknown>;
|
|
@@ -15,9 +15,10 @@ const request_helper_functions_1 = require("./utils/request-helper-functions");
|
|
|
15
15
|
const return_json_array_1 = require("./utils/return-json-array");
|
|
16
16
|
const ssh_tunnel_helper_functions_1 = require("./utils/ssh-tunnel-helper-functions");
|
|
17
17
|
class ExecuteContext extends base_execute_context_1.BaseExecuteContext {
|
|
18
|
-
constructor(workflow, node, additionalData, mode, runExecutionData, runIndex, connectionInputData, inputData, executeData, closeFunctions, abortSignal) {
|
|
18
|
+
constructor(workflow, node, additionalData, mode, runExecutionData, runIndex, connectionInputData, inputData, executeData, closeFunctions, abortSignal, subNodeExecutionResults) {
|
|
19
19
|
super(workflow, node, additionalData, mode, runExecutionData, runIndex, connectionInputData, inputData, executeData, abortSignal);
|
|
20
20
|
this.closeFunctions = closeFunctions;
|
|
21
|
+
this.subNodeExecutionResults = subNodeExecutionResults;
|
|
21
22
|
this.hints = [];
|
|
22
23
|
this.helpers = {
|
|
23
24
|
createDeferredPromise: n8n_workflow_1.createDeferredPromise,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute-context.js","sourceRoot":"","sources":["../../../src/execution-engine/node-execution-context/execute-context.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"execute-context.js","sourceRoot":"","sources":["../../../src/execution-engine/node-execution-context/execute-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,9 +5,49 @@ exports.getInputConnectionData = getInputConnectionData;
|
|
|
5
5
|
const n8n_workflow_1 = require("n8n-workflow");
|
|
6
6
|
const create_node_as_tool_1 = require("./create-node-as-tool");
|
|
7
7
|
const supply_data_context_1 = require("../../node-execution-context/supply-data-context");
|
|
8
|
+
const requests_response_1 = require("../../requests-response");
|
|
8
9
|
function getNextRunIndex(runExecutionData, nodeName) {
|
|
9
10
|
return runExecutionData.resultData.runData[nodeName]?.length ?? 0;
|
|
10
11
|
}
|
|
12
|
+
function containsBinaryData(nodeExecutionResult) {
|
|
13
|
+
if ((0, requests_response_1.isEngineRequest)(nodeExecutionResult)) {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
if (nodeExecutionResult === undefined || nodeExecutionResult === null) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
return nodeExecutionResult.some((outputBranch) => outputBranch.some((item) => item.binary));
|
|
20
|
+
}
|
|
21
|
+
function containsDataThatIsUsefulToTheAgent(nodeExecutionResult) {
|
|
22
|
+
if ((0, requests_response_1.isEngineRequest)(nodeExecutionResult)) {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
if (nodeExecutionResult === undefined || nodeExecutionResult === null) {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
return nodeExecutionResult.some((outputBranch) => outputBranch.some((item) => Object.keys(item.json).length > 0));
|
|
29
|
+
}
|
|
30
|
+
function mapResult(result) {
|
|
31
|
+
let response;
|
|
32
|
+
let nodeHasMixedJsonAndBinaryData = false;
|
|
33
|
+
if (result === undefined) {
|
|
34
|
+
response = undefined;
|
|
35
|
+
}
|
|
36
|
+
else if ((0, requests_response_1.isEngineRequest)(result)) {
|
|
37
|
+
response =
|
|
38
|
+
'Error: The Tool attempted to return an engine request, which is not supported in Agents';
|
|
39
|
+
}
|
|
40
|
+
else if (containsBinaryData(result) && !containsDataThatIsUsefulToTheAgent(result)) {
|
|
41
|
+
response = 'Error: The Tool attempted to return binary data, which is not supported in Agents';
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
if (containsBinaryData(result)) {
|
|
45
|
+
nodeHasMixedJsonAndBinaryData = true;
|
|
46
|
+
}
|
|
47
|
+
response = result?.[0]?.flatMap((item) => item.json);
|
|
48
|
+
}
|
|
49
|
+
return { response, nodeHasMixedJsonAndBinaryData };
|
|
50
|
+
}
|
|
11
51
|
function makeHandleToolInvocation(contextFactory, node, nodeType, runExecutionData) {
|
|
12
52
|
let runIndex = getNextRunIndex(runExecutionData, node.name);
|
|
13
53
|
return async (toolArgs) => {
|
|
@@ -41,16 +81,9 @@ function makeHandleToolInvocation(contextFactory, node, nodeType, runExecutionDa
|
|
|
41
81
|
context.addInputData(n8n_workflow_1.NodeConnectionTypes.AiTool, [[{ json: toolArgs }]]);
|
|
42
82
|
try {
|
|
43
83
|
const result = await nodeType.execute?.call(context);
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
if (!mappedResults || mappedResults.flatMap((x) => Object.keys(x ?? {})).length === 0) {
|
|
48
|
-
response =
|
|
49
|
-
'Error: The Tool attempted to return binary data, which is not supported in Agents';
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
-
context.logger.warn(`Response from Tool '${node.name}' included binary data, which is not supported in Agents. The binary data was omitted from the response.`);
|
|
53
|
-
}
|
|
84
|
+
const { response, nodeHasMixedJsonAndBinaryData } = mapResult(result);
|
|
85
|
+
if (nodeHasMixedJsonAndBinaryData) {
|
|
86
|
+
context.logger.warn(`Response from Tool '${node.name}' included binary data, which is not supported in Agents. The binary data was omitted from the response.`);
|
|
54
87
|
}
|
|
55
88
|
context.addOutputData(n8n_workflow_1.NodeConnectionTypes.AiTool, localRunIndex, [
|
|
56
89
|
[{ json: { response } }],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-input-connection-data.js","sourceRoot":"","sources":["../../../../src/execution-engine/node-execution-context/utils/get-input-connection-data.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"get-input-connection-data.js","sourceRoot":"","sources":["../../../../src/execution-engine/node-execution-context/utils/get-input-connection-data.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type IConnection, type IExecuteData, type INode, type INodeExecutionData, type IRunData, type IRunNodeResponse, type ITaskMetadata, type EngineRequest, type Workflow, type EngineResponse } from 'n8n-workflow';
|
|
2
|
+
type NodeToBeExecuted = {
|
|
3
|
+
inputConnectionData: IConnection;
|
|
4
|
+
parentOutputIndex: number;
|
|
5
|
+
parentNode: string;
|
|
6
|
+
parentOutputData: INodeExecutionData[][];
|
|
7
|
+
runIndex: number;
|
|
8
|
+
nodeRunIndex: number;
|
|
9
|
+
metadata?: ITaskMetadata;
|
|
10
|
+
};
|
|
11
|
+
export declare function handleRequest({ workflow, currentNode, request, runIndex, executionData, runData, }: {
|
|
12
|
+
workflow: Workflow;
|
|
13
|
+
currentNode: INode;
|
|
14
|
+
request: EngineRequest;
|
|
15
|
+
runIndex: number;
|
|
16
|
+
executionData: IExecuteData;
|
|
17
|
+
runData: IRunData;
|
|
18
|
+
}): {
|
|
19
|
+
nodesToBeExecuted: NodeToBeExecuted[];
|
|
20
|
+
};
|
|
21
|
+
export declare function isEngineRequest(responseOrRequest: INodeExecutionData[][] | IRunNodeResponse | EngineRequest | null | undefined): responseOrRequest is EngineRequest;
|
|
22
|
+
export declare function makeEngineResponse(): EngineResponse;
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.handleRequest = handleRequest;
|
|
4
|
+
exports.isEngineRequest = isEngineRequest;
|
|
5
|
+
exports.makeEngineResponse = makeEngineResponse;
|
|
6
|
+
const di_1 = require("@n8n/di");
|
|
7
|
+
const n8n_workflow_1 = require("n8n-workflow");
|
|
8
|
+
const error_reporter_1 = require("../errors/error-reporter");
|
|
9
|
+
function prepareRequestedNodesForExecution(workflow, currentNode, request, runIndex, runData) {
|
|
10
|
+
const nodesToBeExecuted = [];
|
|
11
|
+
const subNodeExecutionData = {
|
|
12
|
+
actions: [],
|
|
13
|
+
metadata: request.metadata,
|
|
14
|
+
};
|
|
15
|
+
for (const action of request.actions) {
|
|
16
|
+
const node = workflow.getNode(action.nodeName);
|
|
17
|
+
if (!node) {
|
|
18
|
+
throw new n8n_workflow_1.UnexpectedError(`Workflow does not contain a node with the name of "${action.nodeName}".`);
|
|
19
|
+
}
|
|
20
|
+
node.rewireOutputLogTo = action.type;
|
|
21
|
+
const inputConnectionData = {
|
|
22
|
+
type: action.type,
|
|
23
|
+
node: action.nodeName,
|
|
24
|
+
index: 0,
|
|
25
|
+
};
|
|
26
|
+
const parentNode = currentNode.name;
|
|
27
|
+
const parentOutputData = [
|
|
28
|
+
[
|
|
29
|
+
{
|
|
30
|
+
json: {
|
|
31
|
+
...action.input,
|
|
32
|
+
toolCallId: action.id,
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
],
|
|
36
|
+
];
|
|
37
|
+
const parentOutputIndex = 0;
|
|
38
|
+
runData[node.name] ||= [];
|
|
39
|
+
const nodeRunData = runData[node.name];
|
|
40
|
+
const nodeRunIndex = nodeRunData.length;
|
|
41
|
+
nodeRunData.push({
|
|
42
|
+
inputOverride: { ai_tool: parentOutputData },
|
|
43
|
+
source: [],
|
|
44
|
+
executionIndex: 0,
|
|
45
|
+
executionTime: 0,
|
|
46
|
+
startTime: 0,
|
|
47
|
+
});
|
|
48
|
+
nodesToBeExecuted.push({
|
|
49
|
+
inputConnectionData,
|
|
50
|
+
parentOutputIndex,
|
|
51
|
+
parentNode,
|
|
52
|
+
parentOutputData,
|
|
53
|
+
runIndex,
|
|
54
|
+
nodeRunIndex,
|
|
55
|
+
});
|
|
56
|
+
subNodeExecutionData.actions.push({
|
|
57
|
+
action,
|
|
58
|
+
nodeName: action.nodeName,
|
|
59
|
+
runIndex: nodeRunIndex,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
return { nodesToBeExecuted, subNodeExecutionData };
|
|
63
|
+
}
|
|
64
|
+
function prepareRequestingNodeForResuming(workflow, request, executionData) {
|
|
65
|
+
const parentNode = executionData.source?.main?.[0]?.previousNode;
|
|
66
|
+
if (!parentNode) {
|
|
67
|
+
di_1.Container.get(error_reporter_1.ErrorReporter).error(new n8n_workflow_1.UnexpectedError('Cannot find parent node for subnode execution - request will be ignored'), {
|
|
68
|
+
extra: {
|
|
69
|
+
executionNode: executionData.node.name,
|
|
70
|
+
sourceData: executionData.source,
|
|
71
|
+
workflowId: workflow.id,
|
|
72
|
+
requestActions: request.actions.map((a) => ({
|
|
73
|
+
nodeName: a.nodeName,
|
|
74
|
+
actionType: a.actionType,
|
|
75
|
+
id: a.id,
|
|
76
|
+
})),
|
|
77
|
+
},
|
|
78
|
+
});
|
|
79
|
+
return undefined;
|
|
80
|
+
}
|
|
81
|
+
const connectionData = {
|
|
82
|
+
type: 'ai_tool',
|
|
83
|
+
node: executionData.node.name,
|
|
84
|
+
index: 0,
|
|
85
|
+
};
|
|
86
|
+
return { connectionData, parentNode };
|
|
87
|
+
}
|
|
88
|
+
function handleRequest({ workflow, currentNode, request, runIndex, executionData, runData, }) {
|
|
89
|
+
const { nodesToBeExecuted, subNodeExecutionData } = prepareRequestedNodesForExecution(workflow, currentNode, request, runIndex, runData);
|
|
90
|
+
const result = prepareRequestingNodeForResuming(workflow, request, executionData);
|
|
91
|
+
if (!result) {
|
|
92
|
+
return { nodesToBeExecuted: [] };
|
|
93
|
+
}
|
|
94
|
+
nodesToBeExecuted.unshift({
|
|
95
|
+
inputConnectionData: result.connectionData,
|
|
96
|
+
parentOutputIndex: 0,
|
|
97
|
+
parentNode: result.parentNode,
|
|
98
|
+
parentOutputData: executionData.data.main,
|
|
99
|
+
runIndex,
|
|
100
|
+
nodeRunIndex: runIndex,
|
|
101
|
+
metadata: { subNodeExecutionData },
|
|
102
|
+
});
|
|
103
|
+
return { nodesToBeExecuted };
|
|
104
|
+
}
|
|
105
|
+
function isEngineRequest(responseOrRequest) {
|
|
106
|
+
return !!responseOrRequest && 'actions' in responseOrRequest;
|
|
107
|
+
}
|
|
108
|
+
function makeEngineResponse() {
|
|
109
|
+
return { actionResponses: [], metadata: {} };
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=requests-response.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requests-response.js","sourceRoot":"","sources":["../../src/execution-engine/requests-response.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ExecutionBaseError, IConnection, IExecuteData, INode, INodeExecutionData, IPinData, IRun, IRunData, Workflow, IRunExecutionData, IWorkflowExecuteAdditionalData, WorkflowExecuteMode, StartNodeData, IRunNodeResponse, IWorkflowIssues, AiAgentRequest, IWorkflowExecutionDataProcess } from 'n8n-workflow';
|
|
1
|
+
import type { ExecutionBaseError, IConnection, IExecuteData, INode, INodeExecutionData, IPinData, IRun, IRunData, ITaskMetadata, Workflow, IRunExecutionData, IWorkflowExecuteAdditionalData, WorkflowExecuteMode, StartNodeData, IRunNodeResponse, IWorkflowIssues, AiAgentRequest, IWorkflowExecutionDataProcess, EngineRequest, EngineResponse } from 'n8n-workflow';
|
|
2
2
|
import PCancelable from 'p-cancelable';
|
|
3
3
|
export declare class WorkflowExecute {
|
|
4
4
|
private readonly additionalData;
|
|
@@ -14,7 +14,7 @@ export declare class WorkflowExecute {
|
|
|
14
14
|
moveNodeMetadata(): void;
|
|
15
15
|
incomingConnectionIsEmpty(runData: IRunData, inputConnections: IConnection[], runIndex: number): boolean;
|
|
16
16
|
prepareWaitingToExecution(nodeName: string, numberOfConnections: number, runIndex: number): void;
|
|
17
|
-
addNodeToBeExecuted(workflow: Workflow, connectionData: IConnection, outputIndex: number, parentNodeName: string, nodeSuccessData: INodeExecutionData[][], runIndex: number): void;
|
|
17
|
+
addNodeToBeExecuted(workflow: Workflow, connectionData: IConnection, outputIndex: number, parentNodeName: string, nodeSuccessData: INodeExecutionData[][], runIndex: number, newRunIndex?: number, metadata?: ITaskMetadata): void;
|
|
18
18
|
checkReadyForExecution(workflow: Workflow, inputData?: {
|
|
19
19
|
startNode?: string;
|
|
20
20
|
destinationNode?: string;
|
|
@@ -30,11 +30,12 @@ export declare class WorkflowExecute {
|
|
|
30
30
|
private executePollNode;
|
|
31
31
|
private executeTriggerNode;
|
|
32
32
|
private executeDeclarativeNodeInTest;
|
|
33
|
-
runNode(workflow: Workflow, executionData: IExecuteData, runExecutionData: IRunExecutionData, runIndex: number, additionalData: IWorkflowExecuteAdditionalData, mode: WorkflowExecuteMode, abortSignal?: AbortSignal): Promise<IRunNodeResponse>;
|
|
33
|
+
runNode(workflow: Workflow, executionData: IExecuteData, runExecutionData: IRunExecutionData, runIndex: number, additionalData: IWorkflowExecuteAdditionalData, mode: WorkflowExecuteMode, abortSignal?: AbortSignal, subNodeExecutionResults?: EngineResponse): Promise<IRunNodeResponse | EngineRequest>;
|
|
34
34
|
private assertExecutionDataExists;
|
|
35
35
|
private handleWaitingState;
|
|
36
36
|
private checkForWorkflowIssues;
|
|
37
37
|
private setupExecution;
|
|
38
|
+
private handleEngineRequest;
|
|
38
39
|
processRunExecutionData(workflow: Workflow): PCancelable<IRun>;
|
|
39
40
|
ensureInputData(workflow: Workflow, executionNode: INode, executionData: IExecuteData): boolean;
|
|
40
41
|
processSuccessExecution(startedAt: Date, workflow: Workflow, executionError?: ExecutionBaseError, closeFunction?: Promise<void>): Promise<IRun>;
|
|
@@ -51,6 +51,7 @@ const NodeExecuteFunctions = __importStar(require("../node-execute-functions"));
|
|
|
51
51
|
const is_json_compatible_1 = require("../utils/is-json-compatible");
|
|
52
52
|
const node_execution_context_1 = require("./node-execution-context");
|
|
53
53
|
const partial_execution_utils_1 = require("./partial-execution-utils");
|
|
54
|
+
const requests_response_1 = require("./requests-response");
|
|
54
55
|
const routing_node_1 = require("./routing-node");
|
|
55
56
|
const triggers_and_pollers_1 = require("./triggers-and-pollers");
|
|
56
57
|
class WorkflowExecute {
|
|
@@ -380,11 +381,12 @@ class WorkflowExecute {
|
|
|
380
381
|
nodeWaitingSource[runIndex].main.push(null);
|
|
381
382
|
}
|
|
382
383
|
}
|
|
383
|
-
addNodeToBeExecuted(workflow, connectionData, outputIndex, parentNodeName, nodeSuccessData, runIndex) {
|
|
384
|
+
addNodeToBeExecuted(workflow, connectionData, outputIndex, parentNodeName, nodeSuccessData, runIndex, newRunIndex, metadata) {
|
|
384
385
|
let stillDataMissing = false;
|
|
385
386
|
const enqueueFn = workflow.settings.executionOrder === 'v1' ? 'unshift' : 'push';
|
|
386
387
|
let waitingNodeIndex;
|
|
387
|
-
|
|
388
|
+
const numberOfInputs = workflow.connectionsByDestinationNode[connectionData.node]?.main?.length ?? 0;
|
|
389
|
+
if (numberOfInputs > 1) {
|
|
388
390
|
let nodeWasWaiting = true;
|
|
389
391
|
if (!this.runExecutionData.executionData.waitingExecutionSource) {
|
|
390
392
|
this.runExecutionData.executionData.waitingExecutionSource = {};
|
|
@@ -591,6 +593,8 @@ class WorkflowExecute {
|
|
|
591
593
|
},
|
|
592
594
|
],
|
|
593
595
|
},
|
|
596
|
+
runIndex: newRunIndex,
|
|
597
|
+
metadata,
|
|
594
598
|
});
|
|
595
599
|
}
|
|
596
600
|
}
|
|
@@ -720,18 +724,24 @@ class WorkflowExecute {
|
|
|
720
724
|
}
|
|
721
725
|
}
|
|
722
726
|
}
|
|
723
|
-
async executeNode(workflow, node, nodeType, customOperation, additionalData, mode, runExecutionData, runIndex, connectionInputData, inputData, executionData, abortSignal) {
|
|
727
|
+
async executeNode(workflow, node, nodeType, customOperation, additionalData, mode, runExecutionData, runIndex, connectionInputData, inputData, executionData, abortSignal, subNodeExecutionResults) {
|
|
724
728
|
const closeFunctions = [];
|
|
725
|
-
const context = new node_execution_context_1.ExecuteContext(workflow, node, additionalData, mode, runExecutionData, runIndex, connectionInputData, inputData, executionData, closeFunctions, abortSignal);
|
|
726
|
-
let data
|
|
729
|
+
const context = new node_execution_context_1.ExecuteContext(workflow, node, additionalData, mode, runExecutionData, runIndex, connectionInputData, inputData, executionData, closeFunctions, abortSignal, subNodeExecutionResults);
|
|
730
|
+
let data;
|
|
727
731
|
if (customOperation) {
|
|
728
732
|
data = await customOperation.call(context);
|
|
729
733
|
}
|
|
730
734
|
else if (nodeType.execute) {
|
|
731
735
|
data =
|
|
732
736
|
nodeType instanceof n8n_workflow_1.Node
|
|
733
|
-
? await nodeType.execute(context)
|
|
734
|
-
: await nodeType.execute.call(context);
|
|
737
|
+
? await nodeType.execute(context, subNodeExecutionResults)
|
|
738
|
+
: await nodeType.execute.call(context, subNodeExecutionResults);
|
|
739
|
+
}
|
|
740
|
+
else {
|
|
741
|
+
throw new n8n_workflow_1.UnexpectedError("Can't execute node. There is no custom operation and the node has not execute function.");
|
|
742
|
+
}
|
|
743
|
+
if ((0, requests_response_1.isEngineRequest)(data)) {
|
|
744
|
+
return data;
|
|
735
745
|
}
|
|
736
746
|
this.reportJsonIncompatibleOutput(data, workflow, node);
|
|
737
747
|
const closeFunctionsResults = await Promise.allSettled(closeFunctions.map(async (fn) => await fn()));
|
|
@@ -784,7 +794,7 @@ class WorkflowExecute {
|
|
|
784
794
|
const data = await routingNode.runNode();
|
|
785
795
|
return { data };
|
|
786
796
|
}
|
|
787
|
-
async runNode(workflow, executionData, runExecutionData, runIndex, additionalData, mode, abortSignal) {
|
|
797
|
+
async runNode(workflow, executionData, runExecutionData, runIndex, additionalData, mode, abortSignal, subNodeExecutionResults) {
|
|
788
798
|
const { node } = executionData;
|
|
789
799
|
let inputData = executionData.data;
|
|
790
800
|
if (node.disabled === true) {
|
|
@@ -798,9 +808,8 @@ class WorkflowExecute {
|
|
|
798
808
|
}
|
|
799
809
|
this.rethrowLastNodeError(runExecutionData, node);
|
|
800
810
|
inputData = this.handleExecuteOnce(node, inputData);
|
|
801
|
-
const isDeclarativeNode = nodeType.description.requestDefaults !== undefined;
|
|
802
811
|
if (nodeType.execute || customOperation) {
|
|
803
|
-
return await this.executeNode(workflow, node, nodeType, customOperation, additionalData, mode, runExecutionData, runIndex, connectionInputData, inputData, executionData, abortSignal);
|
|
812
|
+
return await this.executeNode(workflow, node, nodeType, customOperation, additionalData, mode, runExecutionData, runIndex, connectionInputData, inputData, executionData, abortSignal, subNodeExecutionResults);
|
|
804
813
|
}
|
|
805
814
|
if (nodeType.poll) {
|
|
806
815
|
return await this.executePollNode(workflow, node, nodeType, additionalData, mode, inputData);
|
|
@@ -808,6 +817,7 @@ class WorkflowExecute {
|
|
|
808
817
|
if (nodeType.trigger) {
|
|
809
818
|
return await this.executeTriggerNode(workflow, node, additionalData, mode, inputData, abortSignal);
|
|
810
819
|
}
|
|
820
|
+
const isDeclarativeNode = nodeType.description.requestDefaults !== undefined;
|
|
811
821
|
if (nodeType.webhook && !isDeclarativeNode) {
|
|
812
822
|
return { data: inputData.main };
|
|
813
823
|
}
|
|
@@ -859,12 +869,26 @@ class WorkflowExecute {
|
|
|
859
869
|
}
|
|
860
870
|
return { startedAt: new Date(), hooks };
|
|
861
871
|
}
|
|
872
|
+
handleEngineRequest({ workflow, currentNode, request, runIndex, executionData, runData, }) {
|
|
873
|
+
const { nodesToBeExecuted } = (0, requests_response_1.handleRequest)({
|
|
874
|
+
workflow,
|
|
875
|
+
currentNode,
|
|
876
|
+
request,
|
|
877
|
+
runIndex,
|
|
878
|
+
executionData,
|
|
879
|
+
runData,
|
|
880
|
+
});
|
|
881
|
+
for (const nodeData of nodesToBeExecuted) {
|
|
882
|
+
this.addNodeToBeExecuted(workflow, nodeData.inputConnectionData, nodeData.parentOutputIndex, nodeData.parentNode, nodeData.parentOutputData, nodeData.runIndex, nodeData.nodeRunIndex, nodeData.metadata);
|
|
883
|
+
}
|
|
884
|
+
}
|
|
862
885
|
processRunExecutionData(workflow) {
|
|
863
886
|
n8n_workflow_1.LoggerProxy.debug('Workflow execution started', { workflowId: workflow.id });
|
|
864
887
|
const { startedAt, hooks } = this.setupExecution();
|
|
865
888
|
this.checkForWorkflowIssues(workflow);
|
|
866
889
|
this.handleWaitingState(workflow);
|
|
867
890
|
let executionData;
|
|
891
|
+
let subNodeExecutionResults = (0, requests_response_1.makeEngineResponse)();
|
|
868
892
|
let executionError;
|
|
869
893
|
let executionNode;
|
|
870
894
|
let runIndex;
|
|
@@ -923,6 +947,7 @@ class WorkflowExecute {
|
|
|
923
947
|
if (this.status === 'canceled') {
|
|
924
948
|
return;
|
|
925
949
|
}
|
|
950
|
+
subNodeExecutionResults = (0, requests_response_1.makeEngineResponse)();
|
|
926
951
|
let nodeSuccessData = null;
|
|
927
952
|
executionError = undefined;
|
|
928
953
|
executionData =
|
|
@@ -953,7 +978,10 @@ class WorkflowExecute {
|
|
|
953
978
|
}
|
|
954
979
|
executionData.data = newTaskDataConnections;
|
|
955
980
|
runIndex = 0;
|
|
956
|
-
if (
|
|
981
|
+
if (executionData.runIndex !== undefined) {
|
|
982
|
+
runIndex = executionData.runIndex;
|
|
983
|
+
}
|
|
984
|
+
else if (Object.hasOwn(this.runExecutionData.resultData.runData, executionNode.name)) {
|
|
957
985
|
runIndex = this.runExecutionData.resultData.runData[executionNode.name].length;
|
|
958
986
|
}
|
|
959
987
|
currentExecutionTry = `${executionNode.name}:${runIndex}`;
|
|
@@ -1000,22 +1028,49 @@ class WorkflowExecute {
|
|
|
1000
1028
|
nodeSuccessData = [nodePinData];
|
|
1001
1029
|
}
|
|
1002
1030
|
else {
|
|
1031
|
+
if (executionData.metadata?.subNodeExecutionData) {
|
|
1032
|
+
subNodeExecutionResults.metadata =
|
|
1033
|
+
executionData.metadata.subNodeExecutionData.metadata;
|
|
1034
|
+
for (const subNode of executionData.metadata.subNodeExecutionData.actions) {
|
|
1035
|
+
const nodeRunData = this.runExecutionData.resultData.runData[subNode.nodeName];
|
|
1036
|
+
if (nodeRunData && nodeRunData[subNode.runIndex]) {
|
|
1037
|
+
const data = nodeRunData[subNode.runIndex];
|
|
1038
|
+
subNodeExecutionResults.actionResponses.push({
|
|
1039
|
+
data,
|
|
1040
|
+
action: subNode.action,
|
|
1041
|
+
});
|
|
1042
|
+
}
|
|
1043
|
+
}
|
|
1044
|
+
}
|
|
1003
1045
|
n8n_workflow_1.LoggerProxy.debug(`Running node "${executionNode.name}" started`, {
|
|
1004
1046
|
node: executionNode.name,
|
|
1005
1047
|
workflowId: workflow.id,
|
|
1006
1048
|
});
|
|
1007
|
-
let runNodeData = await this.runNode(workflow, executionData, this.runExecutionData, runIndex, this.additionalData, this.mode, this.abortController.signal);
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
while (
|
|
1049
|
+
let runNodeData = await this.runNode(workflow, executionData, this.runExecutionData, runIndex, this.additionalData, this.mode, this.abortController.signal, subNodeExecutionResults);
|
|
1050
|
+
let nodeFailed = !(0, requests_response_1.isEngineRequest)(runNodeData) &&
|
|
1051
|
+
runNodeData.data?.[0]?.[0]?.json?.error !== undefined;
|
|
1052
|
+
while (nodeFailed && tryIndex !== maxTries - 1) {
|
|
1011
1053
|
await (0, n8n_workflow_1.sleep)(waitBetweenTries);
|
|
1012
1054
|
runNodeData = await this.runNode(workflow, executionData, this.runExecutionData, runIndex, this.additionalData, this.mode, this.abortController.signal);
|
|
1013
|
-
|
|
1014
|
-
|
|
1055
|
+
nodeFailed =
|
|
1056
|
+
!(0, requests_response_1.isEngineRequest)(runNodeData) &&
|
|
1057
|
+
runNodeData.data?.[0]?.[0]?.json?.error !== undefined;
|
|
1015
1058
|
tryIndex++;
|
|
1016
1059
|
}
|
|
1060
|
+
if ((0, requests_response_1.isEngineRequest)(runNodeData)) {
|
|
1061
|
+
this.handleEngineRequest({
|
|
1062
|
+
workflow,
|
|
1063
|
+
currentNode: executionNode,
|
|
1064
|
+
request: runNodeData,
|
|
1065
|
+
runIndex,
|
|
1066
|
+
executionData,
|
|
1067
|
+
runData: this.runExecutionData.resultData.runData,
|
|
1068
|
+
});
|
|
1069
|
+
continue executionLoop;
|
|
1070
|
+
}
|
|
1071
|
+
nodeSuccessData = runNodeData.data;
|
|
1017
1072
|
if (runNodeData.hints?.length) {
|
|
1018
|
-
taskStartedData.hints.push(
|
|
1073
|
+
taskStartedData.hints.push.apply(taskStartedData.hints, runNodeData.hints);
|
|
1019
1074
|
}
|
|
1020
1075
|
if (nodeSuccessData && executionData.node.onError === 'continueErrorOutput') {
|
|
1021
1076
|
this.handleNodeErrorOutput(workflow, executionData, nodeSuccessData, runIndex);
|
|
@@ -1029,6 +1084,9 @@ class WorkflowExecute {
|
|
|
1029
1084
|
workflowId: workflow.id,
|
|
1030
1085
|
});
|
|
1031
1086
|
nodeSuccessData = this.assignPairedItems(nodeSuccessData, executionData);
|
|
1087
|
+
if (nodeSuccessData) {
|
|
1088
|
+
this.runExecutionData.resultData.lastNodeExecuted = executionData.node.name;
|
|
1089
|
+
}
|
|
1032
1090
|
if (!nodeSuccessData?.[0]?.[0]) {
|
|
1033
1091
|
if (executionData.node.alwaysOutputData === true) {
|
|
1034
1092
|
const pairedItem = [];
|
|
@@ -1149,11 +1207,21 @@ class WorkflowExecute {
|
|
|
1149
1207
|
main: nodeSuccessData,
|
|
1150
1208
|
};
|
|
1151
1209
|
if (executionNode.rewireOutputLogTo) {
|
|
1210
|
+
taskData.inputOverride =
|
|
1211
|
+
this.runExecutionData.resultData.runData[executionNode.name][runIndex]
|
|
1212
|
+
?.inputOverride || {};
|
|
1152
1213
|
taskData.data = {
|
|
1153
1214
|
[executionNode.rewireOutputLogTo]: nodeSuccessData,
|
|
1154
1215
|
};
|
|
1155
1216
|
}
|
|
1156
|
-
this.runExecutionData.resultData.runData[executionNode.name]
|
|
1217
|
+
const runDataAlreadyExists = !!this.runExecutionData.resultData.runData[executionNode.name][runIndex];
|
|
1218
|
+
if (runDataAlreadyExists) {
|
|
1219
|
+
const currentTaskData = this.runExecutionData.resultData.runData[executionNode.name][runIndex];
|
|
1220
|
+
Object.assign(currentTaskData, taskData);
|
|
1221
|
+
}
|
|
1222
|
+
else {
|
|
1223
|
+
this.runExecutionData.resultData.runData[executionNode.name].push(taskData);
|
|
1224
|
+
}
|
|
1157
1225
|
if (this.runExecutionData.waitTill) {
|
|
1158
1226
|
await hooks.runHook('nodeExecuteAfter', [
|
|
1159
1227
|
executionNode.name,
|
|
@@ -1532,13 +1600,7 @@ class WorkflowExecute {
|
|
|
1532
1600
|
}
|
|
1533
1601
|
}
|
|
1534
1602
|
}
|
|
1535
|
-
|
|
1536
|
-
nodeSuccessData = null;
|
|
1537
|
-
}
|
|
1538
|
-
else {
|
|
1539
|
-
this.runExecutionData.resultData.lastNodeExecuted = executionData.node.name;
|
|
1540
|
-
}
|
|
1541
|
-
return nodeSuccessData;
|
|
1603
|
+
return nodeSuccessData ?? null;
|
|
1542
1604
|
}
|
|
1543
1605
|
updateTaskStatusesToCancelled() {
|
|
1544
1606
|
Object.keys(this.runExecutionData.resultData.runData).forEach((nodeName) => {
|