@interop/was-client 0.26.0 → 0.27.2

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 (102) hide show
  1. package/dist/Collection.d.ts.map +1 -1
  2. package/dist/Collection.js +27 -66
  3. package/dist/Collection.js.map +1 -1
  4. package/dist/Resource.d.ts.map +1 -1
  5. package/dist/Resource.js +28 -6
  6. package/dist/Resource.js.map +1 -1
  7. package/dist/Space.d.ts.map +1 -1
  8. package/dist/Space.js +10 -25
  9. package/dist/Space.js.map +1 -1
  10. package/dist/WasClient.d.ts.map +1 -1
  11. package/dist/WasClient.js +9 -19
  12. package/dist/WasClient.js.map +1 -1
  13. package/dist/codec.d.ts +31 -5
  14. package/dist/codec.d.ts.map +1 -1
  15. package/dist/edv/EdvCodec.d.ts +9 -14
  16. package/dist/edv/EdvCodec.d.ts.map +1 -1
  17. package/dist/edv/EdvCodec.js +147 -71
  18. package/dist/edv/EdvCodec.js.map +1 -1
  19. package/dist/edv/WasTransport.d.ts +1 -2
  20. package/dist/edv/WasTransport.d.ts.map +1 -1
  21. package/dist/edv/WasTransport.js +19 -28
  22. package/dist/edv/WasTransport.js.map +1 -1
  23. package/dist/edv/constants.d.ts +11 -0
  24. package/dist/edv/constants.d.ts.map +1 -1
  25. package/dist/edv/constants.js +16 -4
  26. package/dist/edv/constants.js.map +1 -1
  27. package/dist/edv/docCipher.d.ts +10 -26
  28. package/dist/edv/docCipher.d.ts.map +1 -1
  29. package/dist/edv/docCipher.js +62 -135
  30. package/dist/edv/docCipher.js.map +1 -1
  31. package/dist/edv/epochCrypto.d.ts +0 -4
  32. package/dist/edv/epochCrypto.d.ts.map +1 -1
  33. package/dist/edv/epochCrypto.js +4 -4
  34. package/dist/edv/epochCrypto.js.map +1 -1
  35. package/dist/edv/epochKeys.d.ts.map +1 -1
  36. package/dist/edv/epochKeys.js +2 -4
  37. package/dist/edv/epochKeys.js.map +1 -1
  38. package/dist/edv/epochMac.d.ts +24 -1
  39. package/dist/edv/epochMac.d.ts.map +1 -1
  40. package/dist/edv/epochMac.js +43 -13
  41. package/dist/edv/epochMac.js.map +1 -1
  42. package/dist/edv/index.d.ts +6 -4
  43. package/dist/edv/index.d.ts.map +1 -1
  44. package/dist/edv/index.js +4 -3
  45. package/dist/edv/index.js.map +1 -1
  46. package/dist/edv/recipients.d.ts +29 -17
  47. package/dist/edv/recipients.d.ts.map +1 -1
  48. package/dist/edv/recipients.js +177 -112
  49. package/dist/edv/recipients.js.map +1 -1
  50. package/dist/errors.d.ts +29 -12
  51. package/dist/errors.d.ts.map +1 -1
  52. package/dist/errors.js +37 -65
  53. package/dist/errors.js.map +1 -1
  54. package/dist/index.d.ts +2 -2
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/internal/codec.d.ts +15 -12
  57. package/dist/internal/codec.d.ts.map +1 -1
  58. package/dist/internal/codec.js +4 -6
  59. package/dist/internal/codec.js.map +1 -1
  60. package/dist/internal/conditional.d.ts +9 -4
  61. package/dist/internal/conditional.d.ts.map +1 -1
  62. package/dist/internal/conditional.js +9 -2
  63. package/dist/internal/conditional.js.map +1 -1
  64. package/dist/internal/content.d.ts +28 -24
  65. package/dist/internal/content.d.ts.map +1 -1
  66. package/dist/internal/content.js +28 -13
  67. package/dist/internal/content.js.map +1 -1
  68. package/dist/internal/describe.d.ts +15 -2
  69. package/dist/internal/describe.d.ts.map +1 -1
  70. package/dist/internal/describe.js +17 -0
  71. package/dist/internal/describe.js.map +1 -1
  72. package/dist/internal/pagination.d.ts +20 -1
  73. package/dist/internal/pagination.d.ts.map +1 -1
  74. package/dist/internal/pagination.js +22 -0
  75. package/dist/internal/pagination.js.map +1 -1
  76. package/dist/internal/paths.d.ts +0 -11
  77. package/dist/internal/paths.d.ts.map +1 -1
  78. package/dist/internal/paths.js +20 -33
  79. package/dist/internal/paths.js.map +1 -1
  80. package/dist/internal/policy.d.ts.map +1 -1
  81. package/dist/internal/policy.js +2 -9
  82. package/dist/internal/policy.js.map +1 -1
  83. package/dist/internal/write.d.ts +50 -4
  84. package/dist/internal/write.d.ts.map +1 -1
  85. package/dist/internal/write.js +45 -0
  86. package/dist/internal/write.js.map +1 -1
  87. package/dist/sync/cid.d.ts.map +1 -1
  88. package/dist/sync/cid.js +8 -2
  89. package/dist/sync/cid.js.map +1 -1
  90. package/dist/sync/port.d.ts +9 -8
  91. package/dist/sync/port.d.ts.map +1 -1
  92. package/dist/sync/port.js +74 -70
  93. package/dist/sync/port.js.map +1 -1
  94. package/dist/sync/provisioning.d.ts +4 -1
  95. package/dist/sync/provisioning.d.ts.map +1 -1
  96. package/dist/sync/provisioning.js +11 -2
  97. package/dist/sync/provisioning.js.map +1 -1
  98. package/dist/sync/types.d.ts +7 -10
  99. package/dist/sync/types.d.ts.map +1 -1
  100. package/dist/types.d.ts +1 -1
  101. package/dist/types.d.ts.map +1 -1
  102. package/package.json +14 -14
@@ -1,12 +1,122 @@
1
+ import { EDV_SCHEME_VERSION } from './constants.js';
1
2
  import { PreconditionFailedError, ValidationError } from '../errors.js';
2
3
  import { collectionDescriptorStore } from './descriptorStore.js';
3
4
  import { didKeyResolver, mintEpoch, unwrapEpochSecret, wrapEpochSecret } from './epochCrypto.js';
4
- import { computeEpochsMac } from './epochMac.js';
5
+ import { computeEpochsMac, epochsSigPayload } from './epochMac.js';
5
6
  /**
6
7
  * How many times a recipient CAS write retries a stale (`412`) description
7
8
  * before surfacing {@link PreconditionFailedError}.
8
9
  */
9
10
  const MAX_CAS_ATTEMPTS = 3;
11
+ /**
12
+ * Stamps the epoch-configuration authenticators onto a descriptor about to be
13
+ * written: the `epochsMac` under the current epoch's secret always, and the
14
+ * detached `epochsSig` when the caller supplied a signer. Without a signer any
15
+ * prior `epochsSig` is dropped rather than carried forward -- the epoch
16
+ * configuration just changed, so a stale signature over the old configuration
17
+ * would only ever fail verification.
18
+ *
19
+ * @param options {object}
20
+ * @param options.descriptor {CollectionEncryption} the exact descriptor
21
+ * state being written (epochs / currentEpoch already updated)
22
+ * @param options.epochSecret {Uint8Array} the current epoch's 32-byte secret
23
+ * @param [options.signEpochs] {EpochsSigner} the caller's epoch-config signer
24
+ * @returns {Promise<CollectionEncryption>} the descriptor with `epochsMac`
25
+ * (and `epochsSig`, when signed) stamped
26
+ */
27
+ async function stampEpochsAuth({ descriptor, epochSecret, signEpochs }) {
28
+ const epochsMac = await computeEpochsMac({ descriptor, epochSecret });
29
+ const stamped = { ...descriptor, epochsMac };
30
+ if (signEpochs) {
31
+ stamped.epochsSig = await signEpochs({
32
+ payload: epochsSigPayload(stamped)
33
+ });
34
+ }
35
+ else {
36
+ delete stamped.epochsSig;
37
+ }
38
+ return stamped;
39
+ }
40
+ /**
41
+ * Escrows a recipient into every epoch it is not already a recipient of: for
42
+ * each such epoch the caller unwraps the epoch key with its own key-agreement
43
+ * key and re-wraps it to the incoming reader. Shared by {@link addRecipient}
44
+ * (whose whole job this is) and {@link replaceRecipient} (which does it in the
45
+ * same write as its rotation), so the two cannot drift.
46
+ *
47
+ * Each epoch's unwrap + re-wrap is independent of the others', so they run
48
+ * concurrently (order-preserving), like `initRecipients` and `removeRecipient`
49
+ * wrap their recipients.
50
+ *
51
+ * @param options {object}
52
+ * @param options.epochs {CollectionEncryptionEpoch[]} the descriptor's epochs
53
+ * @param options.recipient {RecipientPublicKey} the reader being escrowed
54
+ * @param options.owner {object} the caller's own key material
55
+ * @param options.owner.keyAgreementKey {IKeyAgreementKey} unwraps each epoch
56
+ * key for re-wrapping
57
+ * @param options.operation {string} the calling operation's name, as the error
58
+ * messages name it (`addRecipient` / `replaceRecipient`)
59
+ * @param options.reader {string} how those messages name the incoming reader
60
+ * (`new` / `incoming`)
61
+ * @returns {Promise<{ epochs: CollectionEncryptionEpoch[], changed: boolean }>}
62
+ * the epochs with the escrow wraps applied, and whether any epoch changed
63
+ */
64
+ async function escrowIntoEpochs({ epochs, recipient, owner, operation, reader }) {
65
+ let changed = false;
66
+ const escrowed = await Promise.all(epochs.map(async (epoch) => {
67
+ // Already a recipient of this epoch? Leave it untouched (idempotent).
68
+ if (epoch.recipients.some(entry => entry.header.kid === recipient.id)) {
69
+ return epoch;
70
+ }
71
+ const ownEntry = epoch.recipients.find(entry => entry.header.kid === owner.keyAgreementKey.id);
72
+ if (!ownEntry) {
73
+ throw new ValidationError(`Cannot ${operation}: the caller is not a recipient of epoch ` +
74
+ `"${epoch.id}", so it cannot unwrap that epoch key to escrow it ` +
75
+ `to the ${reader} reader.`);
76
+ }
77
+ const epochSecret = await unwrapEpochSecret({
78
+ entry: ownEntry,
79
+ keyAgreementKey: owner.keyAgreementKey
80
+ });
81
+ if (!epochSecret) {
82
+ throw new ValidationError(`Cannot ${operation}: unwrapping epoch "${epoch.id}" with the ` +
83
+ "caller's key-agreement key failed.");
84
+ }
85
+ changed = true;
86
+ return {
87
+ ...epoch,
88
+ recipients: [
89
+ ...epoch.recipients,
90
+ await wrapEpochSecret({ epochSecret, recipient })
91
+ ]
92
+ };
93
+ }));
94
+ return { epochs: escrowed, changed };
95
+ }
96
+ /**
97
+ * Wraps a freshly minted epoch key to each remaining recipient kid, building the
98
+ * epoch to append. The resolver may signal drop-this-kid by resolving `null`
99
+ * (e.g. a roster entry whose key material is no longer resolvable), so the
100
+ * rotation excludes that entry instead of throwing; the caller applies its own
101
+ * rule to an epoch that ends up with no recipients at all.
102
+ *
103
+ * @param options {object}
104
+ * @param options.epochId {string} the fresh epoch's id (its `did:key`)
105
+ * @param options.secret {Uint8Array} the fresh epoch's 32-byte secret
106
+ * @param options.remaining {Set<string>} the surviving recipients' kids
107
+ * @param options.resolveRecipientKey {function} resolves a kid to its public
108
+ * key-agreement key, or `null` to drop it
109
+ * @returns {Promise<CollectionEncryptionEpoch>} the fresh epoch
110
+ */
111
+ async function rotateEpoch({ epochId, secret, remaining, resolveRecipientKey }) {
112
+ const wrapped = await Promise.all([...remaining].map(async (kid) => {
113
+ const recipient = await resolveRecipientKey(kid);
114
+ return recipient === null
115
+ ? null
116
+ : wrapEpochSecret({ epochSecret: secret, recipient });
117
+ }));
118
+ return { id: epochId, recipients: wrapped.filter(entry => entry !== null) };
119
+ }
10
120
  /**
11
121
  * Initializes the first key epoch on a descriptor that has no epochs yet: mints
12
122
  * a fresh epoch key, wraps it to each initial recipient, and writes `epochs:
@@ -33,9 +143,12 @@ const MAX_CAS_ATTEMPTS = 3;
33
143
  * whose epoch key already exists (e.g. a per-user key being enrolled into
34
144
  * its wrap-set roster). The `epochId` must be the key's did:key and `secret`
35
145
  * its raw 32-byte private key, exactly what {@link mintEpoch} returns.
146
+ * @param [options.signEpochs] {EpochsSigner} signs the epoch configuration
147
+ * being written, stamping the descriptor's `epochsSig` beside its
148
+ * `epochsMac`
36
149
  * @returns {Promise<CollectionEncryption>} the new descriptor
37
150
  */
38
- export async function initRecipients({ collection, store, recipients, epoch: premintedEpoch }) {
151
+ export async function initRecipients({ collection, store, recipients, epoch: premintedEpoch, signEpochs }) {
39
152
  if (recipients.length === 0) {
40
153
  throw new ValidationError('initRecipients needs at least one recipient to wrap the epoch key to.');
41
154
  }
@@ -46,31 +159,32 @@ export async function initRecipients({ collection, store, recipients, epoch: pre
46
159
  };
47
160
  return casUpdateDescriptor({
48
161
  store: descriptorStoreFor({ collection, store }),
49
- // A store whose descriptor starts absent initializes from a bare `edv`
50
- // descriptor (the create-if-absent branch); a Collection Description's
51
- // descriptor always exists, so its adapter never reaches the seed.
52
- seed: { scheme: 'edv' },
162
+ // A store whose descriptor starts absent initializes from a versioned
163
+ // `edv` descriptor (the create-if-absent branch); a Collection
164
+ // Description's descriptor always exists, so its adapter never reaches
165
+ // the seed.
166
+ seed: { scheme: 'edv', version: EDV_SCHEME_VERSION },
53
167
  mutate: async (descriptor) => {
54
168
  if (descriptor.epochs && descriptor.epochs.length > 0) {
55
169
  throw new ValidationError('This collection already has key epochs; use addRecipient to add a ' +
56
170
  'reader instead of initRecipients.');
57
171
  }
58
- // Declaring the first epochs, so stamp scheme version 1 when the
172
+ // Declaring the first epochs, so stamp the scheme version when the
59
173
  // descriptor does not already carry one, and authenticate the epoch
60
174
  // configuration with a MAC keyed from this first epoch's secret (computed
61
175
  // over the exact descriptor being written, since a CAS retry re-reads the
62
176
  // descriptor).
63
177
  const next = {
64
178
  ...descriptor,
65
- version: descriptor.version ?? 1,
179
+ version: descriptor.version ?? EDV_SCHEME_VERSION,
66
180
  epochs: [epoch],
67
181
  currentEpoch: epochId
68
182
  };
69
- const epochsMac = await computeEpochsMac({
183
+ return stampEpochsAuth({
70
184
  descriptor: next,
71
- epochSecret: secret
185
+ epochSecret: secret,
186
+ signEpochs
72
187
  });
73
- return { ...next, epochsMac };
74
188
  }
75
189
  });
76
190
  }
@@ -89,8 +203,9 @@ export async function initRecipients({ collection, store, recipients, epoch: pre
89
203
  * hosts the descriptor; exactly one of `collection` / `store`
90
204
  * @param [options.store] {EncryptionDescriptorStore} an explicit descriptor store
91
205
  * @param options.recipient {RecipientPublicKey} the new reader's public KAK
92
- * @param options.owner {OwnerKey} the caller's own key-agreement key, to
93
- * unwrap each epoch key for re-wrapping to the new reader
206
+ * @param options.owner {object} the caller's own key material
207
+ * @param options.owner.keyAgreementKey {IKeyAgreementKey} unwraps each epoch
208
+ * key for re-wrapping to the new reader
94
209
  * @returns {Promise<CollectionEncryption>} the new descriptor
95
210
  */
96
211
  export async function addRecipient({ collection, store, recipient, owner }) {
@@ -102,37 +217,13 @@ export async function addRecipient({ collection, store, recipient, owner }) {
102
217
  throw new ValidationError('Cannot addRecipient: this collection has no key epochs. Call ' +
103
218
  'initRecipients first.');
104
219
  }
105
- // Each epoch's unwrap + re-wrap is independent of the others', so run
106
- // them concurrently (order-preserving), like `initRecipients` and
107
- // `removeRecipient` wrap their recipients.
108
- const nextEpochs = await Promise.all(epochs.map(async (epoch) => {
109
- // Already a recipient of this epoch? Leave it untouched (idempotent).
110
- if (epoch.recipients.some(entry => entry.header.kid === recipient.id)) {
111
- return epoch;
112
- }
113
- const ownEntry = epoch.recipients.find(entry => entry.header.kid === owner.keyAgreementKey.id);
114
- if (!ownEntry) {
115
- throw new ValidationError(`Cannot addRecipient: the caller is not a recipient of epoch ` +
116
- `"${epoch.id}", so it cannot unwrap that epoch key to escrow ` +
117
- 'it to the new reader.');
118
- }
119
- const secret = await unwrapEpochSecret({
120
- entry: ownEntry,
121
- keyAgreementKey: owner.keyAgreementKey
122
- });
123
- if (!secret) {
124
- throw new ValidationError(`Cannot addRecipient: unwrapping epoch "${epoch.id}" with the ` +
125
- "caller's key-agreement key failed.");
126
- }
127
- const wrapped = await wrapEpochSecret({
128
- epochSecret: secret,
129
- recipient
130
- });
131
- return {
132
- ...epoch,
133
- recipients: [...epoch.recipients, wrapped]
134
- };
135
- }));
220
+ const { epochs: nextEpochs } = await escrowIntoEpochs({
221
+ epochs,
222
+ recipient,
223
+ owner,
224
+ operation: 'addRecipient',
225
+ reader: 'new'
226
+ });
136
227
  return { ...descriptor, epochs: nextEpochs };
137
228
  }
138
229
  });
@@ -190,9 +281,12 @@ export async function addRecipient({ collection, store, recipient, owner }) {
190
281
  * self-describing `did:key`. May resolve `null` to signal drop-this-kid:
191
282
  * the rotation then excludes that entry from the fresh epoch instead of
192
283
  * throwing (subject to the no-recipients-remaining guard).
284
+ * @param [options.signEpochs] {EpochsSigner} signs the rotated epoch
285
+ * configuration, stamping the descriptor's `epochsSig` beside its
286
+ * `epochsMac`
193
287
  * @returns {Promise<CollectionEncryption>} the new descriptor
194
288
  */
195
- export async function removeRecipient({ collection, store, space, recipientId, revoke, pull, resolveRecipientKey = defaultResolveRecipientKey }) {
289
+ export async function removeRecipient({ collection, store, space, recipientId, revoke, pull, resolveRecipientKey = defaultResolveRecipientKey, signEpochs }) {
196
290
  const descriptorStore = descriptorStoreFor({ collection, store });
197
291
  // Resolve the pull axis up front, before any rotation, so a malformed call
198
292
  // fails before the descriptor is mutated.
@@ -240,22 +334,17 @@ export async function removeRecipient({ collection, store, space, recipientId, r
240
334
  // signal drop-this-kid by resolving `null` (e.g. a roster entry whose
241
335
  // key material is no longer resolvable), so the rotation excludes that
242
336
  // entry instead of throwing.
243
- const wrapped = await Promise.all([...remaining].map(async (kid) => {
244
- const recipient = await resolveRecipientKey(kid);
245
- return recipient === null
246
- ? null
247
- : wrapEpochSecret({ epochSecret: secret, recipient });
248
- }));
249
- const newRecipients = wrapped.filter(entry => entry !== null);
250
- if (newRecipients.length === 0) {
337
+ const newEpoch = await rotateEpoch({
338
+ epochId,
339
+ secret,
340
+ remaining,
341
+ resolveRecipientKey
342
+ });
343
+ if (newEpoch.recipients.length === 0) {
251
344
  throw new ValidationError('Cannot removeRecipient: no recipients would remain after the ' +
252
345
  'removal (resolveRecipientKey dropped every remaining entry, ' +
253
346
  'and a collection with no readers cannot be rotated to).');
254
347
  }
255
- const newEpoch = {
256
- id: epochId,
257
- recipients: newRecipients
258
- };
259
348
  // Re-authenticate the epoch configuration under the NEW epoch's secret
260
349
  // (the rotating caller just minted it), computed over the exact descriptor
261
350
  // being written so a CAS retry re-MACs the re-read descriptor state.
@@ -264,11 +353,11 @@ export async function removeRecipient({ collection, store, space, recipientId, r
264
353
  epochs: [...epochs, newEpoch],
265
354
  currentEpoch: epochId
266
355
  };
267
- const epochsMac = await computeEpochsMac({
356
+ return stampEpochsAuth({
268
357
  descriptor: next,
269
- epochSecret: secret
358
+ epochSecret: secret,
359
+ signEpochs
270
360
  });
271
- return { ...next, epochsMac };
272
361
  }
273
362
  });
274
363
  // 2. Pull axis: withdraw the reader's server-side access AFTER the rotation
@@ -313,9 +402,10 @@ export async function removeRecipient({ collection, store, space, recipientId, r
313
402
  * dropped from the fresh epoch's roster
314
403
  * @param options.recipient {RecipientPublicKey} the incoming reader's public
315
404
  * key-agreement key, escrowed into every epoch and wrapped into the fresh one
316
- * @param options.owner {OwnerKey} the caller's own key-agreement key,
317
- * unwrapping each epoch key for the escrow -- it must be a recipient of
318
- * every epoch (a retiring key that was escrowed everywhere qualifies)
405
+ * @param options.owner {object} the caller's own key material
406
+ * @param options.owner.keyAgreementKey {IKeyAgreementKey} unwraps each epoch
407
+ * key for the escrow -- it must be a recipient of every epoch (a retiring
408
+ * key that was escrowed everywhere qualifies)
319
409
  * @param [options.revoke] {IDelegatedZcap | IDelegatedZcap[]} the default
320
410
  * pull axis, with `space`
321
411
  * @param [options.pull] {function} a caller-supplied pull action; mutually
@@ -324,9 +414,12 @@ export async function removeRecipient({ collection, store, space, recipientId, r
324
414
  * recipient's kid for the fresh epoch, `null` to drop it -- the
325
415
  * {@link removeRecipient} contract (the incoming recipient never routes
326
416
  * through it)
417
+ * @param [options.signEpochs] {EpochsSigner} signs the rotated epoch
418
+ * configuration, stamping the descriptor's `epochsSig` beside its
419
+ * `epochsMac` (an escrow-only write leaves both untouched)
327
420
  * @returns {Promise<CollectionEncryption>} the new descriptor
328
421
  */
329
- export async function replaceRecipient({ collection, store, space, retire, recipient, owner, revoke, pull, resolveRecipientKey = defaultResolveRecipientKey }) {
422
+ export async function replaceRecipient({ collection, store, space, retire, recipient, owner, revoke, pull, resolveRecipientKey = defaultResolveRecipientKey, signEpochs }) {
330
423
  const descriptorStore = descriptorStoreFor({ collection, store });
331
424
  const pullAxis = resolvePullAxis({ space, revoke, pull });
332
425
  const retiring = Array.isArray(retire) ? retire : [retire];
@@ -346,35 +439,14 @@ export async function replaceRecipient({ collection, store, space, retire, recip
346
439
  throw new ValidationError('Cannot replaceRecipient: this collection has no key epochs.');
347
440
  }
348
441
  // Escrow the incoming recipient into every epoch it is missing from
349
- // (addRecipient's loop, inlined so the whole replacement is one write).
350
- let escrowChanged = false;
351
- const escrowed = await Promise.all(epochs.map(async (epoch) => {
352
- if (epoch.recipients.some(entry => entry.header.kid === recipient.id)) {
353
- return epoch;
354
- }
355
- const ownEntry = epoch.recipients.find(entry => entry.header.kid === owner.keyAgreementKey.id);
356
- if (!ownEntry) {
357
- throw new ValidationError(`Cannot replaceRecipient: the caller is not a recipient of ` +
358
- `epoch "${epoch.id}", so it cannot unwrap that epoch key to ` +
359
- 'escrow it to the incoming reader.');
360
- }
361
- const epochSecret = await unwrapEpochSecret({
362
- entry: ownEntry,
363
- keyAgreementKey: owner.keyAgreementKey
364
- });
365
- if (!epochSecret) {
366
- throw new ValidationError(`Cannot replaceRecipient: unwrapping epoch "${epoch.id}" with ` +
367
- "the caller's key-agreement key failed.");
368
- }
369
- escrowChanged = true;
370
- return {
371
- ...epoch,
372
- recipients: [
373
- ...epoch.recipients,
374
- await wrapEpochSecret({ epochSecret, recipient })
375
- ]
376
- };
377
- }));
442
+ // (addRecipient's escrow, so the whole replacement is one write).
443
+ const { epochs: escrowed, changed: escrowChanged } = await escrowIntoEpochs({
444
+ epochs,
445
+ recipient,
446
+ owner,
447
+ operation: 'replaceRecipient',
448
+ reader: 'incoming'
449
+ });
378
450
  // Rotate only when a retiring kid is still current (the removeRecipient
379
451
  // no-op rule, so a naive re-run appends zero redundant epochs).
380
452
  const currentEpoch = escrowed.find(epoch => epoch.id === descriptor.currentEpoch) ??
@@ -390,32 +462,25 @@ export async function replaceRecipient({ collection, store, space, retire, recip
390
462
  }
391
463
  }
392
464
  // The escrow above already placed the incoming recipient in the current
393
- // epoch, so it is in `remaining`; wrap it directly (its public key is in
394
- // hand) and route only the other survivors through the resolver.
395
- const wrapped = await Promise.all([...remaining].map(async (kid) => {
396
- if (kid === recipient.id) {
397
- return wrapEpochSecret({ epochSecret: secret, recipient });
398
- }
399
- const resolved = await resolveRecipientKey(kid);
400
- return resolved === null
401
- ? null
402
- : wrapEpochSecret({ epochSecret: secret, recipient: resolved });
403
- }));
404
- const newRecipients = wrapped.filter(entry => entry !== null);
405
- const newEpoch = {
406
- id: epochId,
407
- recipients: newRecipients
408
- };
465
+ // epoch, so it is in `remaining`; short-circuit the resolver for it (its
466
+ // public key is in hand) and route only the other survivors through the
467
+ // caller's resolver.
468
+ const newEpoch = await rotateEpoch({
469
+ epochId,
470
+ secret,
471
+ remaining,
472
+ resolveRecipientKey: async (kid) => kid === recipient.id ? recipient : resolveRecipientKey(kid)
473
+ });
409
474
  const next = {
410
475
  ...descriptor,
411
476
  epochs: [...escrowed, newEpoch],
412
477
  currentEpoch: epochId
413
478
  };
414
- const epochsMac = await computeEpochsMac({
479
+ return stampEpochsAuth({
415
480
  descriptor: next,
416
- epochSecret: secret
481
+ epochSecret: secret,
482
+ signEpochs
417
483
  });
418
- return { ...next, epochsMac };
419
484
  }
420
485
  });
421
486
  await pullAxis();
@@ -1 +1 @@
1
- {"version":3,"file":"recipients.js","sourceRoot":"","sources":["../../src/edv/recipients.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"recipients.js","sourceRoot":"","sources":["../../src/edv/recipients.ts"],"names":[],"mappings":"AAmCA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACnD,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AACvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAA;AAOhE,OAAO,EACL,cAAc,EACd,SAAS,EACT,iBAAiB,EACjB,eAAe,EAChB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAMlE;;;GAGG;AACH,MAAM,gBAAgB,GAAG,CAAC,CAAA;AAE1B;;;;;;;;;;;;;;;GAeG;AACH,KAAK,UAAU,eAAe,CAAC,EAC7B,UAAU,EACV,WAAW,EACX,UAAU,EAKX;IACC,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAA;IACrE,MAAM,OAAO,GAAyB,EAAE,GAAG,UAAU,EAAE,SAAS,EAAE,CAAA;IAClE,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,CAAC,SAAS,GAAG,MAAM,UAAU,CAAC;YACnC,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC;SACnC,CAAC,CAAA;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,OAAO,CAAC,SAAS,CAAA;IAC1B,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,KAAK,UAAU,gBAAgB,CAAC,EAC9B,MAAM,EACN,SAAS,EACT,KAAK,EACL,SAAS,EACT,MAAM,EAOP;IACC,IAAI,OAAO,GAAG,KAAK,CAAA;IACnB,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAChC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAsC,EAAE;QAC7D,sEAAsE;QACtE,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;YACtE,OAAO,KAAK,CAAA;QACd,CAAC;QACD,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CACpC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,KAAK,CAAC,eAAe,CAAC,EAAE,CACvD,CAAA;QACD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,eAAe,CACvB,UAAU,SAAS,2CAA2C;gBAC5D,IAAI,KAAK,CAAC,EAAE,qDAAqD;gBACjE,UAAU,MAAM,UAAU,CAC7B,CAAA;QACH,CAAC;QACD,MAAM,WAAW,GAAG,MAAM,iBAAiB,CAAC;YAC1C,KAAK,EAAE,QAAQ;YACf,eAAe,EAAE,KAAK,CAAC,eAAe;SACvC,CAAC,CAAA;QACF,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,eAAe,CACvB,UAAU,SAAS,uBAAuB,KAAK,CAAC,EAAE,aAAa;gBAC7D,oCAAoC,CACvC,CAAA;QACH,CAAC;QACD,OAAO,GAAG,IAAI,CAAA;QACd,OAAO;YACL,GAAG,KAAK;YACR,UAAU,EAAE;gBACV,GAAG,KAAK,CAAC,UAAU;gBACnB,MAAM,eAAe,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;aAClD;SACF,CAAA;IACH,CAAC,CAAC,CACH,CAAA;IACD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAA;AACtC,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,KAAK,UAAU,WAAW,CAAC,EACzB,OAAO,EACP,MAAM,EACN,SAAS,EACT,mBAAmB,EAMpB;IACC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,KAAK,EAAC,GAAG,EAAC,EAAE;QAC7B,MAAM,SAAS,GAAG,MAAM,mBAAmB,CAAC,GAAG,CAAC,CAAA;QAChD,OAAO,SAAS,KAAK,IAAI;YACvB,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,eAAe,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAA;IACzD,CAAC,CAAC,CACH,CAAA;IACD,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,EAAE,CAAA;AAC7E,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,EACnC,UAAU,EACV,KAAK,EACL,UAAU,EACV,KAAK,EAAE,cAAc,EACrB,UAAU,EAOX;IACC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,eAAe,CACvB,uEAAuE,CACxE,CAAA;IACH,CAAC;IACD,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,cAAc,IAAI,CAAC,MAAM,SAAS,EAAE,CAAC,CAAA;IACjE,MAAM,KAAK,GAA8B;QACvC,EAAE,EAAE,OAAO;QACX,UAAU,EAAE,MAAM,OAAO,CAAC,GAAG,CAC3B,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CACzB,eAAe,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CACpD,CACF;KACF,CAAA;IACD,OAAO,mBAAmB,CAAC;QACzB,KAAK,EAAE,kBAAkB,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;QAChD,sEAAsE;QACtE,+DAA+D;QAC/D,uEAAuE;QACvE,YAAY;QACZ,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,kBAAkB,EAAE;QACpD,MAAM,EAAE,KAAK,EAAC,UAAU,EAAC,EAAE;YACzB,IAAI,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtD,MAAM,IAAI,eAAe,CACvB,oEAAoE;oBAClE,mCAAmC,CACtC,CAAA;YACH,CAAC;YACD,mEAAmE;YACnE,oEAAoE;YACpE,0EAA0E;YAC1E,0EAA0E;YAC1E,eAAe;YACf,MAAM,IAAI,GAAyB;gBACjC,GAAG,UAAU;gBACb,OAAO,EAAE,UAAU,CAAC,OAAO,IAAI,kBAAkB;gBACjD,MAAM,EAAE,CAAC,KAAK,CAAC;gBACf,YAAY,EAAE,OAAO;aACtB,CAAA;YACD,OAAO,eAAe,CAAC;gBACrB,UAAU,EAAE,IAAI;gBAChB,WAAW,EAAE,MAAM;gBACnB,UAAU;aACX,CAAC,CAAA;QACJ,CAAC;KACF,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,EACjC,UAAU,EACV,KAAK,EACL,SAAS,EACT,KAAK,EAMN;IACC,OAAO,mBAAmB,CAAC;QACzB,KAAK,EAAE,kBAAkB,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;QAChD,MAAM,EAAE,KAAK,EAAC,UAAU,EAAC,EAAE;YACzB,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAA;YAChC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACnC,MAAM,IAAI,eAAe,CACvB,+DAA+D;oBAC7D,uBAAuB,CAC1B,CAAA;YACH,CAAC;YACD,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,gBAAgB,CAAC;gBACpD,MAAM;gBACN,SAAS;gBACT,KAAK;gBACL,SAAS,EAAE,cAAc;gBACzB,MAAM,EAAE,KAAK;aACd,CAAC,CAAA;YACF,OAAO,EAAE,GAAG,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,CAAA;QAC9C,CAAC;KACF,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,EACpC,UAAU,EACV,KAAK,EACL,KAAK,EACL,WAAW,EACX,MAAM,EACN,IAAI,EACJ,mBAAmB,GAAG,0BAA0B,EAChD,UAAU,EAUX;IACC,MAAM,eAAe,GAAG,kBAAkB,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAA;IACjE,2EAA2E;IAC3E,0CAA0C;IAC1C,MAAM,QAAQ,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;IACzD,0EAA0E;IAC1E,6EAA6E;IAC7E,wEAAwE;IACxE,4EAA4E;IAC5E,wEAAwE;IACxE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,EAAE,CAAA;IAC7C,MAAM,iBAAiB,GAAG,MAAM,mBAAmB,CAAC;QAClD,KAAK,EAAE,eAAe;QACtB,MAAM,EAAE,KAAK,EAAC,UAAU,EAAC,EAAE;YACzB,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAA;YAChC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACnC,MAAM,IAAI,eAAe,CACvB,4DAA4D,CAC7D,CAAA;YACH,CAAC;YACD,0EAA0E;YAC1E,0EAA0E;YAC1E,wEAAwE;YACxE,0EAA0E;YAC1E,2EAA2E;YAC3E,gDAAgD;YAChD,MAAM,YAAY,GAChB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,UAAU,CAAC,YAAY,CAAC;gBAC1D,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAE,CAAA;YAC5B,sEAAsE;YACtE,iEAAiE;YACjE,mEAAmE;YACnE,kEAAkE;YAClE,sDAAsD;YACtD,IACE,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,WAAW,CAAC,EACxE,CAAC;gBACD,OAAO,IAAI,CAAA;YACb,CAAC;YACD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAA;YACnC,KAAK,MAAM,KAAK,IAAI,YAAY,CAAC,UAAU,EAAE,CAAC;gBAC5C,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,WAAW,EAAE,CAAC;oBACrC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;gBACjC,CAAC;YACH,CAAC;YACD,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBACzB,MAAM,IAAI,eAAe,CACvB,+DAA+D;oBAC7D,8DAA8D,CACjE,CAAA;YACH,CAAC;YACD,yEAAyE;YACzE,sEAAsE;YACtE,uEAAuE;YACvE,6BAA6B;YAC7B,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC;gBACjC,OAAO;gBACP,MAAM;gBACN,SAAS;gBACT,mBAAmB;aACpB,CAAC,CAAA;YACF,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrC,MAAM,IAAI,eAAe,CACvB,+DAA+D;oBAC7D,8DAA8D;oBAC9D,yDAAyD,CAC5D,CAAA;YACH,CAAC;YACD,uEAAuE;YACvE,2EAA2E;YAC3E,qEAAqE;YACrE,MAAM,IAAI,GAAyB;gBACjC,GAAG,UAAU;gBACb,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,QAAQ,CAAC;gBAC7B,YAAY,EAAE,OAAO;aACtB,CAAA;YACD,OAAO,eAAe,CAAC;gBACrB,UAAU,EAAE,IAAI;gBAChB,WAAW,EAAE,MAAM;gBACnB,UAAU;aACX,CAAC,CAAA;QACJ,CAAC;KACF,CAAC,CAAA;IAEF,4EAA4E;IAC5E,4EAA4E;IAC5E,MAAM,QAAQ,EAAE,CAAA;IAEhB,OAAO,iBAAiB,CAAA;AAC1B,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,EACrC,UAAU,EACV,KAAK,EACL,KAAK,EACL,MAAM,EACN,SAAS,EACT,KAAK,EACL,MAAM,EACN,IAAI,EACJ,mBAAmB,GAAG,0BAA0B,EAChD,UAAU,EAYX;IACC,MAAM,eAAe,GAAG,kBAAkB,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAA;IACjE,MAAM,QAAQ,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;IACzD,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;IAC1D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,eAAe,CACvB,kEAAkE;YAChE,iCAAiC,CACpC,CAAA;IACH,CAAC;IACD,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,eAAe,CACvB,+DAA+D,CAChE,CAAA;IACH,CAAC;IACD,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,EAAE,CAAA;IAC7C,MAAM,iBAAiB,GAAG,MAAM,mBAAmB,CAAC;QAClD,KAAK,EAAE,eAAe;QACtB,MAAM,EAAE,KAAK,EAAC,UAAU,EAAC,EAAE;YACzB,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAA;YAChC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACnC,MAAM,IAAI,eAAe,CACvB,6DAA6D,CAC9D,CAAA;YACH,CAAC;YACD,oEAAoE;YACpE,kEAAkE;YAClE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,GAChD,MAAM,gBAAgB,CAAC;gBACrB,MAAM;gBACN,SAAS;gBACT,KAAK;gBACL,SAAS,EAAE,kBAAkB;gBAC7B,MAAM,EAAE,UAAU;aACnB,CAAC,CAAA;YACJ,wEAAwE;YACxE,gEAAgE;YAChE,MAAM,YAAY,GAChB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,UAAU,CAAC,YAAY,CAAC;gBAC5D,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAE,CAAA;YAChC,MAAM,QAAQ,GAAG,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CACpD,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CACpC,CAAA;YACD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,aAAa,CAAC,CAAC,CAAC,EAAE,GAAG,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;YACnE,CAAC;YACD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAA;YACnC,KAAK,MAAM,KAAK,IAAI,YAAY,CAAC,UAAU,EAAE,CAAC;gBAC5C,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;oBACzC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;gBACjC,CAAC;YACH,CAAC;YACD,wEAAwE;YACxE,yEAAyE;YACzE,wEAAwE;YACxE,qBAAqB;YACrB,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC;gBACjC,OAAO;gBACP,MAAM;gBACN,SAAS;gBACT,mBAAmB,EAAE,KAAK,EAAC,GAAG,EAAC,EAAE,CAC/B,GAAG,KAAK,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC;aAC9D,CAAC,CAAA;YACF,MAAM,IAAI,GAAyB;gBACjC,GAAG,UAAU;gBACb,MAAM,EAAE,CAAC,GAAG,QAAQ,EAAE,QAAQ,CAAC;gBAC/B,YAAY,EAAE,OAAO;aACtB,CAAA;YACD,OAAO,eAAe,CAAC;gBACrB,UAAU,EAAE,IAAI;gBAChB,WAAW,EAAE,MAAM;gBACnB,UAAU;aACX,CAAC,CAAA;QACJ,CAAC;KACF,CAAC,CAAA;IAEF,MAAM,QAAQ,EAAE,CAAA;IAEhB,OAAO,iBAAiB,CAAA;AAC1B,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,eAAe,CAAC,EACvB,KAAK,EACL,MAAM,EACN,IAAI,EAKL;IACC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,IAAI,KAAK,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAChD,MAAM,IAAI,eAAe,CACvB,gEAAgE;gBAC9D,qEAAqE,CACxE,CAAA;QACH,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IACD,IAAI,KAAK,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QAChD,MAAM,IAAI,eAAe,CACvB,sEAAsE;YACpE,sDAAsD,CACzD,CAAA;IACH,CAAC;IACD,6EAA6E;IAC7E,2EAA2E;IAC3E,oEAAoE;IACpE,2EAA2E;IAC3E,4EAA4E;IAC5E,4EAA4E;IAC5E,+BAA+B;IAC/B,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;IAC1D,OAAO,KAAK,UAAU,WAAW;QAC/B,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YAC1B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,YAAY,eAAe,EAAE,CAAC;oBACnC,SAAQ;gBACV,CAAC;gBACD,MAAM,GAAG,CAAA;YACX,CAAC;QACH,CAAC;IACH,CAAC,CAAA;AACH,CAAC;AAED;;;;;;;GAOG;AACH,KAAK,UAAU,0BAA0B,CACvC,GAAW;IAEX,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAA;IAClD,OAAO,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,kBAAkB,EAAE,QAAQ,CAAC,kBAAkB,EAAE,CAAA;AAC7E,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,kBAAkB,CAAC,EAC1B,UAAU,EACV,KAAK,EAIN;IACC,IAAI,UAAU,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACpD,MAAM,IAAI,eAAe,CACvB,iEAAiE;YAC/D,kEAAkE,CACrE,CAAA;IACH,CAAC;IACD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,KAAK,CAAA;IACd,CAAC;IACD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,yBAAyB,CAAC,EAAE,UAAU,EAAE,CAAC,CAAA;IAClD,CAAC;IACD,MAAM,IAAI,eAAe,CACvB,wEAAwE;QACtE,UAAU,CACb,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,KAAK,UAAU,mBAAmB,CAAC,EACjC,KAAK,EACL,MAAM,EACN,IAAI,EAOL;IACC,IAAI,SAAkB,CAAA;IACtB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,gBAAgB,EAAE,OAAO,EAAE,EAAE,CAAC;QAC5D,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,CAAA;QAClC,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACrB,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,MAAM,IAAI,eAAe,CACvB,sEAAsE;oBACpE,4CAA4C,CAC/C,CAAA;YACH,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC/B,MAAM,IAAI,eAAe,CACvB,0EAA0E;oBACxE,oCAAoC,CACvC,CAAA;YACH,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAA;YAClC,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,OAAO,IAAI,CAAA;YACb,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;gBAC3B,OAAO,OAAO,CAAA;YAChB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,YAAY,uBAAuB,EAAE,CAAC;oBAC3C,gEAAgE;oBAChE,YAAY;oBACZ,SAAS,GAAG,GAAG,CAAA;oBACf,SAAQ;gBACV,CAAC;gBACD,MAAM,GAAG,CAAA;YACX,CAAC;QACH,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;QAC7C,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAClB,uEAAuE;YACvE,OAAO,OAAO,CAAC,UAAU,CAAA;QAC3B,CAAC;QACD,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;YACpD,OAAO,IAAI,CAAA;QACb,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,uBAAuB,EAAE,CAAC;gBAC3C,oEAAoE;gBACpE,SAAS,GAAG,GAAG,CAAA;gBACf,SAAQ;YACV,CAAC;YACD,MAAM,GAAG,CAAA;QACX,CAAC;IACH,CAAC;IACD,MAAM,IAAI,uBAAuB,CAC/B,yDAAyD,gBAAgB,GAAG;QAC1E,iEAAiE;QACjE,sBAAsB,EACxB,EAAE,KAAK,EAAE,SAAkB,EAAE,CAC9B,CAAA;AACH,CAAC"}
package/dist/errors.d.ts CHANGED
@@ -31,13 +31,13 @@ export declare class WasError extends Error {
31
31
  * means "not visible to you" rather than strictly "does not exist".
32
32
  */
33
33
  export declare class NotFoundError extends WasError {
34
- constructor(message: string, options?: WasErrorOptions);
34
+ name: string;
35
35
  }
36
36
  /**
37
37
  * The request was malformed or rejected as invalid (HTTP 400).
38
38
  */
39
39
  export declare class ValidationError extends WasError {
40
- constructor(message: string, options?: WasErrorOptions);
40
+ name: string;
41
41
  }
42
42
  /**
43
43
  * Authorization headers were missing or could not be verified (HTTP 401), or
@@ -45,14 +45,14 @@ export declare class ValidationError extends WasError {
45
45
  * 403).
46
46
  */
47
47
  export declare class AuthRequiredError extends WasError {
48
- constructor(message: string, options?: WasErrorOptions);
48
+ name: string;
49
49
  }
50
50
  /**
51
51
  * The endpoint exists in the spec but is not yet implemented by the server
52
52
  * (HTTP 501).
53
53
  */
54
54
  export declare class NotImplementedError extends WasError {
55
- constructor(message: string, options?: WasErrorOptions);
55
+ name: string;
56
56
  }
57
57
  /**
58
58
  * A client-supplied id or backend conflicts with existing state (HTTP 409):
@@ -61,7 +61,7 @@ export declare class NotImplementedError extends WasError {
61
61
  * the space's available list). The specific kind is on the `type` URI.
62
62
  */
63
63
  export declare class ConflictError extends WasError {
64
- constructor(message: string, options?: WasErrorOptions);
64
+ name: string;
65
65
  }
66
66
  /**
67
67
  * A conditional write's precondition evaluated false (HTTP 412): an `ifMatch`
@@ -72,7 +72,7 @@ export declare class ConflictError extends WasError {
72
72
  * conflict family.
73
73
  */
74
74
  export declare class PreconditionFailedError extends WasError {
75
- constructor(message: string, options?: WasErrorOptions);
75
+ name: string;
76
76
  }
77
77
  /**
78
78
  * A single upload exceeded the target backend's `maxUploadBytes` constraint
@@ -80,7 +80,7 @@ export declare class PreconditionFailedError extends WasError {
80
80
  * upload may still succeed.
81
81
  */
82
82
  export declare class PayloadTooLargeError extends WasError {
83
- constructor(message: string, options?: WasErrorOptions);
83
+ name: string;
84
84
  }
85
85
  /**
86
86
  * A write was rejected because the target backend's storage quota is exhausted
@@ -88,7 +88,7 @@ export declare class PayloadTooLargeError extends WasError {
88
88
  * fault.
89
89
  */
90
90
  export declare class QuotaExceededError extends WasError {
91
- constructor(message: string, options?: WasErrorOptions);
91
+ name: string;
92
92
  }
93
93
  /**
94
94
  * A client-side, fail-closed encryption error: a collection is declared
@@ -100,7 +100,7 @@ export declare class QuotaExceededError extends WasError {
100
100
  * per-handle `encryption` override). Never silently downgrades to plaintext.
101
101
  */
102
102
  export declare class EncryptionError extends WasError {
103
- constructor(message: string, options?: WasErrorOptions);
103
+ name: string;
104
104
  }
105
105
  /**
106
106
  * A fail-closed key-epoch error: a reader could not unwrap any epoch key it
@@ -117,7 +117,7 @@ export declare class EncryptionError extends WasError {
117
117
  * already decrypt.
118
118
  */
119
119
  export declare class KeyUnwrapError extends EncryptionError {
120
- constructor(message: string, options?: WasErrorOptions);
120
+ name: string;
121
121
  }
122
122
  /**
123
123
  * A fail-closed integrity error: a stored EDV envelope this reader DOES hold a
@@ -131,7 +131,7 @@ export declare class KeyUnwrapError extends EncryptionError {
131
131
  * problem. Raised client-side before/independent of any HTTP status.
132
132
  */
133
133
  export declare class IntegrityError extends EncryptionError {
134
- constructor(message: string, options?: WasErrorOptions);
134
+ name: string;
135
135
  }
136
136
  /**
137
137
  * The replication-port signal for a rejected conditional write (HTTP 412): an
@@ -159,7 +159,24 @@ export declare class WasSyncNotFoundError extends NotFoundError {
159
159
  * The server encountered an internal fault (HTTP 5xx).
160
160
  */
161
161
  export declare class WasServerError extends WasError {
162
- constructor(message: string, options?: WasErrorOptions);
162
+ name: string;
163
+ }
164
+ /**
165
+ * Thrown on decrypt when a stored envelope names JWE recipient (`kid`) ids
166
+ * that match none of this reader's candidate keys: neither the key-agreement
167
+ * key (single-key collection) nor any key epoch resolved from the Collection
168
+ * Description. It signals that the caller's cached descriptor may be stale and
169
+ * should be re-read before retrying: an epoch rotation emits no change-feed
170
+ * entry, so a codec built from a pre-rotation descriptor meets envelopes
171
+ * stamped with a newer epoch it has never seen. It also fires on a single-key
172
+ * codec that meets an envelope encrypted to a different key-agreement key
173
+ * entirely.
174
+ */
175
+ export declare class UnknownEpochError extends Error {
176
+ constructor({ collectionId, kids }: {
177
+ collectionId: string;
178
+ kids: string[];
179
+ });
163
180
  }
164
181
  /**
165
182
  * Reads the HTTP status from a raw ky/ezcap error, checking both the flat
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAWA;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED;;GAEG;AACH,qBAAa,QAAS,SAAQ,KAAK;IACjC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;gBAEP,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;CAU3D;AAED;;;;GAIG;AACH,qBAAa,aAAc,SAAQ,QAAQ;gBAC7B,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;CAI3D;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,QAAQ;gBAC/B,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;CAI3D;AAED;;;;GAIG;AACH,qBAAa,iBAAkB,SAAQ,QAAQ;gBACjC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;CAI3D;AAED;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,QAAQ;gBACnC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;CAI3D;AAED;;;;;GAKG;AACH,qBAAa,aAAc,SAAQ,QAAQ;gBAC7B,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;CAI3D;AAED;;;;;;;GAOG;AACH,qBAAa,uBAAwB,SAAQ,QAAQ;gBACvC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;CAI3D;AAED;;;;GAIG;AACH,qBAAa,oBAAqB,SAAQ,QAAQ;gBACpC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;CAI3D;AAED;;;;GAIG;AACH,qBAAa,kBAAmB,SAAQ,QAAQ;gBAClC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;CAI3D;AAED;;;;;;;;GAQG;AACH,qBAAa,eAAgB,SAAQ,QAAQ;gBAC/B,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;CAI3D;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,cAAe,SAAQ,eAAe;gBACrC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;CAI3D;AAED;;;;;;;;;;GAUG;AACH,qBAAa,cAAe,SAAQ,eAAe;gBACrC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;CAI3D;AAED;;;;;;;;GAQG;AACH,qBAAa,oBAAqB,SAAQ,uBAAuB;gBAE7D,OAAO,SAA+C,EACtD,OAAO,GAAE,eAAoB;CAKhC;AAED;;;;;;GAMG;AACH,qBAAa,oBAAqB,SAAQ,aAAa;gBAEnD,OAAO,SAA4B,EACnC,OAAO,GAAE,eAAoB;CAKhC;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,QAAQ;gBAC9B,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;CAI3D;AAoFD;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAG3D;AAED;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,QAAQ,CAyD/C"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAWA;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED;;GAEG;AACH,qBAAa,QAAS,SAAQ,KAAK;IACjC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;gBAEP,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;CAU3D;AAED;;;;GAIG;AACH,qBAAa,aAAc,SAAQ,QAAQ;IAChC,IAAI,SAAkB;CAChC;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,QAAQ;IAClC,IAAI,SAAoB;CAClC;AAED;;;;GAIG;AACH,qBAAa,iBAAkB,SAAQ,QAAQ;IACpC,IAAI,SAAsB;CACpC;AAED;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,QAAQ;IACtC,IAAI,SAAwB;CACtC;AAED;;;;;GAKG;AACH,qBAAa,aAAc,SAAQ,QAAQ;IAChC,IAAI,SAAkB;CAChC;AAED;;;;;;;GAOG;AACH,qBAAa,uBAAwB,SAAQ,QAAQ;IAC1C,IAAI,SAA4B;CAC1C;AAED;;;;GAIG;AACH,qBAAa,oBAAqB,SAAQ,QAAQ;IACvC,IAAI,SAAyB;CACvC;AAED;;;;GAIG;AACH,qBAAa,kBAAmB,SAAQ,QAAQ;IACrC,IAAI,SAAuB;CACrC;AAED;;;;;;;;GAQG;AACH,qBAAa,eAAgB,SAAQ,QAAQ;IAClC,IAAI,SAAoB;CAClC;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,cAAe,SAAQ,eAAe;IACxC,IAAI,SAAmB;CACjC;AAED;;;;;;;;;;GAUG;AACH,qBAAa,cAAe,SAAQ,eAAe;IACxC,IAAI,SAAmB;CACjC;AAED;;;;;;;;GAQG;AACH,qBAAa,oBAAqB,SAAQ,uBAAuB;gBAE7D,OAAO,SAA+C,EACtD,OAAO,GAAE,eAAoB;CAKhC;AAED;;;;;;GAMG;AACH,qBAAa,oBAAqB,SAAQ,aAAa;gBAEnD,OAAO,SAA4B,EACnC,OAAO,GAAE,eAAoB;CAKhC;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,QAAQ;IACjC,IAAI,SAAmB;CACjC;AAED;;;;;;;;;;GAUG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,EACV,YAAY,EACZ,IAAI,EACL,EAAE;QACD,YAAY,EAAE,MAAM,CAAA;QACpB,IAAI,EAAE,MAAM,EAAE,CAAA;KACf;CAUF;AA4DD;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAG3D;AAED;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,QAAQ,CA2D/C"}