@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.
- package/README.md +84 -11
- package/dist/auth/loginFlow.d.ts +6 -0
- package/dist/auth/loginFlow.d.ts.map +1 -1
- package/dist/auth/loginFlow.js +28 -9
- package/dist/auth/loginFlow.js.map +1 -1
- package/dist/auth/loginRequest.d.ts +22 -1
- package/dist/auth/loginRequest.d.ts.map +1 -1
- package/dist/auth/loginRequest.js +17 -1
- package/dist/auth/loginRequest.js.map +1 -1
- package/dist/config.d.ts +51 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +0 -0
- package/dist/config.js.map +1 -1
- package/dist/identity/agents.d.ts +38 -11
- package/dist/identity/agents.d.ts.map +1 -1
- package/dist/identity/agents.js +35 -11
- package/dist/identity/agents.js.map +1 -1
- package/dist/identity/initAppSession.d.ts +6 -6
- package/dist/identity/initAppSession.js +6 -6
- package/dist/identity/seedCredential.d.ts +29 -5
- package/dist/identity/seedCredential.d.ts.map +1 -1
- package/dist/identity/seedCredential.js +47 -11
- package/dist/identity/seedCredential.js.map +1 -1
- package/dist/identity/seedStore.d.ts +11 -1
- package/dist/identity/seedStore.d.ts.map +1 -1
- package/dist/identity/seedStore.js +9 -0
- package/dist/identity/seedStore.js.map +1 -1
- package/dist/index.d.ts +7 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -6
- package/dist/index.js.map +1 -1
- package/dist/react/hooks.d.ts +12 -0
- package/dist/react/hooks.d.ts.map +1 -1
- package/dist/react/hooks.js +14 -0
- package/dist/react/hooks.js.map +1 -1
- package/dist/react/index.d.ts +1 -1
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +1 -1
- package/dist/react/index.js.map +1 -1
- package/dist/session/authStore.d.ts +9 -0
- package/dist/session/authStore.d.ts.map +1 -1
- package/dist/session/authStore.js +73 -18
- package/dist/session/authStore.js.map +1 -1
- package/dist/storage/adopt.js +2 -2
- package/dist/storage/localStore.d.ts +73 -11
- package/dist/storage/localStore.d.ts.map +1 -1
- package/dist/storage/localStore.js +187 -30
- package/dist/storage/localStore.js.map +1 -1
- package/dist/storage/sharedCollectionReader.d.ts +95 -0
- package/dist/storage/sharedCollectionReader.d.ts.map +1 -0
- package/dist/storage/sharedCollectionReader.js +338 -0
- package/dist/storage/sharedCollectionReader.js.map +1 -0
- package/dist/storage/wasRemoteStore.d.ts +24 -2
- package/dist/storage/wasRemoteStore.d.ts.map +1 -1
- package/dist/storage/wasRemoteStore.js +40 -0
- package/dist/storage/wasRemoteStore.js.map +1 -1
- package/dist/storage/wasSync.d.ts +42 -5
- package/dist/storage/wasSync.d.ts.map +1 -1
- package/dist/storage/wasSync.js +71 -5
- package/dist/storage/wasSync.js.map +1 -1
- package/dist/sync/docCipher.d.ts +19 -3
- package/dist/sync/docCipher.d.ts.map +1 -1
- package/dist/sync/docCipher.js +24 -59
- package/dist/sync/docCipher.js.map +1 -1
- 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
|
|
51
|
-
*
|
|
52
|
-
* the pass-through plaintext codec (public collections) and
|
|
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
|
-
|
|
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:
|
|
70
|
-
* the
|
|
71
|
-
*
|
|
72
|
-
*
|
|
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.
|
|
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({
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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.#
|
|
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"}
|