@fsai-flow/core 0.0.2 → 0.0.4
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/README.md +22 -2
- package/dist/README.md +22 -2
- package/dist/package.json +14 -4
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/lib/ActiveWebhooks.js +4 -4
- package/dist/src/lib/ActiveWebhooks.js.map +1 -1
- package/dist/src/lib/ActiveWorkflows.d.ts +31 -2
- package/dist/src/lib/ActiveWorkflows.js +302 -90
- package/dist/src/lib/ActiveWorkflows.js.map +1 -1
- package/dist/src/lib/LoadNodeParameterOptions.js +3 -3
- package/dist/src/lib/LoadNodeParameterOptions.js.map +1 -1
- package/dist/src/lib/NodeExecuteFunctions.d.ts +1 -1
- package/dist/src/lib/NodeExecuteFunctions.js +2 -6
- package/dist/src/lib/NodeExecuteFunctions.js.map +1 -1
- package/dist/src/lib/RedisLeaderElectionManager.d.ts +53 -0
- package/dist/src/lib/RedisLeaderElectionManager.js +294 -0
- package/dist/src/lib/RedisLeaderElectionManager.js.map +1 -0
- package/dist/src/lib/UserSettings.d.ts +1 -1
- package/dist/src/lib/UserSettings.js +10 -10
- package/dist/src/lib/UserSettings.js.map +1 -1
- package/dist/src/lib/WorkflowExecute.js +21 -2
- package/dist/src/lib/WorkflowExecute.js.map +1 -1
- package/package.json +15 -5
- package/src/index.ts +1 -0
- package/src/lib/ActiveWebhooks.ts +1 -1
- package/src/lib/ActiveWorkflows.ts +327 -56
- package/src/lib/LoadNodeParameterOptions.ts +1 -1
- package/src/lib/NodeExecuteFunctions.ts +1 -5
- package/src/lib/RedisLeaderElectionManager.ts +334 -0
- package/src/lib/UserSettings.ts +1 -1
- package/src/lib/WorkflowExecute.ts +23 -3
- package/tsconfig.json +0 -1
|
@@ -8,9 +8,23 @@ const tslib_1 = require("tslib");
|
|
|
8
8
|
const cron_1 = require("cron");
|
|
9
9
|
const workflow_1 = require("@fsai-flow/workflow");
|
|
10
10
|
const crypto_1 = require("../utils/crypto");
|
|
11
|
+
const RedisLeaderElectionManager_1 = require("./RedisLeaderElectionManager");
|
|
11
12
|
class ActiveWorkflows {
|
|
12
|
-
constructor() {
|
|
13
|
+
constructor(redisConfig) {
|
|
13
14
|
this.workflowData = {};
|
|
15
|
+
this.instanceLeaderElection = null;
|
|
16
|
+
this.pollingWorkflows = new Map();
|
|
17
|
+
this.isLeader = false;
|
|
18
|
+
this.isInitializingLeaderElection = false;
|
|
19
|
+
this.leaderElectionInitialized = false;
|
|
20
|
+
this.leaderElectionEnabled = false;
|
|
21
|
+
this.redisConfig = redisConfig;
|
|
22
|
+
this.leaderElectionEnabled = redisConfig !== undefined;
|
|
23
|
+
if (!this.leaderElectionEnabled) {
|
|
24
|
+
workflow_1.LoggerProxy.info('📴 Redis leader election disabled - workflows will run on all instances');
|
|
25
|
+
this.isLeader = true; // In non-queue mode, every instance is a "leader"
|
|
26
|
+
this.leaderElectionInitialized = true;
|
|
27
|
+
}
|
|
14
28
|
}
|
|
15
29
|
/**
|
|
16
30
|
* Returns if the workflow is active
|
|
@@ -77,7 +91,116 @@ class ActiveWorkflows {
|
|
|
77
91
|
});
|
|
78
92
|
}
|
|
79
93
|
/**
|
|
80
|
-
*
|
|
94
|
+
* Initialize global leader election (called once per instance)
|
|
95
|
+
*/
|
|
96
|
+
initializeLeaderElection() {
|
|
97
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
98
|
+
// Skip leader election if disabled
|
|
99
|
+
if (!this.leaderElectionEnabled) {
|
|
100
|
+
workflow_1.LoggerProxy.debug('📴 Leader election disabled - skipping initialization');
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
// Prevent race condition - only one initialization at a time
|
|
104
|
+
if (this.leaderElectionInitialized || this.isInitializingLeaderElection) {
|
|
105
|
+
workflow_1.LoggerProxy.debug('⏳ Leader election already initialized or in progress, waiting...');
|
|
106
|
+
// Wait for initialization to complete
|
|
107
|
+
while (this.isInitializingLeaderElection) {
|
|
108
|
+
yield new Promise(resolve => setTimeout(resolve, 100));
|
|
109
|
+
}
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
this.isInitializingLeaderElection = true;
|
|
113
|
+
try {
|
|
114
|
+
const nodeId = process.env['POD_NAME'] || process.env['HOSTNAME'] || `flowx-instance-${Math.random().toString(36).substr(2, 9)}`;
|
|
115
|
+
const lockName = 'global-polling-leadership';
|
|
116
|
+
workflow_1.LoggerProxy.info(`🌟 Initializing global polling leadership for instance ${nodeId}`);
|
|
117
|
+
this.instanceLeaderElection = new RedisLeaderElectionManager_1.RedisLeaderElectionManager(lockName, this.redisConfig, // We know it's not null because leaderElectionEnabled is true
|
|
118
|
+
{
|
|
119
|
+
onStartedLeading: () => {
|
|
120
|
+
workflow_1.LoggerProxy.info(`🏆 Instance ${nodeId} became GLOBAL POLLING LEADER - starting all registered workflows (current count: ${this.pollingWorkflows.size})`);
|
|
121
|
+
this.isLeader = true;
|
|
122
|
+
// Set initialized flag before starting workflows to prevent timing issue
|
|
123
|
+
this.leaderElectionInitialized = true;
|
|
124
|
+
this.startAllPollingWorkflows();
|
|
125
|
+
},
|
|
126
|
+
onStoppedLeading: () => {
|
|
127
|
+
workflow_1.LoggerProxy.info(`📉 Instance ${nodeId} lost GLOBAL POLLING LEADERSHIP - stopping all workflows`);
|
|
128
|
+
this.isLeader = false;
|
|
129
|
+
this.stopAllPollingWorkflows();
|
|
130
|
+
},
|
|
131
|
+
onNewLeader: (identity) => {
|
|
132
|
+
//Logger.info(`👑 New global polling leader: ${identity}`);
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
yield this.instanceLeaderElection.start();
|
|
136
|
+
// Only set this if we didn't become leader during start() - prevent double-setting
|
|
137
|
+
if (!this.leaderElectionInitialized) {
|
|
138
|
+
this.leaderElectionInitialized = true;
|
|
139
|
+
}
|
|
140
|
+
workflow_1.LoggerProxy.info(`✅ Global leader election initialized for ${nodeId}`);
|
|
141
|
+
}
|
|
142
|
+
finally {
|
|
143
|
+
this.isInitializingLeaderElection = false;
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Start all registered polling workflows (called when becoming leader)
|
|
149
|
+
*/
|
|
150
|
+
startAllPollingWorkflows() {
|
|
151
|
+
workflow_1.LoggerProxy.debug(`🔍 startAllPollingWorkflows called - isLeader: ${this.isLeader}, initialized: ${this.leaderElectionInitialized}, workflows: ${this.pollingWorkflows.size}`);
|
|
152
|
+
// Safety check: Only start if we're truly the leader and initialization is complete
|
|
153
|
+
if (!this.isLeader || !this.leaderElectionInitialized) {
|
|
154
|
+
workflow_1.LoggerProxy.warn(`⚠️ Cannot start workflows - not leader (isLeader: ${this.isLeader}, initialized: ${this.leaderElectionInitialized})`);
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
workflow_1.LoggerProxy.info(`🚀 Starting all ${this.pollingWorkflows.size} registered polling workflows`);
|
|
158
|
+
workflow_1.LoggerProxy.debug(`📋 Registered workflow keys: ${Array.from(this.pollingWorkflows.keys()).join(', ')}`);
|
|
159
|
+
let startedCount = 0;
|
|
160
|
+
for (const [workflowKey, pollingWorkflow] of this.pollingWorkflows) {
|
|
161
|
+
try {
|
|
162
|
+
// Skip if already running (double-check safety)
|
|
163
|
+
if (pollingWorkflow.activeCronJobs.length > 0) {
|
|
164
|
+
workflow_1.LoggerProxy.warn(`⚠️ Workflow ${workflowKey} already has active cron jobs - skipping`);
|
|
165
|
+
continue;
|
|
166
|
+
}
|
|
167
|
+
workflow_1.LoggerProxy.info(`⏰ Starting cron jobs for workflow "${pollingWorkflow.workflow.name}", node "${pollingWorkflow.node.name}" (${pollingWorkflow.cronTimes.length} schedules)`);
|
|
168
|
+
// Create and start cron jobs for this workflow
|
|
169
|
+
pollingWorkflow.activeCronJobs = pollingWorkflow.cronTimes.map(cronTime => new cron_1.CronJob(cronTime, pollingWorkflow.executeTrigger, undefined, true, pollingWorkflow.timezone));
|
|
170
|
+
startedCount++;
|
|
171
|
+
workflow_1.LoggerProxy.info(`✅ Started ${pollingWorkflow.activeCronJobs.length} cron jobs for workflow "${pollingWorkflow.workflow.name}"`);
|
|
172
|
+
}
|
|
173
|
+
catch (error) {
|
|
174
|
+
workflow_1.LoggerProxy.error(`❌ Failed to start polling for ${workflowKey}: ${error.message}`);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
workflow_1.LoggerProxy.info(`🎯 Successfully started ${startedCount} of ${this.pollingWorkflows.size} polling workflows`);
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Stop all polling workflows (called when losing leadership)
|
|
181
|
+
*/
|
|
182
|
+
stopAllPollingWorkflows() {
|
|
183
|
+
workflow_1.LoggerProxy.info(`🛑 Stopping all ${this.pollingWorkflows.size} polling workflows`);
|
|
184
|
+
for (const [workflowKey, pollingWorkflow] of this.pollingWorkflows) {
|
|
185
|
+
try {
|
|
186
|
+
// Skip if already stopped (safety check)
|
|
187
|
+
if (pollingWorkflow.activeCronJobs.length === 0) {
|
|
188
|
+
workflow_1.LoggerProxy.debug(`⏭️ Workflow ${workflowKey} already stopped - skipping`);
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
workflow_1.LoggerProxy.info(`⏹️ Stopping cron jobs for workflow "${pollingWorkflow.workflow.name}", node "${pollingWorkflow.node.name}"`);
|
|
192
|
+
// Stop all cron jobs for this workflow
|
|
193
|
+
pollingWorkflow.activeCronJobs.forEach(job => job.stop());
|
|
194
|
+
pollingWorkflow.activeCronJobs = [];
|
|
195
|
+
workflow_1.LoggerProxy.debug(`✅ Stopped polling for ${workflowKey}`);
|
|
196
|
+
}
|
|
197
|
+
catch (error) {
|
|
198
|
+
workflow_1.LoggerProxy.error(`❌ Failed to stop polling for ${workflowKey}: ${error.message}`);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Activates polling for the given node with global Redis leader election
|
|
81
204
|
*
|
|
82
205
|
* @param {INode} node
|
|
83
206
|
* @param {Workflow} workflow
|
|
@@ -89,107 +212,163 @@ class ActiveWorkflows {
|
|
|
89
212
|
activatePolling(node, workflow, additionalData, getPollFunctions, mode, activation) {
|
|
90
213
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
91
214
|
const pollFunctions = getPollFunctions(workflow, node, additionalData, mode, activation);
|
|
215
|
+
// Get polling configuration
|
|
92
216
|
const pollTimes = pollFunctions.getNodeParameter('pollTimes');
|
|
93
|
-
//
|
|
94
|
-
const
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
cronTimes.push(item['cronExpression'].trim());
|
|
111
|
-
continue;
|
|
112
|
-
}
|
|
113
|
-
if (item.mode === 'everyMinute') {
|
|
114
|
-
cronTimes.push(`${(0, crypto_1.secureRandomNumber)(1, 60).toString()} * * * * *`);
|
|
115
|
-
continue;
|
|
116
|
-
}
|
|
117
|
-
if (item.mode === 'everyX') {
|
|
118
|
-
if (item['unit'] === 'minutes') {
|
|
119
|
-
cronTimes.push(`${(0, crypto_1.secureRandomNumber)(1, 60).toString()} */${item['value']} * * * *`);
|
|
120
|
-
}
|
|
121
|
-
else if (item['unit'] === 'hours') {
|
|
122
|
-
cronTimes.push(`${(0, crypto_1.secureRandomNumber)(1, 60).toString()} 0 */${item['value']} * * *`);
|
|
123
|
-
}
|
|
124
|
-
else if (item['unit'] === 'seconds') {
|
|
125
|
-
cronTimes.push(`*/${item['value']} * * * * *`);
|
|
126
|
-
}
|
|
127
|
-
continue;
|
|
128
|
-
}
|
|
129
|
-
for (parameterName of parameterOrder) {
|
|
130
|
-
if (item[parameterName] !== undefined) {
|
|
131
|
-
// Value is set so use it
|
|
132
|
-
cronTime.push(item[parameterName]);
|
|
133
|
-
}
|
|
134
|
-
else if (parameterName === 'second') {
|
|
135
|
-
// For seconds we use by default a random one to make sure to
|
|
136
|
-
// balance the load a little bit over time
|
|
137
|
-
cronTime.push((0, crypto_1.secureRandomNumber)(1, 60).toString());
|
|
138
|
-
}
|
|
139
|
-
else {
|
|
140
|
-
// For all others set "any"
|
|
141
|
-
cronTime.push('*');
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
cronTimes.push(cronTime.join(' '));
|
|
145
|
-
}
|
|
217
|
+
// Build cron times
|
|
218
|
+
const cronTimes = this.buildCronTimes(pollTimes);
|
|
219
|
+
const timezone = pollFunctions.getTimezone();
|
|
220
|
+
// Validate cron times
|
|
221
|
+
this.validateCronTimes(cronTimes);
|
|
222
|
+
// Create unique workflow key
|
|
223
|
+
const workflowKey = `${workflow.id}-${node.name}`;
|
|
224
|
+
// Check if this workflow is already registered (prevents duplicate registrations)
|
|
225
|
+
if (this.pollingWorkflows.has(workflowKey)) {
|
|
226
|
+
workflow_1.LoggerProxy.warn(`⚠️ Workflow ${workflowKey} is already registered - returning existing closeFunction`);
|
|
227
|
+
const existingWorkflow = this.pollingWorkflows.get(workflowKey);
|
|
228
|
+
return {
|
|
229
|
+
closeFunction: () => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
230
|
+
workflow_1.LoggerProxy.info(`🗑️ Removing duplicate registration for: "${workflow.name}" (node: ${node.name})`);
|
|
231
|
+
// Just log - don't actually remove since this is a duplicate
|
|
232
|
+
})
|
|
233
|
+
};
|
|
146
234
|
}
|
|
147
|
-
//
|
|
235
|
+
// Create the polling execution function
|
|
148
236
|
const executeTrigger = () => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
237
|
+
var _a;
|
|
238
|
+
try {
|
|
239
|
+
workflow_1.LoggerProxy.info(`Polling trigger initiated for workflow "${workflow.name}"`, {
|
|
240
|
+
workflowName: workflow.name,
|
|
241
|
+
workflowId: workflow.id,
|
|
242
|
+
});
|
|
243
|
+
const pollResponse = yield workflow.runPoll(node, pollFunctions);
|
|
244
|
+
if (pollResponse !== null) {
|
|
245
|
+
// eslint-disable-next-line no-underscore-dangle
|
|
246
|
+
pollFunctions.__emit(pollResponse);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
catch (error) {
|
|
250
|
+
workflow_1.LoggerProxy.error(`Polling trigger failed for workflow "${workflow.name}"`, {
|
|
251
|
+
workflowName: workflow.name,
|
|
252
|
+
workflowId: workflow.id,
|
|
253
|
+
nodeName: node.name,
|
|
254
|
+
error: error.message,
|
|
255
|
+
statusCode: error.statusCode,
|
|
256
|
+
httpCode: error.httpCode,
|
|
257
|
+
description: error.description,
|
|
258
|
+
cause: (_a = error.cause) === null || _a === void 0 ? void 0 : _a.message,
|
|
259
|
+
});
|
|
158
260
|
}
|
|
159
261
|
});
|
|
160
|
-
//
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
262
|
+
// Register this polling workflow
|
|
263
|
+
const pollingWorkflow = {
|
|
264
|
+
workflow,
|
|
265
|
+
node,
|
|
266
|
+
cronTimes,
|
|
267
|
+
timezone,
|
|
268
|
+
executeTrigger,
|
|
269
|
+
activeCronJobs: []
|
|
270
|
+
};
|
|
271
|
+
this.pollingWorkflows.set(workflowKey, pollingWorkflow);
|
|
272
|
+
workflow_1.LoggerProxy.info(`📋 Registered polling workflow: "${workflow.name}" (node: ${node.name}) [Key: ${workflowKey}] - Total workflows: ${this.pollingWorkflows.size}`);
|
|
273
|
+
// Initialize global leader election if enabled
|
|
274
|
+
yield this.initializeLeaderElection();
|
|
275
|
+
// Start workflow if we're the leader (or if leader election is disabled)
|
|
276
|
+
if (this.isLeader && this.leaderElectionInitialized && pollingWorkflow.activeCronJobs.length === 0) {
|
|
277
|
+
const reason = this.leaderElectionEnabled ? 'Leader established' : 'Leader election disabled';
|
|
278
|
+
workflow_1.LoggerProxy.info(`🔥 Post-registration start: "${workflow.name}" [Key: ${workflowKey}] - ${reason}, starting immediately`);
|
|
279
|
+
try {
|
|
280
|
+
pollingWorkflow.activeCronJobs = pollingWorkflow.cronTimes.map(cronTime => new cron_1.CronJob(cronTime, pollingWorkflow.executeTrigger, undefined, true, pollingWorkflow.timezone));
|
|
281
|
+
workflow_1.LoggerProxy.info(`✅ Post-registration: Started ${pollingWorkflow.activeCronJobs.length} cron jobs for "${workflow.name}"`);
|
|
174
282
|
}
|
|
175
|
-
|
|
176
|
-
|
|
283
|
+
catch (error) {
|
|
284
|
+
workflow_1.LoggerProxy.error(`❌ Failed to start newly registered workflow ${workflowKey}: ${error.message}`);
|
|
177
285
|
}
|
|
178
|
-
cronJobs.push(new cron_1.CronJob(cronTime, executeTrigger, undefined, true, timezone));
|
|
179
286
|
}
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
for (const cronJob of cronJobs) {
|
|
184
|
-
cronJob.stop();
|
|
185
|
-
}
|
|
186
|
-
});
|
|
287
|
+
else {
|
|
288
|
+
const leaderElectionStatus = this.leaderElectionEnabled ? 'enabled' : 'disabled';
|
|
289
|
+
workflow_1.LoggerProxy.debug(`⏳ Post-registration wait: "${workflow.name}" [Key: ${workflowKey}] (isLeader: ${this.isLeader}, initialized: ${this.leaderElectionInitialized}, activeCronJobs: ${pollingWorkflow.activeCronJobs.length}, leaderElection: ${leaderElectionStatus})`);
|
|
187
290
|
}
|
|
291
|
+
// Return cleanup function
|
|
188
292
|
return {
|
|
189
|
-
closeFunction,
|
|
293
|
+
closeFunction: () => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
294
|
+
workflow_1.LoggerProxy.info(`🗑️ Removing polling workflow: "${workflow.name}" (node: ${node.name})`);
|
|
295
|
+
// Stop cron jobs for this workflow
|
|
296
|
+
const workflow_to_remove = this.pollingWorkflows.get(workflowKey);
|
|
297
|
+
if (workflow_to_remove) {
|
|
298
|
+
workflow_to_remove.activeCronJobs.forEach(job => job.stop());
|
|
299
|
+
}
|
|
300
|
+
// Remove from registered workflows
|
|
301
|
+
this.pollingWorkflows.delete(workflowKey);
|
|
302
|
+
workflow_1.LoggerProxy.debug(`✅ Removed polling workflow ${workflowKey}`);
|
|
303
|
+
})
|
|
190
304
|
};
|
|
191
305
|
});
|
|
192
306
|
}
|
|
307
|
+
/**
|
|
308
|
+
* Extract cron time building logic (same as original)
|
|
309
|
+
*/
|
|
310
|
+
buildCronTimes(pollTimes) {
|
|
311
|
+
const parameterOrder = [
|
|
312
|
+
'second', 'minute', 'hour', 'dayOfMonth', 'month', 'weekday'
|
|
313
|
+
];
|
|
314
|
+
const cronTimes = [];
|
|
315
|
+
if (pollTimes.item !== undefined) {
|
|
316
|
+
for (const item of pollTimes.item) {
|
|
317
|
+
let cronTime;
|
|
318
|
+
if (item.mode === 'custom') {
|
|
319
|
+
cronTimes.push(item['cronExpression'].trim());
|
|
320
|
+
continue;
|
|
321
|
+
}
|
|
322
|
+
if (item.mode === 'everyMinute') {
|
|
323
|
+
cronTimes.push(`${(0, crypto_1.secureRandomNumber)(1, 60).toString()} * * * * *`);
|
|
324
|
+
continue;
|
|
325
|
+
}
|
|
326
|
+
if (item.mode === 'everyX') {
|
|
327
|
+
if (item['unit'] === 'minutes') {
|
|
328
|
+
cronTimes.push(`${(0, crypto_1.secureRandomNumber)(1, 60).toString()} */${item['value']} * * * *`);
|
|
329
|
+
}
|
|
330
|
+
else if (item['unit'] === 'hours') {
|
|
331
|
+
cronTimes.push(`${(0, crypto_1.secureRandomNumber)(1, 60).toString()} 0 */${item['value']} * * *`);
|
|
332
|
+
}
|
|
333
|
+
else if (item['unit'] === 'seconds') {
|
|
334
|
+
cronTimes.push(`*/${item['value']} * * * * *`);
|
|
335
|
+
}
|
|
336
|
+
continue;
|
|
337
|
+
}
|
|
338
|
+
cronTime = [];
|
|
339
|
+
for (const parameterName of parameterOrder) {
|
|
340
|
+
if (item[parameterName] !== undefined) {
|
|
341
|
+
cronTime.push(item[parameterName]);
|
|
342
|
+
}
|
|
343
|
+
else if (parameterName === 'second') {
|
|
344
|
+
cronTime.push((0, crypto_1.secureRandomNumber)(1, 60).toString());
|
|
345
|
+
}
|
|
346
|
+
else {
|
|
347
|
+
cronTime.push('*');
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
cronTimes.push(cronTime.join(' '));
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
return cronTimes;
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* Validate cron times (same as original)
|
|
357
|
+
*/
|
|
358
|
+
validateCronTimes(cronTimes) {
|
|
359
|
+
for (const cronTime of cronTimes) {
|
|
360
|
+
const cronTimeParts = cronTime.split(' ');
|
|
361
|
+
if (cronTimeParts.length === 6 && cronTimeParts[0].includes('/')) {
|
|
362
|
+
const secondsInterval = parseInt(cronTimeParts[0].replace('*/', ''), 10);
|
|
363
|
+
if (secondsInterval < 1) {
|
|
364
|
+
throw new Error('The polling interval is too short. It has to be at least 1 second!');
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
else if (cronTimeParts.length > 0 && cronTimeParts[0].includes('*') && !cronTimeParts[0].includes('/')) {
|
|
368
|
+
throw new Error('The polling interval is too short. It has to be at least a minute!');
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
}
|
|
193
372
|
/**
|
|
194
373
|
* Makes a workflow inactive
|
|
195
374
|
*
|
|
@@ -236,6 +415,39 @@ class ActiveWorkflows {
|
|
|
236
415
|
}
|
|
237
416
|
}
|
|
238
417
|
}
|
|
418
|
+
// Remove polling workflows from the global map (closeFunction will handle stopping cron jobs)
|
|
419
|
+
const pollingWorkflowsToRemove = [];
|
|
420
|
+
for (const [workflowKey, pollingWorkflow] of this.pollingWorkflows) {
|
|
421
|
+
if (pollingWorkflow.workflow.id === id) {
|
|
422
|
+
pollingWorkflowsToRemove.push(workflowKey);
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
for (const workflowKey of pollingWorkflowsToRemove) {
|
|
426
|
+
const pollingWorkflow = this.pollingWorkflows.get(workflowKey);
|
|
427
|
+
if (pollingWorkflow) {
|
|
428
|
+
workflow_1.LoggerProxy.info(`🗑️ Removing polling workflow: "${pollingWorkflow.workflow.name}" (node: ${pollingWorkflow.node.name})`);
|
|
429
|
+
// Stop cron jobs for this workflow
|
|
430
|
+
pollingWorkflow.activeCronJobs.forEach(job => job.stop());
|
|
431
|
+
// Remove from registered workflows
|
|
432
|
+
this.pollingWorkflows.delete(workflowKey);
|
|
433
|
+
workflow_1.LoggerProxy.debug(`✅ Removed polling workflow ${workflowKey}`);
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
// If no more polling workflows are registered and leader election is enabled, stop it
|
|
437
|
+
if (this.pollingWorkflows.size === 0 && this.instanceLeaderElection && this.leaderElectionEnabled) {
|
|
438
|
+
workflow_1.LoggerProxy.info(`📴 No more polling workflows - stopping global leader election`);
|
|
439
|
+
try {
|
|
440
|
+
yield this.instanceLeaderElection.stop();
|
|
441
|
+
this.instanceLeaderElection = null;
|
|
442
|
+
this.isLeader = false;
|
|
443
|
+
this.leaderElectionInitialized = false;
|
|
444
|
+
}
|
|
445
|
+
catch (error) {
|
|
446
|
+
workflow_1.LoggerProxy.error(
|
|
447
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/restrict-template-expressions
|
|
448
|
+
`There was a problem stopping global leader election: "${error.message}"`);
|
|
449
|
+
}
|
|
450
|
+
}
|
|
239
451
|
delete this.workflowData[id];
|
|
240
452
|
});
|
|
241
453
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActiveWorkflows.js","sourceRoot":"","sources":["../../../src/lib/ActiveWorkflows.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ActiveWorkflows.js","sourceRoot":"","sources":["../../../src/lib/ActiveWorkflows.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,7 +11,7 @@ exports.LoadNodeParameterOptions = void 0;
|
|
|
11
11
|
const tslib_1 = require("tslib");
|
|
12
12
|
const workflow_1 = require("@fsai-flow/workflow");
|
|
13
13
|
// eslint-disable-next-line import/no-cycle
|
|
14
|
-
const
|
|
14
|
+
const __1 = require("..");
|
|
15
15
|
const TEMP_NODE_NAME = 'Temp-Node';
|
|
16
16
|
const TEMP_WORKFLOW_NAME = 'Temp-Workflow';
|
|
17
17
|
class LoadNodeParameterOptions {
|
|
@@ -79,7 +79,7 @@ class LoadNodeParameterOptions {
|
|
|
79
79
|
nodeType.methods.loadOptions[methodName] === undefined) {
|
|
80
80
|
throw new Error(`The node-type "${node.type}" does not have the method "${methodName}" defined!`);
|
|
81
81
|
}
|
|
82
|
-
const thisArgs =
|
|
82
|
+
const thisArgs = __1.NodeExecuteFunctions.getLoadOptionsFunctions(this.workflow, node, this.path, additionalData);
|
|
83
83
|
try {
|
|
84
84
|
return yield nodeType.methods.loadOptions[methodName].call(thisArgs);
|
|
85
85
|
}
|
|
@@ -135,7 +135,7 @@ class LoadNodeParameterOptions {
|
|
|
135
135
|
const inputData = {
|
|
136
136
|
main: [[{ json: {} }]],
|
|
137
137
|
};
|
|
138
|
-
const optionsData = yield routingNode.runNode(inputData, runIndex, tempNode,
|
|
138
|
+
const optionsData = yield routingNode.runNode(inputData, runIndex, tempNode, __1.NodeExecuteFunctions);
|
|
139
139
|
if ((optionsData === null || optionsData === void 0 ? void 0 : optionsData.length) === 0) {
|
|
140
140
|
return [];
|
|
141
141
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LoadNodeParameterOptions.js","sourceRoot":"","sources":["../../../src/lib/LoadNodeParameterOptions.ts"],"names":[],"mappings":";AAAA,yCAAyC;AACzC,wDAAwD;AACxD,+DAA+D;AAC/D,qEAAqE;AACrE,sDAAsD;AACtD,4DAA4D;AAC5D,6DAA6D;;;;AAE7D,kDAgB6B;AAE7B,2CAA2C;AAC3C,
|
|
1
|
+
{"version":3,"file":"LoadNodeParameterOptions.js","sourceRoot":"","sources":["../../../src/lib/LoadNodeParameterOptions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { IAdditionalCredentialOptions, IAllExecuteFunctions, IBinaryData, ICredentialDataDecryptedObject, IDataObject, IExecuteFunctions, IExecuteSingleFunctions, IHttpRequestOptions, INode, INodeExecutionData, INodeParameters, INodeType, IOAuth2Options, IPollFunctions, IRunExecutionData, ITaskDataConnections, ITriggerFunctions, IWebhookData, IWebhookDescription, IWebhookFunctions, IWorkflowDataProxyAdditionalKeys, IWorkflowExecuteAdditionalData, IWorkflowMetadata, NodeParameterValue, Workflow, WorkflowActivateMode, WorkflowExecuteMode, ISupplyDataFunctions, NodeConnectionType, CloseFunction } from '@fsai-flow/workflow';
|
|
2
2
|
import { OptionsWithUri, OptionsWithUrl } from 'request';
|
|
3
3
|
import * as requestPromise from 'request-promise-native';
|
|
4
|
-
import { ICredentialTestFunctions, IHookFunctions, ILoadOptionsFunctions } from '
|
|
4
|
+
import { ICredentialTestFunctions, IHookFunctions, ILoadOptionsFunctions } from '..';
|
|
5
5
|
/**
|
|
6
6
|
* Returns binary data buffer for given item index and property name.
|
|
7
7
|
*
|
|
@@ -45,7 +45,7 @@ const mime_types_1 = require("mime-types");
|
|
|
45
45
|
const axios_1 = tslib_1.__importDefault(require("axios"));
|
|
46
46
|
const url_1 = require("url");
|
|
47
47
|
const BinaryDataManager_1 = require("./BinaryDataManager");
|
|
48
|
-
const
|
|
48
|
+
const __1 = require("..");
|
|
49
49
|
const fs_1 = require("fs");
|
|
50
50
|
axios_1.default.defaults.timeout = 900000;
|
|
51
51
|
// Prevent axios from adding x-form-www-urlencoded headers by default
|
|
@@ -760,7 +760,6 @@ function getCurrentOAuth2AccessToken(credentialsType, node, additionalData, oAut
|
|
|
760
760
|
client: { id: clientId, secret: clientSecret },
|
|
761
761
|
auth: { tokenHost: authUrl, tokenPath: accessTokenUrl },
|
|
762
762
|
http: { agent: httpAgent },
|
|
763
|
-
options: { authorizationMethod: 'body' },
|
|
764
763
|
};
|
|
765
764
|
if (grantType === 'authorizationCode') {
|
|
766
765
|
const client = new simple_oauth2_1.AuthorizationCode(config);
|
|
@@ -836,9 +835,6 @@ function requestOAuth2(credentialsType_1, requestOptions_1, node_1, additionalDa
|
|
|
836
835
|
http: {
|
|
837
836
|
agent: credentials['httpAgent'],
|
|
838
837
|
},
|
|
839
|
-
options: {
|
|
840
|
-
authorizationMethod: 'body',
|
|
841
|
-
},
|
|
842
838
|
};
|
|
843
839
|
const client = new simple_oauth2_1.AuthorizationCode(config);
|
|
844
840
|
// Construct token from saved data
|
|
@@ -1082,7 +1078,7 @@ function requestWithAuthentication(credentialsType, requestOptions, workflow, no
|
|
|
1082
1078
|
* @returns {(IWorkflowDataProxyAdditionalKeys)}
|
|
1083
1079
|
*/
|
|
1084
1080
|
function getAdditionalKeys(additionalData) {
|
|
1085
|
-
const executionId = additionalData.executionId ||
|
|
1081
|
+
const executionId = additionalData.executionId || __1.PLACEHOLDER_EMPTY_EXECUTION_ID;
|
|
1086
1082
|
return {
|
|
1087
1083
|
$executionId: executionId,
|
|
1088
1084
|
$resumeWebhookUrl: `${additionalData.webhookWaitingBaseUrl}/${executionId}`,
|