mongodash 2.0.0 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. package/README.md +107 -23
  2. package/dist/dashboard/index.html +40 -0
  3. package/dist/lib/playground/server.js +124 -0
  4. package/dist/lib/playground/server.js.map +1 -0
  5. package/dist/lib/src/ConcurrentRunner.js +141 -0
  6. package/dist/lib/src/ConcurrentRunner.js.map +1 -0
  7. package/dist/lib/{OnError.js → src/OnError.js} +2 -9
  8. package/dist/lib/src/OnError.js.map +1 -0
  9. package/dist/lib/{OnInfo.js → src/OnInfo.js} +5 -9
  10. package/dist/lib/src/OnInfo.js.map +1 -0
  11. package/dist/lib/{createContinuousLock.js → src/createContinuousLock.js} +4 -9
  12. package/dist/lib/src/createContinuousLock.js.map +1 -0
  13. package/dist/lib/{cronTasks.js → src/cronTasks.js} +128 -79
  14. package/dist/lib/src/cronTasks.js.map +1 -0
  15. package/dist/lib/{getCollection.js → src/getCollection.js} +1 -8
  16. package/dist/lib/src/getCollection.js.map +1 -0
  17. package/dist/lib/{getMongoClient.js → src/getMongoClient.js} +1 -8
  18. package/dist/lib/src/getMongoClient.js.map +1 -0
  19. package/dist/lib/src/globalsCollection.js +3 -0
  20. package/dist/lib/src/globalsCollection.js.map +1 -0
  21. package/dist/lib/src/index.js +94 -0
  22. package/dist/lib/src/index.js.map +1 -0
  23. package/dist/lib/src/initPromise.js +9 -0
  24. package/dist/lib/src/initPromise.js.map +1 -0
  25. package/dist/lib/src/mongoCompatibility.js +3 -0
  26. package/dist/lib/src/mongoCompatibility.js.map +1 -0
  27. package/dist/lib/src/parseInterval.js +53 -0
  28. package/dist/lib/src/parseInterval.js.map +1 -0
  29. package/dist/lib/src/prefixFilterKeys.js +62 -0
  30. package/dist/lib/src/prefixFilterKeys.js.map +1 -0
  31. package/dist/lib/src/processInBatches.js +39 -0
  32. package/dist/lib/src/processInBatches.js.map +1 -0
  33. package/dist/lib/src/reactiveTasks/LeaderElector.js +148 -0
  34. package/dist/lib/src/reactiveTasks/LeaderElector.js.map +1 -0
  35. package/dist/lib/src/reactiveTasks/MetricsCollector.js +403 -0
  36. package/dist/lib/src/reactiveTasks/MetricsCollector.js.map +1 -0
  37. package/dist/lib/src/reactiveTasks/ReactiveTaskManager.js +281 -0
  38. package/dist/lib/src/reactiveTasks/ReactiveTaskManager.js.map +1 -0
  39. package/dist/lib/src/reactiveTasks/ReactiveTaskOps.js +178 -0
  40. package/dist/lib/src/reactiveTasks/ReactiveTaskOps.js.map +1 -0
  41. package/dist/lib/src/reactiveTasks/ReactiveTaskPlanner.js +436 -0
  42. package/dist/lib/src/reactiveTasks/ReactiveTaskPlanner.js.map +1 -0
  43. package/dist/lib/src/reactiveTasks/ReactiveTaskReconciler.js +211 -0
  44. package/dist/lib/src/reactiveTasks/ReactiveTaskReconciler.js.map +1 -0
  45. package/dist/lib/src/reactiveTasks/ReactiveTaskRegistry.js +177 -0
  46. package/dist/lib/src/reactiveTasks/ReactiveTaskRegistry.js.map +1 -0
  47. package/dist/lib/src/reactiveTasks/ReactiveTaskRepository.js +348 -0
  48. package/dist/lib/src/reactiveTasks/ReactiveTaskRepository.js.map +1 -0
  49. package/dist/lib/src/reactiveTasks/ReactiveTaskRetryStrategy.js +146 -0
  50. package/dist/lib/src/reactiveTasks/ReactiveTaskRetryStrategy.js.map +1 -0
  51. package/dist/lib/src/reactiveTasks/ReactiveTaskTypes.js +27 -0
  52. package/dist/lib/src/reactiveTasks/ReactiveTaskTypes.js.map +1 -0
  53. package/dist/lib/src/reactiveTasks/ReactiveTaskWorker.js +179 -0
  54. package/dist/lib/src/reactiveTasks/ReactiveTaskWorker.js.map +1 -0
  55. package/dist/lib/src/reactiveTasks/compileWatchProjection.js +58 -0
  56. package/dist/lib/src/reactiveTasks/compileWatchProjection.js.map +1 -0
  57. package/dist/lib/src/reactiveTasks/index.js +291 -0
  58. package/dist/lib/src/reactiveTasks/index.js.map +1 -0
  59. package/dist/lib/src/reactiveTasks/queryToExpression.js +153 -0
  60. package/dist/lib/src/reactiveTasks/queryToExpression.js.map +1 -0
  61. package/dist/lib/src/reactiveTasks/validateTaskFilter.js +81 -0
  62. package/dist/lib/src/reactiveTasks/validateTaskFilter.js.map +1 -0
  63. package/dist/lib/src/task-management/OperationalTaskController.js +155 -0
  64. package/dist/lib/src/task-management/OperationalTaskController.js.map +1 -0
  65. package/dist/lib/src/task-management/index.js +20 -0
  66. package/dist/lib/src/task-management/index.js.map +1 -0
  67. package/dist/lib/src/task-management/serveDashboard.js +142 -0
  68. package/dist/lib/src/task-management/serveDashboard.js.map +1 -0
  69. package/dist/lib/src/task-management/types.js +3 -0
  70. package/dist/lib/src/task-management/types.js.map +1 -0
  71. package/dist/lib/{withLock.js → src/withLock.js} +2 -10
  72. package/dist/lib/src/withLock.js.map +1 -0
  73. package/dist/lib/{withTransaction.js → src/withTransaction.js} +3 -10
  74. package/dist/lib/src/withTransaction.js.map +1 -0
  75. package/dist/lib/tools/check-db-connection.js +21 -0
  76. package/dist/lib/tools/check-db-connection.js.map +1 -0
  77. package/dist/lib/tools/clean-testing-databases.js +5 -0
  78. package/dist/lib/tools/clean-testing-databases.js.map +1 -0
  79. package/dist/lib/tools/prepare-republish.js +20 -0
  80. package/dist/lib/tools/prepare-republish.js.map +1 -0
  81. package/dist/lib/tools/test-matrix-local.js +205 -0
  82. package/dist/lib/tools/test-matrix-local.js.map +1 -0
  83. package/dist/lib/tools/testingDatabase.js +48 -0
  84. package/dist/lib/tools/testingDatabase.js.map +1 -0
  85. package/dist/types/playground/server.d.ts +1 -0
  86. package/dist/types/src/ConcurrentRunner.d.ts +30 -0
  87. package/dist/types/{OnInfo.d.ts → src/OnInfo.d.ts} +1 -1
  88. package/dist/types/{cronTasks.d.ts → src/cronTasks.d.ts} +44 -1
  89. package/dist/types/src/globalsCollection.d.ts +4 -0
  90. package/dist/types/src/index.d.ts +28 -0
  91. package/dist/types/src/mongoCompatibility.d.ts +29 -0
  92. package/dist/types/src/parseInterval.d.ts +12 -0
  93. package/dist/types/src/prefixFilterKeys.d.ts +11 -0
  94. package/dist/types/src/processInBatches.d.ts +10 -0
  95. package/dist/types/src/reactiveTasks/LeaderElector.d.ts +42 -0
  96. package/dist/types/src/reactiveTasks/MetricsCollector.d.ts +73 -0
  97. package/dist/types/src/reactiveTasks/ReactiveTaskManager.d.ts +18 -0
  98. package/dist/types/src/reactiveTasks/ReactiveTaskOps.d.ts +17 -0
  99. package/dist/types/src/reactiveTasks/ReactiveTaskPlanner.d.ts +62 -0
  100. package/dist/types/src/reactiveTasks/ReactiveTaskReconciler.d.ts +29 -0
  101. package/dist/types/src/reactiveTasks/ReactiveTaskRegistry.d.ts +34 -0
  102. package/dist/types/src/reactiveTasks/ReactiveTaskRepository.d.ts +59 -0
  103. package/dist/types/src/reactiveTasks/ReactiveTaskRetryStrategy.d.ts +21 -0
  104. package/dist/types/src/reactiveTasks/ReactiveTaskTypes.d.ts +389 -0
  105. package/dist/types/src/reactiveTasks/ReactiveTaskWorker.d.ts +36 -0
  106. package/dist/types/src/reactiveTasks/compileWatchProjection.d.ts +12 -0
  107. package/dist/types/src/reactiveTasks/index.d.ts +82 -0
  108. package/dist/types/src/reactiveTasks/queryToExpression.d.ts +13 -0
  109. package/dist/types/src/reactiveTasks/validateTaskFilter.d.ts +10 -0
  110. package/dist/types/src/task-management/OperationalTaskController.d.ts +59 -0
  111. package/dist/types/src/task-management/index.d.ts +3 -0
  112. package/dist/types/src/task-management/serveDashboard.d.ts +12 -0
  113. package/dist/types/src/task-management/types.d.ts +95 -0
  114. package/dist/types/tools/check-db-connection.d.ts +2 -0
  115. package/dist/types/tools/clean-testing-databases.d.ts +1 -0
  116. package/dist/types/tools/prepare-republish.d.ts +2 -0
  117. package/dist/types/tools/test-matrix-local.d.ts +1 -0
  118. package/dist/types/tools/testingDatabase.d.ts +2 -0
  119. package/docs/.vitepress/cache/deps/_metadata.json +31 -0
  120. package/docs/.vitepress/cache/deps/chunk-LE5NDSFD.js +12824 -0
  121. package/docs/.vitepress/cache/deps/chunk-LE5NDSFD.js.map +7 -0
  122. package/docs/.vitepress/cache/deps/package.json +3 -0
  123. package/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js +4505 -0
  124. package/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js.map +7 -0
  125. package/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js +9731 -0
  126. package/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js.map +7 -0
  127. package/docs/.vitepress/cache/deps/vue.js +347 -0
  128. package/docs/.vitepress/cache/deps/vue.js.map +7 -0
  129. package/docs/.vitepress/config.mts +50 -0
  130. package/docs/.vitepress/theme/index.ts +4 -0
  131. package/docs/.vitepress/theme/style.css +21 -0
  132. package/docs/assets/dashboard.png +0 -0
  133. package/docs/cron-tasks.md +172 -0
  134. package/docs/dashboard.md +117 -0
  135. package/docs/getters.md +31 -0
  136. package/docs/getting-started.md +186 -0
  137. package/docs/index.md +32 -0
  138. package/docs/initialization.md +59 -0
  139. package/docs/process-in-batches.md +73 -0
  140. package/docs/public/logo.png +0 -0
  141. package/docs/reactive-tasks.md +913 -0
  142. package/docs/with-lock.md +45 -0
  143. package/docs/with-transaction.md +65 -0
  144. package/grafana/reactive_tasks.json +765 -0
  145. package/package.json +131 -116
  146. package/dist/lib/OnError.js.map +0 -1
  147. package/dist/lib/OnInfo.js.map +0 -1
  148. package/dist/lib/createContinuousLock.js.map +0 -1
  149. package/dist/lib/cronTasks.js.map +0 -1
  150. package/dist/lib/getCollection.js.map +0 -1
  151. package/dist/lib/getMongoClient.js.map +0 -1
  152. package/dist/lib/index.js +0 -64
  153. package/dist/lib/index.js.map +0 -1
  154. package/dist/lib/initPromise.js +0 -17
  155. package/dist/lib/initPromise.js.map +0 -1
  156. package/dist/lib/withLock.js.map +0 -1
  157. package/dist/lib/withTransaction.js.map +0 -1
  158. package/dist/types/index.d.ts +0 -17
  159. /package/dist/types/{OnError.d.ts → src/OnError.d.ts} +0 -0
  160. /package/dist/types/{createContinuousLock.d.ts → src/createContinuousLock.d.ts} +0 -0
  161. /package/dist/types/{getCollection.d.ts → src/getCollection.d.ts} +0 -0
  162. /package/dist/types/{getMongoClient.d.ts → src/getMongoClient.d.ts} +0 -0
  163. /package/dist/types/{initPromise.d.ts → src/initPromise.d.ts} +0 -0
  164. /package/dist/types/{withLock.d.ts → src/withLock.d.ts} +0 -0
  165. /package/dist/types/{withTransaction.d.ts → src/withTransaction.d.ts} +0 -0
@@ -0,0 +1,348 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ReactiveTaskRepository = void 0;
4
+ const OnError_1 = require("../OnError");
5
+ const OnInfo_1 = require("../OnInfo");
6
+ const processInBatches_1 = require("../processInBatches");
7
+ const ReactiveTaskTypes_1 = require("./ReactiveTaskTypes");
8
+ /**
9
+ * Handles all database interactions for reactive tasks.
10
+ *
11
+ * Responsibilities:
12
+ * - Generates MongoDB operations for creating, updating, and deleting tasks.
13
+ * - Manages task state transitions (pending -> processing -> completed/failed).
14
+ * - Implements the locking mechanism for task execution.
15
+ * - Handles task finalization (retries, completion, failure).
16
+ * - Manages database indexes for performance.
17
+ * - Cleans up orphaned tasks.
18
+ */
19
+ class ReactiveTaskRepository {
20
+ constructor(tasksCollection, onInfo = OnInfo_1.defaultOnInfo, onError = OnError_1.defaultOnError) {
21
+ this.tasksCollection = tasksCollection;
22
+ this.onInfo = onInfo;
23
+ this.onError = onError;
24
+ this.initPromise = this.ensureIndexes();
25
+ }
26
+ async findAndLockNextTask(taskDefs, options) {
27
+ const now = new Date();
28
+ const lockExpiresAt = new Date(now.getTime() + options.visibilityTimeoutMs);
29
+ const filter = {
30
+ task: { $in: taskDefs.map((c) => c.task) },
31
+ $or: [
32
+ {
33
+ status: { $in: ['pending', 'processing_dirty'] },
34
+ scheduledAt: { $lte: now },
35
+ $or: [{ lockExpiresAt: { $lt: now } }, { lockExpiresAt: { $exists: false } }, { lockExpiresAt: null }],
36
+ },
37
+ {
38
+ status: 'processing',
39
+ lockExpiresAt: { $lt: now },
40
+ },
41
+ ],
42
+ };
43
+ const update = {
44
+ $set: {
45
+ status: 'processing',
46
+ lockExpiresAt: lockExpiresAt,
47
+ startedAt: now,
48
+ },
49
+ $inc: { attempts: 1 },
50
+ };
51
+ try {
52
+ const result = await this.tasksCollection.findOneAndUpdate(filter, update, {
53
+ sort: { scheduledAt: 1 },
54
+ returnDocument: 'after',
55
+ includeResultMetadata: true,
56
+ });
57
+ // In MongoDB v4, findOneAndUpdate returns { value: T } by default.
58
+ // In MongoDB v6+, if includeResultMetadata: true, it returns { value: T }.
59
+ // If we cast options to any, TS might infer return type as Document or ModifyResult depending on library version.
60
+ // We treat 'result' as any or check strictly.
61
+ // result is derived from findOneAndUpdate which is generic.
62
+ // Should be safe to access .value if runtime behaves as expected.
63
+ return result.value || null;
64
+ }
65
+ catch (error) {
66
+ this.onError(error);
67
+ return null;
68
+ }
69
+ }
70
+ async finalizeTask(taskRecord, strategy, error, debounceMs = 1000, executionStats, executionHistoryLimit = 5) {
71
+ var _a;
72
+ const isError = !!error;
73
+ const errorMessage = (error === null || error === void 0 ? void 0 : error.message) || 'Unknown error';
74
+ // Determine First Error At
75
+ let firstErrorAt = taskRecord.firstErrorAt;
76
+ if (isError && !firstErrorAt) {
77
+ firstErrorAt = new Date();
78
+ }
79
+ else if (!isError) {
80
+ firstErrorAt = null; // Reset on success
81
+ }
82
+ const attempts = taskRecord.attempts || 0;
83
+ const shouldFail = isError && strategy.shouldFail(attempts, firstErrorAt);
84
+ const nextRetryScheduledAt = isError && !shouldFail ? strategy.calculateNextRetry(attempts) : null;
85
+ const updateSet = {
86
+ status: {
87
+ $cond: {
88
+ if: { $eq: ['$status', 'processing_dirty'] },
89
+ then: 'pending',
90
+ else: isError ? (shouldFail ? 'failed' : 'pending') : 'completed',
91
+ },
92
+ },
93
+ scheduledAt: {
94
+ $cond: {
95
+ if: { $eq: ['$status', 'processing_dirty'] },
96
+ then: { $add: ['$updatedAt', debounceMs] },
97
+ else: isError ? (shouldFail ? '$scheduledAt' : nextRetryScheduledAt) : '$scheduledAt',
98
+ },
99
+ },
100
+ completedAt: {
101
+ $cond: {
102
+ if: { $eq: ['$status', 'processing_dirty'] },
103
+ then: '$completedAt',
104
+ else: isError ? '$completedAt' : new Date(),
105
+ },
106
+ },
107
+ lockExpiresAt: null,
108
+ firstErrorAt: {
109
+ $cond: {
110
+ if: { $eq: ['$status', 'processing_dirty'] },
111
+ then: '$firstErrorAt',
112
+ else: firstErrorAt,
113
+ },
114
+ },
115
+ lastError: {
116
+ $cond: {
117
+ if: { $eq: ['$status', 'processing_dirty'] },
118
+ then: '$lastError',
119
+ else: isError ? errorMessage : null,
120
+ },
121
+ },
122
+ lastFinalizedAt: new Date(),
123
+ };
124
+ const durationMs = (_a = executionStats === null || executionStats === void 0 ? void 0 : executionStats.durationMs) !== null && _a !== void 0 ? _a : 0;
125
+ const historyEntry = Object.assign({ at: new Date(), status: isError ? 'failed' : 'completed', durationMs: durationMs }, (isError ? { error: errorMessage } : {}));
126
+ if (!isError) {
127
+ updateSet.lastSuccess = {
128
+ at: new Date(),
129
+ durationMs: durationMs,
130
+ };
131
+ }
132
+ await this.tasksCollection.updateOne({ _id: taskRecord._id }, [
133
+ {
134
+ $set: updateSet,
135
+ },
136
+ {
137
+ $set: {
138
+ executionHistory: {
139
+ $slice: [
140
+ {
141
+ $concatArrays: [{ $ifNull: ['$executionHistory', []] }, [historyEntry]],
142
+ },
143
+ -executionHistoryLimit, // Keep last N
144
+ ],
145
+ },
146
+ },
147
+ },
148
+ ]);
149
+ }
150
+ async deferTask(taskRecord, delay) {
151
+ var _a;
152
+ const now = Date.now();
153
+ const newScheduledAt = typeof delay === 'number' ? new Date(now + delay) : delay;
154
+ const originalScheduledAt = (_a = taskRecord.initialScheduledAt) !== null && _a !== void 0 ? _a : taskRecord.scheduledAt;
155
+ await this.tasksCollection.updateOne({ _id: taskRecord._id }, {
156
+ $set: {
157
+ status: 'pending',
158
+ scheduledAt: newScheduledAt,
159
+ initialScheduledAt: originalScheduledAt,
160
+ lockExpiresAt: null,
161
+ attempts: 0,
162
+ },
163
+ });
164
+ }
165
+ async executeBulkWrite(operations, options) {
166
+ await this.tasksCollection.bulkWrite(operations, options || {});
167
+ }
168
+ async findTasks(filter, options = {}) {
169
+ return this.tasksCollection.find(filter, options).toArray();
170
+ }
171
+ async countTasks(filter) {
172
+ return this.tasksCollection.countDocuments(filter);
173
+ }
174
+ async updateTasks(filter, update) {
175
+ const result = await this.tasksCollection.updateMany(filter, update);
176
+ return {
177
+ matchedCount: result.matchedCount,
178
+ modifiedCount: result.modifiedCount,
179
+ };
180
+ }
181
+ async resetTasks(filter) {
182
+ const updatePipeline = [
183
+ {
184
+ $set: {
185
+ updatedAt: '$$NOW',
186
+ status: {
187
+ $cond: {
188
+ if: { $in: ['$status', ['processing', 'processing_dirty']] },
189
+ then: 'processing_dirty',
190
+ else: 'pending',
191
+ },
192
+ },
193
+ scheduledAt: {
194
+ $cond: {
195
+ if: { $in: ['$status', ['processing', 'processing_dirty']] },
196
+ then: '$scheduledAt',
197
+ else: '$$NOW',
198
+ },
199
+ },
200
+ // Preserve history - don't reset attempts, firstErrorAt, or lastError
201
+ initialScheduledAt: { $ifNull: ['$initialScheduledAt', '$scheduledAt'] },
202
+ },
203
+ },
204
+ ];
205
+ const result = await this.tasksCollection.updateMany(filter, updatePipeline);
206
+ return {
207
+ matchedCount: result.matchedCount,
208
+ modifiedCount: result.modifiedCount,
209
+ };
210
+ }
211
+ async resetTasksForUpgrade(taskName, mode) {
212
+ const filter = { task: taskName };
213
+ if (mode === 'failed') {
214
+ filter.status = 'failed';
215
+ }
216
+ else if (mode === 'all') {
217
+ filter.status = { $in: ['failed', 'completed'] };
218
+ }
219
+ // Use safe reset logic
220
+ const result = await this.resetTasks(filter);
221
+ return { modifiedCount: result.modifiedCount };
222
+ }
223
+ async ensureIndexes() {
224
+ // Optimized index for findAndLockNextTask (ESR Rule Compliance)
225
+ // 1. Equality: task (since we query by IN loop usually, and it's always equality context)
226
+ // 2. Status: status is next
227
+ await this.tasksCollection.createIndex({
228
+ task: 1,
229
+ status: 1,
230
+ scheduledAt: 1,
231
+ lockExpiresAt: 1,
232
+ });
233
+ // Unique index to ensure one task per task definition per source document
234
+ await this.tasksCollection.createIndex({ sourceDocId: 1, task: 1 }, { unique: true });
235
+ }
236
+ /**
237
+ * Periodically cleans up orphaned tasks that match the cleanupPolicy.
238
+ * This runs on a schedule (e.g. hourly) in the Leader instance.
239
+ */
240
+ async deleteOrphanedTasks(taskName, sourceCollectionName, taskFilter, cleanupPolicy, shouldStop, limitToSourceIds) {
241
+ const { deleteWhen, keepForMs } = cleanupPolicy;
242
+ if (deleteWhen === 'never') {
243
+ return;
244
+ }
245
+ const cutoffDate = new Date(Date.now() - keepForMs);
246
+ const matchStage = {
247
+ task: taskName,
248
+ $expr: {
249
+ $lt: [{ $max: ['$updatedAt', { $ifNull: ['$lastFinalizedAt', '$createdAt'] }] }, cutoffDate],
250
+ },
251
+ };
252
+ if (limitToSourceIds && limitToSourceIds.length > 0) {
253
+ matchStage.sourceDocId = { $in: limitToSourceIds };
254
+ }
255
+ const pipeline = [
256
+ {
257
+ $match: matchStage,
258
+ },
259
+ {
260
+ $lookup: {
261
+ from: sourceCollectionName,
262
+ let: { sId: '$sourceDocId' },
263
+ pipeline: [
264
+ { $match: { $expr: { $eq: ['$_id', '$$sId'] } } },
265
+ {
266
+ $project: {
267
+ _id: 0,
268
+ matches: Object.keys(taskFilter).length > 0 ? taskFilter : true,
269
+ },
270
+ },
271
+ ],
272
+ as: 'orphanCheck',
273
+ },
274
+ },
275
+ {
276
+ $match: {
277
+ $or: [
278
+ { orphanCheck: { $size: 0 } }, // Source document deleted
279
+ ...(deleteWhen === 'sourceDocumentDeletedOrNoLongerMatching'
280
+ ? [{ 'orphanCheck.matches': false }] // Filter no longer matches
281
+ : []),
282
+ ],
283
+ },
284
+ },
285
+ {
286
+ $project: {
287
+ _id: 1,
288
+ },
289
+ },
290
+ ];
291
+ await (0, processInBatches_1.processInBatches)(this.tasksCollection, pipeline, (task) => task._id, async (batch) => {
292
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
293
+ await this.tasksCollection.deleteMany({ _id: { $in: batch } });
294
+ this.onInfo({
295
+ message: `Cleaned up ${batch.length} orphaned tasks for '${taskName}'`,
296
+ code: ReactiveTaskTypes_1.CODE_REACTIVE_TASK_CLEANUP,
297
+ meta: { count: batch.length },
298
+ });
299
+ }, { batchSize: 1000, shouldStop });
300
+ }
301
+ async getStatistics(filter, options) {
302
+ const pipeline = [];
303
+ if (Object.keys(filter).length > 0) {
304
+ pipeline.push({ $match: filter });
305
+ }
306
+ const facets = {};
307
+ if (options.includeStatusCounts) {
308
+ const groupId = options.groupByTask ? { task: '$task', status: '$status' } : '$status';
309
+ facets.statuses = [{ $group: { _id: groupId, count: { $sum: 1 } } }];
310
+ }
311
+ if (options.includeErrorCount) {
312
+ if (options.groupByTask) {
313
+ facets.errorCounts = [{ $match: { lastError: { $exists: true, $ne: null } } }, { $group: { _id: '$task', count: { $sum: 1 } } }];
314
+ }
315
+ else {
316
+ facets.errorCount = [{ $match: { lastError: { $exists: true, $ne: null } } }, { $count: 'count' }];
317
+ }
318
+ }
319
+ if (options.includeGlobalLag) {
320
+ facets.globalLag = [
321
+ { $match: { status: 'pending' } },
322
+ { $group: { _id: '$task', minScheduledAt: { $min: { $ifNull: ['$initialScheduledAt', '$scheduledAt'] } } } },
323
+ ];
324
+ }
325
+ pipeline.push({ $facet: facets });
326
+ const projection = { statuses: 1 };
327
+ if (options.includeErrorCount) {
328
+ if (options.groupByTask) {
329
+ projection.errorCounts = 1;
330
+ }
331
+ else {
332
+ projection.errorCount = { $ifNull: [{ $arrayElemAt: ['$errorCount.count', 0] }, 0] };
333
+ }
334
+ }
335
+ if (options.includeGlobalLag) {
336
+ projection.globalLag = 1;
337
+ }
338
+ pipeline.push({ $project: projection });
339
+ const [result] = await this.tasksCollection.aggregate(pipeline, { readPreference: options.readPreference }).toArray();
340
+ return (result || {
341
+ statuses: [],
342
+ errorCount: options.includeErrorCount ? 0 : undefined,
343
+ globalLag: options.includeGlobalLag ? [] : undefined,
344
+ });
345
+ }
346
+ }
347
+ exports.ReactiveTaskRepository = ReactiveTaskRepository;
348
+ //# sourceMappingURL=ReactiveTaskRepository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReactiveTaskRepository.js","sourceRoot":"","sources":["../../../../src/reactiveTasks/ReactiveTaskRepository.ts"],"names":[],"mappings":";;;AAEA,wCAAqD;AACrD,sCAAkD;AAClD,0DAAuD;AAEvD,2DAO6B;AAE7B;;;;;;;;;;GAUG;AACH,MAAa,sBAAsB;IAG/B,YACY,eAAkD,EAClD,SAAiB,sBAAa,EAC9B,UAAmB,wBAAc;QAFjC,oBAAe,GAAf,eAAe,CAAmC;QAClD,WAAM,GAAN,MAAM,CAAwB;QAC9B,YAAO,GAAP,OAAO,CAA0B;QAEzC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;IAC5C,CAAC;IAEM,KAAK,CAAC,mBAAmB,CAAC,QAAmC,EAAE,OAAwC;QAC1G,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,aAAa,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAE5E,MAAM,MAAM,GAAkC;YAC1C,IAAI,EAAE,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;YAC1C,GAAG,EAAE;gBACD;oBACI,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,kBAAkB,CAAC,EAAE;oBAChD,WAAW,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE;oBAC1B,GAAG,EAAE,CAAC,EAAE,aAAa,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;iBACzG;gBACD;oBACI,MAAM,EAAE,YAAY;oBACpB,aAAa,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE;iBAC9B;aACJ;SACJ,CAAC;QAEF,MAAM,MAAM,GAAwC;YAChD,IAAI,EAAE;gBACF,MAAM,EAAE,YAAY;gBACpB,aAAa,EAAE,aAAa;gBAC5B,SAAS,EAAE,GAAG;aACjB;YACD,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE;SACxB,CAAC;QAEF,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE;gBACvE,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE;gBACxB,cAAc,EAAE,OAAO;gBACvB,qBAAqB,EAAE,IAAI;aACO,CAAC,CAAC;YAExC,mEAAmE;YACnE,2EAA2E;YAC3E,kHAAkH;YAClH,8CAA8C;YAC9C,4DAA4D;YAE5D,kEAAkE;YAClE,OAAQ,MAAmE,CAAC,KAAK,IAAI,IAAI,CAAC;QAC9F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,OAAO,CAAC,KAAc,CAAC,CAAC;YAC7B,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,YAAY,CACrB,UAAiC,EACjC,QAAmC,EACnC,KAAa,EACb,UAAU,GAAG,IAAI,EACjB,cAAuC,EACvC,qBAAqB,GAAG,CAAC;;QAEzB,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC;QACxB,MAAM,YAAY,GAAG,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,KAAI,eAAe,CAAC;QAEvD,2BAA2B;QAC3B,IAAI,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC;QAC3C,IAAI,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;YAC3B,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC;QAC9B,CAAC;aAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,YAAY,GAAG,IAAI,CAAC,CAAC,mBAAmB;QAC5C,CAAC;QAED,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,IAAI,CAAC,CAAC;QAC1C,MAAM,UAAU,GAAG,OAAO,IAAI,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAC1E,MAAM,oBAAoB,GAAG,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAEnG,MAAM,SAAS,GAAa;YACxB,MAAM,EAAE;gBACJ,KAAK,EAAE;oBACH,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,kBAAkB,CAAC,EAAE;oBAC5C,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW;iBACpE;aACJ;YACD,WAAW,EAAE;gBACT,KAAK,EAAE;oBACH,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,kBAAkB,CAAC,EAAE;oBAC5C,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,YAAY,EAAE,UAAU,CAAC,EAAE;oBAC1C,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,cAAc;iBACxF;aACJ;YACD,WAAW,EAAE;gBACT,KAAK,EAAE;oBACH,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,kBAAkB,CAAC,EAAE;oBAC5C,IAAI,EAAE,cAAc;oBACpB,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE;iBAC9C;aACJ;YACD,aAAa,EAAE,IAAI;YACnB,YAAY,EAAE;gBACV,KAAK,EAAE;oBACH,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,kBAAkB,CAAC,EAAE;oBAC5C,IAAI,EAAE,eAAe;oBACrB,IAAI,EAAE,YAAY;iBACrB;aACJ;YACD,SAAS,EAAE;gBACP,KAAK,EAAE;oBACH,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,kBAAkB,CAAC,EAAE;oBAC5C,IAAI,EAAE,YAAY;oBAClB,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI;iBACtC;aACJ;YACD,eAAe,EAAE,IAAI,IAAI,EAAE;SAC9B,CAAC;QAEF,MAAM,UAAU,GAAG,MAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,UAAU,mCAAI,CAAC,CAAC;QACnD,MAAM,YAAY,mBACd,EAAE,EAAE,IAAI,IAAI,EAAE,EACd,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EACxC,UAAU,EAAE,UAAU,IACnB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAC9C,CAAC;QAEF,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,SAAS,CAAC,WAAW,GAAG;gBACpB,EAAE,EAAE,IAAI,IAAI,EAAE;gBACd,UAAU,EAAE,UAAU;aACzB,CAAC;QACN,CAAC;QAED,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,GAAG,EAAE,EAAE;YAC1D;gBACI,IAAI,EAAE,SAAS;aAClB;YACD;gBACI,IAAI,EAAE;oBACF,gBAAgB,EAAE;wBACd,MAAM,EAAE;4BACJ;gCACI,aAAa,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,mBAAmB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC;6BAC1E;4BACD,CAAC,qBAAqB,EAAE,cAAc;yBACzC;qBACJ;iBACJ;aACJ;SACJ,CAAC,CAAC;IACP,CAAC;IAEM,KAAK,CAAC,SAAS,CAAC,UAAiC,EAAE,KAAoB;;QAC1E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,cAAc,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACjF,MAAM,mBAAmB,GAAG,MAAA,UAAU,CAAC,kBAAkB,mCAAI,UAAU,CAAC,WAAW,CAAC;QAEpF,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,CAChC,EAAE,GAAG,EAAE,UAAU,CAAC,GAAG,EAAE,EACvB;YACI,IAAI,EAAE;gBACF,MAAM,EAAE,SAAS;gBACjB,WAAW,EAAE,cAAc;gBAC3B,kBAAkB,EAAE,mBAAmB;gBACvC,aAAa,EAAE,IAAI;gBACnB,QAAQ,EAAE,CAAC;aACd;SACJ,CACJ,CAAC;IACN,CAAC;IAEM,KAAK,CAAC,gBAAgB,CACzB,UAAyE,EACzE,OAAoC;QAEpC,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;IACpE,CAAC;IAEM,KAAK,CAAC,SAAS,CAClB,MAAqC,EACrC,UAA4E,EAAE;QAE9E,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;IAChE,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,MAAqC;QACzD,OAAO,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IACvD,CAAC;IAEM,KAAK,CAAC,WAAW,CACpB,MAAqC,EACrC,MAAwD;QAExD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACrE,OAAO;YACH,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,aAAa,EAAE,MAAM,CAAC,aAAa;SACtC,CAAC;IACN,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,MAAqC;QACzD,MAAM,cAAc,GAAe;YAC/B;gBACI,IAAI,EAAE;oBACF,SAAS,EAAE,OAAO;oBAClB,MAAM,EAAE;wBACJ,KAAK,EAAE;4BACH,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC,EAAE;4BAC5D,IAAI,EAAE,kBAAkB;4BACxB,IAAI,EAAE,SAAS;yBAClB;qBACJ;oBACD,WAAW,EAAE;wBACT,KAAK,EAAE;4BACH,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC,EAAE;4BAC5D,IAAI,EAAE,cAAc;4BACpB,IAAI,EAAE,OAAO;yBAChB;qBACJ;oBACD,sEAAsE;oBACtE,kBAAkB,EAAE,EAAE,OAAO,EAAE,CAAC,qBAAqB,EAAE,cAAc,CAAC,EAAE;iBAC3E;aACJ;SACJ,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAC7E,OAAO;YACH,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,aAAa,EAAE,MAAM,CAAC,aAAa;SACtC,CAAC;IACN,CAAC;IAEM,KAAK,CAAC,oBAAoB,CAAC,QAAgB,EAAE,IAAsB;QACtE,MAAM,MAAM,GAAkC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAEjE,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACpB,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC;QAC7B,CAAC;aAAM,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;YACxB,MAAM,CAAC,MAAM,GAAG,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,CAAC;QACrD,CAAC;QAED,uBAAuB;QACvB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC;IACnD,CAAC;IAEO,KAAK,CAAC,aAAa;QACvB,gEAAgE;QAChE,0FAA0F;QAC1F,4BAA4B;QAC5B,MAAM,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC;YACnC,IAAI,EAAE,CAAC;YACP,MAAM,EAAE,CAAC;YACT,WAAW,EAAE,CAAC;YACd,aAAa,EAAE,CAAC;SACnB,CAAC,CAAC;QAEH,0EAA0E;QAC1E,MAAM,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1F,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,mBAAmB,CAC5B,QAAgB,EAChB,oBAA4B,EAC5B,UAA4B,EAC5B,aAAmE,EACnE,UAAyB,EACzB,gBAA4B;QAE5B,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC;QAEhD,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;YACzB,OAAO;QACX,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC;QAEpD,MAAM,UAAU,GAAa;YACzB,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE;gBACH,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,CAAC,kBAAkB,EAAE,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,CAAC;aAC/F;SACJ,CAAC;QAEF,IAAI,gBAAgB,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClD,UAAU,CAAC,WAAW,GAAG,EAAE,GAAG,EAAE,gBAAgB,EAAE,CAAC;QACvD,CAAC;QAED,MAAM,QAAQ,GAAe;YACzB;gBACI,MAAM,EAAE,UAAU;aACrB;YACD;gBACI,OAAO,EAAE;oBACL,IAAI,EAAE,oBAAoB;oBAC1B,GAAG,EAAE,EAAE,GAAG,EAAE,cAAc,EAAE;oBAC5B,QAAQ,EAAE;wBACN,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE;wBACjD;4BACI,QAAQ,EAAE;gCACN,GAAG,EAAE,CAAC;gCACN,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI;6BAClE;yBACJ;qBACJ;oBACD,EAAE,EAAE,aAAa;iBACpB;aACJ;YACD;gBACI,MAAM,EAAE;oBACJ,GAAG,EAAE;wBACD,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,0BAA0B;wBACzD,GAAG,CAAC,UAAU,KAAK,yCAAyC;4BACxD,CAAC,CAAC,CAAC,EAAE,qBAAqB,EAAE,KAAK,EAAE,CAAC,CAAC,2BAA2B;4BAChE,CAAC,CAAC,EAAE,CAAC;qBACZ;iBACJ;aACJ;YACD;gBACI,QAAQ,EAAE;oBACN,GAAG,EAAE,CAAC;iBACT;aACJ;SACJ,CAAC;QAEF,MAAM,IAAA,mCAAgB,EAClB,IAAI,CAAC,eAAe,EACpB,QAAQ,EACR,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,EAClB,KAAK,EAAE,KAAK,EAAE,EAAE;YACZ,8DAA8D;YAC9D,MAAM,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,KAAY,EAAE,EAAE,CAAC,CAAC;YACtE,IAAI,CAAC,MAAM,CAAC;gBACR,OAAO,EAAE,cAAc,KAAK,CAAC,MAAM,wBAAwB,QAAQ,GAAG;gBACtE,IAAI,EAAE,8CAA0B;gBAChC,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE;aAChC,CAAC,CAAC;QACP,CAAC,EACD,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,CAClC,CAAC;IACN,CAAC;IAEM,KAAK,CAAC,aAAa,CAAC,MAAqC,EAAE,OAAiC;QAC/F,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACtC,CAAC;QAED,MAAM,MAAM,GAA6B,EAAE,CAAC;QAE5C,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YACvF,MAAM,CAAC,QAAQ,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACzE,CAAC;QAED,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;YAC5B,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;gBACtB,MAAM,CAAC,WAAW,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACrI,CAAC;iBAAM,CAAC;gBACJ,MAAM,CAAC,UAAU,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;YACvG,CAAC;QACL,CAAC;QAED,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC3B,MAAM,CAAC,SAAS,GAAG;gBACf,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE;gBACjC,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,qBAAqB,EAAE,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE;aAC/G,CAAC;QACN,CAAC;QAED,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAElC,MAAM,UAAU,GAA4B,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;QAE5D,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;YAC5B,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;gBACtB,UAAU,CAAC,WAAW,GAAG,CAAC,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACJ,UAAU,CAAC,UAAU,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,mBAAmB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;YACzF,CAAC;QACL,CAAC;QAED,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC3B,UAAU,CAAC,SAAS,GAAG,CAAC,CAAC;QAC7B,CAAC;QAED,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC;QAExC,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,CAA0B,QAAQ,EAAE,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QAE/I,OAAO,CACH,MAAM,IAAI;YACN,QAAQ,EAAE,EAAE;YACZ,UAAU,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;YACrD,SAAS,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;SACvD,CACJ,CAAC;IACN,CAAC;CACJ;AAvZD,wDAuZC"}
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ReactiveTaskRetryStrategy = void 0;
4
+ const cronParserPkg = require("cron-parser");
5
+ const { Duration } = require('@sapphire/duration');
6
+ // Handle CommonJS/ESM interop
7
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
8
+ const CronExpressionParser = cronParserPkg.default || cronParserPkg.CronExpressionParser;
9
+ class ReactiveTaskRetryStrategy {
10
+ constructor(policy) {
11
+ this.policy = policy;
12
+ // Validate policy at construction time
13
+ this.validatePolicy();
14
+ }
15
+ validatePolicy() {
16
+ const policy = this.policy;
17
+ const validTypes = ['fixed', 'linear', 'exponential', 'series', 'cron'];
18
+ if (!validTypes.includes(policy.type)) {
19
+ throw new Error(`Invalid retry policy type: '${policy.type}'. Valid types: ${validTypes.join(', ')}`);
20
+ }
21
+ // Validate duration strings based on policy type
22
+ if (policy.type === 'fixed' || policy.type === 'linear') {
23
+ this.validateDuration('interval', policy.interval);
24
+ }
25
+ if (policy.type === 'exponential') {
26
+ const minVal = policy.min !== undefined && policy.min !== null ? String(policy.min) : undefined;
27
+ this.validateDuration('min', minVal);
28
+ if (policy.max !== undefined && policy.max !== null) {
29
+ this.validateDuration('max', String(policy.max));
30
+ }
31
+ }
32
+ if (policy.type === 'series') {
33
+ if (!policy.intervals || policy.intervals.length === 0) {
34
+ throw new Error("Series retry policy requires non-empty 'intervals' array.");
35
+ }
36
+ policy.intervals.forEach((interval, index) => {
37
+ this.validateDuration(`intervals[${index}]`, interval);
38
+ });
39
+ }
40
+ if (policy.type === 'cron') {
41
+ try {
42
+ CronExpressionParser.parse(policy.expression, { currentDate: new Date() });
43
+ }
44
+ catch (err) {
45
+ throw new Error(`Invalid cron expression '${policy.expression}': ${err.message}`);
46
+ }
47
+ }
48
+ // Validate optional maxDuration if provided
49
+ if (policy.maxDuration) {
50
+ this.validateDuration('maxDuration', policy.maxDuration);
51
+ }
52
+ }
53
+ validateDuration(fieldName, value) {
54
+ if (!value) {
55
+ throw new Error(`Retry policy requires '${fieldName}' to be specified.`);
56
+ }
57
+ const parsed = new Duration(value).offset;
58
+ if (parsed === null || parsed === undefined || Number.isNaN(parsed)) {
59
+ throw new Error(`Invalid duration format for '${fieldName}': '${value}'. Use formats like '100ms', '1s', '5m', '1h'.`);
60
+ }
61
+ if (parsed < 0) {
62
+ throw new Error(`Duration '${fieldName}' must be non-negative, got '${value}'.`);
63
+ }
64
+ }
65
+ /**
66
+ * Calculates the timestamp for the next retry attempt.
67
+ * @param attempts Current number of attempts (will be incremented for next check) called AFTER failure
68
+ * @param lastError Timestamp of the last error or last attempt? No, policies are usually "after X time".
69
+ * For linear/exp/fixed, we add delay to NOW.
70
+ * For Cron, we find next date after NOW.
71
+ */
72
+ calculateNextRetry(attempts) {
73
+ var _a;
74
+ const now = new Date();
75
+ if (this.policy.type === 'fixed') {
76
+ const delay = new Duration(this.policy.interval).offset || 0;
77
+ return new Date(now.getTime() + delay);
78
+ }
79
+ else if (this.policy.type === 'linear') {
80
+ const interval = new Duration(this.policy.interval).offset || 0;
81
+ return new Date(now.getTime() + interval * attempts);
82
+ }
83
+ else if (this.policy.type === 'exponential') {
84
+ const min = new Duration(String(this.policy.min)).offset || 0;
85
+ const max = new Duration(String(this.policy.max)).offset || Infinity;
86
+ const factor = (_a = this.policy.factor) !== null && _a !== void 0 ? _a : 2;
87
+ // min * (factor ^ (attempts - 1))?
88
+ // Standard exp backoff:
89
+ // attempt 1: min
90
+ // attempt 2: min * factor
91
+ const delay = Math.min(max, min * Math.pow(factor, attempts - 1));
92
+ return new Date(now.getTime() + delay);
93
+ }
94
+ else if (this.policy.type === 'series') {
95
+ const intervals = this.policy.intervals;
96
+ // If attempts > intervals, use the last one (or maybe fail? usually last one)
97
+ // attempts is 1-based index of the *next* attempt?
98
+ // if we just failed attempt #1, we are scheduling attempt #2?
99
+ // Let's assume 'attempts' passed here is how many attempts have FAILED so far.
100
+ // So we are scheduling for attempt = attempts + 1.
101
+ // Series index should be attempts (0-based) ?
102
+ // If attempts=1 (1 failure), we want the 1st interval (index 0)?
103
+ // Wait.
104
+ // Policy: [1m, 5m]
105
+ // Fail attempt 1 -> wait 1m (index 0)
106
+ // Fail attempt 2 -> wait 5m (index 1)
107
+ // Fail attempt 3 -> wait 5m (index 1 - clamp)
108
+ const index = Math.min(Math.max(0, attempts - 1), intervals.length - 1);
109
+ const delay = new Duration(intervals[index]).offset || 0;
110
+ return new Date(now.getTime() + delay);
111
+ }
112
+ else if (this.policy.type === 'cron') {
113
+ // Cron expression was validated in constructor, so this should not fail
114
+ const interval = CronExpressionParser.parse(this.policy.expression, {
115
+ currentDate: now,
116
+ });
117
+ return interval.next().toDate();
118
+ }
119
+ else {
120
+ // This should never happen since we validate in constructor
121
+ throw new Error(`Unknown retry policy type: ${this.policy.type}`);
122
+ }
123
+ }
124
+ /**
125
+ * Determines if the task should be marked as permanently failed.
126
+ * @param attempts Number of attempts consumed so far (including the one that just failed)
127
+ * @param firstErrorAt When the first error in this sequence occurred
128
+ */
129
+ shouldFail(attempts, firstErrorAt) {
130
+ // Check Max Attempts
131
+ if (this.policy.maxAttempts !== undefined && this.policy.maxAttempts !== -1 && attempts >= this.policy.maxAttempts) {
132
+ return true;
133
+ }
134
+ // Check Max Duration
135
+ if (this.policy.maxDuration && firstErrorAt) {
136
+ const maxDurationMs = new Duration(this.policy.maxDuration).offset || 0;
137
+ const elapsed = Date.now() - firstErrorAt.getTime();
138
+ if (elapsed > maxDurationMs) {
139
+ return true;
140
+ }
141
+ }
142
+ return false;
143
+ }
144
+ }
145
+ exports.ReactiveTaskRetryStrategy = ReactiveTaskRetryStrategy;
146
+ //# sourceMappingURL=ReactiveTaskRetryStrategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReactiveTaskRetryStrategy.js","sourceRoot":"","sources":["../../../../src/reactiveTasks/ReactiveTaskRetryStrategy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.REACTIVE_TASK_META_DOC_ID = exports.CODE_REACTIVE_TASK_CLEANUP = exports.CODE_REACTIVE_TASK_INITIALIZED = exports.CODE_REACTIVE_TASK_LEADER_LOCK_LOST = exports.CODE_REACTIVE_TASK_PLANNER_STREAM_ERROR = exports.CODE_REACTIVE_TASK_PLANNER_RECONCILIATION_FINISHED = exports.CODE_REACTIVE_TASK_PLANNER_RECONCILIATION_STARTED = exports.CODE_REACTIVE_TASK_PLANNER_STOPPED = exports.CODE_REACTIVE_TASK_PLANNER_STARTED = exports.CODE_REACTIVE_TASK_FAILED = exports.CODE_REACTIVE_TASK_FINISHED = exports.CODE_REACTIVE_TASK_STARTED = exports.TaskConditionFailedError = void 0;
4
+ /**
5
+ * Error thrown when `getDocument` fails because the document no longer matches the filter
6
+ * or has been deleted. The worker will catch this and mark the task as skipped (success).
7
+ */
8
+ class TaskConditionFailedError extends Error {
9
+ constructor(message = 'Document no longer matches filter or not found') {
10
+ super(message);
11
+ this.name = 'TaskConditionFailedError';
12
+ }
13
+ }
14
+ exports.TaskConditionFailedError = TaskConditionFailedError;
15
+ exports.CODE_REACTIVE_TASK_STARTED = 'reactiveTaskStarted';
16
+ exports.CODE_REACTIVE_TASK_FINISHED = 'reactiveTaskFinished';
17
+ exports.CODE_REACTIVE_TASK_FAILED = 'reactiveTaskFailed';
18
+ exports.CODE_REACTIVE_TASK_PLANNER_STARTED = 'reactiveTaskPlannerStarted';
19
+ exports.CODE_REACTIVE_TASK_PLANNER_STOPPED = 'reactiveTaskPlannerStopped';
20
+ exports.CODE_REACTIVE_TASK_PLANNER_RECONCILIATION_STARTED = 'reactiveTaskPlannerReconciliationStarted';
21
+ exports.CODE_REACTIVE_TASK_PLANNER_RECONCILIATION_FINISHED = 'reactiveTaskPlannerReconciliationFinished';
22
+ exports.CODE_REACTIVE_TASK_PLANNER_STREAM_ERROR = 'reactiveTaskPlannerStreamError';
23
+ exports.CODE_REACTIVE_TASK_LEADER_LOCK_LOST = 'reactiveTaskLeaderLockLost';
24
+ exports.CODE_REACTIVE_TASK_INITIALIZED = 'reactiveTaskInitialized';
25
+ exports.CODE_REACTIVE_TASK_CLEANUP = 'reactiveTaskCleanup';
26
+ exports.REACTIVE_TASK_META_DOC_ID = '_mongodash_planner_meta';
27
+ //# sourceMappingURL=ReactiveTaskTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReactiveTaskTypes.js","sourceRoot":"","sources":["../../../../src/reactiveTasks/ReactiveTaskTypes.ts"],"names":[],"mappings":";;;AAgHA;;;GAGG;AACH,MAAa,wBAAyB,SAAQ,KAAK;IAC/C,YAAY,OAAO,GAAG,gDAAgD;QAClE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;IAC3C,CAAC;CACJ;AALD,4DAKC;AAuNY,QAAA,0BAA0B,GAAG,qBAAqB,CAAC;AACnD,QAAA,2BAA2B,GAAG,sBAAsB,CAAC;AACrD,QAAA,yBAAyB,GAAG,oBAAoB,CAAC;AAEjD,QAAA,kCAAkC,GAAG,4BAA4B,CAAC;AAClE,QAAA,kCAAkC,GAAG,4BAA4B,CAAC;AAClE,QAAA,iDAAiD,GAAG,0CAA0C,CAAC;AAC/F,QAAA,kDAAkD,GAAG,2CAA2C,CAAC;AACjG,QAAA,uCAAuC,GAAG,gCAAgC,CAAC;AAC3E,QAAA,mCAAmC,GAAG,4BAA4B,CAAC;AACnE,QAAA,8BAA8B,GAAG,yBAAyB,CAAC;AAC3D,QAAA,0BAA0B,GAAG,qBAAqB,CAAC;AACnD,QAAA,yBAAyB,GAAG,yBAAyB,CAAC"}