@interop/wallet-core 0.49.0 → 0.50.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 +5 -2
- package/dist/clientAnnex/credentialAnchoredGenesis.d.ts +118 -0
- package/dist/clientAnnex/credentialAnchoredGenesis.d.ts.map +1 -0
- package/dist/clientAnnex/credentialAnchoredGenesis.js +174 -0
- package/dist/clientAnnex/credentialAnchoredGenesis.js.map +1 -0
- package/dist/clientAnnex/forget.d.ts +138 -0
- package/dist/clientAnnex/forget.d.ts.map +1 -0
- package/dist/clientAnnex/forget.js +133 -0
- package/dist/clientAnnex/forget.js.map +1 -0
- package/dist/clientAnnex/forgetLast.d.ts +267 -0
- package/dist/clientAnnex/forgetLast.d.ts.map +1 -0
- package/dist/clientAnnex/forgetLast.js +374 -0
- package/dist/clientAnnex/forgetLast.js.map +1 -0
- package/dist/{webvh/companionGc.d.ts → clientAnnex/gc.d.ts} +50 -16
- package/dist/clientAnnex/gc.d.ts.map +1 -0
- package/dist/{webvh/companionGc.js → clientAnnex/gc.js} +103 -71
- package/dist/clientAnnex/gc.js.map +1 -0
- package/dist/clientAnnex/index.d.ts +60 -0
- package/dist/clientAnnex/index.d.ts.map +1 -0
- package/dist/clientAnnex/index.js +60 -0
- package/dist/clientAnnex/index.js.map +1 -0
- package/dist/{unlock → clientAnnex}/ladder.d.ts +89 -15
- package/dist/clientAnnex/ladder.d.ts.map +1 -0
- package/dist/clientAnnex/ladder.js +474 -0
- package/dist/clientAnnex/ladder.js.map +1 -0
- package/dist/clientAnnex/ladderAnchored.d.ts +276 -0
- package/dist/clientAnnex/ladderAnchored.d.ts.map +1 -0
- package/dist/clientAnnex/ladderAnchored.js +631 -0
- package/dist/clientAnnex/ladderAnchored.js.map +1 -0
- package/dist/{webvh/companion.d.ts → clientAnnex/log.d.ts} +333 -119
- package/dist/clientAnnex/log.d.ts.map +1 -0
- package/dist/{webvh/companion.js → clientAnnex/log.js} +583 -199
- package/dist/clientAnnex/log.js.map +1 -0
- package/dist/clientAnnex/recoveryLadderAnchored.d.ts +103 -0
- package/dist/clientAnnex/recoveryLadderAnchored.d.ts.map +1 -0
- package/dist/clientAnnex/recoveryLadderAnchored.js +263 -0
- package/dist/clientAnnex/recoveryLadderAnchored.js.map +1 -0
- package/dist/{unlock → clientAnnex}/selfEnroll.d.ts +1 -1
- package/dist/clientAnnex/selfEnroll.d.ts.map +1 -0
- package/dist/{unlock → clientAnnex}/selfEnroll.js +1 -1
- package/dist/clientAnnex/selfEnroll.js.map +1 -0
- package/dist/clientAnnex/zcap.d.ts +49 -0
- package/dist/clientAnnex/zcap.d.ts.map +1 -0
- package/dist/clientAnnex/zcap.js +101 -0
- package/dist/clientAnnex/zcap.js.map +1 -0
- package/dist/clients/index.d.ts +9 -6
- package/dist/clients/index.d.ts.map +1 -1
- package/dist/clients/index.js +8 -5
- package/dist/clients/index.js.map +1 -1
- package/dist/clients/listing.d.ts +32 -0
- package/dist/clients/listing.d.ts.map +1 -1
- package/dist/clients/listing.js +47 -1
- package/dist/clients/listing.js.map +1 -1
- package/dist/clients/revocation.d.ts +33 -1
- package/dist/clients/revocation.d.ts.map +1 -1
- package/dist/clients/revocation.js +16 -4
- package/dist/clients/revocation.js.map +1 -1
- package/dist/enrollment/index.d.ts +6 -4
- package/dist/enrollment/index.d.ts.map +1 -1
- package/dist/enrollment/index.js +6 -4
- package/dist/enrollment/index.js.map +1 -1
- package/dist/enrollment/onboardingInvite.d.ts +5 -88
- package/dist/enrollment/onboardingInvite.d.ts.map +1 -1
- package/dist/enrollment/onboardingInvite.js +5 -168
- package/dist/enrollment/onboardingInvite.js.map +1 -1
- package/dist/genesis/index.d.ts +5 -0
- package/dist/genesis/index.d.ts.map +1 -1
- package/dist/genesis/index.js +5 -0
- package/dist/genesis/index.js.map +1 -1
- package/dist/keys/index.d.ts +1 -1
- package/dist/keys/index.d.ts.map +1 -1
- package/dist/keys/index.js +1 -1
- package/dist/keys/index.js.map +1 -1
- package/dist/keys/spaceEpochs.d.ts +7 -2
- package/dist/keys/spaceEpochs.d.ts.map +1 -1
- package/dist/keys/spaceEpochs.js +8 -2
- package/dist/keys/spaceEpochs.js.map +1 -1
- package/dist/keys/userKeyRoster.d.ts +39 -0
- package/dist/keys/userKeyRoster.d.ts.map +1 -1
- package/dist/keys/userKeyRoster.js +43 -1
- package/dist/keys/userKeyRoster.js.map +1 -1
- package/dist/recovery/index.d.ts +5 -3
- package/dist/recovery/index.d.ts.map +1 -1
- package/dist/recovery/index.js +4 -2
- package/dist/recovery/index.js.map +1 -1
- package/dist/recovery/recoveryDelegation.d.ts +35 -12
- package/dist/recovery/recoveryDelegation.d.ts.map +1 -1
- package/dist/recovery/recoveryDelegation.js +84 -86
- package/dist/recovery/recoveryDelegation.js.map +1 -1
- package/dist/recovery/recoveryWebvh.d.ts +32 -1
- package/dist/recovery/recoveryWebvh.d.ts.map +1 -1
- package/dist/recovery/recoveryWebvh.js +2 -2
- package/dist/recovery/recoveryWebvh.js.map +1 -1
- package/dist/request/capabilityRequest.d.ts +33 -0
- package/dist/request/capabilityRequest.d.ts.map +1 -0
- package/dist/request/capabilityRequest.js +35 -0
- package/dist/request/capabilityRequest.js.map +1 -0
- package/dist/request/ephemeralExchange.d.ts +118 -0
- package/dist/request/ephemeralExchange.d.ts.map +1 -0
- package/dist/request/ephemeralExchange.js +224 -0
- package/dist/request/ephemeralExchange.js.map +1 -0
- package/dist/request/index.d.ts +6 -0
- package/dist/request/index.d.ts.map +1 -1
- package/dist/request/index.js +6 -0
- package/dist/request/index.js.map +1 -1
- package/dist/space/activity.d.ts +2 -2
- package/dist/space/activity.js +3 -3
- package/dist/space/activity.js.map +1 -1
- package/dist/unlock/index.d.ts +11 -23
- package/dist/unlock/index.d.ts.map +1 -1
- package/dist/unlock/index.js +10 -21
- package/dist/unlock/index.js.map +1 -1
- package/dist/unlock/retire.d.ts +47 -3
- package/dist/unlock/retire.d.ts.map +1 -1
- package/dist/unlock/retire.js +21 -5
- package/dist/unlock/retire.js.map +1 -1
- package/dist/unlock/standingWebvh.d.ts +37 -82
- package/dist/unlock/standingWebvh.d.ts.map +1 -1
- package/dist/unlock/standingWebvh.js +64 -247
- package/dist/unlock/standingWebvh.js.map +1 -1
- package/dist/unlock/unlockRecord.d.ts +13 -6
- package/dist/unlock/unlockRecord.d.ts.map +1 -1
- package/dist/unlock/unlockRecord.js +14 -8
- package/dist/unlock/unlockRecord.js.map +1 -1
- package/dist/webvh/delegatedLogStore.d.ts +5 -5
- package/dist/webvh/delegatedLogStore.js +1 -1
- package/dist/webvh/didWebvh.d.ts +19 -9
- package/dist/webvh/didWebvh.d.ts.map +1 -1
- package/dist/webvh/didWebvh.js +16 -16
- package/dist/webvh/didWebvh.js.map +1 -1
- package/dist/webvh/index.d.ts +9 -25
- package/dist/webvh/index.d.ts.map +1 -1
- package/dist/webvh/index.js +9 -23
- package/dist/webvh/index.js.map +1 -1
- package/dist/webvh/revokeClient.d.ts +77 -5
- package/dist/webvh/revokeClient.d.ts.map +1 -1
- package/dist/webvh/revokeClient.js +154 -61
- package/dist/webvh/revokeClient.js.map +1 -1
- package/dist/webvh/standingZcap.d.ts +11 -1
- package/dist/webvh/standingZcap.d.ts.map +1 -1
- package/dist/webvh/standingZcap.js +13 -14
- package/dist/webvh/standingZcap.js.map +1 -1
- package/dist/webvh/wasIdStore.d.ts +13 -7
- package/dist/webvh/wasIdStore.d.ts.map +1 -1
- package/dist/webvh/wasIdStore.js +8 -4
- package/dist/webvh/wasIdStore.js.map +1 -1
- package/dist/webvh/zcap.d.ts +0 -24
- package/dist/webvh/zcap.d.ts.map +1 -1
- package/dist/webvh/zcap.js +0 -42
- package/dist/webvh/zcap.js.map +1 -1
- package/package.json +40 -34
- package/dist/unlock/ladder.d.ts.map +0 -1
- package/dist/unlock/ladder.js +0 -258
- package/dist/unlock/ladder.js.map +0 -1
- package/dist/unlock/selfEnroll.d.ts.map +0 -1
- package/dist/unlock/selfEnroll.js.map +0 -1
- package/dist/webvh/companion.d.ts.map +0 -1
- package/dist/webvh/companion.js.map +0 -1
- package/dist/webvh/companionGc.d.ts.map +0 -1
- package/dist/webvh/companionGc.js.map +0 -1
package/dist/clients/index.d.ts
CHANGED
|
@@ -6,10 +6,13 @@
|
|
|
6
6
|
* surface -- the place "disconnect this wallet" lives -- and the cascades
|
|
7
7
|
* behind it.
|
|
8
8
|
*
|
|
9
|
-
* - `listAccountClients` / `currentAccountSigningKeys`
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
9
|
+
* - `listAccountClients` / `currentAccountSigningKeys` /
|
|
10
|
+
* `currentAccountRecordSigners` -- the listing over the locally verified
|
|
11
|
+
* did:webvh log, with display labels merged; the same read reduced to the
|
|
12
|
+
* key set an app grant's delegation signer is checked against; and that
|
|
13
|
+
* set widened by the document's ladder VMs, the allowlist a re-minted
|
|
14
|
+
* unlock or recovery record's proof is settled against. All take an
|
|
15
|
+
* already-verified log in place of fetching one.
|
|
13
16
|
* - `disconnectEligibility` / `revokedClientKeysFor` / `cascadeCompletion` --
|
|
14
17
|
* the disconnect-eligibility policy as data and pure functions, so both
|
|
15
18
|
* surfaces refuse the same rows for the same reasons and report a partial
|
|
@@ -24,12 +27,12 @@
|
|
|
24
27
|
* convergence of the roster onto the account document (recipients, then
|
|
25
28
|
* the roster log's seal).
|
|
26
29
|
*/
|
|
27
|
-
export { currentAccountSigningKeys, listAccountClients } from './listing.js';
|
|
30
|
+
export { currentAccountRecordSigners, currentAccountSigningKeys, listAccountClients } from './listing.js';
|
|
28
31
|
export type { AccountClientView, AccountLogPointer, VerifiedAccountLog } from './listing.js';
|
|
29
32
|
export { cascadeCompletion, disconnectEligibility, revokedClientKeysFor } from './policy.js';
|
|
30
33
|
export type { DisconnectRefusal } from './policy.js';
|
|
31
34
|
export { revokeAccountClient } from './revocation.js';
|
|
32
|
-
export type { CascadeCollections, ClientRevocationResult, RosterSealReport } from './revocation.js';
|
|
35
|
+
export type { CascadeCollections, ClientRevocationResult, GenerationDelegationRemint, RosterSealReport } from './revocation.js';
|
|
33
36
|
export { checkUserKeyRosterAtLogin, convergeUserKeyRosterToAccount } from './rosterPolicy.js';
|
|
34
37
|
export type { AdoptedUserKey } from './rosterPolicy.js';
|
|
35
38
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/clients/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/clients/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,EACL,2BAA2B,EAC3B,yBAAyB,EACzB,kBAAkB,EACnB,MAAM,cAAc,CAAA;AACrB,YAAY,EACV,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,cAAc,CAAA;AAErB,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,aAAa,CAAA;AACpB,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAEpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACrD,YAAY,EACV,kBAAkB,EAClB,sBAAsB,EACtB,0BAA0B,EAC1B,gBAAgB,EACjB,MAAM,iBAAiB,CAAA;AAExB,OAAO,EACL,yBAAyB,EACzB,8BAA8B,EAC/B,MAAM,mBAAmB,CAAA;AAC1B,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA"}
|
package/dist/clients/index.js
CHANGED
|
@@ -6,10 +6,13 @@
|
|
|
6
6
|
* surface -- the place "disconnect this wallet" lives -- and the cascades
|
|
7
7
|
* behind it.
|
|
8
8
|
*
|
|
9
|
-
* - `listAccountClients` / `currentAccountSigningKeys`
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
9
|
+
* - `listAccountClients` / `currentAccountSigningKeys` /
|
|
10
|
+
* `currentAccountRecordSigners` -- the listing over the locally verified
|
|
11
|
+
* did:webvh log, with display labels merged; the same read reduced to the
|
|
12
|
+
* key set an app grant's delegation signer is checked against; and that
|
|
13
|
+
* set widened by the document's ladder VMs, the allowlist a re-minted
|
|
14
|
+
* unlock or recovery record's proof is settled against. All take an
|
|
15
|
+
* already-verified log in place of fetching one.
|
|
13
16
|
* - `disconnectEligibility` / `revokedClientKeysFor` / `cascadeCompletion` --
|
|
14
17
|
* the disconnect-eligibility policy as data and pure functions, so both
|
|
15
18
|
* surfaces refuse the same rows for the same reasons and report a partial
|
|
@@ -24,7 +27,7 @@
|
|
|
24
27
|
* convergence of the roster onto the account document (recipients, then
|
|
25
28
|
* the roster log's seal).
|
|
26
29
|
*/
|
|
27
|
-
export { currentAccountSigningKeys, listAccountClients } from './listing.js';
|
|
30
|
+
export { currentAccountRecordSigners, currentAccountSigningKeys, listAccountClients } from './listing.js';
|
|
28
31
|
export { cascadeCompletion, disconnectEligibility, revokedClientKeysFor } from './policy.js';
|
|
29
32
|
export { revokeAccountClient } from './revocation.js';
|
|
30
33
|
export { checkUserKeyRosterAtLogin, convergeUserKeyRosterToAccount } from './rosterPolicy.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/clients/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/clients/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,EACL,2BAA2B,EAC3B,yBAAyB,EACzB,kBAAkB,EACnB,MAAM,cAAc,CAAA;AAOrB,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,aAAa,CAAA;AAGpB,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAQrD,OAAO,EACL,yBAAyB,EACzB,8BAA8B,EAC/B,MAAM,mBAAmB,CAAA"}
|
|
@@ -108,4 +108,36 @@ export declare function currentAccountSigningKeys({ pointer, verifiedLog, accoun
|
|
|
108
108
|
verifiedLog?: VerifiedAccountLog;
|
|
109
109
|
accountLogPinStore?: ResourceLogPinStore;
|
|
110
110
|
}): Promise<Set<string>>;
|
|
111
|
+
/**
|
|
112
|
+
* The keys the locally verified document backs as the signer of a RE-MINTED
|
|
113
|
+
* unlock or recovery record -- the allowlist a reader settles a record's
|
|
114
|
+
* mixed-signer proof against once the record is decrypted and its pointer
|
|
115
|
+
* names this account. It is {@link currentAccountSigningKeys} (every
|
|
116
|
+
* enrolled client's signing key: the revocation cascade's and the login-time
|
|
117
|
+
* refresh's re-mint signer) plus the ladder VMs the document lists (the
|
|
118
|
+
* last-client forget's re-mint signer -- on a client-less account the ladder
|
|
119
|
+
* VM is the only key left that can re-sign a record, and a reader that
|
|
120
|
+
* refused it would refuse every other unlock method's record after the
|
|
121
|
+
* transition). The ladder VM is recognized by the relation asymmetry
|
|
122
|
+
* (`ladderVmIds`), never by a marker. Same fetch-or-verified-log contract as
|
|
123
|
+
* its sibling.
|
|
124
|
+
*
|
|
125
|
+
* Deliberately NOT the app-grant check's key set: an app grant's delegation
|
|
126
|
+
* signer must be an enrolled client (or, from a transient session, the annex
|
|
127
|
+
* key under the generation delegation), and widening that listing to the
|
|
128
|
+
* ladder VM would misread the transition state.
|
|
129
|
+
*
|
|
130
|
+
* @param options {object}
|
|
131
|
+
* @param options.pointer {AccountLogPointer}
|
|
132
|
+
* @param [options.verifiedLog] {VerifiedAccountLog} an already-verified log
|
|
133
|
+
* to read instead of fetching and verifying one
|
|
134
|
+
* @param [options.accountLogPinStore] {ResourceLogPinStore} this client's
|
|
135
|
+
* chain-head pin for the account log, checked when the log is fetched here
|
|
136
|
+
* @returns {Promise<Set<string>>} public key multibases
|
|
137
|
+
*/
|
|
138
|
+
export declare function currentAccountRecordSigners({ pointer, verifiedLog, accountLogPinStore }: {
|
|
139
|
+
pointer: AccountLogPointer;
|
|
140
|
+
verifiedLog?: VerifiedAccountLog;
|
|
141
|
+
accountLogPinStore?: ResourceLogPinStore;
|
|
142
|
+
}): Promise<Set<string>>;
|
|
111
143
|
//# sourceMappingURL=listing.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listing.d.ts","sourceRoot":"","sources":["../../src/clients/listing.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,
|
|
1
|
+
{"version":3,"file":"listing.d.ts","sourceRoot":"","sources":["../../src/clients/listing.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,EAGL,gBAAgB,EAChB,KAAK,mBAAmB,EACzB,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAC3E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAElE;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;CACb;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAAA;AAE7E;;;;;;GAMG;AACH,MAAM,WAAW,iBAAkB,SAAQ,mBAAmB;IAC5D,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,OAAO,CAAA;CACnB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,kBAAkB,CAAC,EACvC,OAAO,EACP,WAAW,EACX,sBAAsB,EACtB,WAAW,EACX,kBAAkB,EACnB,EAAE;IACD,OAAO,EAAE,iBAAiB,CAAA;IAC1B,WAAW,CAAC,EAAE,iBAAiB,CAAA;IAC/B,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,WAAW,CAAC,EAAE,kBAAkB,CAAA;IAChC,kBAAkB,CAAC,EAAE,mBAAmB,CAAA;CACzC,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAoB/B;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,yBAAyB,CAAC,EAC9C,OAAO,EACP,WAAW,EACX,kBAAkB,EACnB,EAAE;IACD,OAAO,EAAE,iBAAiB,CAAA;IAC1B,WAAW,CAAC,EAAE,kBAAkB,CAAA;IAChC,kBAAkB,CAAC,EAAE,mBAAmB,CAAA;CACzC,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAUvB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAsB,2BAA2B,CAAC,EAChD,OAAO,EACP,WAAW,EACX,kBAAkB,EACnB,EAAE;IACD,OAAO,EAAE,iBAAiB,CAAA;IAC1B,WAAW,CAAC,EAAE,kBAAkB,CAAA;IAChC,kBAAkB,CAAC,EAAE,mBAAmB,CAAA;CACzC,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAkBvB"}
|
package/dist/clients/listing.js
CHANGED
|
@@ -26,7 +26,8 @@
|
|
|
26
26
|
* re-verifying `did.jsonl` per surface. Whether such a cache is safe to hold,
|
|
27
27
|
* and what invalidates it, is the caller's call.
|
|
28
28
|
*/
|
|
29
|
-
import { listEnrolledWebvhClients, verifyAccountLog } from '../webvh/index.js';
|
|
29
|
+
import { ladderVmIds, listEnrolledWebvhClients, verifyAccountLog } from '../webvh/index.js';
|
|
30
|
+
import { vmFragmentOf } from '../resourceLog/index.js';
|
|
30
31
|
import { readClientLabels } from '../keys/index.js';
|
|
31
32
|
/**
|
|
32
33
|
* Lists the wallet clients enrolled on an account, from the locally verified
|
|
@@ -95,4 +96,49 @@ export async function currentAccountSigningKeys({ pointer, verifiedLog, accountL
|
|
|
95
96
|
}));
|
|
96
97
|
return new Set(listEnrolledWebvhClients({ log }).map(client => client.signingKeyMultibase));
|
|
97
98
|
}
|
|
99
|
+
/**
|
|
100
|
+
* The keys the locally verified document backs as the signer of a RE-MINTED
|
|
101
|
+
* unlock or recovery record -- the allowlist a reader settles a record's
|
|
102
|
+
* mixed-signer proof against once the record is decrypted and its pointer
|
|
103
|
+
* names this account. It is {@link currentAccountSigningKeys} (every
|
|
104
|
+
* enrolled client's signing key: the revocation cascade's and the login-time
|
|
105
|
+
* refresh's re-mint signer) plus the ladder VMs the document lists (the
|
|
106
|
+
* last-client forget's re-mint signer -- on a client-less account the ladder
|
|
107
|
+
* VM is the only key left that can re-sign a record, and a reader that
|
|
108
|
+
* refused it would refuse every other unlock method's record after the
|
|
109
|
+
* transition). The ladder VM is recognized by the relation asymmetry
|
|
110
|
+
* (`ladderVmIds`), never by a marker. Same fetch-or-verified-log contract as
|
|
111
|
+
* its sibling.
|
|
112
|
+
*
|
|
113
|
+
* Deliberately NOT the app-grant check's key set: an app grant's delegation
|
|
114
|
+
* signer must be an enrolled client (or, from a transient session, the annex
|
|
115
|
+
* key under the generation delegation), and widening that listing to the
|
|
116
|
+
* ladder VM would misread the transition state.
|
|
117
|
+
*
|
|
118
|
+
* @param options {object}
|
|
119
|
+
* @param options.pointer {AccountLogPointer}
|
|
120
|
+
* @param [options.verifiedLog] {VerifiedAccountLog} an already-verified log
|
|
121
|
+
* to read instead of fetching and verifying one
|
|
122
|
+
* @param [options.accountLogPinStore] {ResourceLogPinStore} this client's
|
|
123
|
+
* chain-head pin for the account log, checked when the log is fetched here
|
|
124
|
+
* @returns {Promise<Set<string>>} public key multibases
|
|
125
|
+
*/
|
|
126
|
+
export async function currentAccountRecordSigners({ pointer, verifiedLog, accountLogPinStore }) {
|
|
127
|
+
const verified = verifiedLog ??
|
|
128
|
+
(await verifyAccountLog({
|
|
129
|
+
...pointer,
|
|
130
|
+
...(accountLogPinStore ? { pinStore: accountLogPinStore } : {})
|
|
131
|
+
}));
|
|
132
|
+
const keys = await currentAccountSigningKeys({
|
|
133
|
+
pointer,
|
|
134
|
+
verifiedLog: verified
|
|
135
|
+
});
|
|
136
|
+
for (const id of ladderVmIds({ doc: verified.doc })) {
|
|
137
|
+
const multibase = vmFragmentOf(id);
|
|
138
|
+
if (multibase !== undefined) {
|
|
139
|
+
keys.add(multibase);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return keys;
|
|
143
|
+
}
|
|
98
144
|
//# sourceMappingURL=listing.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listing.js","sourceRoot":"","sources":["../../src/clients/listing.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,EACL,wBAAwB,EACxB,gBAAgB,EAEjB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,gBAAgB,EAA0B,MAAM,kBAAkB,CAAA;AAmC3E;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,EACvC,OAAO,EACP,WAAW,EACX,sBAAsB,EACtB,WAAW,EACX,kBAAkB,EAOnB;IACC,yEAAyE;IACzE,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC1C,WAAW;YACT,gBAAgB,CAAC;gBACf,GAAG,OAAO;gBACV,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAChE,CAAC;QACJ,WAAW;YACT,CAAC,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC;YACpE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAyB,EAAE,CAAC;KAChD,CAAC,CAAA;IACF,MAAM,OAAO,GAAG,wBAAwB,CAAC,EAAE,GAAG,EAAE,CAAC,CAAA;IACjD,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5B,GAAG,MAAM;QACT,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,KAAK,SAAS;YAClD,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,EAAE;YAC/C,CAAC,CAAC,EAAE,CAAC;QACP,SAAS,EAAE,MAAM,CAAC,mBAAmB,KAAK,sBAAsB;KACjE,CAAC,CAAC,CAAA;AACL,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,EAC9C,OAAO,EACP,WAAW,EACX,kBAAkB,EAKnB;IACC,MAAM,EAAE,GAAG,EAAE,GACX,WAAW;QACX,CAAC,MAAM,gBAAgB,CAAC;YACtB,GAAG,OAAO;YACV,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChE,CAAC,CAAC,CAAA;IACL,OAAO,IAAI,GAAG,CACZ,wBAAwB,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAC5E,CAAA;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"listing.js","sourceRoot":"","sources":["../../src/clients/listing.ts"],"names":[],"mappings":"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"}
|
|
@@ -44,6 +44,17 @@
|
|
|
44
44
|
* signed stopped chaining at stage 1, so a wallet that issues recovery
|
|
45
45
|
* codes re-mints them here -- while the registry is still readable under
|
|
46
46
|
* the session's pre-adoption vault keys.
|
|
47
|
+
* 5. **The generation-delegation re-mint** (optional, mirroring stage 4 as a
|
|
48
|
+
* client-annex log entry replacing the service entry): revoking the durable
|
|
49
|
+
* client that minted the current annex generation's delegation kills
|
|
50
|
+
* it under the same current-key-set rule, and without this stage the
|
|
51
|
+
* death is silent mid-generation. The injected closure runs the
|
|
52
|
+
* signer-death axis of `ensureGenerationDelegationCurrent` against the
|
|
53
|
+
* post-edit document; it runs even when the account has no roster (the
|
|
54
|
+
* document edit alone is what rots the delegation). What the stage does
|
|
55
|
+
* not cover -- App Connect grants a transient session minted under the
|
|
56
|
+
* old delegation -- stays dead: mid-generation grant death is a stated
|
|
57
|
+
* consequence of ordinary disconnects, healed by the app reconnecting.
|
|
47
58
|
*
|
|
48
59
|
* The revoking session then adopts the fresh key in place (`onRotationAdopted`
|
|
49
60
|
* -- profile vault keys, storage ciphers, engine restarts: whatever "in place"
|
|
@@ -64,6 +75,19 @@ import type { EncryptionDescriptorStore } from '@interop/was-client/edv';
|
|
|
64
75
|
import { type ClientWebvhUpdateKeys, type PublishedKeyDocument, type RevokedClientKeys, type WebvhIdStore } from '../webvh/index.js';
|
|
65
76
|
import { type CascadeCollections, type RosterSealReport, type UserKey, type UserKeyCascadeResult } from '../keys/index.js';
|
|
66
77
|
export type { CascadeCollections, RosterSealReport };
|
|
78
|
+
/**
|
|
79
|
+
* What the generation-delegation re-mint stage reports: whether an annex
|
|
80
|
+
* entry replaced the service entry's delegation on this run, and -- when the
|
|
81
|
+
* stage could not run -- why it was skipped (`no-pointer`: the account has no
|
|
82
|
+
* annex posture; `no-ladder-seed`: the session holds no ladder seed to
|
|
83
|
+
* sign the annex entry with; `failed`: the closure's own best-effort
|
|
84
|
+
* catch, reported rather than thrown so the cascade's remedy stages never
|
|
85
|
+
* abort on it).
|
|
86
|
+
*/
|
|
87
|
+
export interface GenerationDelegationRemint {
|
|
88
|
+
renewed: boolean;
|
|
89
|
+
skipped?: 'no-pointer' | 'no-ladder-seed' | 'failed';
|
|
90
|
+
}
|
|
67
91
|
/**
|
|
68
92
|
* What a completed cascade reports: whether the roster actually rotated on
|
|
69
93
|
* this run (a re-run of an already-complete revocation reports `false`), the
|
|
@@ -82,6 +106,7 @@ export interface ClientRevocationResult {
|
|
|
82
106
|
reminted: number;
|
|
83
107
|
skipped: number;
|
|
84
108
|
};
|
|
109
|
+
generation?: GenerationDelegationRemint;
|
|
85
110
|
}
|
|
86
111
|
/**
|
|
87
112
|
* Runs the whole revocation cascade for one enrolled wallet client. See the
|
|
@@ -130,12 +155,16 @@ export interface ClientRevocationResult {
|
|
|
130
155
|
* @param [options.remintRecoveryDelegations] {Function} `({ document }) =>
|
|
131
156
|
* Promise<{ reminted, skipped }>` -- the recovery-delegation re-mint stage,
|
|
132
157
|
* for a wallet that issues recovery codes
|
|
158
|
+
* @param [options.remintGenerationDelegation] {Function} `({ document }) =>
|
|
159
|
+
* Promise<GenerationDelegationRemint>` -- the generation-delegation
|
|
160
|
+
* re-mint stage, run against the post-edit document (stage 5 in the module
|
|
161
|
+
* doc); expected to catch its own failures and report them
|
|
133
162
|
* @param [options.onRotationAdopted] {Function} `({ userKey }) => Promise<void>`
|
|
134
163
|
* -- the live-session adoption of a rotated key, run last so the session
|
|
135
164
|
* keeps operating without a re-login
|
|
136
165
|
* @returns {Promise<ClientRevocationResult>}
|
|
137
166
|
*/
|
|
138
|
-
export declare function revokeAccountClient({ idStore, updateKeys, revokedClient, knownLatentHashes, expectedDid, ownSigningKeyMultibase, rosterStore, userKey, clientKeyAgreementKey, pinnedEpochId, onUserKeyAdopted, collections, remintRecoveryDelegations, onRotationAdopted }: {
|
|
167
|
+
export declare function revokeAccountClient({ idStore, updateKeys, revokedClient, knownLatentHashes, expectedDid, ownSigningKeyMultibase, rosterStore, userKey, clientKeyAgreementKey, pinnedEpochId, onUserKeyAdopted, collections, remintRecoveryDelegations, remintGenerationDelegation, onRotationAdopted }: {
|
|
139
168
|
idStore: WebvhIdStore;
|
|
140
169
|
updateKeys: ClientWebvhUpdateKeys;
|
|
141
170
|
revokedClient: RevokedClientKeys;
|
|
@@ -158,6 +187,9 @@ export declare function revokeAccountClient({ idStore, updateKeys, revokedClient
|
|
|
158
187
|
reminted: number;
|
|
159
188
|
skipped: number;
|
|
160
189
|
}>;
|
|
190
|
+
remintGenerationDelegation?: (options: {
|
|
191
|
+
document: PublishedKeyDocument;
|
|
192
|
+
}) => Promise<GenerationDelegationRemint>;
|
|
161
193
|
onRotationAdopted?: (rotation: {
|
|
162
194
|
userKey: UserKey;
|
|
163
195
|
}) => Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"revocation.d.ts","sourceRoot":"","sources":["../../src/clients/revocation.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH
|
|
1
|
+
{"version":3,"file":"revocation.d.ts","sourceRoot":"","sources":["../../src/clients/revocation.ts"],"names":[],"mappings":"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"}
|
|
@@ -47,12 +47,16 @@ import { rotateRosterToDocumentAndCascade } from '../keys/index.js';
|
|
|
47
47
|
* @param [options.remintRecoveryDelegations] {Function} `({ document }) =>
|
|
48
48
|
* Promise<{ reminted, skipped }>` -- the recovery-delegation re-mint stage,
|
|
49
49
|
* for a wallet that issues recovery codes
|
|
50
|
+
* @param [options.remintGenerationDelegation] {Function} `({ document }) =>
|
|
51
|
+
* Promise<GenerationDelegationRemint>` -- the generation-delegation
|
|
52
|
+
* re-mint stage, run against the post-edit document (stage 5 in the module
|
|
53
|
+
* doc); expected to catch its own failures and report them
|
|
50
54
|
* @param [options.onRotationAdopted] {Function} `({ userKey }) => Promise<void>`
|
|
51
55
|
* -- the live-session adoption of a rotated key, run last so the session
|
|
52
56
|
* keeps operating without a re-login
|
|
53
57
|
* @returns {Promise<ClientRevocationResult>}
|
|
54
58
|
*/
|
|
55
|
-
export async function revokeAccountClient({ idStore, updateKeys, revokedClient, knownLatentHashes, expectedDid, ownSigningKeyMultibase, rosterStore, userKey, clientKeyAgreementKey, pinnedEpochId, onUserKeyAdopted, collections, remintRecoveryDelegations, onRotationAdopted }) {
|
|
59
|
+
export async function revokeAccountClient({ idStore, updateKeys, revokedClient, knownLatentHashes, expectedDid, ownSigningKeyMultibase, rosterStore, userKey, clientKeyAgreementKey, pinnedEpochId, onUserKeyAdopted, collections, remintRecoveryDelegations, remintGenerationDelegation, onRotationAdopted }) {
|
|
56
60
|
if (ownSigningKeyMultibase &&
|
|
57
61
|
ownSigningKeyMultibase === revokedClient.signingKeyMultibase) {
|
|
58
62
|
throw new Error('This wallet cannot disconnect itself; use another enrolled wallet ' +
|
|
@@ -88,16 +92,23 @@ export async function revokeAccountClient({ idStore, updateKeys, revokedClient,
|
|
|
88
92
|
});
|
|
89
93
|
if (!tail.rosterDescriptor || !tail.userKey) {
|
|
90
94
|
// No roster to rotate: the document edit has landed, so the client IS
|
|
91
|
-
// disconnected -- a completed cascade with nothing rotated.
|
|
95
|
+
// disconnected -- a completed cascade with nothing rotated. The
|
|
96
|
+
// generation-delegation re-mint still runs: the edit alone is what rots
|
|
97
|
+
// the delegation, roster or no roster.
|
|
98
|
+
const generation = await remintGenerationDelegation?.({ document: doc });
|
|
92
99
|
return {
|
|
93
100
|
rotated: false,
|
|
94
101
|
collections: tail.collections,
|
|
95
|
-
document: doc
|
|
102
|
+
document: doc,
|
|
103
|
+
...(generation ? { generation } : {})
|
|
96
104
|
};
|
|
97
105
|
}
|
|
98
106
|
// 4. The recovery re-mints, while the registry is still readable under the
|
|
99
107
|
// session's pre-adoption vault keys.
|
|
100
108
|
const recovery = await remintRecoveryDelegations?.({ document: doc });
|
|
109
|
+
// 5. The generation-delegation re-mint, against the same post-edit
|
|
110
|
+
// document.
|
|
111
|
+
const generation = await remintGenerationDelegation?.({ document: doc });
|
|
101
112
|
if (tail.rotated) {
|
|
102
113
|
await onRotationAdopted?.({ userKey: tail.userKey });
|
|
103
114
|
}
|
|
@@ -108,7 +119,8 @@ export async function revokeAccountClient({ idStore, updateKeys, revokedClient,
|
|
|
108
119
|
document: doc,
|
|
109
120
|
userKey: tail.userKey,
|
|
110
121
|
rosterDescriptor: tail.rosterDescriptor,
|
|
111
|
-
...(recovery ? { recovery } : {})
|
|
122
|
+
...(recovery ? { recovery } : {}),
|
|
123
|
+
...(generation ? { generation } : {})
|
|
112
124
|
};
|
|
113
125
|
}
|
|
114
126
|
//# sourceMappingURL=revocation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"revocation.js","sourceRoot":"","sources":["../../src/clients/revocation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"revocation.js","sourceRoot":"","sources":["../../src/clients/revocation.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,9 +20,11 @@
|
|
|
20
20
|
* response envelope, the transport that carries a connect code (verbatim)
|
|
21
21
|
* plus a suggested display label back over an exchange whose request asked
|
|
22
22
|
* with a `WalletOnboardingQuery` (`@interop/wallet-core/request`).
|
|
23
|
-
* - `
|
|
24
|
-
* transport
|
|
25
|
-
*
|
|
23
|
+
* - `ONBOARDING_INVITE_TTL_MS` -- how long a wallet offers an invite for. The
|
|
24
|
+
* invite's transport (creating the ephemeral exchange that carries the
|
|
25
|
+
* query, polling it until the envelope arrives) is the generic requester in
|
|
26
|
+
* `@interop/wallet-core/request` (`createEphemeralExchange` /
|
|
27
|
+
* `pollEphemeralExchange`).
|
|
26
28
|
* - `completeEnrollmentCore` -- the enrollee's half: verify from the published
|
|
27
29
|
* log, read the roster, hand back the user key and the epoch to pin. Persisting
|
|
28
30
|
* the key set stays with the caller's own unlock layer.
|
|
@@ -32,5 +34,5 @@ export type { EnrollmentRequest } from './enrollment.js';
|
|
|
32
34
|
export { CONNECT_CODE_PREFIX, isConnectCode } from './connectCode.js';
|
|
33
35
|
export { encodeOnboardingResponse, ONBOARDING_LABEL_MAX_LENGTH, ONBOARDING_RESPONSE_VERSION, parseOnboardingResponse } from './onboardingResponse.js';
|
|
34
36
|
export type { WalletOnboardingResponse } from './onboardingResponse.js';
|
|
35
|
-
export {
|
|
37
|
+
export { ONBOARDING_INVITE_TTL_MS } from './onboardingInvite.js';
|
|
36
38
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/enrollment/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/enrollment/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,EACL,iBAAiB,EACjB,6BAA6B,EAC7B,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,iBAAiB,CAAA;AACxB,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACxD,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACrE,OAAO,EACL,wBAAwB,EACxB,2BAA2B,EAC3B,2BAA2B,EAC3B,uBAAuB,EACxB,MAAM,yBAAyB,CAAA;AAChC,YAAY,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAA;AACvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAA"}
|
package/dist/enrollment/index.js
CHANGED
|
@@ -20,9 +20,11 @@
|
|
|
20
20
|
* response envelope, the transport that carries a connect code (verbatim)
|
|
21
21
|
* plus a suggested display label back over an exchange whose request asked
|
|
22
22
|
* with a `WalletOnboardingQuery` (`@interop/wallet-core/request`).
|
|
23
|
-
* - `
|
|
24
|
-
* transport
|
|
25
|
-
*
|
|
23
|
+
* - `ONBOARDING_INVITE_TTL_MS` -- how long a wallet offers an invite for. The
|
|
24
|
+
* invite's transport (creating the ephemeral exchange that carries the
|
|
25
|
+
* query, polling it until the envelope arrives) is the generic requester in
|
|
26
|
+
* `@interop/wallet-core/request` (`createEphemeralExchange` /
|
|
27
|
+
* `pollEphemeralExchange`).
|
|
26
28
|
* - `completeEnrollmentCore` -- the enrollee's half: verify from the published
|
|
27
29
|
* log, read the roster, hand back the user key and the epoch to pin. Persisting
|
|
28
30
|
* the key set stays with the caller's own unlock layer.
|
|
@@ -30,5 +32,5 @@
|
|
|
30
32
|
export { approveEnrollment, assertCanonicalEnrollmentKeys, completeEnrollmentCore, encodeEnrollmentRequest, EnrollmentPendingError, enrollmentClientDid, enrollmentRecipientKid, mintEnrollmentRequest, parseEnrollmentRequest } from './enrollment.js';
|
|
31
33
|
export { CONNECT_CODE_PREFIX, isConnectCode } from './connectCode.js';
|
|
32
34
|
export { encodeOnboardingResponse, ONBOARDING_LABEL_MAX_LENGTH, ONBOARDING_RESPONSE_VERSION, parseOnboardingResponse } from './onboardingResponse.js';
|
|
33
|
-
export {
|
|
35
|
+
export { ONBOARDING_INVITE_TTL_MS } from './onboardingInvite.js';
|
|
34
36
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/enrollment/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/enrollment/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,EACL,iBAAiB,EACjB,6BAA6B,EAC7B,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,iBAAiB,CAAA;AAExB,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACrE,OAAO,EACL,wBAAwB,EACxB,2BAA2B,EAC3B,2BAA2B,EAC3B,uBAAuB,EACxB,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAA"}
|
|
@@ -2,98 +2,15 @@
|
|
|
2
2
|
* Copyright (c) 2026 Interop Alliance. All rights reserved.
|
|
3
3
|
*/
|
|
4
4
|
/**
|
|
5
|
-
* The
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* module-level mutable state: every run is per-instance, cancelled through the
|
|
11
|
-
* caller's `AbortSignal`, with the network transport injected.
|
|
12
|
-
*
|
|
13
|
-
* These routes are deliberately unauthenticated (a capability-URL posture: the
|
|
14
|
-
* exchange URL is the secret, and it travels point-to-point through the QR
|
|
15
|
-
* code), so nothing here signs a request.
|
|
5
|
+
* The wallet-onboarding invite's one policy constant. The invite's transport
|
|
6
|
+
* is the generic ephemeral-exchange requester in
|
|
7
|
+
* `@interop/wallet-core/request` (`createEphemeralExchange` /
|
|
8
|
+
* `pollEphemeralExchange`); what stays here is how long a wallet offers the
|
|
9
|
+
* invite for.
|
|
16
10
|
*/
|
|
17
|
-
/**
|
|
18
|
-
* How often the inviter polls the exchange for the enrollee's response.
|
|
19
|
-
*/
|
|
20
|
-
export declare const ONBOARDING_POLL_INTERVAL_MS = 3000;
|
|
21
11
|
/**
|
|
22
12
|
* How long an invite is offered for, comfortably inside the server's
|
|
23
13
|
* ten-minute exchange TTL so the countdown expires before the server does.
|
|
24
14
|
*/
|
|
25
15
|
export declare const ONBOARDING_INVITE_TTL_MS: number;
|
|
26
|
-
/**
|
|
27
|
-
* The exchange path the interaction URL adds, with the interaction-URL
|
|
28
|
-
* version query the other wallet's scanner expects.
|
|
29
|
-
*/
|
|
30
|
-
export declare const ONBOARDING_INTERACTION_PATH = "/protocols?iuv=1";
|
|
31
|
-
/**
|
|
32
|
-
* The subset of `fetch` this module uses, so a caller (or a test) injects its
|
|
33
|
-
* own transport instead of relying on the global.
|
|
34
|
-
*/
|
|
35
|
-
type FetchLike = (input: string, init?: RequestInit) => Promise<Response>;
|
|
36
|
-
/**
|
|
37
|
-
* Raised when the exchange is no longer on the server (a `404`): it either
|
|
38
|
-
* expired or was never created. The remedy is a fresh invite, so a caller
|
|
39
|
-
* renders its "code expired" state. Dispatch on `err.name` rather than
|
|
40
|
-
* `instanceof`: the transport is injected and may resolve to a different copy
|
|
41
|
-
* of this package, which makes the name the stable contract.
|
|
42
|
-
*/
|
|
43
|
-
export declare class OnboardingExchangeGoneError extends Error {
|
|
44
|
-
constructor(message?: string);
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* INVITER: creates an ephemeral exchange holding the onboarding request as its
|
|
48
|
-
* stored request, and returns both the exchange URL (the inviter polls it) and
|
|
49
|
-
* the interaction URL (the QR code carries it).
|
|
50
|
-
*
|
|
51
|
-
* The server relays the stored request verbatim as its reply to the begin
|
|
52
|
-
* POST, so the VPR details are stored wrapped as a VC-API exchange response
|
|
53
|
-
* (`{ verifiablePresentationRequest: request }`) -- the shape the joining
|
|
54
|
-
* wallet's classifier reads.
|
|
55
|
-
*
|
|
56
|
-
* The exchange URL is read from the `Location` response header, falling back
|
|
57
|
-
* to the body's `location` member -- deployments differ on which they set,
|
|
58
|
-
* and either alone is enough.
|
|
59
|
-
*
|
|
60
|
-
* @param options {object}
|
|
61
|
-
* @param options.serverUrl {string} the configured WAS server base URL
|
|
62
|
-
* @param options.request {unknown} the VPR details to store
|
|
63
|
-
* @param [options.fetch] {FetchLike}
|
|
64
|
-
* @returns {Promise<{ exchangeUrl: string, interactionUrl: string }>}
|
|
65
|
-
*/
|
|
66
|
-
export declare function createOnboardingExchange({ serverUrl, request, fetch: fetchImpl }: {
|
|
67
|
-
serverUrl: string;
|
|
68
|
-
request: unknown;
|
|
69
|
-
fetch?: FetchLike;
|
|
70
|
-
}): Promise<{
|
|
71
|
-
exchangeUrl: string;
|
|
72
|
-
interactionUrl: string;
|
|
73
|
-
}>;
|
|
74
|
-
/**
|
|
75
|
-
* INVITER: polls the exchange until the other wallet posts its response, and
|
|
76
|
-
* resolves with that response body verbatim (the caller's consent panel
|
|
77
|
-
* interprets it, typically through `parseOnboardingResponse`).
|
|
78
|
-
*
|
|
79
|
-
* A `404` means the exchange expired or was never there, and rejects with
|
|
80
|
-
* {@link OnboardingExchangeGoneError}. Every other failure -- a network
|
|
81
|
-
* error, another non-ok status, an unparseable body -- is transient and
|
|
82
|
-
* simply retried on the next tick. An aborted signal rejects promptly with
|
|
83
|
-
* the signal's reason, cancelling any in-flight request.
|
|
84
|
-
*
|
|
85
|
-
* @param options {object}
|
|
86
|
-
* @param options.exchangeUrl {string}
|
|
87
|
-
* @param [options.signal] {AbortSignal}
|
|
88
|
-
* @param [options.intervalMs] {number}
|
|
89
|
-
* @param [options.fetch] {FetchLike}
|
|
90
|
-
* @returns {Promise<unknown>} the completed exchange's `response` member
|
|
91
|
-
*/
|
|
92
|
-
export declare function pollOnboardingExchange({ exchangeUrl, signal, intervalMs, fetch: fetchImpl }: {
|
|
93
|
-
exchangeUrl: string;
|
|
94
|
-
signal?: AbortSignal;
|
|
95
|
-
intervalMs?: number;
|
|
96
|
-
fetch?: FetchLike;
|
|
97
|
-
}): Promise<unknown>;
|
|
98
|
-
export {};
|
|
99
16
|
//# sourceMappingURL=onboardingInvite.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onboardingInvite.d.ts","sourceRoot":"","sources":["../../src/enrollment/onboardingInvite.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH
|
|
1
|
+
{"version":3,"file":"onboardingInvite.d.ts","sourceRoot":"","sources":["../../src/enrollment/onboardingInvite.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;GAMG;AAEH;;;GAGG;AACH,eAAO,MAAM,wBAAwB,QAAgB,CAAA"}
|