@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,117 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
* Copyright (c) 2026 Interop Alliance. All rights reserved.
|
|
3
|
-
*/
|
|
4
|
-
/**
|
|
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.
|
|
16
|
-
*
|
|
17
|
-
* At recovery time the pre-committed rung 0 reveals itself to sign the
|
|
18
|
-
* self-enrolling continuation, two entries:
|
|
19
|
-
*
|
|
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.
|
|
25
|
-
* 2. **Add + retire**: signed by the new client's update key (revealed from
|
|
26
|
-
* the commit), this entry publishes the new client's verification methods
|
|
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.
|
|
32
|
-
*
|
|
33
|
-
* Both entries are written through the caller's store seam; the recovery
|
|
34
|
-
* continuation publishes ONLY `did.jsonl` (the delegation the record carries
|
|
35
|
-
* covers nothing else -- narrow scope preserves loudness), and hands back the
|
|
36
|
-
* final `webDoc` so the recovered session can republish `did.json` once it is
|
|
37
|
-
* the authorized controller. Every step is idempotent/resumable: re-running
|
|
38
|
-
* with the same key material converges without forking the log.
|
|
39
|
-
*/
|
|
40
|
-
import { deriveNextKeyHash, updateDID } from '@interop/did-method-webvh';
|
|
41
|
-
import { assertCanonicalClientKeys, assertCarryOverCommitments, effectiveParameters, ladderVerificationMethod, markedVerificationMethodPair, MULTIKEY_VM_TYPE, publishEntryPinned, readPublishedLogOrThrow, servedHead, updateKeySigner, withLogConflictRetry } from '../webvh/didWebvh.js';
|
|
1
|
+
import { assertCanonicalClientKeys, markedVerificationMethodPair, withLogConflictRetry } from '../webvh/didWebvh.js';
|
|
42
2
|
import { publishUnlockKey, removeUnlockKey } from '../unlock/standingWebvh.js';
|
|
43
|
-
import {
|
|
44
|
-
// The
|
|
45
|
-
//
|
|
46
|
-
|
|
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
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* The verification-method id a code's key-agreement key publishes under --
|
|
90
|
-
* the ordinary `<did>#<multibase>` form, indistinguishable by id from any
|
|
91
|
-
* other keyAgreement entry. Consumers that must exclude recovery entries do
|
|
92
|
-
* it structurally (an enrolled client is a `capabilityInvocation` entry; a
|
|
93
|
-
* recovery key never has one) or by the registry's recorded multibase.
|
|
94
|
-
*
|
|
95
|
-
* @param options {object}
|
|
96
|
-
* @param options.did {string} the account's did:webvh
|
|
97
|
-
* @param options.keyAgreementKeyMultibase {string}
|
|
98
|
-
* @returns {string}
|
|
99
|
-
*/
|
|
100
|
-
export function recoveryVmId({ did, keyAgreementKeyMultibase }) {
|
|
101
|
-
return `${did}#${keyAgreementKeyMultibase}`;
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* Thrown by the recovery continuation when the log carries neither the code's
|
|
105
|
-
* update key nor its committed hash -- the code was revoked (or never
|
|
106
|
-
* issued), so no continuation can verify.
|
|
107
|
-
*/
|
|
108
|
-
export class RecoveryKeyNotCommittedError extends Error {
|
|
109
|
-
constructor(message = 'The account log no longer commits this recovery code; the ' +
|
|
110
|
-
'code has been revoked or was never issued.') {
|
|
111
|
-
super(message);
|
|
112
|
-
this.name = 'RecoveryKeyNotCommittedError';
|
|
113
|
-
}
|
|
114
|
-
}
|
|
3
|
+
import { recoveryContinuationOnce } from './continuation.js';
|
|
4
|
+
// The continuation's shared core and the names both variants read live in
|
|
5
|
+
// `continuation.ts`; this module stays their public home.
|
|
6
|
+
export { RecoveryCredentialStandingError, RecoveryKeyNotCommittedError, recoveryVmId, retiredCredentialVmIdsFromLog } from './continuation.js';
|
|
115
7
|
/**
|
|
116
8
|
* ISSUANCE: publishes a recovery code's split configuration into the
|
|
117
9
|
* document -- the code's `keyAgreement` verification method (an ordinary,
|
|
@@ -213,7 +105,6 @@ export async function removeRecoveryKey({ idStore, signer, recovery, ladderSeed,
|
|
|
213
105
|
},
|
|
214
106
|
...(ladderSeed ? { ladderSeed } : {}),
|
|
215
107
|
...(projectionStore ? { projectionStore } : {}),
|
|
216
|
-
requireLadderVmClaim: true,
|
|
217
108
|
...(expectedDid !== undefined ? { expectedDid } : {}),
|
|
218
109
|
...(pinStore ? { pinStore } : {}),
|
|
219
110
|
...(logId !== undefined ? { logId } : {}),
|
|
@@ -318,273 +209,46 @@ export async function recoverWebvhClient(options) {
|
|
|
318
209
|
signingKeyMultibase: options.newClientKeys.signingKeyMultibase,
|
|
319
210
|
keyAgreementKeyMultibase: options.newClientKeys.keyAgreementKeyMultibase
|
|
320
211
|
});
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
212
|
+
const { newClientKeys, newClientUpdateSeeds, onCommitted, expectedDid, pinStore, logId, ...shared } = options;
|
|
213
|
+
const outcome = await withLogConflictRetry(() => recoveryContinuationOnce({
|
|
214
|
+
...shared,
|
|
215
|
+
successor: {
|
|
216
|
+
updateKeyMultibase: newClientKeys.updateKeyMultibase,
|
|
217
|
+
updateSeed: newClientUpdateSeeds.updateSeed,
|
|
218
|
+
stagedKeyMultibase: newClientKeys.stagedUpdateKeyMultibase
|
|
219
|
+
},
|
|
220
|
+
onCommitted,
|
|
221
|
+
// The new client's verification methods and update key in. A three-way
|
|
222
|
+
// controller split: the new client's signing method and the replacement
|
|
223
|
+
// code's key-agreement method are controlled by the account; the new
|
|
224
|
+
// client's key-agreement method alone carries the controller marker
|
|
225
|
+
// (see clientKeyAgreementController) -- which is exactly what tells the
|
|
226
|
+
// two simultaneously published keyAgreement methods apart. The marked
|
|
227
|
+
// pair goes through the shared builder, which refuses a new client
|
|
228
|
+
// whose key-agreement key is not its signing key's canonical twin; the
|
|
229
|
+
// core appends the replacement code's unmarked method after it.
|
|
230
|
+
added: ({ did }) => {
|
|
231
|
+
const signingVmId = `${did}#${newClientKeys.signingKeyMultibase}`;
|
|
232
|
+
return {
|
|
233
|
+
methods: markedVerificationMethodPair({
|
|
234
|
+
controller: did,
|
|
235
|
+
signingKeyMultibase: newClientKeys.signingKeyMultibase,
|
|
236
|
+
keyAgreementKeyMultibase: newClientKeys.keyAgreementKeyMultibase
|
|
237
|
+
}),
|
|
238
|
+
authentication: [signingVmId],
|
|
239
|
+
assertionMethod: [signingVmId],
|
|
240
|
+
keyAgreement: [`${did}#${newClientKeys.keyAgreementKeyMultibase}`],
|
|
241
|
+
capabilityInvocation: [signingVmId],
|
|
242
|
+
capabilityDelegation: [signingVmId]
|
|
243
|
+
};
|
|
244
|
+
},
|
|
245
|
+
...(expectedDid !== undefined ? { expectedDid } : {}),
|
|
334
246
|
...(pinStore ? { pinStore } : {}),
|
|
335
247
|
...(logId !== undefined ? { logId } : {})
|
|
336
|
-
};
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
missingMessage: 'did:webvh: did.jsonl is missing; nothing to recover.'
|
|
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);
|
|
349
|
-
// Already complete (a torn earlier run finished the add entry): the new
|
|
350
|
-
// client's update key is authorized, which only the add entry writes. The
|
|
351
|
-
// seam is deliberately NOT entered here -- nothing is about to be
|
|
352
|
-
// published, so there is no pivot to persist ahead of.
|
|
353
|
-
if (published.updateKeys.includes(newClientKeys.updateKeyMultibase)) {
|
|
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
|
-
};
|
|
385
|
-
}
|
|
386
|
-
// The reveal-and-commit entry, skipped when a torn earlier run already
|
|
387
|
-
// published it (the revealed key authorized AND every needed hash
|
|
388
|
-
// committed).
|
|
389
|
-
const revealed = published.updateKeys.includes(recovery.updateKeyMultibase);
|
|
390
|
-
const committed = [newUpdateHash, newStagedHash, replacementHash].every(hash => published.nextKeyHashes.includes(hash));
|
|
391
|
-
if (!revealed || !committed) {
|
|
392
|
-
if (!revealed && !published.nextKeyHashes.includes(recoveryHash)) {
|
|
393
|
-
throw new RecoveryKeyNotCommittedError();
|
|
394
|
-
}
|
|
395
|
-
await assertCarryOverCommitments({ published });
|
|
396
|
-
const signer = await updateKeySigner({ seed: recovery.updateSeed });
|
|
397
|
-
const updated = await updateDID({
|
|
398
|
-
log: published.log,
|
|
399
|
-
signer,
|
|
400
|
-
alsoKnownAsWeb: true,
|
|
401
|
-
updateKeys: [
|
|
402
|
-
...new Set([...published.updateKeys, recovery.updateKeyMultibase])
|
|
403
|
-
],
|
|
404
|
-
// The spent code's own hash is kept through this entry (so a resumed
|
|
405
|
-
// commit can re-state the revealed key); the add entry drops it.
|
|
406
|
-
nextKeyHashes: [
|
|
407
|
-
...new Set([
|
|
408
|
-
...published.nextKeyHashes,
|
|
409
|
-
recoveryHash,
|
|
410
|
-
newUpdateHash,
|
|
411
|
-
newStagedHash,
|
|
412
|
-
replacementHash
|
|
413
|
-
])
|
|
414
|
-
]
|
|
415
|
-
});
|
|
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({
|
|
420
|
-
store,
|
|
421
|
-
log: updated.log,
|
|
422
|
-
ifMatch: published.etag,
|
|
423
|
-
...pinned
|
|
424
|
-
});
|
|
425
|
-
// The same account the reveal entry just extended, under the same pin.
|
|
426
|
-
published = await readPublishedLogOrThrow({
|
|
427
|
-
idStore: store,
|
|
428
|
-
expectedDid: published.did,
|
|
429
|
-
...pinned,
|
|
430
|
-
missingMessage: 'did:webvh: did.jsonl is missing; nothing to recover.'
|
|
431
|
-
});
|
|
432
|
-
}
|
|
433
|
-
// The persist-before-publish seam: the successor material is persisted
|
|
434
|
-
// HERE, on the head the add-and-retire entry is about to be built on,
|
|
435
|
-
// before that entry -- the ceremony's pivot -- retires the spent code.
|
|
436
|
-
// Reached on both paths into the add entry: the reveal entry just published
|
|
437
|
-
// above, or a torn earlier run's reveal entry standing already.
|
|
438
|
-
await onCommitted({ builtOnHead: servedHead(published.log) });
|
|
439
|
-
// The add-and-retire entry: the new client's verification methods and
|
|
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.
|
|
446
|
-
const { did, doc } = published;
|
|
447
|
-
const vmId = (publicKeyMultibase) => `${did}#${publicKeyMultibase}`;
|
|
448
|
-
const spentVmId = recoveryVmId({
|
|
449
|
-
did,
|
|
450
|
-
keyAgreementKeyMultibase: recovery.keyAgreementKeyMultibase
|
|
451
|
-
});
|
|
452
|
-
const replacementVmId = recoveryVmId({
|
|
453
|
-
did,
|
|
454
|
-
keyAgreementKeyMultibase: replacement.keyAgreementKeyMultibase
|
|
455
|
-
});
|
|
456
|
-
// A three-way controller split. The new client's signing method and the
|
|
457
|
-
// replacement code's key-agreement method are controlled by the account;
|
|
458
|
-
// the new client's key-agreement method alone carries the controller marker
|
|
459
|
-
// (see clientKeyAgreementController) -- which is exactly what tells the two
|
|
460
|
-
// simultaneously published keyAgreement methods apart. The marked pair goes
|
|
461
|
-
// through the shared builder, which refuses a new client whose key-agreement
|
|
462
|
-
// key is not its signing key's canonical twin; the replacement code's
|
|
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);
|
|
471
|
-
const addedMethods = [
|
|
472
|
-
...markedVerificationMethodPair({
|
|
473
|
-
controller: did,
|
|
474
|
-
signingKeyMultibase: newClientKeys.signingKeyMultibase,
|
|
475
|
-
keyAgreementKeyMultibase: newClientKeys.keyAgreementKeyMultibase
|
|
476
|
-
}),
|
|
477
|
-
{
|
|
478
|
-
id: replacementVmId,
|
|
479
|
-
type: MULTIKEY_VM_TYPE,
|
|
480
|
-
controller: did,
|
|
481
|
-
publicKeyMultibase: replacement.keyAgreementKeyMultibase
|
|
482
|
-
},
|
|
483
|
-
ladderVerificationMethod({
|
|
484
|
-
controller: did,
|
|
485
|
-
publicKeyMultibase: replacement.ladderVmKeyMultibase
|
|
486
|
-
})
|
|
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));
|
|
525
|
-
const existingMethods = (doc.verificationMethod ?? []);
|
|
526
|
-
const verificationMethods = [
|
|
527
|
-
...existingMethods.filter(method => !struck(method.id) &&
|
|
528
|
-
!addedMethods.some(added => added.id === method.id)),
|
|
529
|
-
...addedMethods
|
|
530
|
-
];
|
|
531
|
-
const withReference = (relation, ...ids) => [
|
|
532
|
-
...new Set([
|
|
533
|
-
...relationIds(relation).filter(referencedId => !struck(referencedId)),
|
|
534
|
-
...ids
|
|
535
|
-
])
|
|
536
|
-
];
|
|
537
|
-
const signingVmId = vmId(newClientKeys.signingKeyMultibase);
|
|
538
|
-
const signer = await updateKeySigner({
|
|
539
|
-
seed: newClientUpdateSeeds.updateSeed
|
|
540
|
-
});
|
|
541
|
-
const updated = await updateDID({
|
|
542
|
-
log: published.log,
|
|
543
|
-
signer,
|
|
544
|
-
alsoKnownAsWeb: true,
|
|
545
|
-
updateKeys: [
|
|
546
|
-
...new Set([
|
|
547
|
-
...published.updateKeys.filter(key => key !== recovery.updateKeyMultibase &&
|
|
548
|
-
!strike.struckKeys.includes(key)),
|
|
549
|
-
newClientKeys.updateKeyMultibase
|
|
550
|
-
])
|
|
551
|
-
],
|
|
552
|
-
nextKeyHashes: assertNextKeyHashesRemain({
|
|
553
|
-
nextKeyHashes: published.nextKeyHashes.filter(hash => hash !== recoveryHash && !strike.struckHashes.includes(hash)),
|
|
554
|
-
ceremony: 'the recovery add-and-retire entry'
|
|
555
|
-
}),
|
|
556
|
-
verificationMethods,
|
|
557
|
-
authentication: withReference(doc.authentication, signingVmId),
|
|
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),
|
|
561
|
-
keyAgreement: [
|
|
562
|
-
...new Set([
|
|
563
|
-
...relationIds(doc.keyAgreement).filter(id => !struck(id)),
|
|
564
|
-
vmId(newClientKeys.keyAgreementKeyMultibase),
|
|
565
|
-
replacementVmId
|
|
566
|
-
])
|
|
567
|
-
],
|
|
568
|
-
capabilityInvocation: withReference(doc.capabilityInvocation, signingVmId),
|
|
569
|
-
capabilityDelegation: withReference(doc.capabilityDelegation, signingVmId, replacementLadderVmId)
|
|
570
|
-
});
|
|
571
|
-
// Conditional on the read this entry was built on: the re-read above when
|
|
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
|
-
};
|
|
248
|
+
}));
|
|
249
|
+
// The document and log stay inside: the remembered session re-verifies
|
|
250
|
+
// the log for itself once it is the controller.
|
|
251
|
+
const { doc: _doc, log: _log, ...rest } = outcome;
|
|
252
|
+
return rest;
|
|
589
253
|
}
|
|
590
254
|
//# sourceMappingURL=recoveryWebvh.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recoveryWebvh.js","sourceRoot":"","sources":["../../src/recovery/recoveryWebvh.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAMxE,OAAO,EACL,yBAAyB,EACzB,0BAA0B,EAC1B,mBAAmB,EACnB,wBAAwB,EACxB,4BAA4B,EAC5B,gBAAgB,EAChB,kBAAkB,EAClB,uBAAuB,EACvB,UAAU,EACV,eAAe,EACf,oBAAoB,EACrB,MAAM,sBAAsB,CAAA;AAO7B,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAG9E,OAAO,EACL,6BAA6B,EAC7B,WAAW,EACX,WAAW,EACZ,MAAM,4BAA4B,CAAA;AACnC,wEAAwE;AACxE,wEAAwE;AACxE,4EAA4E;AAC5E,OAAO,EACL,yBAAyB,EACzB,+BAA+B,EAC/B,+BAA+B,EAChC,MAAM,0BAA0B,CAAA;AAEjC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,6BAA6B,CAAC,EAC5C,GAAG,EACH,GAAG,EACH,qBAAqB,EACrB,SAAS,EAMV;IACC,MAAM,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAA;IACvC,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CACrC,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CACzD,CAAA;IACD,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;IAC9D,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;IAC1D,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QACrD,OAAO,EAAE,CAAA;IACX,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,GAAG,CACtB,6BAA6B,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CACvD,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CACpB,CACF,CAAA;IACD,OAAO,6BAA6B,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;SACzD,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;SACxB,MAAM,CAAC,CAAC,EAAE,EAAgB,EAAE,CAAC,OAAO,EAAE,KAAK,QAAQ,CAAC;SACpD,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,SAAS,CAAC,CAAA;AACxD,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,YAAY,CAAC,EAC3B,GAAG,EACH,wBAAwB,EAIzB;IACC,OAAO,GAAG,GAAG,IAAI,wBAAwB,EAAE,CAAA;AAC7C,CAAC;AAyBD;;;;GAIG;AACH,MAAM,OAAO,4BAA6B,SAAQ,KAAK;IACrD,YACE,OAAO,GAAG,4DAA4D;QACpE,4CAA4C;QAE9C,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAA;IAC5C,CAAC;CACF;AAYD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,EACvC,OAAO,EACP,MAAM,EACN,QAAQ,EACR,UAAU,EACV,IAAI,EACJ,WAAW,EACX,QAAQ,EACR,KAAK,EAUN;IACC,OAAO,gBAAgB,CAAC;QACtB,OAAO;QACP,MAAM;QACN,UAAU,EAAE;YACV,YAAY,EAAE;gBACZ,kBAAkB,EAAE,QAAQ,CAAC,wBAAwB;aACtD;YACD,kBAAkB,EAAE,QAAQ,CAAC,kBAAkB;SAChD;QACD,yEAAyE;QACzE,iDAAiD;QACjD,UAAU;QACV,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,IAAI,EAAE,yBAAyB;KAChC,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,EACtC,OAAO,EACP,MAAM,EACN,QAAQ,EACR,UAAU,EACV,eAAe,EACf,WAAW,EACX,QAAQ,EACR,KAAK,EAUN;IACC,OAAO,eAAe,CAAC;QACrB,OAAO;QACP,MAAM;QACN,UAAU,EAAE;YACV,YAAY,EAAE;gBACZ,kBAAkB,EAAE,QAAQ,CAAC,wBAAwB;aACtD;YACD,kBAAkB,EAAE,QAAQ,CAAC,kBAAkB;SAChD;QACD,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,oBAAoB,EAAE,IAAI;QAC1B,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,IAAI,EAAE,0BAA0B;KACjC,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiFG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAYxC;IAQC,0EAA0E;IAC1E,2EAA2E;IAC3E,uEAAuE;IACvE,oDAAoD;IACpD,IAAI,OAAO,OAAO,CAAC,WAAW,KAAK,UAAU,EAAE,CAAC;QAC9C,MAAM,IAAI,SAAS,CACjB,uEAAuE;YACrE,sEAAsE,CACzE,CAAA;IACH,CAAC;IACD,0EAA0E;IAC1E,yEAAyE;IACzE,qCAAqC;IACrC,yBAAyB,CAAC;QACxB,mBAAmB,EAAE,OAAO,CAAC,aAAa,CAAC,mBAAmB;QAC9D,wBAAwB,EAAE,OAAO,CAAC,aAAa,CAAC,wBAAwB;KACzE,CAAC,CAAA;IACF,OAAO,oBAAoB,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAA;AACpE,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,sBAAsB,CAAC,EACpC,KAAK,EACL,QAAQ,EACR,aAAa,EACb,oBAAoB,EACpB,WAAW,EACX,WAAW,EACX,WAAW,EACX,QAAQ,EACR,KAAK,EAaN;IAQC,sEAAsE;IACtE,4EAA4E;IAC5E,gDAAgD;IAChD,MAAM,MAAM,GAAG;QACb,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1C,CAAA;IACD,IAAI,SAAS,GAAG,MAAM,uBAAuB,CAAC;QAC5C,OAAO,EAAE,KAAK;QACd,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,GAAG,MAAM;QACT,cAAc,EAAE,sDAAsD;KACvE,CAAC,CAAA;IAEF,uEAAuE;IACvE,0DAA0D;IAC1D,MAAM,YAAY,GAAG,MAAM,iBAAiB,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAA;IACzE,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAC3C,aAAa,CAAC,kBAAkB,CACjC,CAAA;IACD,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAC3C,aAAa,CAAC,wBAAwB,CACvC,CAAA;IACD,MAAM,eAAe,GAAG,MAAM,iBAAiB,CAC7C,WAAW,CAAC,kBAAkB,CAC/B,CAAA;IAED,wEAAwE;IACxE,0EAA0E;IAC1E,kEAAkE;IAClE,uDAAuD;IACvD,IAAI,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACpE,oEAAoE;QACpE,uEAAuE;QACvE,yEAAyE;QACzE,iDAAiD;QACjD,MAAM,OAAO,GAAG,6BAA6B,CAAC;YAC5C,GAAG,EAAE,SAAS,CAAC,GAAG;YAClB,GAAG,EAAE,SAAS,CAAC,GAAG;YAClB,qBAAqB,EAAE,aAAa,CAAC,kBAAkB;YACvD,SAAS,EAAE,YAAY,CAAC;gBACtB,GAAG,EAAE,SAAS,CAAC,GAAG;gBAClB,wBAAwB,EAAE,QAAQ,CAAC,wBAAwB;aAC5D,CAAC;SACH,CAAC,CAAA;QACF,0EAA0E;QAC1E,0EAA0E;QAC1E,yEAAyE;QACzE,qBAAqB;QACrB,MAAM,MAAM,GAAG,MAAM,+BAA+B,CAAC;YACnD,GAAG,EAAE,SAAS,CAAC,GAAG;YAClB,sBAAsB,EAAE,aAAa,CAAC,kBAAkB;YACxD,eAAe,EAAE,OAAO;YACxB,eAAe,EAAE,CAAC,aAAa,EAAE,aAAa,EAAE,eAAe,CAAC;YAChE,aAAa,EAAE,CAAC,aAAa,CAAC,kBAAkB,CAAC;SAClD,CAAC,CAAA;QACF,OAAO;YACL,GAAG,EAAE,SAAS,CAAC,GAAG;YAClB,SAAS,EAAE,KAAK;YAChB,sBAAsB,EAAE,OAAO;YAC/B,gBAAgB,EAAE,MAAM,CAAC,YAAY;YACrC,wBAAwB,EAAE,MAAM,CAAC,wBAAwB;SAC1D,CAAA;IACH,CAAC;IAED,uEAAuE;IACvE,kEAAkE;IAClE,cAAc;IACd,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAA;IAC3E,MAAM,SAAS,GAAG,CAAC,aAAa,EAAE,aAAa,EAAE,eAAe,CAAC,CAAC,KAAK,CACrE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAC/C,CAAA;IACD,IAAI,CAAC,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC;QAC5B,IAAI,CAAC,QAAQ,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACjE,MAAM,IAAI,4BAA4B,EAAE,CAAA;QAC1C,CAAC;QACD,MAAM,0BAA0B,CAAC,EAAE,SAAS,EAAE,CAAC,CAAA;QAC/C,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAA;QACnE,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC;YAC9B,GAAG,EAAE,SAAS,CAAC,GAAG;YAClB,MAAM;YACN,cAAc,EAAE,IAAI;YACpB,UAAU,EAAE;gBACV,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAC;aACnE;YACD,qEAAqE;YACrE,iEAAiE;YACjE,aAAa,EAAE;gBACb,GAAG,IAAI,GAAG,CAAC;oBACT,GAAG,SAAS,CAAC,aAAa;oBAC1B,YAAY;oBACZ,aAAa;oBACb,aAAa;oBACb,eAAe;iBAChB,CAAC;aACH;SACF,CAAC,CAAA;QACF,wEAAwE;QACxE,uEAAuE;QACvE,gBAAgB;QAChB,MAAM,kBAAkB,CAAC;YACvB,KAAK;YACL,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,OAAO,EAAE,SAAS,CAAC,IAAI;YACvB,GAAG,MAAM;SACV,CAAC,CAAA;QACF,uEAAuE;QACvE,SAAS,GAAG,MAAM,uBAAuB,CAAC;YACxC,OAAO,EAAE,KAAK;YACd,WAAW,EAAE,SAAS,CAAC,GAAG;YAC1B,GAAG,MAAM;YACT,cAAc,EAAE,sDAAsD;SACvE,CAAC,CAAA;IACJ,CAAC;IAED,uEAAuE;IACvE,sEAAsE;IACtE,uEAAuE;IACvE,4EAA4E;IAC5E,gEAAgE;IAChE,MAAM,WAAW,CAAC,EAAE,WAAW,EAAE,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAE7D,sEAAsE;IACtE,2EAA2E;IAC3E,0EAA0E;IAC1E,0EAA0E;IAC1E,2EAA2E;IAC3E,4EAA4E;IAC5E,wBAAwB;IACxB,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,SAAS,CAAA;IAC9B,MAAM,IAAI,GAAG,CAAC,kBAA0B,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,kBAAkB,EAAE,CAAA;IAC3E,MAAM,SAAS,GAAG,YAAY,CAAC;QAC7B,GAAG;QACH,wBAAwB,EAAE,QAAQ,CAAC,wBAAwB;KAC5D,CAAC,CAAA;IACF,MAAM,eAAe,GAAG,YAAY,CAAC;QACnC,GAAG;QACH,wBAAwB,EAAE,WAAW,CAAC,wBAAwB;KAC/D,CAAC,CAAA;IACF,wEAAwE;IACxE,yEAAyE;IACzE,4EAA4E;IAC5E,4EAA4E;IAC5E,4EAA4E;IAC5E,6EAA6E;IAC7E,sEAAsE;IACtE,wCAAwC;IACxC,uEAAuE;IACvE,2EAA2E;IAC3E,2EAA2E;IAC3E,wEAAwE;IACxE,2EAA2E;IAC3E,iCAAiC;IACjC,MAAM,qBAAqB,GAAG,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAA;IACpE,MAAM,YAAY,GAAyB;QACzC,GAAG,4BAA4B,CAAC;YAC9B,UAAU,EAAE,GAAG;YACf,mBAAmB,EAAE,aAAa,CAAC,mBAAmB;YACtD,wBAAwB,EAAE,aAAa,CAAC,wBAAwB;SACjE,CAAC;QACF;YACE,EAAE,EAAE,eAAe;YACnB,IAAI,EAAE,gBAAgB;YACtB,UAAU,EAAE,GAAG;YACf,kBAAkB,EAAE,WAAW,CAAC,wBAAwB;SACzD;QACD,wBAAwB,CAAC;YACvB,UAAU,EAAE,GAAG;YACf,kBAAkB,EAAE,WAAW,CAAC,oBAAoB;SACrD,CAAC;KACH,CAAA;IACD,2EAA2E;IAC3E,2EAA2E;IAC3E,uEAAuE;IACvE,oEAAoE;IACpE,0EAA0E;IAC1E,4EAA4E;IAC5E,4EAA4E;IAC5E,yEAAyE;IACzE,0EAA0E;IAC1E,2CAA2C;IAC3C,qEAAqE;IACrE,gBAAgB;IAChB,MAAM,SAAS,GAAG,WAAW,CAAC,EAAE,GAAG,EAAE,CAAC,CAAA;IACtC,MAAM,UAAU,GAAG,YAAY;SAC5B,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;SACxB,MAAM,CAAC,CAAC,EAAE,EAAgB,EAAE,CAAC,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAA;IACvD,MAAM,qBAAqB,GAAG,6BAA6B,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;SACtE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;SACxB,MAAM,CAAC,CAAC,EAAE,EAAgB,EAAE,CAAC,OAAO,EAAE,KAAK,QAAQ,CAAC;SACpD,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;IACzC,MAAM,sBAAsB,GAAG,qBAAqB,CAAC,MAAM,CACzD,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,SAAS,CACvB,CAAA;IACD,6EAA6E;IAC7E,yEAAyE;IACzE,2EAA2E;IAC3E,4EAA4E;IAC5E,2EAA2E;IAC3E,iEAAiE;IACjE,MAAM,MAAM,GAAG,MAAM,+BAA+B,CAAC;QACnD,GAAG,EAAE,SAAS,CAAC,GAAG;QAClB,eAAe,EAAE,sBAAsB;QACvC,eAAe,EAAE,CAAC,aAAa,EAAE,aAAa,EAAE,eAAe,CAAC;QAChE,aAAa,EAAE,CAAC,aAAa,CAAC,kBAAkB,CAAC;KAClD,CAAC,CAAA;IACF,MAAM,MAAM,GAAG,CAAC,EAAsB,EAAW,EAAE,CACjD,EAAE,KAAK,SAAS;QAChB,CAAC,EAAE,KAAK,SAAS;YACf,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtB,qBAAqB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;IACvC,MAAM,eAAe,GAAG,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,CAAyB,CAAA;IAC9E,MAAM,mBAAmB,GAAG;QAC1B,GAAG,eAAe,CAAC,MAAM,CACvB,MAAM,CAAC,EAAE,CACP,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YAClB,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,CACtD;QACD,GAAG,YAAY;KAChB,CAAA;IACD,MAAM,aAAa,GAAG,CACpB,QAAqD,EACrD,GAAG,GAAa,EAChB,EAAE,CAAC;QACH,GAAG,IAAI,GAAG,CAAC;YACT,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YACtE,GAAG,GAAG;SACP,CAAC;KACH,CAAA;IACD,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAA;IAE3D,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;QACnC,IAAI,EAAE,oBAAoB,CAAC,UAAU;KACtC,CAAC,CAAA;IACF,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC;QAC9B,GAAG,EAAE,SAAS,CAAC,GAAG;QAClB,MAAM;QACN,cAAc,EAAE,IAAI;QACpB,UAAU,EAAE;YACV,GAAG,IAAI,GAAG,CAAC;gBACT,GAAG,SAAS,CAAC,UAAU,CAAC,MAAM,CAC5B,GAAG,CAAC,EAAE,CACJ,GAAG,KAAK,QAAQ,CAAC,kBAAkB;oBACnC,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CACnC;gBACD,aAAa,CAAC,kBAAkB;aACjC,CAAC;SACH;QACD,aAAa,EAAE,yBAAyB,CAAC;YACvC,aAAa,EAAE,SAAS,CAAC,aAAa,CAAC,MAAM,CAC3C,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CACrE;YACD,QAAQ,EAAE,mCAAmC;SAC9C,CAAC;QACF,mBAAmB;QACnB,cAAc,EAAE,aAAa,CAAC,GAAG,CAAC,cAAc,EAAE,WAAW,CAAC;QAC9D,4DAA4D;QAC5D,wEAAwE;QACxE,eAAe,EAAE,aAAa,CAC5B,GAAG,CAAC,eAAe,EACnB,WAAW,EACX,qBAAqB,CACtB;QACD,YAAY,EAAE;YACZ,GAAG,IAAI,GAAG,CAAC;gBACT,GAAG,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC1D,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC;gBAC5C,eAAe;aAChB,CAAC;SACH;QACD,oBAAoB,EAAE,aAAa,CAAC,GAAG,CAAC,oBAAoB,EAAE,WAAW,CAAC;QAC1E,oBAAoB,EAAE,aAAa,CACjC,GAAG,CAAC,oBAAoB,EACxB,WAAW,EACX,qBAAqB,CACtB;KACF,CAAC,CAAA;IACF,0EAA0E;IAC1E,yEAAyE;IACzE,qEAAqE;IACrE,0CAA0C;IAC1C,MAAM,kBAAkB,CAAC;QACvB,KAAK;QACL,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,OAAO,EAAE,SAAS,CAAC,IAAI;QACvB,GAAG,MAAM;KACV,CAAC,CAAA;IACF,OAAO;QACL,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,SAAS,EAAE,IAAI;QACf,sBAAsB;QACtB,gBAAgB,EAAE,MAAM,CAAC,YAAY;QACrC,wBAAwB,EAAE,MAAM,CAAC,wBAAwB;KAC1D,CAAA;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"recoveryWebvh.js","sourceRoot":"","sources":["../../src/recovery/recoveryWebvh.ts"],"names":[],"mappings":"AAwCA,OAAO,EACL,yBAAyB,EACzB,4BAA4B,EAC5B,oBAAoB,EACrB,MAAM,sBAAsB,CAAA;AAO7B,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAG9E,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAA;AAO5D,0EAA0E;AAC1E,0DAA0D;AAC1D,OAAO,EACL,+BAA+B,EAC/B,4BAA4B,EAC5B,YAAY,EACZ,6BAA6B,EAC9B,MAAM,mBAAmB,CAAA;AAO1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,EACvC,OAAO,EACP,MAAM,EACN,QAAQ,EACR,UAAU,EACV,IAAI,EACJ,WAAW,EACX,QAAQ,EACR,KAAK,EAUN;IACC,OAAO,gBAAgB,CAAC;QACtB,OAAO;QACP,MAAM;QACN,UAAU,EAAE;YACV,YAAY,EAAE;gBACZ,kBAAkB,EAAE,QAAQ,CAAC,wBAAwB;aACtD;YACD,kBAAkB,EAAE,QAAQ,CAAC,kBAAkB;SAChD;QACD,yEAAyE;QACzE,iDAAiD;QACjD,UAAU;QACV,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,IAAI,EAAE,yBAAyB;KAChC,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,EACtC,OAAO,EACP,MAAM,EACN,QAAQ,EACR,UAAU,EACV,eAAe,EACf,WAAW,EACX,QAAQ,EACR,KAAK,EAUN;IACC,OAAO,eAAe,CAAC;QACrB,OAAO;QACP,MAAM;QACN,UAAU,EAAE;YACV,YAAY,EAAE;gBACZ,kBAAkB,EAAE,QAAQ,CAAC,wBAAwB;aACtD;YACD,kBAAkB,EAAE,QAAQ,CAAC,kBAAkB;SAChD;QACD,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,IAAI,EAAE,0BAA0B;KACjC,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiFG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAYxC;IAQC,0EAA0E;IAC1E,2EAA2E;IAC3E,uEAAuE;IACvE,oDAAoD;IACpD,IAAI,OAAO,OAAO,CAAC,WAAW,KAAK,UAAU,EAAE,CAAC;QAC9C,MAAM,IAAI,SAAS,CACjB,uEAAuE;YACrE,sEAAsE,CACzE,CAAA;IACH,CAAC;IACD,0EAA0E;IAC1E,yEAAyE;IACzE,qCAAqC;IACrC,yBAAyB,CAAC;QACxB,mBAAmB,EAAE,OAAO,CAAC,aAAa,CAAC,mBAAmB;QAC9D,wBAAwB,EAAE,OAAO,CAAC,aAAa,CAAC,wBAAwB;KACzE,CAAC,CAAA;IACF,MAAM,EACJ,aAAa,EACb,oBAAoB,EACpB,WAAW,EACX,WAAW,EACX,QAAQ,EACR,KAAK,EACL,GAAG,MAAM,EACV,GAAG,OAAO,CAAA;IACX,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,GAAG,EAAE,CAC9C,wBAAwB,CAAC;QACvB,GAAG,MAAM;QACT,SAAS,EAAE;YACT,kBAAkB,EAAE,aAAa,CAAC,kBAAkB;YACpD,UAAU,EAAE,oBAAoB,CAAC,UAAU;YAC3C,kBAAkB,EAAE,aAAa,CAAC,wBAAwB;SAC3D;QACD,WAAW;QACX,uEAAuE;QACvE,wEAAwE;QACxE,qEAAqE;QACrE,oEAAoE;QACpE,wEAAwE;QACxE,sEAAsE;QACtE,mEAAmE;QACnE,uEAAuE;QACvE,gEAAgE;QAChE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;YACjB,MAAM,WAAW,GAAG,GAAG,GAAG,IAAI,aAAa,CAAC,mBAAmB,EAAE,CAAA;YACjE,OAAO;gBACL,OAAO,EAAE,4BAA4B,CAAC;oBACpC,UAAU,EAAE,GAAG;oBACf,mBAAmB,EAAE,aAAa,CAAC,mBAAmB;oBACtD,wBAAwB,EAAE,aAAa,CAAC,wBAAwB;iBACjE,CAAC;gBACF,cAAc,EAAE,CAAC,WAAW,CAAC;gBAC7B,eAAe,EAAE,CAAC,WAAW,CAAC;gBAC9B,YAAY,EAAE,CAAC,GAAG,GAAG,IAAI,aAAa,CAAC,wBAAwB,EAAE,CAAC;gBAClE,oBAAoB,EAAE,CAAC,WAAW,CAAC;gBACnC,oBAAoB,EAAE,CAAC,WAAW,CAAC;aACpC,CAAA;QACH,CAAC;QACD,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1C,CAAC,CACH,CAAA;IACD,uEAAuE;IACvE,gDAAgD;IAChD,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,CAAA;IACjD,OAAO,IAAI,CAAA;AACb,CAAC"}
|
|
@@ -13,8 +13,10 @@
|
|
|
13
13
|
* `AppConnectQuery` extension (`appConnectRequestOf`), whose `app` block is
|
|
14
14
|
* validated here against the attested requesting origin.
|
|
15
15
|
*/
|
|
16
|
-
import type { CHAPIStoreEvent, IAppConnectRequest, ICapabilityQueryDetail, ICredentialQuery, IQueryByExample, IVPOffer, IVPRequest, IVPRDetails, IVPRQuery, IVerifiableCredential, IVerifiablePresentation,
|
|
16
|
+
import type { CHAPIStoreEvent, IAppConnectRequest, ICapabilityQueryDetail, ICredentialQuery, IQueryByExample, IVPOffer, IVPRequest, IVPRDetails, IVPRQuery, IVerifiableCredential, IVerifiablePresentation, WalletRequestProfile } from './types.js';
|
|
17
17
|
import type { CHAPIGetEvent } from './types.js';
|
|
18
|
+
import { isZcapQuery } from './queryPredicates.js';
|
|
19
|
+
export { isZcapQuery };
|
|
18
20
|
/**
|
|
19
21
|
* The VC data model version a presentation carrying the given credentials must
|
|
20
22
|
* use, so its `@context` stays coherent with what it carries: `2.0` when any
|
|
@@ -78,19 +80,6 @@ export declare function queriesOf(request: IVPRDetails): IVPRQuery[];
|
|
|
78
80
|
* @returns {ICredentialQuery[]}
|
|
79
81
|
*/
|
|
80
82
|
export declare function credentialQueriesOf(query: IQueryByExample): ICredentialQuery[];
|
|
81
|
-
/**
|
|
82
|
-
* Whether a query is a standalone capability query, under either type string:
|
|
83
|
-
* `AuthorizationCapabilityQuery` (the canonical VCALM spelling) or the legacy
|
|
84
|
-
* `ZcapQuery`.
|
|
85
|
-
*
|
|
86
|
-
* The one reader of that alias pair. Both exclusivity checks and both
|
|
87
|
-
* capability extractors ask through here, so retiring or extending the pair
|
|
88
|
-
* is one edit rather than four.
|
|
89
|
-
*
|
|
90
|
-
* @param query {IVPRQuery}
|
|
91
|
-
* @returns {boolean}
|
|
92
|
-
*/
|
|
93
|
-
export declare function isZcapQuery(query: IVPRQuery): query is IZcapQuery;
|
|
94
83
|
/**
|
|
95
84
|
* Collects the requested capabilities from a query set: filters the two zcap
|
|
96
85
|
* query type strings (`AuthorizationCapabilityQuery` canonical, `ZcapQuery`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"classify.d.ts","sourceRoot":"","sources":["../../src/request/classify.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EACV,eAAe,EAGf,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,EAEhB,eAAe,EACf,QAAQ,EACR,UAAU,EACV,WAAW,EACX,SAAS,EACT,qBAAqB,EACrB,uBAAuB,EACvB,
|
|
1
|
+
{"version":3,"file":"classify.d.ts","sourceRoot":"","sources":["../../src/request/classify.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EACV,eAAe,EAGf,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,EAEhB,eAAe,EACf,QAAQ,EACR,UAAU,EACV,WAAW,EACX,SAAS,EACT,qBAAqB,EACrB,uBAAuB,EACvB,oBAAoB,EACrB,MAAM,YAAY,CAAA;AACnB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C,OAAO,EAGL,WAAW,EAGZ,MAAM,sBAAsB,CAAA;AAE7B,OAAO,EAAE,WAAW,EAAE,CAAA;AAmBtB;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,qBAAqB,EAAE,GACnC,MAAM,CAOR;AA0DD;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,YAAY,EAAE,uBAAuB,GACpC,qBAAqB,EAAE,CAQzB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,aAAa,GAAG,UAAU,CAYtE;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,eAAe,GAAG,QAAQ,CAKxE;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,OAAO,EACR,EAAE;IACD,OAAO,EAAE,SAAS,EAAE,CAAA;CACrB,GAAG,OAAO,CAQV;AAED;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,EAAE,CAS3D;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,eAAe,GACrB,gBAAgB,EAAE,CAMpB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,sBAAsB,EAAE,CAc5E;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,MAAM,EACP,EAAE;IACD,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACf,GAAG,MAAM,CAmBT;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,OAAO,EACP,MAAM,EACP,EAAE;IACD,OAAO,EAAE,SAAS,EAAE,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;CACf,GAAG,kBAAkB,GAAG,IAAI,CA2C5B;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB,KAAK,CAAA;AAEvC;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAoBtE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,WAAW,GACnB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAS9B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,oBAAoB,CAW1E;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAMpE;AAED;;;;;GAKG;AACH,eAAO,MAAM,+BAA+B,kBAAmB,CAAA;AAE/D;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,SAAS,EAAE,EACpB,kBAAkB,GAAE,SAAS,MAAM,EAAoC,GACtE,OAAO,CAWT"}
|
package/dist/request/classify.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { typeArray } from '@interop/data-integrity-core/guards';
|
|
2
|
+
import { isAppConnectQuery, isWalletOnboardingQuery, isZcapQuery, parsedAbsoluteUrl, singletonQueryOf } from './queryPredicates.js';
|
|
3
|
+
export { isZcapQuery };
|
|
2
4
|
const VC_1_CONTEXT_URL = 'https://www.w3.org/2018/credentials/v1';
|
|
3
5
|
const VC_2_CONTEXT_URL = 'https://www.w3.org/ns/credentials/v2';
|
|
4
6
|
/**
|
|
@@ -164,21 +166,6 @@ export function credentialQueriesOf(query) {
|
|
|
164
166
|
}
|
|
165
167
|
return Array.isArray(credentialQuery) ? credentialQuery : [credentialQuery];
|
|
166
168
|
}
|
|
167
|
-
/**
|
|
168
|
-
* Whether a query is a standalone capability query, under either type string:
|
|
169
|
-
* `AuthorizationCapabilityQuery` (the canonical VCALM spelling) or the legacy
|
|
170
|
-
* `ZcapQuery`.
|
|
171
|
-
*
|
|
172
|
-
* The one reader of that alias pair. Both exclusivity checks and both
|
|
173
|
-
* capability extractors ask through here, so retiring or extending the pair
|
|
174
|
-
* is one edit rather than four.
|
|
175
|
-
*
|
|
176
|
-
* @param query {IVPRQuery}
|
|
177
|
-
* @returns {boolean}
|
|
178
|
-
*/
|
|
179
|
-
export function isZcapQuery(query) {
|
|
180
|
-
return (query.type === 'AuthorizationCapabilityQuery' || query.type === 'ZcapQuery');
|
|
181
|
-
}
|
|
182
169
|
/**
|
|
183
170
|
* Collects the requested capabilities from a query set: filters the two zcap
|
|
184
171
|
* query type strings (`AuthorizationCapabilityQuery` canonical, `ZcapQuery`
|
|
@@ -223,16 +210,11 @@ export function zcapQueriesOf(queries) {
|
|
|
223
210
|
* @returns {string} The parsed URL's serialization.
|
|
224
211
|
*/
|
|
225
212
|
export function serializedAppUrl({ appUrl, origin }) {
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
throw new Error(`An AppConnectQuery "appUrl" must be an absolute URL (got "${appUrl}").`, { cause: err });
|
|
232
|
-
}
|
|
233
|
-
if (url.href.includes('#')) {
|
|
234
|
-
throw new Error(`An AppConnectQuery "appUrl" must not carry a fragment (got "${appUrl}").`);
|
|
235
|
-
}
|
|
213
|
+
const url = parsedAbsoluteUrl({
|
|
214
|
+
value: appUrl,
|
|
215
|
+
notAbsoluteMessage: `An AppConnectQuery "appUrl" must be an absolute URL (got "${appUrl}").`,
|
|
216
|
+
fragmentMessage: `An AppConnectQuery "appUrl" must not carry a fragment (got "${appUrl}").`
|
|
217
|
+
});
|
|
236
218
|
let attestedOrigin;
|
|
237
219
|
try {
|
|
238
220
|
attestedOrigin = new URL(origin).origin;
|
|
@@ -271,23 +253,20 @@ export function serializedAppUrl({ appUrl, origin }) {
|
|
|
271
253
|
* @returns {IAppConnectRequest | null}
|
|
272
254
|
*/
|
|
273
255
|
export function appConnectRequestOf({ queries, origin }) {
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
256
|
+
const appConnectQuery = singletonQueryOf({
|
|
257
|
+
queries,
|
|
258
|
+
isSingleton: isAppConnectQuery,
|
|
259
|
+
isExcluded: query => query.type === 'QueryByExample' ||
|
|
260
|
+
isZcapQuery(query) ||
|
|
261
|
+
isWalletOnboardingQuery(query),
|
|
262
|
+
typeName: 'AppConnectQuery',
|
|
263
|
+
mixedMessage: 'An AppConnectQuery cannot be combined with QueryByExample, ' +
|
|
264
|
+
'standalone capability queries, or a WalletOnboardingQuery.'
|
|
265
|
+
});
|
|
266
|
+
if (appConnectQuery === null) {
|
|
278
267
|
return null;
|
|
279
268
|
}
|
|
280
|
-
|
|
281
|
-
throw new Error('More than one AppConnectQuery found, exiting.');
|
|
282
|
-
}
|
|
283
|
-
const mixed = queries.some(query => query.type === 'QueryByExample' ||
|
|
284
|
-
isZcapQuery(query) ||
|
|
285
|
-
query.type === 'WalletOnboardingQuery');
|
|
286
|
-
if (mixed) {
|
|
287
|
-
throw new Error('An AppConnectQuery cannot be combined with QueryByExample, ' +
|
|
288
|
-
'standalone capability queries, or a WalletOnboardingQuery.');
|
|
289
|
-
}
|
|
290
|
-
const { app, capabilityQuery } = appConnectQueries[0];
|
|
269
|
+
const { app, capabilityQuery } = appConnectQuery;
|
|
291
270
|
if (!app || typeof app.name !== 'string' || typeof app.appUrl !== 'string') {
|
|
292
271
|
throw new Error('An AppConnectQuery is missing its app name / appUrl.');
|
|
293
272
|
}
|