@interop/was-react 0.3.5 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -27,6 +27,7 @@
27
27
  import { createRxDatabase, removeRxDatabase } from 'rxdb/plugins/core';
28
28
  import { getRxStorageDexie } from 'rxdb/plugins/storage-dexie';
29
29
  import { DEFAULT_DB_NAME, validateCollections } from '../config.js';
30
+ import { UnknownEpochError } from '@interop/was-client/edv';
30
31
  import { syncedDocSchema, createDocCipher, createPlaintextDocCodec, makeLwwConflictHandler, remotePayloadWins } from '../sync/index.js';
31
32
  import { deriveCollectionKeys } from '../identity/agents.js';
32
33
  /**
@@ -58,12 +59,24 @@ export class LocalStore {
58
59
  #configs;
59
60
  // Per-collection logical-uuid -> envelope (RxDB primary key) index.
60
61
  #index;
61
- constructor({ db, collections, ciphers, configs }) {
62
+ // The master seed, kept so a private collection's cipher can be re-derived
63
+ // when its epoch marker changes (a wallet-side rotation).
64
+ #seed;
65
+ // The encryption marker each private collection's current cipher was built
66
+ // from (keyed by collection logical key), so a marker change can be detected.
67
+ #markers;
68
+ // Fetches a private collection's fresh encryption marker (by WAS collection
69
+ // id) when a decrypt meets an unknown key epoch; injected once a remote store
70
+ // exists. Absent offline / local-only.
71
+ #epochRefresher;
72
+ constructor({ db, collections, ciphers, configs, seed, markers }) {
62
73
  this.#db = db;
63
74
  this.#collections = collections;
64
75
  this.#ciphers = ciphers;
65
76
  this.#configs = configs;
66
77
  this.#index = {};
78
+ this.#seed = seed;
79
+ this.#markers = markers;
67
80
  }
68
81
  /**
69
82
  * Opens (or creates) the store: derives a per-collection KAK + cipher from
@@ -71,18 +84,27 @@ export class LocalStore {
71
84
  * derivation entirely and gets the pass-through plaintext codec) and opens
72
85
  * one RxDB collection per entity.
73
86
  *
87
+ * When `markers` carries an encryption marker for a private collection (from
88
+ * the offline marker cache), that collection's cipher is built epoch-aware so
89
+ * a multi-recipient envelope decrypts before any live description read; a
90
+ * collection with no cached marker keeps the single-key behavior.
91
+ *
74
92
  * @param options {object}
75
93
  * @param options.seed {Uint8Array} the 32-byte master seed
76
94
  * @param options.collections {WasCollectionConfig[]} the collection registry
77
95
  * (logical key to WAS collection id)
96
+ * @param [options.markers] {Record<string, CollectionEncryption>} cached
97
+ * encryption markers keyed by WAS collection id (from the offline cache)
78
98
  * @param [options.storage] {RxStorage<unknown, unknown>} defaults to
79
99
  * Dexie/IndexedDB; injectable for tests
80
100
  * @param [options.dbName] {string} defaults to {@link DEFAULT_DB_NAME}
81
101
  * @returns {Promise<LocalStore>}
82
102
  */
83
- static async init({ seed, collections, storage, dbName = DEFAULT_DB_NAME }) {
103
+ static async init({ seed, collections, markers = {}, storage, dbName = DEFAULT_DB_NAME }) {
84
104
  validateCollections(collections);
85
105
  const ciphers = {};
106
+ // The marker each private cipher was built from, keyed by logical key.
107
+ const builtMarkers = {};
86
108
  for (const { key, id, visibility } of collections) {
87
109
  // A public collection is stored plaintext: no key derivation, no EDV
88
110
  // cipher -- just the pass-through codec behind the same seam.
@@ -90,6 +112,7 @@ export class LocalStore {
90
112
  ciphers[key] = createPlaintextDocCodec({ collectionId: id });
91
113
  continue;
92
114
  }
115
+ const encryption = markers[id];
93
116
  const { keyAgreementKey, keyResolver } = await deriveCollectionKeys({
94
117
  seed,
95
118
  collectionId: id
@@ -97,8 +120,10 @@ export class LocalStore {
97
120
  ciphers[key] = await createDocCipher({
98
121
  keyAgreementKey,
99
122
  keyResolver,
100
- collectionId: id
123
+ collectionId: id,
124
+ ...(encryption && { encryption })
101
125
  });
126
+ builtMarkers[key] = encryption;
102
127
  }
103
128
  const db = await createRxDatabase({
104
129
  name: dbName,
@@ -115,15 +140,24 @@ export class LocalStore {
115
140
  // On a public collection the codec is pass-through, so the handler reads
116
141
  // those fields directly off the plaintext payload.
117
142
  const collectionsConfig = Object.fromEntries(collections.map(({ key }) => {
118
- const cipher = ciphers[key];
119
- if (!cipher) {
143
+ if (!ciphers[key]) {
120
144
  throw new Error(`No cipher for collection "${key}".`);
121
145
  }
122
146
  return [
123
147
  key,
124
148
  {
125
149
  schema: syncedDocSchema(),
126
- conflictHandler: makeLwwConflictHandler(envelope => cipher.decrypt({ envelope }))
150
+ // Reads the CURRENT cipher for this key at decrypt time (not a
151
+ // captured reference), so a `rebuildCipher` after a marker change
152
+ // takes effect here too. `ciphers` is the same object the instance
153
+ // holds as `#ciphers`, so the swap is visible.
154
+ conflictHandler: makeLwwConflictHandler(envelope => {
155
+ const cipher = ciphers[key];
156
+ if (!cipher) {
157
+ throw new Error(`No cipher for collection "${key}".`);
158
+ }
159
+ return cipher.decrypt({ envelope });
160
+ })
127
161
  }
128
162
  ];
129
163
  }));
@@ -132,7 +166,9 @@ export class LocalStore {
132
166
  db,
133
167
  collections: collectionsMap,
134
168
  ciphers,
135
- configs: Object.fromEntries(collections.map(entry => [entry.key, entry]))
169
+ configs: Object.fromEntries(collections.map(entry => [entry.key, entry])),
170
+ seed,
171
+ markers: builtMarkers
136
172
  });
137
173
  }
138
174
  #collection(key) {
@@ -164,6 +200,100 @@ export class LocalStore {
164
200
  }
165
201
  return cipher;
166
202
  }
203
+ /**
204
+ * Installs the epoch-marker refresher: given a WAS collection id, it fetches
205
+ * that collection's fresh encryption marker (a live description read). Called
206
+ * once a remote store exists; a decrypt that meets an unknown key epoch uses
207
+ * it to re-read the marker and rebuild the cipher exactly once.
208
+ *
209
+ * @param refresher {(collectionId: string) => Promise<CollectionEncryption | undefined>}
210
+ * @returns {void}
211
+ */
212
+ setEpochRefresher(refresher) {
213
+ this.#epochRefresher = refresher;
214
+ }
215
+ /**
216
+ * Decrypts an at-rest envelope through the collection's cipher, with a
217
+ * one-shot recovery from a stale epoch marker: when the cipher throws
218
+ * {@link UnknownEpochError} (an envelope written under an epoch this device has
219
+ * not seen -- a rekey on another device / a wallet revoke-rotation) and a
220
+ * refresher is installed, re-read the marker, rebuild the cipher, and retry
221
+ * the decrypt once. A second failure propagates rather than looping.
222
+ */
223
+ async #decryptWithRefresh(key, envelope) {
224
+ try {
225
+ return await this.#cipher(key).decrypt({ envelope });
226
+ }
227
+ catch (err) {
228
+ if (!(err instanceof UnknownEpochError) || !this.#epochRefresher) {
229
+ throw err;
230
+ }
231
+ const { id } = this.collectionConfig(key);
232
+ const encryption = await this.#epochRefresher(id);
233
+ if (!encryption) {
234
+ throw err;
235
+ }
236
+ await this.rebuildCipher({ key, encryption });
237
+ // One retry only: a repeat UnknownEpochError propagates (no loop).
238
+ return await this.#cipher(key).decrypt({ envelope });
239
+ }
240
+ }
241
+ /**
242
+ * Rebuilds one private collection's cipher from a new encryption marker,
243
+ * re-deriving its per-collection key material from the master seed. A public
244
+ * (plaintext) collection has no seed-derived cipher and is a no-op. The new
245
+ * cipher replaces the held one in place, so the conflict handler and every
246
+ * read path pick it up.
247
+ *
248
+ * @param options {object}
249
+ * @param options.key {string} the collection logical key
250
+ * @param options.encryption {CollectionEncryption} the new marker
251
+ * @returns {Promise<void>}
252
+ */
253
+ async rebuildCipher({ key, encryption }) {
254
+ const config = this.collectionConfig(key);
255
+ if (config.visibility === 'public') {
256
+ return;
257
+ }
258
+ const { keyAgreementKey, keyResolver } = await deriveCollectionKeys({
259
+ seed: this.#seed,
260
+ collectionId: config.id
261
+ });
262
+ this.#ciphers[key] = await createDocCipher({
263
+ keyAgreementKey,
264
+ keyResolver,
265
+ collectionId: config.id,
266
+ encryption
267
+ });
268
+ this.#markers[key] = encryption;
269
+ }
270
+ /**
271
+ * Applies a freshly fetched remote encryption marker (by WAS collection id):
272
+ * rebuilds that collection's cipher when the marker's current epoch differs
273
+ * from the one the current cipher was built from (a wallet-side rotation, or
274
+ * first-ever epochs), so subsequent writes stamp the current epoch. Returns
275
+ * whether a rebuild happened. Unknown / public collections are ignored.
276
+ *
277
+ * @param options {object}
278
+ * @param options.collectionId {string} the WAS collection id
279
+ * @param options.encryption {CollectionEncryption} the fetched marker
280
+ * @returns {Promise<boolean>}
281
+ */
282
+ async applyRemoteMarker({ collectionId, encryption }) {
283
+ const entry = Object.entries(this.#configs).find(([, config]) => config.id === collectionId);
284
+ if (!entry) {
285
+ return false;
286
+ }
287
+ const [key, config] = entry;
288
+ if (config.visibility === 'public') {
289
+ return false;
290
+ }
291
+ if (markersEqual(this.#markers[key], encryption)) {
292
+ return false;
293
+ }
294
+ await this.rebuildCipher({ key, encryption });
295
+ return true;
296
+ }
167
297
  /**
168
298
  * Builds (or rebuilds) the `uuid -> envelopeId` index for one collection by
169
299
  * decrypting every live row. Returns the index map.
@@ -174,7 +304,6 @@ export class LocalStore {
174
304
  return existing;
175
305
  }
176
306
  const index = new Map();
177
- const cipher = this.#cipher(key);
178
307
  const docs = await this.#collection(key).find().exec();
179
308
  // Decrypt rows concurrently: index building has no ordering dependency, so
180
309
  // serializing the per-row WebCrypto work would only stall the unlock path.
@@ -183,9 +312,7 @@ export class LocalStore {
183
312
  if (data === undefined) {
184
313
  return null;
185
314
  }
186
- const payload = (await cipher.decrypt({
187
- envelope: data
188
- }));
315
+ const payload = (await this.#decryptWithRefresh(key, data));
189
316
  return { envelopeId, uuid: payload.id };
190
317
  }));
191
318
  for (const entry of entries) {
@@ -320,7 +447,6 @@ export class LocalStore {
320
447
  * @returns {Promise<T[]>}
321
448
  */
322
449
  async listEntities(key) {
323
- const cipher = this.#cipher(key);
324
450
  const index = new Map();
325
451
  const docs = await this.#collection(key).find().exec();
326
452
  // Decrypt every row concurrently (the unlock hot path): the store is keyed
@@ -331,7 +457,7 @@ export class LocalStore {
331
457
  if (data === undefined) {
332
458
  return null;
333
459
  }
334
- const payload = (await cipher.decrypt({ envelope: data }));
460
+ const payload = (await this.#decryptWithRefresh(key, data));
335
461
  return { envelopeId, payload };
336
462
  }));
337
463
  const payloads = [];
@@ -359,7 +485,6 @@ export class LocalStore {
359
485
  * @returns {Promise<T | null>}
360
486
  */
361
487
  async hydrateSingleton(key) {
362
- const cipher = this.#cipher(key);
363
488
  const collection = this.#collection(key);
364
489
  const rows = await collection.find().exec();
365
490
  const decoded = [];
@@ -368,7 +493,7 @@ export class LocalStore {
368
493
  if (data === undefined) {
369
494
  continue;
370
495
  }
371
- const payload = (await cipher.decrypt({ envelope: data }));
496
+ const payload = (await this.#decryptWithRefresh(key, data));
372
497
  decoded.push({ envelopeId, payload });
373
498
  }
374
499
  const index = new Map();
@@ -407,7 +532,7 @@ export class LocalStore {
407
532
  * @returns {Promise<T>}
408
533
  */
409
534
  async decryptEnvelope(key, envelope) {
410
- return (await this.#cipher(key).decrypt({ envelope }));
535
+ return (await this.#decryptWithRefresh(key, envelope));
411
536
  }
412
537
  /**
413
538
  * Records a `uuid -> envelopeId` mapping for a remotely-pulled row so a
@@ -486,4 +611,29 @@ export class LocalStore {
486
611
  await removeRxDatabase(dbName, storage ?? getRxStorageDexie());
487
612
  }
488
613
  }
614
+ /**
615
+ * Whether two encryption markers select the same writing epoch: same
616
+ * `currentEpoch` and the same ordered epoch id list. That is all a cipher rebuild
617
+ * turns on -- rotation only appends epochs and moves `currentEpoch` -- so a
618
+ * marker that matches on both needs no rebuild. A cached `undefined` (no marker
619
+ * built) never equals a real marker, so first-ever epochs always rebuild.
620
+ *
621
+ * @param current {CollectionEncryption | undefined}
622
+ * @param next {CollectionEncryption}
623
+ * @returns {boolean}
624
+ */
625
+ function markersEqual(current, next) {
626
+ if (current === undefined) {
627
+ return false;
628
+ }
629
+ if (current.currentEpoch !== next.currentEpoch) {
630
+ return false;
631
+ }
632
+ const currentIds = (current.epochs ?? []).map(epoch => epoch.id);
633
+ const nextIds = (next.epochs ?? []).map(epoch => epoch.id);
634
+ if (currentIds.length !== nextIds.length) {
635
+ return false;
636
+ }
637
+ return currentIds.every((id, index) => id === nextIds[index]);
638
+ }
489
639
  //# sourceMappingURL=localStore.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"localStore.js","sourceRoot":"","sources":["../../src/storage/localStore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"localStore.js","sourceRoot":"","sources":["../../src/storage/localStore.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAIjB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAC9D,OAAO,EACL,eAAe,EACf,mBAAmB,EAEpB,MAAM,cAAc,CAAA;AAErB,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,EACL,eAAe,EACf,eAAe,EACf,uBAAuB,EACvB,sBAAsB,EACtB,iBAAiB,EAIlB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAO5D;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CAAC,EAClC,MAAM,EACN,aAAa,EAId;IACC,IAAI,IAAI,GAAG,UAAU,CAAA;IACrB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QAC1D,IAAI,IAAI,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;QACvC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,CAAA;IAC1C,CAAC;IACD,OAAO,GAAG,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAA;AAC1D,CAAC;AAED;;;;GAIG;AACH,MAAM,OAAO,UAAU;IACrB,GAAG,CAAY;IACf,YAAY,CAAyC;IACrD,QAAQ,CAA2B;IACnC,QAAQ,CAAqC;IAC7C,oEAAoE;IACpE,MAAM,CAAqC;IAC3C,2EAA2E;IAC3E,0DAA0D;IAC1D,KAAK,CAAY;IACjB,2EAA2E;IAC3E,8EAA8E;IAC9E,QAAQ,CAAkD;IAC1D,4EAA4E;IAC5E,8EAA8E;IAC9E,uCAAuC;IACvC,eAAe,CAE+B;IAE9C,YAAoB,EAClB,EAAE,EACF,WAAW,EACX,OAAO,EACP,OAAO,EACP,IAAI,EACJ,OAAO,EAQR;QACC,IAAI,CAAC,GAAG,GAAG,EAAE,CAAA;QACb,IAAI,CAAC,YAAY,GAAG,WAAW,CAAA;QAC/B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;QACvB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;QACvB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAA;QAChB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;QACjB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;IACzB,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAChB,IAAI,EACJ,WAAW,EACX,OAAO,GAAG,EAAE,EACZ,OAAO,EACP,MAAM,GAAG,eAAe,EAOzB;QACC,mBAAmB,CAAC,WAAW,CAAC,CAAA;QAChC,MAAM,OAAO,GAA8B,EAAE,CAAA;QAC7C,uEAAuE;QACvE,MAAM,YAAY,GAAqD,EAAE,CAAA;QACzE,KAAK,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,WAAW,EAAE,CAAC;YAClD,qEAAqE;YACrE,8DAA8D;YAC9D,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;gBAC5B,OAAO,CAAC,GAAG,CAAC,GAAG,uBAAuB,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CAAA;gBAC5D,SAAQ;YACV,CAAC;YACD,MAAM,UAAU,GAAG,OAAO,CAAC,EAAE,CAAC,CAAA;YAC9B,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,GAAG,MAAM,oBAAoB,CAAC;gBAClE,IAAI;gBACJ,YAAY,EAAE,EAAE;aACjB,CAAC,CAAA;YACF,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,eAAe,CAAC;gBACnC,eAAe;gBACf,WAAW;gBACX,YAAY,EAAE,EAAE;gBAChB,GAAG,CAAC,UAAU,IAAI,EAAE,UAAU,EAAE,CAAC;aAClC,CAAC,CAAA;YACF,YAAY,CAAC,GAAG,CAAC,GAAG,UAAU,CAAA;QAChC,CAAC;QAED,MAAM,EAAE,GAAG,MAAM,gBAAgB,CAAC;YAChC,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE;YACvC,eAAe,EAAE,IAAI;YACrB,wEAAwE;YACxE,4DAA4D;YAC5D,aAAa,EAAE,KAAK;SACrB,CAAC,CAAA;QACF,2EAA2E;QAC3E,wEAAwE;QACxE,kEAAkE;QAClE,0EAA0E;QAC1E,yEAAyE;QACzE,mDAAmD;QACnD,MAAM,iBAAiB,GAAG,MAAM,CAAC,WAAW,CAC1C,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;YAC1B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClB,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,IAAI,CAAC,CAAA;YACvD,CAAC;YACD,OAAO;gBACL,GAAG;gBACH;oBACE,MAAM,EAAE,eAAe,EAAE;oBACzB,+DAA+D;oBAC/D,kEAAkE;oBAClE,mEAAmE;oBACnE,+CAA+C;oBAC/C,eAAe,EAAE,sBAAsB,CAAC,QAAQ,CAAC,EAAE;wBACjD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;wBAC3B,IAAI,CAAC,MAAM,EAAE,CAAC;4BACZ,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,IAAI,CAAC,CAAA;wBACvD,CAAC;wBACD,OAAO,MAAM,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAA;oBACrC,CAAC,CAAC;iBACH;aACF,CAAA;QACH,CAAC,CAAC,CACH,CAAA;QACD,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,CAAC,cAAc,CAC7C,iBAAiB,CAClB,CAAuD,CAAA;QAExD,OAAO,IAAI,UAAU,CAAC;YACpB,EAAE;YACF,WAAW,EAAE,cAAc;YAC3B,OAAO;YACP,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;YACzE,IAAI;YACJ,OAAO,EAAE,YAAY;SACtB,CAAC,CAAA;IACJ,CAAC;IAED,WAAW,CAAC,GAAW;QACrB,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;QACzC,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,IAAI,CAAC,CAAA;QACjD,CAAC;QACD,OAAO,UAAU,CAAA;IACnB,CAAC;IAED;;;;;;;OAOG;IACH,gBAAgB,CAAC,GAAW;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;QACjC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,IAAI,CAAC,CAAA;QACjD,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAED,OAAO,CAAC,GAAW;QACjB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;QACjC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,IAAI,CAAC,CAAA;QACvD,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAED;;;;;;;;OAQG;IACH,iBAAiB,CACf,SAE8C;QAE9C,IAAI,CAAC,eAAe,GAAG,SAAS,CAAA;IAClC,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,mBAAmB,CAAC,GAAW,EAAE,QAAc;QACnD,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAA;QACtD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,CAAC,GAAG,YAAY,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;gBACjE,MAAM,GAAG,CAAA;YACX,CAAC;YACD,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAA;YACzC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAA;YACjD,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,MAAM,GAAG,CAAA;YACX,CAAC;YACD,MAAM,IAAI,CAAC,aAAa,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAA;YAC7C,mEAAmE;YACnE,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAA;QACtD,CAAC;IACH,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,aAAa,CAAC,EAClB,GAAG,EACH,UAAU,EAIX;QACC,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAA;QACzC,IAAI,MAAM,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;YACnC,OAAM;QACR,CAAC;QACD,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,GAAG,MAAM,oBAAoB,CAAC;YAClE,IAAI,EAAE,IAAI,CAAC,KAAK;YAChB,YAAY,EAAE,MAAM,CAAC,EAAE;SACxB,CAAC,CAAA;QACF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,MAAM,eAAe,CAAC;YACzC,eAAe;YACf,WAAW;YACX,YAAY,EAAE,MAAM,CAAC,EAAE;YACvB,UAAU;SACX,CAAC,CAAA;QACF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,UAAU,CAAA;IACjC,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,iBAAiB,CAAC,EACtB,YAAY,EACZ,UAAU,EAIX;QACC,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAC9C,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,YAAY,CAC3C,CAAA;QACD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,KAAK,CAAA;QACd,CAAC;QACD,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,KAAK,CAAA;QAC3B,IAAI,MAAM,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;YACnC,OAAO,KAAK,CAAA;QACd,CAAC;QACD,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,EAAE,CAAC;YACjD,OAAO,KAAK,CAAA;QACd,CAAC;QACD,MAAM,IAAI,CAAC,aAAa,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAA;QAC7C,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,YAAY,CAAC,GAAW;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QACjC,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,QAAQ,CAAA;QACjB,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAA;QACvC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAA;QACtD,2EAA2E;QAC3E,2EAA2E;QAC3E,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,IAAI,CAAC,GAAG,CAAC,KAAK,EAAC,GAAG,EAAC,EAAE;YACnB,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,aAAa,EAAE,CAAA;YACpD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,OAAO,IAAI,CAAA;YACb,CAAC;YACD,MAAM,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAC7C,GAAG,EACH,IAAI,CACL,CAAkB,CAAA;YACnB,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,CAAA;QACzC,CAAC,CAAC,CACH,CAAA;QACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACnB,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,CAAA;YACzC,CAAC;QACH,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;QACxB,OAAO,KAAK,CAAA;IACd,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,YAAY,CAChB,GAAW,EACX,OAAU;QAEV,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAChC,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC;YACxD,IAAI,EAAE,OAAe;SACtB,CAAC,CAAA;QACF,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;YACjC,EAAE,EAAE,UAAU;YACd,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,OAAO,EAAE,CAAC;YACV,IAAI,EAAE,QAAQ;SACf,CAAC,CAAA;QACF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;QAC1C,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,UAAU,CAAC,CAAA;IACnC,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,YAAY,CAChB,GAAW,EACX,OAAU;QAEV,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;QAC1C,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QACxC,yEAAyE;QACzE,uEAAuE;QACvE,4EAA4E;QAC5E,2EAA2E;QAC3E,qEAAqE;QACrE,0EAA0E;QAC1E,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;YACrC,OAAM;QACR,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAA;QAClE,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;YACxB,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;YACrC,OAAM;QACR,CAAC;QACD,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,EAAE,CAAC,IAAI,CAAA;QACxC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;YACxB,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;YACrC,OAAM;QACR,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAChC,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC;YAC9C,EAAE,EAAE,UAAU;YACd,IAAI,EAAE,OAAe;YACrB,OAAO;SACR,CAAC,CAAA;QACF,MAAM,GAAG,CAAC,gBAAgB,CAAC;YACzB,IAAI,EAAE,QAAQ;YACd,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAA;IACJ,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,YAAY,CAChB,GAAW,EACX,OAAU;QAEV,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;QAC1C,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;QACvC,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;QACvC,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,YAAY,CAAC,GAAW,EAAE,IAAY;QAC1C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;QAC1C,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAClC,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAM;QACR,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAA;QAClE,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,GAAG,CAAC,MAAM,EAAE,CAAA;QACpB,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACpB,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,aAAa,CAAC,GAAW;QAC7B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAA;QACtD,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,YAAY,CAA0B,GAAW;QACrD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAA;QACvC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAA;QACtD,2EAA2E;QAC3E,wEAAwE;QACxE,iDAAiD;QACjD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,IAAI,CAAC,GAAG,CAAC,KAAK,EAAC,GAAG,EAAC,EAAE;YACnB,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,aAAa,EAAE,CAAA;YACpD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,OAAO,IAAI,CAAA;YACb,CAAC;YACD,MAAM,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAM,CAAA;YAChE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAA;QAChC,CAAC,CAAC,CACH,CAAA;QACD,MAAM,QAAQ,GAAQ,EAAE,CAAA;QACxB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACnB,SAAQ;YACV,CAAC;YACD,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,CAAC,UAAU,CAAC,CAAA;YAC7C,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAC9B,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;QACxB,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,gBAAgB,CAEpB,GAAW;QACX,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;QACxC,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAA;QAC3C,MAAM,OAAO,GAA8C,EAAE,CAAA;QAC7D,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,aAAa,EAAE,CAAA;YACpD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,SAAQ;YACV,CAAC;YACD,MAAM,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAM,CAAA;YAChE,OAAO,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAA;QACvC,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAA;QACvC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;QACxB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,IAAI,CAAA;QACb,CAAC;QACD,IAAI,MAAM,GAAG,OAAO,CAAC,CAAC,CAAE,CAAA;QACxB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;gBACrB,SAAQ;YACV,CAAC;YACD,IAAI,iBAAiB,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;gBACrD,MAAM,GAAG,KAAK,CAAA;YAChB,CAAC;QACH,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,UAAU,KAAK,MAAM,CAAC,UAAU,EAAE,CAAC;gBAC3C,SAAQ;YACV,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAA;YAC7D,IAAI,GAAG,EAAE,CAAC;gBACR,MAAM,GAAG,CAAC,MAAM,EAAE,CAAA;YACpB,CAAC;QACH,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,UAAU,CAAC,CAAA;QAC/C,OAAO,MAAM,CAAC,OAAO,CAAA;IACvB,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,eAAe,CACnB,GAAW,EACX,QAAc;QAEd,OAAO,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAM,CAAA;IAC7D,CAAC;IAED;;;;;;;;;OASG;IACH,gBAAgB,CAAC,GAAW,EAAE,IAAY,EAAE,UAAkB;QAC5D,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;IACzC,CAAC;IAED;;;;;;OAMG;IACH,cAAc,CAAC,GAAW,EAAE,IAAY;QACtC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;IAChC,CAAC;IAED;;;;;;;;;OASG;IACH,aAAa,CAAC,GAAW,EAAE,IAAY;QACrC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAA;IACpC,CAAC;IAED;;;;;;OAMG;IACH,YAAY,CAAC,GAAW;QACtB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;IAC9B,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAA;IACxB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,MAAM;QACV,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAA;IACzB,CAAC;IAED;;;;;;;;;OASG;IACH,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,EAC1B,MAAM,EACN,OAAO,EAIR;QACC,MAAM,gBAAgB,CAAC,MAAM,EAAE,OAAO,IAAI,iBAAiB,EAAE,CAAC,CAAA;IAChE,CAAC;CACF;AAED;;;;;;;;;;GAUG;AACH,SAAS,YAAY,CACnB,OAAyC,EACzC,IAA0B;IAE1B,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAA;IACd,CAAC;IACD,IAAI,OAAO,CAAC,YAAY,KAAK,IAAI,CAAC,YAAY,EAAE,CAAC;QAC/C,OAAO,KAAK,CAAA;IACd,CAAC;IACD,MAAM,UAAU,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAChE,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAC1D,IAAI,UAAU,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;QACzC,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC,CAAA;AAC/D,CAAC"}
@@ -26,6 +26,7 @@
26
26
  import type { ZcapClient } from '@interop/ezcap';
27
27
  import type { IZcap } from '@interop/data-integrity-core';
28
28
  import { WasClient } from '@interop/was-client';
29
+ import type { CollectionEncryption } from '@interop/was-client';
29
30
  import type { WasCollectionConfig } from '../config.js';
30
31
  import type { ParsedGrants } from '../grants.js';
31
32
  /**
@@ -37,8 +38,10 @@ export interface MarkerResult {
37
38
  status?: number;
38
39
  error?: string;
39
40
  /**
40
- * True when no PUT was attempted because the collection is public
41
- * (plaintext); reported as `ok` since the goal state -- no marker -- holds.
41
+ * True when no PUT was attempted -- the collection is public (plaintext), or
42
+ * it already carries an `encryption` block (e.g. an epoch roster the wallet
43
+ * provisioned at consent time, which a bare-marker PUT must never clobber).
44
+ * Reported as `ok` since the goal state holds either way.
42
45
  */
43
46
  skipped?: boolean;
44
47
  }
@@ -91,6 +94,19 @@ export declare class WasRemoteStore {
91
94
  * @returns {IZcap | undefined}
92
95
  */
93
96
  collectionCapability(collectionId: string): IZcap | undefined;
97
+ /**
98
+ * Reads one collection's `encryption` marker from its Collection Description,
99
+ * invoked with that collection's delegated zcap. Returns the
100
+ * {@link CollectionEncryption} block (a multi-recipient marker carries key
101
+ * epochs) or `undefined` when the collection carries no marker. Non-fatal like
102
+ * the marker PUTs: returns `undefined` rather than throwing when no capability
103
+ * covers the collection or the read fails (offline, unauthorized), so a caller
104
+ * can fall back to its cached copy.
105
+ *
106
+ * @param collectionId {string} the WAS collection id
107
+ * @returns {Promise<CollectionEncryption | undefined>}
108
+ */
109
+ readCollectionEncryption(collectionId: string): Promise<CollectionEncryption | undefined>;
94
110
  /**
95
111
  * Best-effort declaration of the `{ encryption: { scheme: 'edv' } }` marker on
96
112
  * one collection, invoked with that collection's delegated RW zcap. Non-fatal:
@@ -100,6 +116,12 @@ export declare class WasRemoteStore {
100
116
  * collection is never marked (public implies plaintext): the PUT is skipped
101
117
  * and reported as `ok` + `skipped`.
102
118
  *
119
+ * A collection that ALREADY carries an `encryption` block is also skipped: the
120
+ * wallet provisions a multi-recipient epoch roster on the marker at consent
121
+ * time, and overwriting it with the bare `{ scheme: 'edv' }` marker would
122
+ * destroy that roster. The description is read first, so this method is a
123
+ * no-op fallback for servers/wallets that did not provision the roster.
124
+ *
103
125
  * @param collectionId {string} the WAS collection id
104
126
  * @returns {Promise<MarkerResult>}
105
127
  */
@@ -1 +1 @@
1
- {"version":3,"file":"wasRemoteStore.d.ts","sourceRoot":"","sources":["../../src/storage/wasRemoteStore.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAA;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAG/C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAEhD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAA;IACpB,EAAE,EAAE,OAAO,CAAA;IACX,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAA;IAClE,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,qBAAa,cAAc;;IACzB,SAAgB,GAAG,EAAE,SAAS,CAAA;IAC9B,SAAgB,SAAS,EAAE,MAAM,CAAA;IACjC,SAAgB,OAAO,EAAE,MAAM,CAAA;IAS/B,OAAO;IAmBP;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,UAAU,CAAC,EAChB,MAAM,EACN,UAAU,EACV,WAAgB,EACjB,EAAE;QACD,MAAM,EAAE,YAAY,CAAA;QACpB,UAAU,EAAE,UAAU,CAAA;QACtB,WAAW,CAAC,EAAE,mBAAmB,EAAE,CAAA;KACpC,GAAG,cAAc;IAqBlB;;;;;;;OAOG;IACH,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS;IAI7D;;;;;;;;;;;OAWG;IACG,uBAAuB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAU1E;;;;;;;;;;;;OAYG;IACG,wBAAwB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAe3E;;;;;;;;;;;;;;;;;;;OAmBG;IACG,yBAAyB,CAAC,EAC9B,YAAY,EACZ,MAAM,EACN,KAAK,EACL,MAAM,EACP,EAAE;QACD,YAAY,EAAE,MAAM,CAAA;QACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAC9B,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,MAAM,CAAC,EAAE,MAAM,CAAA;KAChB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAgE9B;;;;;;;;;;;;;;;;;OAiBG;IACH,YAAY,CAAC,EACX,YAAY,EACZ,EAAE,EACH,EAAE;QACD,YAAY,EAAE,MAAM,CAAA;QACpB,EAAE,EAAE,MAAM,CAAA;KACX,GAAG,MAAM;CAuDX"}
1
+ {"version":3,"file":"wasRemoteStore.d.ts","sourceRoot":"","sources":["../../src/storage/wasRemoteStore.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAA;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAC/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAG/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAEhD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAA;IACpB,EAAE,EAAE,OAAO,CAAA;IACX,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;;;OAKG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAA;IAClE,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,qBAAa,cAAc;;IACzB,SAAgB,GAAG,EAAE,SAAS,CAAA;IAC9B,SAAgB,SAAS,EAAE,MAAM,CAAA;IACjC,SAAgB,OAAO,EAAE,MAAM,CAAA;IAS/B,OAAO;IAmBP;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,UAAU,CAAC,EAChB,MAAM,EACN,UAAU,EACV,WAAgB,EACjB,EAAE;QACD,MAAM,EAAE,YAAY,CAAA;QACpB,UAAU,EAAE,UAAU,CAAA;QACtB,WAAW,CAAC,EAAE,mBAAmB,EAAE,CAAA;KACpC,GAAG,cAAc;IAqBlB;;;;;;;OAOG;IACH,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS;IAI7D;;;;;;;;;;;OAWG;IACG,wBAAwB,CAC5B,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC;IAmB5C;;;;;;;;;;;;;;;;;OAiBG;IACG,uBAAuB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAc1E;;;;;;;;;;;;OAYG;IACG,wBAAwB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAe3E;;;;;;;;;;;;;;;;;;;OAmBG;IACG,yBAAyB,CAAC,EAC9B,YAAY,EACZ,MAAM,EACN,KAAK,EACL,MAAM,EACP,EAAE;QACD,YAAY,EAAE,MAAM,CAAA;QACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAC9B,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,MAAM,CAAC,EAAE,MAAM,CAAA;KAChB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAgE9B;;;;;;;;;;;;;;;;;OAiBG;IACH,YAAY,CAAC,EACX,YAAY,EACZ,EAAE,EACH,EAAE;QACD,YAAY,EAAE,MAAM,CAAA;QACpB,EAAE,EAAE,MAAM,CAAA;KACX,GAAG,MAAM;CAuDX"}
@@ -55,6 +55,36 @@ export class WasRemoteStore {
55
55
  collectionCapability(collectionId) {
56
56
  return this.#byCollectionId[collectionId];
57
57
  }
58
+ /**
59
+ * Reads one collection's `encryption` marker from its Collection Description,
60
+ * invoked with that collection's delegated zcap. Returns the
61
+ * {@link CollectionEncryption} block (a multi-recipient marker carries key
62
+ * epochs) or `undefined` when the collection carries no marker. Non-fatal like
63
+ * the marker PUTs: returns `undefined` rather than throwing when no capability
64
+ * covers the collection or the read fails (offline, unauthorized), so a caller
65
+ * can fall back to its cached copy.
66
+ *
67
+ * @param collectionId {string} the WAS collection id
68
+ * @returns {Promise<CollectionEncryption | undefined>}
69
+ */
70
+ async readCollectionEncryption(collectionId) {
71
+ const capability = this.collectionCapability(collectionId);
72
+ if (!capability) {
73
+ return undefined;
74
+ }
75
+ try {
76
+ const response = await this.was.request({
77
+ capability,
78
+ path: `/space/${this.spaceId}/${collectionId}`,
79
+ method: 'GET'
80
+ });
81
+ const description = response.data;
82
+ return description?.encryption;
83
+ }
84
+ catch {
85
+ return undefined;
86
+ }
87
+ }
58
88
  /**
59
89
  * Best-effort declaration of the `{ encryption: { scheme: 'edv' } }` marker on
60
90
  * one collection, invoked with that collection's delegated RW zcap. Non-fatal:
@@ -64,6 +94,12 @@ export class WasRemoteStore {
64
94
  * collection is never marked (public implies plaintext): the PUT is skipped
65
95
  * and reported as `ok` + `skipped`.
66
96
  *
97
+ * A collection that ALREADY carries an `encryption` block is also skipped: the
98
+ * wallet provisions a multi-recipient epoch roster on the marker at consent
99
+ * time, and overwriting it with the bare `{ scheme: 'edv' }` marker would
100
+ * destroy that roster. The description is read first, so this method is a
101
+ * no-op fallback for servers/wallets that did not provision the roster.
102
+ *
67
103
  * @param collectionId {string} the WAS collection id
68
104
  * @returns {Promise<MarkerResult>}
69
105
  */
@@ -71,6 +107,10 @@ export class WasRemoteStore {
71
107
  if (this.#configById.get(collectionId)?.visibility === 'public') {
72
108
  return { collectionId, ok: true, skipped: true };
73
109
  }
110
+ const existing = await this.readCollectionEncryption(collectionId);
111
+ if (existing) {
112
+ return { collectionId, ok: true, skipped: true };
113
+ }
74
114
  return this.#putDescription({
75
115
  collectionId,
76
116
  description: { id: collectionId, encryption: { scheme: 'edv' } }
@@ -1 +1 @@
1
- {"version":3,"file":"wasRemoteStore.js","sourceRoot":"","sources":["../../src/storage/wasRemoteStore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wasRemoteStore.js","sourceRoot":"","sources":["../../src/storage/wasRemoteStore.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,7 @@
13
13
  */
14
14
  import type { ZcapClient } from '@interop/ezcap';
15
15
  import type { RxChangeEvent } from 'rxdb/plugins/core';
16
+ import type { CollectionEncryption } from '@interop/was-client';
16
17
  import type { SyncedDoc } from '../sync/index.js';
17
18
  import type { WasCollectionConfig } from '../config.js';
18
19
  import type { ParsedGrants } from '../grants.js';
@@ -33,9 +34,12 @@ import type { SyncController } from './syncController.js';
33
34
  * reactive patcher for pulled/conflict-resolved remote changes
34
35
  * @param [options.onAuthError] {() => void} fired when replication hits a
35
36
  * 401/403 (expired/revoked access) -- wired to the reconnect banner
37
+ * @param [options.onMarkersFetched] {(markers) => void | Promise<void>} given
38
+ * the freshly fetched per-collection encryption markers (by WAS collection
39
+ * id), to refresh the offline marker cache
36
40
  * @returns {Promise<WasRemoteStore>}
37
41
  */
38
- export declare function startWasSync({ parsed, zcapClient, collections, localStore, syncController, onRemoteChange, onAuthError }: {
42
+ export declare function startWasSync({ parsed, zcapClient, collections, localStore, syncController, onRemoteChange, onAuthError, onMarkersFetched }: {
39
43
  parsed: ParsedGrants;
40
44
  zcapClient: ZcapClient;
41
45
  collections: WasCollectionConfig[];
@@ -43,5 +47,6 @@ export declare function startWasSync({ parsed, zcapClient, collections, localSto
43
47
  syncController: SyncController;
44
48
  onRemoteChange: (collectionKey: string, event: RxChangeEvent<SyncedDoc>) => void;
45
49
  onAuthError?: () => void;
50
+ onMarkersFetched?: (markers: Record<string, CollectionEncryption>) => void | Promise<void>;
46
51
  }): Promise<WasRemoteStore>;
47
52
  //# sourceMappingURL=wasSync.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"wasSync.d.ts","sourceRoot":"","sources":["../../src/storage/wasSync.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEzD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,YAAY,CAAC,EACjC,MAAM,EACN,UAAU,EACV,WAAW,EACX,UAAU,EACV,cAAc,EACd,cAAc,EACd,WAAW,EACZ,EAAE;IACD,MAAM,EAAE,YAAY,CAAA;IACpB,UAAU,EAAE,UAAU,CAAA;IACtB,WAAW,EAAE,mBAAmB,EAAE,CAAA;IAClC,UAAU,EAAE,UAAU,CAAA;IACtB,cAAc,EAAE,cAAc,CAAA;IAC9B,cAAc,EAAE,CACd,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,aAAa,CAAC,SAAS,CAAC,KAC5B,IAAI,CAAA;IACT,WAAW,CAAC,EAAE,MAAM,IAAI,CAAA;CACzB,GAAG,OAAO,CAAC,cAAc,CAAC,CAqC1B"}
1
+ {"version":3,"file":"wasSync.d.ts","sourceRoot":"","sources":["../../src/storage/wasSync.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEzD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,YAAY,CAAC,EACjC,MAAM,EACN,UAAU,EACV,WAAW,EACX,UAAU,EACV,cAAc,EACd,cAAc,EACd,WAAW,EACX,gBAAgB,EACjB,EAAE;IACD,MAAM,EAAE,YAAY,CAAA;IACpB,UAAU,EAAE,UAAU,CAAA;IACtB,WAAW,EAAE,mBAAmB,EAAE,CAAA;IAClC,UAAU,EAAE,UAAU,CAAA;IACtB,cAAc,EAAE,cAAc,CAAA;IAC9B,cAAc,EAAE,CACd,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,aAAa,CAAC,SAAS,CAAC,KAC5B,IAAI,CAAA;IACT,WAAW,CAAC,EAAE,MAAM,IAAI,CAAA;IACxB,gBAAgB,CAAC,EAAE,CACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,KAC1C,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC1B,GAAG,OAAO,CAAC,cAAc,CAAC,CAkE1B"}
@@ -13,9 +13,12 @@ import { WasRemoteStore } from './wasRemoteStore.js';
13
13
  * reactive patcher for pulled/conflict-resolved remote changes
14
14
  * @param [options.onAuthError] {() => void} fired when replication hits a
15
15
  * 401/403 (expired/revoked access) -- wired to the reconnect banner
16
+ * @param [options.onMarkersFetched] {(markers) => void | Promise<void>} given
17
+ * the freshly fetched per-collection encryption markers (by WAS collection
18
+ * id), to refresh the offline marker cache
16
19
  * @returns {Promise<WasRemoteStore>}
17
20
  */
18
- export async function startWasSync({ parsed, zcapClient, collections, localStore, syncController, onRemoteChange, onAuthError }) {
21
+ export async function startWasSync({ parsed, zcapClient, collections, localStore, syncController, onRemoteChange, onAuthError, onMarkersFetched }) {
19
22
  const remoteStore = WasRemoteStore.fromGrants({
20
23
  parsed,
21
24
  zcapClient,
@@ -37,6 +40,29 @@ export async function startWasSync({ parsed, zcapClient, collections, localStore
37
40
  console.warn(`Indexes declaration PUT not authorized for "${collectionId}" (status ${indexes.status ?? 'n/a'}).`);
38
41
  }
39
42
  }));
43
+ // Fetch each granted private collection's encryption marker: rebuild that
44
+ // collection's cipher when its epoch roster differs from what the local store
45
+ // opened with (a wallet-side rotation, or first-ever epochs), and hand the
46
+ // fresh set to the marker-cache refresher so an offline session can rebuild
47
+ // its epoch-aware ciphers without a live read.
48
+ const privateIds = collections
49
+ .filter(collection => collection.visibility !== 'public')
50
+ .map(collection => collection.id)
51
+ .filter(id => parsed.byCollectionId[id] !== undefined);
52
+ const markers = {};
53
+ await Promise.all(privateIds.map(async (collectionId) => {
54
+ const encryption = await remoteStore.readCollectionEncryption(collectionId);
55
+ if (encryption) {
56
+ markers[collectionId] = encryption;
57
+ await localStore.applyRemoteMarker({ collectionId, encryption });
58
+ }
59
+ }));
60
+ // Install the one-shot epoch refresher so a decrypt that meets an unseen epoch
61
+ // (a rotation on another device) re-reads the marker and rebuilds the cipher.
62
+ localStore.setEpochRefresher(collectionId => remoteStore.readCollectionEncryption(collectionId));
63
+ if (onMarkersFetched) {
64
+ await onMarkersFetched(markers);
65
+ }
40
66
  await syncController.start({
41
67
  remoteStore,
42
68
  localStore,
@@ -1 +1 @@
1
- {"version":3,"file":"wasSync.js","sourceRoot":"","sources":["../../src/storage/wasSync.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAIpD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,EACjC,MAAM,EACN,UAAU,EACV,WAAW,EACX,UAAU,EACV,cAAc,EACd,cAAc,EACd,WAAW,EAYZ;IACC,MAAM,WAAW,GAAG,cAAc,CAAC,UAAU,CAAC;QAC5C,MAAM;QACN,UAAU;QACV,WAAW;KACZ,CAAC,CAAA;IAEF,2EAA2E;IAC3E,2EAA2E;IAC3E,0EAA0E;IAC1E,2EAA2E;IAC3E,yEAAyE;IACzE,iDAAiD;IACjD,MAAM,OAAO,CAAC,GAAG,CACf,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,KAAK,EAAC,YAAY,EAAC,EAAE;QAC1D,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,uBAAuB,CAAC,YAAY,CAAC,CAAA;QACtE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CACV,6CAA6C,YAAY,aAAa,MAAM,CAAC,MAAM,IAAI,KAAK,IAAI,CACjG,CAAA;QACH,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,wBAAwB,CAAC,YAAY,CAAC,CAAA;QACxE,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CACV,+CAA+C,YAAY,aAAa,OAAO,CAAC,MAAM,IAAI,KAAK,IAAI,CACpG,CAAA;QACH,CAAC;IACH,CAAC,CAAC,CACH,CAAA;IAED,MAAM,cAAc,CAAC,KAAK,CAAC;QACzB,WAAW;QACX,UAAU;QACV,cAAc;QACd,GAAG,CAAC,WAAW,IAAI,EAAE,WAAW,EAAE,CAAC;KACpC,CAAC,CAAA;IACF,OAAO,WAAW,CAAA;AACpB,CAAC"}
1
+ {"version":3,"file":"wasSync.js","sourceRoot":"","sources":["../../src/storage/wasSync.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAIpD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,EACjC,MAAM,EACN,UAAU,EACV,WAAW,EACX,UAAU,EACV,cAAc,EACd,cAAc,EACd,WAAW,EACX,gBAAgB,EAejB;IACC,MAAM,WAAW,GAAG,cAAc,CAAC,UAAU,CAAC;QAC5C,MAAM;QACN,UAAU;QACV,WAAW;KACZ,CAAC,CAAA;IAEF,2EAA2E;IAC3E,2EAA2E;IAC3E,0EAA0E;IAC1E,2EAA2E;IAC3E,yEAAyE;IACzE,iDAAiD;IACjD,MAAM,OAAO,CAAC,GAAG,CACf,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,KAAK,EAAC,YAAY,EAAC,EAAE;QAC1D,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,uBAAuB,CAAC,YAAY,CAAC,CAAA;QACtE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CACV,6CAA6C,YAAY,aAAa,MAAM,CAAC,MAAM,IAAI,KAAK,IAAI,CACjG,CAAA;QACH,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,wBAAwB,CAAC,YAAY,CAAC,CAAA;QACxE,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CACV,+CAA+C,YAAY,aAAa,OAAO,CAAC,MAAM,IAAI,KAAK,IAAI,CACpG,CAAA;QACH,CAAC;IACH,CAAC,CAAC,CACH,CAAA;IAED,0EAA0E;IAC1E,8EAA8E;IAC9E,2EAA2E;IAC3E,4EAA4E;IAC5E,+CAA+C;IAC/C,MAAM,UAAU,GAAG,WAAW;SAC3B,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,KAAK,QAAQ,CAAC;SACxD,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;SAChC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,KAAK,SAAS,CAAC,CAAA;IACxD,MAAM,OAAO,GAAyC,EAAE,CAAA;IACxD,MAAM,OAAO,CAAC,GAAG,CACf,UAAU,CAAC,GAAG,CAAC,KAAK,EAAC,YAAY,EAAC,EAAE;QAClC,MAAM,UAAU,GACd,MAAM,WAAW,CAAC,wBAAwB,CAAC,YAAY,CAAC,CAAA;QAC1D,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,CAAC,YAAY,CAAC,GAAG,UAAU,CAAA;YAClC,MAAM,UAAU,CAAC,iBAAiB,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,CAAA;QAClE,CAAC;IACH,CAAC,CAAC,CACH,CAAA;IACD,+EAA+E;IAC/E,8EAA8E;IAC9E,UAAU,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE,CAC1C,WAAW,CAAC,wBAAwB,CAAC,YAAY,CAAC,CACnD,CAAA;IACD,IAAI,gBAAgB,EAAE,CAAC;QACrB,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAA;IACjC,CAAC;IAED,MAAM,cAAc,CAAC,KAAK,CAAC;QACzB,WAAW;QACX,UAAU;QACV,cAAc;QACd,GAAG,CAAC,WAAW,IAAI,EAAE,WAAW,EAAE,CAAC;KACpC,CAAC,CAAA;IACF,OAAO,WAAW,CAAA;AACpB,CAAC"}