@interop/wallet-core 0.67.0 → 0.69.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 +14 -13
- package/dist/clientAnnex/credentialAnchoredGenesis.d.ts +12 -6
- package/dist/clientAnnex/credentialAnchoredGenesis.d.ts.map +1 -1
- package/dist/clientAnnex/credentialAnchoredGenesis.js +10 -7
- package/dist/clientAnnex/credentialAnchoredGenesis.js.map +1 -1
- package/dist/clientAnnex/establish.d.ts +11 -12
- package/dist/clientAnnex/establish.d.ts.map +1 -1
- package/dist/clientAnnex/establish.js +20 -30
- package/dist/clientAnnex/establish.js.map +1 -1
- package/dist/clientAnnex/forget.d.ts +7 -16
- package/dist/clientAnnex/forget.d.ts.map +1 -1
- package/dist/clientAnnex/forget.js +8 -18
- package/dist/clientAnnex/forget.js.map +1 -1
- package/dist/clientAnnex/forgetLast.d.ts +8 -17
- package/dist/clientAnnex/forgetLast.d.ts.map +1 -1
- package/dist/clientAnnex/forgetLast.js +19 -34
- package/dist/clientAnnex/forgetLast.js.map +1 -1
- package/dist/clientAnnex/gc.d.ts +26 -12
- package/dist/clientAnnex/gc.d.ts.map +1 -1
- package/dist/clientAnnex/gc.js +60 -57
- package/dist/clientAnnex/gc.js.map +1 -1
- package/dist/clientAnnex/heal.d.ts +3 -12
- package/dist/clientAnnex/heal.d.ts.map +1 -1
- package/dist/clientAnnex/heal.js +19 -32
- package/dist/clientAnnex/heal.js.map +1 -1
- package/dist/clientAnnex/index.d.ts +2 -2
- package/dist/clientAnnex/index.d.ts.map +1 -1
- package/dist/clientAnnex/index.js +1 -1
- package/dist/clientAnnex/index.js.map +1 -1
- package/dist/clientAnnex/ladderAnchored.d.ts +25 -70
- package/dist/clientAnnex/ladderAnchored.d.ts.map +1 -1
- package/dist/clientAnnex/ladderAnchored.js +34 -83
- package/dist/clientAnnex/ladderAnchored.js.map +1 -1
- package/dist/clientAnnex/log.d.ts +55 -68
- package/dist/clientAnnex/log.d.ts.map +1 -1
- package/dist/clientAnnex/log.js +82 -111
- package/dist/clientAnnex/log.js.map +1 -1
- package/dist/clientAnnex/mend.d.ts +19 -8
- package/dist/clientAnnex/mend.d.ts.map +1 -1
- package/dist/clientAnnex/mend.js +89 -66
- package/dist/clientAnnex/mend.js.map +1 -1
- package/dist/clientAnnex/recoveryLadderAnchored.d.ts +5 -12
- package/dist/clientAnnex/recoveryLadderAnchored.d.ts.map +1 -1
- package/dist/clientAnnex/recoveryLadderAnchored.js +7 -13
- package/dist/clientAnnex/recoveryLadderAnchored.js.map +1 -1
- package/dist/clientAnnex/rosterDeliveredEpochs.d.ts +13 -14
- package/dist/clientAnnex/rosterDeliveredEpochs.d.ts.map +1 -1
- package/dist/clientAnnex/rosterDeliveredEpochs.js +12 -12
- package/dist/clientAnnex/rosterDeliveredEpochs.js.map +1 -1
- package/dist/clientAnnex/selfEnroll.d.ts +6 -10
- package/dist/clientAnnex/selfEnroll.d.ts.map +1 -1
- package/dist/clientAnnex/selfEnroll.js +12 -17
- package/dist/clientAnnex/selfEnroll.js.map +1 -1
- package/dist/descriptors/index.d.ts +21 -46
- package/dist/descriptors/index.d.ts.map +1 -1
- package/dist/descriptors/index.js +21 -45
- package/dist/descriptors/index.js.map +1 -1
- package/dist/descriptors/logSource.d.ts +45 -56
- package/dist/descriptors/logSource.d.ts.map +1 -1
- package/dist/descriptors/logSource.js +64 -74
- package/dist/descriptors/logSource.js.map +1 -1
- package/dist/genesis/accountGenesis.d.ts +15 -6
- package/dist/genesis/accountGenesis.d.ts.map +1 -1
- package/dist/genesis/accountGenesis.js +14 -7
- package/dist/genesis/accountGenesis.js.map +1 -1
- package/dist/keys/collectionLogStore.d.ts +73 -0
- package/dist/keys/collectionLogStore.d.ts.map +1 -0
- package/dist/keys/collectionLogStore.js +60 -0
- package/dist/keys/collectionLogStore.js.map +1 -0
- package/dist/keys/index.d.ts +18 -6
- package/dist/keys/index.d.ts.map +1 -1
- package/dist/keys/index.js +18 -6
- package/dist/keys/index.js.map +1 -1
- package/dist/keys/rosterLogStore.d.ts +44 -6
- package/dist/keys/rosterLogStore.d.ts.map +1 -1
- package/dist/keys/rosterLogStore.js +51 -238
- package/dist/keys/rosterLogStore.js.map +1 -1
- package/dist/keys/rosterStore.d.ts.map +1 -1
- package/dist/keys/rosterStore.js +2 -1
- package/dist/keys/rosterStore.js.map +1 -1
- package/dist/keys/spaceEpochs.d.ts +67 -34
- package/dist/keys/spaceEpochs.d.ts.map +1 -1
- package/dist/keys/spaceEpochs.js +80 -30
- package/dist/keys/spaceEpochs.js.map +1 -1
- package/dist/keys/userKeyCascade.d.ts +26 -1
- package/dist/keys/userKeyCascade.d.ts.map +1 -1
- package/dist/keys/userKeyCascade.js +29 -2
- package/dist/keys/userKeyCascade.js.map +1 -1
- package/dist/keys/userKeyRoster.d.ts +5 -0
- package/dist/keys/userKeyRoster.d.ts.map +1 -1
- package/dist/keys/userKeyRoster.js +5 -0
- package/dist/keys/userKeyRoster.js.map +1 -1
- package/dist/keys/userKeyRosterCascade.d.ts +54 -16
- package/dist/keys/userKeyRosterCascade.d.ts.map +1 -1
- package/dist/keys/userKeyRosterCascade.js +50 -22
- package/dist/keys/userKeyRosterCascade.js.map +1 -1
- package/dist/recovery/continuation.d.ts +2 -7
- package/dist/recovery/continuation.d.ts.map +1 -1
- package/dist/recovery/continuation.js +2 -6
- package/dist/recovery/continuation.js.map +1 -1
- package/dist/recovery/recoveryWebvh.d.ts +11 -25
- package/dist/recovery/recoveryWebvh.d.ts.map +1 -1
- package/dist/recovery/recoveryWebvh.js +13 -26
- package/dist/recovery/recoveryWebvh.js.map +1 -1
- package/dist/resourceLog/controller.d.ts +18 -6
- package/dist/resourceLog/controller.d.ts.map +1 -1
- package/dist/resourceLog/controller.js +5 -3
- package/dist/resourceLog/controller.js.map +1 -1
- package/dist/resourceLog/errors.d.ts +17 -43
- package/dist/resourceLog/errors.d.ts.map +1 -1
- package/dist/resourceLog/errors.js +17 -50
- package/dist/resourceLog/errors.js.map +1 -1
- package/dist/resourceLog/index.d.ts +6 -3
- package/dist/resourceLog/index.d.ts.map +1 -1
- package/dist/resourceLog/index.js +6 -3
- package/dist/resourceLog/index.js.map +1 -1
- package/dist/resourceLog/logClass.d.ts +69 -0
- package/dist/resourceLog/logClass.d.ts.map +1 -0
- package/dist/resourceLog/logClass.js +43 -0
- package/dist/resourceLog/logClass.js.map +1 -0
- package/dist/space/collections.d.ts +22 -2
- package/dist/space/collections.d.ts.map +1 -1
- package/dist/space/collections.js +18 -0
- package/dist/space/collections.js.map +1 -1
- package/dist/space/index.d.ts +4 -3
- package/dist/space/index.d.ts.map +1 -1
- package/dist/space/index.js +4 -3
- package/dist/space/index.js.map +1 -1
- package/dist/space/provisioning.d.ts +16 -6
- package/dist/space/provisioning.d.ts.map +1 -1
- package/dist/space/provisioning.js +11 -7
- package/dist/space/provisioning.js.map +1 -1
- package/dist/sync/engine.d.ts +4 -2
- package/dist/sync/engine.d.ts.map +1 -1
- package/dist/sync/engine.js.map +1 -1
- package/dist/sync/index.d.ts +9 -6
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/index.js +8 -5
- package/dist/sync/index.js.map +1 -1
- package/dist/sync/push.d.ts +0 -29
- package/dist/sync/push.d.ts.map +1 -1
- package/dist/sync/push.js +30 -28
- package/dist/sync/push.js.map +1 -1
- package/dist/sync/types.d.ts +39 -21
- package/dist/sync/types.d.ts.map +1 -1
- package/dist/sync/types.js +13 -7
- package/dist/sync/types.js.map +1 -1
- package/dist/unlock/retire.d.ts +12 -13
- package/dist/unlock/retire.d.ts.map +1 -1
- package/dist/unlock/retire.js +12 -15
- package/dist/unlock/retire.js.map +1 -1
- package/dist/unlock/standingWebvh.d.ts +8 -22
- package/dist/unlock/standingWebvh.d.ts.map +1 -1
- package/dist/unlock/standingWebvh.js +7 -18
- package/dist/unlock/standingWebvh.js.map +1 -1
- package/dist/webvh/accountEntry.d.ts +5 -12
- package/dist/webvh/accountEntry.d.ts.map +1 -1
- package/dist/webvh/accountEntry.js +11 -22
- package/dist/webvh/accountEntry.js.map +1 -1
- package/dist/webvh/delegatedLogStore.d.ts +7 -2
- package/dist/webvh/delegatedLogStore.d.ts.map +1 -1
- package/dist/webvh/delegatedLogStore.js +9 -1
- package/dist/webvh/delegatedLogStore.js.map +1 -1
- package/dist/webvh/didWebvh.d.ts +69 -80
- package/dist/webvh/didWebvh.d.ts.map +1 -1
- package/dist/webvh/didWebvh.js +74 -117
- package/dist/webvh/didWebvh.js.map +1 -1
- package/dist/webvh/enrollClient.d.ts +2 -8
- package/dist/webvh/enrollClient.d.ts.map +1 -1
- package/dist/webvh/enrollClient.js +3 -8
- package/dist/webvh/enrollClient.js.map +1 -1
- package/dist/webvh/index.d.ts +1 -1
- package/dist/webvh/index.d.ts.map +1 -1
- package/dist/webvh/index.js +1 -1
- package/dist/webvh/index.js.map +1 -1
- package/dist/webvh/revokeClient.d.ts +3 -9
- package/dist/webvh/revokeClient.d.ts.map +1 -1
- package/dist/webvh/revokeClient.js +4 -9
- package/dist/webvh/revokeClient.js.map +1 -1
- package/dist/webvh/verifyLog.d.ts +24 -4
- package/dist/webvh/verifyLog.d.ts.map +1 -1
- package/dist/webvh/verifyLog.js +26 -7
- package/dist/webvh/verifyLog.js.map +1 -1
- package/dist/webvh/wasIdStore.d.ts +16 -3
- package/dist/webvh/wasIdStore.d.ts.map +1 -1
- package/dist/webvh/wasIdStore.js +18 -3
- package/dist/webvh/wasIdStore.js.map +1 -1
- package/package.json +4 -4
- package/dist/descriptors/acquire.d.ts +0 -122
- package/dist/descriptors/acquire.d.ts.map +0 -1
- package/dist/descriptors/acquire.js +0 -100
- package/dist/descriptors/acquire.js.map +0 -1
- package/dist/descriptors/cipher.d.ts +0 -71
- package/dist/descriptors/cipher.d.ts.map +0 -1
- package/dist/descriptors/cipher.js +0 -109
- package/dist/descriptors/cipher.js.map +0 -1
- package/dist/descriptors/errors.d.ts +0 -44
- package/dist/descriptors/errors.d.ts.map +0 -1
- package/dist/descriptors/errors.js +0 -46
- package/dist/descriptors/errors.js.map +0 -1
- package/dist/descriptors/refresh.d.ts +0 -62
- package/dist/descriptors/refresh.d.ts.map +0 -1
- package/dist/descriptors/refresh.js +0 -69
- package/dist/descriptors/refresh.js.map +0 -1
|
@@ -40,9 +40,8 @@
|
|
|
40
40
|
* Per-collection fan-out failures surface on the result's `epochs.failed`
|
|
41
41
|
* list (the establishment's assert contract); nothing is discarded.
|
|
42
42
|
*/
|
|
43
|
-
import type { IZcap } from '@interop/data-integrity-core';
|
|
44
43
|
import type { IKeyAgreementKey } from '@interop/data-integrity-core';
|
|
45
|
-
import type { CollectionEncryption
|
|
44
|
+
import type { CollectionEncryption } from '@interop/was-client';
|
|
46
45
|
import type { EncryptionDescriptorStore } from '@interop/was-client/edv';
|
|
47
46
|
import { type UserKey, type WalletSpaceEpochsResult } from '../keys/index.js';
|
|
48
47
|
/**
|
|
@@ -76,10 +75,11 @@ export type RosterDeliveredEpochsResult = {
|
|
|
76
75
|
/**
|
|
77
76
|
* Ensures the user-key roster exists and every encrypted collection carries
|
|
78
77
|
* epoch[0] under the key the roster delivers (see the module doc for the
|
|
79
|
-
* policy and the refusal shapes).
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
78
|
+
* policy and the refusal shapes). Both authority pairs ride the caller's
|
|
79
|
+
* stores: the SIGNER and the INVOCATION are wired into `store` for the
|
|
80
|
+
* roster and into each `storeFor` store for the collections -- ladder-signed
|
|
81
|
+
* appends on a ladder-anchored account, invoked with the bootstrap root
|
|
82
|
+
* pre-promotion or with a delegated capability post-promotion.
|
|
83
83
|
*
|
|
84
84
|
* @param options {object}
|
|
85
85
|
* @param options.store {EncryptionDescriptorStore} the roster's descriptor
|
|
@@ -90,11 +90,11 @@ export type RosterDeliveredEpochsResult = {
|
|
|
90
90
|
* @param options.clientKeyAgreementKey {IKeyAgreementKey} the credential's
|
|
91
91
|
* own key-agreement key -- the roster recipient the ensure wraps to, and
|
|
92
92
|
* the unwrap key of the re-read
|
|
93
|
-
* @param options.
|
|
94
|
-
*
|
|
95
|
-
*
|
|
96
|
-
*
|
|
97
|
-
*
|
|
93
|
+
* @param options.storeFor {function} `(collectionId) =>
|
|
94
|
+
* EncryptionDescriptorStore` -- the collection fan-out's per-collection
|
|
95
|
+
* descriptor stores
|
|
96
|
+
* @param options.spaceId {string} the account Space's id, named in the
|
|
97
|
+
* fan-out's per-collection failure messages
|
|
98
98
|
* @param [options.collectionIds] {string[]} the fan-out's collection set
|
|
99
99
|
* override, threaded through to `ensureWalletSpaceEpochs`
|
|
100
100
|
* @param options.beforeMint {Function} `() => Promise<void>` -- the mint
|
|
@@ -109,13 +109,12 @@ export type RosterDeliveredEpochsResult = {
|
|
|
109
109
|
* is refused with a `TypeError` before any read
|
|
110
110
|
* @returns {Promise<RosterDeliveredEpochsResult>}
|
|
111
111
|
*/
|
|
112
|
-
export declare function ensureRosterDeliveredEpochs({ store, candidateUserKey, clientKeyAgreementKey,
|
|
112
|
+
export declare function ensureRosterDeliveredEpochs({ store, candidateUserKey, clientKeyAgreementKey, storeFor, spaceId, collectionIds, beforeMint }: {
|
|
113
113
|
store: EncryptionDescriptorStore;
|
|
114
114
|
candidateUserKey: UserKey;
|
|
115
115
|
clientKeyAgreementKey: IKeyAgreementKey;
|
|
116
|
-
|
|
116
|
+
storeFor: (collectionId: string) => EncryptionDescriptorStore;
|
|
117
117
|
spaceId: string;
|
|
118
|
-
capability?: IZcap;
|
|
119
118
|
collectionIds?: string[];
|
|
120
119
|
beforeMint: () => Promise<void>;
|
|
121
120
|
}): Promise<RosterDeliveredEpochsResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rosterDeliveredEpochs.d.ts","sourceRoot":"","sources":["../../src/clientAnnex/rosterDeliveredEpochs.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"rosterDeliveredEpochs.d.ts","sourceRoot":"","sources":["../../src/clientAnnex/rosterDeliveredEpochs.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AACpE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC/D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAA;AACxE,OAAO,EAIL,KAAK,OAAO,EACZ,KAAK,uBAAuB,EAC7B,MAAM,kBAAkB,CAAA;AAczB;;;;;;;GAOG;AACH,MAAM,MAAM,2BAA2B,GACnC;IACE,OAAO,EAAE,WAAW,GAAG,qBAAqB,CAAA;IAC5C;;OAEG;IACH,OAAO,EAAE,OAAO,CAAA;IAChB,gBAAgB,EAAE,oBAAoB,CAAA;IACtC;;OAEG;IACH,MAAM,EAAE,OAAO,CAAA;IACf,MAAM,EAAE,uBAAuB,CAAA;CAChC,GACD;IACE,OAAO,EAAE,SAAS,CAAA;IAClB,gBAAgB,EAAE,oBAAoB,CAAA;IACtC;;OAEG;IACH,KAAK,EAAE,OAAO,CAAA;CACf,CAAA;AAEL;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAsB,2BAA2B,CAAC,EAChD,KAAK,EACL,gBAAgB,EAChB,qBAAqB,EACrB,QAAQ,EACR,OAAO,EACP,aAAa,EACb,UAAU,EACX,EAAE;IACD,KAAK,EAAE,yBAAyB,CAAA;IAChC,gBAAgB,EAAE,OAAO,CAAA;IACzB,qBAAqB,EAAE,gBAAgB,CAAA;IACvC,QAAQ,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,yBAAyB,CAAA;IAC7D,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAChC,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAmFvC"}
|
|
@@ -13,10 +13,11 @@ const CREATE_RACE_ERROR_NAMES = new Set([
|
|
|
13
13
|
/**
|
|
14
14
|
* Ensures the user-key roster exists and every encrypted collection carries
|
|
15
15
|
* epoch[0] under the key the roster delivers (see the module doc for the
|
|
16
|
-
* policy and the refusal shapes).
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
16
|
+
* policy and the refusal shapes). Both authority pairs ride the caller's
|
|
17
|
+
* stores: the SIGNER and the INVOCATION are wired into `store` for the
|
|
18
|
+
* roster and into each `storeFor` store for the collections -- ladder-signed
|
|
19
|
+
* appends on a ladder-anchored account, invoked with the bootstrap root
|
|
20
|
+
* pre-promotion or with a delegated capability post-promotion.
|
|
20
21
|
*
|
|
21
22
|
* @param options {object}
|
|
22
23
|
* @param options.store {EncryptionDescriptorStore} the roster's descriptor
|
|
@@ -27,11 +28,11 @@ const CREATE_RACE_ERROR_NAMES = new Set([
|
|
|
27
28
|
* @param options.clientKeyAgreementKey {IKeyAgreementKey} the credential's
|
|
28
29
|
* own key-agreement key -- the roster recipient the ensure wraps to, and
|
|
29
30
|
* the unwrap key of the re-read
|
|
30
|
-
* @param options.
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
31
|
+
* @param options.storeFor {function} `(collectionId) =>
|
|
32
|
+
* EncryptionDescriptorStore` -- the collection fan-out's per-collection
|
|
33
|
+
* descriptor stores
|
|
34
|
+
* @param options.spaceId {string} the account Space's id, named in the
|
|
35
|
+
* fan-out's per-collection failure messages
|
|
35
36
|
* @param [options.collectionIds] {string[]} the fan-out's collection set
|
|
36
37
|
* override, threaded through to `ensureWalletSpaceEpochs`
|
|
37
38
|
* @param options.beforeMint {Function} `() => Promise<void>` -- the mint
|
|
@@ -46,7 +47,7 @@ const CREATE_RACE_ERROR_NAMES = new Set([
|
|
|
46
47
|
* is refused with a `TypeError` before any read
|
|
47
48
|
* @returns {Promise<RosterDeliveredEpochsResult>}
|
|
48
49
|
*/
|
|
49
|
-
export async function ensureRosterDeliveredEpochs({ store, candidateUserKey, clientKeyAgreementKey,
|
|
50
|
+
export async function ensureRosterDeliveredEpochs({ store, candidateUserKey, clientKeyAgreementKey, storeFor, spaceId, collectionIds, beforeMint }) {
|
|
50
51
|
if (typeof beforeMint !== 'function') {
|
|
51
52
|
throw new TypeError('ensureRosterDeliveredEpochs requires a beforeMint seam: the mint ' +
|
|
52
53
|
'preconditions that license installing the candidate as epoch[0].');
|
|
@@ -109,11 +110,10 @@ export async function ensureRosterDeliveredEpochs({ store, candidateUserKey, cli
|
|
|
109
110
|
// the install. Per-collection failures ride the result's `failed` list to
|
|
110
111
|
// the caller.
|
|
111
112
|
const epochs = await ensureWalletSpaceEpochs({
|
|
112
|
-
|
|
113
|
+
storeFor,
|
|
113
114
|
spaceId,
|
|
114
115
|
userKey,
|
|
115
116
|
rosterDescriptor: descriptor,
|
|
116
|
-
...(capability !== undefined ? { capability } : {}),
|
|
117
117
|
...(collectionIds !== undefined ? { collectionIds } : {})
|
|
118
118
|
});
|
|
119
119
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rosterDeliveredEpochs.js","sourceRoot":"","sources":["../../src/clientAnnex/rosterDeliveredEpochs.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"rosterDeliveredEpochs.js","sourceRoot":"","sources":["../../src/clientAnnex/rosterDeliveredEpochs.ts"],"names":[],"mappings":"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"}
|
|
@@ -44,7 +44,6 @@
|
|
|
44
44
|
import type { IKeyAgreementKey } from '@interop/data-integrity-core';
|
|
45
45
|
import type { UserKey } from '../keys/userKey.js';
|
|
46
46
|
import type { AccountPointer } from '../keyring/record.js';
|
|
47
|
-
import { type ResourceLogPinStore } from '@interop/vh-resource-log';
|
|
48
47
|
import type { ClientWebvhUpdateKeys } from '../webvh/didWebvh.js';
|
|
49
48
|
import type { UnlockLogStore } from '../unlock/standingWebvh.js';
|
|
50
49
|
/**
|
|
@@ -65,13 +64,11 @@ import type { UnlockLogStore } from '../unlock/standingWebvh.js';
|
|
|
65
64
|
* with
|
|
66
65
|
* @param options.logStore {UnlockLogStore} the public log read plus the
|
|
67
66
|
* delegated `did.jsonl` PUT, built by the app around the record's bridge
|
|
68
|
-
* delegation
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
* its first contact), which is exactly the pin's trust-on-first-use
|
|
74
|
-
* establishment
|
|
67
|
+
* delegation. It carries this client's chain-head pin for the account log,
|
|
68
|
+
* checked on every read the two log entries are built on and advanced as
|
|
69
|
+
* each publishes, then checked again by the verify that follows. A fresh
|
|
70
|
+
* browser normally holds no pin yet (this is its first contact), which is
|
|
71
|
+
* exactly the pin's trust-on-first-use establishment
|
|
75
72
|
* @param options.onCommitted {function}
|
|
76
73
|
* `(committed: { builtOnHead, clientSeed, webvhUpdateKeys }) =>
|
|
77
74
|
* Promise<void>` -- the REQUIRED persist-before-publish seam. The caller
|
|
@@ -111,12 +108,11 @@ import type { UnlockLogStore } from '../unlock/standingWebvh.js';
|
|
|
111
108
|
* cleared. The member exists so a build skew that dropped it surfaces
|
|
112
109
|
* instead of reading as `false`
|
|
113
110
|
*/
|
|
114
|
-
export declare function selfEnrollClientCore({ pointer, ladderSeed, credentialKeyAgreementKey, logStore,
|
|
111
|
+
export declare function selfEnrollClientCore({ pointer, ladderSeed, credentialKeyAgreementKey, logStore, onCommitted, resume }: {
|
|
115
112
|
pointer: AccountPointer;
|
|
116
113
|
ladderSeed: Uint8Array;
|
|
117
114
|
credentialKeyAgreementKey: IKeyAgreementKey;
|
|
118
115
|
logStore: UnlockLogStore;
|
|
119
|
-
accountLogPinStore?: ResourceLogPinStore;
|
|
120
116
|
onCommitted: (committed: {
|
|
121
117
|
builtOnHead: {
|
|
122
118
|
scid: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selfEnroll.d.ts","sourceRoot":"","sources":["../../src/clientAnnex/selfEnroll.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AASpE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"selfEnroll.d.ts","sourceRoot":"","sources":["../../src/clientAnnex/selfEnroll.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AASpE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAO1D,OAAO,KAAK,EACV,qBAAqB,EAEtB,MAAM,sBAAsB,CAAA;AAW7B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAEhE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6DG;AACH,wBAAsB,oBAAoB,CAAC,EACzC,OAAO,EACP,UAAU,EACV,yBAAyB,EACzB,QAAQ,EACR,WAAW,EACX,MAAM,EACP,EAAE;IACD,OAAO,EAAE,cAAc,CAAA;IACvB,UAAU,EAAE,UAAU,CAAA;IACtB,yBAAyB,EAAE,gBAAgB,CAAA;IAC3C,QAAQ,EAAE,cAAc,CAAA;IACxB,WAAW,EAAE,CAAC,SAAS,EAAE;QACvB,WAAW,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,CAAA;QAChD,UAAU,EAAE,UAAU,CAAA;QACtB,eAAe,EAAE,qBAAqB,CAAA;KACvC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACnB,MAAM,CAAC,EAAE;QACP,UAAU,EAAE,UAAU,CAAA;QACtB,eAAe,EAAE,qBAAqB,CAAA;QACtC,WAAW,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,CAAA;KACjD,CAAA;CACF,GAAG,OAAO,CAAC;IACV,UAAU,EAAE,UAAU,CAAA;IACtB,eAAe,EAAE,qBAAqB,CAAA;IACtC,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,OAAO,CAAA;IAChB,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,OAAO,CAAA;CACnB,CAAC,CA2ID"}
|
|
@@ -4,7 +4,7 @@ import { userKeyRosterDescriptorStore } from '../keys/rosterStore.js';
|
|
|
4
4
|
import { memoryResourceLogPinStore } from '@interop/vh-resource-log';
|
|
5
5
|
import { webvhResourceLogController } from '../resourceLog/index.js';
|
|
6
6
|
import { mintClientWebvhUpdateKeys, updateKeyMultibase } from '../webvh/didWebvh.js';
|
|
7
|
-
import {
|
|
7
|
+
import { verifyAccountLog } from '../webvh/verifyLog.js';
|
|
8
8
|
import { clientSigningKeyMultibase, isWebvhDid, webvhZcapClient } from '../webvh/zcap.js';
|
|
9
9
|
import { assertBuiltOnHeadShape, selfEnrollWebvhClient } from './ladderAnchored.js';
|
|
10
10
|
/**
|
|
@@ -25,13 +25,11 @@ import { assertBuiltOnHeadShape, selfEnrollWebvhClient } from './ladderAnchored.
|
|
|
25
25
|
* with
|
|
26
26
|
* @param options.logStore {UnlockLogStore} the public log read plus the
|
|
27
27
|
* delegated `did.jsonl` PUT, built by the app around the record's bridge
|
|
28
|
-
* delegation
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
* its first contact), which is exactly the pin's trust-on-first-use
|
|
34
|
-
* establishment
|
|
28
|
+
* delegation. It carries this client's chain-head pin for the account log,
|
|
29
|
+
* checked on every read the two log entries are built on and advanced as
|
|
30
|
+
* each publishes, then checked again by the verify that follows. A fresh
|
|
31
|
+
* browser normally holds no pin yet (this is its first contact), which is
|
|
32
|
+
* exactly the pin's trust-on-first-use establishment
|
|
35
33
|
* @param options.onCommitted {function}
|
|
36
34
|
* `(committed: { builtOnHead, clientSeed, webvhUpdateKeys }) =>
|
|
37
35
|
* Promise<void>` -- the REQUIRED persist-before-publish seam. The caller
|
|
@@ -71,7 +69,7 @@ import { assertBuiltOnHeadShape, selfEnrollWebvhClient } from './ladderAnchored.
|
|
|
71
69
|
* cleared. The member exists so a build skew that dropped it surfaces
|
|
72
70
|
* instead of reading as `false`
|
|
73
71
|
*/
|
|
74
|
-
export async function selfEnrollClientCore({ pointer, ladderSeed, credentialKeyAgreementKey, logStore,
|
|
72
|
+
export async function selfEnrollClientCore({ pointer, ladderSeed, credentialKeyAgreementKey, logStore, onCommitted, resume }) {
|
|
75
73
|
// Refused before any read, on the ceremony's own rule: without the seam the
|
|
76
74
|
// pivot entry can publish a client whose seed nothing persisted.
|
|
77
75
|
if (typeof onCommitted !== 'function') {
|
|
@@ -133,13 +131,7 @@ export async function selfEnrollClientCore({ pointer, ladderSeed, credentialKeyA
|
|
|
133
131
|
// rewrite of what already stands.
|
|
134
132
|
onCommitted: async ({ builtOnHead }) => onCommitted({ builtOnHead, clientSeed, webvhUpdateKeys }),
|
|
135
133
|
...(resume ? { builtOnHead: resume.builtOnHead } : {}),
|
|
136
|
-
expectedDid
|
|
137
|
-
...(accountLogPinStore
|
|
138
|
-
? {
|
|
139
|
-
pinStore: accountLogPinStore,
|
|
140
|
-
logId: accountLogPinId({ spaceId: pointer.spaceId })
|
|
141
|
-
}
|
|
142
|
-
: {})
|
|
134
|
+
expectedDid
|
|
143
135
|
});
|
|
144
136
|
// Verify the continuation from the world-readable log -- the same
|
|
145
137
|
// first-contact read an enrollee's completion runs, and the controller the
|
|
@@ -148,7 +140,10 @@ export async function selfEnrollClientCore({ pointer, ladderSeed, credentialKeyA
|
|
|
148
140
|
did: expectedDid,
|
|
149
141
|
spaceId: pointer.spaceId,
|
|
150
142
|
host: pointer.host,
|
|
151
|
-
|
|
143
|
+
// The same chain-head pin the two entries above published under: the
|
|
144
|
+
// verifier fetches the log by host URL and holds no store, so the store's
|
|
145
|
+
// own pin is handed to it explicitly.
|
|
146
|
+
pinStore: logStore.pin.store
|
|
152
147
|
});
|
|
153
148
|
// The first roster read: signed with the `<did:webvh>#<multibase>` keyId
|
|
154
149
|
// the add entry just published, unwrapping the user key from the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selfEnroll.js","sourceRoot":"","sources":["../../src/clientAnnex/selfEnroll.ts"],"names":[],"mappings":"AA4CA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EACL,yBAAyB,EACzB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACvB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAA;AAGrE,OAAO,
|
|
1
|
+
{"version":3,"file":"selfEnroll.js","sourceRoot":"","sources":["../../src/clientAnnex/selfEnroll.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,52 +2,27 @@
|
|
|
2
2
|
* Copyright (c) 2026 Interop Alliance. All rights reserved.
|
|
3
3
|
*/
|
|
4
4
|
/**
|
|
5
|
-
* The `@interop/wallet-core/descriptors` subpath:
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
5
|
+
* The `@interop/wallet-core/descriptors` subpath: the log-governed descriptor
|
|
6
|
+
* source, the wallet's implementation of `@interop/was-client/edv`'s
|
|
7
|
+
* `EncryptionDescriptorSource` seam for collections whose encryption
|
|
8
|
+
* descriptor is governed by a resource log. The acquisition, cache-fallback,
|
|
9
|
+
* and unknown-epoch refresh policy that source plugs into (`acquireDescriptor`,
|
|
10
|
+
* `DescriptorRefreshPolicy`, `createRefreshingEdvDocCipher`, and the
|
|
11
|
+
* `isKeyUnwrapError` matcher) ship from `@interop/was-client/edv`, and this
|
|
12
|
+
* subpath re-exports none of them: one owner per name.
|
|
11
13
|
*
|
|
12
|
-
* - `
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
* log-governed source's refusal classes rethrow instead of falling back
|
|
25
|
-
* (except a continuity rollback, which is reconcilable divergence).
|
|
26
|
-
* - `logGovernedDescriptorSource` -- the `EncryptionDescriptorSource` for
|
|
27
|
-
* collections whose descriptor is governed by a resource log: every read
|
|
28
|
-
* (including the unknown-epoch refresh) re-verifies the log and resolves to
|
|
29
|
-
* its verified head state, refusing a head that is not a
|
|
30
|
-
* `WasEpochConfiguration`. It keys each collection's chain-head pin by
|
|
31
|
-
* `collectionDescriptorLogPinId` over the Space id, the library-named slot
|
|
32
|
-
* (`space/<spaceId>/key-map/<collectionId>.jsonl`), so no app builds one.
|
|
33
|
-
* - `DescriptorRefreshPolicy` -- the once-per-collection-per-session
|
|
34
|
-
* unknown-epoch refresh guard, plus the refresh-and-re-read-once wrapper
|
|
35
|
-
* for hosts whose reads scan rows and count unknown-epoch skips.
|
|
36
|
-
* - `createRefreshingEdvDocCipher` -- `createEdvDocCipher` bound to both: a
|
|
37
|
-
* cipher that acquires its own descriptor and, on an unknown-epoch decrypt,
|
|
38
|
-
* re-reads the description, swaps itself, and retries exactly once per
|
|
39
|
-
* instance.
|
|
40
|
-
* - `isKeyUnwrapError` -- how a host scanning rows tells "not a recipient of
|
|
41
|
-
* this epoch" from corruption, matched by `err.name` because the cipher is
|
|
42
|
-
* an injected seam. Its sibling `isUnknownEpochError` ships from
|
|
43
|
-
* `@interop/was-client/sync`, beside the class it matches. This one stays
|
|
44
|
-
* here on policy: it classifies a roster-membership failure the wallet
|
|
45
|
-
* layer owns, and no sync driver dispatches on it.
|
|
14
|
+
* - `logGovernedDescriptorSource` -- every read (including the unknown-epoch
|
|
15
|
+
* refresh) re-verifies the log and resolves to its verified head state,
|
|
16
|
+
* refusing a head that is not a `WasEpochConfiguration`. Reads run under the
|
|
17
|
+
* collection-descriptor log class, so a ladder-signed append admits on
|
|
18
|
+
* `assertionMethod` membership alone. It keys each collection's chain-head
|
|
19
|
+
* pin by `collectionDescriptorLogPinId` over the Space id, the library-named
|
|
20
|
+
* slot (`space/<spaceId>/<collectionId>/meta/log`, the log's own home), so no
|
|
21
|
+
* app builds one. It is the one governed-descriptor reader this subpath
|
|
22
|
+
* publishes: the bare-controller read under it
|
|
23
|
+
* (`readGovernedEpochConfiguration`, was-client's) states no log class and
|
|
24
|
+
* would read a collection log under the roster's license, so it stays
|
|
25
|
+
* module-internal.
|
|
46
26
|
*/
|
|
47
|
-
export {
|
|
48
|
-
export type { EncryptionDescriptorCache, EncryptionDescriptorSource } from './acquire.js';
|
|
49
|
-
export { collectionDescriptorLogPinId, EPOCH_CONFIGURATION_STATE_TYPE, logGovernedDescriptorSource, readGovernedEpochConfiguration } from './logSource.js';
|
|
50
|
-
export { DescriptorRefreshPolicy } from './refresh.js';
|
|
51
|
-
export { createRefreshingEdvDocCipher } from './cipher.js';
|
|
52
|
-
export { isKeyUnwrapError } from './errors.js';
|
|
27
|
+
export { collectionDescriptorLogPinId, logGovernedDescriptorSource } from './logSource.js';
|
|
53
28
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/descriptors/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/descriptors/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,EACL,4BAA4B,EAC5B,2BAA2B,EAC5B,MAAM,gBAAgB,CAAA"}
|
|
@@ -2,51 +2,27 @@
|
|
|
2
2
|
* Copyright (c) 2026 Interop Alliance. All rights reserved.
|
|
3
3
|
*/
|
|
4
4
|
/**
|
|
5
|
-
* The `@interop/wallet-core/descriptors` subpath:
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
5
|
+
* The `@interop/wallet-core/descriptors` subpath: the log-governed descriptor
|
|
6
|
+
* source, the wallet's implementation of `@interop/was-client/edv`'s
|
|
7
|
+
* `EncryptionDescriptorSource` seam for collections whose encryption
|
|
8
|
+
* descriptor is governed by a resource log. The acquisition, cache-fallback,
|
|
9
|
+
* and unknown-epoch refresh policy that source plugs into (`acquireDescriptor`,
|
|
10
|
+
* `DescriptorRefreshPolicy`, `createRefreshingEdvDocCipher`, and the
|
|
11
|
+
* `isKeyUnwrapError` matcher) ship from `@interop/was-client/edv`, and this
|
|
12
|
+
* subpath re-exports none of them: one owner per name.
|
|
11
13
|
*
|
|
12
|
-
* - `
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
* log-governed source's refusal classes rethrow instead of falling back
|
|
25
|
-
* (except a continuity rollback, which is reconcilable divergence).
|
|
26
|
-
* - `logGovernedDescriptorSource` -- the `EncryptionDescriptorSource` for
|
|
27
|
-
* collections whose descriptor is governed by a resource log: every read
|
|
28
|
-
* (including the unknown-epoch refresh) re-verifies the log and resolves to
|
|
29
|
-
* its verified head state, refusing a head that is not a
|
|
30
|
-
* `WasEpochConfiguration`. It keys each collection's chain-head pin by
|
|
31
|
-
* `collectionDescriptorLogPinId` over the Space id, the library-named slot
|
|
32
|
-
* (`space/<spaceId>/key-map/<collectionId>.jsonl`), so no app builds one.
|
|
33
|
-
* - `DescriptorRefreshPolicy` -- the once-per-collection-per-session
|
|
34
|
-
* unknown-epoch refresh guard, plus the refresh-and-re-read-once wrapper
|
|
35
|
-
* for hosts whose reads scan rows and count unknown-epoch skips.
|
|
36
|
-
* - `createRefreshingEdvDocCipher` -- `createEdvDocCipher` bound to both: a
|
|
37
|
-
* cipher that acquires its own descriptor and, on an unknown-epoch decrypt,
|
|
38
|
-
* re-reads the description, swaps itself, and retries exactly once per
|
|
39
|
-
* instance.
|
|
40
|
-
* - `isKeyUnwrapError` -- how a host scanning rows tells "not a recipient of
|
|
41
|
-
* this epoch" from corruption, matched by `err.name` because the cipher is
|
|
42
|
-
* an injected seam. Its sibling `isUnknownEpochError` ships from
|
|
43
|
-
* `@interop/was-client/sync`, beside the class it matches. This one stays
|
|
44
|
-
* here on policy: it classifies a roster-membership failure the wallet
|
|
45
|
-
* layer owns, and no sync driver dispatches on it.
|
|
14
|
+
* - `logGovernedDescriptorSource` -- every read (including the unknown-epoch
|
|
15
|
+
* refresh) re-verifies the log and resolves to its verified head state,
|
|
16
|
+
* refusing a head that is not a `WasEpochConfiguration`. Reads run under the
|
|
17
|
+
* collection-descriptor log class, so a ladder-signed append admits on
|
|
18
|
+
* `assertionMethod` membership alone. It keys each collection's chain-head
|
|
19
|
+
* pin by `collectionDescriptorLogPinId` over the Space id, the library-named
|
|
20
|
+
* slot (`space/<spaceId>/<collectionId>/meta/log`, the log's own home), so no
|
|
21
|
+
* app builds one. It is the one governed-descriptor reader this subpath
|
|
22
|
+
* publishes: the bare-controller read under it
|
|
23
|
+
* (`readGovernedEpochConfiguration`, was-client's) states no log class and
|
|
24
|
+
* would read a collection log under the roster's license, so it stays
|
|
25
|
+
* module-internal.
|
|
46
26
|
*/
|
|
47
|
-
export {
|
|
48
|
-
export { collectionDescriptorLogPinId, EPOCH_CONFIGURATION_STATE_TYPE, logGovernedDescriptorSource, readGovernedEpochConfiguration } from './logSource.js';
|
|
49
|
-
export { DescriptorRefreshPolicy } from './refresh.js';
|
|
50
|
-
export { createRefreshingEdvDocCipher } from './cipher.js';
|
|
51
|
-
export { isKeyUnwrapError } from './errors.js';
|
|
27
|
+
export { collectionDescriptorLogPinId, logGovernedDescriptorSource } from './logSource.js';
|
|
52
28
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/descriptors/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/descriptors/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,EACL,4BAA4B,EAC5B,2BAA2B,EAC5B,MAAM,gBAAgB,CAAA"}
|
|
@@ -12,28 +12,44 @@
|
|
|
12
12
|
* log rather than adopting whatever the host serves. A verified head whose
|
|
13
13
|
* state is not an epoch configuration is refused fail-closed rather than
|
|
14
14
|
* handed out as a descriptor.
|
|
15
|
+
*
|
|
16
|
+
* The log lives at the collection's own `meta/log` sub-resource
|
|
17
|
+
* (`COLLECTION_HISTORY_LOG_SUBRESOURCE`), inside the URL subtree of the
|
|
18
|
+
* collection it governs. A share grantee or a connected app already holds a
|
|
19
|
+
* read capability over that subtree, so the same grant that lets them read
|
|
20
|
+
* the collection lets them verify its descriptor's history: no second grant,
|
|
21
|
+
* and no capability over the account's `key-map` collection.
|
|
22
|
+
*
|
|
23
|
+
* Reads here run under the collection-descriptor log CLASS: a ladder-signed
|
|
24
|
+
* append to one of these logs admits on `assertionMethod` membership alone,
|
|
25
|
+
* the roster's ceremony-tail license binding the roster log only. A reader
|
|
26
|
+
* that inherited the roster's rule would refuse a served log its own wallet
|
|
27
|
+
* wrote.
|
|
15
28
|
*/
|
|
16
|
-
import type
|
|
17
|
-
import { type
|
|
18
|
-
import type
|
|
29
|
+
import { EPOCH_CONFIGURATION_STATE_TYPE, readGovernedEpochConfiguration, type EncryptionDescriptorSource } from '@interop/was-client/edv';
|
|
30
|
+
import { type ResourceLogPinStore, type ResourceLogStore } from '@interop/vh-resource-log';
|
|
31
|
+
import { type WebvhResourceLogController } from '../resourceLog/index.js';
|
|
19
32
|
/**
|
|
20
|
-
* The state-document schema identifier
|
|
21
|
-
*
|
|
33
|
+
* The governed read boundary and the state-document schema identifier live in
|
|
34
|
+
* `@interop/was-client/edv` (the pointer-following collection store reads
|
|
35
|
+
* through the same helper); re-exported here so the roster store and this
|
|
36
|
+
* module's consumers keep one import site.
|
|
22
37
|
*/
|
|
23
|
-
export
|
|
38
|
+
export { EPOCH_CONFIGURATION_STATE_TYPE, readGovernedEpochConfiguration };
|
|
24
39
|
/**
|
|
25
40
|
* The pin-slot key for a collection's governing descriptor log: the slot a
|
|
26
41
|
* keyed `ResourceLogPinStore` holds that log's chain-head pin under,
|
|
27
|
-
* `space/<spaceId>/
|
|
42
|
+
* `space/<spaceId>/<collectionId>/meta/log`. The library names it, as it
|
|
28
43
|
* names the account log's (`accountLogPinId`) and the roster's
|
|
29
|
-
* (`userKeyRosterPinId`) slots, so no app builds one of its own
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
44
|
+
* (`userKeyRosterPinId`) slots, so no app builds one of its own.
|
|
45
|
+
*
|
|
46
|
+
* The slot follows the log's placement: the log is the collection's own
|
|
47
|
+
* `meta/log` sub-resource, inside the URL subtree of the collection it
|
|
48
|
+
* governs, so the read capability a share grantee or a connected app already
|
|
49
|
+
* holds covers it. The shape is host-free on purpose -- the Space id is what
|
|
50
|
+
* stays stable across a claimed host move, so a log served from a new host
|
|
51
|
+
* still lands in the same slot and is checked against the held pin rather
|
|
52
|
+
* than opening a fresh trust-on-first-use slate.
|
|
37
53
|
*
|
|
38
54
|
* @param options {object}
|
|
39
55
|
* @param options.spaceId {string} the data Space id
|
|
@@ -44,56 +60,29 @@ export declare function collectionDescriptorLogPinId({ spaceId, collectionId }:
|
|
|
44
60
|
spaceId: string;
|
|
45
61
|
collectionId: string;
|
|
46
62
|
}): string;
|
|
47
|
-
/**
|
|
48
|
-
* The one governed epoch-configuration read: the fail-closed boundary that
|
|
49
|
-
* decides whether a served log state may be treated as an encryption
|
|
50
|
-
* descriptor. Resolves the controller view, reads and fully verifies the log
|
|
51
|
-
* (chain, proofs, external authorization, and the chain-head pin, via
|
|
52
|
-
* `readResourceLog`), and refuses a verified head whose state is not a
|
|
53
|
-
* `WasEpochConfiguration` rather than handing it out as a descriptor.
|
|
54
|
-
* Resolves `null` for an absent log (the pre-genesis state) only while no pin
|
|
55
|
-
* is held for it; under a held pin an absent log is refused as a `rollback`,
|
|
56
|
-
* the library's rule. Both governed
|
|
57
|
-
* descriptor consumers -- the log-governed descriptor source below and the
|
|
58
|
-
* roster's log-governed descriptor store -- read through this helper, so a
|
|
59
|
-
* hardening applied here reaches every trusted descriptor read.
|
|
60
|
-
*
|
|
61
|
-
* @param options {object}
|
|
62
|
-
* @param options.store {ResourceLogStore} the log's transport seam
|
|
63
|
-
* @param options.resolveController {function}
|
|
64
|
-
* `() => Promise<ResourceLogController>` -- the caller's currently verified
|
|
65
|
-
* controller view, resolved per operation
|
|
66
|
-
* @param options.pinStore {ResourceLogPinStore} this client's chain-head
|
|
67
|
-
* pin for this log
|
|
68
|
-
* @param options.logId {string} the pin-slot key for this log, from
|
|
69
|
-
* `resourceLogPinId`
|
|
70
|
-
* @returns {Promise<{ verified: VerifiedResourceLog; descriptor: CollectionEncryption; etag?: string } | null>}
|
|
71
|
-
*/
|
|
72
|
-
export declare function readGovernedEpochConfiguration({ store, resolveController, pinStore, logId }: {
|
|
73
|
-
store: ResourceLogStore;
|
|
74
|
-
resolveController: () => Promise<ResourceLogController>;
|
|
75
|
-
pinStore: ResourceLogPinStore;
|
|
76
|
-
logId: string;
|
|
77
|
-
}): Promise<{
|
|
78
|
-
verified: VerifiedResourceLog;
|
|
79
|
-
descriptor: CollectionEncryption;
|
|
80
|
-
etag?: string;
|
|
81
|
-
} | null>;
|
|
82
63
|
/**
|
|
83
64
|
* Builds the {@link EncryptionDescriptorSource} over per-collection resource
|
|
84
65
|
* logs. An absent log resolves `undefined` exactly like an absent
|
|
85
66
|
* Collection Description `encryption` member (a plaintext collection, or one
|
|
86
67
|
* whose provisioning has not landed), unless a pin is held for it, in which
|
|
87
68
|
* case the read refuses as a `rollback`; verification failures throw through --
|
|
88
|
-
*
|
|
89
|
-
* back to the cache.
|
|
69
|
+
* was-client's `acquireDescriptor` rethrows the refusal classes rather than
|
|
70
|
+
* falling back to the cache.
|
|
71
|
+
*
|
|
72
|
+
* Every read runs under the collection-descriptor log class
|
|
73
|
+
* ({@link controllerForLogClass}), so a ladder-signed append verifies on
|
|
74
|
+
* `assertionMethod` membership alone. Without that narrowing a reader would
|
|
75
|
+
* inherit the roster's ceremony-tail license and refuse a served log its own
|
|
76
|
+
* wallet's standing credential wrote.
|
|
90
77
|
*
|
|
91
78
|
* @param options {object}
|
|
92
79
|
* @param options.logFor {function} `(collectionId) => ResourceLogStore` --
|
|
93
|
-
* the collection's governing log's transport seam
|
|
80
|
+
* the collection's governing log's transport seam (was-client's
|
|
81
|
+
* `resourceLogStore({ collection })` over the collection's `meta/log`)
|
|
94
82
|
* @param options.resolveController {function}
|
|
95
|
-
* `() => Promise<
|
|
96
|
-
* controller view, resolved per operation
|
|
83
|
+
* `() => Promise<WebvhResourceLogController>` -- the caller's currently
|
|
84
|
+
* verified controller view, resolved per operation and narrowed here to
|
|
85
|
+
* this log class
|
|
97
86
|
* @param options.pinStore {ResourceLogPinStore} this client's chain-head
|
|
98
87
|
* pins, keyed per log; each collection's slot is
|
|
99
88
|
* {@link collectionDescriptorLogPinId} over `spaceId`
|
|
@@ -102,7 +91,7 @@ export declare function readGovernedEpochConfiguration({ store, resolveControlle
|
|
|
102
91
|
*/
|
|
103
92
|
export declare function logGovernedDescriptorSource({ logFor, resolveController, pinStore, spaceId }: {
|
|
104
93
|
logFor: (collectionId: string) => ResourceLogStore;
|
|
105
|
-
resolveController: () => Promise<
|
|
94
|
+
resolveController: () => Promise<WebvhResourceLogController>;
|
|
106
95
|
pinStore: ResourceLogPinStore;
|
|
107
96
|
spaceId: string;
|
|
108
97
|
}): EncryptionDescriptorSource;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logSource.d.ts","sourceRoot":"","sources":["../../src/descriptors/logSource.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH
|
|
1
|
+
{"version":3,"file":"logSource.d.ts","sourceRoot":"","sources":["../../src/descriptors/logSource.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,EACL,8BAA8B,EAC9B,8BAA8B,EAC9B,KAAK,0BAA0B,EAChC,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACtB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,yBAAyB,CAAA;AAEhC;;;;;GAKG;AACH,OAAO,EAAE,8BAA8B,EAAE,8BAA8B,EAAE,CAAA;AAEzE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,4BAA4B,CAAC,EAC3C,OAAO,EACP,YAAY,EACb,EAAE;IACD,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;CACrB,GAAG,MAAM,CAET;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,2BAA2B,CAAC,EAC1C,MAAM,EACN,iBAAiB,EACjB,QAAQ,EACR,OAAO,EACR,EAAE;IACD,MAAM,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,gBAAgB,CAAA;IAClD,iBAAiB,EAAE,MAAM,OAAO,CAAC,0BAA0B,CAAC,CAAA;IAC5D,QAAQ,EAAE,mBAAmB,CAAA;IAC7B,OAAO,EAAE,MAAM,CAAA;CAChB,GAAG,0BAA0B,CAmB7B"}
|