@interop/wallet-core 0.65.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 +112 -21
- package/dist/clientAnnex/establish.d.ts.map +1 -1
- package/dist/clientAnnex/establish.js +248 -180
- package/dist/clientAnnex/establish.js.map +1 -1
- package/dist/clientAnnex/forget.d.ts +2 -6
- package/dist/clientAnnex/forget.d.ts.map +1 -1
- package/dist/clientAnnex/forget.js +31 -61
- package/dist/clientAnnex/forget.js.map +1 -1
- package/dist/clientAnnex/forgetLast.d.ts +48 -132
- package/dist/clientAnnex/forgetLast.d.ts.map +1 -1
- package/dist/clientAnnex/forgetLast.js +88 -221
- package/dist/clientAnnex/forgetLast.js.map +1 -1
- package/dist/clientAnnex/gc.d.ts.map +1 -1
- package/dist/clientAnnex/gc.js +9 -0
- package/dist/clientAnnex/gc.js.map +1 -1
- package/dist/clientAnnex/heal.d.ts +97 -13
- package/dist/clientAnnex/heal.d.ts.map +1 -1
- package/dist/clientAnnex/heal.js +108 -174
- package/dist/clientAnnex/heal.js.map +1 -1
- package/dist/clientAnnex/index.d.ts +8 -8
- package/dist/clientAnnex/index.d.ts.map +1 -1
- package/dist/clientAnnex/index.js +6 -6
- 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 +310 -55
- 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 +148 -72
- package/dist/clientAnnex/log.d.ts.map +1 -1
- package/dist/clientAnnex/log.js +211 -137
- package/dist/clientAnnex/log.js.map +1 -1
- package/dist/clientAnnex/mend.d.ts.map +1 -1
- package/dist/clientAnnex/mend.js +63 -81
- 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 +19 -5
- package/dist/keys/index.d.ts.map +1 -1
- package/dist/keys/index.js +17 -3
- package/dist/keys/index.js.map +1 -1
- package/dist/keys/rosterLogStore.d.ts +3 -1
- package/dist/keys/rosterLogStore.d.ts.map +1 -1
- package/dist/keys/rosterLogStore.js +20 -8
- 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/userKeyCascade.d.ts +8 -5
- package/dist/keys/userKeyCascade.d.ts.map +1 -1
- package/dist/keys/userKeyCascade.js +7 -6
- package/dist/keys/userKeyCascade.js.map +1 -1
- package/dist/keys/userKeyRoster.d.ts +68 -4
- package/dist/keys/userKeyRoster.d.ts.map +1 -1
- package/dist/keys/userKeyRoster.js +146 -33
- package/dist/keys/userKeyRoster.js.map +1 -1
- package/dist/keys/userKeyRosterCascade.d.ts +110 -10
- package/dist/keys/userKeyRosterCascade.d.ts.map +1 -1
- package/dist/keys/userKeyRosterCascade.js +184 -40
- 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 +40 -120
- package/dist/recovery/recoveryDelegation.d.ts.map +1 -1
- package/dist/recovery/recoveryDelegation.js +36 -268
- 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/appKey.d.ts +35 -1
- package/dist/request/appKey.d.ts.map +1 -1
- package/dist/request/appKey.js +29 -10
- package/dist/request/appKey.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,7 +1,28 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) 2026 Interop Alliance. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* The recovery code's authorization bridge: the pre-minted PUT-on-`did.jsonl`
|
|
6
|
+
* delegation. The delegation is a wire artifact both apps must mint
|
|
7
|
+
* byte-identically (issuance and every re-bind produce the record another
|
|
8
|
+
* replica later recovers with), so its builder lives here: PUT on the one
|
|
9
|
+
* `did.jsonl` resource, one-year TTL, delegated to the code-derived signing
|
|
10
|
+
* DID. Its narrow scope is what keeps recovery loud -- a stolen code must
|
|
11
|
+
* extend the world-readable log before it can read anything.
|
|
12
|
+
*
|
|
13
|
+
* No ceremony re-mints another credential's bridge. A record's bridge and
|
|
14
|
+
* `delegatedClients` sibling are signed by that record's own credential's
|
|
15
|
+
* ladder VM, and its frame proof by that credential's own unlock identity
|
|
16
|
+
* key (`decisions/0019`), so the only thing that can rot a bridge is
|
|
17
|
+
* retiring the credential it belongs to -- which deletes the record with it.
|
|
18
|
+
* A bridge that ages out, or one a pre-rule bind left signed by a foreign
|
|
19
|
+
* key, is refreshed by that credential's own login on the house staleness
|
|
20
|
+
* axes ({@link zcapExpiring}, `recordedZcapStale`), and the registry fields
|
|
21
|
+
* a refresh records are built here ({@link recordedDelegationFields}).
|
|
22
|
+
*/
|
|
1
23
|
import type { IZcap } from '@interop/data-integrity-core';
|
|
2
24
|
import type { ZcapClient } from '@interop/ezcap';
|
|
3
|
-
import type {
|
|
4
|
-
import type { AccountPointer, RecordSigner } from '../keyring/record.js';
|
|
25
|
+
import type { AccountPointer } from '../keyring/record.js';
|
|
5
26
|
import { delegationProofKeyId } from '../webvh/standingZcap.js';
|
|
6
27
|
/**
|
|
7
28
|
* The recovery delegation's lifetime: the house standing-zcap value
|
|
@@ -42,127 +63,26 @@ export declare function delegateLogWrite({ zcapClient, pointer, recoveryClientDi
|
|
|
42
63
|
}): Promise<IZcap>;
|
|
43
64
|
export { delegationProofKeyId };
|
|
44
65
|
/**
|
|
45
|
-
* The
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
* delegation
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
* purpose -- an app's richer registry entry satisfies it, and the re-mint
|
|
58
|
-
* hands the SAME entry back (with the fresh key ids and expiries) through the
|
|
59
|
-
* record seam, extra members untouched.
|
|
66
|
+
* The registry fields a record's delegations stand for -- which key signed
|
|
67
|
+
* the bridge and the `delegatedClients` sibling, and when each expires --
|
|
68
|
+
* built once here for the re-mint and for the credential-anchored
|
|
69
|
+
* establishment's standing fields. A member is present iff its source is:
|
|
70
|
+
* an absent delegation, a proof with no key id, or a caveat-less zcap
|
|
71
|
+
* contributes nothing.
|
|
72
|
+
*
|
|
73
|
+
* @param options {object}
|
|
74
|
+
* @param [options.delegation] {IZcap} the record's bridge delegation
|
|
75
|
+
* @param [options.delegatedClients] {IZcap} the record's sibling
|
|
76
|
+
* @returns {{ delegationKeyId?: string, delegationExpires?: string,
|
|
77
|
+
* delegatedClientsKeyId?: string, delegatedClientsExpires?: string }}
|
|
60
78
|
*/
|
|
61
|
-
export
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
79
|
+
export declare function recordedDelegationFields({ delegation, delegatedClients }: {
|
|
80
|
+
delegation?: IZcap;
|
|
81
|
+
delegatedClients?: IZcap;
|
|
82
|
+
}): {
|
|
65
83
|
delegationKeyId?: string;
|
|
66
84
|
delegationExpires?: string;
|
|
67
85
|
delegatedClientsKeyId?: string;
|
|
68
86
|
delegatedClientsExpires?: string;
|
|
69
|
-
|
|
70
|
-
unlockKeyAgreementKeyId?: string;
|
|
71
|
-
unlockKeyAgreementKeyMultibase?: string;
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* One registry entry's fate in a re-mint pass: `current` (both members stand
|
|
75
|
-
* and are outside the renewal window -- nothing written), `reminted` (the
|
|
76
|
-
* record re-sealed and the entry handed back fresh; `siblingCarriedVerbatim`
|
|
77
|
-
* flags a recorded sibling the pass could not rebuild because the document
|
|
78
|
-
* points at no generation, which stays flagged for the health check),
|
|
79
|
-
* `incomplete-entry` (an entry predating the re-mint fields, skipped until
|
|
80
|
-
* the credential is re-bound), `pending-entry` (the entry's recorded
|
|
81
|
-
* unlock-key members do not match the credential the record at its unlock
|
|
82
|
-
* Space is sealed to -- a passphrase change torn before its retirement; the
|
|
83
|
-
* next passphrase login's repair finishes it, and re-minting here would
|
|
84
|
-
* re-arm the retired credential into the new one's record), or `failed` (the record could not be read,
|
|
85
|
-
* re-sealed, or re-PUT -- `error` carries the cause). A skipped or failed
|
|
86
|
-
* entry is named here so no caller can lose it silently.
|
|
87
|
-
*/
|
|
88
|
-
export interface RecordRemintOutcome {
|
|
89
|
-
label: string;
|
|
90
|
-
unlockSpaceId: string;
|
|
91
|
-
outcome: 'current' | 'reminted' | 'incomplete-entry' | 'pending-entry' | 'failed';
|
|
92
|
-
siblingCarriedVerbatim?: boolean;
|
|
93
|
-
error?: unknown;
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Re-mints the recovery delegations the current document no longer backs --
|
|
97
|
-
* the recovery-code delta riding the revocation cascade (see the module doc
|
|
98
|
-
* for the mechanism and the skip policy).
|
|
99
|
-
*
|
|
100
|
-
* The record's credential-authenticated core is preserved verbatim: the
|
|
101
|
-
* re-mint reads the standing record through the entry's management zcap and
|
|
102
|
-
* replaces only its delegation members
|
|
103
|
-
* ({@link remintUnlockRecordDelegations}) -- the bridge always, and the
|
|
104
|
-
* annex Space sibling where the entry records one (the two rot on one
|
|
105
|
-
* axis, so both reseal in the same atomic pass and one registry-entry
|
|
106
|
-
* rewrite records both fresh pairs). The
|
|
107
|
-
* shell, the ladder member (where one rides), and the binding tag all travel
|
|
108
|
-
* untouched, since the re-mint can decrypt none of them and does not need to.
|
|
109
|
-
* A re-mint therefore can never change the pointer or controller the
|
|
110
|
-
* credential was bound against -- and after a host migration the tag no
|
|
111
|
-
* longer matches the moved pointer, so credentials must be rebound (codes
|
|
112
|
-
* re-issued) when the account moves hosts.
|
|
113
|
-
*
|
|
114
|
-
* The re-mint holds the code's KAK public half but not its signing key, so
|
|
115
|
-
* every record it re-PUTs is signed with the acting client's own account key
|
|
116
|
-
* (`recordSigner`) -- the mixed-signer case a reader settles against the
|
|
117
|
-
* verified did:webvh document.
|
|
118
|
-
*
|
|
119
|
-
* Best-effort per entry: a skipped entry stays flagged by the login-time
|
|
120
|
-
* health check, whose regenerate nudge remains the backstop.
|
|
121
|
-
*
|
|
122
|
-
* @param options {object}
|
|
123
|
-
* @param options.doc {PublishedKeyDocument} the locally verified did:webvh
|
|
124
|
-
* document, AFTER the revocation edit
|
|
125
|
-
* @param options.entries {RecoveryDelegationEntry[]} the registry's
|
|
126
|
-
* recovery-code entries, as the app's registry read returned them
|
|
127
|
-
* @param options.pointer {AccountPointer}
|
|
128
|
-
* @param options.storageServerUrl {string} the unlock Spaces' storage server
|
|
129
|
-
* @param options.zcapClient {ZcapClient} the acting client's promoted
|
|
130
|
-
* signer, which mints the fresh delegations
|
|
131
|
-
* @param options.recordSigner {RecordSigner} the acting client's account
|
|
132
|
-
* key, which signs the re-wrapped records
|
|
133
|
-
* @param options.managementZcapClient {Function} `({ capability }) =>
|
|
134
|
-
* ZcapClient` -- the client an entry's management zcap is invoked with
|
|
135
|
-
* @param options.recordEntry {Function} `({ entry }) => Promise<void>` --
|
|
136
|
-
* persists one updated registry entry (matching on the app's entry key)
|
|
137
|
-
* @param [options.mintDelegatedClientsDelegation] {Function} `({ controller })
|
|
138
|
-
* => Promise<IZcap | undefined>` -- the annex-side mint of a fresh
|
|
139
|
-
* `delegatedClients` sibling delegation, injected by the caller (the
|
|
140
|
-
* annex subpath's `delegatedClientsDelegationMinter` builds one over the
|
|
141
|
-
* verified document); `undefined` when the document points at no
|
|
142
|
-
* generation, in which case the old sealed member travels verbatim
|
|
143
|
-
* @returns {Promise<{ reminted: number; skipped: number }>}
|
|
144
|
-
*/
|
|
145
|
-
export declare function remintRecoveryDelegations<Entry extends RecoveryDelegationEntry>({ doc, entries, pointer, storageServerUrl, zcapClient, recordSigner, managementZcapClient, recordEntry, mintDelegatedClientsDelegation, retiringKeyMultibases, now }: {
|
|
146
|
-
doc: PublishedKeyDocument;
|
|
147
|
-
entries: Entry[];
|
|
148
|
-
pointer: AccountPointer;
|
|
149
|
-
storageServerUrl: string;
|
|
150
|
-
zcapClient: ZcapClient;
|
|
151
|
-
recordSigner: RecordSigner;
|
|
152
|
-
managementZcapClient: (options: {
|
|
153
|
-
capability: IZcap;
|
|
154
|
-
}) => ZcapClient;
|
|
155
|
-
recordEntry: (options: {
|
|
156
|
-
entry: Entry;
|
|
157
|
-
}) => Promise<void>;
|
|
158
|
-
mintDelegatedClientsDelegation?: (options: {
|
|
159
|
-
controller: string;
|
|
160
|
-
}) => Promise<IZcap | undefined>;
|
|
161
|
-
retiringKeyMultibases?: string[];
|
|
162
|
-
now?: number;
|
|
163
|
-
}): Promise<{
|
|
164
|
-
reminted: number;
|
|
165
|
-
skipped: number;
|
|
166
|
-
outcomes: RecordRemintOutcome[];
|
|
167
|
-
}>;
|
|
87
|
+
};
|
|
168
88
|
//# sourceMappingURL=recoveryDelegation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recoveryDelegation.d.ts","sourceRoot":"","sources":["../../src/recovery/recoveryDelegation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"recoveryDelegation.d.ts","sourceRoot":"","sources":["../../src/recovery/recoveryDelegation.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAA;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAGhD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EACL,oBAAoB,EAErB,MAAM,0BAA0B,CAAA;AAEjC;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,0BAA0B,QAAuB,CAAA;AAI9D,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAqB/E;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,gBAAgB,CAAC,EACrC,UAAU,EACV,OAAO,EACP,iBAAiB,EACjB,GAAgB,EACjB,EAAE;IACD,UAAU,EAAE,UAAU,CAAA;IACtB,OAAO,EAAE,cAAc,CAAA;IACvB,iBAAiB,EAAE,MAAM,CAAA;IACzB,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,GAAG,OAAO,CAAC,KAAK,CAAC,CAOjB;AAID,OAAO,EAAE,oBAAoB,EAAE,CAAA;AAE/B;;;;;;;;;;;;;GAaG;AACH,wBAAgB,wBAAwB,CAAC,EACvC,UAAU,EACV,gBAAgB,EACjB,EAAE;IACD,UAAU,CAAC,EAAE,KAAK,CAAA;IAClB,gBAAgB,CAAC,EAAE,KAAK,CAAA;CACzB,GAAG;IACF,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,uBAAuB,CAAC,EAAE,MAAM,CAAA;CACjC,CAiBA"}
|
|
@@ -1,55 +1,6 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) 2026 Interop Alliance. All rights reserved.
|
|
3
|
-
*/
|
|
4
|
-
/**
|
|
5
|
-
* The recovery code's authorization bridge: the pre-minted PUT-on-`did.jsonl`
|
|
6
|
-
* delegation and the revocation cascade's re-mint of it. The delegation is a
|
|
7
|
-
* wire artifact both apps must mint byte-identically (issuance and every
|
|
8
|
-
* re-mint produce the record another replica later recovers with), so its
|
|
9
|
-
* builder lives here: PUT on the one `did.jsonl` resource, one-year TTL,
|
|
10
|
-
* delegated to the code-derived signing DID. Its narrow scope is what keeps
|
|
11
|
-
* recovery loud -- a stolen code must extend the world-readable log before it
|
|
12
|
-
* can read anything.
|
|
13
|
-
*
|
|
14
|
-
* Beside the builder lives the re-mint core (`remintRecoveryDelegations`):
|
|
15
|
-
* revoking a client kills, by the current-key-set rule, every `did.jsonl`
|
|
16
|
-
* delegation that client signed, which would brick recovery exactly when it
|
|
17
|
-
* is needed -- and a delegation left standing eventually reaches its own
|
|
18
|
-
* expiry. For each registry entry whose recorded delegation no longer
|
|
19
|
-
* chains (its signing verification method left `capabilityDelegation` in the
|
|
20
|
-
* document) or is expired or inside the renewal window, the acting client
|
|
21
|
-
* signs a fresh delegation to the code's signing DID, re-wraps the
|
|
22
|
-
* record to the code's unlock KAK (the public half the registry records --
|
|
23
|
-
* the record carries no secrets, so re-encryption needs none), re-PUTs it
|
|
24
|
-
* through the entry's management zcap, and updates the registry's
|
|
25
|
-
* `delegationKeyId` and `delegationExpires`. A standing credential's
|
|
26
|
-
* client-annex Space sibling delegation rides the same pass (its scalar pair is
|
|
27
|
-
* `delegatedClientsKeyId` / `delegatedClientsExpires`): either member going
|
|
28
|
-
* stale reseals both, and the one registry rewrite records both fresh pairs
|
|
29
|
-
* -- a re-mint handling only the bridge is incomplete. The skip policy is
|
|
30
|
-
* cross-replica correctness and is
|
|
31
|
-
* decided here once: an entry that predates the re-mint fields, or whose
|
|
32
|
-
* standing record cannot be read or carries no binding, is skipped and stays
|
|
33
|
-
* flagged by the login-time health check. Every entry's fate is reported
|
|
34
|
-
* (`RecordRemintOutcome`), so a record the pass could not reach is named
|
|
35
|
-
* rather than silently left with a rotted bridge. What stays app-side is the
|
|
36
|
-
* seams: the management-zcap client factory, the storage server URL, and the
|
|
37
|
-
* registry read/record halves.
|
|
38
|
-
*
|
|
39
|
-
* The same pass serves the last-client forget ceremony, whose acting signer
|
|
40
|
-
* is the ladder VM rather than an enrolled client: there the rot check runs
|
|
41
|
-
* against the post-install document, in which the client about to be removed
|
|
42
|
-
* still stands, so the ceremony names it as retiring
|
|
43
|
-
* (`retiringKeyMultibases`) and every delegation it signed counts as rotted
|
|
44
|
-
* ahead of the removal entry.
|
|
45
|
-
*/
|
|
46
|
-
import { X25519KeyAgreementKey2020 } from '@interop/x25519-key-agreement-key';
|
|
47
1
|
import { resourcePath, toUrl } from '@interop/was-client/paths';
|
|
48
|
-
import { log } from '../log.js';
|
|
49
2
|
import { DID_LOG_RESOURCE, ID_COLLECTION } from '../space/collections.js';
|
|
50
|
-
import {
|
|
51
|
-
import { remintUnlockRecordDelegations, unlockRecordSealedTo } from '../unlock/unlockRecord.js';
|
|
52
|
-
import { delegationProofKeyId, recordedZcapStale, STANDING_ZCAP_TTL_MS } from '../webvh/standingZcap.js';
|
|
3
|
+
import { delegationProofKeyId, STANDING_ZCAP_TTL_MS } from '../webvh/standingZcap.js';
|
|
53
4
|
/**
|
|
54
5
|
* The recovery delegation's lifetime: the house standing-zcap value
|
|
55
6
|
* ({@link STANDING_ZCAP_TTL_MS} -- one year, per NIST SP 800-57's
|
|
@@ -113,227 +64,44 @@ export async function delegateLogWrite({ zcapClient, pointer, recoveryClientDid,
|
|
|
113
64
|
// module's public surface is unchanged.
|
|
114
65
|
export { delegationProofKeyId };
|
|
115
66
|
/**
|
|
116
|
-
*
|
|
117
|
-
* the
|
|
118
|
-
* for the
|
|
119
|
-
*
|
|
120
|
-
*
|
|
121
|
-
*
|
|
122
|
-
* replaces only its delegation members
|
|
123
|
-
* ({@link remintUnlockRecordDelegations}) -- the bridge always, and the
|
|
124
|
-
* annex Space sibling where the entry records one (the two rot on one
|
|
125
|
-
* axis, so both reseal in the same atomic pass and one registry-entry
|
|
126
|
-
* rewrite records both fresh pairs). The
|
|
127
|
-
* shell, the ladder member (where one rides), and the binding tag all travel
|
|
128
|
-
* untouched, since the re-mint can decrypt none of them and does not need to.
|
|
129
|
-
* A re-mint therefore can never change the pointer or controller the
|
|
130
|
-
* credential was bound against -- and after a host migration the tag no
|
|
131
|
-
* longer matches the moved pointer, so credentials must be rebound (codes
|
|
132
|
-
* re-issued) when the account moves hosts.
|
|
133
|
-
*
|
|
134
|
-
* The re-mint holds the code's KAK public half but not its signing key, so
|
|
135
|
-
* every record it re-PUTs is signed with the acting client's own account key
|
|
136
|
-
* (`recordSigner`) -- the mixed-signer case a reader settles against the
|
|
137
|
-
* verified did:webvh document.
|
|
138
|
-
*
|
|
139
|
-
* Best-effort per entry: a skipped entry stays flagged by the login-time
|
|
140
|
-
* health check, whose regenerate nudge remains the backstop.
|
|
67
|
+
* The registry fields a record's delegations stand for -- which key signed
|
|
68
|
+
* the bridge and the `delegatedClients` sibling, and when each expires --
|
|
69
|
+
* built once here for the re-mint and for the credential-anchored
|
|
70
|
+
* establishment's standing fields. A member is present iff its source is:
|
|
71
|
+
* an absent delegation, a proof with no key id, or a caveat-less zcap
|
|
72
|
+
* contributes nothing.
|
|
141
73
|
*
|
|
142
74
|
* @param options {object}
|
|
143
|
-
* @param options.
|
|
144
|
-
*
|
|
145
|
-
* @
|
|
146
|
-
*
|
|
147
|
-
* @param options.pointer {AccountPointer}
|
|
148
|
-
* @param options.storageServerUrl {string} the unlock Spaces' storage server
|
|
149
|
-
* @param options.zcapClient {ZcapClient} the acting client's promoted
|
|
150
|
-
* signer, which mints the fresh delegations
|
|
151
|
-
* @param options.recordSigner {RecordSigner} the acting client's account
|
|
152
|
-
* key, which signs the re-wrapped records
|
|
153
|
-
* @param options.managementZcapClient {Function} `({ capability }) =>
|
|
154
|
-
* ZcapClient` -- the client an entry's management zcap is invoked with
|
|
155
|
-
* @param options.recordEntry {Function} `({ entry }) => Promise<void>` --
|
|
156
|
-
* persists one updated registry entry (matching on the app's entry key)
|
|
157
|
-
* @param [options.mintDelegatedClientsDelegation] {Function} `({ controller })
|
|
158
|
-
* => Promise<IZcap | undefined>` -- the annex-side mint of a fresh
|
|
159
|
-
* `delegatedClients` sibling delegation, injected by the caller (the
|
|
160
|
-
* annex subpath's `delegatedClientsDelegationMinter` builds one over the
|
|
161
|
-
* verified document); `undefined` when the document points at no
|
|
162
|
-
* generation, in which case the old sealed member travels verbatim
|
|
163
|
-
* @returns {Promise<{ reminted: number; skipped: number }>}
|
|
75
|
+
* @param [options.delegation] {IZcap} the record's bridge delegation
|
|
76
|
+
* @param [options.delegatedClients] {IZcap} the record's sibling
|
|
77
|
+
* @returns {{ delegationKeyId?: string, delegationExpires?: string,
|
|
78
|
+
* delegatedClientsKeyId?: string, delegatedClientsExpires?: string }}
|
|
164
79
|
*/
|
|
165
|
-
export
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
80
|
+
export function recordedDelegationFields({ delegation, delegatedClients }) {
|
|
81
|
+
const delegationKeyId = delegation
|
|
82
|
+
? delegationProofKeyId(delegation)
|
|
83
|
+
: undefined;
|
|
84
|
+
const delegationExpires = delegation ? zcapExpires(delegation) : undefined;
|
|
85
|
+
const delegatedClientsKeyId = delegatedClients
|
|
86
|
+
? delegationProofKeyId(delegatedClients)
|
|
87
|
+
: undefined;
|
|
88
|
+
const delegatedClientsExpires = delegatedClients
|
|
89
|
+
? zcapExpires(delegatedClients)
|
|
90
|
+
: undefined;
|
|
91
|
+
return {
|
|
177
92
|
...(delegationKeyId ? { delegationKeyId } : {}),
|
|
178
|
-
...(
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
if (!stale && !siblingStale) {
|
|
192
|
-
outcomes.push({
|
|
193
|
-
label: entry.label,
|
|
194
|
-
unlockSpaceId: entry.unlockSpaceId,
|
|
195
|
-
outcome: 'current'
|
|
196
|
-
});
|
|
197
|
-
continue;
|
|
198
|
-
}
|
|
199
|
-
if (!entry.recoveryClientDid ||
|
|
200
|
-
!entry.unlockKeyAgreementKeyId ||
|
|
201
|
-
!entry.unlockKeyAgreementKeyMultibase ||
|
|
202
|
-
!entry.manageCapability) {
|
|
203
|
-
// An entry issued before the re-mint fields existed: the health check
|
|
204
|
-
// keeps flagging it until the code is regenerated.
|
|
205
|
-
skipped += 1;
|
|
206
|
-
outcomes.push({
|
|
207
|
-
label: entry.label,
|
|
208
|
-
unlockSpaceId: entry.unlockSpaceId,
|
|
209
|
-
outcome: 'incomplete-entry'
|
|
210
|
-
});
|
|
211
|
-
continue;
|
|
212
|
-
}
|
|
213
|
-
try {
|
|
214
|
-
// The standing record, whose credential-authenticated core travels
|
|
215
|
-
// verbatim (a record with no binding predates the standing layout and
|
|
216
|
-
// cannot be re-minted -- `remintUnlockRecordDelegations` refuses, and the
|
|
217
|
-
// entry is skipped into the health check's regenerate nudge).
|
|
218
|
-
const standing = await getUnlockKeyringWithCapability({
|
|
219
|
-
storageServerUrl,
|
|
220
|
-
zcapClient: managementZcapClient({
|
|
221
|
-
capability: entry.manageCapability
|
|
222
|
-
}),
|
|
223
|
-
spaceId: entry.unlockSpaceId,
|
|
224
|
-
capability: entry.manageCapability
|
|
225
|
-
});
|
|
226
|
-
// The pending-shaped guard: the entry's `unlockSpaceId` and
|
|
227
|
-
// `manageCapability` name one credential while its identity members
|
|
228
|
-
// name another -- the state a passphrase change torn before its
|
|
229
|
-
// retirement leaves. Re-minting here would seal a fresh
|
|
230
|
-
// current-client-signed bridge for the OLD credential into the NEW
|
|
231
|
-
// credential's record, re-arming the half-retired credential and
|
|
232
|
-
// bricking the new one's entry paths. Nothing is written; the next
|
|
233
|
-
// passphrase login's repair is the mender.
|
|
234
|
-
if (!unlockRecordSealedTo({
|
|
235
|
-
record: standing,
|
|
236
|
-
keyAgreementKeyMultibase: entry.unlockKeyAgreementKeyMultibase
|
|
237
|
-
})) {
|
|
238
|
-
log.warn('The unlock record at the Space recorded for this entry is ' +
|
|
239
|
-
'sealed to another credential (a passphrase change torn before ' +
|
|
240
|
-
'its retirement landed); its delegations are not re-minted', { label: entry.label });
|
|
241
|
-
skipped += 1;
|
|
242
|
-
outcomes.push({
|
|
243
|
-
label: entry.label,
|
|
244
|
-
unlockSpaceId: entry.unlockSpaceId,
|
|
245
|
-
outcome: 'pending-entry'
|
|
246
|
-
});
|
|
247
|
-
continue;
|
|
248
|
-
}
|
|
249
|
-
const delegation = await delegateLogWrite({
|
|
250
|
-
zcapClient,
|
|
251
|
-
pointer,
|
|
252
|
-
recoveryClientDid: entry.recoveryClientDid
|
|
253
|
-
});
|
|
254
|
-
// The fresh annex Space sibling, for an entry that records one --
|
|
255
|
-
// minted through the injected annex-side closure, so this orchestrator
|
|
256
|
-
// never imports the annex module. A document not (yet) pointing at a
|
|
257
|
-
// generation (or a caller wiring no minter) leaves nothing to rebuild
|
|
258
|
-
// the target from, so the old sealed member travels verbatim and the
|
|
259
|
-
// pair stays stale-flagged for the login-time health check.
|
|
260
|
-
let delegatedClients;
|
|
261
|
-
let siblingCarriedVerbatim = false;
|
|
262
|
-
if (siblingRecorded) {
|
|
263
|
-
delegatedClients = await mintDelegatedClientsDelegation?.({
|
|
264
|
-
controller: entry.recoveryClientDid
|
|
265
|
-
});
|
|
266
|
-
if (!delegatedClients) {
|
|
267
|
-
siblingCarriedVerbatim = true;
|
|
268
|
-
log.warn('The account document names no client-annex generation; the ' +
|
|
269
|
-
'delegatedClients delegation for this entry is carried verbatim', { label: entry.label });
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
// The credential's unlock KAK, public half only -- exactly enough to
|
|
273
|
-
// seal the fresh bridge to the same recipient the credential derives
|
|
274
|
-
// (sealing goes through the encrypt-only cipher, so no secret is
|
|
275
|
-
// needed).
|
|
276
|
-
const unlockKak = (await X25519KeyAgreementKey2020.from({
|
|
277
|
-
id: entry.unlockKeyAgreementKeyId,
|
|
278
|
-
controller: entry.unlockKeyAgreementKeyId.split('#')[0],
|
|
279
|
-
type: 'X25519KeyAgreementKey2020',
|
|
280
|
-
publicKeyMultibase: entry.unlockKeyAgreementKeyMultibase
|
|
281
|
-
}));
|
|
282
|
-
const wrapped = await remintUnlockRecordDelegations({
|
|
283
|
-
record: standing,
|
|
284
|
-
delegation,
|
|
285
|
-
...(delegatedClients ? { delegatedClients } : {}),
|
|
286
|
-
keyAgreementKey: unlockKak,
|
|
287
|
-
signer: recordSigner
|
|
288
|
-
});
|
|
289
|
-
await putUnlockKeyringWithCapability({
|
|
290
|
-
storageServerUrl,
|
|
291
|
-
zcapClient: managementZcapClient({
|
|
292
|
-
capability: entry.manageCapability
|
|
293
|
-
}),
|
|
294
|
-
spaceId: entry.unlockSpaceId,
|
|
295
|
-
record: wrapped,
|
|
296
|
-
capability: entry.manageCapability
|
|
297
|
-
});
|
|
298
|
-
const delegationKeyId = delegationProofKeyId(delegation);
|
|
299
|
-
const delegationExpires = delegation.expires;
|
|
300
|
-
const delegatedClientsKeyId = delegatedClients
|
|
301
|
-
? delegationProofKeyId(delegatedClients)
|
|
302
|
-
: undefined;
|
|
303
|
-
const delegatedClientsExpires = delegatedClients
|
|
304
|
-
? delegatedClients.expires
|
|
305
|
-
: undefined;
|
|
306
|
-
await recordEntry({
|
|
307
|
-
entry: {
|
|
308
|
-
...entry,
|
|
309
|
-
...(delegationKeyId ? { delegationKeyId } : {}),
|
|
310
|
-
...(delegationExpires ? { delegationExpires } : {}),
|
|
311
|
-
...(delegatedClientsKeyId ? { delegatedClientsKeyId } : {}),
|
|
312
|
-
...(delegatedClientsExpires ? { delegatedClientsExpires } : {})
|
|
313
|
-
}
|
|
314
|
-
});
|
|
315
|
-
reminted += 1;
|
|
316
|
-
outcomes.push({
|
|
317
|
-
label: entry.label,
|
|
318
|
-
unlockSpaceId: entry.unlockSpaceId,
|
|
319
|
-
outcome: 'reminted',
|
|
320
|
-
...(siblingCarriedVerbatim ? { siblingCarriedVerbatim } : {})
|
|
321
|
-
});
|
|
322
|
-
}
|
|
323
|
-
catch (err) {
|
|
324
|
-
log.warn('Could not re-mint the recovery delegation', {
|
|
325
|
-
label: entry.label,
|
|
326
|
-
err
|
|
327
|
-
});
|
|
328
|
-
skipped += 1;
|
|
329
|
-
outcomes.push({
|
|
330
|
-
label: entry.label,
|
|
331
|
-
unlockSpaceId: entry.unlockSpaceId,
|
|
332
|
-
outcome: 'failed',
|
|
333
|
-
error: err
|
|
334
|
-
});
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
return { reminted, skipped, outcomes };
|
|
93
|
+
...(delegationExpires ? { delegationExpires } : {}),
|
|
94
|
+
...(delegatedClientsKeyId ? { delegatedClientsKeyId } : {}),
|
|
95
|
+
...(delegatedClientsExpires ? { delegatedClientsExpires } : {})
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* A delegation's `expires` caveat, when it carries one.
|
|
100
|
+
*
|
|
101
|
+
* @param zcap {IZcap}
|
|
102
|
+
* @returns {string | undefined}
|
|
103
|
+
*/
|
|
104
|
+
function zcapExpires(zcap) {
|
|
105
|
+
return zcap.expires;
|
|
338
106
|
}
|
|
339
107
|
//# sourceMappingURL=recoveryDelegation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recoveryDelegation.js","sourceRoot":"","sources":["../../src/recovery/recoveryDelegation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"recoveryDelegation.js","sourceRoot":"","sources":["../../src/recovery/recoveryDelegation.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAA;AAC/D,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAEzE,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACrB,MAAM,0BAA0B,CAAA;AAEjC;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,oBAAoB,CAAA;AAE9D,wEAAwE;AACxE,2DAA2D;AAC3D,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAE/E;;;;;;;;;;;GAWG;AACH,SAAS,SAAS,CAAC,EAAE,OAAO,EAA+B;IACzD,OAAO,KAAK,CAAC;QACX,SAAS,EAAE,OAAO,CAAC,IAAI;QACvB,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,EAAE,gBAAgB,CAAC;KACxE,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,EACrC,UAAU,EACV,OAAO,EACP,iBAAiB,EACjB,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,EAMjB;IACC,OAAO,UAAU,CAAC,QAAQ,CAAC;QACzB,gBAAgB,EAAE,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;QACxC,UAAU,EAAE,iBAAiB;QAC7B,cAAc,EAAE,CAAC,KAAK,CAAC;QACvB,OAAO,EAAE,IAAI,IAAI,CAAC,GAAG,GAAG,0BAA0B,CAAC;KACpD,CAAC,CAAA;AACJ,CAAC;AAED,sEAAsE;AACtE,wCAAwC;AACxC,OAAO,EAAE,oBAAoB,EAAE,CAAA;AAE/B;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,wBAAwB,CAAC,EACvC,UAAU,EACV,gBAAgB,EAIjB;IAMC,MAAM,eAAe,GAAG,UAAU;QAChC,CAAC,CAAC,oBAAoB,CAAC,UAAU,CAAC;QAClC,CAAC,CAAC,SAAS,CAAA;IACb,MAAM,iBAAiB,GAAG,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAC1E,MAAM,qBAAqB,GAAG,gBAAgB;QAC5C,CAAC,CAAC,oBAAoB,CAAC,gBAAgB,CAAC;QACxC,CAAC,CAAC,SAAS,CAAA;IACb,MAAM,uBAAuB,GAAG,gBAAgB;QAC9C,CAAC,CAAC,WAAW,CAAC,gBAAgB,CAAC;QAC/B,CAAC,CAAC,SAAS,CAAA;IACb,OAAO;QACL,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,qBAAqB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,uBAAuB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChE,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,WAAW,CAAC,IAAW;IAC9B,OAAQ,IAA6B,CAAC,OAAO,CAAA;AAC/C,CAAC"}
|