@interop/wallet-core 0.66.0 → 0.67.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 +12 -8
- package/dist/clientAnnex/credentialAnchoredGenesis.d.ts +5 -4
- package/dist/clientAnnex/credentialAnchoredGenesis.d.ts.map +1 -1
- package/dist/clientAnnex/credentialAnchoredGenesis.js +32 -50
- package/dist/clientAnnex/credentialAnchoredGenesis.js.map +1 -1
- package/dist/clientAnnex/establish.d.ts +46 -18
- package/dist/clientAnnex/establish.d.ts.map +1 -1
- package/dist/clientAnnex/establish.js +112 -65
- package/dist/clientAnnex/establish.js.map +1 -1
- package/dist/clientAnnex/forget.d.ts.map +1 -1
- package/dist/clientAnnex/forget.js +5 -6
- package/dist/clientAnnex/forget.js.map +1 -1
- package/dist/clientAnnex/forgetLast.d.ts +26 -113
- package/dist/clientAnnex/forgetLast.d.ts.map +1 -1
- package/dist/clientAnnex/forgetLast.js +26 -150
- package/dist/clientAnnex/forgetLast.js.map +1 -1
- package/dist/clientAnnex/heal.d.ts +79 -13
- package/dist/clientAnnex/heal.d.ts.map +1 -1
- package/dist/clientAnnex/heal.js +67 -122
- package/dist/clientAnnex/heal.js.map +1 -1
- package/dist/clientAnnex/index.d.ts +6 -6
- package/dist/clientAnnex/index.d.ts.map +1 -1
- package/dist/clientAnnex/index.js +4 -4
- package/dist/clientAnnex/index.js.map +1 -1
- package/dist/clientAnnex/ladder.d.ts +51 -4
- package/dist/clientAnnex/ladder.d.ts.map +1 -1
- package/dist/clientAnnex/ladder.js +283 -47
- package/dist/clientAnnex/ladder.js.map +1 -1
- package/dist/clientAnnex/ladderAnchored.d.ts +37 -3
- package/dist/clientAnnex/ladderAnchored.d.ts.map +1 -1
- package/dist/clientAnnex/ladderAnchored.js +69 -34
- package/dist/clientAnnex/ladderAnchored.js.map +1 -1
- package/dist/clientAnnex/log.d.ts +68 -57
- package/dist/clientAnnex/log.d.ts.map +1 -1
- package/dist/clientAnnex/log.js +96 -126
- package/dist/clientAnnex/log.js.map +1 -1
- package/dist/clientAnnex/mend.js +44 -20
- package/dist/clientAnnex/mend.js.map +1 -1
- package/dist/clientAnnex/recoveryLadderAnchored.d.ts +20 -1
- package/dist/clientAnnex/recoveryLadderAnchored.d.ts.map +1 -1
- package/dist/clientAnnex/recoveryLadderAnchored.js +77 -294
- package/dist/clientAnnex/recoveryLadderAnchored.js.map +1 -1
- package/dist/clientAnnex/rosterDeliveredEpochs.d.ts +13 -5
- package/dist/clientAnnex/rosterDeliveredEpochs.d.ts.map +1 -1
- package/dist/clientAnnex/rosterDeliveredEpochs.js +18 -9
- package/dist/clientAnnex/rosterDeliveredEpochs.js.map +1 -1
- package/dist/clientAnnex/selfEnroll.js +1 -1
- package/dist/clientAnnex/selfEnroll.js.map +1 -1
- package/dist/clientAnnex/zcap.d.ts +19 -0
- package/dist/clientAnnex/zcap.d.ts.map +1 -1
- package/dist/clientAnnex/zcap.js +80 -12
- package/dist/clientAnnex/zcap.js.map +1 -1
- package/dist/clients/index.d.ts +3 -2
- package/dist/clients/index.d.ts.map +1 -1
- package/dist/clients/index.js +3 -2
- package/dist/clients/index.js.map +1 -1
- package/dist/clients/listing.d.ts.map +1 -1
- package/dist/clients/listing.js +33 -15
- package/dist/clients/listing.js.map +1 -1
- package/dist/clients/policy.d.ts +18 -0
- package/dist/clients/policy.d.ts.map +1 -1
- package/dist/clients/policy.js +22 -8
- package/dist/clients/policy.js.map +1 -1
- package/dist/clients/revocation.d.ts +18 -30
- package/dist/clients/revocation.d.ts.map +1 -1
- package/dist/clients/revocation.js +12 -27
- package/dist/clients/revocation.js.map +1 -1
- package/dist/clients/rosterPolicy.d.ts +6 -1
- package/dist/clients/rosterPolicy.d.ts.map +1 -1
- package/dist/clients/rosterPolicy.js +27 -30
- package/dist/clients/rosterPolicy.js.map +1 -1
- package/dist/descriptors/errors.d.ts +6 -5
- package/dist/descriptors/errors.d.ts.map +1 -1
- package/dist/descriptors/errors.js +6 -5
- package/dist/descriptors/errors.js.map +1 -1
- package/dist/descriptors/index.d.ts +7 -3
- package/dist/descriptors/index.d.ts.map +1 -1
- package/dist/descriptors/index.js +7 -3
- package/dist/descriptors/index.js.map +1 -1
- package/dist/descriptors/logSource.d.ts +28 -6
- package/dist/descriptors/logSource.d.ts.map +1 -1
- package/dist/descriptors/logSource.js +33 -7
- package/dist/descriptors/logSource.js.map +1 -1
- package/dist/enrollment/enrollment.d.ts.map +1 -1
- package/dist/enrollment/enrollment.js +3 -7
- package/dist/enrollment/enrollment.js.map +1 -1
- package/dist/genesis/accountGenesis.d.ts +8 -10
- package/dist/genesis/accountGenesis.d.ts.map +1 -1
- package/dist/genesis/accountGenesis.js +39 -41
- package/dist/genesis/accountGenesis.js.map +1 -1
- package/dist/genesis/kmsAuthentication.d.ts +50 -0
- package/dist/genesis/kmsAuthentication.d.ts.map +1 -0
- package/dist/genesis/kmsAuthentication.js +49 -0
- package/dist/genesis/kmsAuthentication.js.map +1 -0
- package/dist/keyring/kdf.d.ts +16 -20
- package/dist/keyring/kdf.d.ts.map +1 -1
- package/dist/keyring/kdf.js +2 -2
- package/dist/keyring/kdf.js.map +1 -1
- package/dist/keyring/unlockSpace.d.ts +8 -30
- package/dist/keyring/unlockSpace.d.ts.map +1 -1
- package/dist/keyring/unlockSpace.js +8 -31
- package/dist/keyring/unlockSpace.js.map +1 -1
- package/dist/keys/clientKeyRecord.d.ts +2 -1
- package/dist/keys/clientKeyRecord.d.ts.map +1 -1
- package/dist/keys/clientKeyRecord.js +28 -11
- package/dist/keys/clientKeyRecord.js.map +1 -1
- package/dist/keys/index.d.ts +6 -2
- package/dist/keys/index.d.ts.map +1 -1
- package/dist/keys/index.js +5 -1
- package/dist/keys/index.js.map +1 -1
- package/dist/keys/rosterLogStore.d.ts.map +1 -1
- package/dist/keys/rosterLogStore.js +14 -5
- package/dist/keys/rosterLogStore.js.map +1 -1
- package/dist/keys/spaceEpochs.d.ts +92 -3
- package/dist/keys/spaceEpochs.d.ts.map +1 -1
- package/dist/keys/spaceEpochs.js +110 -4
- package/dist/keys/spaceEpochs.js.map +1 -1
- package/dist/keys/userKeyRoster.d.ts +30 -3
- package/dist/keys/userKeyRoster.d.ts.map +1 -1
- package/dist/keys/userKeyRoster.js +90 -15
- package/dist/keys/userKeyRoster.js.map +1 -1
- package/dist/keys/userKeyRosterCascade.d.ts.map +1 -1
- package/dist/keys/userKeyRosterCascade.js +5 -1
- package/dist/keys/userKeyRosterCascade.js.map +1 -1
- package/dist/recovery/continuation.d.ts +255 -0
- package/dist/recovery/continuation.d.ts.map +1 -0
- package/dist/recovery/continuation.js +471 -0
- package/dist/recovery/continuation.js.map +1 -0
- package/dist/recovery/index.d.ts +12 -8
- package/dist/recovery/index.d.ts.map +1 -1
- package/dist/recovery/index.js +11 -7
- package/dist/recovery/index.js.map +1 -1
- package/dist/recovery/recoveryDelegation.d.ts +23 -126
- package/dist/recovery/recoveryDelegation.d.ts.map +1 -1
- package/dist/recovery/recoveryDelegation.js +1 -266
- package/dist/recovery/recoveryDelegation.js.map +1 -1
- package/dist/recovery/recoveryWebvh.d.ts +42 -83
- package/dist/recovery/recoveryWebvh.d.ts.map +1 -1
- package/dist/recovery/recoveryWebvh.js +44 -380
- package/dist/recovery/recoveryWebvh.js.map +1 -1
- package/dist/request/classify.d.ts +3 -14
- package/dist/request/classify.d.ts.map +1 -1
- package/dist/request/classify.js +19 -40
- package/dist/request/classify.js.map +1 -1
- package/dist/request/index.d.ts +1 -0
- package/dist/request/index.d.ts.map +1 -1
- package/dist/request/index.js +1 -0
- package/dist/request/index.js.map +1 -1
- package/dist/request/onboarding.d.ts.map +1 -1
- package/dist/request/onboarding.js +19 -27
- package/dist/request/onboarding.js.map +1 -1
- package/dist/request/parse.d.ts +5 -3
- package/dist/request/parse.d.ts.map +1 -1
- package/dist/request/parse.js +7 -6
- package/dist/request/parse.js.map +1 -1
- package/dist/request/processRequest.d.ts.map +1 -1
- package/dist/request/processRequest.js +2 -1
- package/dist/request/processRequest.js.map +1 -1
- package/dist/request/queryPredicates.d.ts +98 -0
- package/dist/request/queryPredicates.d.ts.map +1 -0
- package/dist/request/queryPredicates.js +107 -0
- package/dist/request/queryPredicates.js.map +1 -0
- package/dist/resourceLog/document.d.ts +39 -0
- package/dist/resourceLog/document.d.ts.map +1 -1
- package/dist/resourceLog/document.js +41 -0
- package/dist/resourceLog/document.js.map +1 -1
- package/dist/resourceLog/ladderRungs.d.ts.map +1 -1
- package/dist/resourceLog/ladderRungs.js +3 -2
- package/dist/resourceLog/ladderRungs.js.map +1 -1
- package/dist/sync/contactsConflict.d.ts.map +1 -1
- package/dist/sync/contactsConflict.js +8 -2
- package/dist/sync/contactsConflict.js.map +1 -1
- package/dist/sync/engine.d.ts +38 -23
- package/dist/sync/engine.d.ts.map +1 -1
- package/dist/sync/engine.js +36 -5
- package/dist/sync/engine.js.map +1 -1
- package/dist/sync/index.d.ts +9 -12
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/index.js +8 -11
- package/dist/sync/index.js.map +1 -1
- package/dist/sync/push.d.ts.map +1 -1
- package/dist/sync/push.js +1 -2
- package/dist/sync/push.js.map +1 -1
- package/dist/sync/remint.d.ts +0 -31
- package/dist/sync/remint.d.ts.map +1 -1
- package/dist/sync/remint.js +32 -1
- package/dist/sync/remint.js.map +1 -1
- package/dist/sync/types.d.ts +4 -41
- package/dist/sync/types.d.ts.map +1 -1
- package/dist/sync/types.js +4 -47
- package/dist/sync/types.js.map +1 -1
- package/dist/unlock/index.d.ts +1 -1
- package/dist/unlock/index.d.ts.map +1 -1
- package/dist/unlock/index.js +1 -1
- package/dist/unlock/index.js.map +1 -1
- package/dist/unlock/retire.d.ts +16 -56
- package/dist/unlock/retire.d.ts.map +1 -1
- package/dist/unlock/retire.js +7 -76
- package/dist/unlock/retire.js.map +1 -1
- package/dist/unlock/standingWebvh.d.ts +20 -40
- package/dist/unlock/standingWebvh.d.ts.map +1 -1
- package/dist/unlock/standingWebvh.js +35 -76
- package/dist/unlock/standingWebvh.js.map +1 -1
- package/dist/unlock/unlockRecord.d.ts.map +1 -1
- package/dist/unlock/unlockRecord.js +69 -44
- package/dist/unlock/unlockRecord.js.map +1 -1
- package/dist/webvh/accountEntry.d.ts +63 -7
- package/dist/webvh/accountEntry.d.ts.map +1 -1
- package/dist/webvh/accountEntry.js +110 -19
- package/dist/webvh/accountEntry.js.map +1 -1
- package/dist/webvh/delegatedLogStore.d.ts +18 -12
- package/dist/webvh/delegatedLogStore.d.ts.map +1 -1
- package/dist/webvh/delegatedLogStore.js +32 -11
- package/dist/webvh/delegatedLogStore.js.map +1 -1
- package/dist/webvh/didWebvh.d.ts +39 -23
- package/dist/webvh/didWebvh.d.ts.map +1 -1
- package/dist/webvh/didWebvh.js +63 -45
- package/dist/webvh/didWebvh.js.map +1 -1
- package/dist/webvh/enrollClient.d.ts.map +1 -1
- package/dist/webvh/enrollClient.js +19 -23
- package/dist/webvh/enrollClient.js.map +1 -1
- package/dist/webvh/index.d.ts +11 -7
- package/dist/webvh/index.d.ts.map +1 -1
- package/dist/webvh/index.js +9 -6
- package/dist/webvh/index.js.map +1 -1
- package/dist/webvh/listClients.d.ts.map +1 -1
- package/dist/webvh/listClients.js +102 -65
- package/dist/webvh/listClients.js.map +1 -1
- package/dist/webvh/mergeMethods.d.ts +84 -0
- package/dist/webvh/mergeMethods.d.ts.map +1 -0
- package/dist/webvh/mergeMethods.js +46 -0
- package/dist/webvh/mergeMethods.js.map +1 -0
- package/dist/webvh/revokeClient.d.ts +12 -2
- package/dist/webvh/revokeClient.d.ts.map +1 -1
- package/dist/webvh/revokeClient.js +126 -48
- package/dist/webvh/revokeClient.js.map +1 -1
- package/dist/webvh/verifyLog.d.ts +21 -0
- package/dist/webvh/verifyLog.d.ts.map +1 -1
- package/dist/webvh/verifyLog.js +36 -14
- package/dist/webvh/verifyLog.js.map +1 -1
- package/package.json +11 -11
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { vmFragmentOf } from '@interop/vh-resource-log';
|
|
2
2
|
import { clientKeyAgreementController, effectiveParameters } from './didWebvh.js';
|
|
3
|
-
import { relationIds, resolvedKeyAgreementMethods } from '../resourceLog/document.js';
|
|
3
|
+
import { relationIds, resolvedKeyAgreementMethods, resolvedRelationMethods } from '../resourceLog/document.js';
|
|
4
4
|
/**
|
|
5
5
|
* The key multibases the document currently publishes: every verification
|
|
6
6
|
* method's `publicKeyMultibase`, plus the fragment of its id (for a did:webvh
|
|
@@ -28,37 +28,28 @@ export function documentKeyMultibases({ doc }) {
|
|
|
28
28
|
* The key multibases the document currently lists under
|
|
29
29
|
* `capabilityDelegation`. A relation member is either a verification-method
|
|
30
30
|
* id or an embedded method, so each is resolved both ways: the fragment of
|
|
31
|
-
* its id,
|
|
32
|
-
*
|
|
33
|
-
* names.
|
|
31
|
+
* its id, and the `publicKeyMultibase` of the method it resolves to (its own
|
|
32
|
+
* when embedded, the `verificationMethod` entry's when a string reference
|
|
33
|
+
* names one).
|
|
34
34
|
*
|
|
35
35
|
* @param options {object}
|
|
36
36
|
* @param options.doc {PublishedKeyDocument} a locally verified document
|
|
37
37
|
* @returns {Set<string>}
|
|
38
38
|
*/
|
|
39
39
|
function delegationRelationMultibases({ doc }) {
|
|
40
|
-
const byId = new Map();
|
|
41
|
-
for (const method of doc.verificationMethod ?? []) {
|
|
42
|
-
if (method.id && method.publicKeyMultibase) {
|
|
43
|
-
byId.set(method.id, method.publicKeyMultibase);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
40
|
const multibases = new Set();
|
|
47
|
-
for (const
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
multibases.add(embedded);
|
|
41
|
+
for (const id of relationIds(doc.capabilityDelegation)) {
|
|
42
|
+
const fragment = vmFragmentOf(id);
|
|
43
|
+
if (fragment) {
|
|
44
|
+
multibases.add(fragment);
|
|
52
45
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
multibases.add(referenced);
|
|
61
|
-
}
|
|
46
|
+
}
|
|
47
|
+
for (const method of resolvedRelationMethods({
|
|
48
|
+
doc,
|
|
49
|
+
relation: 'capabilityDelegation'
|
|
50
|
+
})) {
|
|
51
|
+
if (method.publicKeyMultibase) {
|
|
52
|
+
multibases.add(method.publicKeyMultibase);
|
|
62
53
|
}
|
|
63
54
|
}
|
|
64
55
|
return multibases;
|
|
@@ -210,41 +201,75 @@ function addedUpdateKeys(params, index) {
|
|
|
210
201
|
return params[index].updateKeys.filter(key => !previous.has(key));
|
|
211
202
|
}
|
|
212
203
|
/**
|
|
213
|
-
* Attributes
|
|
204
|
+
* Attributes every listed client's ACTIVE update key from the log in ONE
|
|
205
|
+
* forward pass -- the single-pass twin of {@link clientAddIndexes}, so a
|
|
206
|
+
* listing never walks the log tail once per client. A client's initial key is
|
|
214
207
|
* whatever the entry publishing its verification methods revealed, and each
|
|
215
208
|
* later entry that retired the attributed key while revealing exactly one
|
|
216
|
-
* replacement is that client's self-rotation.
|
|
217
|
-
* ambiguity (an entry revealing several keys beside the
|
|
218
|
-
* retirement with several candidate replacements) or when
|
|
219
|
-
* is not authorized by the final entry.
|
|
209
|
+
* replacement is that client's self-rotation. A client attributes to
|
|
210
|
+
* `undefined` on any ambiguity (an entry revealing several keys beside the
|
|
211
|
+
* client's methods, a retirement with several candidate replacements) or when
|
|
212
|
+
* the attributed key is not authorized by the final entry.
|
|
213
|
+
*
|
|
214
|
+
* Each entry's revealed set is computed once and applied to every client
|
|
215
|
+
* whose key that entry retired, which is what the per-client walk recomputed
|
|
216
|
+
* per client. The pass starts at the earliest enrollment it is asked about
|
|
217
|
+
* and, for one client, is the tail walk from that client's add entry.
|
|
220
218
|
*
|
|
221
219
|
* @param options {object}
|
|
222
220
|
* @param options.params {Array<{ updateKeys: string[]; nextKeyHashes: string[] }>}
|
|
223
221
|
* the log's effective parameters, one entry per log entry
|
|
224
|
-
* @param options.
|
|
225
|
-
* verification
|
|
226
|
-
*
|
|
222
|
+
* @param options.addIndexes {Map<string, number>} each client's
|
|
223
|
+
* signing-key multibase to the entry that published its verification
|
|
224
|
+
* methods
|
|
225
|
+
* @returns {Map<string, string | undefined>} each client's signing-key
|
|
226
|
+
* multibase to its attributed active update key, `undefined` where the
|
|
227
|
+
* attribution cannot isolate a single key
|
|
227
228
|
*/
|
|
228
|
-
function
|
|
229
|
-
const
|
|
230
|
-
|
|
231
|
-
|
|
229
|
+
function attributeActiveUpdateKeys({ params, addIndexes }) {
|
|
230
|
+
const active = new Map();
|
|
231
|
+
// Clients grouped by the entry that added them, so each entry's pass picks
|
|
232
|
+
// up its own newcomers without rescanning the map.
|
|
233
|
+
const addedAt = new Map();
|
|
234
|
+
for (const [signingKeyMultibase, addIndex] of addIndexes) {
|
|
235
|
+
const group = addedAt.get(addIndex);
|
|
236
|
+
if (group) {
|
|
237
|
+
group.push(signingKeyMultibase);
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
addedAt.set(addIndex, [signingKeyMultibase]);
|
|
241
|
+
}
|
|
232
242
|
}
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
243
|
+
if (addedAt.size === 0) {
|
|
244
|
+
return active;
|
|
245
|
+
}
|
|
246
|
+
// Nothing before the earliest enrollment can touch a listed client.
|
|
247
|
+
const first = Math.min(...addedAt.keys());
|
|
248
|
+
for (let index = first; index < params.length; index++) {
|
|
249
|
+
// An entry's `updateKeys` is a handful of keys, so membership is a scan
|
|
250
|
+
// rather than a Set built per entry.
|
|
251
|
+
const authorized = params[index].updateKeys;
|
|
252
|
+
// Lazily computed: most entries retire nobody's key.
|
|
253
|
+
let revealed;
|
|
254
|
+
for (const [signingKeyMultibase, key] of active) {
|
|
255
|
+
if (key === undefined || authorized.includes(key)) {
|
|
256
|
+
continue;
|
|
257
|
+
}
|
|
258
|
+
revealed ??= addedUpdateKeys(params, index);
|
|
259
|
+
active.set(signingKeyMultibase, revealed.length === 1 ? revealed[0] : undefined);
|
|
260
|
+
}
|
|
261
|
+
for (const signingKeyMultibase of addedAt.get(index) ?? []) {
|
|
262
|
+
revealed ??= addedUpdateKeys(params, index);
|
|
263
|
+
active.set(signingKeyMultibase, revealed.length === 1 ? revealed[0] : undefined);
|
|
238
264
|
}
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
265
|
+
}
|
|
266
|
+
const final = params[params.length - 1].updateKeys;
|
|
267
|
+
for (const [signingKeyMultibase, key] of active) {
|
|
268
|
+
if (key !== undefined && !final.includes(key)) {
|
|
269
|
+
active.set(signingKeyMultibase, undefined);
|
|
242
270
|
}
|
|
243
|
-
active = revealed[0];
|
|
244
271
|
}
|
|
245
|
-
return
|
|
246
|
-
? active
|
|
247
|
-
: undefined;
|
|
272
|
+
return active;
|
|
248
273
|
}
|
|
249
274
|
/**
|
|
250
275
|
* The index of the entry that published a client's verification methods (its
|
|
@@ -280,25 +305,35 @@ export function attributeClientUpdateKey({ log, signingKeyMultibase }) {
|
|
|
280
305
|
const addIndex = clientAddIndex({ log, signingKeyMultibase });
|
|
281
306
|
return addIndex === -1
|
|
282
307
|
? undefined
|
|
283
|
-
:
|
|
308
|
+
: attributeActiveUpdateKeys({
|
|
309
|
+
params: effectiveParameters(log),
|
|
310
|
+
addIndexes: new Map([[signingKeyMultibase, addIndex]])
|
|
311
|
+
}).get(signingKeyMultibase);
|
|
284
312
|
}
|
|
285
313
|
/**
|
|
286
|
-
* A map from
|
|
287
|
-
* FIRST entry that published it under `capabilityInvocation` -- the
|
|
288
|
-
* enrollment moments in one forward pass, so a listing attributes
|
|
289
|
-
* without rescanning.
|
|
290
|
-
*
|
|
314
|
+
* A map from each LISTED client's signing-key multibase to the index of the
|
|
315
|
+
* FIRST entry that published it under `capabilityInvocation` -- the listed
|
|
316
|
+
* clients' enrollment moments in one forward pass, so a listing attributes
|
|
317
|
+
* every client without rescanning. Clients the final document no longer lists
|
|
318
|
+
* (revoked ones) are never entered, so the attribution pass that follows never
|
|
319
|
+
* tracks them. A multibase the log never published is absent from the map.
|
|
291
320
|
*
|
|
292
321
|
* @param options {object}
|
|
293
322
|
* @param options.log {DIDLog}
|
|
323
|
+
* @param options.signingKeyMultibases {Set<string>} the listed clients
|
|
294
324
|
* @returns {Map<string, number>}
|
|
295
325
|
*/
|
|
296
|
-
function clientAddIndexes({ log }) {
|
|
326
|
+
function clientAddIndexes({ log, signingKeyMultibases }) {
|
|
297
327
|
const addIndexes = new Map();
|
|
298
328
|
for (const [index, entry] of log.entries()) {
|
|
329
|
+
if (addIndexes.size === signingKeyMultibases.size) {
|
|
330
|
+
break;
|
|
331
|
+
}
|
|
299
332
|
for (const vmId of relationIds(entry.state.capabilityInvocation)) {
|
|
300
333
|
const signingKeyMultibase = vmFragmentOf(vmId);
|
|
301
|
-
if (signingKeyMultibase &&
|
|
334
|
+
if (signingKeyMultibase &&
|
|
335
|
+
signingKeyMultibases.has(signingKeyMultibase) &&
|
|
336
|
+
!addIndexes.has(signingKeyMultibase)) {
|
|
302
337
|
addIndexes.set(signingKeyMultibase, index);
|
|
303
338
|
}
|
|
304
339
|
}
|
|
@@ -322,27 +357,29 @@ export function listEnrolledWebvhClients({ log }) {
|
|
|
322
357
|
}
|
|
323
358
|
const doc = log[log.length - 1].state;
|
|
324
359
|
const params = effectiveParameters(log);
|
|
360
|
+
const signingKeyMultibases = relationIds(doc.capabilityInvocation)
|
|
361
|
+
.map(vmId => vmFragmentOf(vmId))
|
|
362
|
+
.filter((multibase) => Boolean(multibase));
|
|
325
363
|
// The entry that published each client's verification methods -- its
|
|
326
364
|
// enrollment moment, and the attribution anchor for its update key.
|
|
327
|
-
const addIndexes = clientAddIndexes({
|
|
365
|
+
const addIndexes = clientAddIndexes({
|
|
366
|
+
log,
|
|
367
|
+
signingKeyMultibases: new Set(signingKeyMultibases)
|
|
368
|
+
});
|
|
369
|
+
// Every client's active update key, attributed in one forward pass.
|
|
370
|
+
const updateKeys = attributeActiveUpdateKeys({ params, addIndexes });
|
|
328
371
|
// Every keyAgreement method, grouped by controller, in one pass -- keying by
|
|
329
372
|
// controller string picks up only MARKED methods (a client's own), since the
|
|
330
373
|
// account DID controller a recovery code's unmarked method carries is never
|
|
331
374
|
// looked up below.
|
|
332
375
|
const keyAgreementIndex = markedKeyAgreementIndex({ doc });
|
|
333
376
|
const clients = [];
|
|
334
|
-
for (const
|
|
335
|
-
const signingKeyMultibase = vmFragmentOf(vmId);
|
|
336
|
-
if (!signingKeyMultibase) {
|
|
337
|
-
continue;
|
|
338
|
-
}
|
|
377
|
+
for (const signingKeyMultibase of signingKeyMultibases) {
|
|
339
378
|
const addIndex = addIndexes.get(signingKeyMultibase);
|
|
340
379
|
clients.push({
|
|
341
380
|
signingKeyMultibase,
|
|
342
381
|
keyAgreementKeyMultibases: keyAgreementIndex.get(clientKeyAgreementController({ signingKeyMultibase })) ?? [],
|
|
343
|
-
updateKeyMultibase:
|
|
344
|
-
? undefined
|
|
345
|
-
: attributeActiveUpdateKey({ params, addIndex }),
|
|
382
|
+
updateKeyMultibase: updateKeys.get(signingKeyMultibase),
|
|
346
383
|
addedAt: addIndex === undefined ? undefined : log[addIndex].versionTime
|
|
347
384
|
});
|
|
348
385
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listClients.js","sourceRoot":"","sources":["../../src/webvh/listClients.ts"],"names":[],"mappings":"AA0DA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EACL,4BAA4B,EAC5B,mBAAmB,EACpB,MAAM,eAAe,CAAA;AACtB,OAAO,EACL,WAAW,EACX,2BAA2B,
|
|
1
|
+
{"version":3,"file":"listClients.js","sourceRoot":"","sources":["../../src/webvh/listClients.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) 2026 Interop Alliance. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* The one merge of new verification methods into a published account
|
|
6
|
+
* document, shared by every entry builder that ADDS methods: the enrollment
|
|
7
|
+
* add entry, the self-enrollment add entry, and the recovery continuation's
|
|
8
|
+
* add-and-retire entry. Each site hands over its methods and the ids each
|
|
9
|
+
* relation gains; the merge replaces a method already published under the
|
|
10
|
+
* same id, dedupes each relation's references, and applies one optional
|
|
11
|
+
* retirement predicate over the EXISTING document alone.
|
|
12
|
+
*
|
|
13
|
+
* Shared because a drift here is silent: a relation missed at one site or a
|
|
14
|
+
* filter run in a different order publishes a document the other replica
|
|
15
|
+
* would not have written, and nothing refuses it. Deliberately dependency-
|
|
16
|
+
* light -- the relation reader and the method type only -- so the layers
|
|
17
|
+
* that build entries can take it without the ceremony graph.
|
|
18
|
+
*/
|
|
19
|
+
import type { VerificationMethod } from '@interop/did-method-webvh';
|
|
20
|
+
/**
|
|
21
|
+
* The ids a merge adds to each verification relation. Order is load-bearing
|
|
22
|
+
* on the wire: each relation gains the ids in the order given, after the
|
|
23
|
+
* references the document already carries.
|
|
24
|
+
*/
|
|
25
|
+
export interface RelationMembership {
|
|
26
|
+
authentication?: string[];
|
|
27
|
+
assertionMethod?: string[];
|
|
28
|
+
keyAgreement?: string[];
|
|
29
|
+
capabilityInvocation?: string[];
|
|
30
|
+
capabilityDelegation?: string[];
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Merges verification methods into a published document across the five
|
|
34
|
+
* relations. `verificationMethod` keeps every existing method the predicate
|
|
35
|
+
* does not retire and that no added method replaces by id, then the added
|
|
36
|
+
* methods in order; each relation keeps its existing references (retired ones
|
|
37
|
+
* dropped) and then the ids `relations` names for it, deduped.
|
|
38
|
+
*
|
|
39
|
+
* The retirement predicate runs over the existing document only, and the
|
|
40
|
+
* added ids join afterwards: a method this entry publishes may already stand
|
|
41
|
+
* in a relation (a reinstalled ladder VM, say), and filtering the union would
|
|
42
|
+
* strike the very method being published.
|
|
43
|
+
*
|
|
44
|
+
* @param options {object}
|
|
45
|
+
* @param options.doc {object} the published document the entry extends
|
|
46
|
+
* @param options.methods {VerificationMethod[]} the methods to publish, in
|
|
47
|
+
* the order they land in `verificationMethod`
|
|
48
|
+
* @param options.relations {RelationMembership} the ids each relation gains
|
|
49
|
+
* @param [options.retire] {(id: string) => boolean} which existing method
|
|
50
|
+
* ids and relation references leave the document in the same entry
|
|
51
|
+
* @returns {object} the merged `verificationMethods` and the five relations,
|
|
52
|
+
* as the account-entry seam takes them
|
|
53
|
+
*/
|
|
54
|
+
export declare function mergeVerificationMethods({ doc, methods, relations, retire }: {
|
|
55
|
+
doc: {
|
|
56
|
+
verificationMethod?: VerificationMethod[];
|
|
57
|
+
authentication?: Array<string | {
|
|
58
|
+
id?: string;
|
|
59
|
+
}>;
|
|
60
|
+
assertionMethod?: Array<string | {
|
|
61
|
+
id?: string;
|
|
62
|
+
}>;
|
|
63
|
+
keyAgreement?: Array<string | {
|
|
64
|
+
id?: string;
|
|
65
|
+
}>;
|
|
66
|
+
capabilityInvocation?: Array<string | {
|
|
67
|
+
id?: string;
|
|
68
|
+
}>;
|
|
69
|
+
capabilityDelegation?: Array<string | {
|
|
70
|
+
id?: string;
|
|
71
|
+
}>;
|
|
72
|
+
};
|
|
73
|
+
methods: VerificationMethod[];
|
|
74
|
+
relations: RelationMembership;
|
|
75
|
+
retire?: (id: string) => boolean;
|
|
76
|
+
}): {
|
|
77
|
+
verificationMethods: VerificationMethod[];
|
|
78
|
+
authentication: string[];
|
|
79
|
+
assertionMethod: string[];
|
|
80
|
+
keyAgreement: string[];
|
|
81
|
+
capabilityInvocation: string[];
|
|
82
|
+
capabilityDelegation: string[];
|
|
83
|
+
};
|
|
84
|
+
//# sourceMappingURL=mergeMethods.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mergeMethods.d.ts","sourceRoot":"","sources":["../../src/webvh/mergeMethods.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAGnE;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;IAC1B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC/B,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAA;CAChC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,wBAAwB,CAAC,EACvC,GAAG,EACH,OAAO,EACP,SAAS,EACT,MAAoB,EACrB,EAAE;IACD,GAAG,EAAE;QACH,kBAAkB,CAAC,EAAE,kBAAkB,EAAE,CAAA;QACzC,cAAc,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG;YAAE,EAAE,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;QAChD,eAAe,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG;YAAE,EAAE,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;QACjD,YAAY,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG;YAAE,EAAE,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;QAC9C,oBAAoB,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG;YAAE,EAAE,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;QACtD,oBAAoB,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG;YAAE,EAAE,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KACvD,CAAA;IACD,OAAO,EAAE,kBAAkB,EAAE,CAAA;IAC7B,SAAS,EAAE,kBAAkB,CAAA;IAC7B,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAA;CACjC,GAAG;IACF,mBAAmB,EAAE,kBAAkB,EAAE,CAAA;IACzC,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,eAAe,EAAE,MAAM,EAAE,CAAA;IACzB,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,oBAAoB,EAAE,MAAM,EAAE,CAAA;IAC9B,oBAAoB,EAAE,MAAM,EAAE,CAAA;CAC/B,CAwCA"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { relationIds } from '../resourceLog/document.js';
|
|
2
|
+
/**
|
|
3
|
+
* Merges verification methods into a published document across the five
|
|
4
|
+
* relations. `verificationMethod` keeps every existing method the predicate
|
|
5
|
+
* does not retire and that no added method replaces by id, then the added
|
|
6
|
+
* methods in order; each relation keeps its existing references (retired ones
|
|
7
|
+
* dropped) and then the ids `relations` names for it, deduped.
|
|
8
|
+
*
|
|
9
|
+
* The retirement predicate runs over the existing document only, and the
|
|
10
|
+
* added ids join afterwards: a method this entry publishes may already stand
|
|
11
|
+
* in a relation (a reinstalled ladder VM, say), and filtering the union would
|
|
12
|
+
* strike the very method being published.
|
|
13
|
+
*
|
|
14
|
+
* @param options {object}
|
|
15
|
+
* @param options.doc {object} the published document the entry extends
|
|
16
|
+
* @param options.methods {VerificationMethod[]} the methods to publish, in
|
|
17
|
+
* the order they land in `verificationMethod`
|
|
18
|
+
* @param options.relations {RelationMembership} the ids each relation gains
|
|
19
|
+
* @param [options.retire] {(id: string) => boolean} which existing method
|
|
20
|
+
* ids and relation references leave the document in the same entry
|
|
21
|
+
* @returns {object} the merged `verificationMethods` and the five relations,
|
|
22
|
+
* as the account-entry seam takes them
|
|
23
|
+
*/
|
|
24
|
+
export function mergeVerificationMethods({ doc, methods, relations, retire = () => false }) {
|
|
25
|
+
const retired = (id) => id !== undefined && retire(id);
|
|
26
|
+
const existingMethods = doc.verificationMethod ?? [];
|
|
27
|
+
const verificationMethods = [
|
|
28
|
+
...existingMethods.filter(method => !retired(method.id) && !methods.some(added => added.id === method.id)),
|
|
29
|
+
...methods
|
|
30
|
+
];
|
|
31
|
+
const withReferences = (relation, ids) => [
|
|
32
|
+
...new Set([
|
|
33
|
+
...relationIds(relation).filter(id => !retired(id)),
|
|
34
|
+
...(ids ?? [])
|
|
35
|
+
])
|
|
36
|
+
];
|
|
37
|
+
return {
|
|
38
|
+
verificationMethods,
|
|
39
|
+
authentication: withReferences(doc.authentication, relations.authentication),
|
|
40
|
+
assertionMethod: withReferences(doc.assertionMethod, relations.assertionMethod),
|
|
41
|
+
keyAgreement: withReferences(doc.keyAgreement, relations.keyAgreement),
|
|
42
|
+
capabilityInvocation: withReferences(doc.capabilityInvocation, relations.capabilityInvocation),
|
|
43
|
+
capabilityDelegation: withReferences(doc.capabilityDelegation, relations.capabilityDelegation)
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=mergeMethods.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mergeMethods.js","sourceRoot":"","sources":["../../src/webvh/mergeMethods.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAexD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,wBAAwB,CAAC,EACvC,GAAG,EACH,OAAO,EACP,SAAS,EACT,MAAM,GAAG,GAAG,EAAE,CAAC,KAAK,EAarB;IAQC,MAAM,OAAO,GAAG,CAAC,EAAsB,EAAW,EAAE,CAClD,EAAE,KAAK,SAAS,IAAI,MAAM,CAAC,EAAE,CAAC,CAAA;IAChC,MAAM,eAAe,GAAG,GAAG,CAAC,kBAAkB,IAAI,EAAE,CAAA;IACpD,MAAM,mBAAmB,GAAG;QAC1B,GAAG,eAAe,CAAC,MAAM,CACvB,MAAM,CAAC,EAAE,CACP,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,CACxE;QACD,GAAG,OAAO;KACX,CAAA;IACD,MAAM,cAAc,GAAG,CACrB,QAAqD,EACrD,GAAyB,EACzB,EAAE,CAAC;QACH,GAAG,IAAI,GAAG,CAAC;YACT,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACnD,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;SACf,CAAC;KACH,CAAA;IACD,OAAO;QACL,mBAAmB;QACnB,cAAc,EAAE,cAAc,CAC5B,GAAG,CAAC,cAAc,EAClB,SAAS,CAAC,cAAc,CACzB;QACD,eAAe,EAAE,cAAc,CAC7B,GAAG,CAAC,eAAe,EACnB,SAAS,CAAC,eAAe,CAC1B;QACD,YAAY,EAAE,cAAc,CAAC,GAAG,CAAC,YAAY,EAAE,SAAS,CAAC,YAAY,CAAC;QACtE,oBAAoB,EAAE,cAAc,CAClC,GAAG,CAAC,oBAAoB,EACxB,SAAS,CAAC,oBAAoB,CAC/B;QACD,oBAAoB,EAAE,cAAc,CAClC,GAAG,CAAC,oBAAoB,EACxB,SAAS,CAAC,oBAAoB,CAC/B;KACF,CAAA;AACH,CAAC"}
|
|
@@ -86,12 +86,22 @@ export declare function clientRemovalTarget({ published, client }: {
|
|
|
86
86
|
* these to `updateDID` beside its own signer -- an enrolled client's update
|
|
87
87
|
* key for a revocation, a revealed ladder rung for a forget.
|
|
88
88
|
*
|
|
89
|
+
* The latent commitments excluded from that attribution are derived here
|
|
90
|
+
* from the log (`standingCredentialLatentHashes`), so no caller has to know
|
|
91
|
+
* the account's standing credentials to remove a client correctly; a caller's
|
|
92
|
+
* own list is excluded beside them as a cross-check and vouches for what the
|
|
93
|
+
* walk could not read (a credential an earlier recovery's add-and-retire
|
|
94
|
+
* entry introduced has no anchor, and a registry still names its hash). The
|
|
95
|
+
* derived set never overrides the decision-0007 position, so a walk that
|
|
96
|
+
* over-claimed cannot leave the client's own staged hash standing.
|
|
97
|
+
*
|
|
89
98
|
* @param options {object}
|
|
90
99
|
* @param options.published {PublishedWebvhLog}
|
|
91
100
|
* @param options.target {ClientRemovalTarget}
|
|
92
101
|
* @param [options.knownLatentHashes] {string[]} standing latent commitments
|
|
93
|
-
* the caller vouches for
|
|
94
|
-
* excluded from the
|
|
102
|
+
* the caller vouches for beyond the derived set (a recovery registry's
|
|
103
|
+
* update-key hashes, a ladder's own rung hashes), excluded from the
|
|
104
|
+
* staged-hash attribution alongside it
|
|
95
105
|
* @returns {Promise<object>} the `updateDID` field bundle
|
|
96
106
|
*/
|
|
97
107
|
export declare function clientRemovalFields({ published, target, knownLatentHashes }: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"revokeClient.d.ts","sourceRoot":"","sources":["../../src/webvh/revokeClient.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"revokeClient.d.ts","sourceRoot":"","sources":["../../src/webvh/revokeClient.ts"],"names":[],"mappings":"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"}
|