@interop/was-react 0.3.6 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/README.md +84 -11
  2. package/dist/auth/loginFlow.d.ts +6 -0
  3. package/dist/auth/loginFlow.d.ts.map +1 -1
  4. package/dist/auth/loginFlow.js +28 -9
  5. package/dist/auth/loginFlow.js.map +1 -1
  6. package/dist/auth/loginRequest.d.ts +22 -1
  7. package/dist/auth/loginRequest.d.ts.map +1 -1
  8. package/dist/auth/loginRequest.js +17 -1
  9. package/dist/auth/loginRequest.js.map +1 -1
  10. package/dist/config.d.ts +51 -0
  11. package/dist/config.d.ts.map +1 -1
  12. package/dist/config.js +0 -0
  13. package/dist/config.js.map +1 -1
  14. package/dist/identity/agents.d.ts +38 -11
  15. package/dist/identity/agents.d.ts.map +1 -1
  16. package/dist/identity/agents.js +35 -11
  17. package/dist/identity/agents.js.map +1 -1
  18. package/dist/identity/initAppSession.d.ts +6 -6
  19. package/dist/identity/initAppSession.js +6 -6
  20. package/dist/identity/seedCredential.d.ts +29 -5
  21. package/dist/identity/seedCredential.d.ts.map +1 -1
  22. package/dist/identity/seedCredential.js +47 -11
  23. package/dist/identity/seedCredential.js.map +1 -1
  24. package/dist/identity/seedStore.d.ts +11 -1
  25. package/dist/identity/seedStore.d.ts.map +1 -1
  26. package/dist/identity/seedStore.js +9 -0
  27. package/dist/identity/seedStore.js.map +1 -1
  28. package/dist/index.d.ts +7 -6
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +8 -6
  31. package/dist/index.js.map +1 -1
  32. package/dist/react/hooks.d.ts +12 -0
  33. package/dist/react/hooks.d.ts.map +1 -1
  34. package/dist/react/hooks.js +14 -0
  35. package/dist/react/hooks.js.map +1 -1
  36. package/dist/react/index.d.ts +1 -1
  37. package/dist/react/index.d.ts.map +1 -1
  38. package/dist/react/index.js +1 -1
  39. package/dist/react/index.js.map +1 -1
  40. package/dist/session/authStore.d.ts +9 -0
  41. package/dist/session/authStore.d.ts.map +1 -1
  42. package/dist/session/authStore.js +73 -18
  43. package/dist/session/authStore.js.map +1 -1
  44. package/dist/storage/adopt.js +2 -2
  45. package/dist/storage/localStore.d.ts +73 -11
  46. package/dist/storage/localStore.d.ts.map +1 -1
  47. package/dist/storage/localStore.js +187 -30
  48. package/dist/storage/localStore.js.map +1 -1
  49. package/dist/storage/sharedCollectionReader.d.ts +95 -0
  50. package/dist/storage/sharedCollectionReader.d.ts.map +1 -0
  51. package/dist/storage/sharedCollectionReader.js +338 -0
  52. package/dist/storage/sharedCollectionReader.js.map +1 -0
  53. package/dist/storage/wasRemoteStore.d.ts +24 -2
  54. package/dist/storage/wasRemoteStore.d.ts.map +1 -1
  55. package/dist/storage/wasRemoteStore.js +40 -0
  56. package/dist/storage/wasRemoteStore.js.map +1 -1
  57. package/dist/storage/wasSync.d.ts +42 -5
  58. package/dist/storage/wasSync.d.ts.map +1 -1
  59. package/dist/storage/wasSync.js +71 -5
  60. package/dist/storage/wasSync.js.map +1 -1
  61. package/dist/sync/docCipher.d.ts +19 -3
  62. package/dist/sync/docCipher.d.ts.map +1 -1
  63. package/dist/sync/docCipher.js +24 -59
  64. package/dist/sync/docCipher.js.map +1 -1
  65. package/package.json +5 -5
@@ -26,9 +26,9 @@
26
26
  */
27
27
  import { createRxDatabase, removeRxDatabase } from 'rxdb/plugins/core';
28
28
  import { getRxStorageDexie } from 'rxdb/plugins/storage-dexie';
29
- import { DEFAULT_DB_NAME, validateCollections } from '../config.js';
29
+ import { DEFAULT_DB_NAME, validateCollections, validateSharedCollections } from '../config.js';
30
+ import { UnknownEpochError } from '@interop/was-client/edv';
30
31
  import { syncedDocSchema, createDocCipher, createPlaintextDocCodec, makeLwwConflictHandler, remotePayloadWins } from '../sync/index.js';
31
- import { deriveCollectionKeys } from '../identity/agents.js';
32
32
  /**
33
33
  * A stable, RxDB-safe database name per controller DID (FNV-1a hex), so two
34
34
  * wallet users on one browser never collide on the same local database.
@@ -47,9 +47,10 @@ export function dbNameForController({ dbName, controllerDid }) {
47
47
  return `${dbName}-${hash.toString(16).padStart(8, '0')}`;
48
48
  }
49
49
  /**
50
- * The local store. Construct via {@link LocalStore.init}, which derives the
51
- * per-collection ciphers from the master seed (private collections) or wires
52
- * the pass-through plaintext codec (public collections) and opens RxDB.
50
+ * The local store. Construct via {@link LocalStore.init}, which builds each
51
+ * collection's cipher -- an EDV cipher on the app's identity KAK (private
52
+ * collections) or the pass-through plaintext codec (public collections) -- and
53
+ * opens RxDB.
53
54
  */
54
55
  export class LocalStore {
55
56
  #db;
@@ -58,31 +59,67 @@ 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 app's identity KAK and its resolver: the ONE key material every
63
+ // private collection's cipher is built on, kept so a cipher can be rebuilt
64
+ // when its epoch marker changes (a wallet-side rotation).
65
+ #keyAgreementKey;
66
+ #keyResolver;
67
+ // The encryption marker each private collection's current cipher was built
68
+ // from (keyed by collection logical key), so a marker change can be detected.
69
+ #markers;
70
+ // Fetches a private collection's fresh encryption marker (by WAS collection
71
+ // id) when a decrypt meets an unknown key epoch; injected once a remote store
72
+ // exists. Absent offline / local-only.
73
+ #epochRefresher;
74
+ constructor({ db, collections, ciphers, configs, keyAgreementKey, keyResolver, markers }) {
62
75
  this.#db = db;
63
76
  this.#collections = collections;
64
77
  this.#ciphers = ciphers;
65
78
  this.#configs = configs;
66
79
  this.#index = {};
80
+ this.#keyAgreementKey = keyAgreementKey;
81
+ this.#keyResolver = keyResolver;
82
+ this.#markers = markers;
67
83
  }
68
84
  /**
69
- * Opens (or creates) the store: derives a per-collection KAK + cipher from
70
- * the master seed for each PRIVATE collection (a PUBLIC collection skips key
71
- * derivation entirely and gets the pass-through plaintext codec) and opens
72
- * one RxDB collection per entity.
85
+ * Opens (or creates) the store: builds one cipher per PRIVATE collection on
86
+ * the app's identity KAK (a PUBLIC collection gets the pass-through plaintext
87
+ * codec instead) and opens one RxDB collection per entity. The key material
88
+ * is derived ONCE, by the caller, and shared by every private collection: an
89
+ * epoch-roster recipient is always the X25519 twin of a controller did:key.
90
+ *
91
+ * When `markers` carries an encryption marker for a private collection (from
92
+ * the offline marker cache), that collection's cipher is built epoch-aware so
93
+ * a multi-recipient envelope decrypts before any live description read; a
94
+ * collection with no cached marker keeps the single-key behavior.
73
95
  *
74
96
  * @param options {object}
75
- * @param options.seed {Uint8Array} the 32-byte master seed
97
+ * @param options.keyAgreementKey {IKeyAgreementKey} the app's identity KAK
98
+ * (`IdentityAgents.keyAgreementKey`)
99
+ * @param options.keyResolver {IKeyResolver} its one-key resolver
100
+ * (`IdentityAgents.keyResolver`)
76
101
  * @param options.collections {WasCollectionConfig[]} the collection registry
77
102
  * (logical key to WAS collection id)
103
+ * @param [options.sharedCollections] {SharedCollectionConfig[]} the shared
104
+ * (read-only, wallet-owned) registry. Nothing is opened for these -- they
105
+ * have no local replica -- but they are validated against the app-owned
106
+ * registry here, before any replica exists
107
+ * @param [options.markers] {Record<string, CollectionEncryption>} cached
108
+ * encryption markers keyed by WAS collection id (from the offline cache)
78
109
  * @param [options.storage] {RxStorage<unknown, unknown>} defaults to
79
110
  * Dexie/IndexedDB; injectable for tests
80
111
  * @param [options.dbName] {string} defaults to {@link DEFAULT_DB_NAME}
81
112
  * @returns {Promise<LocalStore>}
82
113
  */
83
- static async init({ seed, collections, storage, dbName = DEFAULT_DB_NAME }) {
114
+ static async init({ keyAgreementKey, keyResolver, collections, sharedCollections, markers = {}, storage, dbName = DEFAULT_DB_NAME }) {
84
115
  validateCollections(collections);
116
+ validateSharedCollections({
117
+ collections,
118
+ ...(sharedCollections && { sharedCollections })
119
+ });
85
120
  const ciphers = {};
121
+ // The marker each private cipher was built from, keyed by logical key.
122
+ const builtMarkers = {};
86
123
  for (const { key, id, visibility } of collections) {
87
124
  // A public collection is stored plaintext: no key derivation, no EDV
88
125
  // cipher -- just the pass-through codec behind the same seam.
@@ -90,15 +127,14 @@ export class LocalStore {
90
127
  ciphers[key] = createPlaintextDocCodec({ collectionId: id });
91
128
  continue;
92
129
  }
93
- const { keyAgreementKey, keyResolver } = await deriveCollectionKeys({
94
- seed,
95
- collectionId: id
96
- });
130
+ const encryption = markers[id];
97
131
  ciphers[key] = await createDocCipher({
98
132
  keyAgreementKey,
99
133
  keyResolver,
100
- collectionId: id
134
+ collectionId: id,
135
+ ...(encryption && { encryption })
101
136
  });
137
+ builtMarkers[key] = encryption;
102
138
  }
103
139
  const db = await createRxDatabase({
104
140
  name: dbName,
@@ -115,15 +151,24 @@ export class LocalStore {
115
151
  // On a public collection the codec is pass-through, so the handler reads
116
152
  // those fields directly off the plaintext payload.
117
153
  const collectionsConfig = Object.fromEntries(collections.map(({ key }) => {
118
- const cipher = ciphers[key];
119
- if (!cipher) {
154
+ if (!ciphers[key]) {
120
155
  throw new Error(`No cipher for collection "${key}".`);
121
156
  }
122
157
  return [
123
158
  key,
124
159
  {
125
160
  schema: syncedDocSchema(),
126
- conflictHandler: makeLwwConflictHandler(envelope => cipher.decrypt({ envelope }))
161
+ // Reads the CURRENT cipher for this key at decrypt time (not a
162
+ // captured reference), so a `rebuildCipher` after a marker change
163
+ // takes effect here too. `ciphers` is the same object the instance
164
+ // holds as `#ciphers`, so the swap is visible.
165
+ conflictHandler: makeLwwConflictHandler(envelope => {
166
+ const cipher = ciphers[key];
167
+ if (!cipher) {
168
+ throw new Error(`No cipher for collection "${key}".`);
169
+ }
170
+ return cipher.decrypt({ envelope });
171
+ })
127
172
  }
128
173
  ];
129
174
  }));
@@ -132,7 +177,10 @@ export class LocalStore {
132
177
  db,
133
178
  collections: collectionsMap,
134
179
  ciphers,
135
- configs: Object.fromEntries(collections.map(entry => [entry.key, entry]))
180
+ configs: Object.fromEntries(collections.map(entry => [entry.key, entry])),
181
+ keyAgreementKey,
182
+ keyResolver,
183
+ markers: builtMarkers
136
184
  });
137
185
  }
138
186
  #collection(key) {
@@ -164,6 +212,95 @@ export class LocalStore {
164
212
  }
165
213
  return cipher;
166
214
  }
215
+ /**
216
+ * Installs the epoch-marker refresher: given a WAS collection id, it fetches
217
+ * that collection's fresh encryption marker (a live description read). Called
218
+ * once a remote store exists; a decrypt that meets an unknown key epoch uses
219
+ * it to re-read the marker and rebuild the cipher exactly once.
220
+ *
221
+ * @param refresher {(collectionId: string) => Promise<CollectionEncryption | undefined>}
222
+ * @returns {void}
223
+ */
224
+ setEpochRefresher(refresher) {
225
+ this.#epochRefresher = refresher;
226
+ }
227
+ /**
228
+ * Decrypts an at-rest envelope through the collection's cipher, with a
229
+ * one-shot recovery from a stale epoch marker: when the cipher throws
230
+ * {@link UnknownEpochError} (an envelope written under an epoch this device has
231
+ * not seen -- a rekey on another device / a wallet revoke-rotation) and a
232
+ * refresher is installed, re-read the marker, rebuild the cipher, and retry
233
+ * the decrypt once. A second failure propagates rather than looping.
234
+ */
235
+ async #decryptWithRefresh(key, envelope) {
236
+ try {
237
+ return await this.#cipher(key).decrypt({ envelope });
238
+ }
239
+ catch (err) {
240
+ if (!(err instanceof UnknownEpochError) || !this.#epochRefresher) {
241
+ throw err;
242
+ }
243
+ const { id } = this.collectionConfig(key);
244
+ const encryption = await this.#epochRefresher(id);
245
+ if (!encryption) {
246
+ throw err;
247
+ }
248
+ await this.rebuildCipher({ key, encryption });
249
+ // One retry only: a repeat UnknownEpochError propagates (no loop).
250
+ return await this.#cipher(key).decrypt({ envelope });
251
+ }
252
+ }
253
+ /**
254
+ * Rebuilds one private collection's cipher from a new encryption marker, on
255
+ * the same identity KAK the store was opened with. A public (plaintext)
256
+ * collection has no EDV cipher and is a no-op. The new cipher replaces the
257
+ * held one in place, so the conflict handler and every read path pick it up.
258
+ *
259
+ * @param options {object}
260
+ * @param options.key {string} the collection logical key
261
+ * @param options.encryption {CollectionEncryption} the new marker
262
+ * @returns {Promise<void>}
263
+ */
264
+ async rebuildCipher({ key, encryption }) {
265
+ const config = this.collectionConfig(key);
266
+ if (config.visibility === 'public') {
267
+ return;
268
+ }
269
+ this.#ciphers[key] = await createDocCipher({
270
+ keyAgreementKey: this.#keyAgreementKey,
271
+ keyResolver: this.#keyResolver,
272
+ collectionId: config.id,
273
+ encryption
274
+ });
275
+ this.#markers[key] = encryption;
276
+ }
277
+ /**
278
+ * Applies a freshly fetched remote encryption marker (by WAS collection id):
279
+ * rebuilds that collection's cipher when the marker's current epoch differs
280
+ * from the one the current cipher was built from (a wallet-side rotation, or
281
+ * first-ever epochs), so subsequent writes stamp the current epoch. Returns
282
+ * whether a rebuild happened. Unknown / public collections are ignored.
283
+ *
284
+ * @param options {object}
285
+ * @param options.collectionId {string} the WAS collection id
286
+ * @param options.encryption {CollectionEncryption} the fetched marker
287
+ * @returns {Promise<boolean>}
288
+ */
289
+ async applyRemoteMarker({ collectionId, encryption }) {
290
+ const entry = Object.entries(this.#configs).find(([, config]) => config.id === collectionId);
291
+ if (!entry) {
292
+ return false;
293
+ }
294
+ const [key, config] = entry;
295
+ if (config.visibility === 'public') {
296
+ return false;
297
+ }
298
+ if (markersEqual(this.#markers[key], encryption)) {
299
+ return false;
300
+ }
301
+ await this.rebuildCipher({ key, encryption });
302
+ return true;
303
+ }
167
304
  /**
168
305
  * Builds (or rebuilds) the `uuid -> envelopeId` index for one collection by
169
306
  * decrypting every live row. Returns the index map.
@@ -174,7 +311,6 @@ export class LocalStore {
174
311
  return existing;
175
312
  }
176
313
  const index = new Map();
177
- const cipher = this.#cipher(key);
178
314
  const docs = await this.#collection(key).find().exec();
179
315
  // Decrypt rows concurrently: index building has no ordering dependency, so
180
316
  // serializing the per-row WebCrypto work would only stall the unlock path.
@@ -183,9 +319,7 @@ export class LocalStore {
183
319
  if (data === undefined) {
184
320
  return null;
185
321
  }
186
- const payload = (await cipher.decrypt({
187
- envelope: data
188
- }));
322
+ const payload = (await this.#decryptWithRefresh(key, data));
189
323
  return { envelopeId, uuid: payload.id };
190
324
  }));
191
325
  for (const entry of entries) {
@@ -320,7 +454,6 @@ export class LocalStore {
320
454
  * @returns {Promise<T[]>}
321
455
  */
322
456
  async listEntities(key) {
323
- const cipher = this.#cipher(key);
324
457
  const index = new Map();
325
458
  const docs = await this.#collection(key).find().exec();
326
459
  // Decrypt every row concurrently (the unlock hot path): the store is keyed
@@ -331,7 +464,7 @@ export class LocalStore {
331
464
  if (data === undefined) {
332
465
  return null;
333
466
  }
334
- const payload = (await cipher.decrypt({ envelope: data }));
467
+ const payload = (await this.#decryptWithRefresh(key, data));
335
468
  return { envelopeId, payload };
336
469
  }));
337
470
  const payloads = [];
@@ -359,7 +492,6 @@ export class LocalStore {
359
492
  * @returns {Promise<T | null>}
360
493
  */
361
494
  async hydrateSingleton(key) {
362
- const cipher = this.#cipher(key);
363
495
  const collection = this.#collection(key);
364
496
  const rows = await collection.find().exec();
365
497
  const decoded = [];
@@ -368,7 +500,7 @@ export class LocalStore {
368
500
  if (data === undefined) {
369
501
  continue;
370
502
  }
371
- const payload = (await cipher.decrypt({ envelope: data }));
503
+ const payload = (await this.#decryptWithRefresh(key, data));
372
504
  decoded.push({ envelopeId, payload });
373
505
  }
374
506
  const index = new Map();
@@ -407,7 +539,7 @@ export class LocalStore {
407
539
  * @returns {Promise<T>}
408
540
  */
409
541
  async decryptEnvelope(key, envelope) {
410
- return (await this.#cipher(key).decrypt({ envelope }));
542
+ return (await this.#decryptWithRefresh(key, envelope));
411
543
  }
412
544
  /**
413
545
  * Records a `uuid -> envelopeId` mapping for a remotely-pulled row so a
@@ -486,4 +618,29 @@ export class LocalStore {
486
618
  await removeRxDatabase(dbName, storage ?? getRxStorageDexie());
487
619
  }
488
620
  }
621
+ /**
622
+ * Whether two encryption markers select the same writing epoch: same
623
+ * `currentEpoch` and the same ordered epoch id list. That is all a cipher rebuild
624
+ * turns on -- rotation only appends epochs and moves `currentEpoch` -- so a
625
+ * marker that matches on both needs no rebuild. A cached `undefined` (no marker
626
+ * built) never equals a real marker, so first-ever epochs always rebuild.
627
+ *
628
+ * @param current {CollectionEncryption | undefined}
629
+ * @param next {CollectionEncryption}
630
+ * @returns {boolean}
631
+ */
632
+ function markersEqual(current, next) {
633
+ if (current === undefined) {
634
+ return false;
635
+ }
636
+ if (current.currentEpoch !== next.currentEpoch) {
637
+ return false;
638
+ }
639
+ const currentIds = (current.epochs ?? []).map(epoch => epoch.id);
640
+ const nextIds = (next.epochs ?? []).map(epoch => epoch.id);
641
+ if (currentIds.length !== nextIds.length) {
642
+ return false;
643
+ }
644
+ return currentIds.every((id, index) => id === nextIds[index]);
645
+ }
489
646
  //# 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":"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"}
@@ -0,0 +1,95 @@
1
+ import type { IKeyAgreementKey, IKeyResolver } from '@interop/data-integrity-core';
2
+ import { type Json } from '../sync/index.js';
3
+ import type { WasRemoteStore } from './wasRemoteStore.js';
4
+ /**
5
+ * Default page size for the `changes`-feed walk. The server clamps its own
6
+ * maximum, and a page shorter than what was asked for is the feed's end-of-walk
7
+ * signal. Lower it on a collection of large envelopes to bound per-response
8
+ * size.
9
+ */
10
+ export declare const SHARED_CHANGES_PAGE_SIZE = 100;
11
+ /**
12
+ * One decrypted resource of a shared collection: the WAS resource id (the
13
+ * envelope id, opaque) and its decrypted payload.
14
+ */
15
+ export interface SharedResource {
16
+ id: string;
17
+ data: Json;
18
+ }
19
+ /**
20
+ * Thrown when a shared collection cannot be opened for reading: it carries no
21
+ * multi-recipient key-epoch roster, or this app is not a recipient of any epoch
22
+ * on it (the wallet never shared it, or a later un-share rotated the epoch off
23
+ * this app's key).
24
+ */
25
+ export declare class SharedCollectionUnavailableError extends Error {
26
+ constructor(message: string, options?: {
27
+ cause?: unknown;
28
+ });
29
+ }
30
+ export declare class SharedCollectionReader {
31
+ #private;
32
+ readonly collectionId: string;
33
+ private constructor();
34
+ /**
35
+ * Opens a reader over one shared collection: reads its `encryption` marker
36
+ * through the delegated zcap and builds the epoch-aware cipher from it.
37
+ *
38
+ * Throws {@link SharedCollectionUnavailableError} when the collection carries
39
+ * no marker or a marker with no key epochs (it is not multi-recipient, so this
40
+ * app cannot be a recipient of it), and likewise when the cipher cannot unwrap
41
+ * any epoch (this app is not, or is no longer, in the roster).
42
+ *
43
+ * @param options {object}
44
+ * @param options.remoteStore {WasRemoteStore} the delegated remote store
45
+ * @param options.keyAgreementKey {IKeyAgreementKey} this app's IDENTITY KAK
46
+ * @param options.keyResolver {IKeyResolver} its one-key resolver
47
+ * @param options.collectionId {string} the WAS collection id
48
+ * @param [options.pageSize] {number} `changes`-feed page size (defaults to
49
+ * {@link SHARED_CHANGES_PAGE_SIZE})
50
+ * @returns {Promise<SharedCollectionReader>}
51
+ */
52
+ static open({ remoteStore, keyAgreementKey, keyResolver, collectionId, pageSize }: {
53
+ remoteStore: WasRemoteStore;
54
+ keyAgreementKey: IKeyAgreementKey;
55
+ keyResolver: IKeyResolver;
56
+ collectionId: string;
57
+ pageSize?: number;
58
+ }): Promise<SharedCollectionReader>;
59
+ /**
60
+ * Lists the LIVE resources of the shared collection, decrypted. A body that is
61
+ * not an EDV envelope, or one sealed before the collection's first share (a
62
+ * single-recipient envelope this app is not a recipient of), is SKIPPED with a
63
+ * warning rather than failing the whole listing.
64
+ *
65
+ * Two paths, same result. The fast path pages the `changes` feed
66
+ * ({@link SharedCollectionReader.listViaChanges}), which returns whole pages of
67
+ * documents WITH their bodies -- and on an encrypted collection those bodies
68
+ * are exactly the opaque EDV envelopes wanted here, since the feed does not
69
+ * decrypt. That is one round trip per PAGE rather than the one per RESOURCE a
70
+ * listing plus a `get` each would cost, which on a wallet's
71
+ * `private-credentials` or `contacts` is the difference between a handful of
72
+ * requests and one per credential. It is also the same primitive replication
73
+ * pulls with.
74
+ *
75
+ * The slow path ({@link SharedCollectionReader.listViaResources}) is the
76
+ * fallback for a backend that does not advertise the `changes-query` feature
77
+ * (it answers 501, surfaced as `NotImplementedError`): list the resource
78
+ * summaries, then fetch each body. Taken only on that specific error, and
79
+ * warned about once per reader.
80
+ *
81
+ * @returns {Promise<SharedResource[]>}
82
+ */
83
+ list(): Promise<SharedResource[]>;
84
+ /**
85
+ * Reads and decrypts one resource of the shared collection by its WAS
86
+ * resource id. Returns `undefined` for a missing resource, a body that is not
87
+ * an EDV envelope, or a pre-share envelope this app cannot decrypt (each
88
+ * warned about, distinguishably).
89
+ *
90
+ * @param resourceId {string} the WAS resource id
91
+ * @returns {Promise<Json | undefined>}
92
+ */
93
+ get(resourceId: string): Promise<Json | undefined>;
94
+ }
95
+ //# sourceMappingURL=sharedCollectionReader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sharedCollectionReader.d.ts","sourceRoot":"","sources":["../../src/storage/sharedCollectionReader.ts"],"names":[],"mappings":"AAqCA,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACb,MAAM,8BAA8B,CAAA;AAErC,OAAO,EAKL,KAAK,IAAI,EACV,MAAM,kBAAkB,CAAA;AACzB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEzD;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,MAAM,CAAA;AAU3C;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,IAAI,CAAA;CACX;AAED;;;;;GAKG;AACH,qBAAa,gCAAiC,SAAQ,KAAK;gBAC7C,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAI3D;AAED,qBAAa,sBAAsB;;IACjC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAe7B,OAAO;IAuBP;;;;;;;;;;;;;;;;;OAiBG;WACU,IAAI,CAAC,EAChB,WAAW,EACX,eAAe,EACf,WAAW,EACX,YAAY,EACZ,QAAmC,EACpC,EAAE;QACD,WAAW,EAAE,cAAc,CAAA;QAC3B,eAAe,EAAE,gBAAgB,CAAA;QACjC,WAAW,EAAE,YAAY,CAAA;QACzB,YAAY,EAAE,MAAM,CAAA;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAkBnC;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACG,IAAI,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IA4EvC;;;;;;;;OAQG;IACG,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;CAgGzD"}