@etohq/workflow-engine-redis 1.4.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/loaders/redis.d.ts +2 -2
  2. package/dist/loaders/redis.d.ts.map +1 -1
  3. package/dist/loaders/redis.js +4 -1
  4. package/dist/loaders/redis.js.map +1 -1
  5. package/dist/migrations/Migration20250120111059.d.ts +6 -0
  6. package/dist/migrations/Migration20250120111059.d.ts.map +1 -0
  7. package/dist/migrations/Migration20250120111059.js +14 -0
  8. package/dist/migrations/Migration20250120111059.js.map +1 -0
  9. package/dist/migrations/Migration20250128174354.d.ts +6 -0
  10. package/dist/migrations/Migration20250128174354.d.ts.map +1 -0
  11. package/dist/migrations/Migration20250128174354.js +24 -0
  12. package/dist/migrations/Migration20250128174354.js.map +1 -0
  13. package/dist/migrations/Migration20250505101505.d.ts +6 -0
  14. package/dist/migrations/Migration20250505101505.d.ts.map +1 -0
  15. package/dist/migrations/Migration20250505101505.js +40 -0
  16. package/dist/migrations/Migration20250505101505.js.map +1 -0
  17. package/dist/models/workflow-execution.d.ts +2 -0
  18. package/dist/models/workflow-execution.d.ts.map +1 -1
  19. package/dist/models/workflow-execution.js +7 -0
  20. package/dist/models/workflow-execution.js.map +1 -1
  21. package/dist/services/workflow-orchestrator.d.ts +16 -7
  22. package/dist/services/workflow-orchestrator.d.ts.map +1 -1
  23. package/dist/services/workflow-orchestrator.js +148 -97
  24. package/dist/services/workflow-orchestrator.js.map +1 -1
  25. package/dist/services/workflows-module.d.ts +110 -5
  26. package/dist/services/workflows-module.d.ts.map +1 -1
  27. package/dist/services/workflows-module.js +117 -13
  28. package/dist/services/workflows-module.js.map +1 -1
  29. package/dist/tsconfig.tsbuildinfo +1 -1
  30. package/dist/types/index.d.ts +4 -0
  31. package/dist/types/index.d.ts.map +1 -1
  32. package/dist/utils/workflow-orchestrator-storage.d.ts +15 -4
  33. package/dist/utils/workflow-orchestrator-storage.d.ts.map +1 -1
  34. package/dist/utils/workflow-orchestrator-storage.js +302 -56
  35. package/dist/utils/workflow-orchestrator-storage.js.map +1 -1
  36. package/package.json +11 -11
@@ -1,8 +1,21 @@
1
1
  "use strict";
2
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
3
+ if (kind === "m") throw new TypeError("Private method is not writable");
4
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
5
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
6
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
7
+ };
8
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
10
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
+ };
13
+ var _RedisDistributedTransactionStorage_instances, _RedisDistributedTransactionStorage_isWorkerMode, _RedisDistributedTransactionStorage_preventRaceConditionExecutionIfNecessary;
2
14
  Object.defineProperty(exports, "__esModule", { value: true });
3
15
  exports.RedisDistributedTransactionStorage = void 0;
4
16
  const orchestration_1 = require("@etohq/framework/orchestration");
5
17
  const utils_1 = require("@etohq/framework/utils");
18
+ const core_1 = require("@mikro-orm/core");
6
19
  const bullmq_1 = require("bullmq");
7
20
  var JobType;
8
21
  (function (JobType) {
@@ -11,21 +24,48 @@ var JobType;
11
24
  JobType["STEP_TIMEOUT"] = "step_timeout";
12
25
  JobType["TRANSACTION_TIMEOUT"] = "transaction_timeout";
13
26
  })(JobType || (JobType = {}));
27
+ const ONE_HOUR_IN_MS = 1000 * 60 * 60;
28
+ const REPEATABLE_CLEARER_JOB_ID = "clear-expired-executions";
14
29
  class RedisDistributedTransactionStorage {
15
- constructor({ workflowExecutionService, redisConnection, redisWorkerConnection, redisQueueName, logger, }) {
30
+ constructor({ workflowExecutionService, redisConnection, redisWorkerConnection, redisQueueName, redisJobQueueName, logger, isWorkerMode, }) {
31
+ _RedisDistributedTransactionStorage_instances.add(this);
32
+ _RedisDistributedTransactionStorage_isWorkerMode.set(this, false);
16
33
  this.workflowExecutionService_ = workflowExecutionService;
17
34
  this.logger_ = logger;
18
35
  this.redisClient = redisConnection;
19
36
  this.redisWorkerConnection = redisWorkerConnection;
37
+ this.cleanerQueueName = "workflows-cleaner";
20
38
  this.queueName = redisQueueName;
39
+ this.jobQueueName = redisJobQueueName;
21
40
  this.queue = new bullmq_1.Queue(redisQueueName, { connection: this.redisClient });
41
+ this.jobQueue = isWorkerMode
42
+ ? new bullmq_1.Queue(redisJobQueueName, {
43
+ connection: this.redisClient,
44
+ })
45
+ : undefined;
46
+ this.cleanerQueue_ = isWorkerMode
47
+ ? new bullmq_1.Queue(this.cleanerQueueName, {
48
+ connection: this.redisClient,
49
+ })
50
+ : undefined;
51
+ __classPrivateFieldSet(this, _RedisDistributedTransactionStorage_isWorkerMode, isWorkerMode, "f");
22
52
  }
23
53
  async onApplicationPrepareShutdown() {
24
54
  // Close worker gracefully, i.e. wait for the current jobs to finish
25
55
  await this.worker?.close();
56
+ await this.jobWorker?.close();
57
+ const repeatableJobs = (await this.cleanerQueue_?.getRepeatableJobs()) ?? [];
58
+ for (const job of repeatableJobs) {
59
+ if (job.id === REPEATABLE_CLEARER_JOB_ID) {
60
+ await this.cleanerQueue_?.removeRepeatableByKey(job.key);
61
+ }
62
+ }
63
+ await this.cleanerWorker_?.close();
26
64
  }
27
65
  async onApplicationShutdown() {
28
66
  await this.queue?.close();
67
+ await this.jobQueue?.close();
68
+ await this.cleanerQueue_?.close();
29
69
  }
30
70
  async onApplicationStart() {
31
71
  const allowedJobs = [
@@ -33,32 +73,56 @@ class RedisDistributedTransactionStorage {
33
73
  JobType.STEP_TIMEOUT,
34
74
  JobType.TRANSACTION_TIMEOUT,
35
75
  ];
76
+ const workerOptions = {
77
+ connection: this.redisWorkerConnection,
78
+ };
79
+ // TODO: Remove this once we have released to all clients (Added: v2.6+)
80
+ // Remove all repeatable jobs from the old queue since now we have a queue dedicated to scheduled jobs
81
+ await this.removeAllRepeatableJobs(this.queue);
36
82
  this.worker = new bullmq_1.Worker(this.queueName, async (job) => {
83
+ this.logger_.debug(`executing job ${job.name} from queue ${this.queueName} with the following data: ${JSON.stringify(job.data)}`);
37
84
  if (allowedJobs.includes(job.name)) {
38
- await this.executeTransaction(job.data.workflowId, job.data.transactionId);
85
+ await this.executeTransaction(job.data.workflowId, job.data.transactionId, job.data.transactionMetadata);
39
86
  }
40
- // Note: We might even want a separate worker with different concurrency settings in the future, but for now we keep it simple
41
87
  if (job.name === JobType.SCHEDULE) {
42
- await this.executeScheduledJob(job.data.jobId, job.data.schedulerOptions);
88
+ // Remove repeatable job from the old queue since now we have a queue dedicated to scheduled jobs
89
+ await this.remove(job.data.jobId);
43
90
  }
44
- }, {
45
- connection: this.redisWorkerConnection /*, runRetryDelay: 100000 for tests */,
46
- });
91
+ }, workerOptions);
92
+ if (__classPrivateFieldGet(this, _RedisDistributedTransactionStorage_isWorkerMode, "f")) {
93
+ this.jobWorker = new bullmq_1.Worker(this.jobQueueName, async (job) => {
94
+ this.logger_.debug(`executing scheduled job ${job.data.jobId} from queue ${this.jobQueueName} with the following options: ${JSON.stringify(job.data.schedulerOptions)}`);
95
+ return await this.executeScheduledJob(job.data.jobId, job.data.schedulerOptions);
96
+ }, workerOptions);
97
+ this.cleanerWorker_ = new bullmq_1.Worker(this.cleanerQueueName, async () => {
98
+ await this.clearExpiredExecutions();
99
+ }, { connection: this.redisClient });
100
+ await this.cleanerQueue_?.add("cleaner", {}, {
101
+ repeat: {
102
+ every: ONE_HOUR_IN_MS,
103
+ },
104
+ jobId: REPEATABLE_CLEARER_JOB_ID,
105
+ removeOnComplete: true,
106
+ removeOnFail: true,
107
+ });
108
+ }
47
109
  }
48
110
  setWorkflowOrchestratorService(workflowOrchestratorService) {
49
111
  this.workflowOrchestratorService_ = workflowOrchestratorService;
50
112
  }
51
- async saveToDb(data) {
113
+ async saveToDb(data, retentionTime) {
52
114
  await this.workflowExecutionService_.upsert([
53
115
  {
54
116
  workflow_id: data.flow.modelId,
55
117
  transaction_id: data.flow.transactionId,
118
+ run_id: data.flow.runId,
56
119
  execution: data.flow,
57
120
  context: {
58
121
  data: data.context,
59
122
  errors: data.errors,
60
123
  },
61
124
  state: data.flow.state,
125
+ retention_time: retentionTime,
62
126
  },
63
127
  ]);
64
128
  }
@@ -67,23 +131,28 @@ class RedisDistributedTransactionStorage {
67
131
  {
68
132
  workflow_id: data.flow.modelId,
69
133
  transaction_id: data.flow.transactionId,
134
+ run_id: data.flow.runId,
70
135
  },
71
136
  ]);
72
137
  }
73
- async executeTransaction(workflowId, transactionId) {
138
+ async executeTransaction(workflowId, transactionId, transactionMetadata = {}) {
74
139
  return await this.workflowOrchestratorService_.run(workflowId, {
75
140
  transactionId,
76
141
  logOnError: true,
77
142
  throwOnError: false,
143
+ context: {
144
+ eventGroupId: transactionMetadata.eventGroupId,
145
+ parentStepIdempotencyKey: transactionMetadata.parentStepIdempotencyKey,
146
+ preventReleaseEvents: transactionMetadata.preventReleaseEvents,
147
+ },
78
148
  });
79
149
  }
80
150
  async executeScheduledJob(jobId, schedulerOptions) {
81
151
  try {
82
152
  // TODO: In the case of concurrency being forbidden, we want to generate a predictable transaction ID and rely on the idempotency
83
153
  // of the transaction to ensure that the transaction is only executed once.
84
- return await this.workflowOrchestratorService_.run(jobId, {
154
+ await this.workflowOrchestratorService_.run(jobId, {
85
155
  logOnError: true,
86
- throwOnError: false,
87
156
  });
88
157
  }
89
158
  catch (e) {
@@ -96,43 +165,51 @@ class RedisDistributedTransactionStorage {
96
165
  }
97
166
  }
98
167
  async get(key, options) {
99
- const data = await this.redisClient.get(key);
100
- if (data) {
101
- return JSON.parse(data);
102
- }
103
- const { idempotent } = options ?? {};
104
- if (!idempotent) {
105
- return;
106
- }
107
168
  const [_, workflowId, transactionId] = key.split(":");
108
169
  const trx = await this.workflowExecutionService_
109
- .retrieve({
170
+ .list({
110
171
  workflow_id: workflowId,
111
172
  transaction_id: transactionId,
112
173
  }, {
113
174
  select: ["execution", "context"],
175
+ order: {
176
+ id: "desc",
177
+ },
178
+ take: 1,
114
179
  })
180
+ .then((trx) => trx[0])
115
181
  .catch(() => undefined);
116
182
  if (trx) {
183
+ const rawData = await this.redisClient.get(key);
184
+ let flow, errors;
185
+ if (rawData) {
186
+ const data = JSON.parse(rawData);
187
+ flow = data.flow;
188
+ errors = data.errors;
189
+ }
190
+ const { idempotent } = options ?? {};
191
+ const execution = trx.execution;
192
+ if (!idempotent) {
193
+ const isFailedOrReverted = [
194
+ utils_1.TransactionState.REVERTED,
195
+ utils_1.TransactionState.FAILED,
196
+ ].includes(execution.state);
197
+ const isDone = execution.state === utils_1.TransactionState.DONE;
198
+ const isCancellingAndFailedOrReverted = options?.isCancelling && isFailedOrReverted;
199
+ const isNotCancellingAndDoneOrFailedOrReverted = !options?.isCancelling && (isDone || isFailedOrReverted);
200
+ if (isCancellingAndFailedOrReverted ||
201
+ isNotCancellingAndDoneOrFailedOrReverted) {
202
+ return;
203
+ }
204
+ }
117
205
  return {
118
- flow: trx.execution,
119
- context: trx.context.data,
120
- errors: trx.context.errors,
206
+ flow: flow ?? trx.execution,
207
+ context: trx.context?.data,
208
+ errors: errors ?? trx.context?.errors,
121
209
  };
122
210
  }
123
211
  return;
124
212
  }
125
- async list() {
126
- const keys = await this.redisClient.keys(orchestration_1.DistributedTransaction.keyPrefix + ":*");
127
- const transactions = [];
128
- for (const key of keys) {
129
- const data = await this.redisClient.get(key);
130
- if (data) {
131
- transactions.push(JSON.parse(data));
132
- }
133
- }
134
- return transactions;
135
- }
136
213
  async save(key, data, ttl, options) {
137
214
  /**
138
215
  * Store the retention time only if the transaction is done, failed or reverted.
@@ -144,34 +221,74 @@ class RedisDistributedTransactionStorage {
144
221
  utils_1.TransactionState.REVERTED,
145
222
  ].includes(data.flow.state);
146
223
  const { retentionTime, idempotent } = options ?? {};
147
- if (hasFinished) {
224
+ await __classPrivateFieldGet(this, _RedisDistributedTransactionStorage_instances, "m", _RedisDistributedTransactionStorage_preventRaceConditionExecutionIfNecessary).call(this, {
225
+ data,
226
+ key,
227
+ options,
228
+ });
229
+ if (hasFinished && retentionTime) {
148
230
  Object.assign(data, {
149
231
  retention_time: retentionTime,
150
232
  });
151
233
  }
152
- const stringifiedData = JSON.stringify(data);
234
+ const isNotStarted = data.flow.state === utils_1.TransactionState.NOT_STARTED;
235
+ const isManualTransactionId = !data.flow.transactionId.startsWith("auto-");
236
+ // Only set if not exists
237
+ const shouldSetNX = isNotStarted && isManualTransactionId;
238
+ // Prepare operations to be executed in batch or pipeline
239
+ const data_ = {
240
+ errors: data.errors,
241
+ flow: data.flow,
242
+ };
243
+ const stringifiedData = JSON.stringify(data_);
244
+ const pipeline = this.redisClient.pipeline();
245
+ // Execute Redis operations
153
246
  if (!hasFinished) {
154
247
  if (ttl) {
155
- await this.redisClient.set(key, stringifiedData, "EX", ttl);
248
+ if (shouldSetNX) {
249
+ pipeline.set(key, stringifiedData, "EX", ttl, "NX");
250
+ }
251
+ else {
252
+ pipeline.set(key, stringifiedData, "EX", ttl);
253
+ }
156
254
  }
157
255
  else {
158
- await this.redisClient.set(key, stringifiedData);
256
+ if (shouldSetNX) {
257
+ pipeline.set(key, stringifiedData, "NX");
258
+ }
259
+ else {
260
+ pipeline.set(key, stringifiedData);
261
+ }
159
262
  }
160
263
  }
264
+ else {
265
+ pipeline.unlink(key);
266
+ }
267
+ const pipelinePromise = pipeline.exec().then((result) => {
268
+ if (!shouldSetNX) {
269
+ return result;
270
+ }
271
+ const actionResult = result?.pop();
272
+ const isOk = !!actionResult?.pop();
273
+ if (!isOk) {
274
+ throw new utils_1.EtoError(utils_1.EtoError.Types.INVALID_ARGUMENT, "Transaction already started for transactionId: " +
275
+ data.flow.transactionId);
276
+ }
277
+ return result;
278
+ });
279
+ // Database operations
161
280
  if (hasFinished && !retentionTime && !idempotent) {
162
- await this.deleteFromDb(data);
281
+ await (0, utils_1.promiseAll)([pipelinePromise, this.deleteFromDb(data)]);
163
282
  }
164
283
  else {
165
- await this.saveToDb(data);
166
- }
167
- if (hasFinished) {
168
- await this.redisClient.set(key, stringifiedData, "EX", RedisDistributedTransactionStorage.TTL_AFTER_COMPLETED);
284
+ await (0, utils_1.promiseAll)([pipelinePromise, this.saveToDb(data, retentionTime)]);
169
285
  }
170
286
  }
171
287
  async scheduleRetry(transaction, step, timestamp, interval) {
172
288
  await this.queue.add(JobType.RETRY, {
173
289
  workflowId: transaction.modelId,
174
290
  transactionId: transaction.transactionId,
291
+ transactionMetadata: transaction.getFlow().metadata,
175
292
  stepId: step.id,
176
293
  }, {
177
294
  delay: interval > 0 ? interval * 1000 : undefined,
@@ -186,6 +303,7 @@ class RedisDistributedTransactionStorage {
186
303
  await this.queue.add(JobType.TRANSACTION_TIMEOUT, {
187
304
  workflowId: transaction.modelId,
188
305
  transactionId: transaction.transactionId,
306
+ transactionMetadata: transaction.getFlow().metadata,
189
307
  }, {
190
308
  delay: interval * 1000,
191
309
  jobId: this.getJobId(JobType.TRANSACTION_TIMEOUT, transaction),
@@ -199,6 +317,7 @@ class RedisDistributedTransactionStorage {
199
317
  await this.queue.add(JobType.STEP_TIMEOUT, {
200
318
  workflowId: transaction.modelId,
201
319
  transactionId: transaction.transactionId,
320
+ transactionMetadata: transaction.getFlow().metadata,
202
321
  stepId: step.id,
203
322
  }, {
204
323
  delay: interval * 1000,
@@ -221,24 +340,41 @@ class RedisDistributedTransactionStorage {
221
340
  }
222
341
  async removeJob(type, transaction, step) {
223
342
  const jobId = this.getJobId(type, transaction, step);
224
- const job = await this.queue.getJob(jobId);
225
- if (job && job.attemptsStarted === 0) {
226
- await job.remove();
343
+ if (type === JobType.SCHEDULE) {
344
+ const job = await this.jobQueue?.getJob(jobId);
345
+ if (job) {
346
+ await job.remove();
347
+ }
348
+ }
349
+ else {
350
+ const job = await this.queue.getJob(jobId);
351
+ if (job && job.attemptsStarted === 0) {
352
+ await job.remove();
353
+ }
227
354
  }
228
355
  }
229
356
  /* Scheduler storage methods */
230
357
  async schedule(jobDefinition, schedulerOptions) {
231
358
  const jobId = typeof jobDefinition === "string" ? jobDefinition : jobDefinition.jobId;
359
+ if ("cron" in schedulerOptions && "interval" in schedulerOptions) {
360
+ throw new Error(`Unable to register a job with both scheduler options interval and cron.`);
361
+ }
362
+ const repeatOptions = {
363
+ limit: schedulerOptions.numberOfExecutions,
364
+ key: `${JobType.SCHEDULE}_${jobId}`,
365
+ };
366
+ if ("cron" in schedulerOptions) {
367
+ repeatOptions.pattern = schedulerOptions.cron;
368
+ }
369
+ else {
370
+ repeatOptions.every = schedulerOptions.interval;
371
+ }
232
372
  // If it is the same key (eg. the same workflow name), the old one will get overridden.
233
- await this.queue.add(JobType.SCHEDULE, {
373
+ await this.jobQueue?.add(JobType.SCHEDULE, {
234
374
  jobId,
235
375
  schedulerOptions,
236
376
  }, {
237
- repeat: {
238
- pattern: schedulerOptions.cron,
239
- limit: schedulerOptions.numberOfExecutions,
240
- key: `${JobType.SCHEDULE}_${jobId}`,
241
- },
377
+ repeat: repeatOptions,
242
378
  removeOnComplete: {
243
379
  age: 86400,
244
380
  count: 1000,
@@ -250,13 +386,123 @@ class RedisDistributedTransactionStorage {
250
386
  });
251
387
  }
252
388
  async remove(jobId) {
253
- await this.queue.removeRepeatableByKey(`${JobType.SCHEDULE}_${jobId}`);
389
+ await this.jobQueue?.removeRepeatableByKey(`${JobType.SCHEDULE}_${jobId}`);
254
390
  }
255
391
  async removeAll() {
256
- const repeatableJobs = await this.queue.getRepeatableJobs();
257
- await (0, utils_1.promiseAll)(repeatableJobs.map((job) => this.queue.removeRepeatableByKey(job.key)));
392
+ return await this.removeAllRepeatableJobs(this.jobQueue);
393
+ }
394
+ async removeAllRepeatableJobs(queue) {
395
+ const repeatableJobs = (await queue.getRepeatableJobs()) ?? [];
396
+ await (0, utils_1.promiseAll)(repeatableJobs.map((job) => queue.removeRepeatableByKey(job.key)));
397
+ }
398
+ async clearExpiredExecutions() {
399
+ await this.workflowExecutionService_.delete({
400
+ retention_time: {
401
+ $ne: null,
402
+ },
403
+ updated_at: {
404
+ $lte: (0, core_1.raw)((alias) => `CURRENT_TIMESTAMP - (INTERVAL '1 second' * "retention_time")`),
405
+ },
406
+ state: {
407
+ $in: [
408
+ utils_1.TransactionState.DONE,
409
+ utils_1.TransactionState.FAILED,
410
+ utils_1.TransactionState.REVERTED,
411
+ ],
412
+ },
413
+ });
258
414
  }
259
415
  }
260
416
  exports.RedisDistributedTransactionStorage = RedisDistributedTransactionStorage;
261
- RedisDistributedTransactionStorage.TTL_AFTER_COMPLETED = 60 * 2; // 2 minutes
417
+ _RedisDistributedTransactionStorage_isWorkerMode = new WeakMap(), _RedisDistributedTransactionStorage_instances = new WeakSet(), _RedisDistributedTransactionStorage_preventRaceConditionExecutionIfNecessary = async function _RedisDistributedTransactionStorage_preventRaceConditionExecutionIfNecessary({ data, key, options, }) {
418
+ const isInitialCheckpoint = [utils_1.TransactionState.NOT_STARTED].includes(data.flow.state);
419
+ /**
420
+ * In case many execution can succeed simultaneously, we need to ensure that the latest
421
+ * execution does continue if a previous execution is considered finished
422
+ */
423
+ const currentFlow = data.flow;
424
+ const rawData = await this.redisClient.get(key);
425
+ let data_ = {};
426
+ if (rawData) {
427
+ data_ = JSON.parse(rawData);
428
+ }
429
+ else {
430
+ const getOptions = {
431
+ ...options,
432
+ isCancelling: !!data.flow.cancelledAt,
433
+ };
434
+ data_ =
435
+ (await this.get(key, getOptions)) ??
436
+ { flow: {} };
437
+ }
438
+ const { flow: latestUpdatedFlow } = data_;
439
+ if (!isInitialCheckpoint && !(0, utils_1.isPresent)(latestUpdatedFlow)) {
440
+ /**
441
+ * the initial checkpoint expect no other checkpoint to have been stored.
442
+ * In case it is not the initial one and another checkpoint is trying to
443
+ * find if a concurrent execution has finished, we skip the execution.
444
+ * The already finished execution would have deleted the checkpoint already.
445
+ */
446
+ throw new orchestration_1.SkipExecutionError("Already finished by another execution");
447
+ }
448
+ // First ensure that the latest execution was not cancelled, otherwise we skip the execution
449
+ const latestTransactionCancelledAt = latestUpdatedFlow.cancelledAt;
450
+ const currentTransactionCancelledAt = currentFlow.cancelledAt;
451
+ if (!!latestTransactionCancelledAt &&
452
+ currentTransactionCancelledAt == null) {
453
+ throw new orchestration_1.SkipCancelledExecutionError("Workflow execution has been cancelled during the execution");
454
+ }
455
+ const currentFlowSteps = Object.values(currentFlow.steps || {});
456
+ const latestUpdatedFlowSteps = latestUpdatedFlow.steps
457
+ ? Object.values(latestUpdatedFlow.steps)
458
+ : [];
459
+ // Predefined states for quick lookup
460
+ const invokingStates = [
461
+ utils_1.TransactionStepState.INVOKING,
462
+ utils_1.TransactionStepState.NOT_STARTED,
463
+ ];
464
+ const compensatingStates = [
465
+ utils_1.TransactionStepState.COMPENSATING,
466
+ utils_1.TransactionStepState.NOT_STARTED,
467
+ ];
468
+ const isInvokingState = (step) => invokingStates.includes(step.invoke?.state);
469
+ const isCompensatingState = (step) => compensatingStates.includes(step.compensate?.state);
470
+ const currentFlowLastInvokingStepIndex = currentFlowSteps.findIndex(isInvokingState);
471
+ const latestUpdatedFlowLastInvokingStepIndex = !latestUpdatedFlow.steps
472
+ ? 1 // There is no other execution, so the current execution is the latest
473
+ : latestUpdatedFlowSteps.findIndex(isInvokingState);
474
+ const reversedCurrentFlowSteps = [...currentFlowSteps].reverse();
475
+ const currentFlowLastCompensatingStepIndex = reversedCurrentFlowSteps.findIndex(isCompensatingState);
476
+ const reversedLatestUpdatedFlowSteps = [...latestUpdatedFlowSteps].reverse();
477
+ const latestUpdatedFlowLastCompensatingStepIndex = !latestUpdatedFlow.steps
478
+ ? -1
479
+ : reversedLatestUpdatedFlowSteps.findIndex(isCompensatingState);
480
+ const isLatestExecutionFinishedIndex = -1;
481
+ const invokeShouldBeSkipped = (latestUpdatedFlowLastInvokingStepIndex ===
482
+ isLatestExecutionFinishedIndex ||
483
+ currentFlowLastInvokingStepIndex <
484
+ latestUpdatedFlowLastInvokingStepIndex) &&
485
+ currentFlowLastInvokingStepIndex !== isLatestExecutionFinishedIndex;
486
+ const compensateShouldBeSkipped = currentFlowLastCompensatingStepIndex <
487
+ latestUpdatedFlowLastCompensatingStepIndex &&
488
+ currentFlowLastCompensatingStepIndex !== isLatestExecutionFinishedIndex &&
489
+ latestUpdatedFlowLastCompensatingStepIndex !==
490
+ isLatestExecutionFinishedIndex;
491
+ const isCompensatingMismatch = latestUpdatedFlow.state === utils_1.TransactionState.COMPENSATING &&
492
+ ![utils_1.TransactionState.REVERTED, utils_1.TransactionState.FAILED].includes(currentFlow.state) &&
493
+ currentFlow.state !== latestUpdatedFlow.state;
494
+ const isRevertedMismatch = latestUpdatedFlow.state === utils_1.TransactionState.REVERTED &&
495
+ currentFlow.state !== utils_1.TransactionState.REVERTED;
496
+ const isFailedMismatch = latestUpdatedFlow.state === utils_1.TransactionState.FAILED &&
497
+ currentFlow.state !== utils_1.TransactionState.FAILED;
498
+ if ((data.flow.state !== utils_1.TransactionState.COMPENSATING &&
499
+ invokeShouldBeSkipped) ||
500
+ (data.flow.state === utils_1.TransactionState.COMPENSATING &&
501
+ compensateShouldBeSkipped) ||
502
+ isCompensatingMismatch ||
503
+ isRevertedMismatch ||
504
+ isFailedMismatch) {
505
+ throw new orchestration_1.SkipExecutionError("Already finished by another execution");
506
+ }
507
+ };
262
508
  //# sourceMappingURL=workflow-orchestrator-storage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-orchestrator-storage.js","sourceRoot":"","sources":["../../src/utils/workflow-orchestrator-storage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workflow-orchestrator-storage.js","sourceRoot":"","sources":["../../src/utils/workflow-orchestrator-storage.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@etohq/workflow-engine-redis",
3
- "version": "1.4.0",
3
+ "version": "1.5.0",
4
4
  "description": "Eto Workflow Orchestrator module using Redis to track workflows executions",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -24,10 +24,10 @@
24
24
  "author": "Eto",
25
25
  "license": "MIT",
26
26
  "devDependencies": {
27
- "@mikro-orm/cli": "5.9.7",
28
- "@mikro-orm/core": "5.9.7",
29
- "@mikro-orm/migrations": "5.9.7",
30
- "@mikro-orm/postgresql": "5.9.7",
27
+ "@mikro-orm/cli": "6.4.3",
28
+ "@mikro-orm/core": "6.4.3",
29
+ "@mikro-orm/migrations": "6.4.3",
30
+ "@mikro-orm/postgresql": "6.4.3",
31
31
  "@swc/core": "1.7.28",
32
32
  "@swc/jest": "0.2.36",
33
33
  "@types/jest": "29.5.14",
@@ -35,8 +35,8 @@
35
35
  "rimraf": "5.0.2",
36
36
  "tsc-alias": "1.8.6",
37
37
  "typescript": "5.8.3",
38
- "@etohq/test-utils": "1.4.0",
39
- "@etohq/framework": "1.4.0"
38
+ "@etohq/test-utils": "1.5.0",
39
+ "@etohq/framework": "1.5.0"
40
40
  },
41
41
  "dependencies": {
42
42
  "awilix": "8.0.1",
@@ -45,11 +45,11 @@
45
45
  "ulid": "2.3.0"
46
46
  },
47
47
  "peerDependencies": {
48
- "@mikro-orm/core": "5.9.7",
49
- "@mikro-orm/migrations": "5.9.7",
50
- "@mikro-orm/postgresql": "5.9.7",
48
+ "@mikro-orm/core": "6.4.3",
49
+ "@mikro-orm/migrations": "6.4.3",
50
+ "@mikro-orm/postgresql": "6.4.3",
51
51
  "awilix": "8.0.1",
52
- "@etohq/framework": "1.4.0"
52
+ "@etohq/framework": "1.5.0"
53
53
  },
54
54
  "scripts": {
55
55
  "watch": "tsc --build --watch",