@interop/was-client 0.14.0 → 0.14.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Collection.d.ts +58 -0
- package/dist/Collection.d.ts.map +1 -1
- package/dist/Collection.js +106 -13
- package/dist/Collection.js.map +1 -1
- package/dist/Resource.d.ts +8 -0
- package/dist/Resource.d.ts.map +1 -1
- package/dist/Resource.js +52 -34
- package/dist/Resource.js.map +1 -1
- package/dist/Space.d.ts +15 -1
- package/dist/Space.d.ts.map +1 -1
- package/dist/Space.js +25 -2
- package/dist/Space.js.map +1 -1
- package/dist/WasClient.d.ts +1 -0
- package/dist/WasClient.d.ts.map +1 -1
- package/dist/WasClient.js +31 -21
- package/dist/WasClient.js.map +1 -1
- package/dist/codec.d.ts +14 -11
- package/dist/codec.d.ts.map +1 -1
- package/dist/edv/EdvCodec.d.ts +34 -56
- package/dist/edv/EdvCodec.d.ts.map +1 -1
- package/dist/edv/EdvCodec.js +155 -52
- package/dist/edv/EdvCodec.js.map +1 -1
- package/dist/edv/WasTransport.d.ts +21 -4
- package/dist/edv/WasTransport.d.ts.map +1 -1
- package/dist/edv/WasTransport.js +53 -18
- package/dist/edv/WasTransport.js.map +1 -1
- package/dist/edv/epochCrypto.d.ts +101 -0
- package/dist/edv/epochCrypto.d.ts.map +1 -0
- package/dist/edv/epochCrypto.js +211 -0
- package/dist/edv/epochCrypto.js.map +1 -0
- package/dist/edv/epochKeys.d.ts +57 -0
- package/dist/edv/epochKeys.d.ts.map +1 -0
- package/dist/edv/epochKeys.js +132 -0
- package/dist/edv/epochKeys.js.map +1 -0
- package/dist/edv/index.d.ts +8 -0
- package/dist/edv/index.d.ts.map +1 -1
- package/dist/edv/index.js +7 -0
- package/dist/edv/index.js.map +1 -1
- package/dist/edv/recipients.d.ts +122 -0
- package/dist/edv/recipients.d.ts.map +1 -0
- package/dist/edv/recipients.js +265 -0
- package/dist/edv/recipients.js.map +1 -0
- package/dist/errors.d.ts +31 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +37 -0
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/internal/codec.d.ts.map +1 -1
- package/dist/internal/codec.js +12 -4
- package/dist/internal/codec.js.map +1 -1
- package/dist/internal/conditional.d.ts +6 -1
- package/dist/internal/conditional.d.ts.map +1 -1
- package/dist/internal/conditional.js +8 -1
- package/dist/internal/conditional.js.map +1 -1
- package/dist/internal/content.d.ts +2 -2
- package/dist/internal/content.d.ts.map +1 -1
- package/dist/internal/content.js +16 -6
- package/dist/internal/content.js.map +1 -1
- package/dist/internal/paths.d.ts.map +1 -1
- package/dist/internal/paths.js +10 -1
- package/dist/internal/paths.js.map +1 -1
- package/dist/internal/write.d.ts.map +1 -1
- package/dist/internal/write.js +5 -1
- package/dist/internal/write.js.map +1 -1
- package/dist/types.d.ts +75 -3
- package/dist/types.d.ts.map +1 -1
- package/package.json +5 -3
package/dist/edv/EdvCodec.js
CHANGED
|
@@ -43,15 +43,19 @@
|
|
|
43
43
|
* surfaces as a `PreconditionFailedError` (412) -- the lost-update guard --
|
|
44
44
|
* rather than the old advisory last-writer-wins. Against a backend that does
|
|
45
45
|
* not advertise `conditional-writes` (no ETag) it degrades to advisory.
|
|
46
|
-
* - **Encrypted metadata.**
|
|
47
|
-
*
|
|
46
|
+
* - **Encrypted metadata.** A Resource's user-writable `custom`
|
|
47
|
+
* (`name`/`tags`, via `setName`/`setTags`/`setMeta`) is
|
|
48
48
|
* encrypted into an EDV Document envelope with the same `documentCipher` used
|
|
49
49
|
* for content and stored opaquely under `/meta`; the server never sees
|
|
50
50
|
* plaintext `name`/`tags`. A reader with the keys decrypts it back
|
|
51
51
|
* transparently via `meta()`.
|
|
52
52
|
*/
|
|
53
|
+
import { base64 } from '@scure/base';
|
|
53
54
|
import { EdvClientCore } from '@interop/edv-client';
|
|
54
|
-
import { EncryptionError, ValidationError } from '../errors.js';
|
|
55
|
+
import { EncryptionError, IntegrityError, KeyUnwrapError, ValidationError } from '../errors.js';
|
|
56
|
+
import { readEtag } from '../internal/conditional.js';
|
|
57
|
+
import { resolveEpochKeys } from './epochKeys.js';
|
|
58
|
+
import { didKeyResolver } from './epochCrypto.js';
|
|
55
59
|
import { isBlob, isTextContentType, readJsonData, resolvePayload } from '../internal/content.js';
|
|
56
60
|
import { DEFAULT_CONTENT_TYPE, ENCODER, envelopeBytes } from './constants.js';
|
|
57
61
|
/**
|
|
@@ -80,37 +84,32 @@ const UTF8_DECODER = new TextDecoder('utf-8', { fatal: true, ignoreBOM: true });
|
|
|
80
84
|
*/
|
|
81
85
|
const EDV_DOC_ID = /^z[1-9A-HJ-NP-Za-km-z]{21,}$/;
|
|
82
86
|
/**
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
*
|
|
87
|
+
* The exact messages `@interop/minimal-cipher` / `@interop/edv-client` throw
|
|
88
|
+
* when a candidate key simply does not open an envelope -- a wrong or rotated
|
|
89
|
+
* key, not a corrupted one. `'Decryption failed.'` is the null-CEK unwrap path
|
|
90
|
+
* (the key could not unwrap the content-encryption key); `'No matching
|
|
91
|
+
* recipient found ...'` is the earlier kid-mismatch. These are the only two
|
|
92
|
+
* decrypt failures the `_decrypt` loop treats as "try the next key". Any OTHER
|
|
93
|
+
* decrypt failure means the key DID select a recipient and unwrap, but the
|
|
94
|
+
* content's AEAD tag did not verify -- a data-integrity failure (WebCrypto's
|
|
95
|
+
* `OperationError` in browsers, Node's "unable to authenticate data") -- which
|
|
96
|
+
* must surface as an {@link IntegrityError}, not be masked as a key miss.
|
|
92
97
|
*/
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
binary += String.fromCharCode(...bytes.subarray(index, index + chunkSize));
|
|
98
|
-
}
|
|
99
|
-
return btoa(binary);
|
|
100
|
-
}
|
|
98
|
+
const KEY_MISS_MESSAGES = new Set([
|
|
99
|
+
'Decryption failed.',
|
|
100
|
+
'No matching recipient found for key agreement key.'
|
|
101
|
+
]);
|
|
101
102
|
/**
|
|
102
|
-
*
|
|
103
|
+
* Whether a decrypt error means "this candidate key does not open the envelope"
|
|
104
|
+
* (so the loop should try the next key) rather than an integrity failure. True
|
|
105
|
+
* only for the closed set of {@link KEY_MISS_MESSAGES}; every other error is
|
|
106
|
+
* treated as an integrity failure and surfaces immediately.
|
|
103
107
|
*
|
|
104
|
-
* @param
|
|
105
|
-
* @returns {
|
|
108
|
+
* @param err {unknown}
|
|
109
|
+
* @returns {boolean}
|
|
106
110
|
*/
|
|
107
|
-
function
|
|
108
|
-
|
|
109
|
-
const bytes = new Uint8Array(binary.length);
|
|
110
|
-
for (let index = 0; index < binary.length; index++) {
|
|
111
|
-
bytes[index] = binary.charCodeAt(index);
|
|
112
|
-
}
|
|
113
|
-
return bytes;
|
|
111
|
+
function isKeyMiss(err) {
|
|
112
|
+
return err instanceof Error && KEY_MISS_MESSAGES.has(err.message);
|
|
114
113
|
}
|
|
115
114
|
/**
|
|
116
115
|
* A {@link ResourceCodec} that encrypts on write and decrypts on read using an
|
|
@@ -118,26 +117,40 @@ function base64ToBytes(base64) {
|
|
|
118
117
|
* collection handle.
|
|
119
118
|
*/
|
|
120
119
|
export class EdvCodec {
|
|
121
|
-
metadataMode = 'encrypted';
|
|
122
120
|
conditionalWrites = true;
|
|
123
121
|
_edv;
|
|
124
|
-
|
|
122
|
+
_writeKey;
|
|
123
|
+
_readKeys;
|
|
124
|
+
_writeEpoch;
|
|
125
125
|
_contentType;
|
|
126
126
|
_maxBlobBytes;
|
|
127
127
|
_idDerivation;
|
|
128
128
|
/**
|
|
129
129
|
* @param options {object}
|
|
130
130
|
* @param options.edv {EdvClientCore} holds the cipher + key resolver
|
|
131
|
-
* @param options.keyAgreementKey {IKeyAgreementKey} the
|
|
131
|
+
* @param options.keyAgreementKey {IKeyAgreementKey} the key writes encrypt
|
|
132
|
+
* under and the default read key. On a single-key collection this is the
|
|
133
|
+
* wallet's own key-agreement key; on a multi-recipient (key-epoch)
|
|
134
|
+
* collection it is the reconstructed `currentEpoch` key pair.
|
|
135
|
+
* @param [options.readKeys] {IKeyAgreementKey[]} the candidate keys a read
|
|
136
|
+
* may decrypt with, one per epoch this reader can unwrap (defaults to just
|
|
137
|
+
* `keyAgreementKey`). A read selects the one whose id matches the stored
|
|
138
|
+
* envelope's recipient, so a resource written under an older epoch still
|
|
139
|
+
* decrypts.
|
|
140
|
+
* @param [options.writeEpoch] {string} the key-epoch id to stamp on writes
|
|
141
|
+
* (the `currentEpoch`), surfaced as {@link EncodedWrite.epoch}; absent on a
|
|
142
|
+
* single-key collection.
|
|
132
143
|
* @param options.contentType {string} stored envelope content type
|
|
133
144
|
* @param options.maxBlobBytes {number} single-document binary cap
|
|
134
145
|
* @param options.idDerivation {string} how `add()` mints a document
|
|
135
146
|
* id: `'random'` (classic `generateId()`) or `'content'` (derived from the
|
|
136
147
|
* JWE ciphertext, content-addressed)
|
|
137
148
|
*/
|
|
138
|
-
constructor({ edv, keyAgreementKey, contentType, maxBlobBytes, idDerivation }) {
|
|
149
|
+
constructor({ edv, keyAgreementKey, readKeys, writeEpoch, contentType, maxBlobBytes, idDerivation }) {
|
|
139
150
|
this._edv = edv;
|
|
140
|
-
this.
|
|
151
|
+
this._writeKey = keyAgreementKey;
|
|
152
|
+
this._readKeys = readKeys ?? [keyAgreementKey];
|
|
153
|
+
this._writeEpoch = writeEpoch;
|
|
141
154
|
this._contentType = contentType;
|
|
142
155
|
this._maxBlobBytes = maxBlobBytes;
|
|
143
156
|
this._idDerivation = idDerivation;
|
|
@@ -171,7 +184,7 @@ export class EdvCodec {
|
|
|
171
184
|
priorDoc = read;
|
|
172
185
|
}
|
|
173
186
|
const { documentCipher } = this._edv;
|
|
174
|
-
const recipients = documentCipher.createDefaultRecipients(this.
|
|
187
|
+
const recipients = documentCipher.createDefaultRecipients(this._writeKey);
|
|
175
188
|
const encrypted = await documentCipher.encrypt({
|
|
176
189
|
doc: {
|
|
177
190
|
...(docId !== undefined && { id: docId }),
|
|
@@ -210,8 +223,12 @@ export class EdvCodec {
|
|
|
210
223
|
// (create-only-if-absent); a backend that does not honor it simply ignores
|
|
211
224
|
// it, leaving the write harmless rather than degraded.
|
|
212
225
|
...(priorDoc
|
|
213
|
-
? { ifMatch: current
|
|
214
|
-
: { ifNoneMatch: true })
|
|
226
|
+
? { ifMatch: readEtag(current ?? null) }
|
|
227
|
+
: { ifNoneMatch: true }),
|
|
228
|
+
// Stamp the key epoch this write encrypted under (the `currentEpoch`), so
|
|
229
|
+
// the server records it and a reader can pick the epoch key. Absent on a
|
|
230
|
+
// single-key collection.
|
|
231
|
+
...(this._writeEpoch !== undefined && { epoch: this._writeEpoch })
|
|
215
232
|
};
|
|
216
233
|
}
|
|
217
234
|
/**
|
|
@@ -220,12 +237,70 @@ export class EdvCodec {
|
|
|
220
237
|
async decode(response) {
|
|
221
238
|
const encryptedDoc = await readJsonData(response);
|
|
222
239
|
this._assertEnvelope(encryptedDoc, 'read');
|
|
223
|
-
const decrypted = await this.
|
|
224
|
-
encryptedDoc,
|
|
225
|
-
keyAgreementKey: this._keyAgreementKey
|
|
226
|
-
});
|
|
240
|
+
const decrypted = await this._decrypt(encryptedDoc);
|
|
227
241
|
return this._fromDocument(decrypted.content, decrypted.meta);
|
|
228
242
|
}
|
|
243
|
+
/**
|
|
244
|
+
* Decrypts a stored EDV envelope, selecting which read key to use by matching
|
|
245
|
+
* the envelope's JWE recipient `kid` against this reader's candidate keys
|
|
246
|
+
* (one per epoch it can unwrap). On a single-key collection there is exactly
|
|
247
|
+
* one candidate; on a multi-recipient collection a resource written under an
|
|
248
|
+
* older epoch selects that epoch's key, so history stays readable.
|
|
249
|
+
*
|
|
250
|
+
* A stored envelope naming an epoch this reader holds no key for (it was never
|
|
251
|
+
* a recipient of that epoch, or was removed and the epoch rotated) fails with
|
|
252
|
+
* {@link KeyUnwrapError} -- the **read** axis only; it says nothing about
|
|
253
|
+
* whether the server will still serve (pull) the ciphertext.
|
|
254
|
+
*
|
|
255
|
+
* @param encryptedDoc {IEncryptedDocument}
|
|
256
|
+
* @returns {Promise<{ content?: unknown; meta?: Record<string, unknown> }>}
|
|
257
|
+
*/
|
|
258
|
+
async _decrypt(encryptedDoc) {
|
|
259
|
+
const recipients = encryptedDoc.jwe.recipients ?? [];
|
|
260
|
+
const kids = new Set(recipients
|
|
261
|
+
.map(recipient => recipient.header?.kid)
|
|
262
|
+
.filter((kid) => typeof kid === 'string'));
|
|
263
|
+
// Prefer the read key whose id names a recipient of this envelope. The
|
|
264
|
+
// `rest` fallback then tries the remaining candidates: it serves an envelope
|
|
265
|
+
// whose recipient `kid` matches no local key id -- format drift, or a
|
|
266
|
+
// single-key envelope read with a differently-labeled key -- where the
|
|
267
|
+
// exact-match partition is empty even though a candidate can still unwrap it.
|
|
268
|
+
// For a well-formed epoch envelope the exact match always hits, so `rest` is
|
|
269
|
+
// normally unreached.
|
|
270
|
+
const preferred = this._readKeys.filter(key => kids.has(key.id));
|
|
271
|
+
const rest = this._readKeys.filter(key => !kids.has(key.id));
|
|
272
|
+
for (const keyAgreementKey of [...preferred, ...rest]) {
|
|
273
|
+
try {
|
|
274
|
+
return await this._edv.documentCipher.decrypt({
|
|
275
|
+
encryptedDoc,
|
|
276
|
+
keyAgreementKey
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
catch (err) {
|
|
280
|
+
if (isKeyMiss(err)) {
|
|
281
|
+
// This candidate is not a recipient of this envelope, or could not
|
|
282
|
+
// unwrap its content-encryption key; try the next candidate.
|
|
283
|
+
continue;
|
|
284
|
+
}
|
|
285
|
+
// The candidate DID select a recipient and unwrap the CEK, but the
|
|
286
|
+
// content's AEAD tag failed to authenticate: the stored ciphertext is
|
|
287
|
+
// corrupt or has been tampered with. Surface this immediately as an
|
|
288
|
+
// integrity failure rather than masking it as a membership/key miss by
|
|
289
|
+
// continuing into `rest` (a real key miss never reaches AEAD, so this
|
|
290
|
+
// can only be a genuine integrity failure on a key that matched).
|
|
291
|
+
throw new IntegrityError('Cannot decrypt this resource: its ciphertext failed to authenticate ' +
|
|
292
|
+
'(the AEAD integrity tag did not verify). This reader holds a key ' +
|
|
293
|
+
'that unwrapped the envelope, so this is not a key-epoch/membership ' +
|
|
294
|
+
'problem -- the stored envelope is corrupt or has been tampered ' +
|
|
295
|
+
'with.', { cause: err });
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
throw new KeyUnwrapError("Cannot decrypt this resource: none of this reader's epoch keys unwrap " +
|
|
299
|
+
'it. It was encrypted under a key epoch this reader holds no key for ' +
|
|
300
|
+
'(it was never a recipient of that epoch, or it was removed from the ' +
|
|
301
|
+
'collection and the epoch was rotated). This is the read axis only -- ' +
|
|
302
|
+
'the server may still serve the ciphertext (a separate zcap decision).');
|
|
303
|
+
}
|
|
229
304
|
/**
|
|
230
305
|
* @inheritdoc
|
|
231
306
|
*
|
|
@@ -237,7 +312,7 @@ export class EdvCodec {
|
|
|
237
312
|
*/
|
|
238
313
|
async encodeMeta({ custom }) {
|
|
239
314
|
const { documentCipher } = this._edv;
|
|
240
|
-
const recipients = documentCipher.createDefaultRecipients(this.
|
|
315
|
+
const recipients = documentCipher.createDefaultRecipients(this._writeKey);
|
|
241
316
|
// The document needs an EDV id (the cipher asserts one on decrypt). It is
|
|
242
317
|
// opaque to the server -- carried inside the un-decryptable envelope -- and
|
|
243
318
|
// minted fresh each write, since the metadata envelope is never updated in
|
|
@@ -264,10 +339,7 @@ export class EdvCodec {
|
|
|
264
339
|
return {};
|
|
265
340
|
}
|
|
266
341
|
this._assertEnvelope(custom, 'read');
|
|
267
|
-
const decrypted = await this.
|
|
268
|
-
encryptedDoc: custom,
|
|
269
|
-
keyAgreementKey: this._keyAgreementKey
|
|
270
|
-
});
|
|
342
|
+
const decrypted = await this._decrypt(custom);
|
|
271
343
|
return (decrypted.content ?? {});
|
|
272
344
|
}
|
|
273
345
|
/**
|
|
@@ -360,7 +432,7 @@ export class EdvCodec {
|
|
|
360
432
|
}
|
|
361
433
|
}
|
|
362
434
|
return {
|
|
363
|
-
content: { bytes:
|
|
435
|
+
content: { bytes: base64.encode(bytes) },
|
|
364
436
|
meta: { contentType: resolvedType, encoding: 'base64' }
|
|
365
437
|
};
|
|
366
438
|
}
|
|
@@ -404,12 +476,12 @@ export class EdvCodec {
|
|
|
404
476
|
return new Blob([ENCODER.encode(text)], { type: contentType });
|
|
405
477
|
}
|
|
406
478
|
if (encoding === 'base64') {
|
|
407
|
-
const
|
|
408
|
-
if (typeof
|
|
479
|
+
const base64Text = content?.bytes;
|
|
480
|
+
if (typeof base64Text !== 'string') {
|
|
409
481
|
throw new EncryptionError('Malformed encrypted binary document: meta.encoding is "base64" but ' +
|
|
410
482
|
'content.bytes is not a string.');
|
|
411
483
|
}
|
|
412
|
-
return new Blob([
|
|
484
|
+
return new Blob([base64.decode(base64Text)], {
|
|
413
485
|
type: contentType
|
|
414
486
|
});
|
|
415
487
|
}
|
|
@@ -472,7 +544,7 @@ const EDV_SCHEME = 'edv';
|
|
|
472
544
|
*/
|
|
473
545
|
export function createEdvEncryption({ resolveKeys, contentType = DEFAULT_CONTENT_TYPE, maxBlobBytes = DEFAULT_MAX_BLOB_BYTES, idDerivation = 'random' }) {
|
|
474
546
|
return {
|
|
475
|
-
async codecFor({ spaceId, collectionId, scheme, keys }) {
|
|
547
|
+
async codecFor({ spaceId, collectionId, scheme, encryption, keys }) {
|
|
476
548
|
if (scheme !== EDV_SCHEME) {
|
|
477
549
|
return null;
|
|
478
550
|
}
|
|
@@ -482,6 +554,37 @@ export function createEdvEncryption({ resolveKeys, contentType = DEFAULT_CONTENT
|
|
|
482
554
|
if (!resolved) {
|
|
483
555
|
return null;
|
|
484
556
|
}
|
|
557
|
+
// Multi-recipient (key-epoch) collection: resolve the reader's per-epoch
|
|
558
|
+
// keys from the marker -- the `currentEpoch` key pair for writes, every
|
|
559
|
+
// epoch key it can unwrap for reads -- and drive the cipher with those.
|
|
560
|
+
// The reader's own key-agreement key is used only to unwrap the epoch
|
|
561
|
+
// keys, never to encrypt resources.
|
|
562
|
+
if (encryption?.epochs && encryption.epochs.length > 0) {
|
|
563
|
+
const epochKeys = await resolveEpochKeys({
|
|
564
|
+
encryption,
|
|
565
|
+
keyAgreementKey: resolved.keyAgreementKey
|
|
566
|
+
});
|
|
567
|
+
if (epochKeys) {
|
|
568
|
+
// Epoch keys are self-describing did:key key-agreement keys, so a
|
|
569
|
+
// resource's recipient (the epoch public key) resolves through the
|
|
570
|
+
// standard did:key resolver, independent of the reader's own keystore.
|
|
571
|
+
const edv = new EdvClientCore({
|
|
572
|
+
keyAgreementKey: epochKeys.writeKey,
|
|
573
|
+
keyResolver: didKeyResolver
|
|
574
|
+
});
|
|
575
|
+
return new EdvCodec({
|
|
576
|
+
edv,
|
|
577
|
+
keyAgreementKey: epochKeys.writeKey,
|
|
578
|
+
readKeys: epochKeys.readKeys,
|
|
579
|
+
writeEpoch: epochKeys.writeEpoch,
|
|
580
|
+
contentType,
|
|
581
|
+
maxBlobBytes,
|
|
582
|
+
idDerivation
|
|
583
|
+
});
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
// Single-key collection (no epochs on the marker): the wallet's own
|
|
587
|
+
// key-agreement key encrypts and decrypts directly, unchanged.
|
|
485
588
|
const edv = new EdvClientCore({
|
|
486
589
|
keyAgreementKey: resolved.keyAgreementKey,
|
|
487
590
|
keyResolver: resolved.keyResolver
|
package/dist/edv/EdvCodec.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EdvCodec.js","sourceRoot":"","sources":["../../src/edv/EdvCodec.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EdvCodec.js","sourceRoot":"","sources":["../../src/edv/EdvCodec.ts"],"names":[],"mappings":"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"}
|
|
@@ -97,14 +97,31 @@ export declare class WasTransport extends Transport {
|
|
|
97
97
|
/**
|
|
98
98
|
* The feature tokens the collection's backend advertises in its "Collection
|
|
99
99
|
* Backend Selected" descriptor (e.g. `conditional-writes`,
|
|
100
|
-
* `blinded-index-query`).
|
|
101
|
-
*
|
|
102
|
-
*
|
|
103
|
-
* falls closed
|
|
100
|
+
* `blinded-index-query`). Memoized once it produces a definitive answer: a
|
|
101
|
+
* successful read (including one that lists no features) and a definitive
|
|
102
|
+
* "endpoint absent" (`404` / `405` / `501`) both resolve to a cached feature
|
|
103
|
+
* list, so every affordance gate falls closed against a server that has no
|
|
104
|
+
* backend descriptors.
|
|
105
|
+
*
|
|
106
|
+
* A transient/ambiguous failure (network error, timeout, `401`, `429`, other
|
|
107
|
+
* `5xx`) is NOT cached: the memo is cleared so the next call re-probes, and
|
|
108
|
+
* the error is rethrown so the caller fails loud rather than silently
|
|
109
|
+
* degrading atomicity against a server that may well be capable. (A single
|
|
110
|
+
* transient failure must not poison the transport for its lifetime.)
|
|
104
111
|
*
|
|
105
112
|
* @returns {Promise<string[]>}
|
|
106
113
|
*/
|
|
107
114
|
private _backendFeatures;
|
|
115
|
+
/**
|
|
116
|
+
* Reads and parses the backend descriptor once. On a definitive answer
|
|
117
|
+
* (success, or a `404` / `405` / `501` that means the endpoint is legitimately
|
|
118
|
+
* absent) resolves the feature list, which `_backendFeatures` then caches. On
|
|
119
|
+
* a transient failure, clears the memo (so the next call re-probes) and
|
|
120
|
+
* rethrows.
|
|
121
|
+
*
|
|
122
|
+
* @returns {Promise<string[]>}
|
|
123
|
+
*/
|
|
124
|
+
private _probeBackendFeatures;
|
|
108
125
|
/**
|
|
109
126
|
* Whether the collection's backend advertises the optional
|
|
110
127
|
* `conditional-writes` feature, so `insert` can use an atomic
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WasTransport.d.ts","sourceRoot":"","sources":["../../src/edv/WasTransport.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAE/C,OAAO,KAAK,EACV,SAAS,EACT,kBAAkB,EACnB,MAAM,8BAA8B,CAAA;AACrC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAQhD,OAAO,EAGL,iBAAiB,EAClB,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EAAE,iBAAiB,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"WasTransport.d.ts","sourceRoot":"","sources":["../../src/edv/WasTransport.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAE/C,OAAO,KAAK,EACV,SAAS,EACT,kBAAkB,EACnB,MAAM,8BAA8B,CAAA;AACrC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAQhD,OAAO,EAGL,iBAAiB,EAClB,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EAAE,iBAAiB,EAAE,CAAA;AAc5B;;;GAGG;AACH,KAAK,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;AA8B9C,qBAAa,YAAa,SAAQ,SAAS;IACzC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAE5B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAc;IACnC,OAAO,CAAC,uBAAuB,CAAC,CAAmB;IAEnD;;;;;;;;;OASG;gBACS,EACV,GAAG,EACH,OAAO,EACP,YAAY,EACZ,WAAkC,EACnC,EAAE;QACD,GAAG,EAAE,YAAY,CAAA;QACjB,OAAO,EAAE,MAAM,CAAA;QACf,YAAY,EAAE,MAAM,CAAA;QACpB,WAAW,CAAC,EAAE,MAAM,CAAA;KACrB;IAQD;;;;;;;;OAQG;IACH,OAAO,CAAC,aAAa;IAIrB;;;;;;;;;;OAUG;YACW,IAAI;IAclB;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,gBAAgB;IAKxB;;;;;;;;OAQG;YACW,qBAAqB;IA0BnC;;;;;;OAMG;YACW,kBAAkB;IAIhC;;;;;;;;;;;;;;;;OAgBG;IACY,MAAM,CAAC,EACpB,SAAS,EACV,GAAE;QAAE,SAAS,CAAC,EAAE,kBAAkB,CAAA;KAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAkD1D;;;;;;;;;;;;;;;;;;OAkBG;IACY,MAAM,CAAC,EACpB,SAAS,EACV,GAAE;QAAE,SAAS,CAAC,EAAE,kBAAkB,CAAA;KAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA6B1D;;;;;;;;;OASG;IACY,GAAG,CAAC,EACjB,EAAE,EACH,GAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAuBrD;;;;;;;OAOG;YACW,OAAO;IAYrB;;;;;;;;;;;;;;;;;;;;OAoBG;IACY,IAAI,CAAC,EAAE,KAAK,EAAE,GAAE;QAAE,KAAK,CAAC,EAAE,SAAS,CAAA;KAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAyC3E;;;;;;;;;OASG;IACY,WAAW,IAAI,OAAO,CAAC,KAAK,CAAC;IAU5C;;;;OAIG;IACY,UAAU,IAAI,OAAO,CAAC,KAAK,CAAC;IAI3C;;;;OAIG;IACY,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC;IAIzC;;;;;;;;OAQG;IACH,OAAO,CAAC,YAAY;CAQrB"}
|
package/dist/edv/WasTransport.js
CHANGED
|
@@ -46,6 +46,17 @@ import { readJsonData } from '../internal/content.js';
|
|
|
46
46
|
import { collectionBackend, collectionQuery, resourcePath } from '../internal/paths.js';
|
|
47
47
|
import { DEFAULT_CONTENT_TYPE, envelopeBytes, JOSE_CONTENT_TYPE } from './constants.js';
|
|
48
48
|
export { JOSE_CONTENT_TYPE };
|
|
49
|
+
/**
|
|
50
|
+
* HTTP statuses that mean the backend-descriptor endpoint is legitimately
|
|
51
|
+
* absent (or explicitly unimplemented), as opposed to transiently failing:
|
|
52
|
+
* `404` (no such endpoint), `405` (endpoint does not answer `GET`), `501`
|
|
53
|
+
* (not implemented). These are a definitive "this server advertises no
|
|
54
|
+
* backend features" answer and are safe to cache -- every affordance gate
|
|
55
|
+
* then falls closed against a server that has no backend descriptors. Any
|
|
56
|
+
* other failure (network error, timeout, `401`, `429`, other `5xx`) is
|
|
57
|
+
* transient/ambiguous and is re-probed instead of cached.
|
|
58
|
+
*/
|
|
59
|
+
const DESCRIPTOR_ABSENT_STATUSES = new Set([404, 405, 501]);
|
|
49
60
|
/**
|
|
50
61
|
* Builds an `Error` carrying the `name` that `EdvClientCore` (and the reference
|
|
51
62
|
* `HttpsTransport`) dispatch on -- `DuplicateError`, `InvalidStateError`,
|
|
@@ -123,30 +134,54 @@ export class WasTransport extends Transport {
|
|
|
123
134
|
/**
|
|
124
135
|
* The feature tokens the collection's backend advertises in its "Collection
|
|
125
136
|
* Backend Selected" descriptor (e.g. `conditional-writes`,
|
|
126
|
-
* `blinded-index-query`).
|
|
127
|
-
*
|
|
128
|
-
*
|
|
129
|
-
* falls closed
|
|
137
|
+
* `blinded-index-query`). Memoized once it produces a definitive answer: a
|
|
138
|
+
* successful read (including one that lists no features) and a definitive
|
|
139
|
+
* "endpoint absent" (`404` / `405` / `501`) both resolve to a cached feature
|
|
140
|
+
* list, so every affordance gate falls closed against a server that has no
|
|
141
|
+
* backend descriptors.
|
|
142
|
+
*
|
|
143
|
+
* A transient/ambiguous failure (network error, timeout, `401`, `429`, other
|
|
144
|
+
* `5xx`) is NOT cached: the memo is cleared so the next call re-probes, and
|
|
145
|
+
* the error is rethrown so the caller fails loud rather than silently
|
|
146
|
+
* degrading atomicity against a server that may well be capable. (A single
|
|
147
|
+
* transient failure must not poison the transport for its lifetime.)
|
|
130
148
|
*
|
|
131
149
|
* @returns {Promise<string[]>}
|
|
132
150
|
*/
|
|
133
151
|
_backendFeatures() {
|
|
134
|
-
this._backendFeaturesPromise ??= (
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
152
|
+
this._backendFeaturesPromise ??= this._probeBackendFeatures();
|
|
153
|
+
return this._backendFeaturesPromise;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Reads and parses the backend descriptor once. On a definitive answer
|
|
157
|
+
* (success, or a `404` / `405` / `501` that means the endpoint is legitimately
|
|
158
|
+
* absent) resolves the feature list, which `_backendFeatures` then caches. On
|
|
159
|
+
* a transient failure, clears the memo (so the next call re-probes) and
|
|
160
|
+
* rethrows.
|
|
161
|
+
*
|
|
162
|
+
* @returns {Promise<string[]>}
|
|
163
|
+
*/
|
|
164
|
+
async _probeBackendFeatures() {
|
|
165
|
+
try {
|
|
166
|
+
const response = await this._was.request({
|
|
167
|
+
path: collectionBackend(this.spaceId, this.collectionId),
|
|
168
|
+
method: 'GET'
|
|
169
|
+
});
|
|
170
|
+
const descriptor = (await readJsonData(response));
|
|
171
|
+
return Array.isArray(descriptor?.features)
|
|
172
|
+
? descriptor.features.filter((feature) => typeof feature === 'string')
|
|
173
|
+
: [];
|
|
174
|
+
}
|
|
175
|
+
catch (err) {
|
|
176
|
+
const status = httpStatus(err);
|
|
177
|
+
if (status !== undefined && DESCRIPTOR_ABSENT_STATUSES.has(status)) {
|
|
146
178
|
return [];
|
|
147
179
|
}
|
|
148
|
-
|
|
149
|
-
|
|
180
|
+
// Transient/ambiguous: do not cache this failure -- drop the memo so the
|
|
181
|
+
// next call re-probes -- and rethrow.
|
|
182
|
+
this._backendFeaturesPromise = undefined;
|
|
183
|
+
throw err;
|
|
184
|
+
}
|
|
150
185
|
}
|
|
151
186
|
/**
|
|
152
187
|
* Whether the collection's backend advertises the optional
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WasTransport.js","sourceRoot":"","sources":["../../src/edv/WasTransport.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAO/C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACrD,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,YAAY,EACb,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,iBAAiB,EAClB,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EAAE,iBAAiB,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"WasTransport.js","sourceRoot":"","sources":["../../src/edv/WasTransport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import type { IKeyAgreementKey } from '@interop/data-integrity-core';
|
|
2
|
+
import type { CollectionEncryptionRecipient } from '../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* The JOSE key-management algorithm for every epoch/recipient wrap.
|
|
5
|
+
*/
|
|
6
|
+
export declare const KEY_WRAP_ALG = "ECDH-ES+A256KW";
|
|
7
|
+
/**
|
|
8
|
+
* A reader's public key-agreement key, as needed to wrap an epoch key to it:
|
|
9
|
+
* the recipient `id` (`kid`, which the reader's own key-agreement key must also
|
|
10
|
+
* report) and its `publicKeyMultibase`.
|
|
11
|
+
*/
|
|
12
|
+
export interface RecipientPublicKey {
|
|
13
|
+
id: string;
|
|
14
|
+
publicKeyMultibase: string;
|
|
15
|
+
type?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Wraps a 32-byte epoch secret to one recipient's X25519 key-agreement key,
|
|
19
|
+
* producing the JWE `recipients` entry stored on the marker. Generates a fresh
|
|
20
|
+
* ephemeral key per call (ECDH-ES), so each wrap carries its own `epk`.
|
|
21
|
+
*
|
|
22
|
+
* @param options {object}
|
|
23
|
+
* @param options.epochSecret {Uint8Array} the 32-byte epoch key to wrap
|
|
24
|
+
* @param options.recipient {RecipientPublicKey} the reader's public KAK
|
|
25
|
+
* @returns {Promise<CollectionEncryptionRecipient>}
|
|
26
|
+
*/
|
|
27
|
+
export declare function wrapEpochSecret({ epochSecret, recipient }: {
|
|
28
|
+
epochSecret: Uint8Array;
|
|
29
|
+
recipient: RecipientPublicKey;
|
|
30
|
+
}): Promise<CollectionEncryptionRecipient>;
|
|
31
|
+
/**
|
|
32
|
+
* Unwraps an epoch secret from a marker `recipients` entry using the reader's
|
|
33
|
+
* own key-agreement key. Returns `null` when this key does not match the entry
|
|
34
|
+
* (the wrong recipient, or a corrupt entry) -- never treat `null` as a key; try
|
|
35
|
+
* the next candidate entry or epoch, and fail with a typed error when nothing
|
|
36
|
+
* unwraps.
|
|
37
|
+
*
|
|
38
|
+
* @param options {object}
|
|
39
|
+
* @param options.entry {CollectionEncryptionRecipient} the marker entry
|
|
40
|
+
* @param options.keyAgreementKey {IKeyAgreementKey} the reader's own KAK
|
|
41
|
+
* (its `id` must equal `entry.header.kid` for the derivation to match)
|
|
42
|
+
* @returns {Promise<Uint8Array | null>}
|
|
43
|
+
*/
|
|
44
|
+
export declare function unwrapEpochSecret({ entry, keyAgreementKey }: {
|
|
45
|
+
entry: CollectionEncryptionRecipient;
|
|
46
|
+
keyAgreementKey: IKeyAgreementKey;
|
|
47
|
+
}): Promise<Uint8Array | null>;
|
|
48
|
+
/**
|
|
49
|
+
* Mints a fresh key epoch: a new random X25519 key pair whose `did:key` is the
|
|
50
|
+
* epoch id. Returns the id and the raw 32-byte secret (to wrap to recipients);
|
|
51
|
+
* `resolveEpochKeys` reconstructs the epoch key pair from the id and secret when
|
|
52
|
+
* a resource must be encrypted or decrypted under the epoch.
|
|
53
|
+
*
|
|
54
|
+
* @returns {Promise<{ epochId: string, secret: Uint8Array }>}
|
|
55
|
+
*/
|
|
56
|
+
export declare function mintEpoch(): Promise<{
|
|
57
|
+
epochId: string;
|
|
58
|
+
secret: Uint8Array;
|
|
59
|
+
}>;
|
|
60
|
+
/**
|
|
61
|
+
* Reconstructs an epoch key pair from its id (a `did:key`, which carries the
|
|
62
|
+
* public key) and the unwrapped 32-byte secret, ready to hand to the EDV
|
|
63
|
+
* `documentCipher` as its `keyAgreementKey`.
|
|
64
|
+
*
|
|
65
|
+
* @param options {object}
|
|
66
|
+
* @param options.epochId {string} the epoch's `did:key`
|
|
67
|
+
* @param options.secret {Uint8Array} the unwrapped 32-byte epoch secret
|
|
68
|
+
* @returns {X25519KeyAgreementKey2020}
|
|
69
|
+
*/
|
|
70
|
+
export declare function reconstructEpochKeyPair({ epochId, secret }: {
|
|
71
|
+
epochId: string;
|
|
72
|
+
secret: Uint8Array;
|
|
73
|
+
}): IKeyAgreementKey;
|
|
74
|
+
/**
|
|
75
|
+
* The verification-method id of an epoch key: `<did:key>#<fingerprint>`. This is
|
|
76
|
+
* the `kid` the EDV `documentCipher` stamps on a resource encrypted under the
|
|
77
|
+
* epoch; a reader maps it back to the epoch by taking the `did:key` portion
|
|
78
|
+
* before the `#` fragment.
|
|
79
|
+
*
|
|
80
|
+
* @param epochId {string} the epoch's `did:key`
|
|
81
|
+
* @returns {string}
|
|
82
|
+
*/
|
|
83
|
+
export declare function epochKeyIdFor(epochId: string): string;
|
|
84
|
+
/**
|
|
85
|
+
* A `did:key` key resolver for X25519 key-agreement keys: resolves a
|
|
86
|
+
* `did:key:z...#z...` id (an epoch key, or any self-describing X25519 key) to
|
|
87
|
+
* its public verification method. The public key is the fragment, so no network
|
|
88
|
+
* or registry lookup is needed.
|
|
89
|
+
*
|
|
90
|
+
* @param options {object}
|
|
91
|
+
* @param options.id {string} the key id to resolve
|
|
92
|
+
* @returns {Promise<{ id: string, type: string, publicKeyMultibase: string }>}
|
|
93
|
+
*/
|
|
94
|
+
export declare function didKeyResolver({ id }: {
|
|
95
|
+
id?: string;
|
|
96
|
+
}): Promise<{
|
|
97
|
+
id: string;
|
|
98
|
+
type: string;
|
|
99
|
+
publicKeyMultibase: string;
|
|
100
|
+
}>;
|
|
101
|
+
//# sourceMappingURL=epochCrypto.d.ts.map
|