@serve.zone/dcrouter 32.1.1 → 32.1.2

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 (48) hide show
  1. package/deno.json +1 -1
  2. package/dist_ts/00_commitinfo_data.js +1 -1
  3. package/dist_ts/classes.dcrouter.js +2 -2
  4. package/dist_ts/config/classes.gateway-client-manager.js +1 -1
  5. package/dist_ts/db/documents/classes.cached.email.d.ts +0 -1
  6. package/dist_ts/db/documents/classes.cached.email.js +45 -48
  7. package/dist_ts/db/documents/classes.email-traffic-bucket.doc.d.ts +0 -1
  8. package/dist_ts/db/documents/classes.email-traffic-bucket.doc.js +61 -50
  9. package/dist_ts/db/documents/classes.gateway-client.doc.d.ts +9 -2
  10. package/dist_ts/db/documents/classes.gateway-client.doc.js +9 -11
  11. package/dist_ts/db/documents/classes.ip-intelligence.doc.d.ts +4 -3
  12. package/dist_ts/db/documents/classes.ip-intelligence.doc.js +27 -31
  13. package/dist_ts/db/documents/classes.ops-config-event.doc.d.ts +0 -2
  14. package/dist_ts/db/documents/classes.ops-config-event.doc.js +70 -68
  15. package/dist_ts/db/documents/classes.smartmta-storage.doc.d.ts +14 -0
  16. package/dist_ts/db/documents/classes.smartmta-storage.doc.js +17 -3
  17. package/dist_ts/db/documents/classes.webpush-admission.doc.d.ts +0 -1
  18. package/dist_ts/db/documents/classes.webpush-admission.doc.js +14 -5
  19. package/dist_ts/db/documents/classes.webpush-binding.doc.d.ts +1 -1
  20. package/dist_ts/db/documents/classes.webpush-binding.doc.js +45 -7
  21. package/dist_ts/db/documents/classes.webpush-spool.doc.d.ts +0 -1
  22. package/dist_ts/db/documents/classes.webpush-spool.doc.js +33 -5
  23. package/dist_ts/dns/manager.dns.js +7 -3
  24. package/dist_ts/email/classes.smartmta-storage-manager.d.ts +15 -3
  25. package/dist_ts/email/classes.smartmta-storage-manager.js +62 -36
  26. package/dist_ts/security/classes.security-policy-manager.js +11 -9
  27. package/dist_ts/webpush/classes.webpush-manager.d.ts +5 -1
  28. package/dist_ts/webpush/classes.webpush-manager.js +162 -232
  29. package/dist_ts_web/00_commitinfo_data.js +1 -1
  30. package/package.json +3 -3
  31. package/readme.md +1 -0
  32. package/ts/00_commitinfo_data.ts +1 -1
  33. package/ts/classes.dcrouter.ts +1 -1
  34. package/ts/config/classes.gateway-client-manager.ts +4 -2
  35. package/ts/db/documents/classes.cached.email.ts +51 -66
  36. package/ts/db/documents/classes.email-traffic-bucket.doc.ts +65 -59
  37. package/ts/db/documents/classes.gateway-client.doc.ts +38 -18
  38. package/ts/db/documents/classes.ip-intelligence.doc.ts +37 -40
  39. package/ts/db/documents/classes.ops-config-event.doc.ts +80 -77
  40. package/ts/db/documents/classes.smartmta-storage.doc.ts +16 -1
  41. package/ts/db/documents/classes.webpush-admission.doc.ts +14 -5
  42. package/ts/db/documents/classes.webpush-binding.doc.ts +53 -7
  43. package/ts/db/documents/classes.webpush-spool.doc.ts +39 -5
  44. package/ts/dns/manager.dns.ts +6 -2
  45. package/ts/email/classes.smartmta-storage-manager.ts +66 -50
  46. package/ts/security/classes.security-policy-manager.ts +10 -8
  47. package/ts/webpush/classes.webpush-manager.ts +175 -280
  48. package/ts_web/00_commitinfo_data.ts +1 -1
@@ -464,4 +464,4 @@ export class GatewayClientManager {
464
464
  };
465
465
  }
466
466
  }
467
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5nYXRld2F5LWNsaWVudC1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvY29uZmlnL2NsYXNzZXMuZ2F0ZXdheS1jbGllbnQtbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQ0wsZ0JBQWdCLEdBRWpCLE1BQU0sZ0JBQWdCLENBQUM7QUFxQnhCLE1BQU0sbUJBQW1CLEdBQW1DO0lBQzFELFdBQVcsRUFBRSxJQUFJO0lBQ2pCLGNBQWMsRUFBRSxJQUFJO0lBQ3BCLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLGNBQWMsRUFBRSxLQUFLO0lBQ3JCLFFBQVEsRUFBRSxLQUFLO0lBQ2YsVUFBVSxFQUFFLEtBQUs7SUFDakIsZ0JBQWdCLEVBQUUsS0FBSztJQUN2QixtQkFBbUIsRUFBRSxLQUFLO0lBQzFCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLGFBQWEsRUFBRSxLQUFLO0NBQ3JCLENBQUM7QUFFRixNQUFNLE9BQU8sb0JBQW9CO0lBQ3hCLEtBQUssQ0FBQyxVQUFVLEtBQW1CLENBQUM7SUFFcEMsS0FBSyxDQUFDLFdBQVc7UUFDdEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM5QyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRU0sS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFVO1FBQy9CLE1BQU0sR0FBRyxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FB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
467
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5nYXRld2F5LWNsaWVudC1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvY29uZmlnL2NsYXNzZXMuZ2F0ZXdheS1jbGllbnQtbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQ0wsZ0JBQWdCLEdBSWpCLE1BQU0sZ0JBQWdCLENBQUM7QUFxQnhCLE1BQU0sbUJBQW1CLEdBQW1DO0lBQzFELFdBQVcsRUFBRSxJQUFJO0lBQ2pCLGNBQWMsRUFBRSxJQUFJO0lBQ3BCLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLGNBQWMsRUFBRSxLQUFLO0lBQ3JCLFFBQVEsRUFBRSxLQUFLO0lBQ2YsVUFBVSxFQUFFLEtBQUs7SUFDakIsZ0JBQWdCLEVBQUUsS0FBSztJQUN2QixtQkFBbUIsRUFBRSxLQUFLO0lBQzFCLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLGFBQWEsRUFBRSxLQUFLO0NBQ3JCLENBQUM7QUFFRixNQUFNLE9BQU8sb0JBQW9CO0lBQ3hCLEtBQUssQ0FBQyxVQUFVLEtBQW1CLENBQUM7SUFFcEMsS0FBSyxDQUFDLFdBQVc7UUFDdEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM5QyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRU0sS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFVO1FBQy9CLE1BQU0sR0FBRyxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FB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
@@ -228,7 +228,6 @@ export declare class CachedEmail extends plugins.smartdata.SmartdataCachedDocume
228
228
  static findPendingForDelivery(limit?: number): Promise<CachedEmail[]>;
229
229
  static findQueuedForRecovery(limit?: number): Promise<CachedEmail[]>;
230
230
  private static findLimited;
231
- private static getNativeCollection;
232
231
  private static buildListQuery;
233
232
  /**
234
233
  * Find the most recently accepted emails, newest first.
@@ -416,12 +416,11 @@ let CachedEmail = (() => {
416
416
  if (safeLimit === 0) {
417
417
  return [];
418
418
  }
419
- const collection = CachedEmail.collection;
420
- const cursor = await collection.getCursor(filter, CachedEmail);
421
- if (sort) {
422
- cursor.mongodbCursor.sort(sort);
423
- }
424
- cursor.mongodbCursor.limit(safeLimit);
419
+ const cursor = await CachedEmail.getCursor(filter, {
420
+ ...(sort ? { sort } : {}),
421
+ limit: safeLimit,
422
+ maxTimeMS: DB_OPERATION_TIMEOUT_MS,
423
+ });
425
424
  try {
426
425
  return await cursor.toArray();
427
426
  }
@@ -429,9 +428,6 @@ let CachedEmail = (() => {
429
428
  await cursor.close();
430
429
  }
431
430
  }
432
- static getNativeCollection() {
433
- return getDb().mongoDb.collection('CachedEmail');
434
- }
435
431
  static buildListQuery(filterArg) {
436
432
  const query = {};
437
433
  if (filterArg.direction) {
@@ -478,13 +474,22 @@ let CachedEmail = (() => {
478
474
  }
479
475
  const query = CachedEmail.buildListQuery(filterArg);
480
476
  query.acceptedAt = { $gte: cutoffArg };
481
- const collection = await CachedEmail.getNativeCollection();
482
- const row = await collection.findOne(query, {
477
+ // The oldest retained message is the first row of an ascending, single-field scan;
478
+ // the projection keeps the read off the message bodies.
479
+ const cursor = await CachedEmail.getCursor(query, {
483
480
  projection: { acceptedAt: 1 },
484
481
  sort: { acceptedAt: 1 },
485
- timeoutMS: DB_OPERATION_TIMEOUT_MS,
482
+ limit: 1,
483
+ maxTimeMS: DB_OPERATION_TIMEOUT_MS,
486
484
  });
487
- const acceptedAt = Number(row?.acceptedAt);
485
+ let oldest;
486
+ try {
487
+ oldest = await cursor.next(false);
488
+ }
489
+ finally {
490
+ await cursor.close();
491
+ }
492
+ const acceptedAt = Number(oldest?.acceptedAt);
488
493
  return Number.isSafeInteger(acceptedAt) && acceptedAt >= 0 ? acceptedAt : null;
489
494
  }
490
495
  static async aggregateEmailLogTraffic(filterArg, windowStartArg, windowEndArg, bucketSizeMsArg) {
@@ -498,44 +503,36 @@ let CachedEmail = (() => {
498
503
  }
499
504
  const query = CachedEmail.buildListQuery(filterArg);
500
505
  query.acceptedAt = { $gte: windowStartArg, $lte: windowEndArg };
501
- const collection = await CachedEmail.getNativeCollection();
502
- const cursor = collection.find(query, {
506
+ // Time buckets are derived per row, which no grouped-totals aggregation expresses,
507
+ // so the rows are streamed with a projection instead of being materialized.
508
+ const cursor = await CachedEmail.getCursor(query, {
503
509
  projection: { acceptedAt: 1, direction: 1, status: 1 },
504
510
  batchSize: 1000,
505
- timeoutMS: DB_OPERATION_TIMEOUT_MS,
511
+ maxTimeMS: DB_OPERATION_TIMEOUT_MS,
506
512
  });
507
- try {
508
- const buckets = new Map();
509
- while (await cursor.hasNext()) {
510
- const row = await cursor.next();
511
- if (!row) {
512
- continue;
513
- }
514
- const acceptedAt = Number(row.acceptedAt);
515
- if (!Number.isSafeInteger(acceptedAt)) {
516
- continue;
517
- }
518
- const bucketStart = Math.floor(acceptedAt / bucketSizeMsArg) * bucketSizeMsArg;
519
- let bucket = buckets.get(bucketStart);
520
- if (!bucket) {
521
- bucket = { bucketStart, sent: 0, received: 0, failed: 0 };
522
- buckets.set(bucketStart, bucket);
523
- }
524
- if (row.status === 'failed' || row.status === 'rejected') {
525
- bucket.failed++;
526
- }
527
- else if (row.direction === 'outbound') {
528
- bucket.sent++;
529
- }
530
- else if (row.direction === 'inbound') {
531
- bucket.received++;
532
- }
513
+ const buckets = new Map();
514
+ await cursor.forEach(async (rowArg) => {
515
+ const acceptedAt = Number(rowArg.acceptedAt);
516
+ if (!Number.isSafeInteger(acceptedAt)) {
517
+ return;
533
518
  }
534
- return [...buckets.values()].sort((firstArg, secondArg) => (firstArg.bucketStart - secondArg.bucketStart));
535
- }
536
- finally {
537
- await cursor.close({ timeoutMS: DB_OPERATION_TIMEOUT_MS });
538
- }
519
+ const bucketStart = Math.floor(acceptedAt / bucketSizeMsArg) * bucketSizeMsArg;
520
+ let bucket = buckets.get(bucketStart);
521
+ if (!bucket) {
522
+ bucket = { bucketStart, sent: 0, received: 0, failed: 0 };
523
+ buckets.set(bucketStart, bucket);
524
+ }
525
+ if (rowArg.status === 'failed' || rowArg.status === 'rejected') {
526
+ bucket.failed++;
527
+ }
528
+ else if (rowArg.direction === 'outbound') {
529
+ bucket.sent++;
530
+ }
531
+ else if (rowArg.direction === 'inbound') {
532
+ bucket.received++;
533
+ }
534
+ });
535
+ return [...buckets.values()].sort((firstArg, secondArg) => (firstArg.bucketStart - secondArg.bucketStart));
539
536
  }
540
537
  static async findRecentSecurityCandidates(limitArg, cutoffArg) {
541
538
  const safeLimit = Math.min(Math.max(Math.floor(limitArg), 1), 1000);
@@ -635,4 +632,4 @@ let CachedEmail = (() => {
635
632
  return CachedEmail = _classThis;
636
633
  })();
637
634
  export { CachedEmail };
638
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5jYWNoZWQuZW1haWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90cy9kYi9kb2N1bWVudHMvY2xhc3Nlcy5jYWNoZWQuZW1haWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXZELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUM7QUFDakQsTUFBTSx1QkFBdUIsR0FBRyxLQUFLLENBQUM7QUFnSHRDOztHQUVHO0FBQ0gsTUFBTSxLQUFLLEdBQUcsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBRXJEOzs7OztHQUtHO0lBRVUsV0FBVzs0QkFEdkIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7Ozs7c0JBQ1gsT0FBTyxDQUFDLFNBQVMsQ0FBQyx1QkFBdUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MkJBQWpELFNBQVEsV0FBc0Q7Ozs7OEJBSXBGLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEVBQ3ZCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO3FDQU14QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtnQ0FNeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7OEJBTXhCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFOzhCQU14QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFB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
635
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5jYWNoZWQuZW1haWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90cy9kYi9kb2N1bWVudHMvY2xhc3Nlcy5jYWNoZWQuZW1haWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXZELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUM7QUFDakQsTUFBTSx1QkFBdUIsR0FBRyxLQUFLLENBQUM7QUFnSHRDOztHQUVHO0FBQ0gsTUFBTSxLQUFLLEdBQUcsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBRXJEOzs7OztHQUtHO0lBRVUsV0FBVzs0QkFEdkIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7Ozs7c0JBQ1gsT0FBTyxDQUFDLFNBQVMsQ0FBQyx1QkFBdUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MkJBQWpELFNBQVEsV0FBc0Q7Ozs7OEJBSXBGLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEVBQ3ZCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO3FDQU14QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtnQ0FNeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7OEJBTXhCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFOzhCQU14QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTsrQkFNeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7bUNBTXhCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO3NDQUl4QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTsrQ0FJeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7MENBSXhCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO2tEQUl4QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtvREFJeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7NENBSXhCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFOzRDQUl4QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtrQ0FNeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFDekIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7MkNBSXhCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO2tEQUl4QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtzREFJeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFDekIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7b0NBTXhCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO3VDQU14QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTt1Q0FTeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7K0NBT3hCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO3FDQU14QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTt1Q0FNeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7d0NBTXhCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO3FDQU14QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTs0Q0FNeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7c0NBTXhCLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEVBQ3pCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO29DQU14QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtxQ0FNeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7c0NBTXhCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO1lBdEt6Qix3SkFBTyxFQUFFLDZCQUFGLEVBQUUsK0VBQVU7WUFNbkIsNktBQU8sU0FBUyw2QkFBVCxTQUFTLDZGQUFVO1lBTTFCLDhKQUFPLElBQUksNkJBQUosSUFBSSxtRkFBVTtZQU1yQix3SkFBTyxFQUFFLDZCQUFGLEVBQUUsK0VBQVk7WUFNckIsd0pBQU8sRUFBRSw2QkFBRixFQUFFLCtFQUFZO1lBTXJCLDJKQUFPLEdBQUcsNkJBQUgsR0FBRyxpRkFBWTtZQU10Qix1S0FBTyxPQUFPLDZCQUFQLE9BQU8seUZBQVU7WUFJeEIsZ0xBQU8sVUFBVSw2QkFBVixVQUFVLCtGQUFVO1lBSTNCLDJNQUFPLG1CQUFtQiw2QkFBbkIsbUJBQW1CLGlIQUFVO1lBSXBDLDRMQUFPLGNBQWMsNkJBQWQsY0FBYyx1R0FBYTtZQUlsQyxvTkFBTyxzQkFBc0IsNkJBQXRCLHNCQUFzQix1SEFBVTtZQUl2QywwTkFBTyx3QkFBd0IsNkJBQXhCLHdCQUF3QiwySEFBVTtZQUl6QyxrTUFBTyxnQkFBZ0IsNkJBQWhCLGdCQUFnQiwyR0FBVTtZQUlqQyxrTUFBTyxnQkFBZ0IsNkJBQWhCLGdCQUFnQiwyR0FBcUM7WUFPNUQsb0tBQU8sTUFBTSw2QkFBTixNQUFNLHVGQUFzQjtZQUluQywrTEFBTyxlQUFlLDZCQUFmLGVBQWUseUdBQVU7WUFJaEMsb05BQU8sc0JBQXNCLDZCQUF0QixzQkFBc0IsdUhBQVU7WUFLdkMsZ09BQU8sMEJBQTBCLDZCQUExQiwwQkFBMEIsK0hBQW1DO1lBTXBFLDBLQUFPLFFBQVEsNkJBQVIsUUFBUSwyRkFBYTtZQU01QixtTEFBTyxXQUFXLDZCQUFYLFdBQVcsaUdBQWE7WUFTL0IsbUxBQU8sV0FBVyw2QkFBWCxXQUFXLGlHQUFRO1lBTzFCLDJNQUFPLG1CQUFtQiw2QkFBbkIsbUJBQW1CLGlIQUFRO1lBTWxDLDZLQUFPLFNBQVMsNkJBQVQsU0FBUyw2RkFBVTtZQU0xQixtTEFBTyxXQUFXLDZCQUFYLFdBQVcsaUdBQVE7WUFNMUIsc0xBQU8sWUFBWSw2QkFBWixZQUFZLG1HQUFVO1lBTTdCLDZLQUFPLFNBQVMsNkJBQVQsU0FBUyw2RkFBcUM7WUFNckQsa01BQU8sZ0JBQWdCLDZCQUFoQixnQkFBZ0IsMkdBQWdCO1lBT3ZDLGdMQUFPLFVBQVUsNkJBQVYsVUFBVSwrRkFBYTtZQU05QiwwS0FBTyxRQUFRLDZCQUFSLFFBQVEsMkZBQWE7WUFNNUIsNktBQU8sU0FBUyw2QkFBVCxTQUFTLDZGQUFVO1lBTTFCLGdMQUFPLFVBQVUsNkJBQVYsVUFBVSwrRkFBa0I7WUE3S3JDLDZLQWdoQkM7OztZQWhoQlksdURBQVc7O1FBQ3RCOztXQUVHO1FBR0ksRUFBRSxxREFBVTtRQUVuQjs7V0FFRztRQUVJLFNBQVMsOEdBQVU7UUFFMUI7O1dBRUc7UUFFSSxJQUFJLGdIQUFVO1FBRXJCOztXQUVHO1FBRUksRUFBRSx5R0FBWTtRQUVyQjs7V0FFRztRQUVJLEVBQUUsdUdBQVk7UUFFckI7O1dBRUc7UUFFSSxHQUFHLHdHQUFZO1FBRXRCOztXQUVHO1FBRUksT0FBTyw2R0FBVTtRQUV4QiwwRUFBMEU7UUFFbkUsVUFBVSxvSEFBVTtRQUUzQixnRUFBZ0U7UUFFekQsbUJBQW1CLGdJQUFVO1FBRXBDLHdDQUF3QztRQUVqQyxjQUFjLDJIQUFXLENBQUMsR0FBQztRQUVsQywyRUFBMkU7UUFFcEUsc0JBQXNCLHVJQUFVO1FBRXZDLGlGQUFpRjtRQUUxRSx3QkFBd0IsaUpBQVU7UUFFekMsdUVBQXVFO1FBRWhFLGdCQUFnQiwySUFBVTtRQUVqQyxxRUFBcUU7UUFFOUQsZ0JBQWdCLDBIQUFrQyxFQUFFLEdBQUM7UUFFNUQ7O1dBRUc7UUFHSSxNQUFNLHlIQUFzQjtRQUVuQyxzRUFBc0U7UUFFL0QsZUFBZSx3SEFBVTtRQUVoQyw2RUFBNkU7UUFFdEUsc0JBQXNCLHdJQUFVO1FBRXZDLGdGQUFnRjtRQUd6RSwwQkFBMEIsbUpBQW1DO1FBRXBFOztXQUVHO1FBRUksUUFBUSw0SEFBVyxDQUFDLEdBQUM7UUFFNUI7O1dBRUc7UUFFSSxXQUFXLDZHQUFXLENBQUMsR0FBQztRQUUvQjs7Ozs7V0FLRztRQUVJLFdBQVcseUhBQVE7UUFFMUI7OztXQUdHO1FBRUksbUJBQW1CLGlJQUFRO1FBRWxDOztXQUVHO1FBRUksU0FBUywrSEFBVTtRQUUxQjs7V0FFRztRQUVJLFdBQVcsdUhBQVE7UUFFMUI7O1dBRUc7UUFFSSxZQUFZLDBIQUFVO1FBRTdCOztXQUVHO1FBRUksU0FBUywrR0FBMEIsVUFBVSxHQUFDO1FBRXJEOztXQUVHO1FBRUksZ0JBQWdCLG1IQUFhLEVBQUUsR0FBQztRQUV2Qzs7V0FFRztRQUdJLFVBQVUsb0hBQVcsQ0FBQyxHQUFDO1FBRTlCOztXQUVHO1FBRUksUUFBUSw0R0FBVyxDQUFDLEdBQUM7UUFFNUI7O1dBRUc7UUFFSSxTQUFTLG9IQUFVO1FBRTFCOztXQUVHO1FBRUksVUFBVSw2R0FBWSxLQUFLLEdBQUM7UUFFbkM7WUFDRSxLQUFLLEVBQUUsQ0FBQzs7WUFDUixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLHFCQUFxQjtZQUMvQyxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztZQUN4QixJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7U0FDZjtRQUVlLEtBQUssQ0FBQyxtQkFBbUI7WUFDdkMsTUFBTSxhQUFhLEdBQUcsTUFBTSxLQUFLLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUN4RCxNQUFNLGdCQUFnQixHQUFHO2dCQUN2QixJQUFJLENBQUMsc0JBQXNCO2dCQUMzQixJQUFJLENBQUMsd0JBQXdCO2dCQUM3QixJQUFJLENBQUMsZ0JBQWdCO2FBQ3RCLENBQUM7WUFDRixJQUFJLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pFLE9BQU8sYUFBYSxDQUFDLHNCQUFzQixDQUFDO2dCQUM1QyxPQUFPLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQztnQkFDOUMsT0FBTyxhQUFhLENBQUMsZ0JBQWdCLENBQUM7WUFDeEMsQ0FBQztpQkFBTSxJQUNMLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixLQUFLLFFBQVE7bUJBQzVDLENBQUMscUNBQXFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQzttQkFDeEUsT0FBTyxJQUFJLENBQUMsd0JBQXdCLEtBQUssUUFBUTttQkFDakQsQ0FBQyxzQ0FBc0MsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDO21CQUMzRSxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxRQUFRO21CQUN6QyxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFDdkQsQ0FBQztnQkFDRCxNQUFNLElBQUksS0FBSyxDQUFDLHdEQUF3RCxDQUFDLENBQUM7WUFDNUUsQ0FBQztZQUNELElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7Z0JBQzdCLE9BQU8sYUFBYSxDQUFDLFVBQVUsQ0FBQztZQUNsQyxDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsMEJBQTBCLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ2xELE9BQU8sYUFBYSxDQUFDLDBCQUEwQixDQUFDO1lBQ2xELENBQUM7WUFDRCxPQUFPLGFBQWEsQ0FBQztRQUN2QixDQUFDO1FBRU0sTUFBTSxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsQ0FDaEQsZUFBdUIsRUFDdkIsaUJBQXlCO1lBRXpCLElBQ0UsT0FBTyxlQUFlLEtBQUssUUFBUTttQkFDaEMsQ0FBQyxxQ0FBcUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO21CQUM1RCxPQUFPLGlCQUFpQixLQUFLLFFBQVE7bUJBQ3JDLENBQUMsc0NBQXNDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDO2dCQUNsRSxNQUFNLElBQUksS0FBSyxDQUFDLHdEQUF3RCxDQUFDLENBQUM7WUFDNUUsT0FBTyxNQUFNLFdBQVcsQ0FBQyxXQUFXLENBQUM7Z0JBQ25DLHNCQUFzQixFQUFFLGVBQWU7Z0JBQ3ZDLHdCQUF3QixFQUFFLGlCQUFpQjthQUM1QyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQ7O1dBRUc7UUFDSSxNQUFNLENBQUMsU0FBUztZQUNyQixNQUFNLEtBQUssR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hDLEtBQUssQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUM3QixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRDs7V0FFRztRQUNJLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQVU7WUFDckMsT0FBTyxNQUFNLFdBQVcsQ0FBQyxXQUFXLENBQUM7Z0JBQ25DLEVBQUU7YUFDSCxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQ7O1dBRUc7UUFDSSxNQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUEwQjtZQUN6RCxPQUFPLE1BQU0sV0FBVyxDQUFDLFlBQVksQ0FBQztnQkFDcEMsTUFBTTthQUNQLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRDs7V0FFRztRQUNJLE1BQU0sQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsS0FBSyxHQUFHLEVBQUU7WUFDbkQsTUFBTSxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN2QixPQUFPLE1BQU0sV0FBVyxDQUFDLFdBQVcsQ0FBQztnQkFDbkMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLENBQUMsRUFBRTtnQkFDdEQsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTthQUMzQixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ1osQ0FBQztRQUVNLE1BQU0sQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsS0FBSyxHQUFHLEVBQUU7WUFDbEQsT0FBTyxNQUFNLFdBQVcsQ0FBQyxXQUFXLENBQUM7Z0JBQ25DLE1BQU0sRUFBRSxRQUFRO2FBQ2pCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDWixDQUFDO1FBRU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQzlCLE1BQWtELEVBQ2xELEtBQWEsRUFDYixJQUFvRDtZQUVwRCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMvRSxJQUFJLFNBQVMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDcEIsT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDO1lBQ0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxXQUFXLENBQUMsU0FBUyxDQUFjLE1BQU0sRUFBRTtnQkFDOUQsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN6QixLQUFLLEVBQUUsU0FBUztnQkFDaEIsU0FBUyxFQUFFLHVCQUF1QjthQUNuQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUM7Z0JBQ0gsT0FBTyxNQUFNLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNoQyxDQUFDO29CQUFTLENBQUM7Z0JBQ1QsTUFBTSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdkIsQ0FBQztRQUNILENBQUM7UUFFTyxNQUFNLENBQUMsY0FBYyxDQUFDLFNBQWlDO1lBQzdELE1BQU0sS0FBSyxHQUF3QixFQUFFLENBQUM7WUFDdEMsSUFBSSxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ3hCLEtBQUssQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQztZQUN4QyxDQUFDO1lBQ0QsSUFBSSxTQUFTLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQzlCLEtBQUssQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ25FLENBQUM7WUFDRCxJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxPQUFPLFNBQVMsQ0FBQyxNQUFNLEtBQUssUUFBUSxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO29CQUMxRSxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7Z0JBQ2hELENBQUM7Z0JBQ0QsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQzlFLEtBQUssQ0FBQyxHQUFHLEdBQUc7b0JBQ1YsRUFBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsRUFBRTtvQkFDbEQsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsRUFBRTtvQkFDaEQsRUFBRSxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsRUFBRTtvQkFDckQsRUFBRSxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsRUFBRTtpQkFDeEQsQ0FBQztZQUNKLENBQUM7WUFDRCxJQUFJLFNBQVMsQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLFNBQVMsQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQy9ELE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7Z0JBQzVCLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3hCLElBQ0UsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQzt1QkFDeEIsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQzt1QkFDeEIsSUFBZSxHQUFHLENBQUM7dUJBQ25CLEVBQWEsR0FBSSxJQUFlLEVBQ3BDLENBQUM7b0JBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO2dCQUNwRCxDQUFDO2dCQUNELEtBQUssQ0FBQyxVQUFVLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUM5QyxDQUFDO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQ7O1dBRUc7UUFDSSxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FDNUIsS0FBSyxHQUFHLEdBQUcsRUFDWCxTQUFpQyxFQUFFO1lBRW5DLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDakQsT0FBTyxNQUFNLFdBQVcsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekUsQ0FBQztRQUVNLE1BQU0sQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQ3RDLFNBQWlDLEVBQ2pDLFNBQWlCO1lBRWpCLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLFNBQVMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDdEQsTUFBTSxJQUFJLEtBQUssQ0FBQywwREFBMEQsQ0FBQyxDQUFDO1lBQzlFLENBQUM7WUFDRCxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3BELEtBQUssQ0FBQyxVQUFVLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUM7WUFDdkMsbUZBQW1GO1lBQ25GLHdEQUF3RDtZQUN4RCxNQUFNLE1BQU0sR0FBRyxNQUFNLFdBQVcsQ0FBQyxTQUFTLENBQWMsS0FBSyxFQUFFO2dCQUM3RCxVQUFVLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFO2dCQUM3QixJQUFJLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFO2dCQUN2QixLQUFLLEVBQUUsQ0FBQztnQkFDUixTQUFTLEVBQUUsdUJBQXVCO2FBQ25DLENBQUMsQ0FBQztZQUNILElBQUksTUFBMEIsQ0FBQztZQUMvQixJQUFJLENBQUM7Z0JBQ0gsTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwQyxDQUFDO29CQUFTLENBQUM7Z0JBQ1QsTUFBTSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdkIsQ0FBQztZQUNELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDOUMsT0FBTyxNQUFNLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxJQUFJLFVBQVUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ2pGLENBQUM7UUFFTSxNQUFNLENBQUMsS0FBSyxDQUFDLHdCQUF3QixDQUMxQyxTQUFpQyxFQUNqQyxjQUFzQixFQUN0QixZQUFvQixFQUNwQixlQUF1QjtZQUV2QixJQUNFLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUM7bUJBQ2xDLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUM7bUJBQ25DLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUM7bUJBQ3RDLGNBQWMsR0FBRyxDQUFDO21CQUNsQixZQUFZLEdBQUcsY0FBYzttQkFDN0IsZUFBZSxJQUFJLENBQUMsRUFDdkIsQ0FBQztnQkFDRCxNQUFNLElBQUksS0FBSyxDQUFDLGlFQUFpRSxDQUFDLENBQUM7WUFDckYsQ0FBQztZQUNELE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDcEQsS0FBSyxDQUFDLFVBQVUsR0FBRyxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDO1lBQ2hFLG1GQUFtRjtZQUNuRiw0RUFBNEU7WUFDNUUsTUFBTSxNQUFNLEdBQUcsTUFBTSxXQUFXLENBQUMsU0FBUyxDQUFjLEtBQUssRUFBRTtnQkFDN0QsVUFBVSxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUU7Z0JBQ3RELFNBQVMsRUFBRSxJQUFJO2dCQUNmLFNBQVMsRUFBRSx1QkFBdUI7YUFDbkMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQXFDLENBQUM7WUFDN0QsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRTtnQkFDcEMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDN0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztvQkFDdEMsT0FBTztnQkFDVCxDQUFDO2dCQUNELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLGVBQWUsQ0FBQyxHQUFHLGVBQWUsQ0FBQztnQkFDL0UsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDdEMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNaLE1BQU0sR0FBRyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO29CQUMxRCxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDbkMsQ0FBQztnQkFDRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssVUFBVSxFQUFFLENBQUM7b0JBQy9ELE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDbEIsQ0FBQztxQkFBTSxJQUFJLE1BQU0sQ0FBQyxTQUFTLEtBQUssVUFBVSxFQUFFLENBQUM7b0JBQzNDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDaEIsQ0FBQztxQkFBTSxJQUFJLE1BQU0sQ0FBQyxTQUFTLEtBQUssU0FBUyxFQUFFLENBQUM7b0JBQzFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDcEIsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FDekQsUUFBUSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUMsV0FBVyxDQUM3QyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRU0sTUFBTSxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsQ0FDOUMsUUFBZ0IsRUFDaEIsU0FBaUI7WUFFakIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDcEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksU0FBUyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN0RCxNQUFNLElBQUksS0FBSyxDQUFDLGtFQUFrRSxDQUFDLENBQUM7WUFDdEYsQ0FBQztZQUNELE9BQU8sTUFBTSxXQUFXLENBQUMsV0FBVyxDQUFDO2dCQUNuQyxTQUFTLEVBQUUsU0FBUztnQkFDcEIsMEJBQTBCLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLEVBQUU7Z0JBQzVELFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUU7YUFDaEMsRUFBRSxTQUFTLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BDLENBQUM7UUFFRDs7V0FFRztRQUNJLE1BQU0sQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsTUFBYztZQUN0RCxPQUFPLE1BQU0sV0FBVyxDQUFDLFlBQVksQ0FBQztnQkFDcEMsZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRTthQUNuRCxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQ7O1dBRUc7UUFDSSxNQUFNLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLE1BQWM7WUFDbkQsT0FBTyxNQUFNLFdBQVcsQ0FBQyxZQUFZLENBQUM7Z0JBQ3BDLFlBQVksRUFBRSxNQUFNO2FBQ3JCLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRDs7V0FFRztRQUNJLGFBQWE7WUFDbEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUM7WUFDMUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ2hDLENBQUM7UUFFRDs7O1dBR0c7UUFDSSxVQUFVLENBQUMsV0FBbUI7WUFDbkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUM7WUFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzlCLHNFQUFzRTtZQUN0RSx3Q0FBd0M7WUFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzQixDQUFDO1FBRUQ7O1dBRUc7UUFDSSxVQUFVLENBQUMsS0FBYTtZQUM3QixJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQztZQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN6QixDQUFDO1FBRU0scUJBQXFCLENBQUMsY0FBMkM7WUFDdEUsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUN2RCxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUUsS0FBSyxjQUFjLENBQUMsRUFBRSxDQUN0RCxDQUFDO1lBQ0YsWUFBWSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztZQUNuRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFFRDs7V0FFRztRQUNJLGFBQWEsQ0FBQyxVQUFrQixDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUk7WUFDbEQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO1lBRWxELDBDQUEwQztZQUMxQyxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUN0QyxJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxpQkFBaUIsSUFBSSxDQUFDLFdBQVcsV0FBVyxDQUFDO1lBQ2hFLENBQUM7UUFDSCxDQUFDO1FBRUQ7O1dBRUc7UUFDSSxrQkFBa0I7WUFDdkIsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQzdDLElBQUksS0FBSyxFQUFFLENBQUM7b0JBQ1YsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQzdDLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVEOztXQUVHO1FBQ0ksc0JBQXNCO1lBQzNCLE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7WUFDbEMsS0FBSyxNQUFNLE9BQU8sSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDO2dCQUNwQyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUMzQyxJQUFJLEtBQUssRUFBRSxDQUFDO29CQUNWLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7Z0JBQ3RDLENBQUM7WUFDSCxDQUFDO1lBQ0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztRQUN2QyxDQUFDOzs7O1NBL2dCVSxXQUFXIn0=
@@ -16,7 +16,6 @@ export declare class EmailTrafficBucketDoc extends plugins.smartdata.SmartDataDb
16
16
  createdAt: number;
17
17
  updatedAt: number;
18
18
  constructor();
19
- private static getNativeCollection;
20
19
  private static validateSnapshot;
21
20
  /** Persist retry-safe absolute monotonic counters. */
22
21
  static persistAbsolute(snapshotsArg: IEmailTrafficBucketSnapshot[]): Promise<void>;
@@ -1,6 +1,9 @@
1
1
  import * as plugins from '../../plugins.js';
2
2
  import { DcRouterDb } from '../classes.dcrouter-db.js';
3
3
  const DB_OPERATION_TIMEOUT_MS = 5_000;
4
+ const PRUNE_BATCH_SIZE = 500;
5
+ /** One bucket per minute; retention is 24 hours, so this is a wide safety bound. */
6
+ const MAX_LOADED_BUCKETS = 10_000;
4
7
  const getDb = () => DcRouterDb.getInstance().getDb();
5
8
  export class EmailTrafficBucketDoc extends plugins.smartdata.SmartDataDbDoc {
6
9
  id;
@@ -13,14 +16,6 @@ export class EmailTrafficBucketDoc extends plugins.smartdata.SmartDataDbDoc {
13
16
  constructor() {
14
17
  super();
15
18
  }
16
- static async getNativeCollection() {
17
- const smartdataCollection = EmailTrafficBucketDoc.collection;
18
- await smartdataCollection.init();
19
- const probe = new EmailTrafficBucketDoc();
20
- await smartdataCollection.markUniqueIndexes(probe.uniqueIndexes || []);
21
- await smartdataCollection.createRegularIndexes(probe.regularIndexes || []);
22
- return smartdataCollection.mongoDbCollection;
23
- }
24
19
  static validateSnapshot(snapshotArg) {
25
20
  const counts = [snapshotArg.sent, snapshotArg.received, snapshotArg.failed];
26
21
  if (!Number.isSafeInteger(snapshotArg.bucketStart)
@@ -40,71 +35,87 @@ export class EmailTrafficBucketDoc extends plugins.smartdata.SmartDataDbDoc {
40
35
  for (const snapshot of snapshotsArg) {
41
36
  EmailTrafficBucketDoc.validateSnapshot(snapshot);
42
37
  }
43
- const collection = await EmailTrafficBucketDoc.getNativeCollection();
44
38
  const now = Date.now();
45
- const updatedAt = new Date(now).toISOString();
46
- await collection.bulkWrite(snapshotsArg.map((snapshot) => ({
47
- updateOne: {
48
- filter: { bucketStart: snapshot.bucketStart },
49
- update: {
50
- $max: {
51
- sent: snapshot.sent,
52
- received: snapshot.received,
53
- failed: snapshot.failed,
54
- },
55
- $set: {
56
- updatedAt: now,
57
- _updatedAt: updatedAt,
58
- },
59
- $setOnInsert: {
60
- id: `email-traffic-${snapshot.bucketStart}`,
61
- bucketStart: snapshot.bucketStart,
62
- createdAt: now,
63
- _createdAt: updatedAt,
64
- },
39
+ // One bounded unordered batch (the client accepts 1..1000 operations and 16 MiB, so a
40
+ // 500-bucket flush always fits). Each operation is anchored on `bucketStart`, whose
41
+ // declared unique index makes the upsert idempotent under a retry, and `$max` is the
42
+ // server-side compare-and-write that lets a replayed absolute snapshot never lower a
43
+ // counter. `$setOnInsert` seeds the `@unI()` identity on the insert branch only; the
44
+ // client refuses an identity seed that contradicts an identity anchor in the filter.
45
+ await EmailTrafficBucketDoc.atomicUpsertMany(snapshotsArg.map((snapshot) => ({
46
+ filter: { bucketStart: snapshot.bucketStart },
47
+ update: {
48
+ $max: {
49
+ sent: snapshot.sent,
50
+ received: snapshot.received,
51
+ failed: snapshot.failed,
52
+ },
53
+ $set: {
54
+ updatedAt: now,
55
+ },
56
+ $setOnInsert: {
57
+ id: `email-traffic-${snapshot.bucketStart}`,
58
+ bucketStart: snapshot.bucketStart,
59
+ createdAt: now,
65
60
  },
66
- upsert: true,
67
61
  },
68
- })), { ordered: false, timeoutMS: DB_OPERATION_TIMEOUT_MS });
62
+ })), { timeoutMS: DB_OPERATION_TIMEOUT_MS });
69
63
  }
70
64
  static async loadSince(cutoffArg) {
71
65
  if (!Number.isSafeInteger(cutoffArg) || cutoffArg < 0) {
72
66
  throw new Error('EmailTrafficBucketDoc.loadSince requires a valid cutoff');
73
67
  }
74
- const collection = await EmailTrafficBucketDoc.getNativeCollection();
75
- const cursor = collection
76
- .find({ bucketStart: { $gte: cutoffArg } }, { timeoutMS: DB_OPERATION_TIMEOUT_MS })
77
- .sort({ bucketStart: 1 });
68
+ const cursor = await EmailTrafficBucketDoc.getCursor({ bucketStart: { $gte: cutoffArg } }, {
69
+ sort: { bucketStart: 1 },
70
+ limit: MAX_LOADED_BUCKETS,
71
+ maxTimeMS: DB_OPERATION_TIMEOUT_MS,
72
+ });
78
73
  try {
79
74
  const rows = await cursor.toArray();
80
- return rows.map((row) => ({
81
- bucketStart: Number(row.bucketStart),
82
- sent: Number(row.sent || 0),
83
- received: Number(row.received || 0),
84
- failed: Number(row.failed || 0),
75
+ return rows.map((rowArg) => ({
76
+ bucketStart: Number(rowArg.bucketStart),
77
+ sent: Number(rowArg.sent || 0),
78
+ received: Number(rowArg.received || 0),
79
+ failed: Number(rowArg.failed || 0),
85
80
  }));
86
81
  }
87
82
  finally {
88
- await cursor.close({ timeoutMS: DB_OPERATION_TIMEOUT_MS });
83
+ await cursor.close();
89
84
  }
90
85
  }
91
86
  static async pruneBefore(cutoffArg) {
92
87
  if (!Number.isSafeInteger(cutoffArg) || cutoffArg < 0) {
93
88
  throw new Error('EmailTrafficBucketDoc.pruneBefore requires a valid cutoff');
94
89
  }
95
- const collection = await EmailTrafficBucketDoc.getNativeCollection();
96
90
  let deletedCount = 0;
97
91
  while (true) {
98
- const rows = await collection
99
- .find({ bucketStart: { $lt: cutoffArg } }, { projection: { _id: 1 }, timeoutMS: DB_OPERATION_TIMEOUT_MS })
100
- .sort({ bucketStart: 1, _id: 1 })
101
- .limit(500)
102
- .toArray();
92
+ const cursor = await EmailTrafficBucketDoc.getCursor({ bucketStart: { $lt: cutoffArg } }, {
93
+ projection: { id: 1 },
94
+ sort: { bucketStart: 1, id: 1 },
95
+ limit: PRUNE_BATCH_SIZE,
96
+ maxTimeMS: DB_OPERATION_TIMEOUT_MS,
97
+ });
98
+ let rows;
99
+ try {
100
+ rows = await cursor.toArray();
101
+ }
102
+ finally {
103
+ await cursor.close();
104
+ }
103
105
  if (rows.length === 0)
104
106
  break;
105
- const result = await collection.deleteMany({ _id: { $in: rows.map((row) => row._id) } }, { timeoutMS: DB_OPERATION_TIMEOUT_MS });
107
+ // The identity `$or` is the equality anchor a plural delete requires; the range
108
+ // guard is re-evaluated server-side so a bucket written after the scan survives.
109
+ const result = await EmailTrafficBucketDoc.atomicDeleteMany({
110
+ $or: rows.map((rowArg) => ({ id: rowArg.id })),
111
+ bucketStart: { $lt: cutoffArg },
112
+ }, { timeoutMS: DB_OPERATION_TIMEOUT_MS });
113
+ // A batch the scan matched but the server-side guard did not would otherwise be
114
+ // rescanned forever; no progress ends the sweep the same way it does for events.
115
+ if (result.deletedCount === 0)
116
+ break;
106
117
  deletedCount += result.deletedCount;
107
- if (rows.length < 500)
118
+ if (rows.length < PRUNE_BATCH_SIZE)
108
119
  break;
109
120
  }
110
121
  return deletedCount;
@@ -119,4 +130,4 @@ plugins.smartdata.defineCollectionModel(EmailTrafficBucketDoc, getDb, {
119
130
  { name: 'email_traffic_bucket_start_unique', key: { bucketStart: 1 }, options: { unique: true } },
120
131
  ],
121
132
  });
122
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5lbWFpbC10cmFmZmljLWJ1Y2tldC5kb2MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90cy9kYi9kb2N1bWVudHMvY2xhc3Nlcy5lbWFpbC10cmFmZmljLWJ1Y2tldC5kb2MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFdkQsTUFBTSx1QkFBdUIsR0FBRyxLQUFLLENBQUM7QUFFdEMsTUFBTSxLQUFLLEdBQUcsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBWXJELE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxPQUFPLENBQUMsU0FBUyxDQUFDLGNBRzVEO0lBQ1EsRUFBRSxDQUFVO0lBRVosV0FBVyxDQUFVO0lBRXJCLElBQUksR0FBVyxDQUFDLENBQUM7SUFFakIsUUFBUSxHQUFXLENBQUMsQ0FBQztJQUVyQixNQUFNLEdBQVcsQ0FBQyxDQUFDO0lBRW5CLFNBQVMsQ0FBVTtJQUVuQixTQUFTLENBQVU7SUFFMUI7UUFDRSxLQUFLLEVBQUUsQ0FBQztJQUNWLENBQUM7SUFFTyxNQUFNLENBQUMsS0FBSyxDQUFDLG1CQUFtQjtRQUN0QyxNQUFNLG1CQUFtQixHQUFJLHFCQUUzQixDQUFDLFVBQVUsQ0FBQztRQUNkLE1BQU0sbUJBQW1CLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDakMsTUFBTSxLQUFLLEdBQUcsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1FBQzFDLE1BQU0sbUJBQW1CLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN2RSxNQUFNLG1CQUFtQixDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFDLENBQUM7UUFDM0UsT0FB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
133
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5lbWFpbC10cmFmZmljLWJ1Y2tldC5kb2MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90cy9kYi9kb2N1bWVudHMvY2xhc3Nlcy5lbWFpbC10cmFmZmljLWJ1Y2tldC5kb2MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFdkQsTUFBTSx1QkFBdUIsR0FBRyxLQUFLLENBQUM7QUFDdEMsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUM7QUFDN0Isb0ZBQW9GO0FBQ3BGLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxDQUFDO0FBRWxDLE1BQU0sS0FBSyxHQUFHLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQVlyRCxNQUFNLE9BQU8scUJBQXNCLFNBQVEsT0FBTyxDQUFDLFNBQVMsQ0FBQyxjQUc1RDtJQUNRLEVBQUUsQ0FBVTtJQUVaLFdBQVcsQ0FBVTtJQUVyQixJQUFJLEdBQVcsQ0FBQyxDQUFDO0lBRWpCLFFBQVEsR0FBVyxDQUFDLENBQUM7SUFFckIsTUFBTSxHQUFXLENBQUMsQ0FBQztJQUVuQixTQUFTLENBQVU7SUFFbkIsU0FBUyxDQUFVO0lBRTFCO1FBQ0UsS0FBSyxFQUFFLENBQUM7SUFDVixDQUFDO0lBRU8sTUFBTSxDQUFDLGdCQUFnQixDQUFDLFdBQXdDO1FBQ3RFLE1BQU0sTUFBTSxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1RSxJQUNFLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDO2VBQzNDLFdBQVcsQ0FBQyxXQUFXLEdBQUcsQ0FBQztlQUMzQixXQUFXLENBQUMs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
@@ -14,6 +14,10 @@ export interface IGatewayClientPendingProvisioning {
14
14
  stagedAt: number;
15
15
  stagedBy: string;
16
16
  }
17
+ /** Fields a compare-and-set mutation may write; the revision is owned by the fence. */
18
+ export type TGatewayClientMutableSet = Partial<Pick<GatewayClientDoc, 'type' | 'name' | 'description' | 'hostnamePatterns' | 'allowedRouteTargets' | 'capabilities' | 'enabled' | 'policyGeneration' | 'credentialSequence' | 'activeCredentialSequence' | 'pendingProvisioning' | 'updatedAt'>>;
19
+ /** Optional fields a compare-and-set mutation may remove from the stored document. */
20
+ export type TGatewayClientUnsettableField = 'description' | 'pendingProvisioning';
17
21
  export declare class GatewayClientDoc extends plugins.smartdata.SmartDataDbDoc<GatewayClientDoc, GatewayClientDoc> {
18
22
  id: string;
19
23
  type: TGatewayClientType;
@@ -35,9 +39,12 @@ export declare class GatewayClientDoc extends plugins.smartdata.SmartDataDbDoc<G
35
39
  createdBy: string;
36
40
  constructor();
37
41
  static findById(id: string): Promise<GatewayClientDoc | null>;
38
- private static getNativeCollection;
42
+ /**
43
+ * Compare-and-set selector. Revision 0 also matches documents written before the
44
+ * revision field existed, so a first mutation fences them exactly once.
45
+ */
39
46
  private static buildRevisionSelector;
40
- static compareAndSet(idArg: string, expectedRevisionArg: number, setArg: Record<string, unknown>, unsetArg?: string[]): Promise<GatewayClientDoc | null>;
47
+ static compareAndSet(idArg: string, expectedRevisionArg: number, setArg: TGatewayClientMutableSet, unsetArg?: TGatewayClientUnsettableField[]): Promise<GatewayClientDoc | null>;
41
48
  static deleteIfRevision(idArg: string, expectedRevisionArg: number): Promise<boolean>;
42
49
  static findAll(): Promise<GatewayClientDoc[]>;
43
50
  }