@interop/wallet-core 0.61.0 → 0.65.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 +41 -16
- package/dist/clientAnnex/credentialAnchoredGenesis.d.ts +46 -26
- package/dist/clientAnnex/credentialAnchoredGenesis.d.ts.map +1 -1
- package/dist/clientAnnex/credentialAnchoredGenesis.js +91 -39
- package/dist/clientAnnex/credentialAnchoredGenesis.js.map +1 -1
- package/dist/clientAnnex/establish.d.ts +55 -34
- package/dist/clientAnnex/establish.d.ts.map +1 -1
- package/dist/clientAnnex/establish.js +102 -56
- package/dist/clientAnnex/establish.js.map +1 -1
- package/dist/clientAnnex/forget.d.ts +16 -2
- package/dist/clientAnnex/forget.d.ts.map +1 -1
- package/dist/clientAnnex/forget.js +11 -9
- package/dist/clientAnnex/forget.js.map +1 -1
- package/dist/clientAnnex/forgetLast.d.ts +126 -35
- package/dist/clientAnnex/forgetLast.d.ts.map +1 -1
- package/dist/clientAnnex/forgetLast.js +208 -60
- package/dist/clientAnnex/forgetLast.js.map +1 -1
- package/dist/clientAnnex/gc.d.ts +3 -2
- package/dist/clientAnnex/gc.d.ts.map +1 -1
- package/dist/clientAnnex/gc.js +7 -7
- package/dist/clientAnnex/gc.js.map +1 -1
- package/dist/clientAnnex/heal.d.ts +101 -33
- package/dist/clientAnnex/heal.d.ts.map +1 -1
- package/dist/clientAnnex/heal.js +559 -212
- package/dist/clientAnnex/heal.js.map +1 -1
- package/dist/clientAnnex/index.d.ts +21 -5
- package/dist/clientAnnex/index.d.ts.map +1 -1
- package/dist/clientAnnex/index.js +24 -5
- package/dist/clientAnnex/index.js.map +1 -1
- package/dist/clientAnnex/ladder.d.ts +304 -18
- package/dist/clientAnnex/ladder.d.ts.map +1 -1
- package/dist/clientAnnex/ladder.js +942 -64
- package/dist/clientAnnex/ladder.js.map +1 -1
- package/dist/clientAnnex/ladderAnchored.d.ts +261 -28
- package/dist/clientAnnex/ladderAnchored.d.ts.map +1 -1
- package/dist/clientAnnex/ladderAnchored.js +521 -295
- package/dist/clientAnnex/ladderAnchored.js.map +1 -1
- package/dist/clientAnnex/log.d.ts +193 -38
- package/dist/clientAnnex/log.d.ts.map +1 -1
- package/dist/clientAnnex/log.js +445 -190
- package/dist/clientAnnex/log.js.map +1 -1
- package/dist/clientAnnex/mend.d.ts +12 -6
- package/dist/clientAnnex/mend.d.ts.map +1 -1
- package/dist/clientAnnex/mend.js +26 -12
- package/dist/clientAnnex/mend.js.map +1 -1
- package/dist/clientAnnex/recoveryLadderAnchored.d.ts +38 -11
- package/dist/clientAnnex/recoveryLadderAnchored.d.ts.map +1 -1
- package/dist/clientAnnex/recoveryLadderAnchored.js +177 -55
- package/dist/clientAnnex/recoveryLadderAnchored.js.map +1 -1
- package/dist/clientAnnex/spaceCapability.d.ts +123 -0
- package/dist/clientAnnex/spaceCapability.d.ts.map +1 -0
- package/dist/clientAnnex/spaceCapability.js +152 -0
- package/dist/clientAnnex/spaceCapability.js.map +1 -0
- package/dist/clientAnnex/stages.d.ts +63 -0
- package/dist/clientAnnex/stages.d.ts.map +1 -0
- package/dist/clientAnnex/stages.js +64 -0
- package/dist/clientAnnex/stages.js.map +1 -0
- package/dist/clientAnnex/zcap.d.ts +1 -1
- package/dist/clientAnnex/zcap.d.ts.map +1 -1
- package/dist/clientAnnex/zcap.js +42 -35
- package/dist/clientAnnex/zcap.js.map +1 -1
- package/dist/clients/policy.d.ts +15 -1
- package/dist/clients/policy.d.ts.map +1 -1
- package/dist/clients/policy.js +12 -6
- package/dist/clients/policy.js.map +1 -1
- package/dist/clients/revocation.d.ts +18 -10
- package/dist/clients/revocation.d.ts.map +1 -1
- package/dist/clients/revocation.js +13 -5
- package/dist/clients/revocation.js.map +1 -1
- package/dist/clients/rosterPolicy.d.ts +10 -2
- package/dist/clients/rosterPolicy.d.ts.map +1 -1
- package/dist/clients/rosterPolicy.js +41 -24
- package/dist/clients/rosterPolicy.js.map +1 -1
- package/dist/descriptors/acquire.d.ts.map +1 -1
- package/dist/descriptors/acquire.js +6 -23
- package/dist/descriptors/acquire.js.map +1 -1
- package/dist/descriptors/cipher.d.ts.map +1 -1
- package/dist/descriptors/cipher.js +5 -0
- package/dist/descriptors/cipher.js.map +1 -1
- package/dist/descriptors/errors.d.ts +43 -0
- package/dist/descriptors/errors.d.ts.map +1 -0
- package/dist/descriptors/errors.js +45 -0
- package/dist/descriptors/errors.js.map +1 -0
- package/dist/descriptors/index.d.ts +5 -0
- package/dist/descriptors/index.d.ts.map +1 -1
- package/dist/descriptors/index.js +5 -0
- package/dist/descriptors/index.js.map +1 -1
- package/dist/enrollment/enrollment.d.ts +37 -10
- package/dist/enrollment/enrollment.d.ts.map +1 -1
- package/dist/enrollment/enrollment.js +52 -15
- package/dist/enrollment/enrollment.js.map +1 -1
- package/dist/genesis/accountGenesis.d.ts +42 -11
- package/dist/genesis/accountGenesis.d.ts.map +1 -1
- package/dist/genesis/accountGenesis.js +80 -22
- package/dist/genesis/accountGenesis.js.map +1 -1
- package/dist/genesis/index.d.ts +3 -1
- package/dist/genesis/index.d.ts.map +1 -1
- package/dist/genesis/index.js +3 -1
- package/dist/genesis/index.js.map +1 -1
- package/dist/identity/agents.d.ts +17 -1
- package/dist/identity/agents.d.ts.map +1 -1
- package/dist/identity/agents.js +24 -8
- package/dist/identity/agents.js.map +1 -1
- package/dist/identity/index.d.ts +3 -1
- package/dist/identity/index.d.ts.map +1 -1
- package/dist/identity/index.js +3 -1
- package/dist/identity/index.js.map +1 -1
- package/dist/index.d.ts +6 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -3
- package/dist/index.js.map +1 -1
- package/dist/keyring/index.d.ts +2 -1
- package/dist/keyring/index.d.ts.map +1 -1
- package/dist/keyring/index.js +2 -1
- package/dist/keyring/index.js.map +1 -1
- package/dist/keyring/record.d.ts.map +1 -1
- package/dist/keyring/record.js +3 -6
- package/dist/keyring/record.js.map +1 -1
- package/dist/keyring/unlockSpace.d.ts +14 -5
- package/dist/keyring/unlockSpace.d.ts.map +1 -1
- package/dist/keyring/unlockSpace.js +31 -36
- package/dist/keyring/unlockSpace.js.map +1 -1
- package/dist/keys/index.d.ts +10 -6
- package/dist/keys/index.d.ts.map +1 -1
- package/dist/keys/index.js +9 -5
- package/dist/keys/index.js.map +1 -1
- package/dist/keys/rosterLogStore.d.ts +12 -11
- package/dist/keys/rosterLogStore.d.ts.map +1 -1
- package/dist/keys/rosterLogStore.js +15 -13
- package/dist/keys/rosterLogStore.js.map +1 -1
- package/dist/keys/rosterStore.d.ts +3 -6
- package/dist/keys/rosterStore.d.ts.map +1 -1
- package/dist/keys/rosterStore.js +10 -9
- package/dist/keys/rosterStore.js.map +1 -1
- package/dist/keys/spaceEpochs.d.ts.map +1 -1
- package/dist/keys/spaceEpochs.js +2 -3
- package/dist/keys/spaceEpochs.js.map +1 -1
- package/dist/keys/userKeyRoster.d.ts +89 -9
- package/dist/keys/userKeyRoster.d.ts.map +1 -1
- package/dist/keys/userKeyRoster.js +262 -19
- package/dist/keys/userKeyRoster.js.map +1 -1
- package/dist/keys/userKeyRosterCascade.d.ts +7 -6
- package/dist/keys/userKeyRosterCascade.d.ts.map +1 -1
- package/dist/keys/userKeyRosterCascade.js +7 -6
- package/dist/keys/userKeyRosterCascade.js.map +1 -1
- package/dist/keys/wasLabelsStore.d.ts +9 -2
- package/dist/keys/wasLabelsStore.d.ts.map +1 -1
- package/dist/keys/wasLabelsStore.js +14 -6
- package/dist/keys/wasLabelsStore.js.map +1 -1
- package/dist/log.d.ts +7 -2
- package/dist/log.d.ts.map +1 -1
- package/dist/log.js +6 -1
- package/dist/log.js.map +1 -1
- 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/recoveryCode.d.ts +27 -7
- package/dist/recovery/recoveryCode.d.ts.map +1 -1
- package/dist/recovery/recoveryCode.js +18 -6
- package/dist/recovery/recoveryCode.js.map +1 -1
- package/dist/recovery/recoveryDelegation.d.ts +4 -1
- package/dist/recovery/recoveryDelegation.d.ts.map +1 -1
- package/dist/recovery/recoveryDelegation.js +25 -36
- package/dist/recovery/recoveryDelegation.js.map +1 -1
- package/dist/recovery/recoveryWebvh.d.ts +117 -65
- package/dist/recovery/recoveryWebvh.d.ts.map +1 -1
- package/dist/recovery/recoveryWebvh.js +279 -126
- package/dist/recovery/recoveryWebvh.js.map +1 -1
- package/dist/request/classify.d.ts +32 -8
- package/dist/request/classify.d.ts.map +1 -1
- package/dist/request/classify.js +39 -14
- package/dist/request/classify.js.map +1 -1
- package/dist/request/ephemeralExchange.d.ts +1 -6
- package/dist/request/ephemeralExchange.d.ts.map +1 -1
- package/dist/request/ephemeralExchange.js.map +1 -1
- package/dist/request/onboarding.d.ts.map +1 -1
- package/dist/request/onboarding.js +2 -2
- package/dist/request/onboarding.js.map +1 -1
- package/dist/request/parse.d.ts.map +1 -1
- package/dist/request/parse.js +2 -3
- package/dist/request/parse.js.map +1 -1
- package/dist/resourceLog/controller.d.ts +34 -12
- package/dist/resourceLog/controller.d.ts.map +1 -1
- package/dist/resourceLog/controller.js +79 -86
- package/dist/resourceLog/controller.js.map +1 -1
- package/dist/resourceLog/document.d.ts +182 -0
- package/dist/resourceLog/document.d.ts.map +1 -0
- package/dist/resourceLog/document.js +159 -0
- package/dist/resourceLog/document.js.map +1 -0
- package/dist/resourceLog/errors.d.ts +47 -8
- package/dist/resourceLog/errors.d.ts.map +1 -1
- package/dist/resourceLog/errors.js +54 -8
- package/dist/resourceLog/errors.js.map +1 -1
- package/dist/resourceLog/index.d.ts +7 -3
- package/dist/resourceLog/index.d.ts.map +1 -1
- package/dist/resourceLog/index.js +7 -3
- package/dist/resourceLog/index.js.map +1 -1
- package/dist/resourceLog/ladderRungs.d.ts +35 -0
- package/dist/resourceLog/ladderRungs.d.ts.map +1 -0
- package/dist/resourceLog/ladderRungs.js +352 -0
- package/dist/resourceLog/ladderRungs.js.map +1 -0
- package/dist/resourceLog/license.d.ts +42 -17
- package/dist/resourceLog/license.d.ts.map +1 -1
- package/dist/resourceLog/license.js +38 -24
- package/dist/resourceLog/license.js.map +1 -1
- package/dist/space/activity.d.ts +15 -15
- package/dist/space/activity.d.ts.map +1 -1
- package/dist/space/activity.js +15 -15
- package/dist/space/activity.js.map +1 -1
- package/dist/space/collections.d.ts +11 -0
- package/dist/space/collections.d.ts.map +1 -1
- package/dist/space/collections.js +13 -0
- package/dist/space/collections.js.map +1 -1
- package/dist/space/deleteSpace.d.ts +28 -0
- package/dist/space/deleteSpace.d.ts.map +1 -0
- package/dist/space/deleteSpace.js +44 -0
- package/dist/space/deleteSpace.js.map +1 -0
- package/dist/space/errors.d.ts.map +1 -1
- package/dist/space/errors.js +0 -1
- package/dist/space/errors.js.map +1 -1
- package/dist/space/index.d.ts +6 -0
- package/dist/space/index.d.ts.map +1 -1
- package/dist/space/index.js +6 -0
- package/dist/space/index.js.map +1 -1
- package/dist/space/plaintextCollection.d.ts +43 -0
- package/dist/space/plaintextCollection.d.ts.map +1 -0
- package/dist/space/plaintextCollection.js +17 -0
- package/dist/space/plaintextCollection.js.map +1 -0
- package/dist/stages.d.ts +23 -0
- package/dist/stages.d.ts.map +1 -0
- package/dist/stages.js +23 -0
- package/dist/stages.js.map +1 -0
- package/dist/sync/index.d.ts +7 -0
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/index.js +7 -0
- package/dist/sync/index.js.map +1 -1
- package/dist/sync/push.js +4 -4
- package/dist/sync/push.js.map +1 -1
- package/dist/sync/remint.js +2 -2
- package/dist/sync/remint.js.map +1 -1
- package/dist/sync/types.d.ts +41 -1
- package/dist/sync/types.d.ts.map +1 -1
- package/dist/sync/types.js +47 -1
- package/dist/sync/types.js.map +1 -1
- package/dist/unlock/index.d.ts +6 -2
- package/dist/unlock/index.d.ts.map +1 -1
- package/dist/unlock/index.js +5 -1
- package/dist/unlock/index.js.map +1 -1
- package/dist/unlock/retire.d.ts +95 -14
- package/dist/unlock/retire.d.ts.map +1 -1
- package/dist/unlock/retire.js +102 -10
- package/dist/unlock/retire.js.map +1 -1
- package/dist/unlock/standingClient.d.ts.map +1 -1
- package/dist/unlock/standingClient.js +5 -1
- package/dist/unlock/standingClient.js.map +1 -1
- package/dist/unlock/standingWebvh.d.ts +341 -49
- package/dist/unlock/standingWebvh.d.ts.map +1 -1
- package/dist/unlock/standingWebvh.js +608 -164
- package/dist/unlock/standingWebvh.js.map +1 -1
- package/dist/webvh/accountEntry.d.ts +146 -0
- package/dist/webvh/accountEntry.d.ts.map +1 -0
- package/dist/webvh/accountEntry.js +239 -0
- package/dist/webvh/accountEntry.js.map +1 -0
- package/dist/webvh/didWeb.d.ts +12 -7
- package/dist/webvh/didWeb.d.ts.map +1 -1
- package/dist/webvh/didWeb.js +2 -2
- package/dist/webvh/didWeb.js.map +1 -1
- package/dist/webvh/didWebProjection.d.ts +164 -0
- package/dist/webvh/didWebProjection.d.ts.map +1 -0
- package/dist/webvh/didWebProjection.js +230 -0
- package/dist/webvh/didWebProjection.js.map +1 -0
- package/dist/webvh/didWebvh.d.ts +278 -138
- package/dist/webvh/didWebvh.d.ts.map +1 -1
- package/dist/webvh/didWebvh.js +314 -345
- package/dist/webvh/didWebvh.js.map +1 -1
- package/dist/webvh/enrollClient.d.ts +65 -0
- package/dist/webvh/enrollClient.d.ts.map +1 -0
- package/dist/webvh/enrollClient.js +172 -0
- package/dist/webvh/enrollClient.js.map +1 -0
- package/dist/webvh/index.d.ts +37 -12
- package/dist/webvh/index.d.ts.map +1 -1
- package/dist/webvh/index.js +33 -10
- package/dist/webvh/index.js.map +1 -1
- package/dist/webvh/listClients.d.ts +1 -33
- package/dist/webvh/listClients.d.ts.map +1 -1
- package/dist/webvh/listClients.js +2 -28
- package/dist/webvh/listClients.js.map +1 -1
- package/dist/webvh/revokeClient.d.ts +89 -11
- package/dist/webvh/revokeClient.d.ts.map +1 -1
- package/dist/webvh/revokeClient.js +182 -47
- package/dist/webvh/revokeClient.js.map +1 -1
- package/dist/webvh/standingZcap.d.ts +61 -14
- package/dist/webvh/standingZcap.d.ts.map +1 -1
- package/dist/webvh/standingZcap.js +91 -0
- package/dist/webvh/standingZcap.js.map +1 -1
- package/dist/webvh/verifyLog.d.ts +59 -5
- package/dist/webvh/verifyLog.d.ts.map +1 -1
- package/dist/webvh/verifyLog.js +76 -11
- package/dist/webvh/verifyLog.js.map +1 -1
- package/dist/webvh/wasIdStore.d.ts +8 -8
- package/dist/webvh/wasIdStore.d.ts.map +1 -1
- package/dist/webvh/wasIdStore.js +39 -14
- package/dist/webvh/wasIdStore.js.map +1 -1
- package/dist/webvh/zcap.d.ts +14 -1
- package/dist/webvh/zcap.d.ts.map +1 -1
- package/dist/webvh/zcap.js +3 -27
- package/dist/webvh/zcap.js.map +1 -1
- package/package.json +5 -5
- package/dist/webvh/keyAgreement.d.ts +0 -72
- package/dist/webvh/keyAgreement.d.ts.map +0 -1
- package/dist/webvh/keyAgreement.js +0 -47
- package/dist/webvh/keyAgreement.js.map +0 -1
|
@@ -2,29 +2,33 @@
|
|
|
2
2
|
* Copyright (c) 2026 Interop Alliance. All rights reserved.
|
|
3
3
|
*/
|
|
4
4
|
/**
|
|
5
|
-
* The did:webvh half of recovery-code lifecycle: the split configuration
|
|
6
|
-
*
|
|
7
|
-
* code's `keyAgreement` verification method
|
|
8
|
-
* deliberately unmarked; a recovery key is
|
|
9
|
-
* since it appears
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* code's
|
|
13
|
-
*
|
|
14
|
-
*
|
|
5
|
+
* The did:webvh half of recovery-code lifecycle: the split configuration a
|
|
6
|
+
* code holds as a standing unlock credential that retires on spend. At
|
|
7
|
+
* issuance the document gains the code's `keyAgreement` verification method
|
|
8
|
+
* (an ordinary Multikey entry -- deliberately unmarked; a recovery key is
|
|
9
|
+
* distinguishable structurally, since it appears under `keyAgreement` and
|
|
10
|
+
* `assertionMethod`/`capabilityDelegation` while every enrolled client also
|
|
11
|
+
* publishes an invocation relationship, so client listings key on
|
|
12
|
+
* `capabilityInvocation` and never see it), the code's ladder VM, and its
|
|
13
|
+
* rung-0 hash in `nextKeyHashes` -- decryption and delegation standing,
|
|
14
|
+
* update authority latent: rung 0 joins `updateKeys` nowhere, and every key
|
|
15
|
+
* of the set exists nowhere until the code is typed.
|
|
15
16
|
*
|
|
16
|
-
* At recovery time the pre-committed
|
|
17
|
+
* At recovery time the pre-committed rung 0 reveals itself to sign the
|
|
17
18
|
* self-enrolling continuation, two entries:
|
|
18
19
|
*
|
|
19
|
-
* 1. **Reveal + commit**:
|
|
20
|
-
*
|
|
21
|
-
* and `nextKeyHashes` extends with the NEW
|
|
22
|
-
* staged-key hashes plus the replacement
|
|
20
|
+
* 1. **Reveal + commit**: rung 0 joins `updateKeys` (its hash stands
|
|
21
|
+
* committed since issuance, which is what makes the entry verify -- the
|
|
22
|
+
* ordinary ladder reveal) and `nextKeyHashes` extends with the NEW
|
|
23
|
+
* ordinary client's update- and staged-key hashes plus the replacement
|
|
24
|
+
* code's rung-0 hash.
|
|
23
25
|
* 2. **Add + retire**: signed by the new client's update key (revealed from
|
|
24
26
|
* the commit), this entry publishes the new client's verification methods
|
|
25
|
-
* and update key, removes the spent code's `keyAgreement` VM
|
|
26
|
-
*
|
|
27
|
-
*
|
|
27
|
+
* and update key, removes the spent code's `keyAgreement` VM and its
|
|
28
|
+
* ladder VM (with every other standing credential's, by the relation
|
|
29
|
+
* asymmetry), publishes the replacement code's inventory, and drops the
|
|
30
|
+
* spent code's revealed rung and its hash -- so no recovery authority
|
|
31
|
+
* stands afterwards.
|
|
28
32
|
*
|
|
29
33
|
* Both entries are written through the caller's store seam; the recovery
|
|
30
34
|
* continuation publishes ONLY `did.jsonl` (the delegation the record carries
|
|
@@ -34,8 +38,53 @@
|
|
|
34
38
|
* with the same key material converges without forking the log.
|
|
35
39
|
*/
|
|
36
40
|
import { deriveNextKeyHash, updateDID } from '@interop/did-method-webvh';
|
|
37
|
-
import { assertCanonicalClientKeys, assertCarryOverCommitments,
|
|
41
|
+
import { assertCanonicalClientKeys, assertCarryOverCommitments, effectiveParameters, ladderVerificationMethod, markedVerificationMethodPair, MULTIKEY_VM_TYPE, publishEntryPinned, readPublishedLogOrThrow, servedHead, updateKeySigner, withLogConflictRetry } from '../webvh/didWebvh.js';
|
|
38
42
|
import { publishUnlockKey, removeUnlockKey } from '../unlock/standingWebvh.js';
|
|
43
|
+
import { credentialKeyAgreementMethods, ladderVmIds, relationIds } from '../resourceLog/document.js';
|
|
44
|
+
// The base-side dependency the lint config pins: the ladder ATTRIBUTION
|
|
45
|
+
// helpers only, never the annex log machinery. The add-and-retire entry
|
|
46
|
+
// resolves each retired credential's standing rungs from the log with them.
|
|
47
|
+
import { assertNextKeyHashesRemain, attributeRetiredCredentialRungs, retiredCredentialRungsBeforeKey } from '../clientAnnex/ladder.js';
|
|
48
|
+
/**
|
|
49
|
+
* What the add-and-retire entry retired, read back OFF THE LOG -- the resumed
|
|
50
|
+
* spend's answer to the same question the live run answers from the document
|
|
51
|
+
* it is editing. A run torn after that entry but before the caller's registry
|
|
52
|
+
* and unlock-Space teardown resumes into the already-complete branch, and
|
|
53
|
+
* without this it would be told nothing was retired and leave every other
|
|
54
|
+
* credential's registry entry standing.
|
|
55
|
+
*
|
|
56
|
+
* The entry is located by its own signature on the log: it is the first entry
|
|
57
|
+
* whose effective `updateKeys` authorize the successor key (the fresh
|
|
58
|
+
* ladder's rung 0 on the transient continuation, the new client's update key
|
|
59
|
+
* on the remembered one), which only that entry writes. What it retired is
|
|
60
|
+
* then the credential-class `keyAgreement` ids its predecessor published and
|
|
61
|
+
* it does not, less the spent code's own id -- the same exclusion the live
|
|
62
|
+
* branch makes, since the caller retires that one by name.
|
|
63
|
+
*
|
|
64
|
+
* @param options {object}
|
|
65
|
+
* @param options.log {DIDLog} the verified account log
|
|
66
|
+
* @param options.did {string} the account DID the log resolves to
|
|
67
|
+
* @param options.successorKeyMultibase {string} the update key only the
|
|
68
|
+
* add-and-retire entry authorizes
|
|
69
|
+
* @param options.spentVmId {string} the spent code's key-agreement
|
|
70
|
+
* verification-method id, excluded from the result
|
|
71
|
+
* @returns {string[]} the retired credentials' key-agreement ids, empty
|
|
72
|
+
* when no entry authorizes the successor key or it is the genesis entry
|
|
73
|
+
*/
|
|
74
|
+
export function retiredCredentialVmIdsFromLog({ log, did, successorKeyMultibase, spentVmId }) {
|
|
75
|
+
const params = effectiveParameters(log);
|
|
76
|
+
const index = params.findIndex(entry => (entry.updateKeys ?? []).includes(successorKeyMultibase));
|
|
77
|
+
const previous = index > 0 ? log[index - 1]?.state : undefined;
|
|
78
|
+
const entryDoc = index > 0 ? log[index]?.state : undefined;
|
|
79
|
+
if (previous === undefined || entryDoc === undefined) {
|
|
80
|
+
return [];
|
|
81
|
+
}
|
|
82
|
+
const standing = new Set(credentialKeyAgreementMethods({ doc: entryDoc, did }).map(method => method.id));
|
|
83
|
+
return credentialKeyAgreementMethods({ doc: previous, did })
|
|
84
|
+
.map(method => method.id)
|
|
85
|
+
.filter((id) => typeof id === 'string')
|
|
86
|
+
.filter(id => !standing.has(id) && id !== spentVmId);
|
|
87
|
+
}
|
|
39
88
|
/**
|
|
40
89
|
* The verification-method id a code's key-agreement key publishes under --
|
|
41
90
|
* the ordinary `<did>#<multibase>` form, indistinguishable by id from any
|
|
@@ -64,64 +113,33 @@ export class RecoveryKeyNotCommittedError extends Error {
|
|
|
64
113
|
}
|
|
65
114
|
}
|
|
66
115
|
/**
|
|
67
|
-
*
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
* against the pinned head is refused (`ResourceLogContinuityError`)
|
|
76
|
-
* @param [options.logId] {string} the account log's pin slot
|
|
77
|
-
* (`accountLogPinId({ spaceId })`); required whenever a `pinStore` is
|
|
78
|
-
* supplied
|
|
79
|
-
* @returns {Promise<PublishedWebvhLog>}
|
|
80
|
-
*/
|
|
81
|
-
export async function readLogOrThrow({ store, expectedDid, pinStore, logId }) {
|
|
82
|
-
// readPublishedLog only calls getIdResourceRaw, so the narrow seam is safe.
|
|
83
|
-
const published = await readPublishedLog({
|
|
84
|
-
idStore: store,
|
|
85
|
-
...(expectedDid !== undefined ? { expectedDid } : {}),
|
|
86
|
-
...(pinStore ? { pinStore } : {}),
|
|
87
|
-
...(logId !== undefined ? { logId } : {})
|
|
88
|
-
});
|
|
89
|
-
if (!published) {
|
|
90
|
-
throw new Error('did:webvh: did.jsonl is missing; nothing to recover.');
|
|
91
|
-
}
|
|
92
|
-
return published;
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Publishes `did.jsonl` through the narrow recovery seam -- the log only,
|
|
96
|
-
* never `did.json` (the delegation covers nothing else; the recovered
|
|
97
|
-
* session republishes the projection once it is the controller). The write is
|
|
98
|
-
* conditional on the read the entry was built on, and a lost race surfaces as
|
|
99
|
-
* a `WebvhLogConflictError` (the mapping lives in `putLogResource`).
|
|
116
|
+
* ISSUANCE: publishes a recovery code's split configuration into the
|
|
117
|
+
* document -- the code's `keyAgreement` verification method (an ordinary,
|
|
118
|
+
* unmarked Multikey entry, the key published verbatim: a code is
|
|
119
|
+
* high-entropy, so no commitment is needed), its rung-0 hash committed in
|
|
120
|
+
* `nextKeyHashes`, and its ladder VM. The code's update key joins
|
|
121
|
+
* `updateKeys` nowhere. A thin wrapper over the
|
|
122
|
+
* standing unlock-key inventory core ({@link publishUnlockKey}), which owns
|
|
123
|
+
* idempotence and the conditional publish.
|
|
100
124
|
*
|
|
101
|
-
*
|
|
102
|
-
*
|
|
103
|
-
*
|
|
104
|
-
*
|
|
105
|
-
*
|
|
106
|
-
*/
|
|
107
|
-
export async function publishLogOnly({ store, log, ifMatch }) {
|
|
108
|
-
await putLogResource({ store, log, ifMatch });
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* ISSUANCE (run by an enrolled client, root authority): publishes a recovery
|
|
112
|
-
* code's split configuration into the document -- one entry adding the code's
|
|
113
|
-
* `keyAgreement` verification method (an ordinary, unmarked Multikey entry,
|
|
114
|
-
* the key published verbatim: a code is high-entropy, so no commitment is
|
|
115
|
-
* needed) and committing its update-key hash in `nextKeyHashes`. The code's
|
|
116
|
-
* update key joins `updateKeys` nowhere. A thin wrapper over the standing
|
|
117
|
-
* unlock-key inventory core ({@link publishUnlockKey}), which owns idempotence
|
|
118
|
-
* and the conditional publish.
|
|
125
|
+
* `part` is how the ladder branch splits the entry so the code's decryption
|
|
126
|
+
* material precedes its authority: a key entry (`'key'`), then the escrow,
|
|
127
|
+
* then an authority entry (`'authority'`) carrying the ladder VM and the
|
|
128
|
+
* rung-0 commitment. An enrolled client's issuance escrows before the entry
|
|
129
|
+
* and writes the merged `'all'` entry.
|
|
119
130
|
*
|
|
120
131
|
* @param options {object}
|
|
121
132
|
* @param options.idStore {WebvhIdStore}
|
|
122
|
-
* @param options.
|
|
123
|
-
* own did:webvh update-key seeds
|
|
133
|
+
* @param options.signer {AccountLogSigner} who signs the entry: the ISSUING
|
|
134
|
+
* client's own did:webvh update-key seeds, or the acting credential's
|
|
135
|
+
* ladder seed
|
|
124
136
|
* @param options.recovery {RecoveryPublicKeys} the code's public halves
|
|
137
|
+
* @param options.ladderSeed {Uint8Array} the code's OWN ladder seed,
|
|
138
|
+
* derived from the code bytes (`recoveryClientFromCode`). The entry
|
|
139
|
+
* installs that ladder's VM, and `recovery.updateKeyMultibase` is its
|
|
140
|
+
* rung 0
|
|
141
|
+
* @param [options.part] {string} `'all'` (the default), `'key'`, or
|
|
142
|
+
* `'authority'` -- see above
|
|
125
143
|
* @param [options.expectedDid] {string} the account DID the log must
|
|
126
144
|
* resolve to, from the caller's stored account pointer
|
|
127
145
|
* @param [options.pinStore] {ResourceLogPinStore} the caller's chain-head
|
|
@@ -133,16 +151,20 @@ export async function publishLogOnly({ store, log, ifMatch }) {
|
|
|
133
151
|
* @returns {Promise<{ did: string, doc: DIDDoc, log: DIDLog }>} the account
|
|
134
152
|
* DID and the document and log as this call leaves them
|
|
135
153
|
*/
|
|
136
|
-
export async function publishRecoveryKey({ idStore,
|
|
154
|
+
export async function publishRecoveryKey({ idStore, signer, recovery, ladderSeed, part, expectedDid, pinStore, logId }) {
|
|
137
155
|
return publishUnlockKey({
|
|
138
156
|
idStore,
|
|
139
|
-
|
|
157
|
+
signer,
|
|
140
158
|
unlockKeys: {
|
|
141
159
|
keyAgreement: {
|
|
142
160
|
publicKeyMultibase: recovery.keyAgreementKeyMultibase
|
|
143
161
|
},
|
|
144
162
|
updateKeyMultibase: recovery.updateKeyMultibase
|
|
145
163
|
},
|
|
164
|
+
// Every code carries a ladder, so the authority half of its inventory is
|
|
165
|
+
// that ladder's VM beside the rung-0 commitment.
|
|
166
|
+
ladderSeed,
|
|
167
|
+
...(part !== undefined ? { part } : {}),
|
|
146
168
|
...(expectedDid !== undefined ? { expectedDid } : {}),
|
|
147
169
|
...(pinStore ? { pinStore } : {}),
|
|
148
170
|
...(logId !== undefined ? { logId } : {}),
|
|
@@ -150,27 +172,48 @@ export async function publishRecoveryKey({ idStore, updateKeys, recovery, expect
|
|
|
150
172
|
});
|
|
151
173
|
}
|
|
152
174
|
/**
|
|
153
|
-
* REVOCATION
|
|
154
|
-
*
|
|
155
|
-
*
|
|
156
|
-
*
|
|
157
|
-
*
|
|
158
|
-
*
|
|
175
|
+
* REVOCATION: removes a recovery code's whole inventory from the document --
|
|
176
|
+
* its `keyAgreement` verification method, its committed rung-0 hash, and its
|
|
177
|
+
* ladder VM -- in one entry, through the same shared inventory core
|
|
178
|
+
* ({@link removeUnlockKey}). The roster-side half (rotating the user key
|
|
179
|
+
* epoch off the code's wrap) is the caller's, and runs after this so the
|
|
180
|
+
* resolver's document no longer backs the removed entry.
|
|
159
181
|
*
|
|
160
|
-
*
|
|
182
|
+
* The revoker holds neither the code bytes nor its ladder seed, so the VM
|
|
183
|
+
* claim is seedless: the removal attributes it from the log, anchored on the
|
|
184
|
+
* rung-0 update-key multibase the registry recorded at issuance
|
|
185
|
+
* (`recovery.updateKeyMultibase`). The claim is required rather than
|
|
186
|
+
* best-effort. A VM no attribution arm claims refuses the whole revocation
|
|
187
|
+
* with `UnclaimedLadderVmRetirementError` before anything is written, since a
|
|
188
|
+
* standing ladder VM whose credential is otherwise retired keeps its
|
|
189
|
+
* delegation authority -- including the DELETE-only capability on the account
|
|
190
|
+
* Space that the account-deletion ceremony mints.
|
|
191
|
+
*
|
|
192
|
+
* @param options {object} see {@link publishRecoveryKey}, except that
|
|
193
|
+
* `ladderSeed` is optional here: a revoking client does not hold it, and
|
|
194
|
+
* the code's own holder is the only party who can supply it
|
|
195
|
+
* @param [options.projectionStore] {object} an `id`-collection store the
|
|
196
|
+
* caller may write through, passed straight to the inventory edit: the
|
|
197
|
+
* post-strike `did:web` projection is PUT through it immediately before
|
|
198
|
+
* that entry publishes, so a ladder-signed revocation does not leave
|
|
199
|
+
* `did.json` naming the revoked code. Best-effort, and omitted the
|
|
200
|
+
* behavior is unchanged (see `removeUnlockKey`)
|
|
161
201
|
* @returns {Promise<{ did: string, doc: DIDDoc, log: DIDLog }>} see
|
|
162
202
|
* {@link publishRecoveryKey}
|
|
163
203
|
*/
|
|
164
|
-
export async function removeRecoveryKey({ idStore,
|
|
204
|
+
export async function removeRecoveryKey({ idStore, signer, recovery, ladderSeed, projectionStore, expectedDid, pinStore, logId }) {
|
|
165
205
|
return removeUnlockKey({
|
|
166
206
|
idStore,
|
|
167
|
-
|
|
207
|
+
signer,
|
|
168
208
|
unlockKeys: {
|
|
169
209
|
keyAgreement: {
|
|
170
210
|
publicKeyMultibase: recovery.keyAgreementKeyMultibase
|
|
171
211
|
},
|
|
172
212
|
updateKeyMultibase: recovery.updateKeyMultibase
|
|
173
213
|
},
|
|
214
|
+
...(ladderSeed ? { ladderSeed } : {}),
|
|
215
|
+
...(projectionStore ? { projectionStore } : {}),
|
|
216
|
+
requireLadderVmClaim: true,
|
|
174
217
|
...(expectedDid !== undefined ? { expectedDid } : {}),
|
|
175
218
|
...(pinStore ? { pinStore } : {}),
|
|
176
219
|
...(logId !== undefined ? { logId } : {}),
|
|
@@ -203,8 +246,10 @@ export async function removeRecoveryKey({ idStore, updateKeys, recovery, expecte
|
|
|
203
246
|
* @param options.newClientUpdateSeeds {ClientWebvhUpdateKeys} the new
|
|
204
247
|
* client's update-key seeds (minted by the recovery flow, which therefore
|
|
205
248
|
* holds them and can sign the add entry)
|
|
206
|
-
* @param options.replacement {
|
|
207
|
-
* public halves
|
|
249
|
+
* @param options.replacement {ReplacementRecoveryPublicKeys} the
|
|
250
|
+
* replacement code's public halves -- its key-agreement key, its rung-0
|
|
251
|
+
* update key, and its ladder VM key -- committed and published in the same
|
|
252
|
+
* continuation
|
|
208
253
|
* @param options.onCommitted {function}
|
|
209
254
|
* `(committed: { builtOnHead: { scid, versionId } }) => Promise<void>` --
|
|
210
255
|
* the REQUIRED persist-before-publish seam. It runs once per attempt, after
|
|
@@ -242,7 +287,7 @@ export async function removeRecoveryKey({ idStore, updateKeys, recovery, expecte
|
|
|
242
287
|
* @param [options.logId] {string} the account log's pin slot
|
|
243
288
|
* (`accountLogPinId({ spaceId })`); required whenever a `pinStore` is
|
|
244
289
|
* supplied
|
|
245
|
-
* @returns {Promise<
|
|
290
|
+
* @returns {Promise<object>}
|
|
246
291
|
* the account DID, the final `did.json` projection when the add-and-retire
|
|
247
292
|
* entry ran here, and `committed` -- whether THIS call published the pivot
|
|
248
293
|
* entry (`false` exactly on the idempotent completed branch, where a torn
|
|
@@ -250,7 +295,12 @@ export async function removeRecoveryKey({ idStore, updateKeys, recovery, expecte
|
|
|
250
295
|
* a success flag: a returning call means the continuation stands either
|
|
251
296
|
* way, so a caller clears its pending state on the RETURN, whatever
|
|
252
297
|
* `committed` says. Its absence from a return value is a build skew, which
|
|
253
|
-
* is why it is stated rather than inferred
|
|
298
|
+
* is why it is stated rather than inferred.
|
|
299
|
+
* `retiredCredentialVmIds` lists the `keyAgreement` verification-method ids
|
|
300
|
+
* this entry struck for pre-recovery credentials OTHER than the spent code
|
|
301
|
+
* -- what the caller drops registry entries and deletes unlock Spaces for.
|
|
302
|
+
* On the completed branch, whose entry already landed, it is derived from
|
|
303
|
+
* the log, so a resume reports the same list the first run did
|
|
254
304
|
*/
|
|
255
305
|
export async function recoverWebvhClient(options) {
|
|
256
306
|
// The seam is what gets the successor material persisted before the pivot
|
|
@@ -274,7 +324,7 @@ export async function recoverWebvhClient(options) {
|
|
|
274
324
|
* One attempt of {@link recoverWebvhClient}, re-invoked by the conflict retry.
|
|
275
325
|
*
|
|
276
326
|
* @param options {object} see {@link recoverWebvhClient}
|
|
277
|
-
* @returns {Promise<
|
|
327
|
+
* @returns {Promise<object>} see {@link recoverWebvhClient}
|
|
278
328
|
*/
|
|
279
329
|
async function recoverWebvhClientOnce({ store, recovery, newClientKeys, newClientUpdateSeeds, replacement, onCommitted, expectedDid, pinStore, logId }) {
|
|
280
330
|
// Each attempt's own read is what the CAS publish is built on, so the
|
|
@@ -284,22 +334,55 @@ async function recoverWebvhClientOnce({ store, recovery, newClientKeys, newClien
|
|
|
284
334
|
...(pinStore ? { pinStore } : {}),
|
|
285
335
|
...(logId !== undefined ? { logId } : {})
|
|
286
336
|
};
|
|
287
|
-
let published = await
|
|
288
|
-
store,
|
|
337
|
+
let published = await readPublishedLogOrThrow({
|
|
338
|
+
idStore: store,
|
|
289
339
|
...(expectedDid !== undefined ? { expectedDid } : {}),
|
|
290
|
-
...pinned
|
|
340
|
+
...pinned,
|
|
341
|
+
missingMessage: 'did:webvh: did.jsonl is missing; nothing to recover.'
|
|
291
342
|
});
|
|
343
|
+
// Derived before the completion check, because a resume recomputes the
|
|
344
|
+
// strike with the same protected sets the first run used.
|
|
345
|
+
const recoveryHash = await deriveNextKeyHash(recovery.updateKeyMultibase);
|
|
346
|
+
const newUpdateHash = await deriveNextKeyHash(newClientKeys.updateKeyMultibase);
|
|
347
|
+
const newStagedHash = await deriveNextKeyHash(newClientKeys.stagedUpdateKeyMultibase);
|
|
348
|
+
const replacementHash = await deriveNextKeyHash(replacement.updateKeyMultibase);
|
|
292
349
|
// Already complete (a torn earlier run finished the add entry): the new
|
|
293
350
|
// client's update key is authorized, which only the add entry writes. The
|
|
294
351
|
// seam is deliberately NOT entered here -- nothing is about to be
|
|
295
352
|
// published, so there is no pivot to persist ahead of.
|
|
296
353
|
if (published.updateKeys.includes(newClientKeys.updateKeyMultibase)) {
|
|
297
|
-
|
|
354
|
+
// The add entry already struck the pre-recovery credentials, so the
|
|
355
|
+
// document names none of them any more. The report is derived from the
|
|
356
|
+
// log instead ({@link retiredCredentialVmIdsFromLog}), so a resume tells
|
|
357
|
+
// the caller exactly what the first run told it.
|
|
358
|
+
const retired = retiredCredentialVmIdsFromLog({
|
|
359
|
+
log: published.log,
|
|
360
|
+
did: published.did,
|
|
361
|
+
successorKeyMultibase: newClientKeys.updateKeyMultibase,
|
|
362
|
+
spentVmId: recoveryVmId({
|
|
363
|
+
did: published.did,
|
|
364
|
+
keyAgreementKeyMultibase: recovery.keyAgreementKeyMultibase
|
|
365
|
+
})
|
|
366
|
+
});
|
|
367
|
+
// The strike is recomputed by re-running it over the log as it stood just
|
|
368
|
+
// before the add entry, with the same protected sets, so a resume reports
|
|
369
|
+
// exactly what the first run reported rather than a second definition of
|
|
370
|
+
// the same question.
|
|
371
|
+
const strike = await retiredCredentialRungsBeforeKey({
|
|
372
|
+
log: published.log,
|
|
373
|
+
authorizedKeyMultibase: newClientKeys.updateKeyMultibase,
|
|
374
|
+
credentialVmIds: retired,
|
|
375
|
+
protectedHashes: [newUpdateHash, newStagedHash, replacementHash],
|
|
376
|
+
protectedKeys: [newClientKeys.updateKeyMultibase]
|
|
377
|
+
});
|
|
378
|
+
return {
|
|
379
|
+
did: published.did,
|
|
380
|
+
committed: false,
|
|
381
|
+
retiredCredentialVmIds: retired,
|
|
382
|
+
struckRungHashes: strike.struckHashes,
|
|
383
|
+
unclaimedCredentialVmIds: strike.unclaimedCredentialVmIds
|
|
384
|
+
};
|
|
298
385
|
}
|
|
299
|
-
const recoveryHash = await deriveNextKeyHash(recovery.updateKeyMultibase);
|
|
300
|
-
const newUpdateHash = await deriveNextKeyHash(newClientKeys.updateKeyMultibase);
|
|
301
|
-
const newStagedHash = await deriveNextKeyHash(newClientKeys.stagedUpdateKeyMultibase);
|
|
302
|
-
const replacementHash = await deriveNextKeyHash(replacement.updateKeyMultibase);
|
|
303
386
|
// The reveal-and-commit entry, skipped when a torn earlier run already
|
|
304
387
|
// published it (the revealed key authorized AND every needed hash
|
|
305
388
|
// committed).
|
|
@@ -330,22 +413,21 @@ async function recoverWebvhClientOnce({ store, recovery, newClientKeys, newClien
|
|
|
330
413
|
])
|
|
331
414
|
]
|
|
332
415
|
});
|
|
333
|
-
|
|
416
|
+
// The pin advances with the publish, so the re-read below (and any read
|
|
417
|
+
// after a tear here) refuses a host that rolls the log back behind the
|
|
418
|
+
// reveal entry.
|
|
419
|
+
await publishEntryPinned({
|
|
334
420
|
store,
|
|
335
421
|
log: updated.log,
|
|
336
|
-
ifMatch: published.etag
|
|
422
|
+
ifMatch: published.etag,
|
|
423
|
+
...pinned
|
|
337
424
|
});
|
|
338
|
-
// Advance the pin to what the reveal entry just published, so the re-read
|
|
339
|
-
// below (and any read after a tear here) refuses a host that rolls the
|
|
340
|
-
// log back behind it.
|
|
341
|
-
if (pinStore && logId !== undefined) {
|
|
342
|
-
await pinStore.write({ logId, pin: pinOfLog(updated.log) });
|
|
343
|
-
}
|
|
344
425
|
// The same account the reveal entry just extended, under the same pin.
|
|
345
|
-
published = await
|
|
346
|
-
store,
|
|
426
|
+
published = await readPublishedLogOrThrow({
|
|
427
|
+
idStore: store,
|
|
347
428
|
expectedDid: published.did,
|
|
348
|
-
...pinned
|
|
429
|
+
...pinned,
|
|
430
|
+
missingMessage: 'did:webvh: did.jsonl is missing; nothing to recover.'
|
|
349
431
|
});
|
|
350
432
|
}
|
|
351
433
|
// The persist-before-publish seam: the successor material is persisted
|
|
@@ -355,9 +437,12 @@ async function recoverWebvhClientOnce({ store, recovery, newClientKeys, newClien
|
|
|
355
437
|
// above, or a torn earlier run's reveal entry standing already.
|
|
356
438
|
await onCommitted({ builtOnHead: servedHead(published.log) });
|
|
357
439
|
// The add-and-retire entry: the new client's verification methods and
|
|
358
|
-
// update key in; the
|
|
359
|
-
//
|
|
360
|
-
//
|
|
440
|
+
// update key in; the replacement code's VM in; every pre-recovery standing
|
|
441
|
+
// credential fully retired -- the spent code by name, and every other one
|
|
442
|
+
// by the same structural rule the transient continuation uses (its ladder
|
|
443
|
+
// VM by the relation asymmetry, its keyAgreement member by the account-DID
|
|
444
|
+
// controller). Signed by the new client's update key, whose hash the commit
|
|
445
|
+
// entry just committed.
|
|
361
446
|
const { did, doc } = published;
|
|
362
447
|
const vmId = (publicKeyMultibase) => `${did}#${publicKeyMultibase}`;
|
|
363
448
|
const spentVmId = recoveryVmId({
|
|
@@ -376,6 +461,13 @@ async function recoverWebvhClientOnce({ store, recovery, newClientKeys, newClien
|
|
|
376
461
|
// through the shared builder, which refuses a new client whose key-agreement
|
|
377
462
|
// key is not its signing key's canonical twin; the replacement code's
|
|
378
463
|
// unmarked method is appended after it.
|
|
464
|
+
// The replacement code's ladder VM, published in the same entry as its
|
|
465
|
+
// key-agreement member: a code is a standing credential with a ladder, and
|
|
466
|
+
// its own bridge delegation is signed by this VM, so a replacement without
|
|
467
|
+
// it could never spend (`decisions/0019`, `decisions/0020`). Its rung-0
|
|
468
|
+
// hash needs nothing here -- the reveal-and-commit entry committed it, and
|
|
469
|
+
// this entry carries it through.
|
|
470
|
+
const replacementLadderVmId = vmId(replacement.ladderVmKeyMultibase);
|
|
379
471
|
const addedMethods = [
|
|
380
472
|
...markedVerificationMethodPair({
|
|
381
473
|
controller: did,
|
|
@@ -387,15 +479,61 @@ async function recoverWebvhClientOnce({ store, recovery, newClientKeys, newClien
|
|
|
387
479
|
type: MULTIKEY_VM_TYPE,
|
|
388
480
|
controller: did,
|
|
389
481
|
publicKeyMultibase: replacement.keyAgreementKeyMultibase
|
|
390
|
-
}
|
|
482
|
+
},
|
|
483
|
+
ladderVerificationMethod({
|
|
484
|
+
controller: did,
|
|
485
|
+
publicKeyMultibase: replacement.ladderVmKeyMultibase
|
|
486
|
+
})
|
|
391
487
|
];
|
|
488
|
+
// The full retirement, recognized structurally rather than from a list the
|
|
489
|
+
// caller supplies: every standing ladder VM, and every keyAgreement member
|
|
490
|
+
// the account DID controls, less the ids this entry itself adds. Other
|
|
491
|
+
// unspent recovery codes retire with the rest -- a code's member is
|
|
492
|
+
// unmarked and verbatim, indistinguishable from a passkey's. Each retired
|
|
493
|
+
// credential's committed rungs and revealed rungs go in the same entry (see
|
|
494
|
+
// the strike below and `decisions/0014`), because striking the VM rots only
|
|
495
|
+
// a ladder-signed bridge and a bridge an enrolled client minted outlives
|
|
496
|
+
// this entry. The bridge itself stays live but inert; nothing revokes it.
|
|
497
|
+
// The new client's marked pair and the KMS
|
|
498
|
+
// convenience key are untouched -- neither is account-DID-controlled
|
|
499
|
+
// keyAgreement.
|
|
500
|
+
const ladderVms = ladderVmIds({ doc });
|
|
501
|
+
const addedVmIds = addedMethods
|
|
502
|
+
.map(method => method.id)
|
|
503
|
+
.filter((id) => typeof id === 'string');
|
|
504
|
+
const struckCredentialVmIds = credentialKeyAgreementMethods({ doc, did })
|
|
505
|
+
.map(method => method.id)
|
|
506
|
+
.filter((id) => typeof id === 'string')
|
|
507
|
+
.filter(id => !addedVmIds.includes(id));
|
|
508
|
+
const retiredCredentialVmIds = struckCredentialVmIds.filter(id => id !== spentVmId);
|
|
509
|
+
// Each retired credential's committed rungs and any revealed rung of its own
|
|
510
|
+
// go in the SAME entry. Striking the ladder VM rots only a ladder-signed
|
|
511
|
+
// bridge; a bridge an enrolled client minted outlives the strike, and that
|
|
512
|
+
// client survives this entry, so a committed rung left standing is a reveal
|
|
513
|
+
// the retired credential could still perform. Anchored from the log alone,
|
|
514
|
+
// and an unanchorable credential is reported rather than struck.
|
|
515
|
+
const strike = await attributeRetiredCredentialRungs({
|
|
516
|
+
log: published.log,
|
|
517
|
+
credentialVmIds: retiredCredentialVmIds,
|
|
518
|
+
protectedHashes: [newUpdateHash, newStagedHash, replacementHash],
|
|
519
|
+
protectedKeys: [newClientKeys.updateKeyMultibase]
|
|
520
|
+
});
|
|
521
|
+
const struck = (id) => id !== undefined &&
|
|
522
|
+
(id === spentVmId ||
|
|
523
|
+
ladderVms.includes(id) ||
|
|
524
|
+
struckCredentialVmIds.includes(id));
|
|
392
525
|
const existingMethods = (doc.verificationMethod ?? []);
|
|
393
526
|
const verificationMethods = [
|
|
394
|
-
...existingMethods.filter(method => method.id
|
|
527
|
+
...existingMethods.filter(method => !struck(method.id) &&
|
|
395
528
|
!addedMethods.some(added => added.id === method.id)),
|
|
396
529
|
...addedMethods
|
|
397
530
|
];
|
|
398
|
-
const withReference = (relation,
|
|
531
|
+
const withReference = (relation, ...ids) => [
|
|
532
|
+
...new Set([
|
|
533
|
+
...relationIds(relation).filter(referencedId => !struck(referencedId)),
|
|
534
|
+
...ids
|
|
535
|
+
])
|
|
536
|
+
];
|
|
399
537
|
const signingVmId = vmId(newClientKeys.signingKeyMultibase);
|
|
400
538
|
const signer = await updateKeySigner({
|
|
401
539
|
seed: newClientUpdateSeeds.updateSeed
|
|
@@ -406,32 +544,47 @@ async function recoverWebvhClientOnce({ store, recovery, newClientKeys, newClien
|
|
|
406
544
|
alsoKnownAsWeb: true,
|
|
407
545
|
updateKeys: [
|
|
408
546
|
...new Set([
|
|
409
|
-
...published.updateKeys.filter(key => key !== recovery.updateKeyMultibase
|
|
547
|
+
...published.updateKeys.filter(key => key !== recovery.updateKeyMultibase &&
|
|
548
|
+
!strike.struckKeys.includes(key)),
|
|
410
549
|
newClientKeys.updateKeyMultibase
|
|
411
550
|
])
|
|
412
551
|
],
|
|
413
|
-
nextKeyHashes:
|
|
552
|
+
nextKeyHashes: assertNextKeyHashesRemain({
|
|
553
|
+
nextKeyHashes: published.nextKeyHashes.filter(hash => hash !== recoveryHash && !strike.struckHashes.includes(hash)),
|
|
554
|
+
ceremony: 'the recovery add-and-retire entry'
|
|
555
|
+
}),
|
|
414
556
|
verificationMethods,
|
|
415
557
|
authentication: withReference(doc.authentication, signingVmId),
|
|
416
|
-
|
|
558
|
+
// The ladder VM's relation asymmetry: `assertionMethod` and
|
|
559
|
+
// `capabilityDelegation` only, so it never reads as an enrolled client.
|
|
560
|
+
assertionMethod: withReference(doc.assertionMethod, signingVmId, replacementLadderVmId),
|
|
417
561
|
keyAgreement: [
|
|
418
562
|
...new Set([
|
|
419
|
-
...relationIds(doc.keyAgreement).filter(id => id
|
|
563
|
+
...relationIds(doc.keyAgreement).filter(id => !struck(id)),
|
|
420
564
|
vmId(newClientKeys.keyAgreementKeyMultibase),
|
|
421
565
|
replacementVmId
|
|
422
566
|
])
|
|
423
567
|
],
|
|
424
568
|
capabilityInvocation: withReference(doc.capabilityInvocation, signingVmId),
|
|
425
|
-
capabilityDelegation: withReference(doc.capabilityDelegation, signingVmId)
|
|
569
|
+
capabilityDelegation: withReference(doc.capabilityDelegation, signingVmId, replacementLadderVmId)
|
|
426
570
|
});
|
|
427
571
|
// Conditional on the read this entry was built on: the re-read above when
|
|
428
|
-
// the commit entry ran here, the first read when it was skipped.
|
|
429
|
-
|
|
430
|
-
//
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
572
|
+
// the commit entry ran here, the first read when it was skipped. The pin
|
|
573
|
+
// advances with the publish, so a host rolling the log back straight
|
|
574
|
+
// afterwards is refused on the next read.
|
|
575
|
+
await publishEntryPinned({
|
|
576
|
+
store,
|
|
577
|
+
log: updated.log,
|
|
578
|
+
ifMatch: published.etag,
|
|
579
|
+
...pinned
|
|
580
|
+
});
|
|
581
|
+
return {
|
|
582
|
+
did: updated.did,
|
|
583
|
+
webDoc: updated.webDoc,
|
|
584
|
+
committed: true,
|
|
585
|
+
retiredCredentialVmIds,
|
|
586
|
+
struckRungHashes: strike.struckHashes,
|
|
587
|
+
unclaimedCredentialVmIds: strike.unclaimedCredentialVmIds
|
|
588
|
+
};
|
|
436
589
|
}
|
|
437
590
|
//# sourceMappingURL=recoveryWebvh.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recoveryWebvh.js","sourceRoot":"","sources":["../../src/recovery/recoveryWebvh.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"recoveryWebvh.js","sourceRoot":"","sources":["../../src/recovery/recoveryWebvh.ts"],"names":[],"mappings":"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"}
|