@interop/was-react 0.19.0 → 0.20.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/README.md +4 -3
  2. package/dist/auth/verifyResponse.d.ts.map +1 -1
  3. package/dist/auth/verifyResponse.js +10 -5
  4. package/dist/auth/verifyResponse.js.map +1 -1
  5. package/dist/identity/agents.d.ts +5 -0
  6. package/dist/identity/agents.d.ts.map +1 -1
  7. package/dist/identity/agents.js +10 -3
  8. package/dist/identity/agents.js.map +1 -1
  9. package/dist/identity/seedCredential.d.ts +5 -1
  10. package/dist/identity/seedCredential.d.ts.map +1 -1
  11. package/dist/identity/seedCredential.js +15 -28
  12. package/dist/identity/seedCredential.js.map +1 -1
  13. package/dist/index.d.ts +4 -3
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +7 -6
  16. package/dist/index.js.map +1 -1
  17. package/dist/react/hooks.d.ts +3 -2
  18. package/dist/react/hooks.d.ts.map +1 -1
  19. package/dist/react/hooks.js +8 -4
  20. package/dist/react/hooks.js.map +1 -1
  21. package/dist/session/authStore.d.ts +9 -0
  22. package/dist/session/authStore.d.ts.map +1 -1
  23. package/dist/session/authStore.js +113 -47
  24. package/dist/session/authStore.js.map +1 -1
  25. package/dist/session/localWipe.d.ts +1 -1
  26. package/dist/session/localWipe.js +2 -2
  27. package/dist/session/localWipe.js.map +1 -1
  28. package/dist/storage/adopt.d.ts +4 -1
  29. package/dist/storage/adopt.d.ts.map +1 -1
  30. package/dist/storage/adopt.js +4 -3
  31. package/dist/storage/adopt.js.map +1 -1
  32. package/dist/storage/descriptorManager.d.ts +1 -0
  33. package/dist/storage/descriptorManager.d.ts.map +1 -1
  34. package/dist/storage/descriptorManager.js +39 -21
  35. package/dist/storage/descriptorManager.js.map +1 -1
  36. package/dist/storage/entityStore.d.ts.map +1 -1
  37. package/dist/storage/entityStore.js +3 -0
  38. package/dist/storage/entityStore.js.map +1 -1
  39. package/dist/storage/publicUrl.js +3 -3
  40. package/dist/storage/storageContext.d.ts +178 -0
  41. package/dist/storage/storageContext.d.ts.map +1 -0
  42. package/dist/storage/storageContext.js +331 -0
  43. package/dist/storage/storageContext.js.map +1 -0
  44. package/dist/storage/storageManager.d.ts +61 -76
  45. package/dist/storage/storageManager.d.ts.map +1 -1
  46. package/dist/storage/storageManager.js +59 -150
  47. package/dist/storage/storageManager.js.map +1 -1
  48. package/dist/storage/syncController.d.ts +10 -1
  49. package/dist/storage/syncController.d.ts.map +1 -1
  50. package/dist/storage/syncController.js +12 -4
  51. package/dist/storage/syncController.js.map +1 -1
  52. package/dist/storage/syncStatusStore.d.ts +23 -2
  53. package/dist/storage/syncStatusStore.d.ts.map +1 -1
  54. package/dist/storage/syncStatusStore.js +22 -13
  55. package/dist/storage/syncStatusStore.js.map +1 -1
  56. package/dist/storage/wasRemoteStore.d.ts +24 -10
  57. package/dist/storage/wasRemoteStore.d.ts.map +1 -1
  58. package/dist/storage/wasRemoteStore.js +91 -36
  59. package/dist/storage/wasRemoteStore.js.map +1 -1
  60. package/dist/storage/wasSync.d.ts +24 -9
  61. package/dist/storage/wasSync.d.ts.map +1 -1
  62. package/dist/storage/wasSync.js +52 -21
  63. package/dist/storage/wasSync.js.map +1 -1
  64. package/dist/storage/writerId.d.ts +36 -0
  65. package/dist/storage/writerId.d.ts.map +1 -0
  66. package/dist/storage/writerId.js +76 -0
  67. package/dist/storage/writerId.js.map +1 -0
  68. package/package.json +9 -9
  69. package/dist/storage/rehydrate.d.ts +0 -64
  70. package/dist/storage/rehydrate.d.ts.map +0 -1
  71. package/dist/storage/rehydrate.js +0 -132
  72. package/dist/storage/rehydrate.js.map +0 -1
@@ -126,46 +126,64 @@ export function createDescriptorManager({ collections, sessionStore, anonStore }
126
126
  * private collection the cache does not cover. A first login has no cache at
127
127
  * all, and the connected replica must open epoch-aware BEFORE sync starts:
128
128
  * the adoption merge writes into it right after open, and epoch-from-birth
129
- * leaves no single-key fallback to write under. Best-effort: a failed read
130
- * leaves those collections fail-closed until the sync bootstrap's own
131
- * descriptor read lands. Freshly fetched descriptors enter the offline cache
132
- * immediately, and come back separately as `fresh` so the sync bootstrap can
133
- * reuse them instead of re-issuing the same reads seconds later (cached
134
- * descriptors are NOT passed on -- the bootstrap read is their freshness
135
- * refresh).
129
+ * leaves no single-key fallback to write under. A live read that answers
130
+ * "no descriptor" leaves that collection fail-closed until the sync
131
+ * bootstrap's own read lands. A read that FAILS is an unknown answer, not an
132
+ * absent one, and `onReadFailure` decides what it costs. `'reject'` (login)
133
+ * rejects the whole completion: opening the replica over a guess would hand
134
+ * a correctly provisioned collection the placeholder cipher and fail the
135
+ * adoption merge on it, so the caller falls back to `local` with the error,
136
+ * where the anonymous replica is intact for a retry. `'skip'` (a hot
137
+ * restore, which adopts nothing) warns and leaves that collection
138
+ * fail-closed for the sync bootstrap to repair, so a reload while offline
139
+ * still restores the connected session. Freshly fetched descriptors enter
140
+ * the offline cache immediately (best-effort), and come back separately as
141
+ * `fresh` so the sync bootstrap can reuse them instead of re-issuing the
142
+ * same reads seconds later (cached descriptors are NOT passed on -- the
143
+ * bootstrap read is their freshness refresh).
136
144
  *
137
145
  * @param options {object}
138
146
  * @param [options.cached] {Record<string, CollectionEncryption>}
139
147
  * @param options.identity {IdentityAgents}
140
148
  * @param options.parsed {ParsedGrants}
149
+ * @param options.onReadFailure {'reject' | 'skip'}
141
150
  * @returns {Promise<object>} `descriptors` (the completed set, or
142
151
  * undefined when there are none) and `fresh` (the live-read subset)
143
152
  */
144
- async function completeDescriptors({ cached, identity, parsed }) {
153
+ async function completeDescriptors({ cached, identity, parsed, onReadFailure }) {
145
154
  const missing = collections.filter(collection => !isPublicCollection(collection) &&
146
155
  parsed.byCollectionId[collection.id] !== undefined &&
147
156
  !cached?.[collection.id]);
148
157
  if (missing.length === 0) {
149
158
  return { descriptors: cached, fresh: {} };
150
159
  }
160
+ const { descriptors: fetched, failures } = await readRemoteDescriptors({
161
+ parsed,
162
+ zcapClient: identity.zcapClient,
163
+ collections: missing
164
+ });
165
+ if (failures.length > 0) {
166
+ if (onReadFailure === 'reject') {
167
+ throw failures[0]?.err;
168
+ }
169
+ for (const { collection, err } of failures) {
170
+ console.warn(`Opening collection "${collection.id}" fail-closed: its encryption ` +
171
+ `descriptor could not be read at restore.`, err);
172
+ }
173
+ }
174
+ if (Object.keys(fetched).length === 0) {
175
+ return { descriptors: cached, fresh: {} };
176
+ }
151
177
  try {
152
- const fetched = await readRemoteDescriptors({
153
- parsed,
154
- zcapClient: identity.zcapClient,
155
- collections: missing
178
+ await cacheDescriptors({
179
+ descriptors: fetched,
180
+ controllerDid: identity.controllerDid
156
181
  });
157
- if (Object.keys(fetched).length > 0) {
158
- await cacheDescriptors({
159
- descriptors: fetched,
160
- controllerDid: identity.controllerDid
161
- });
162
- return { descriptors: { ...fetched, ...cached }, fresh: fetched };
163
- }
164
182
  }
165
183
  catch (err) {
166
- console.warn('Failed to read encryption descriptors at login:', err);
184
+ console.warn('Failed to cache encryption descriptors at login:', err);
167
185
  }
168
- return { descriptors: cached, fresh: {} };
186
+ return { descriptors: { ...fetched, ...cached }, fresh: fetched };
169
187
  }
170
188
  return {
171
189
  loadOrMintAnonDescriptors,
@@ -1 +1 @@
1
- {"version":3,"file":"descriptorManager.js","sourceRoot":"","sources":["../../src/storage/descriptorManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"descriptorManager.js","sourceRoot":"","sources":["../../src/storage/descriptorManager.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"entityStore.d.ts","sourceRoot":"","sources":["../../src/storage/entityStore.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAU,KAAK,aAAa,EAAE,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAA;AAInE;;;;;GAKG;AACH,KAAK,eAAe,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,WAAW,GAAG,UAAU,CAAC,GAAG;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,WAAW,WAAW,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE;IACnD;;OAEG;IACH,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACpB;;OAEG;IACH,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5B;;;;OAIG;IACH,MAAM,EAAE,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAClD;;;OAGG;IACH,MAAM,EAAE,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAClD;;;;;;OAMG;IACH,MAAM,EAAE,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAClD;;OAEG;IACH,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACvC;;;;;OAKG;IACH,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,IAAI,CAAA;IAC/B;;;;;;;OAOG;IACH,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAA;IACvB;;;OAGG;IACH,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC5B;;;;;;;;;;;;;;;;;;;OAmBG;IACH,KAAK,EAAE,CAAC,KAAK,EAAE;QACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAC9B,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,MAAM,CAAC,EAAE,MAAM,CAAA;KAChB,KAAK,OAAO,CAAC;QAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAChE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EACxD,aAAa,EAAE,MAAM,GACpB,aAAa,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAqJzC"}
1
+ {"version":3,"file":"entityStore.d.ts","sourceRoot":"","sources":["../../src/storage/entityStore.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAU,KAAK,aAAa,EAAE,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAA;AAOnE;;;;;GAKG;AACH,KAAK,eAAe,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,WAAW,GAAG,UAAU,CAAC,GAAG;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,WAAW,WAAW,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE;IACnD;;OAEG;IACH,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACpB;;OAEG;IACH,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5B;;;;OAIG;IACH,MAAM,EAAE,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAClD;;;OAGG;IACH,MAAM,EAAE,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAClD;;;;;;OAMG;IACH,MAAM,EAAE,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAClD;;OAEG;IACH,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACvC;;;;;OAKG;IACH,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,IAAI,CAAA;IAC/B;;;;;;;OAOG;IACH,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAA;IACvB;;;OAGG;IACH,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC5B;;;;;;;;;;;;;;;;;;;OAmBG;IACH,KAAK,EAAE,CAAC,KAAK,EAAE;QACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAC9B,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,MAAM,CAAC,EAAE,MAAM,CAAA;KAChB,KAAK,OAAO,CAAC;QAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAChE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EACxD,aAAa,EAAE,MAAM,GACpB,aAAa,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAqJzC"}
@@ -22,6 +22,9 @@
22
22
  * local writes stay immediate so a single edit is snappy.
23
23
  */
24
24
  import { create } from 'zustand';
25
+ // The verbs resolve the ACTIVE session's context on every call rather than
26
+ // capturing one: an entity store is created at module level, before any
27
+ // session exists, and outlives every session it serves.
25
28
  import { requireStore, requireRemoteStore, stampLww } from './storageManager.js';
26
29
  import { lwwFields, remotePayloadWins } from '../sync/lww.js';
27
30
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"entityStore.js","sourceRoot":"","sources":["../../src/storage/entityStore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"entityStore.js","sourceRoot":"","sources":["../../src/storage/entityStore.ts"],"names":[],"mappings":"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"}
@@ -6,9 +6,9 @@
6
6
  * logical collection key and a document id, composes the stable,
7
7
  * world-readable resource URL of that document in a public (plaintext)
8
8
  * collection. It routes the logical key to its WAS collection id through the
9
- * process-wide holders exactly as {@link EntityStore.query} does, so it
10
- * requires an open {@link LocalStore} and a wallet-connected session (the
11
- * remote-store holder), and fails closed on non-public collections.
9
+ * active session's storage context exactly as {@link EntityStore.query} does,
10
+ * so it requires an open {@link LocalStore} and a wallet-connected session
11
+ * (a remote store), and fails closed on non-public collections.
12
12
  */
13
13
  import { requireStore, requireRemoteStore } from './storageManager.js';
14
14
  /**
@@ -0,0 +1,178 @@
1
+ import type { StoreRegistry } from '../config.js';
2
+ import type { Json } from '../sync/index.js';
3
+ import type { LwwFields } from '../sync/lww.js';
4
+ import type { LocalStore } from './localStore.js';
5
+ import { type SyncStatusStore } from './syncStatusStore.js';
6
+ import type { WasRemoteStore } from './wasRemoteStore.js';
7
+ export declare class StorageContext {
8
+ #private;
9
+ /**
10
+ * The app's per-collection hydrate/patch handlers; the change patches and the
11
+ * scheduled re-hydrates route on it.
12
+ */
13
+ readonly registry: StoreRegistry;
14
+ /**
15
+ * This session's per-collection replication statuses.
16
+ */
17
+ readonly syncStatus: SyncStatusStore;
18
+ /**
19
+ * @param options {object}
20
+ * @param options.registry {StoreRegistry}
21
+ * @param options.writerId {string} the resolved per-install writer id (see
22
+ * `getWriterId`), the value every stamp of this session carries
23
+ */
24
+ constructor({ registry, writerId }: {
25
+ registry: StoreRegistry;
26
+ writerId: string;
27
+ });
28
+ /**
29
+ * The writer id this session stamps with: an unkeyed, clearable attribution
30
+ * label, never an identity.
31
+ *
32
+ * @returns {string}
33
+ */
34
+ get writerId(): string;
35
+ /**
36
+ * Replaces the in-memory writer id with a fresh one (the clear-data wipe,
37
+ * after `clearPersistedWriterId` removed the persisted one). The session
38
+ * keeps running over its new anonymous replica and its write verbs still
39
+ * have to stamp; nothing persists the new id, so the next run resolves and
40
+ * stores an id of its own.
41
+ *
42
+ * @returns {string} the new id
43
+ */
44
+ resetWriterId(): string;
45
+ /**
46
+ * Stamps a payload with fresh last-write-wins fields: the current instant as
47
+ * `updatedAt` and this session's writer id. Any values the caller supplied
48
+ * are overwritten -- a stamp must describe THIS write, or a hydrated doc's
49
+ * older `updatedAt` would ride a later edit and lose the conflict.
50
+ *
51
+ * @param payload {object}
52
+ * @returns {object} the payload with the LWW fields set
53
+ */
54
+ stampLww<T extends {
55
+ id: string;
56
+ }>(payload: T): T & LwwFields;
57
+ /**
58
+ * Installs the opened replica and makes this the process's active context
59
+ * (the one the app-facing facades and the entity-store verbs resolve to).
60
+ * Throws if ANOTHER context still has a replica attached: two live sessions
61
+ * in one process would write into each other's entity stores.
62
+ *
63
+ * @param store {LocalStore}
64
+ * @returns {void}
65
+ */
66
+ attachStore(store: LocalStore): void;
67
+ /**
68
+ * Releases the replica (the caller closes or deletes it), cancels every
69
+ * pending re-hydrate, and releases the process-wide active pointer when this
70
+ * context holds it -- the mirror of {@link attachStore}'s claim. Anything
71
+ * still in flight against the old replica sees the generation change and
72
+ * ends as a no-op; the facades throw until the next attach claims a live
73
+ * context, rather than resolving a retired one.
74
+ *
75
+ * @returns {LocalStore | null} the replica that was attached, if any
76
+ */
77
+ detachStore(): LocalStore | null;
78
+ /**
79
+ * Whether a replica is attached.
80
+ *
81
+ * @returns {boolean}
82
+ */
83
+ hasStore(): boolean;
84
+ /**
85
+ * The attached replica, or throws if none is open.
86
+ *
87
+ * @returns {LocalStore}
88
+ */
89
+ requireStore(): LocalStore;
90
+ /**
91
+ * Runs `op` against the replica attached now and resolves with its result
92
+ * only if that same replica is still attached when `op` settles. Resolves
93
+ * `undefined` when no replica is attached, or when it was detached or
94
+ * swapped meanwhile -- including when `op` rejected after the swap, since a
95
+ * read torn by its own teardown is expected noise, not an error. A rejection
96
+ * against a replica that is still attached propagates.
97
+ *
98
+ * @param op {(store: LocalStore) => Promise<T>}
99
+ * @returns {Promise<T | undefined>}
100
+ */
101
+ whileAttached<T>(op: (store: LocalStore) => Promise<T>): Promise<T | undefined>;
102
+ /**
103
+ * Installs the connected session's delegated remote store (once background
104
+ * sync has bootstrapped it from the granted zcaps).
105
+ *
106
+ * @param store {WasRemoteStore}
107
+ * @returns {void}
108
+ */
109
+ attachRemoteStore(store: WasRemoteStore): void;
110
+ /**
111
+ * Releases the remote store (logout / sync teardown).
112
+ *
113
+ * @returns {void}
114
+ */
115
+ detachRemoteStore(): void;
116
+ /**
117
+ * Whether a connected session's remote store is available.
118
+ *
119
+ * @returns {boolean}
120
+ */
121
+ hasRemoteStore(): boolean;
122
+ /**
123
+ * The connected session's remote store, or throws while no wallet-connected
124
+ * session is active (local-only mode, or sync has not bootstrapped yet).
125
+ *
126
+ * @returns {WasRemoteStore}
127
+ */
128
+ requireRemoteStore(): WasRemoteStore;
129
+ /**
130
+ * Hydrates every registered store from the attached replica.
131
+ *
132
+ * @returns {Promise<void>}
133
+ */
134
+ hydrateAll(): Promise<void>;
135
+ /**
136
+ * Empties every registered store (logout).
137
+ *
138
+ * @returns {void}
139
+ */
140
+ clearEntityStores(): void;
141
+ /**
142
+ * Patches ONE store from a single RxDB change event (per-doc, no
143
+ * whole-collection re-hydrate): decrypt the changed envelope, then upsert the
144
+ * payload (INSERT / UPDATE, including conflict-resolved rows) or drop it
145
+ * (DELETE / tombstone). The `uuid -> envelopeId` index is kept in step so a
146
+ * later local edit of a remotely-created doc still finds its envelope. Falls
147
+ * back to a debounced whole-collection re-hydrate if the envelope is missing
148
+ * or fails to decrypt.
149
+ *
150
+ * Fired floating off the RxDB change stream, so a logout/login teardown can
151
+ * detach or swap the replica while the decrypt is in flight; the decrypt runs
152
+ * under {@link StorageContext.whileAttached}, so an event that outlives its
153
+ * replica is dropped rather than patched into the next session's stores.
154
+ *
155
+ * @param collectionKey {string}
156
+ * @param event {object} an RxDB change event (operation + documentData)
157
+ * @returns {Promise<void>}
158
+ */
159
+ patchFromChange(collectionKey: string, event: {
160
+ operation: string;
161
+ documentData?: {
162
+ id: string;
163
+ data?: Json;
164
+ _deleted?: boolean;
165
+ };
166
+ }): Promise<void>;
167
+ /**
168
+ * Schedules a debounced re-hydrate of one collection's store after a pull.
169
+ * A no-op without an attached replica, and the timer itself is bound to the
170
+ * replica attached now: a detach cancels it, and one that still fires after
171
+ * a swap finds the generation changed and does nothing.
172
+ *
173
+ * @param collectionKey {string}
174
+ * @returns {void}
175
+ */
176
+ scheduleRehydrate(collectionKey: string): void;
177
+ }
178
+ //# sourceMappingURL=storageContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storageContext.d.ts","sourceRoot":"","sources":["../../src/storage/storageContext.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAKjD,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAOzD,qBAAa,cAAc;;IACzB;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAA;IAChC;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,eAAe,CAA0B;IAU9D;;;;;OAKG;gBACS,EACV,QAAQ,EACR,QAAQ,EACT,EAAE;QACD,QAAQ,EAAE,aAAa,CAAA;QACvB,QAAQ,EAAE,MAAM,CAAA;KACjB;IAKD;;;;;OAKG;IACH,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED;;;;;;;;OAQG;IACH,aAAa,IAAI,MAAM;IAKvB;;;;;;;;OAQG;IACH,QAAQ,CAAC,CAAC,SAAS;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS;IAQ7D;;;;;;;;OAQG;IACH,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAMpC;;;;;;;;;OASG;IACH,WAAW,IAAI,UAAU,GAAG,IAAI;IAYhC;;;;OAIG;IACH,QAAQ,IAAI,OAAO;IAInB;;;;OAIG;IACH,YAAY,IAAI,UAAU;IAO1B;;;;;;;;;;OAUG;IACG,aAAa,CAAC,CAAC,EACnB,EAAE,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,GACpC,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAkBzB;;;;;;OAMG;IACH,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAI9C;;;;OAIG;IACH,iBAAiB,IAAI,IAAI;IAIzB;;;;OAIG;IACH,cAAc,IAAI,OAAO;IAIzB;;;;;OAKG;IACH,kBAAkB,IAAI,cAAc;IASpC;;;;OAIG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAMjC;;;;OAIG;IACH,iBAAiB,IAAI,IAAI;IAMzB;;;;;;;;;;;;;;;;;OAiBG;IACG,eAAe,CACnB,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE;QACL,SAAS,EAAE,MAAM,CAAA;QACjB,YAAY,CAAC,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,IAAI,CAAC;YAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;SAAE,CAAA;KAC/D,GACA,OAAO,CAAC,IAAI,CAAC;IAqDhB;;;;;;;;OAQG;IACH,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;CAqB/C"}