n8n-core 2.28.2 → 2.29.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/binary-data/azure-blob/azure-blob.service.ee.d.ts +11 -2
- package/dist/binary-data/azure-blob/azure-blob.service.ee.js +60 -4
- package/dist/binary-data/azure-blob/azure-blob.service.ee.js.map +1 -1
- package/dist/binary-data/azure-blob.manager.d.ts +23 -0
- package/dist/binary-data/azure-blob.manager.js +81 -0
- package/dist/binary-data/azure-blob.manager.js.map +1 -0
- package/dist/binary-data/binary-data.config.d.ts +3 -3
- package/dist/binary-data/binary-data.config.js +1 -1
- package/dist/binary-data/binary-data.config.js.map +1 -1
- package/dist/binary-data/object-store.manager.js +3 -2
- package/dist/binary-data/object-store.manager.js.map +1 -1
- package/dist/binary-data/utils.js +1 -1
- package/dist/binary-data/utils.js.map +1 -1
- package/dist/build.tsbuildinfo +1 -1
- package/dist/errors/error-reporter.js +2 -2
- package/dist/errors/error-reporter.js.map +1 -1
- package/dist/execution-engine/active-workflow-triggers.d.ts +6 -4
- package/dist/execution-engine/active-workflow-triggers.js +83 -109
- package/dist/execution-engine/active-workflow-triggers.js.map +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/base-execute-context.js +19 -1
- package/dist/execution-engine/node-execution-context/base-execute-context.js.map +1 -1
- package/dist/execution-engine/node-execution-context/utils/binary-helper-functions.js +37 -3
- package/dist/execution-engine/node-execution-context/utils/binary-helper-functions.js.map +1 -1
- package/dist/execution-engine/node-execution-context/utils/get-additional-keys.js +3 -0
- package/dist/execution-engine/node-execution-context/utils/get-additional-keys.js.map +1 -1
- package/dist/execution-engine/node-execution-context/utils/request-helpers/oauth.js +85 -47
- package/dist/execution-engine/node-execution-context/utils/request-helpers/oauth.js.map +1 -1
- package/dist/execution-engine/node-execution-context/utils/scheduling-helper-functions.js +8 -1
- package/dist/execution-engine/node-execution-context/utils/scheduling-helper-functions.js.map +1 -1
- package/dist/execution-engine/partial-execution-utils/directed-graph.js +4 -4
- package/dist/execution-engine/partial-execution-utils/directed-graph.js.map +1 -1
- package/dist/execution-engine/poll-trigger-executor.d.ts +12 -0
- package/dist/execution-engine/poll-trigger-executor.js +88 -0
- package/dist/execution-engine/poll-trigger-executor.js.map +1 -0
- package/dist/execution-engine/scheduled-task-manager.d.ts +24 -20
- package/dist/execution-engine/scheduled-task-manager.js +111 -73
- package/dist/execution-engine/scheduled-task-manager.js.map +1 -1
- package/dist/execution-engine/workflow-active-triggers-state.d.ts +12 -3
- package/dist/execution-engine/workflow-active-triggers-state.js +42 -10
- package/dist/execution-engine/workflow-active-triggers-state.js.map +1 -1
- package/dist/execution-engine/workflow-execute.js +9 -4
- package/dist/execution-engine/workflow-execute.js.map +1 -1
- package/dist/nodes-loader/directory-loader.d.ts +3 -0
- package/dist/nodes-loader/directory-loader.js +57 -1
- package/dist/nodes-loader/directory-loader.js.map +1 -1
- package/dist/observability/tracing/sentry-tracing.d.ts +1 -1
- package/dist/observability/tracing/sentry-tracing.js +13 -1
- package/dist/observability/tracing/sentry-tracing.js.map +1 -1
- package/dist/observability/tracing/span-sampling.d.ts +1 -1
- package/dist/observability/tracing/span-sampling.js +2 -0
- package/dist/observability/tracing/span-sampling.js.map +1 -1
- package/package.json +24 -19
|
@@ -15,21 +15,21 @@ const config_1 = require("@n8n/config");
|
|
|
15
15
|
const constants_1 = require("@n8n/constants");
|
|
16
16
|
const di_1 = require("@n8n/di");
|
|
17
17
|
const cron_1 = require("cron");
|
|
18
|
-
const errors_1 = require("../errors");
|
|
19
18
|
const instance_settings_1 = require("../instance-settings");
|
|
20
19
|
let ScheduledTaskManager = class ScheduledTaskManager {
|
|
21
20
|
get loggableCrons() {
|
|
22
21
|
const loggableCrons = {};
|
|
23
|
-
for (const [
|
|
24
|
-
|
|
22
|
+
for (const [groupType, cronsByGroup] of this.cronsByGroupType) {
|
|
23
|
+
for (const [groupId, crons] of cronsByGroup) {
|
|
24
|
+
loggableCrons[`${groupType}GroupId-${groupId}`] = Array.from(crons.values()).map(({ summary }) => summary);
|
|
25
|
+
}
|
|
25
26
|
}
|
|
26
27
|
return loggableCrons;
|
|
27
28
|
}
|
|
28
|
-
constructor(instanceSettings, logger, { activeInterval }
|
|
29
|
+
constructor(instanceSettings, logger, { activeInterval }) {
|
|
29
30
|
this.instanceSettings = instanceSettings;
|
|
30
31
|
this.logger = logger;
|
|
31
|
-
this.
|
|
32
|
-
this.cronsByWorkflow = new Map();
|
|
32
|
+
this.cronsByGroupType = new Map();
|
|
33
33
|
this.logger = this.logger.scoped('cron');
|
|
34
34
|
if (activeInterval === 0)
|
|
35
35
|
return;
|
|
@@ -38,27 +38,38 @@ let ScheduledTaskManager = class ScheduledTaskManager {
|
|
|
38
38
|
return;
|
|
39
39
|
this.logger.debug('Currently active crons', { active: this.loggableCrons });
|
|
40
40
|
}, activeInterval * constants_1.Time.minutes.toMilliseconds);
|
|
41
|
+
this.logInterval.unref?.();
|
|
41
42
|
}
|
|
42
|
-
|
|
43
|
-
const {
|
|
43
|
+
register(ctx, onTick) {
|
|
44
|
+
const { group, targetId, timezone, expression, recurrence } = ctx;
|
|
45
|
+
if (!this.instanceSettings.isLeader) {
|
|
46
|
+
this.logger.debug('Skipped cron registration on follower instance', {
|
|
47
|
+
groupType: group.type,
|
|
48
|
+
groupId: group.id,
|
|
49
|
+
targetId,
|
|
50
|
+
timezone,
|
|
51
|
+
expression,
|
|
52
|
+
recurrence,
|
|
53
|
+
instanceRole: this.instanceSettings.instanceRole,
|
|
54
|
+
});
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
44
57
|
const summary = recurrence?.activated
|
|
45
58
|
? `${expression} (every ${recurrence.intervalSize} ${recurrence.typeInterval})`
|
|
46
59
|
: expression;
|
|
47
|
-
const
|
|
48
|
-
const key = this.toCronKey(
|
|
49
|
-
if (
|
|
50
|
-
this.
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
instanceRole: this.instanceSettings.instanceRole,
|
|
59
|
-
},
|
|
60
|
+
const groupCrons = this.getGroupCrons(group);
|
|
61
|
+
const key = this.toCronKey(ctx);
|
|
62
|
+
if (groupCrons?.has(key)) {
|
|
63
|
+
this.logger.warn('Skipped registration for already registered cron', {
|
|
64
|
+
groupType: group.type,
|
|
65
|
+
groupId: group.id,
|
|
66
|
+
targetId,
|
|
67
|
+
timezone,
|
|
68
|
+
expression,
|
|
69
|
+
recurrence,
|
|
70
|
+
instanceRole: this.instanceSettings.instanceRole,
|
|
60
71
|
});
|
|
61
|
-
return;
|
|
72
|
+
return false;
|
|
62
73
|
}
|
|
63
74
|
const cronTime = new cron_1.CronTime(expression, timezone);
|
|
64
75
|
const computeNext = () => cronTime.sendAt().toJSDate();
|
|
@@ -68,98 +79,126 @@ let ScheduledTaskManager = class ScheduledTaskManager {
|
|
|
68
79
|
return;
|
|
69
80
|
const firedFor = scheduledTime;
|
|
70
81
|
scheduledTime = computeNext();
|
|
71
|
-
this.logger.debug('Executing cron
|
|
72
|
-
|
|
73
|
-
|
|
82
|
+
this.logger.debug('Executing cron', {
|
|
83
|
+
groupType: group.type,
|
|
84
|
+
groupId: group.id,
|
|
85
|
+
targetId,
|
|
74
86
|
cron: summary,
|
|
75
87
|
instanceRole: this.instanceSettings.instanceRole,
|
|
76
88
|
});
|
|
77
89
|
onTick(firedFor);
|
|
78
90
|
};
|
|
79
91
|
const job = new cron_1.CronJob(expression, handleTick, undefined, true, timezone);
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
workflowCrons.set(key, cron);
|
|
86
|
-
}
|
|
87
|
-
this.logger.debug('Registered cron for workflow', {
|
|
88
|
-
workflowId,
|
|
92
|
+
this.setCron(group, key, { job, summary, ctx });
|
|
93
|
+
this.logger.debug('Registered cron', {
|
|
94
|
+
groupType: group.type,
|
|
95
|
+
groupId: group.id,
|
|
96
|
+
targetId,
|
|
89
97
|
cron: summary,
|
|
90
98
|
instanceRole: this.instanceSettings.instanceRole,
|
|
91
99
|
});
|
|
100
|
+
return true;
|
|
92
101
|
}
|
|
93
|
-
|
|
94
|
-
const
|
|
95
|
-
if (!
|
|
102
|
+
deregisterGroup(group) {
|
|
103
|
+
const groupCrons = this.getGroupCrons(group);
|
|
104
|
+
if (!groupCrons || groupCrons.size === 0)
|
|
96
105
|
return false;
|
|
97
106
|
const summaries = [];
|
|
98
|
-
for (const cron of
|
|
107
|
+
for (const cron of groupCrons.values()) {
|
|
99
108
|
summaries.push(cron.summary);
|
|
100
109
|
void cron.job.stop();
|
|
101
110
|
}
|
|
102
|
-
this.
|
|
103
|
-
this.logger.info('Deregistered all crons
|
|
104
|
-
|
|
111
|
+
this.deleteGroupCrons(group);
|
|
112
|
+
this.logger.info('Deregistered all crons', {
|
|
113
|
+
groupType: group.type,
|
|
114
|
+
groupId: group.id,
|
|
105
115
|
crons: summaries,
|
|
106
116
|
instanceRole: this.instanceSettings.instanceRole,
|
|
107
117
|
});
|
|
108
118
|
return true;
|
|
109
119
|
}
|
|
110
|
-
|
|
111
|
-
return Array.from(this.
|
|
120
|
+
getGroupIds(groupType) {
|
|
121
|
+
return Array.from(this.cronsByGroupType.get(groupType)?.keys() ?? []);
|
|
112
122
|
}
|
|
113
|
-
|
|
114
|
-
const
|
|
115
|
-
if (!
|
|
123
|
+
getTargetIds(group) {
|
|
124
|
+
const groupCrons = this.getGroupCrons(group);
|
|
125
|
+
if (!groupCrons)
|
|
116
126
|
return [];
|
|
117
|
-
const
|
|
118
|
-
for (const cron of
|
|
119
|
-
|
|
127
|
+
const targetIds = new Set();
|
|
128
|
+
for (const cron of groupCrons.values()) {
|
|
129
|
+
targetIds.add(cron.ctx.targetId);
|
|
120
130
|
}
|
|
121
|
-
return Array.from(
|
|
131
|
+
return Array.from(targetIds);
|
|
122
132
|
}
|
|
123
|
-
|
|
124
|
-
const
|
|
125
|
-
if (!
|
|
133
|
+
deregisterTarget(group, targetId) {
|
|
134
|
+
const groupCrons = this.getGroupCrons(group);
|
|
135
|
+
if (!groupCrons || groupCrons.size === 0)
|
|
126
136
|
return;
|
|
127
137
|
const summaries = [];
|
|
128
|
-
for (const [key, cron] of
|
|
129
|
-
if (cron.ctx.
|
|
138
|
+
for (const [key, cron] of groupCrons) {
|
|
139
|
+
if (cron.ctx.targetId !== targetId)
|
|
130
140
|
continue;
|
|
131
141
|
summaries.push(cron.summary);
|
|
132
142
|
void cron.job.stop();
|
|
133
|
-
|
|
143
|
+
groupCrons.delete(key);
|
|
134
144
|
}
|
|
135
|
-
if (
|
|
136
|
-
this.
|
|
145
|
+
if (groupCrons.size === 0)
|
|
146
|
+
this.deleteGroupCrons(group);
|
|
137
147
|
if (summaries.length === 0)
|
|
138
148
|
return;
|
|
139
|
-
this.logger.info('Deregistered crons
|
|
140
|
-
|
|
141
|
-
|
|
149
|
+
this.logger.info('Deregistered crons', {
|
|
150
|
+
groupType: group.type,
|
|
151
|
+
groupId: group.id,
|
|
152
|
+
targetId,
|
|
142
153
|
crons: summaries,
|
|
143
154
|
instanceRole: this.instanceSettings.instanceRole,
|
|
144
155
|
});
|
|
145
156
|
}
|
|
146
|
-
|
|
147
|
-
const
|
|
148
|
-
return
|
|
157
|
+
hasGroup(group) {
|
|
158
|
+
const groupCrons = this.getGroupCrons(group);
|
|
159
|
+
return groupCrons !== undefined && groupCrons.size > 0;
|
|
160
|
+
}
|
|
161
|
+
hasTarget(group, targetId) {
|
|
162
|
+
return this.getTargetIds(group).includes(targetId);
|
|
163
|
+
}
|
|
164
|
+
deregisterGroups(groupType) {
|
|
165
|
+
for (const groupId of this.getGroupIds(groupType)) {
|
|
166
|
+
this.deregisterGroup({ type: groupType, id: groupId });
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
getGroupCrons(group) {
|
|
170
|
+
return this.cronsByGroupType.get(group.type)?.get(group.id);
|
|
149
171
|
}
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
172
|
+
deleteGroupCrons(group) {
|
|
173
|
+
const cronsByGroup = this.cronsByGroupType.get(group.type);
|
|
174
|
+
if (!cronsByGroup)
|
|
175
|
+
return;
|
|
176
|
+
cronsByGroup.delete(group.id);
|
|
177
|
+
if (cronsByGroup.size === 0)
|
|
178
|
+
this.cronsByGroupType.delete(group.type);
|
|
179
|
+
}
|
|
180
|
+
setCron(group, key, cron) {
|
|
181
|
+
let cronsByGroup = this.cronsByGroupType.get(group.type);
|
|
182
|
+
if (!cronsByGroup) {
|
|
183
|
+
cronsByGroup = new Map();
|
|
184
|
+
this.cronsByGroupType.set(group.type, cronsByGroup);
|
|
185
|
+
}
|
|
186
|
+
const groupCrons = cronsByGroup.get(group.id);
|
|
187
|
+
if (!groupCrons) {
|
|
188
|
+
cronsByGroup.set(group.id, new Map([[key, cron]]));
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
groupCrons.set(key, cron);
|
|
153
192
|
}
|
|
154
|
-
clearInterval(this.logInterval);
|
|
155
|
-
this.logInterval = undefined;
|
|
156
193
|
}
|
|
157
194
|
toCronKey(ctx) {
|
|
158
|
-
const { recurrence, ...rest } = ctx;
|
|
195
|
+
const { recurrence, group, ...rest } = ctx;
|
|
159
196
|
const flattened = !recurrence
|
|
160
|
-
? rest
|
|
197
|
+
? { ...rest, groupType: group.type, groupId: group.id }
|
|
161
198
|
: {
|
|
162
199
|
...rest,
|
|
200
|
+
groupType: group.type,
|
|
201
|
+
groupId: group.id,
|
|
163
202
|
recurrenceActivated: recurrence.activated,
|
|
164
203
|
...(recurrence.activated && {
|
|
165
204
|
recurrenceIndex: recurrence.index,
|
|
@@ -181,7 +220,6 @@ exports.ScheduledTaskManager = ScheduledTaskManager = __decorate([
|
|
|
181
220
|
(0, di_1.Service)(),
|
|
182
221
|
__metadata("design:paramtypes", [instance_settings_1.InstanceSettings,
|
|
183
222
|
backend_common_1.Logger,
|
|
184
|
-
config_1.CronLoggingConfig
|
|
185
|
-
errors_1.ErrorReporter])
|
|
223
|
+
config_1.CronLoggingConfig])
|
|
186
224
|
], ScheduledTaskManager);
|
|
187
225
|
//# sourceMappingURL=scheduled-task-manager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scheduled-task-manager.js","sourceRoot":"","sources":["../../src/execution-engine/scheduled-task-manager.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wDAA6C;AAC7C,wCAAgD;AAChD,8CAAsC;AACtC,gCAAkC;AAClC,+BAAyC;AAGzC,
|
|
1
|
+
{"version":3,"file":"scheduled-task-manager.js","sourceRoot":"","sources":["../../src/execution-engine/scheduled-task-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,20 @@
|
|
|
1
1
|
import type { ITriggerResponse } from 'n8n-workflow';
|
|
2
|
+
export type TriggerRegistrationToken = symbol;
|
|
2
3
|
export declare class WorkflowActiveTriggersState {
|
|
3
|
-
private readonly
|
|
4
|
-
|
|
4
|
+
private readonly registrationsByNodeId;
|
|
5
|
+
private pendingRegistrations;
|
|
6
|
+
beginRegistration(): void;
|
|
7
|
+
finishRegistration(): void;
|
|
8
|
+
get hasPendingRegistrations(): boolean;
|
|
9
|
+
addTriggerResponse(nodeId: string, response: ITriggerResponse): TriggerRegistrationToken;
|
|
10
|
+
addScheduledTrigger(nodeId: string): TriggerRegistrationToken;
|
|
11
|
+
addPoller(nodeId: string): TriggerRegistrationToken;
|
|
12
|
+
private getOrCreateRegistration;
|
|
5
13
|
get(nodeId: string): ITriggerResponse | undefined;
|
|
6
14
|
has(nodeId: string): boolean;
|
|
15
|
+
isCurrent(nodeId: string, token: TriggerRegistrationToken): boolean;
|
|
7
16
|
delete(nodeId: string): void;
|
|
8
17
|
get isEmpty(): boolean;
|
|
9
18
|
get nodeIds(): IterableIterator<string>;
|
|
10
|
-
|
|
19
|
+
triggerResponses(): IterableIterator<ITriggerResponse>;
|
|
11
20
|
}
|
|
@@ -3,28 +3,60 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.WorkflowActiveTriggersState = void 0;
|
|
4
4
|
class WorkflowActiveTriggersState {
|
|
5
5
|
constructor() {
|
|
6
|
-
this.
|
|
6
|
+
this.registrationsByNodeId = new Map();
|
|
7
|
+
this.pendingRegistrations = 0;
|
|
7
8
|
}
|
|
8
|
-
|
|
9
|
-
this.
|
|
9
|
+
beginRegistration() {
|
|
10
|
+
this.pendingRegistrations += 1;
|
|
11
|
+
}
|
|
12
|
+
finishRegistration() {
|
|
13
|
+
this.pendingRegistrations -= 1;
|
|
14
|
+
}
|
|
15
|
+
get hasPendingRegistrations() {
|
|
16
|
+
return this.pendingRegistrations > 0;
|
|
17
|
+
}
|
|
18
|
+
addTriggerResponse(nodeId, response) {
|
|
19
|
+
const registration = this.getOrCreateRegistration(nodeId);
|
|
20
|
+
registration.response = response;
|
|
21
|
+
return registration.token;
|
|
22
|
+
}
|
|
23
|
+
addScheduledTrigger(nodeId) {
|
|
24
|
+
return this.getOrCreateRegistration(nodeId).token;
|
|
25
|
+
}
|
|
26
|
+
addPoller(nodeId) {
|
|
27
|
+
return this.getOrCreateRegistration(nodeId).token;
|
|
28
|
+
}
|
|
29
|
+
getOrCreateRegistration(nodeId) {
|
|
30
|
+
const existing = this.registrationsByNodeId.get(nodeId);
|
|
31
|
+
if (existing)
|
|
32
|
+
return existing;
|
|
33
|
+
const registration = { token: Symbol(nodeId) };
|
|
34
|
+
this.registrationsByNodeId.set(nodeId, registration);
|
|
35
|
+
return registration;
|
|
10
36
|
}
|
|
11
37
|
get(nodeId) {
|
|
12
|
-
return this.
|
|
38
|
+
return this.registrationsByNodeId.get(nodeId)?.response;
|
|
13
39
|
}
|
|
14
40
|
has(nodeId) {
|
|
15
|
-
return this.
|
|
41
|
+
return this.registrationsByNodeId.has(nodeId);
|
|
42
|
+
}
|
|
43
|
+
isCurrent(nodeId, token) {
|
|
44
|
+
return this.registrationsByNodeId.get(nodeId)?.token === token;
|
|
16
45
|
}
|
|
17
46
|
delete(nodeId) {
|
|
18
|
-
this.
|
|
47
|
+
this.registrationsByNodeId.delete(nodeId);
|
|
19
48
|
}
|
|
20
49
|
get isEmpty() {
|
|
21
|
-
return this.
|
|
50
|
+
return this.registrationsByNodeId.size === 0;
|
|
22
51
|
}
|
|
23
52
|
get nodeIds() {
|
|
24
|
-
return this.
|
|
53
|
+
return this.registrationsByNodeId.keys();
|
|
25
54
|
}
|
|
26
|
-
|
|
27
|
-
|
|
55
|
+
*triggerResponses() {
|
|
56
|
+
for (const registration of this.registrationsByNodeId.values()) {
|
|
57
|
+
if (registration.response)
|
|
58
|
+
yield registration.response;
|
|
59
|
+
}
|
|
28
60
|
}
|
|
29
61
|
}
|
|
30
62
|
exports.WorkflowActiveTriggersState = WorkflowActiveTriggersState;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-active-triggers-state.js","sourceRoot":"","sources":["../../src/execution-engine/workflow-active-triggers-state.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"workflow-active-triggers-state.js","sourceRoot":"","sources":["../../src/execution-engine/workflow-active-triggers-state.ts"],"names":[],"mappings":";;;AAaA,MAAa,2BAA2B;IAAxC;QACkB,0BAAqB,GAAG,IAAI,GAAG,EAA+B,CAAC;QAExE,yBAAoB,GAAG,CAAC,CAAC;IAiFlC,CAAC;IA9EA,iBAAiB;QAChB,IAAI,CAAC,oBAAoB,IAAI,CAAC,CAAC;IAChC,CAAC;IAGD,kBAAkB;QACjB,IAAI,CAAC,oBAAoB,IAAI,CAAC,CAAC;IAChC,CAAC;IAGD,IAAI,uBAAuB;QAC1B,OAAO,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC;IACtC,CAAC;IAGD,kBAAkB,CAAC,MAAc,EAAE,QAA0B;QAC5D,MAAM,YAAY,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;QAC1D,YAAY,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAEjC,OAAO,YAAY,CAAC,KAAK,CAAC;IAC3B,CAAC;IAGD,mBAAmB,CAAC,MAAc;QACjC,OAAO,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC;IACnD,CAAC;IAGD,SAAS,CAAC,MAAc;QACvB,OAAO,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC;IACnD,CAAC;IAEO,uBAAuB,CAAC,MAAc;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACxD,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAE9B,MAAM,YAAY,GAAwB,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACpE,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAErD,OAAO,YAAY,CAAC;IACrB,CAAC;IAGD,GAAG,CAAC,MAAc;QACjB,OAAO,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC;IACzD,CAAC;IAGD,GAAG,CAAC,MAAc;QACjB,OAAO,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC;IAGD,SAAS,CAAC,MAAc,EAAE,KAA+B;QACxD,OAAO,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,KAAK,KAAK,KAAK,CAAC;IAChE,CAAC;IAGD,MAAM,CAAC,MAAc;QACpB,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IAGD,IAAI,OAAO;QACV,OAAO,IAAI,CAAC,qBAAqB,CAAC,IAAI,KAAK,CAAC,CAAC;IAC9C,CAAC;IAGD,IAAI,OAAO;QACV,OAAO,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,CAAC;IAC1C,CAAC;IAGD,CAAC,gBAAgB;QAChB,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,EAAE,CAAC;YAChE,IAAI,YAAY,CAAC,QAAQ;gBAAE,MAAM,YAAY,CAAC,QAAQ,CAAC;QACxD,CAAC;IACF,CAAC;CACD;AApFD,kEAoFC"}
|
|
@@ -139,17 +139,22 @@ class WorkflowExecute {
|
|
|
139
139
|
let startNode;
|
|
140
140
|
const parentNodes = workflow.getParentNodes(destinationNode.nodeName);
|
|
141
141
|
for (const nodeName of parentNodes) {
|
|
142
|
-
|
|
143
|
-
|
|
142
|
+
const parentNode = workflow.getNode(nodeName);
|
|
143
|
+
if (parentNode && !parentNode.disabled && runData[nodeName]) {
|
|
144
|
+
startNode = parentNode;
|
|
144
145
|
break;
|
|
145
146
|
}
|
|
146
147
|
}
|
|
147
148
|
if (!startNode) {
|
|
148
|
-
throw new n8n_workflow_1.UserError(
|
|
149
|
+
throw new n8n_workflow_1.UserError("Connect a trigger and make sure it's enabled to run this node");
|
|
149
150
|
}
|
|
150
151
|
trigger = startNode;
|
|
151
152
|
}
|
|
152
|
-
|
|
153
|
+
const filteredGraph = (0, partial_execution_utils_1.filterDisabledNodes)(graph);
|
|
154
|
+
if (destination.disabled) {
|
|
155
|
+
throw new n8n_workflow_1.UserError('Cannot execute a disabled node');
|
|
156
|
+
}
|
|
157
|
+
graph = (0, partial_execution_utils_1.findSubgraph)({ graph: filteredGraph, destination, trigger });
|
|
153
158
|
const filteredNodes = graph.getNodes();
|
|
154
159
|
const dirtyNodes = graph.getNodesByNames(dirtyNodeNames);
|
|
155
160
|
runData = (0, partial_execution_utils_1.cleanRunData)(runData, graph, dirtyNodes);
|