mindoodb 0.0.72 → 0.0.74

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 (73) hide show
  1. package/dist/browser/index.mjs +2 -0
  2. package/dist/core/BackgroundTaskTracker.d.ts +18 -0
  3. package/dist/core/BackgroundTaskTracker.d.ts.map +1 -0
  4. package/dist/core/BackgroundTaskTracker.js +37 -0
  5. package/dist/core/BackgroundTaskTracker.js.map +1 -0
  6. package/dist/core/BaseMindooDB.d.ts +60 -7
  7. package/dist/core/BaseMindooDB.d.ts.map +1 -1
  8. package/dist/core/BaseMindooDB.js +280 -66
  9. package/dist/core/BaseMindooDB.js.map +1 -1
  10. package/dist/core/BaseMindooTenant.d.ts +46 -12
  11. package/dist/core/BaseMindooTenant.d.ts.map +1 -1
  12. package/dist/core/BaseMindooTenant.js +133 -65
  13. package/dist/core/BaseMindooTenant.js.map +1 -1
  14. package/dist/core/BaseMindooTenantDirectory.d.ts +57 -14
  15. package/dist/core/BaseMindooTenantDirectory.d.ts.map +1 -1
  16. package/dist/core/BaseMindooTenantDirectory.js +319 -164
  17. package/dist/core/BaseMindooTenantDirectory.js.map +1 -1
  18. package/dist/core/appendonlystores/InMemoryContentAddressedStore.d.ts +11 -0
  19. package/dist/core/appendonlystores/InMemoryContentAddressedStore.d.ts.map +1 -1
  20. package/dist/core/appendonlystores/InMemoryContentAddressedStore.js +44 -18
  21. package/dist/core/appendonlystores/InMemoryContentAddressedStore.js.map +1 -1
  22. package/dist/core/appendonlystores/purgeDocumentHistory.d.ts +52 -0
  23. package/dist/core/appendonlystores/purgeDocumentHistory.d.ts.map +1 -0
  24. package/dist/core/appendonlystores/purgeDocumentHistory.js +107 -0
  25. package/dist/core/appendonlystores/purgeDocumentHistory.js.map +1 -0
  26. package/dist/core/appendonlystores/purgedDocumentGuard.d.ts +33 -0
  27. package/dist/core/appendonlystores/purgedDocumentGuard.d.ts.map +1 -0
  28. package/dist/core/appendonlystores/purgedDocumentGuard.js +78 -0
  29. package/dist/core/appendonlystores/purgedDocumentGuard.js.map +1 -0
  30. package/dist/core/cache/CacheManager.d.ts +4 -1
  31. package/dist/core/cache/CacheManager.d.ts.map +1 -1
  32. package/dist/core/cache/CacheManager.js +47 -19
  33. package/dist/core/cache/CacheManager.js.map +1 -1
  34. package/dist/core/indexing/fulltext/DocumentFullTextIndex.d.ts +16 -1
  35. package/dist/core/indexing/fulltext/DocumentFullTextIndex.d.ts.map +1 -1
  36. package/dist/core/indexing/fulltext/DocumentFullTextIndex.js +86 -14
  37. package/dist/core/indexing/fulltext/DocumentFullTextIndex.js.map +1 -1
  38. package/dist/core/indexing/summary/DocumentSummaryStore.d.ts +2 -0
  39. package/dist/core/indexing/summary/DocumentSummaryStore.d.ts.map +1 -1
  40. package/dist/core/indexing/summary/DocumentSummaryStore.js +19 -5
  41. package/dist/core/indexing/summary/DocumentSummaryStore.js.map +1 -1
  42. package/dist/core/types.d.ts +57 -0
  43. package/dist/core/types.d.ts.map +1 -1
  44. package/dist/core/types.js +22 -0
  45. package/dist/core/types.js.map +1 -1
  46. package/dist/core/utils/singleFlight.d.ts +21 -0
  47. package/dist/core/utils/singleFlight.d.ts.map +1 -0
  48. package/dist/core/utils/singleFlight.js +47 -0
  49. package/dist/core/utils/singleFlight.js.map +1 -0
  50. package/dist/core/utils/timeSource.d.ts +3 -1
  51. package/dist/core/utils/timeSource.d.ts.map +1 -1
  52. package/dist/core/utils/timeSource.js +4 -0
  53. package/dist/core/utils/timeSource.js.map +1 -1
  54. package/dist/node/appendonlystores/BasicOnDiskContentAddressedStore.d.ts +13 -0
  55. package/dist/node/appendonlystores/BasicOnDiskContentAddressedStore.d.ts.map +1 -1
  56. package/dist/node/appendonlystores/BasicOnDiskContentAddressedStore.js +26 -2
  57. package/dist/node/appendonlystores/BasicOnDiskContentAddressedStore.js.map +1 -1
  58. package/dist/node/server/MindooDBServer.d.ts.map +1 -1
  59. package/dist/node/server/MindooDBServer.js +2 -0
  60. package/dist/node/server/MindooDBServer.js.map +1 -1
  61. package/dist/node/server/TenantManager.d.ts +11 -0
  62. package/dist/node/server/TenantManager.d.ts.map +1 -1
  63. package/dist/node/server/TenantManager.js +40 -9
  64. package/dist/node/server/TenantManager.js.map +1 -1
  65. package/dist/node/server/peer/ClusterManager.d.ts +4 -0
  66. package/dist/node/server/peer/ClusterManager.d.ts.map +1 -1
  67. package/dist/node/server/peer/ClusterManager.js +2 -0
  68. package/dist/node/server/peer/ClusterManager.js.map +1 -1
  69. package/dist/node/server/peer/PeerReplicator.d.ts +12 -0
  70. package/dist/node/server/peer/PeerReplicator.d.ts.map +1 -1
  71. package/dist/node/server/peer/PeerReplicator.js +19 -1
  72. package/dist/node/server/peer/PeerReplicator.js.map +1 -1
  73. package/package.json +1 -1
@@ -50,11 +50,12 @@ export declare class BaseMindooTenant implements MindooTenant {
50
50
  */
51
51
  private unsubscribeKeyBagChanges;
52
52
  /**
53
- * Single-flight latch for {@link reconcileKeyBagChanges}. Concurrent calls
54
- * coalesce onto the same in-flight reconcile so live listener firings and
55
- * explicit calls cannot race against each other or duplicate work.
53
+ * Single-flight for {@link reconcileKeyBagChanges}. Concurrent calls
54
+ * coalesce so live listener firings and explicit calls cannot race; a call
55
+ * arriving mid-run gets one follow-up run, so a KeyBag change made while
56
+ * databases were being reconciled is not left unconsumed.
56
57
  */
57
- private keyBagReconcilePromise;
58
+ private readonly keyBagReconcile;
58
59
  private decryptedTenantKeyCache?;
59
60
  private decryptedUserSigningKeyCache?;
60
61
  private decryptedUserEncryptionKeyCache?;
@@ -74,8 +75,10 @@ export declare class BaseMindooTenant implements MindooTenant {
74
75
  private readonly importedVerifyKeyCache;
75
76
  private static readonly MAX_IMPORTED_KEY_CACHE_ENTRIES;
76
77
  private logger;
77
- private reconcileInFlight;
78
+ private readonly keyDistributionReconcile;
78
79
  private userKeyReconcileScheduled;
80
+ /** Fire-and-forget work of this tenant; see {@link whenBackgroundIdle}. */
81
+ private readonly backgroundTasks;
79
82
  private readonly userKeys;
80
83
  private readonly sealedGenerations;
81
84
  private cacheManager;
@@ -134,6 +137,19 @@ export declare class BaseMindooTenant implements MindooTenant {
134
137
  * unbounded-allocates.
135
138
  */
136
139
  scheduleUserKeyReconcile(): void;
140
+ /**
141
+ * Register fire-and-forget work so {@link whenBackgroundIdle} and shutdown
142
+ * wait for it. The task must handle its own errors.
143
+ */
144
+ trackBackgroundTask(task: Promise<unknown>): void;
145
+ /**
146
+ * Resolve once neither this tenant nor any of its open databases has
147
+ * background work left (trust/key reconciles, auto-follow catch-ups,
148
+ * pending change events), including work that finishing tasks start.
149
+ *
150
+ * @internal Shutdown and test hook.
151
+ */
152
+ whenBackgroundIdle(): Promise<void>;
137
153
  noteUserDirectoryFetched(): void;
138
154
  noteUserDirectoryFetchFailed(error: unknown): void;
139
155
  listPendingUserKeyDevices(): Promise<PendingUserKeyDevice[]>;
@@ -292,6 +308,22 @@ export declare class BaseMindooTenant implements MindooTenant {
292
308
  * cutoffs in ascending order.
293
309
  */
294
310
  listTimeTravelCacheDates(dbId: string): Promise<number[]>;
311
+ /**
312
+ * Ids of the documents an admin-signed purge request removed from `dbId`
313
+ * (see {@link MindooTenant.getPurgedDocumentIds}). Read from the local
314
+ * directory; empty for the directory itself.
315
+ */
316
+ getPurgedDocumentIds(dbId: string): Promise<ReadonlySet<string>>;
317
+ /**
318
+ * After a document's history was purged from a live database: scrub it from
319
+ * every open time-travel snapshot of that database, and drop the persisted
320
+ * snapshot caches, which hold materialized plaintext, summaries and full-text
321
+ * tokens of the document as of their cutoffs. Those caches are rebuilt on the
322
+ * next open.
323
+ *
324
+ * @internal Called by {@link BaseMindooDB.purgeDocumentHistory}.
325
+ */
326
+ forgetPurgedDocumentInSnapshots(dbId: string, docId: string): Promise<void>;
295
327
  /**
296
328
  * Remove every persisted cache record of a time-travel snapshot (see
297
329
  * {@link MindooTenant.purgeTimeTravelCache}). Deletes all records whose id
@@ -309,12 +341,14 @@ export declare class BaseMindooTenant implements MindooTenant {
309
341
  * Designed as the single barrier callers can `await` to be certain that
310
342
  * subsequent reads observe the latest add/remove of doc keys. Behaviour:
311
343
  *
312
- * - Idempotent and concurrency-safe. Concurrent callers share the same
313
- * in-flight reconcile via {@link keyBagReconcilePromise}, and a second
314
- * call after the cursor catches up is a fast no-op.
344
+ * - Idempotent and concurrency-safe. Concurrent callers share one run;
345
+ * a call arriving mid-run gets one follow-up run (see
346
+ * {@link keyBagReconcile}), and a call after the cursor catches up is a
347
+ * fast no-op.
315
348
  * - Cursor-based. Replays from the persisted cursor in
316
349
  * {@link keyBagChangeCursor}, so missed live notifications are
317
- * automatically recovered.
350
+ * automatically recovered. The cursor advances only after every open
351
+ * database was reconciled, so a failed run is retried by the next call.
318
352
  * - Tenant-scoped. Events for other tenants in a shared KeyBag are
319
353
  * consumed (the cursor still advances) but ignored.
320
354
  * - Invalidates the cached tenant default key when its add/remove was
@@ -323,6 +357,7 @@ export declare class BaseMindooTenant implements MindooTenant {
323
357
  * cuts and never participate in visibility reconciliation.
324
358
  */
325
359
  reconcileKeyBagChanges(): Promise<void>;
360
+ private runKeyBagReconcile;
326
361
  /**
327
362
  * Author-trust reconcile across all open live databases: when the tenant
328
363
  * directory learns about new trusted signing keys (grantaccess documents
@@ -502,9 +537,8 @@ export declare class BaseMindooTenant implements MindooTenant {
502
537
  * Single-flight, best-effort wrapper around
503
538
  * {@link reconcileKeyDistributionsForCurrentUser} for the run-always trigger
504
539
  * (docs/accesscontrol.md §13). Fired on directory bring-up and after every
505
- * directory pull. Never throws and never blocks sync: a reconcile error is
506
- * logged and swallowed. The in-flight guard prevents the driver's own
507
- * directory access from re-triggering it.
540
+ * directory pull. Never throws: a reconcile error is logged and swallowed.
541
+ * Resolves after a run that started after this call.
508
542
  */
509
543
  reconcileKeyDistributionsForCurrentUserSafe(): Promise<void>;
510
544
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"BaseMindooTenant.d.ts","sourceRoot":"","sources":["../../src/core/BaseMindooTenant.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,QAAQ,EACR,qBAAqB,EACrB,4BAA4B,EAE5B,SAAS,EACT,aAAa,EACb,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,YAAY,EAGZ,yBAAyB,EACzB,sBAAsB,EAEtB,sBAAsB,EAIvB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,aAAa,EAAE,YAAY,EAAkB,MAAM,UAAU,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,MAAM,EAA2B,MAAM,eAAe,CAAC;AAIhE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EACV,oBAAoB,EACpB,uBAAuB,EACxB,MAAM,kBAAkB,CAAC;AAI1B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAI9D,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAe3D,OAAO,EAAE,MAAM,EAA8C,MAAM,WAAW,CAAC;AAG/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGpD;;;;;;;;;;;;;GAaG;AACH,qBAAa,gBAAiB,YAAW,YAAY;IACnD,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,uBAAuB,CAAS;IACxC,OAAO,CAAC,iCAAiC,CAAS;IAClD,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,mBAAmB,CAAS;IACpC,SAAS,CAAC,aAAa,EAAE,aAAa,CAAC;IACvC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,aAAa,CAAoC;IACzD,OAAO,CAAC,oBAAoB,CAA6C;IACzE,OAAO,CAAC,cAAc,CAAsC;IAC5D,OAAO,CAAC,gBAAgB,CAA0D;IAClF;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB,CAAmC;IAC7D;;;OAGG;IACH,OAAO,CAAC,wBAAwB,CAA6B;IAC7D;;;;OAIG;IACH,OAAO,CAAC,sBAAsB,CAA8B;IAG5D,OAAO,CAAC,uBAAuB,CAAC,CAAa;IAC7C,OAAO,CAAC,4BAA4B,CAAC,CAAY;IACjD,OAAO,CAAC,+BAA+B,CAAC,CAAY;IACpD;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAgC;IACpE;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAgC;IACvE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,8BAA8B,CAAO;IAC7D,OAAO,CAAC,MAAM,CAAS;IAQvB,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,yBAAyB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4B;IACrD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAmC;IAGrE,OAAO,CAAC,YAAY,CAA6B;IAEjD;;;;;;;;;OASG;IACH,OAAO,CAAC,qBAAqB,CAAC,CAA+B;gBAG3D,OAAO,EAAE,mBAAmB,EAC5B,QAAQ,EAAE,MAAM,EAChB,uBAAuB,EAAE,MAAM,EAC/B,iCAAiC,EAAE,MAAM,EACzC,WAAW,EAAE,aAAa,EAC1B,mBAAmB,EAAE,MAAM,EAC3B,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,4BAA4B,EAC1C,aAAa,EAAE,aAAa,EAC5B,MAAM,CAAC,EAAE,MAAM,EACf,qBAAqB,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,EACpD,eAAe,CAAC,EAAE,eAAe;IACjC;;;;;;;;OAQG;IACH,oBAAoB,CAAC,EAAE;QACrB,UAAU,CAAC,EAAE,SAAS,CAAC;QACvB,aAAa,CAAC,EAAE,SAAS,CAAC;QAC1B,kBAAkB,CAAC,EAAE,SAAS,CAAC;QAC/B,mBAAmB,CAAC,EAAE,UAAU,CAAC;KAClC;IA2EH;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAOjC;;OAEG;IACH,eAAe,IAAI,YAAY,GAAG,IAAI;IAItC;;;OAGG;IACG,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAa1C,gBAAgB,IAAI,aAAa;IAIjC,OAAO,CAAC,uBAAuB;IAW/B,qBAAqB,IAAI,aAAa;IAItC,sBAAsB,IAAI,MAAM;IAIhC,iBAAiB,IAAI,cAAc;IAInC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIrC,qGAAqG;IACrG,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAItC;;;;;OAKG;IACH,wBAAwB,IAAI,IAAI;IAUhC,wBAAwB,IAAI,IAAI;IAIhC,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAI5C,yBAAyB,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAI5D,kBAAkB,IAAI,OAAO,CAAC,OAAO,kBAAkB,EAAE,gBAAgB,EAAE,CAAC;IAI5E,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxD,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxD,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5D,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B,iBAAiB,CAAC,OAAO,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAI5F,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAQtC,0BAA0B,IAAI,OAAO,CAAC,uBAAuB,CAAC;IAI9D,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7C,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,IAAI;IAIzE,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,EAAE;IAI3C,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAsDjF,uBAAuB,CAC3B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,KAAK,CAAC;QAAE,UAAU,CAAC,EAAE,eAAe,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,GAClE,OAAO,CAAC,IAAI,CAAC;IAOhB,UAAU,IAAI,mBAAmB;IAIjC,KAAK,IAAI,MAAM;IAIf;;;;;OAKG;IACH,0BAA0B,IAAI,MAAM;IAIpC;;;;;;OAMG;IACH,oCAAoC,IAAI,MAAM;IAI9C;;;;OAIG;YACW,kBAAkB;IA+B1B,cAAc,CAAC,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IA8GjF,cAAc,CAAC,gBAAgB,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAsDhG;;;;;;;;OAQG;YACW,0BAA0B;IAYlC,WAAW,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAqB3D;;;;;;;;;;;OAWG;IACG,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAMrF;;;;;;;OAOG;IACG,qBAAqB,CACzB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,UAAU,EACrB,SAAS,EAAE,UAAU,EACrB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,OAAO,CAAC;IAiBb,kBAAkB,CACtB,OAAO,EAAE,UAAU,EACnB,cAAc,EAAE,cAAc,EAC9B,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,UAAU,CAAC;IAwDhB,eAAe,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAgCtG;;;OAGG;YACW,qBAAqB;IAsB7B,oBAAoB,CAAC,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;IAgDlG;;;;;;;OAOG;YACW,yBAAyB;IAsBjC,gBAAgB,IAAI,OAAO,CAAC,YAAY,CAAC;IAS/C;;;OAGG;IACH,wBAAwB,IAAI,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS;IAI9D,aAAa,IAAI,OAAO,CAAC,qBAAqB,CAAC;IAQrD;;;;;;;;;;;;;;OAcG;IACG,uBAAuB,IAAI,OAAO,CAAC,OAAO,CAAC;IA0BjD;;;;;;;;;;;OAWG;IACG,eAAe,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAgChE,uEAAuE;YACzD,qBAAqB;YA8BrB,0BAA0B;IAyElC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC;YAuDtD,cAAc;IAqE5B;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAMlC;IAEX;;;;;OAKG;IACH,OAAO,CAAC,wBAAwB;IAYhC;;;;;;OAMG;IACG,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAmC/D;;;;;;;;OAQG;IACG,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoD/F;;;;;;;;;;;;;;;;;;;OAmBG;IACG,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC;IAmD7C;;;;;;;;;;;;OAYG;IACG,2BAA2B,CAAC,gBAAgB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBxF;;;;OAIG;IACG,+BAA+B,CAAC,gBAAgB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ5F;;;;;;OAMG;IACG,0CAA0C,IAAI,OAAO,CAAC,IAAI,CAAC;IAYjE,kBAAkB,CAAC,OAAO,EAAE,cAAc,GAAG,eAAe;YAM9C,gCAAgC;IAqB9C,OAAO,CAAC,4BAA4B;IAMpC;;OAEG;IACG,kBAAkB,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,EAAE,OAAO,EAAE,yBAAyB,GAAG;QAAE,MAAM,EAAE,KAAK,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9H,kBAAkB,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,EAAE,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,YAAY,CAAC;IAiQtH;;;;;;;;;;OAUG;IACG,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IA0GzF,OAAO,CAAC,eAAe;YAmBT,mBAAmB;YAqEnB,iCAAiC;IAsC/C;;OAEG;YACW,yBAAyB;IA6EvC;;OAEG;IACG,eAAe,CACnB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,SAAS,GAAE,SAA0B,EACrC,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,qBAAqB,CAAC;IA4EjC;;;OAGG;cACa,sBAAsB,IAAI,OAAO,CAAC,SAAS,CAAC;IA8B5D;;;OAGG;YACW,yBAAyB;IA4BvC;;;;;;OAMG;IACH,uBAAuB,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAInD;;;;;;OAMG;IACG,mCAAmC,IAAI,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IActE;;;;;;;;;OASG;IACU,iBAAiB,CAC5B,YAAY,EAAE,mBAAmB,EACjC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,WAAW,CAAC;IA0BvB;;;OAGG;IACH,SAAS,CAAC,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU;IASxD;;;OAGG;IACI,kBAAkB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM;IAQpD;;;;OAIG;IACI,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW;IA0BjD;;;;OAIG;IACH,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,KAAQ;IACxD,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,6BAA6B,KAAQ;IAE/D;;;;;;OAMG;IACG,gBAAgB,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAejE;;;;;;OAMG;IACG,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC;IAI7C;;;;;OAKG;IACG,wBAAwB,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAezE;;;;;;;;;;;;;;;;;;OAkBG;IACG,uCAAuC,IAAI,OAAO,CAAC;QACvD,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,gFAAgF;QAChF,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;IA4DF;;;;OAIG;YACW,gCAAgC;IA6B9C;;;;;;;OAOG;IACG,2CAA2C,IAAI,OAAO,CAAC,IAAI,CAAC;IAclE;;;;;;;;;OASG;IACG,8BAA8B,CAClC,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,KAAK,CAAC;QAAE,KAAK,EAAE,UAAU,CAAC;QAAC,mBAAmB,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI,CAAC;IAS5E;;;;;;OAMG;IACG,4BAA4B,CAChC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,UAAU,EACjB,mBAAmB,EAAE,MAAM,GAC1B,OAAO,CAAC,IAAI,CAAC;IAIhB;;;;;;;OAOG;IACG,oCAAoC,CACxC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,UAAU,CAAC;QAAC,mBAAmB,EAAE,MAAM,CAAA;KAAE,CAAC,GAClE,OAAO,CAAC,MAAM,CAAC;IAwBlB,8FAA8F;IACxF,mBAAmB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAQ7D;;;;;OAKG;IACG,sBAAsB,CAC1B,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,KAAK,CAAC;QAAE,KAAK,EAAE,UAAU,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAchF;;;;;;;;OAQG;IACG,wCAAwC,CAC5C,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,EAAE,GACrB,OAAO,CAAC,MAAM,CAAC;IAiClB,oEAAoE;IACpE,OAAO,CAAC,4BAA4B;IAIpC;;;;;;OAMG;cACa,eAAe,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IA8B7E;;;;;;;;;;;;;;OAcG;IACH,SAAS,CAAC,qCAAqC,IAAI,OAAO;IAI1D;;;;;;;;;;OAUG;IACG,wBAAwB,CAC5B,OAAO,EAAE,UAAU,EACnB,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,UAAU,CAAC;IAgEtB;;;;;;;OAOG;IACG,wBAAwB,CAC5B,gBAAgB,EAAE,UAAU,EAC5B,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,UAAU,CAAC;CA2DvB"}
1
+ {"version":3,"file":"BaseMindooTenant.d.ts","sourceRoot":"","sources":["../../src/core/BaseMindooTenant.ts"],"names":[],"mappings":"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"}
@@ -30,6 +30,8 @@ const joinRequestUri_1 = require("./uri/joinRequestUri");
30
30
  const EncryptedLocalCacheStore_1 = require("./cache/EncryptedLocalCacheStore");
31
31
  const CacheManager_1 = require("./cache/CacheManager");
32
32
  const databaseIdValidation_1 = require("./databaseIdValidation");
33
+ const BackgroundTaskTracker_1 = require("./BackgroundTaskTracker");
34
+ const singleFlight_1 = require("./utils/singleFlight");
33
35
  /**
34
36
  * BaseMindooTenant is a platform-agnostic implementation of MindooTenant
35
37
  * that works in both browser and server environments.
@@ -73,11 +75,12 @@ class BaseMindooTenant {
73
75
  */
74
76
  this.unsubscribeKeyBagChanges = null;
75
77
  /**
76
- * Single-flight latch for {@link reconcileKeyBagChanges}. Concurrent calls
77
- * coalesce onto the same in-flight reconcile so live listener firings and
78
- * explicit calls cannot race against each other or duplicate work.
78
+ * Single-flight for {@link reconcileKeyBagChanges}. Concurrent calls
79
+ * coalesce so live listener firings and explicit calls cannot race; a call
80
+ * arriving mid-run gets one follow-up run, so a KeyBag change made while
81
+ * databases were being reconciled is not left unconsumed.
79
82
  */
80
- this.keyBagReconcilePromise = null;
83
+ this.keyBagReconcile = new singleFlight_1.SingleFlight(() => this.runKeyBagReconcile());
81
84
  /**
82
85
  * Cache of imported AES-GCM `CryptoKey`s, keyed by usage + raw key bytes
83
86
  * (hex). `subtle.importKey` costs a WebCrypto round trip per call, which
@@ -92,14 +95,23 @@ class BaseMindooTenant {
92
95
  * documents, so the per-call SPKI import is on the hot read path.
93
96
  */
94
97
  this.importedVerifyKeyCache = new Map();
95
- // Single-flight guard for SDK-driven key-distribution reconcile (§13). The
96
- // reconcile driver itself calls getDirectoryDB / updateUnifiedCache /
97
- // syncStoreChanges, any of which can re-enter a trigger; this flag keeps the
98
- // run-always trigger (directory bring-up + after each directory pull) from
99
- // recursing or overlapping. Reconcile is idempotent, so a skipped overlap is
100
- // harmless — the next trigger re-runs it.
101
- this.reconcileInFlight = false;
98
+ // Single-flight for the SDK-driven key-distribution reconcile (§13), fired on
99
+ // directory bring-up and after each directory pull. A trigger arriving
100
+ // mid-run (e.g. a pull that brought a new distribution) gets one follow-up
101
+ // run instead of being dropped. The driver's own re-trigger (directory
102
+ // bring-up inside getDirectoryDB) is fire-and-forget, never awaited inside
103
+ // the run, so it queues a follow-up rather than waiting for itself.
104
+ this.keyDistributionReconcile = new singleFlight_1.SingleFlight(async () => {
105
+ try {
106
+ await this.reconcileKeyDistributionsForCurrentUser();
107
+ }
108
+ catch (error) {
109
+ this.logger.warn(`reconcileKeyDistributionsForCurrentUserSafe: ${error}`);
110
+ }
111
+ });
102
112
  this.userKeyReconcileScheduled = false;
113
+ /** Fire-and-forget work of this tenant; see {@link whenBackgroundIdle}. */
114
+ this.backgroundTasks = new BackgroundTaskTracker_1.BackgroundTaskTracker();
103
115
  this.userKeys = new UserKeyManager_1.UserKeyManager(this);
104
116
  this.sealedGenerations = new Map();
105
117
  // Local cache support
@@ -136,7 +148,9 @@ class BaseMindooTenant {
136
148
  // Fire-and-forget: errors are surfaced via the reconcile path itself.
137
149
  // We intentionally do not await here to keep the mutation call site
138
150
  // synchronous from the listener's perspective.
139
- void this.reconcileKeyBagChanges();
151
+ this.trackBackgroundTask(this.reconcileKeyBagChanges().catch((error) => {
152
+ this.logger.warn(`reconcileKeyBagChanges: ${error}`);
153
+ }));
140
154
  });
141
155
  // Pre-warm the per-user CryptoKey caches so getDecryptedSigningKey()
142
156
  // and getDecryptedEncryptionKey() never run PBKDF2 + decryptPrivateKey
@@ -191,6 +205,9 @@ class BaseMindooTenant {
191
205
  // times - the disposer is nulled out after the first call.
192
206
  this.unsubscribeKeyBagChanges?.();
193
207
  this.unsubscribeKeyBagChanges = null;
208
+ // Background catch-ups write into the cache; let them finish before the
209
+ // final flush instead of racing the teardown.
210
+ await this.whenBackgroundIdle();
194
211
  if (this.cacheManager) {
195
212
  await this.cacheManager.dispose();
196
213
  this.cacheManager = null;
@@ -235,12 +252,40 @@ class BaseMindooTenant {
235
252
  if (this.userKeys.isReconciling() || this.userKeyReconcileScheduled)
236
253
  return;
237
254
  this.userKeyReconcileScheduled = true;
238
- queueMicrotask(() => {
255
+ this.trackBackgroundTask(Promise.resolve().then(() => {
239
256
  this.userKeyReconcileScheduled = false;
240
257
  if (this.userKeys.isReconciling())
241
258
  return;
242
- void this.reconcileUserKeysSafe();
243
- });
259
+ return this.reconcileUserKeysSafe();
260
+ }));
261
+ }
262
+ /**
263
+ * Register fire-and-forget work so {@link whenBackgroundIdle} and shutdown
264
+ * wait for it. The task must handle its own errors.
265
+ */
266
+ trackBackgroundTask(task) {
267
+ this.backgroundTasks.run(task);
268
+ }
269
+ /**
270
+ * Resolve once neither this tenant nor any of its open databases has
271
+ * background work left (trust/key reconciles, auto-follow catch-ups,
272
+ * pending change events), including work that finishing tasks start.
273
+ *
274
+ * @internal Shutdown and test hook.
275
+ */
276
+ async whenBackgroundIdle() {
277
+ for (;;) {
278
+ let waited = await this.backgroundTasks.settle();
279
+ for (const db of Array.from(this.databaseCache.values())) {
280
+ const idle = db.whenBackgroundIdle;
281
+ if (idle && (await idle.call(db))) {
282
+ waited = true;
283
+ }
284
+ }
285
+ if (!waited) {
286
+ return;
287
+ }
288
+ }
244
289
  }
245
290
  noteUserDirectoryFetched() {
246
291
  this.userKeys.noteUserDirectoryFetched();
@@ -1078,6 +1123,49 @@ class BaseMindooTenant {
1078
1123
  }
1079
1124
  return Array.from(cutoffs).sort((a, b) => a - b);
1080
1125
  }
1126
+ /**
1127
+ * Ids of the documents an admin-signed purge request removed from `dbId`
1128
+ * (see {@link MindooTenant.getPurgedDocumentIds}). Read from the local
1129
+ * directory; empty for the directory itself.
1130
+ */
1131
+ async getPurgedDocumentIds(dbId) {
1132
+ const purged = new Set();
1133
+ if (dbId === "directory") {
1134
+ return purged;
1135
+ }
1136
+ const directory = await this.openDirectory();
1137
+ for (const request of await directory.getRequestedDocHistoryPurges()) {
1138
+ if (request.dbId !== dbId || !Array.isArray(request.docIds)) {
1139
+ continue;
1140
+ }
1141
+ for (const docId of request.docIds) {
1142
+ if (typeof docId === "string" && docId.length > 0) {
1143
+ purged.add(docId);
1144
+ }
1145
+ }
1146
+ }
1147
+ return purged;
1148
+ }
1149
+ /**
1150
+ * After a document's history was purged from a live database: scrub it from
1151
+ * every open time-travel snapshot of that database, and drop the persisted
1152
+ * snapshot caches, which hold materialized plaintext, summaries and full-text
1153
+ * tokens of the document as of their cutoffs. Those caches are rebuilt on the
1154
+ * next open.
1155
+ *
1156
+ * @internal Called by {@link BaseMindooDB.purgeDocumentHistory}.
1157
+ */
1158
+ async forgetPurgedDocumentInSnapshots(dbId, docId) {
1159
+ const snapshotKeyPrefix = `${dbId}::tt:`;
1160
+ for (const [key, db] of this.databaseCache) {
1161
+ if (key.startsWith(snapshotKeyPrefix)) {
1162
+ await db.forgetPurgedDocument(docId);
1163
+ }
1164
+ }
1165
+ for (const cutoff of await this.listTimeTravelCacheDates(dbId)) {
1166
+ await this.purgeTimeTravelCache(dbId, cutoff);
1167
+ }
1168
+ }
1081
1169
  /**
1082
1170
  * Remove every persisted cache record of a time-travel snapshot (see
1083
1171
  * {@link MindooTenant.purgeTimeTravelCache}). Deletes all records whose id
@@ -1138,12 +1226,14 @@ class BaseMindooTenant {
1138
1226
  * Designed as the single barrier callers can `await` to be certain that
1139
1227
  * subsequent reads observe the latest add/remove of doc keys. Behaviour:
1140
1228
  *
1141
- * - Idempotent and concurrency-safe. Concurrent callers share the same
1142
- * in-flight reconcile via {@link keyBagReconcilePromise}, and a second
1143
- * call after the cursor catches up is a fast no-op.
1229
+ * - Idempotent and concurrency-safe. Concurrent callers share one run;
1230
+ * a call arriving mid-run gets one follow-up run (see
1231
+ * {@link keyBagReconcile}), and a call after the cursor catches up is a
1232
+ * fast no-op.
1144
1233
  * - Cursor-based. Replays from the persisted cursor in
1145
1234
  * {@link keyBagChangeCursor}, so missed live notifications are
1146
- * automatically recovered.
1235
+ * automatically recovered. The cursor advances only after every open
1236
+ * database was reconciled, so a failed run is retried by the next call.
1147
1237
  * - Tenant-scoped. Events for other tenants in a shared KeyBag are
1148
1238
  * consumed (the cursor still advances) but ignored.
1149
1239
  * - Invalidates the cached tenant default key when its add/remove was
@@ -1152,34 +1242,30 @@ class BaseMindooTenant {
1152
1242
  * cuts and never participate in visibility reconciliation.
1153
1243
  */
1154
1244
  async reconcileKeyBagChanges() {
1155
- if (this.keyBagReconcilePromise) {
1156
- return this.keyBagReconcilePromise;
1157
- }
1158
- this.keyBagReconcilePromise = (async () => {
1159
- let sawTenantDocKeyChange = false;
1160
- let latestCursor = this.keyBagChangeCursor;
1161
- // Consume every pending event so the cursor advances even for
1162
- // unrelated tenants sharing the same bag. We only need to react to
1163
- // doc keys for our own tenant though.
1164
- for await (const event of this.keyBag.iterateChangesSince(this.keyBagChangeCursor)) {
1165
- latestCursor = { changeSeq: event.changeSeq };
1166
- if (event.type !== "doc" || event.tenantId !== this.tenantId) {
1167
- continue;
1168
- }
1169
- sawTenantDocKeyChange = true;
1170
- if (event.keyId === types_1.DEFAULT_TENANT_KEY_ID) {
1171
- // The cached plaintext default key may now refer to a rotated
1172
- // or removed version; drop it so the next access re-resolves.
1173
- this.decryptedTenantKeyCache = undefined;
1174
- }
1245
+ return this.keyBagReconcile.run();
1246
+ }
1247
+ async runKeyBagReconcile() {
1248
+ let sawTenantDocKeyChange = false;
1249
+ let latestCursor = this.keyBagChangeCursor;
1250
+ // Consume every pending event so the cursor advances even for
1251
+ // unrelated tenants sharing the same bag. We only need to react to
1252
+ // doc keys for our own tenant though.
1253
+ for await (const event of this.keyBag.iterateChangesSince(this.keyBagChangeCursor)) {
1254
+ latestCursor = { changeSeq: event.changeSeq };
1255
+ if (event.type !== "doc" || event.tenantId !== this.tenantId) {
1256
+ continue;
1175
1257
  }
1176
- this.keyBagChangeCursor = latestCursor;
1177
- if (!sawTenantDocKeyChange) {
1178
- return;
1258
+ sawTenantDocKeyChange = true;
1259
+ if (event.keyId === types_1.DEFAULT_TENANT_KEY_ID) {
1260
+ // The cached plaintext default key may now refer to a rotated
1261
+ // or removed version; drop it so the next access re-resolves.
1262
+ this.decryptedTenantKeyCache = undefined;
1179
1263
  }
1264
+ }
1265
+ if (sawTenantDocKeyChange) {
1180
1266
  // Notify every open live database; time-travel views are read-only
1181
1267
  // historical snapshots and intentionally skip reconciliation.
1182
- for (const db of this.databaseCache.values()) {
1268
+ for (const db of Array.from(this.databaseCache.values())) {
1183
1269
  if (db.isTimeTravelMode()) {
1184
1270
  continue;
1185
1271
  }
@@ -1188,13 +1274,8 @@ class BaseMindooTenant {
1188
1274
  await reconcile.call(db);
1189
1275
  }
1190
1276
  }
1191
- })();
1192
- try {
1193
- await this.keyBagReconcilePromise;
1194
- }
1195
- finally {
1196
- this.keyBagReconcilePromise = null;
1197
1277
  }
1278
+ this.keyBagChangeCursor = latestCursor;
1198
1279
  }
1199
1280
  /**
1200
1281
  * Author-trust reconcile across all open live databases: when the tenant
@@ -2024,24 +2105,11 @@ class BaseMindooTenant {
2024
2105
  * Single-flight, best-effort wrapper around
2025
2106
  * {@link reconcileKeyDistributionsForCurrentUser} for the run-always trigger
2026
2107
  * (docs/accesscontrol.md §13). Fired on directory bring-up and after every
2027
- * directory pull. Never throws and never blocks sync: a reconcile error is
2028
- * logged and swallowed. The in-flight guard prevents the driver's own
2029
- * directory access from re-triggering it.
2108
+ * directory pull. Never throws: a reconcile error is logged and swallowed.
2109
+ * Resolves after a run that started after this call.
2030
2110
  */
2031
2111
  async reconcileKeyDistributionsForCurrentUserSafe() {
2032
- if (this.reconcileInFlight) {
2033
- return;
2034
- }
2035
- this.reconcileInFlight = true;
2036
- try {
2037
- await this.reconcileKeyDistributionsForCurrentUser();
2038
- }
2039
- catch (error) {
2040
- this.logger.warn(`reconcileKeyDistributionsForCurrentUserSafe: ${error}`);
2041
- }
2042
- finally {
2043
- this.reconcileInFlight = false;
2044
- }
2112
+ await this.keyDistributionReconcile.run();
2045
2113
  }
2046
2114
  /**
2047
2115
  * Export **all** stored versions of a document key for an admin-blind key