mongodash 2.6.0 → 2.8.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 (66) hide show
  1. package/README.md +45 -0
  2. package/dist/lib/ConcurrentRunner.js +47 -2
  3. package/dist/lib/ConcurrentRunner.js.map +1 -1
  4. package/dist/lib/createContinuousLock.js +23 -6
  5. package/dist/lib/createContinuousLock.js.map +1 -1
  6. package/dist/lib/cronTasks.js +119 -64
  7. package/dist/lib/cronTasks.js.map +1 -1
  8. package/dist/lib/index.js +11 -6
  9. package/dist/lib/index.js.map +1 -1
  10. package/dist/lib/reactiveTasks/LeaderElector.js +21 -3
  11. package/dist/lib/reactiveTasks/LeaderElector.js.map +1 -1
  12. package/dist/lib/reactiveTasks/MetricsCollector.js +118 -39
  13. package/dist/lib/reactiveTasks/MetricsCollector.js.map +1 -1
  14. package/dist/lib/reactiveTasks/ReactiveTaskPlanner.js +66 -31
  15. package/dist/lib/reactiveTasks/ReactiveTaskPlanner.js.map +1 -1
  16. package/dist/lib/reactiveTasks/ReactiveTaskRepository.js +19 -1
  17. package/dist/lib/reactiveTasks/ReactiveTaskRepository.js.map +1 -1
  18. package/dist/lib/reactiveTasks/ReactiveTaskTypes.js +7 -1
  19. package/dist/lib/reactiveTasks/ReactiveTaskTypes.js.map +1 -1
  20. package/dist/lib/reactiveTasks/ReactiveTaskWorker.js +80 -5
  21. package/dist/lib/reactiveTasks/ReactiveTaskWorker.js.map +1 -1
  22. package/dist/lib/reactiveTasks/index.js +20 -13
  23. package/dist/lib/reactiveTasks/index.js.map +1 -1
  24. package/dist/lib/task-management/OperationalTaskController.js +1 -1
  25. package/dist/lib/task-management/OperationalTaskController.js.map +1 -1
  26. package/dist/lib/testing/assertNoReactiveTaskErrors.js +16 -12
  27. package/dist/lib/testing/assertNoReactiveTaskErrors.js.map +1 -1
  28. package/dist/lib/testing/index.js +2 -0
  29. package/dist/lib/testing/index.js.map +1 -1
  30. package/dist/lib/testing/resolveWhitelistFilter.js +48 -0
  31. package/dist/lib/testing/resolveWhitelistFilter.js.map +1 -0
  32. package/dist/lib/testing/waitUntilReactiveTasksIdle.js +17 -46
  33. package/dist/lib/testing/waitUntilReactiveTasksIdle.js.map +1 -1
  34. package/dist/types/ConcurrentRunner.d.ts +16 -0
  35. package/dist/types/createContinuousLock.d.ts +17 -1
  36. package/dist/types/cronTasks.d.ts +17 -2
  37. package/dist/types/index.d.ts +2 -2
  38. package/dist/types/reactiveTasks/LeaderElector.d.ts +15 -1
  39. package/dist/types/reactiveTasks/MetricsCollector.d.ts +19 -8
  40. package/dist/types/reactiveTasks/ReactiveTaskPlanner.d.ts +11 -0
  41. package/dist/types/reactiveTasks/ReactiveTaskRepository.d.ts +10 -1
  42. package/dist/types/reactiveTasks/ReactiveTaskTypes.d.ts +19 -0
  43. package/dist/types/reactiveTasks/index.d.ts +8 -2
  44. package/dist/types/testing/assertNoReactiveTaskErrors.d.ts +4 -4
  45. package/dist/types/testing/index.d.ts +2 -0
  46. package/dist/types/testing/resolveWhitelistFilter.d.ts +35 -0
  47. package/dist/types/testing/waitUntilReactiveTasksIdle.d.ts +7 -13
  48. package/docs/.vitepress/config.mts +9 -1
  49. package/docs/cron-tasks.md +130 -1
  50. package/docs/error-handling.md +156 -0
  51. package/docs/reactive-tasks/guides.md +1 -1
  52. package/docs/reactive-tasks/index.md +2 -2
  53. package/docs/reactive-tasks/monitoring.md +7 -0
  54. package/docs/reactive-tasks/testing.md +187 -0
  55. package/docs/testing.md +60 -94
  56. package/package.json +36 -24
  57. package/docs/.vitepress/cache/deps/_metadata.json +0 -31
  58. package/docs/.vitepress/cache/deps/chunk-LE5NDSFD.js +0 -12824
  59. package/docs/.vitepress/cache/deps/chunk-LE5NDSFD.js.map +0 -7
  60. package/docs/.vitepress/cache/deps/package.json +0 -3
  61. package/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js +0 -4505
  62. package/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js.map +0 -7
  63. package/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js +0 -9731
  64. package/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js.map +0 -7
  65. package/docs/.vitepress/cache/deps/vue.js +0 -347
  66. package/docs/.vitepress/cache/deps/vue.js.map +0 -7
@@ -1,11 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.LeaderElector = void 0;
4
- const mongodb_1 = require("mongodb");
5
- const ReactiveTaskTypes_1 = require("./ReactiveTaskTypes");
6
4
  const _debug = require("debug");
7
- const OnInfo_1 = require("../OnInfo");
5
+ const mongodb_1 = require("mongodb");
8
6
  const OnError_1 = require("../OnError");
7
+ const OnInfo_1 = require("../OnInfo");
8
+ const ReactiveTaskTypes_1 = require("./ReactiveTaskTypes");
9
9
  const debug = _debug('mongodash:reactiveTasks:leader');
10
10
  /**
11
11
  * Manages leader election among multiple scheduler instances.
@@ -52,8 +52,26 @@ class LeaderElector {
52
52
  this._isLeader = false;
53
53
  }
54
54
  }
55
+ /**
56
+ * Give up leadership locally. The DB lock is NOT released - the next
57
+ * heartbeat will likely re-acquire it (unless another instance raced
58
+ * in). onLoseLeader is fired asynchronously so callers (e.g. the
59
+ * scheduler wiring this to a flush-failure path) get a clean
60
+ * planner.stop() before the next heartbeat restarts it, rather than
61
+ * starting a new planner on top of a live one.
62
+ *
63
+ * Note: the follow-up onBecomeLeader that fires after a forced loss
64
+ * looks identical to a real leader election and will increment
65
+ * reactive_tasks_leader_elections_total; see the event codes
66
+ * CODE_REACTIVE_TASK_PLANNER_STREAM_ERROR and the flush-failure
67
+ * counter to disambiguate "real" flapping from restart-driven ones.
68
+ */
55
69
  forceLoseLeader() {
70
+ if (!this._isLeader)
71
+ return;
56
72
  this._isLeader = false;
73
+ // Fire-and-forget: we are sync and the caller does not await.
74
+ this.callbacks.onLoseLeader().catch((err) => this.onError(err));
57
75
  }
58
76
  async runLeaderElectionLoop() {
59
77
  const loop = async () => {
@@ -1 +1 @@
1
- {"version":3,"file":"LeaderElector.js","sourceRoot":"","sources":["../../../src/reactiveTasks/LeaderElector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LeaderElector.js","sourceRoot":"","sources":["../../../src/reactiveTasks/LeaderElector.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MetricsCollector = void 0;
4
- const debug_1 = require("debug");
5
4
  const OnError_1 = require("../OnError");
6
- const OnInfo_1 = require("../OnInfo");
7
5
  const ReactiveTaskTypes_1 = require("./ReactiveTaskTypes");
8
- const _debugLogger = (0, debug_1.default)('mongodash:reactiveTasks:metrics');
9
6
  // ============================================================================
10
7
  // Constants
11
8
  // ============================================================================
@@ -16,9 +13,29 @@ const METRIC_NAMES = {
16
13
  GLOBAL_LAG: 'reactive_tasks_global_lag_seconds',
17
14
  CHANGE_STREAM_LAG: 'reactive_tasks_change_stream_lag_seconds',
18
15
  LAST_RECONCILIATION: 'reactive_tasks_last_reconciliation_timestamp_seconds',
16
+ LEADER_ELECTIONS: 'reactive_tasks_leader_elections_total',
17
+ LOCK_LOST: 'reactive_tasks_lock_lost_total',
18
+ STREAM_ERRORS: 'reactive_tasks_stream_errors_total',
19
+ FLUSH_FAILURES: 'reactive_tasks_flush_failures_total',
19
20
  };
20
21
  const REGISTRY_DOC_ID = 'reactive_tasks_metrics_registry';
22
+ /**
23
+ * Instance entries older than this many push intervals are ignored
24
+ * during scrape aggregation and pruned by the leader's next push.
25
+ * Generous because an instance could be briefly unreachable but still
26
+ * alive; its counters are cumulative anyway.
27
+ */
21
28
  const STALE_THRESHOLD_MULTIPLIER = 20;
29
+ /**
30
+ * The leader-pushed `globalStats` blob is treated as stale sooner than
31
+ * per-instance local metrics: it reflects a point-in-time DB query
32
+ * (queue depth / lag) and is meaningless once the leader stops pushing.
33
+ * With `2 * pushIntervalMs`, a single missed push (e.g. slow DB on the
34
+ * leader) still serves the last known value; two missed pushes in a
35
+ * row stop serving the gauge. Cluster-mode follower gauges are thus
36
+ * bounded-stale at `GLOBAL_STATS_STALE_MULTIPLIER * pushIntervalMs`.
37
+ */
38
+ const GLOBAL_STATS_STALE_MULTIPLIER = 2;
22
39
  const DEFAULT_PUSH_INTERVAL = 60000;
23
40
  const DEFAULT_OPTIONS = {
24
41
  enabled: true,
@@ -38,13 +55,18 @@ const DEFAULT_OPTIONS = {
38
55
  * - **local**: Returns metrics from THIS instance only.
39
56
  * Use when Prometheus scrapes each pod individually (K8s Pod Monitors).
40
57
  *
41
- * Global stats (queue depth, lag) are computed on-the-fly by the **Leader only**.
58
+ * Global stats (queue depth, lag, change-stream lag, reconciliation timestamp)
59
+ * are computed by the Leader. In `cluster` mode the Leader also pushes these
60
+ * values into the registry document on each push interval so a scrape that
61
+ * lands on a Follower still returns a complete metrics view - bounded-stale
62
+ * at `GLOBAL_STATS_STALE_MULTIPLIER * pushIntervalMs` (2x by default,
63
+ * i.e. a single missed push is tolerated).
42
64
  */
43
65
  class MetricsCollector {
44
66
  // ========================================================================
45
67
  // Constructor
46
68
  // ========================================================================
47
- constructor(instanceId, registry, globalsCollection, leaderElector, options, onInfo = OnInfo_1.defaultOnInfo, onError = OnError_1.defaultOnError) {
69
+ constructor(instanceId, registry, globalsCollection, leaderElector, options, onError = OnError_1.defaultOnError) {
48
70
  this.queueMetricsPromise = null;
49
71
  this.instanceId = instanceId;
50
72
  this.registry = registry;
@@ -52,7 +74,6 @@ class MetricsCollector {
52
74
  this.leaderElector = leaderElector;
53
75
  this.options = Object.assign(Object.assign({}, DEFAULT_OPTIONS), options);
54
76
  this.enabled = this.options.enabled;
55
- this.onInfo = onInfo;
56
77
  this.onError = onError;
57
78
  if (this.enabled) {
58
79
  this.initPrometheus();
@@ -78,6 +99,13 @@ class MetricsCollector {
78
99
  initLocalMetrics() {
79
100
  this.metricDuration = this.getOrCreateMetric(METRIC_NAMES.DURATION, this.promClientModule.Histogram, { help: 'Distribution of task execution durations.', labelNames: ['task_name', 'status'] }, this.localPromRegistry);
80
101
  this.metricRetries = this.getOrCreateMetric(METRIC_NAMES.RETRIES, this.promClientModule.Counter, { help: 'Total number of retries attempted.', labelNames: ['task_name'] }, this.localPromRegistry);
102
+ this.metricLeaderElections = this.getOrCreateMetric(METRIC_NAMES.LEADER_ELECTIONS, this.promClientModule.Counter, { help: 'Number of times this instance became leader. A high rate indicates leader flapping.', labelNames: [] }, this.localPromRegistry);
103
+ this.metricLockLost = this.getOrCreateMetric(METRIC_NAMES.LOCK_LOST, this.promClientModule.Counter, {
104
+ help: 'Number of tasks whose execution lock was stolen by another worker (CAS detection). Indicates visibility-timeout pressure or a slow worker.',
105
+ labelNames: ['task_name'],
106
+ }, this.localPromRegistry);
107
+ this.metricStreamErrors = this.getOrCreateMetric(METRIC_NAMES.STREAM_ERRORS, this.promClientModule.Counter, { help: 'Number of change-stream errors observed by this instance.', labelNames: [] }, this.localPromRegistry);
108
+ this.metricFlushFailures = this.getOrCreateMetric(METRIC_NAMES.FLUSH_FAILURES, this.promClientModule.Counter, { help: 'Number of planner flush batches that failed and required a stream restart.', labelNames: [] }, this.localPromRegistry);
81
109
  }
82
110
  initGlobalStatsMetrics() {
83
111
  const registry = this.globalStatsRegistry;
@@ -146,6 +174,26 @@ class MetricsCollector {
146
174
  return;
147
175
  this.metricRetries.inc({ task_name: task });
148
176
  }
177
+ recordLeaderElection() {
178
+ if (!this.enabled || !this.metricLeaderElections)
179
+ return;
180
+ this.metricLeaderElections.inc();
181
+ }
182
+ recordLockLost(task) {
183
+ if (!this.enabled || !this.metricLockLost)
184
+ return;
185
+ this.metricLockLost.inc({ task_name: task });
186
+ }
187
+ recordStreamError() {
188
+ if (!this.enabled || !this.metricStreamErrors)
189
+ return;
190
+ this.metricStreamErrors.inc();
191
+ }
192
+ recordFlushFailure() {
193
+ if (!this.enabled || !this.metricFlushFailures)
194
+ return;
195
+ this.metricFlushFailures.inc();
196
+ }
149
197
  // ========================================================================
150
198
  // Public API: Scraping Metrics
151
199
  // ========================================================================
@@ -160,21 +208,29 @@ class MetricsCollector {
160
208
  /**
161
209
  * Returns aggregated metrics from ALL instances.
162
210
  * Fetches other instances' metrics from DB and merges with fresh local metrics.
163
- * Leader also includes global stats.
211
+ * Global stats: leader computes fresh; followers read the leader's last
212
+ * push from the registry doc (so a scrape that hits a follower still
213
+ * returns queue depth / lag / reconciliation / stream-lag gauges).
164
214
  */
165
215
  async getClusterMetrics() {
166
216
  const allMetrics = [];
167
- // 1. Fetch other instances' metrics from DB
168
- const otherInstanceMetrics = await this.fetchOtherInstancesMetrics();
169
- allMetrics.push(...otherInstanceMetrics);
170
- // 2. Add fresh local metrics
217
+ // 1. Fetch other instances' local metrics AND last-pushed global stats.
218
+ const { otherInstancesMetrics, pushedGlobalStats } = await this.fetchClusterStateFromDb();
219
+ allMetrics.push(...otherInstancesMetrics);
220
+ // 2. Add fresh local metrics from this instance.
171
221
  const localMetrics = await this.getLocalMetricsAsJson();
172
222
  if (localMetrics)
173
223
  allMetrics.push(localMetrics);
174
- // 3. If leader, add global stats
175
- const globalStats = await this.getGlobalStatsAsJson();
176
- if (globalStats)
177
- allMetrics.push(globalStats);
224
+ // 3. Global stats: leader uses fresh on-the-fly values; followers
225
+ // fall back to what the current leader last pushed.
226
+ if (this.leaderElector.isLeader) {
227
+ const freshGlobalStats = await this.getGlobalStatsAsJson();
228
+ if (freshGlobalStats)
229
+ allMetrics.push(freshGlobalStats);
230
+ }
231
+ else if (pushedGlobalStats) {
232
+ allMetrics.push(pushedGlobalStats);
233
+ }
178
234
  // 4. Aggregate all
179
235
  if (allMetrics.length === 0)
180
236
  return null;
@@ -200,11 +256,6 @@ class MetricsCollector {
200
256
  await this.triggerGlobalStatsCollection();
201
257
  registries.push(this.globalStatsRegistry);
202
258
  }
203
- // The following line was added as per instruction, but 'stats' is not defined in this scope.
204
- // It also has a syntax error (missing closing brace).
205
- // Assuming it was meant to be a placeholder or part of a different context,
206
- // it's commented out to maintain syntactical correctness of the file.
207
- // if (stats.statuses.find((s) => s._id === 'failed')) {return null;
208
259
  if (registries.length === 0)
209
260
  return null;
210
261
  if (registries.length === 1)
@@ -214,26 +265,36 @@ class MetricsCollector {
214
265
  // ========================================================================
215
266
  // Metrics Data Fetching
216
267
  // ========================================================================
217
- async fetchOtherInstancesMetrics() {
268
+ async fetchClusterStateFromDb() {
218
269
  try {
219
270
  const registryDoc = (await this.globalsCollection.findOne({ _id: REGISTRY_DOC_ID }, { readPreference: this.options.readPreference }));
220
- if (!(registryDoc === null || registryDoc === void 0 ? void 0 : registryDoc.instances) || !Array.isArray(registryDoc.instances)) {
221
- return [];
271
+ if (!registryDoc) {
272
+ return { otherInstancesMetrics: [], pushedGlobalStats: null };
222
273
  }
223
274
  const now = Date.now();
224
275
  const staleThreshold = STALE_THRESHOLD_MULTIPLIER * this.options.pushIntervalMs;
225
- return registryDoc.instances
226
- .filter((inst) => {
227
- const age = now - new Date(inst.lastSeen).getTime();
228
- const isStale = age > staleThreshold;
229
- const isSelf = inst.id === this.instanceId;
230
- return !isStale && !isSelf && Array.isArray(inst.metrics);
231
- })
232
- .map((inst) => inst.metrics);
276
+ const otherInstancesMetrics = Array.isArray(registryDoc.instances)
277
+ ? registryDoc.instances
278
+ .filter((inst) => {
279
+ const age = now - new Date(inst.lastSeen).getTime();
280
+ const isStale = age > staleThreshold;
281
+ const isSelf = inst.id === this.instanceId;
282
+ return !isStale && !isSelf && Array.isArray(inst.metrics);
283
+ })
284
+ .map((inst) => inst.metrics)
285
+ : [];
286
+ let pushedGlobalStats = null;
287
+ if (registryDoc.globalStats && Array.isArray(registryDoc.globalStats.metrics)) {
288
+ const age = now - new Date(registryDoc.globalStats.updatedAt).getTime();
289
+ if (age <= GLOBAL_STATS_STALE_MULTIPLIER * this.options.pushIntervalMs) {
290
+ pushedGlobalStats = registryDoc.globalStats.metrics;
291
+ }
292
+ }
293
+ return { otherInstancesMetrics, pushedGlobalStats };
233
294
  }
234
295
  catch (e) {
235
296
  this.onError(e);
236
- return [];
297
+ return { otherInstancesMetrics: [], pushedGlobalStats: null };
237
298
  }
238
299
  }
239
300
  async getLocalMetricsAsJson() {
@@ -275,32 +336,50 @@ class MetricsCollector {
275
336
  if (!this.localPromRegistry)
276
337
  return;
277
338
  try {
278
- const metricsJson = await this.localPromRegistry.getMetricsAsJSON();
279
- await this.publishMetricsToGlobalRegistry(metricsJson);
339
+ const localMetrics = await this.localPromRegistry.getMetricsAsJSON();
340
+ // Leader bundles the freshly computed global stats into the
341
+ // registry document so follower-served scrapes in cluster
342
+ // mode return a complete metrics view. Non-leaders write
343
+ // only their local metrics.
344
+ const globalStatsToPush = this.leaderElector.isLeader ? await this.getGlobalStatsAsJson() : null;
345
+ await this.publishMetricsToGlobalRegistry(localMetrics, globalStatsToPush);
280
346
  }
281
347
  catch (e) {
282
348
  this.onError(e);
283
349
  }
284
350
  }
285
- async publishMetricsToGlobalRegistry(metrics) {
351
+ async publishMetricsToGlobalRegistry(localMetrics, globalStats) {
286
352
  try {
287
353
  const threshold = STALE_THRESHOLD_MULTIPLIER * this.options.pushIntervalMs;
354
+ // Re-check leadership immediately before emitting the pipeline
355
+ // so a transition that happened during `getGlobalStatsAsJson()`
356
+ // doesn't let a former leader overwrite the shared globalStats
357
+ // blob after stepping down.
358
+ const stillLeader = this.leaderElector.isLeader;
288
359
  // Leader cleans up stale instances; followers only update self
289
- const keepCondition = this.leaderElector.isLeader
360
+ const keepCondition = stillLeader
290
361
  ? { $and: [{ $ne: ['$$inst.id', this.instanceId] }, { $lt: [{ $subtract: ['$$NOW', '$$inst.lastSeen'] }, threshold] }] }
291
362
  : { $ne: ['$$inst.id', this.instanceId] };
292
- await this.globalsCollection.updateOne({ _id: REGISTRY_DOC_ID }, [
363
+ const pipeline = [
293
364
  {
294
365
  $set: {
295
366
  instances: {
296
367
  $concatArrays: [
297
368
  { $filter: { input: { $ifNull: ['$instances', []] }, as: 'inst', cond: keepCondition } },
298
- [{ id: this.instanceId, lastSeen: '$$NOW', metrics }],
369
+ [{ id: this.instanceId, lastSeen: '$$NOW', metrics: localMetrics }],
299
370
  ],
300
371
  },
301
372
  },
302
373
  },
303
- ], { upsert: true });
374
+ ];
375
+ if (globalStats && stillLeader) {
376
+ pipeline.push({
377
+ $set: {
378
+ globalStats: { updatedAt: '$$NOW', leaderId: this.instanceId, metrics: globalStats },
379
+ },
380
+ });
381
+ }
382
+ await this.globalsCollection.updateOne({ _id: REGISTRY_DOC_ID }, pipeline, { upsert: true });
304
383
  }
305
384
  catch (e) {
306
385
  this.onError(e);
@@ -1 +1 @@
1
- {"version":3,"file":"MetricsCollector.js","sourceRoot":"","sources":["../../../src/reactiveTasks/MetricsCollector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MetricsCollector.js","sourceRoot":"","sources":["../../../src/reactiveTasks/MetricsCollector.ts"],"names":[],"mappings":";;;AAGA,wCAAqD;AAGrD,2DAA8H;AAE9H,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,MAAM,YAAY,GAAG;IACjB,QAAQ,EAAE,iCAAiC;IAC3C,OAAO,EAAE,8BAA8B;IACvC,WAAW,EAAE,4BAA4B;IACzC,UAAU,EAAE,mCAAmC;IAC/C,iBAAiB,EAAE,0CAA0C;IAC7D,mBAAmB,EAAE,sDAAsD;IAC3E,gBAAgB,EAAE,uCAAuC;IACzD,SAAS,EAAE,gCAAgC;IAC3C,aAAa,EAAE,oCAAoC;IACnD,cAAc,EAAE,qCAAqC;CACxD,CAAC;AAEF,MAAM,eAAe,GAAG,iCAAiC,CAAC;AAE1D;;;;;GAKG;AACH,MAAM,0BAA0B,GAAG,EAAE,CAAC;AAEtC;;;;;;;;GAQG;AACH,MAAM,6BAA6B,GAAG,CAAC,CAAC;AAExC,MAAM,qBAAqB,GAAG,KAAK,CAAC;AAYpC,MAAM,eAAe,GAAsG;IACvH,OAAO,EAAE,IAAI;IACb,UAAU,EAAE,SAAS;IACrB,cAAc,EAAE,oBAAoB;IACpC,cAAc,EAAE,qBAAqB;CACxC,CAAC;AAEF,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E;;;;;;;;;;;;;;;GAeG;AACH,MAAa,gBAAgB;IA+BzB,2EAA2E;IAC3E,cAAc;IACd,2EAA2E;IAE3E,YACI,UAAkB,EAClB,QAA8B,EAC9B,iBAAoC,EACpC,aAA4B,EAC5B,OAAmD,EACnD,UAAmB,wBAAc;QAZ7B,wBAAmB,GAAyB,IAAI,CAAC;QAcrD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QAC3C,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,OAAO,mCAAQ,eAAe,GAAK,OAAO,CAAE,CAAC;QAClD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;QACpC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAEvB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,cAAc,EAAE,CAAC;QAC1B,CAAC;IACL,CAAC;IAED,2EAA2E;IAC3E,iBAAiB;IACjB,2EAA2E;IAEnE,cAAc;QAClB,IAAI,CAAC;YACD,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;QACnD,CAAC;QAAC,WAAM,CAAC;YACL,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YACrB,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,8FAA8F,CAAC,CAAC,CAAC;YACxH,OAAO;QACX,CAAC;QAED,IAAI,CAAC,iBAAiB,GAAG,IAAI,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC;QAC9D,IAAI,CAAC,mBAAmB,GAAG,IAAI,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC;QAEhE,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,sBAAsB,EAAE,CAAC;IAClC,CAAC;IAEO,gBAAgB;QACpB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,iBAAiB,CACxC,YAAY,CAAC,QAAQ,EACrB,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAC/B,EAAE,IAAI,EAAE,2CAA2C,EAAE,UAAU,EAAE,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE,EAC1F,IAAI,CAAC,iBAAkB,CAC1B,CAAC;QAEF,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,iBAAiB,CACvC,YAAY,CAAC,OAAO,EACpB,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAC7B,EAAE,IAAI,EAAE,oCAAoC,EAAE,UAAU,EAAE,CAAC,WAAW,CAAC,EAAE,EACzE,IAAI,CAAC,iBAAkB,CAC1B,CAAC;QAEF,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,iBAAiB,CAC/C,YAAY,CAAC,gBAAgB,EAC7B,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAC7B,EAAE,IAAI,EAAE,qFAAqF,EAAE,UAAU,EAAE,EAAE,EAAE,EAC/G,IAAI,CAAC,iBAAkB,CAC1B,CAAC;QAEF,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,iBAAiB,CACxC,YAAY,CAAC,SAAS,EACtB,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAC7B;YACI,IAAI,EAAE,4IAA4I;YAClJ,UAAU,EAAE,CAAC,WAAW,CAAC;SAC5B,EACD,IAAI,CAAC,iBAAkB,CAC1B,CAAC;QAEF,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,CAC5C,YAAY,CAAC,aAAa,EAC1B,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAC7B,EAAE,IAAI,EAAE,2DAA2D,EAAE,UAAU,EAAE,EAAE,EAAE,EACrF,IAAI,CAAC,iBAAkB,CAC1B,CAAC;QAEF,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,iBAAiB,CAC7C,YAAY,CAAC,cAAc,EAC3B,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAC7B,EAAE,IAAI,EAAE,4EAA4E,EAAE,UAAU,EAAE,EAAE,EAAE,EACtG,IAAI,CAAC,iBAAkB,CAC1B,CAAC;IACN,CAAC;IAEO,sBAAsB;QAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAoB,CAAC;QAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAEzC,mDAAmD;QACnD,IAAI,UAAU,CAAC,KAAK,CAAC;YACjB,IAAI,EAAE,YAAY,CAAC,WAAW;YAC9B,IAAI,EAAE,+BAA+B;YACrC,UAAU,EAAE,CAAC,WAAW,EAAE,QAAQ,CAAC;YACnC,SAAS,EAAE,CAAC,QAAQ,CAAC;YACrB,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,6BAA6B,EAAE,CAAC;SAClF,CAAC,CAAC;QAEH,0EAA0E;QAC1E,IAAI,UAAU,CAAC,KAAK,CAAC;YACjB,IAAI,EAAE,YAAY,CAAC,UAAU;YAC7B,IAAI,EAAE,6BAA6B;YACnC,UAAU,EAAE,CAAC,WAAW,CAAC;YACzB,SAAS,EAAE,CAAC,QAAQ,CAAC;YACrB,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,6BAA6B,EAAE,CAAC;SAClF,CAAC,CAAC;QAEH,iCAAiC;QACjC,MAAM,mBAAmB,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC;YAC7C,IAAI,EAAE,YAAY,CAAC,mBAAmB;YACtC,IAAI,EAAE,8CAA8C;YACpD,SAAS,EAAE,CAAC,QAAQ,CAAC;YACrB,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SAClH,CAAC,CAAC;QAEH,0BAA0B;QAC1B,MAAM,oBAAoB,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC;YAC9C,IAAI,EAAE,YAAY,CAAC,iBAAiB;YACpC,IAAI,EAAE,gCAAgC;YACtC,SAAS,EAAE,CAAC,QAAQ,CAAC;YACrB,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SAC7G,CAAC,CAAC;IACP,CAAC;IAED,2EAA2E;IAC3E,YAAY;IACZ,2EAA2E;IAEpE,KAAK;QACR,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,KAAK,OAAO;YAAE,OAAO;QAEjE,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAE5F,wCAAwC;QACxC,IAAI,CAAC,gBAAgB,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9D,CAAC;IAEM,IAAI;;QACP,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACjC,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;QAClC,CAAC;QACD,yEAAyE;QACzE,MAAA,IAAI,CAAC,iBAAiB,0CAAE,KAAK,EAAE,CAAC;QAChC,MAAA,IAAI,CAAC,mBAAmB,0CAAE,KAAK,EAAE,CAAC;IACtC,CAAC;IAED,2EAA2E;IAC3E,gCAAgC;IAChC,2EAA2E;IAEpE,mBAAmB,CAAC,IAAY,EAAE,MAA4B,EAAE,UAAkB;QACrF,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE,OAAO;QAClD,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,UAAU,GAAG,IAAI,CAAC,CAAC;IAChF,CAAC;IAEM,WAAW,CAAC,IAAY;QAC3B,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,OAAO;QACjD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;IAEM,oBAAoB;QACvB,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,qBAAqB;YAAE,OAAO;QACzD,IAAI,CAAC,qBAAqB,CAAC,GAAG,EAAE,CAAC;IACrC,CAAC;IAEM,cAAc,CAAC,IAAY;QAC9B,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE,OAAO;QAClD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACjD,CAAC;IAEM,iBAAiB;QACpB,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,kBAAkB;YAAE,OAAO;QACtD,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC;IAClC,CAAC;IAEM,kBAAkB;QACrB,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,mBAAmB;YAAE,OAAO;QACvD,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,CAAC;IACnC,CAAC;IAED,2EAA2E;IAC3E,+BAA+B;IAC/B,2EAA2E;IAEpE,KAAK,CAAC,oBAAoB;QAC7B,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB;YAAE,OAAO,IAAI,CAAC;QAEzD,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;IACrG,CAAC;IAED,2EAA2E;IAC3E,8BAA8B;IAC9B,2EAA2E;IAE3E;;;;;;OAMG;IACK,KAAK,CAAC,iBAAiB;QAC3B,MAAM,UAAU,GAAkB,EAAE,CAAC;QAErC,wEAAwE;QACxE,MAAM,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,GAAG,MAAM,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC1F,UAAU,CAAC,IAAI,CAAC,GAAG,qBAAqB,CAAC,CAAC;QAE1C,iDAAiD;QACjD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;QACxD,IAAI,YAAY;YAAE,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAEhD,kEAAkE;QAClE,uDAAuD;QACvD,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;YAC9B,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC3D,IAAI,gBAAgB;gBAAE,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC5D,CAAC;aAAM,IAAI,iBAAiB,EAAE,CAAC;YAC3B,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACvC,CAAC;QAED,mBAAmB;QACnB,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAEzC,IAAI,CAAC;YACD,OAAO,MAAM,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAChF,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,IAAI,CAAC,OAAO,CAAC,CAAU,CAAC,CAAC;YACzB,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,eAAe;QACzB,MAAM,UAAU,GAAe,EAAE,CAAC;QAElC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC5C,CAAC;QAED,2BAA2B;QAC3B,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC1D,MAAM,IAAI,CAAC,4BAA4B,EAAE,CAAC;YAC1C,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAC9C,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACzC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;QAElD,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC5D,CAAC;IAED,2EAA2E;IAC3E,wBAAwB;IACxB,2EAA2E;IAEnE,KAAK,CAAC,uBAAuB;QACjC,IAAI,CAAC;YACD,MAAM,WAAW,GAAG,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CACrD,EAAE,GAAG,EAAE,eAAe,EAAE,EACxB,EAAE,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAClD,CAA4B,CAAC;YAE9B,IAAI,CAAC,WAAW,EAAE,CAAC;gBACf,OAAO,EAAE,qBAAqB,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC;YAClE,CAAC;YAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,cAAc,GAAG,0BAA0B,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;YAEhF,MAAM,qBAAqB,GAAkB,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC;gBAC7E,CAAC,CAAC,WAAW,CAAC,SAAS;qBAChB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;oBACb,MAAM,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC;oBACpD,MAAM,OAAO,GAAG,GAAG,GAAG,cAAc,CAAC;oBACrC,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,UAAU,CAAC;oBAC3C,OAAO,CAAC,OAAO,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC9D,CAAC,CAAC;qBACD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAsB,CAAC;gBACjD,CAAC,CAAC,EAAE,CAAC;YAET,IAAI,iBAAiB,GAAuB,IAAI,CAAC;YACjD,IAAI,WAAW,CAAC,WAAW,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC5E,MAAM,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;gBACxE,IAAI,GAAG,IAAI,6BAA6B,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;oBACrE,iBAAiB,GAAG,WAAW,CAAC,WAAW,CAAC,OAAsB,CAAC;gBACvE,CAAC;YACL,CAAC;YAED,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,CAAC;QACxD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,IAAI,CAAC,OAAO,CAAC,CAAU,CAAC,CAAC;YACzB,OAAO,EAAE,qBAAqB,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC;QAClE,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,qBAAqB;QAC/B,IAAI,CAAC,IAAI,CAAC,iBAAiB;YAAE,OAAO,IAAI,CAAC;QAEzC,IAAI,CAAC;YACD,OAAO,MAAM,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,CAAC;QAC3D,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,IAAI,CAAC,OAAO,CAAC,CAAU,CAAC,CAAC;YACzB,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,oBAAoB;QAC9B,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,mBAAmB;YAAE,OAAO,IAAI,CAAC;QAE3E,IAAI,CAAC;YACD,OAAO,MAAM,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,CAAC;QAC7D,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,IAAI,CAAC,OAAO,CAAC,CAAU,CAAC,CAAC;YACzB,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,4BAA4B;QACtC,IAAI,CAAC,IAAI,CAAC,mBAAmB;YAAE,OAAO;QAEtC,IAAI,CAAC;YACD,MAAM,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,CAAC;QACtD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,IAAI,CAAC,OAAO,CAAC,CAAU,CAAC,CAAC;QAC7B,CAAC;IACL,CAAC;IAED,2EAA2E;IAC3E,yCAAyC;IACzC,2EAA2E;IAEnE,KAAK,CAAC,gBAAgB;QAC1B,IAAI,CAAC,IAAI,CAAC,iBAAiB;YAAE,OAAO;QAEpC,IAAI,CAAC;YACD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,CAAC;YACrE,4DAA4D;YAC5D,0DAA0D;YAC1D,yDAAyD;YACzD,4BAA4B;YAC5B,MAAM,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACjG,MAAM,IAAI,CAAC,8BAA8B,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;QAC/E,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,IAAI,CAAC,OAAO,CAAC,CAAU,CAAC,CAAC;QAC7B,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,8BAA8B,CAAC,YAAyB,EAAE,WAA+B;QACnG,IAAI,CAAC;YACD,MAAM,SAAS,GAAG,0BAA0B,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;YAE3E,+DAA+D;YAC/D,gEAAgE;YAChE,+DAA+D;YAC/D,4BAA4B;YAC5B,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;YAEhD,+DAA+D;YAC/D,MAAM,aAAa,GAAG,WAAW;gBAC7B,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,OAAO,EAAE,iBAAiB,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,CAAC,EAAE;gBACxH,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAE9C,MAAM,QAAQ,GAAe;gBACzB;oBACI,IAAI,EAAE;wBACF,SAAS,EAAE;4BACP,aAAa,EAAE;gCACX,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,YAAY,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE;gCACxF,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;6BACtE;yBACJ;qBACJ;iBACJ;aACJ,CAAC;YACF,IAAI,WAAW,IAAI,WAAW,EAAE,CAAC;gBAC7B,QAAQ,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE;wBACF,WAAW,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE;qBACvF;iBACJ,CAAC,CAAC;YACP,CAAC;YAED,MAAM,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,eAAe,EAAE,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACjG,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,IAAI,CAAC,OAAO,CAAC,CAAU,CAAC,CAAC;QAC7B,CAAC;IACL,CAAC;IAED,2EAA2E;IAC3E,wCAAwC;IACxC,2EAA2E;IAEnE,KAAK,CAAC,eAAe,CAAC,SAA8B;QACxD,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ;YAAE,OAAO;QAEzC,IAAI,CAAC;YACD,MAAM,SAAS,EAAE,CAAC;QACtB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,IAAI,CAAC,OAAO,CAAC,CAAU,CAAC,CAAC;QAC7B,CAAC;IACL,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,6BAA6B;QACvC,IAAI,CAAC,IAAI,CAAC,mBAAmB;YAAE,OAAO;QAEtC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC5B,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;gBACtE,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAoB,CAAC,eAAe,CAAC,IAAI,CAAU,CAAC;gBACvE,IAAI,KAAK;oBAAE,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;gBACZ,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;YACpC,CAAC,CAAC,CAAC;QACP,CAAC;QAED,MAAM,IAAI,CAAC,mBAAmB,CAAC;IACnC,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAAC,QAAsF;QACpH,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;QAE9C,MAAM,OAAO,CAAC,GAAG,CACb,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;YACjC,IAAI,CAAC;gBACD,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,aAAa,CACxC,EAAE,EACF;oBACI,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc;oBAC3C,mBAAmB,EAAE,IAAI;oBACzB,gBAAgB,EAAE,IAAI;oBACtB,WAAW,EAAE,IAAI;iBACpB,CACJ,CAAC;gBAEF,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;oBAC7B,oDAAoD;oBACpD,8DAA8D;oBAC9D,MAAM,EAAE,GAAG,CAAC,CAAC,GAAU,CAAC;oBACxB,QAAQ,CAAC,YAAY,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;gBAC3F,CAAC;gBAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACvB,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC;gBACxC,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;oBACxB,MAAM,UAAU,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC3G,QAAQ,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;gBACxE,CAAC;YACL,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACT,IAAI,CAAC,OAAO,CAAC,CAAU,CAAC,CAAC;YAC7B,CAAC;QACL,CAAC,CAAC,CACL,CAAC;IACN,CAAC;IAEO,KAAK,CAAC,4BAA4B,CAAC,QAA+B;QACtE,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CACjD,EAAE,GAAG,EAAE,6CAAyB,EAAE,EAClC,EAAE,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAClD,CAAwB,CAAC;YAE1B,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,gBAAgB,EAAE,CAAC;gBAC5B,QAAQ,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;YAClE,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,IAAI,CAAC,OAAO,CAAC,CAAU,CAAC,CAAC;QAC7B,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAAC,QAA+B;;QAChE,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CACjD,EAAE,GAAG,EAAE,6CAAyB,EAAE,EAClC,EAAE,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAClD,CAAwB,CAAC;YAE1B,IAAI,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,0CAAE,eAAe,EAAE,CAAC;gBACxC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;gBAC9G,QAAQ,CAAC,UAAU,CAAC,CAAC;YACzB,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,IAAI,CAAC,OAAO,CAAC,CAAU,CAAC,CAAC;QAC7B,CAAC;IACL,CAAC;IAED,2EAA2E;IAC3E,UAAU;IACV,2EAA2E;IAEnE,iBAAiB,CACrB,IAAY,EACZ,WAAsD,EACtD,MAA+B,EAC/B,QAAkB;QAElB,MAAM,QAAQ,GAAG,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,QAAQ;YAAE,OAAO,QAAa,CAAC;QACnC,OAAO,IAAI,WAAW,+BAAG,IAAI,IAAK,MAAM,KAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,IAAG,CAAC;IACvE,CAAC;CACJ;AAjiBD,4CAiiBC"}
@@ -37,6 +37,7 @@ class ReactiveTaskPlanner {
37
37
  this.batchFlushTimer = null;
38
38
  this.batchFirstEventTime = null;
39
39
  this.isFlushing = false;
40
+ this.lastFlushFailed = false;
40
41
  this.metaDocId = ReactiveTaskTypes_1.REACTIVE_TASK_META_DOC_ID;
41
42
  this.lastClusterTime = null;
42
43
  this.isStopping = false;
@@ -88,8 +89,10 @@ class ReactiveTaskPlanner {
88
89
  return this.taskBatch.size === 0 && !this.isFlushing;
89
90
  }
90
91
  async onHeartbeat() {
91
- // Save resume token if stream is running and idle
92
- if (this.changeStream && this.isEmpty) {
92
+ // Save resume token if stream is running and idle.
93
+ // Skip if the previous flush failed: advancing the token would cause
94
+ // the un-planned events to be lost forever on resume.
95
+ if (this.changeStream && this.isEmpty && !this.lastFlushFailed) {
93
96
  await this.saveResumeToken(this.changeStream.resumeToken, this.lastClusterTime ? new Date(this.lastClusterTime * 1000) : undefined);
94
97
  }
95
98
  // Periodic cleanup of orphaned tasks
@@ -142,6 +145,8 @@ class ReactiveTaskPlanner {
142
145
  debug(`[ReactiveTaskPlanner] Watching database: ${dbToWatch.databaseName}`);
143
146
  const stream = dbToWatch.watch(pipeline, streamOptions);
144
147
  this.changeStream = stream;
148
+ // Stream started successfully — safe to advance resume tokens again.
149
+ this.lastFlushFailed = false;
145
150
  stream.on('change', (change) => {
146
151
  this.enqueueTaskChange(change);
147
152
  });
@@ -259,6 +264,7 @@ class ReactiveTaskPlanner {
259
264
  }
260
265
  }
261
266
  async flushTaskBatch() {
267
+ var _a, _b, _c, _d;
262
268
  if (this.batchFlushTimer) {
263
269
  clearTimeout(this.batchFlushTimer);
264
270
  this.batchFlushTimer = null;
@@ -275,14 +281,24 @@ class ReactiveTaskPlanner {
275
281
  const { idsByCollection, deletedIdsByTask } = this.groupEventsByCollection(events);
276
282
  await this.processDeletions(deletedIdsByTask);
277
283
  await this.executeUpsertOperations(idsByCollection);
278
- if (lastToken) {
284
+ // Do not advance the token past events that could not be planned in a
285
+ // previous batch. lastFlushFailed is cleared only when the stream restarts
286
+ // (startChangeStream), so it stays true across any subsequent successful
287
+ // flushes that run before the restart completes.
288
+ if (lastToken && !this.lastFlushFailed) {
279
289
  await this.saveResumeToken(lastToken, lastClusterTime);
280
290
  }
281
291
  }
282
292
  catch (error) {
283
293
  this.onError(error);
284
- // We lost the batch, but we can't easily retry without complicating logic.
285
- // The stream continues.
294
+ // Mark as failed so heartbeat and future flushes do not advance the
295
+ // resume token past events we could not plan. The flag is cleared only
296
+ // when the change stream is restarted (startChangeStream).
297
+ this.lastFlushFailed = true;
298
+ (_b = (_a = this.callbacks).onFlushFailure) === null || _b === void 0 ? void 0 : _b.call(_a);
299
+ // Use onRequestRestart (not onStreamError) so flush failures don't
300
+ // pollute the stream-error metric.
301
+ (_d = (_c = this.callbacks).onRequestRestart) === null || _d === void 0 ? void 0 : _d.call(_c);
286
302
  }
287
303
  finally {
288
304
  this.isFlushing = false;
@@ -322,37 +338,56 @@ class ReactiveTaskPlanner {
322
338
  return { idsByCollection, deletedIdsByTask };
323
339
  }
324
340
  async processDeletions(deletedIdsByTask) {
325
- if (deletedIdsByTask.size > 0) {
326
- await Promise.all(Array.from(deletedIdsByTask.entries()).map(async ([taskName, ids]) => {
327
- if (ids.size === 0)
328
- return;
329
- const taskDef = this.registry.getTask(taskName);
330
- if (taskDef) {
331
- // We use deleteOrphanedTasks but limit it to the source IDs we just saw deleted.
332
- // This reuses the EXACT same logic (including keepFor checks) as the background cleaner.
333
- await taskDef.repository.deleteOrphanedTasks(taskName, taskDef.sourceCollection.collectionName, taskDef.filter || {}, taskDef.cleanupPolicyParsed, () => false, // shouldStop: immediate execution, no need to stop
334
- Array.from(ids));
335
- }
336
- }));
337
- }
341
+ if (deletedIdsByTask.size === 0)
342
+ return;
343
+ const entries = Array.from(deletedIdsByTask.entries());
344
+ const labels = entries.map(([taskName]) => `task=${taskName}`);
345
+ const results = await Promise.allSettled(entries.map(async ([taskName, ids]) => {
346
+ if (ids.size === 0)
347
+ return;
348
+ const taskDef = this.registry.getTask(taskName);
349
+ if (taskDef) {
350
+ // We use deleteOrphanedTasks but limit it to the source IDs we just saw deleted.
351
+ // This reuses the EXACT same logic (including keepFor checks) as the background cleaner.
352
+ await taskDef.repository.deleteOrphanedTasks(taskName, taskDef.sourceCollection.collectionName, taskDef.filter || {}, taskDef.cleanupPolicyParsed, () => false, // shouldStop: immediate execution, no need to stop
353
+ Array.from(ids));
354
+ }
355
+ }));
356
+ this.throwOnAnyRejection(results, 'processDeletions', labels);
338
357
  }
339
358
  async executeUpsertOperations(idsByCollection) {
340
- if (idsByCollection.size > 0) {
341
- await Promise.all(Array.from(idsByCollection.entries()).map(async ([collectionName, ids]) => {
342
- if (ids.size === 0)
343
- return;
344
- try {
345
- await this.ops.executePlanningPipeline(collectionName, Array.from(ids));
346
- }
347
- catch (error) {
348
- this.onError(error);
349
- }
350
- }));
359
+ if (idsByCollection.size === 0)
360
+ return;
361
+ const entries = Array.from(idsByCollection.entries());
362
+ const labels = entries.map(([collectionName]) => `collection=${collectionName}`);
363
+ const results = await Promise.allSettled(entries.map(async ([collectionName, ids]) => {
364
+ if (ids.size === 0)
365
+ return;
366
+ await this.ops.executePlanningPipeline(collectionName, Array.from(ids));
367
+ }));
368
+ this.throwOnAnyRejection(results, 'executeUpsertOperations', labels);
369
+ }
370
+ throwOnAnyRejection(results, context, labels = []) {
371
+ if (results.every((r) => r.status !== 'rejected'))
372
+ return;
373
+ // Build a single aggregated error so the caller (flushTaskBatch) reports it once.
374
+ // Calling onError here for each failure would duplicate the report since flushTaskBatch
375
+ // also calls onError on the thrown error. We zip each result with its label (taskName /
376
+ // collectionName) so operators can immediately identify the failing pipeline or delete.
377
+ const failures = [];
378
+ for (let i = 0; i < results.length; i += 1) {
379
+ const r = results[i];
380
+ if (r.status !== 'rejected')
381
+ continue;
382
+ const msg = r.reason instanceof Error ? r.reason.message : String(r.reason);
383
+ const label = labels[i] ? ` (${labels[i]})` : '';
384
+ failures.push(`[${failures.length + 1}]${label} ${msg}`);
351
385
  }
386
+ throw new Error(`${context}: ${failures.length} of ${results.length} operation(s) failed. Errors: ${failures.join('; ')}`);
352
387
  }
353
388
  async handleStreamError(error) {
354
389
  if (error.code === 280) {
355
- this.onError(new Error(`Critical error: Oplog history lost(ChangeStreamHistoryLost).Resetting Resume Token.Original error: ${error.message} `));
390
+ this.onError(new Error(`Critical error: Oplog history lost (ChangeStreamHistoryLost). Resetting Resume Token. Original error: ${error.message}`));
356
391
  await this.globalsCollection.updateOne({ _id: this.metaDocId }, { $unset: { 'streamState.resumeToken': '', reconciliation: '' } });
357
392
  this.onInfo({
358
393
  message: `Oplog lost, triggering reconciliation...`,
@@ -367,7 +402,7 @@ class ReactiveTaskPlanner {
367
402
  }
368
403
  else {
369
404
  this.onInfo({
370
- message: `Change Stream error: ${error.message} `,
405
+ message: `Change Stream error: ${error.message}`,
371
406
  code: ReactiveTaskTypes_1.CODE_REACTIVE_TASK_PLANNER_STREAM_ERROR,
372
407
  error: error.message,
373
408
  });