@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
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { DIDDoc, DIDLog } from '@interop/did-method-webvh';
|
|
2
|
-
import type { ClientWebvhUpdateKeys, WebvhIdStore } from './didWebvh.js';
|
|
1
|
+
import type { DIDDoc, DIDLog, VerificationMethod } from '@interop/did-method-webvh';
|
|
2
|
+
import type { ClientWebvhUpdateKeys, PublishedWebvhLog, WebvhIdStore } from './didWebvh.js';
|
|
3
3
|
/**
|
|
4
4
|
* The public halves of the client being revoked, as the document and log
|
|
5
5
|
* carry them: its signing-key multibase and its active update key. The
|
|
@@ -18,9 +18,11 @@ export interface RevokedClientKeys {
|
|
|
18
18
|
/**
|
|
19
19
|
* Thrown when the log attribution cannot isolate the revoked client's staged
|
|
20
20
|
* commitment to a single hash -- more than one candidate survives after the
|
|
21
|
-
* known latent (recovery-code) hashes are excluded
|
|
22
|
-
*
|
|
23
|
-
* key
|
|
21
|
+
* known latent (recovery-code) hashes are excluded, and the decision-0007
|
|
22
|
+
* append-order rule cannot resolve the residue positionally either (the
|
|
23
|
+
* client's update-key hash is not among the entry's additions, or the
|
|
24
|
+
* addition after it is not a surviving candidate). Refusing beats guessing:
|
|
25
|
+
* see the module doc.
|
|
24
26
|
*
|
|
25
27
|
* **`name` is a stable contract.** It is always the string
|
|
26
28
|
* `'StagedCommitmentAmbiguousError'`, and a consumer should match on that
|
|
@@ -34,6 +36,76 @@ export declare class StagedCommitmentAmbiguousError extends Error {
|
|
|
34
36
|
candidates: string[];
|
|
35
37
|
});
|
|
36
38
|
}
|
|
39
|
+
/**
|
|
40
|
+
* What a removal edit strikes, computed from the published log before any
|
|
41
|
+
* entry is built: the removed client's verification-method ids, whether any
|
|
42
|
+
* of them still stand (`vmPresent`), the update key the LOG states for the
|
|
43
|
+
* client now ({@link clientRemovalTarget} re-derives a stale or staged key by
|
|
44
|
+
* attribution), that key's carry-over hash, and whether anything at all is
|
|
45
|
+
* left to remove (`present`). Shared by the revocation entry
|
|
46
|
+
* ({@link revokeWebvhClient}) and the ladder-signed forget entry
|
|
47
|
+
* (`forgetWebvhClient` in the unlock module), so the two removal shapes can
|
|
48
|
+
* never drift.
|
|
49
|
+
*/
|
|
50
|
+
export interface ClientRemovalTarget {
|
|
51
|
+
signingVmId: string;
|
|
52
|
+
keyAgreementVmIds: Set<string>;
|
|
53
|
+
vmPresent: boolean;
|
|
54
|
+
removedUpdateKey: string;
|
|
55
|
+
removedHash: string;
|
|
56
|
+
keyPresent: boolean;
|
|
57
|
+
hashPresent: boolean;
|
|
58
|
+
present: boolean;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Computes what removing one enrolled client strikes from the published
|
|
62
|
+
* document and log (see {@link ClientRemovalTarget}). Pure read: nothing is
|
|
63
|
+
* published, and an absent client resolves with `present: false` rather than
|
|
64
|
+
* throwing (the idempotent no-op the callers fall through to).
|
|
65
|
+
*
|
|
66
|
+
* @param options {object}
|
|
67
|
+
* @param options.published {PublishedWebvhLog}
|
|
68
|
+
* @param options.client {RevokedClientKeys} the removed client's public
|
|
69
|
+
* halves; an `updateKeyMultibase` the log does not authorize (stale, or the
|
|
70
|
+
* client's staged key) is re-derived from the log
|
|
71
|
+
* @returns {Promise<ClientRemovalTarget>}
|
|
72
|
+
*/
|
|
73
|
+
export declare function clientRemovalTarget({ published, client }: {
|
|
74
|
+
published: PublishedWebvhLog;
|
|
75
|
+
client: RevokedClientKeys;
|
|
76
|
+
}): Promise<ClientRemovalTarget>;
|
|
77
|
+
/**
|
|
78
|
+
* Builds the removal entry's document and parameter fields from a computed
|
|
79
|
+
* target: the client's verification methods out of the document and all five
|
|
80
|
+
* relationship arrays, its update key out of `updateKeys`, and its carry-over
|
|
81
|
+
* and staged hashes out of `nextKeyHashes` (the staged hash recovered by log
|
|
82
|
+
* attribution -- see the module doc for why leaving it would be a re-seizure
|
|
83
|
+
* credential, and where the attribution is ambiguous). The caller supplies
|
|
84
|
+
* these to `updateDID` beside its own signer -- an enrolled client's update
|
|
85
|
+
* key for a revocation, a revealed ladder rung for a forget.
|
|
86
|
+
*
|
|
87
|
+
* @param options {object}
|
|
88
|
+
* @param options.published {PublishedWebvhLog}
|
|
89
|
+
* @param options.target {ClientRemovalTarget}
|
|
90
|
+
* @param [options.knownLatentHashes] {string[]} standing latent commitments
|
|
91
|
+
* the caller vouches for (the recovery registry's update-key hashes),
|
|
92
|
+
* excluded from the staged-hash attribution
|
|
93
|
+
* @returns {Promise<object>} the `updateDID` field bundle
|
|
94
|
+
*/
|
|
95
|
+
export declare function clientRemovalFields({ published, target, knownLatentHashes }: {
|
|
96
|
+
published: PublishedWebvhLog;
|
|
97
|
+
target: ClientRemovalTarget;
|
|
98
|
+
knownLatentHashes?: string[];
|
|
99
|
+
}): Promise<{
|
|
100
|
+
updateKeys: string[];
|
|
101
|
+
nextKeyHashes: string[];
|
|
102
|
+
verificationMethods: VerificationMethod[];
|
|
103
|
+
authentication: string[];
|
|
104
|
+
assertionMethod: string[];
|
|
105
|
+
keyAgreement: string[];
|
|
106
|
+
capabilityInvocation: string[];
|
|
107
|
+
capabilityDelegation: string[];
|
|
108
|
+
}>;
|
|
37
109
|
/**
|
|
38
110
|
* REVOCATION (run by another enrolled client, root authority): removes an
|
|
39
111
|
* enrolled wallet client from the published document -- its two verification
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"revokeClient.d.ts","sourceRoot":"","sources":["../../src/webvh/revokeClient.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"revokeClient.d.ts","sourceRoot":"","sources":["../../src/webvh/revokeClient.ts"],"names":[],"mappings":"AA4CA,OAAO,KAAK,EACV,MAAM,EACN,MAAM,EACN,kBAAkB,EACnB,MAAM,2BAA2B,CAAA;AAgBlC,OAAO,KAAK,EACV,qBAAqB,EACrB,iBAAiB,EACjB,YAAY,EACb,MAAM,eAAe,CAAA;AAEtB;;;;;;;;;;GAUG;AACH,MAAM,WAAW,iBAAiB;IAChC,mBAAmB,EAAE,MAAM,CAAA;IAC3B,kBAAkB,EAAE,MAAM,CAAA;CAC3B;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,8BAA+B,SAAQ,KAAK;IACvD,UAAU,EAAE,MAAM,EAAE,CAAA;gBACR,EAAE,UAAU,EAAE,EAAE;QAAE,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE;CAUrD;AAqMD;;;;;;;;;;GAUG;AACH,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAA;IACnB,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC9B,SAAS,EAAE,OAAO,CAAA;IAClB,gBAAgB,EAAE,MAAM,CAAA;IACxB,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,OAAO,CAAA;IACnB,WAAW,EAAE,OAAO,CAAA;IACpB,OAAO,EAAE,OAAO,CAAA;CACjB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,mBAAmB,CAAC,EACxC,SAAS,EACT,MAAM,EACP,EAAE;IACD,SAAS,EAAE,iBAAiB,CAAA;IAC5B,MAAM,EAAE,iBAAiB,CAAA;CAC1B,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAyC/B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,mBAAmB,CAAC,EACxC,SAAS,EACT,MAAM,EACN,iBAAsB,EACvB,EAAE;IACD,SAAS,EAAE,iBAAiB,CAAA;IAC5B,MAAM,EAAE,mBAAmB,CAAA;IAC3B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;CAC7B,GAAG,OAAO,CAAC;IACV,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,mBAAmB,EAAE,kBAAkB,EAAE,CAAA;IACzC,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,eAAe,EAAE,MAAM,EAAE,CAAA;IACzB,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,oBAAoB,EAAE,MAAM,EAAE,CAAA;IAC9B,oBAAoB,EAAE,MAAM,EAAE,CAAA;CAC/B,CAAC,CA8CD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE;IAC/C,OAAO,EAAE,YAAY,CAAA;IACrB,UAAU,EAAE,qBAAqB,CAAA;IACjC,aAAa,EAAE,iBAAiB,CAAA;IAChC,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,GAAG,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CAErD"}
|
|
@@ -27,14 +27,19 @@
|
|
|
27
27
|
* the entry that revealed or committed its client's active key -- genesis,
|
|
28
28
|
* an enrollment commit, a rotation, a recovery reveal-and-commit -- and
|
|
29
29
|
* diffing that entry's `nextKeyHashes` against its predecessor isolates it.
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
30
|
+
* Two shapes commit more than the staged hash in one entry: a recovery
|
|
31
|
+
* continuation (the replacement code's latent hash rides beside it) and a
|
|
32
|
+
* standing credential's reveal-and-commit self-enrollment (the ladder's
|
|
33
|
+
* next-rung hash does). The caller first disambiguates by supplying the
|
|
34
|
+
* standing recovery-code hashes it knows (`knownLatentHashes`, from its
|
|
35
|
+
* recovery registry); when more than one candidate still survives, the
|
|
36
|
+
* append-order convention of decision 0007 resolves it positionally -- the
|
|
37
|
+
* staged hash is the addition immediately AFTER the revoked client's
|
|
38
|
+
* update-key hash in the entry's `nextKeyHashes` append order (the next-rung
|
|
39
|
+
* hash is last) -- and only a residue position cannot resolve either refuses
|
|
40
|
+
* loudly rather than guessing ({@link StagedCommitmentAmbiguousError}):
|
|
41
|
+
* removing a wrong hash would either leave the revoked client re-enrollable
|
|
42
|
+
* or brick another party's standing commitment.
|
|
38
43
|
*/
|
|
39
44
|
import { deriveNextKeyHash, updateDID } from '@interop/did-method-webvh';
|
|
40
45
|
import { assertCarryOverCommitments, concludeWithPublishedLog, effectiveParameters, publishUpdatedLog, readPublishedLog, relationIds, updateKeyMultibase, updateKeySigner, withLogConflictRetry } from './didWebvh.js';
|
|
@@ -42,9 +47,11 @@ import { attributeClientUpdateKey, markedKeyAgreementMultibases } from './listCl
|
|
|
42
47
|
/**
|
|
43
48
|
* Thrown when the log attribution cannot isolate the revoked client's staged
|
|
44
49
|
* commitment to a single hash -- more than one candidate survives after the
|
|
45
|
-
* known latent (recovery-code) hashes are excluded
|
|
46
|
-
*
|
|
47
|
-
* key
|
|
50
|
+
* known latent (recovery-code) hashes are excluded, and the decision-0007
|
|
51
|
+
* append-order rule cannot resolve the residue positionally either (the
|
|
52
|
+
* client's update-key hash is not among the entry's additions, or the
|
|
53
|
+
* addition after it is not a surviving candidate). Refusing beats guessing:
|
|
54
|
+
* see the module doc.
|
|
48
55
|
*
|
|
49
56
|
* **`name` is a stable contract.** It is always the string
|
|
50
57
|
* `'StagedCommitmentAmbiguousError'`, and a consumer should match on that
|
|
@@ -56,8 +63,9 @@ export class StagedCommitmentAmbiguousError extends Error {
|
|
|
56
63
|
candidates;
|
|
57
64
|
constructor({ candidates }) {
|
|
58
65
|
super("did:webvh: the revoked client's staged-key commitment cannot be " +
|
|
59
|
-
'isolated in nextKeyHashes
|
|
60
|
-
|
|
66
|
+
'isolated in nextKeyHashes -- more than one candidate hash survives ' +
|
|
67
|
+
'the known-latent-hash exclusion, and the append-order rule cannot ' +
|
|
68
|
+
"place one immediately after the client's update-key hash.");
|
|
61
69
|
this.name = 'StagedCommitmentAmbiguousError';
|
|
62
70
|
this.candidates = candidates;
|
|
63
71
|
}
|
|
@@ -80,10 +88,13 @@ export class StagedCommitmentAmbiguousError extends Error {
|
|
|
80
88
|
async function attributeStagedHash({ log, revokedUpdateKey, knownLatentHashes }) {
|
|
81
89
|
const revokedHash = await deriveNextKeyHash(revokedUpdateKey);
|
|
82
90
|
const params = effectiveParameters(log);
|
|
83
|
-
|
|
91
|
+
// Filtering the entry's own nextKeyHashes preserves its append order, which
|
|
92
|
+
// the positional fallback below relies on (decision 0007).
|
|
93
|
+
const orderedAdded = (index) => {
|
|
84
94
|
const previous = new Set(index > 0 ? params[index - 1].nextKeyHashes : []);
|
|
85
|
-
return
|
|
95
|
+
return params[index].nextKeyHashes.filter(hash => !previous.has(hash));
|
|
86
96
|
};
|
|
97
|
+
const added = (index) => new Set(orderedAdded(index));
|
|
87
98
|
const prune = (candidates) => {
|
|
88
99
|
candidates.delete(revokedHash);
|
|
89
100
|
for (const hash of knownLatentHashes) {
|
|
@@ -91,6 +102,23 @@ async function attributeStagedHash({ log, revokedUpdateKey, knownLatentHashes })
|
|
|
91
102
|
}
|
|
92
103
|
return candidates;
|
|
93
104
|
};
|
|
105
|
+
// The decision-0007 positional rule, applied only when the prune leaves more
|
|
106
|
+
// than one candidate: the staged hash is the addition immediately AFTER the
|
|
107
|
+
// revoked client's update-key hash in the entry's append order (the ladder's
|
|
108
|
+
// next-rung hash is last). Resolves undefined -- the ambiguity refusal
|
|
109
|
+
// stands -- when the update-key hash is not among the entry's additions, or
|
|
110
|
+
// its successor is not a surviving candidate.
|
|
111
|
+
const stagedByPosition = (index, candidates) => {
|
|
112
|
+
const additions = orderedAdded(index);
|
|
113
|
+
const anchor = additions.indexOf(revokedHash);
|
|
114
|
+
if (anchor === -1) {
|
|
115
|
+
return undefined;
|
|
116
|
+
}
|
|
117
|
+
const successor = additions[anchor + 1];
|
|
118
|
+
return successor !== undefined && candidates.has(successor)
|
|
119
|
+
? successor
|
|
120
|
+
: undefined;
|
|
121
|
+
};
|
|
94
122
|
// The entry where the revoked client's active key ENTERED updateKeys (the
|
|
95
123
|
// latest such, in case of anything odd).
|
|
96
124
|
let revealIndex = -1;
|
|
@@ -114,6 +142,10 @@ async function attributeStagedHash({ log, revokedUpdateKey, knownLatentHashes })
|
|
|
114
142
|
return [...atReveal][0];
|
|
115
143
|
}
|
|
116
144
|
if (atReveal.size > 1) {
|
|
145
|
+
const positional = stagedByPosition(revealIndex, atReveal);
|
|
146
|
+
if (positional !== undefined) {
|
|
147
|
+
return positional;
|
|
148
|
+
}
|
|
117
149
|
throw new StagedCommitmentAmbiguousError({ candidates: [...atReveal] });
|
|
118
150
|
}
|
|
119
151
|
// Fall back to the entry that COMMITTED the revoked key's own hash (an
|
|
@@ -133,6 +165,10 @@ async function attributeStagedHash({ log, revokedUpdateKey, knownLatentHashes })
|
|
|
133
165
|
}
|
|
134
166
|
const atCommit = prune(added(commitIndex));
|
|
135
167
|
if (atCommit.size > 1) {
|
|
168
|
+
const positional = stagedByPosition(commitIndex, atCommit);
|
|
169
|
+
if (positional !== undefined) {
|
|
170
|
+
return positional;
|
|
171
|
+
}
|
|
136
172
|
throw new StagedCommitmentAmbiguousError({ candidates: [...atCommit] });
|
|
137
173
|
}
|
|
138
174
|
return atCommit.size === 1 ? [...atCommit][0] : undefined;
|
|
@@ -201,6 +237,100 @@ async function currentRevokedUpdateKey({ published, revokedClient, vmPresent })
|
|
|
201
237
|
}
|
|
202
238
|
return attributed;
|
|
203
239
|
}
|
|
240
|
+
/**
|
|
241
|
+
* Computes what removing one enrolled client strikes from the published
|
|
242
|
+
* document and log (see {@link ClientRemovalTarget}). Pure read: nothing is
|
|
243
|
+
* published, and an absent client resolves with `present: false` rather than
|
|
244
|
+
* throwing (the idempotent no-op the callers fall through to).
|
|
245
|
+
*
|
|
246
|
+
* @param options {object}
|
|
247
|
+
* @param options.published {PublishedWebvhLog}
|
|
248
|
+
* @param options.client {RevokedClientKeys} the removed client's public
|
|
249
|
+
* halves; an `updateKeyMultibase` the log does not authorize (stale, or the
|
|
250
|
+
* client's staged key) is re-derived from the log
|
|
251
|
+
* @returns {Promise<ClientRemovalTarget>}
|
|
252
|
+
*/
|
|
253
|
+
export async function clientRemovalTarget({ published, client }) {
|
|
254
|
+
const { did, doc } = published;
|
|
255
|
+
const signingVmId = `${did}#${client.signingKeyMultibase}`;
|
|
256
|
+
// Every key-agreement method the removed client's controller marker claims,
|
|
257
|
+
// read off the document rather than paired from the caller's snapshot: a
|
|
258
|
+
// client that published more than one is fully removed, and a caller whose
|
|
259
|
+
// snapshot named a key the document never carried cannot leave a live
|
|
260
|
+
// method behind.
|
|
261
|
+
const keyAgreementVmIds = new Set(markedKeyAgreementMultibases({
|
|
262
|
+
doc,
|
|
263
|
+
signingKeyMultibase: client.signingKeyMultibase
|
|
264
|
+
}).map(multibase => `${did}#${multibase}`));
|
|
265
|
+
const existingMethods = (doc.verificationMethod ?? []);
|
|
266
|
+
const vmPresent = existingMethods.some(method => method.id === signingVmId ||
|
|
267
|
+
(method.id !== undefined && keyAgreementVmIds.has(method.id)));
|
|
268
|
+
// The key the log states for this client now, which a self-rotation since
|
|
269
|
+
// the caller's listing may have moved on.
|
|
270
|
+
const removedUpdateKey = await currentRevokedUpdateKey({
|
|
271
|
+
published,
|
|
272
|
+
revokedClient: client,
|
|
273
|
+
vmPresent
|
|
274
|
+
});
|
|
275
|
+
const removedHash = await deriveNextKeyHash(removedUpdateKey);
|
|
276
|
+
const keyPresent = published.updateKeys.includes(removedUpdateKey);
|
|
277
|
+
const hashPresent = published.nextKeyHashes.includes(removedHash);
|
|
278
|
+
return {
|
|
279
|
+
signingVmId,
|
|
280
|
+
keyAgreementVmIds,
|
|
281
|
+
vmPresent,
|
|
282
|
+
removedUpdateKey,
|
|
283
|
+
removedHash,
|
|
284
|
+
keyPresent,
|
|
285
|
+
hashPresent,
|
|
286
|
+
present: vmPresent || keyPresent || hashPresent
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Builds the removal entry's document and parameter fields from a computed
|
|
291
|
+
* target: the client's verification methods out of the document and all five
|
|
292
|
+
* relationship arrays, its update key out of `updateKeys`, and its carry-over
|
|
293
|
+
* and staged hashes out of `nextKeyHashes` (the staged hash recovered by log
|
|
294
|
+
* attribution -- see the module doc for why leaving it would be a re-seizure
|
|
295
|
+
* credential, and where the attribution is ambiguous). The caller supplies
|
|
296
|
+
* these to `updateDID` beside its own signer -- an enrolled client's update
|
|
297
|
+
* key for a revocation, a revealed ladder rung for a forget.
|
|
298
|
+
*
|
|
299
|
+
* @param options {object}
|
|
300
|
+
* @param options.published {PublishedWebvhLog}
|
|
301
|
+
* @param options.target {ClientRemovalTarget}
|
|
302
|
+
* @param [options.knownLatentHashes] {string[]} standing latent commitments
|
|
303
|
+
* the caller vouches for (the recovery registry's update-key hashes),
|
|
304
|
+
* excluded from the staged-hash attribution
|
|
305
|
+
* @returns {Promise<object>} the `updateDID` field bundle
|
|
306
|
+
*/
|
|
307
|
+
export async function clientRemovalFields({ published, target, knownLatentHashes = [] }) {
|
|
308
|
+
const { doc } = published;
|
|
309
|
+
const { signingVmId, keyAgreementVmIds, removedUpdateKey } = target;
|
|
310
|
+
// The removed client's staged commitment, recovered from the log while the
|
|
311
|
+
// log still shows the enrollment (attribution needs the standing entries,
|
|
312
|
+
// so this runs before the removal entry is built).
|
|
313
|
+
const stagedHash = target.keyPresent
|
|
314
|
+
? await attributeStagedHash({
|
|
315
|
+
log: published.log,
|
|
316
|
+
revokedUpdateKey: removedUpdateKey,
|
|
317
|
+
knownLatentHashes
|
|
318
|
+
})
|
|
319
|
+
: undefined;
|
|
320
|
+
const removedHashes = new Set([target.removedHash, stagedHash].filter((hash) => hash !== undefined));
|
|
321
|
+
const removedVmIds = new Set([signingVmId, ...keyAgreementVmIds]);
|
|
322
|
+
const existingMethods = (doc.verificationMethod ?? []);
|
|
323
|
+
return {
|
|
324
|
+
updateKeys: published.updateKeys.filter(key => key !== removedUpdateKey),
|
|
325
|
+
nextKeyHashes: published.nextKeyHashes.filter(hash => !removedHashes.has(hash)),
|
|
326
|
+
verificationMethods: existingMethods.filter(method => !method.id || !removedVmIds.has(method.id)),
|
|
327
|
+
authentication: relationIds(doc.authentication).filter(id => id !== signingVmId),
|
|
328
|
+
assertionMethod: relationIds(doc.assertionMethod).filter(id => id !== signingVmId),
|
|
329
|
+
keyAgreement: relationIds(doc.keyAgreement).filter(id => !keyAgreementVmIds.has(id)),
|
|
330
|
+
capabilityInvocation: relationIds(doc.capabilityInvocation).filter(id => id !== signingVmId),
|
|
331
|
+
capabilityDelegation: relationIds(doc.capabilityDelegation).filter(id => id !== signingVmId)
|
|
332
|
+
};
|
|
333
|
+
}
|
|
204
334
|
/**
|
|
205
335
|
* REVOCATION (run by another enrolled client, root authority): removes an
|
|
206
336
|
* enrolled wallet client from the published document -- its two verification
|
|
@@ -274,37 +404,14 @@ async function revokeWebvhClientOnce({ idStore, updateKeys, revokedClient, known
|
|
|
274
404
|
if (!published) {
|
|
275
405
|
throw new Error('did:webvh: did.jsonl is missing; nothing to revoke from.');
|
|
276
406
|
}
|
|
277
|
-
const {
|
|
278
|
-
const signingVmId = `${did}#${revokedClient.signingKeyMultibase}`;
|
|
279
|
-
// Every key-agreement method the revoked client's controller marker claims,
|
|
280
|
-
// read off the document rather than paired from the caller's snapshot: a
|
|
281
|
-
// client that published more than one is fully revoked, and a caller whose
|
|
282
|
-
// snapshot named a key the document never carried cannot leave a live
|
|
283
|
-
// method behind.
|
|
284
|
-
const keyAgreementVmIds = new Set(markedKeyAgreementMultibases({
|
|
285
|
-
doc,
|
|
286
|
-
signingKeyMultibase: revokedClient.signingKeyMultibase
|
|
287
|
-
}).map(multibase => `${did}#${multibase}`));
|
|
288
|
-
const existingMethods = (doc.verificationMethod ?? []);
|
|
289
|
-
const vmPresent = existingMethods.some(method => method.id === signingVmId ||
|
|
290
|
-
(method.id !== undefined && keyAgreementVmIds.has(method.id)));
|
|
291
|
-
// The key the log states for this client now, which a self-rotation since
|
|
292
|
-
// the caller's listing may have moved on.
|
|
293
|
-
const revokedUpdateKey = await currentRevokedUpdateKey({
|
|
294
|
-
published,
|
|
295
|
-
revokedClient,
|
|
296
|
-
vmPresent
|
|
297
|
-
});
|
|
407
|
+
const target = await clientRemovalTarget({ published, client: revokedClient });
|
|
298
408
|
const activeKey = await updateKeyMultibase({ seed: updateKeys.updateSeed });
|
|
299
|
-
if (
|
|
409
|
+
if (target.removedUpdateKey === activeKey ||
|
|
300
410
|
revokedClient.updateKeyMultibase === activeKey) {
|
|
301
411
|
throw new Error('did:webvh: a client cannot revoke itself; disconnect this client ' +
|
|
302
412
|
'from another enrolled client instead.');
|
|
303
413
|
}
|
|
304
|
-
|
|
305
|
-
const keyPresent = published.updateKeys.includes(revokedUpdateKey);
|
|
306
|
-
const hashPresent = published.nextKeyHashes.includes(revokedHash);
|
|
307
|
-
if (!vmPresent && !keyPresent && !hashPresent) {
|
|
414
|
+
if (!target.present) {
|
|
308
415
|
// Nothing left to remove, but a torn earlier publish can still have left
|
|
309
416
|
// did.json lagging the log.
|
|
310
417
|
const concluded = await concludeWithPublishedLog({ idStore, published });
|
|
@@ -315,31 +422,17 @@ async function revokeWebvhClientOnce({ idStore, updateKeys, revokedClient, known
|
|
|
315
422
|
'update key; finalize the pending rotation before revoking a client.');
|
|
316
423
|
}
|
|
317
424
|
await assertCarryOverCommitments({ published });
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
log: published.log,
|
|
324
|
-
revokedUpdateKey,
|
|
325
|
-
knownLatentHashes
|
|
326
|
-
})
|
|
327
|
-
: undefined;
|
|
328
|
-
const removedHashes = new Set([revokedHash, stagedHash].filter((hash) => hash !== undefined));
|
|
329
|
-
const removedVmIds = new Set([signingVmId, ...keyAgreementVmIds]);
|
|
425
|
+
const fields = await clientRemovalFields({
|
|
426
|
+
published,
|
|
427
|
+
target,
|
|
428
|
+
knownLatentHashes
|
|
429
|
+
});
|
|
330
430
|
const signer = await updateKeySigner({ seed: updateKeys.updateSeed });
|
|
331
431
|
const updated = await updateDID({
|
|
332
432
|
log: published.log,
|
|
333
433
|
signer,
|
|
334
434
|
alsoKnownAsWeb: true,
|
|
335
|
-
|
|
336
|
-
nextKeyHashes: published.nextKeyHashes.filter(hash => !removedHashes.has(hash)),
|
|
337
|
-
verificationMethods: existingMethods.filter(method => !method.id || !removedVmIds.has(method.id)),
|
|
338
|
-
authentication: relationIds(doc.authentication).filter(id => id !== signingVmId),
|
|
339
|
-
assertionMethod: relationIds(doc.assertionMethod).filter(id => id !== signingVmId),
|
|
340
|
-
keyAgreement: relationIds(doc.keyAgreement).filter(id => !keyAgreementVmIds.has(id)),
|
|
341
|
-
capabilityInvocation: relationIds(doc.capabilityInvocation).filter(id => id !== signingVmId),
|
|
342
|
-
capabilityDelegation: relationIds(doc.capabilityDelegation).filter(id => id !== signingVmId)
|
|
435
|
+
...fields
|
|
343
436
|
});
|
|
344
437
|
await publishUpdatedLog({ idStore, updated, ifMatch: published.etag });
|
|
345
438
|
return { did: updated.did, doc: updated.doc, log: updated.log };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"revokeClient.js","sourceRoot":"","sources":["../../src/webvh/revokeClient.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH
|
|
1
|
+
{"version":3,"file":"revokeClient.js","sourceRoot":"","sources":["../../src/webvh/revokeClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,13 +5,14 @@
|
|
|
5
5
|
* The house policy for standing recorded zcaps -- the long-lived delegations a
|
|
6
6
|
* wallet mints once and records beside a registry entry or inside a document
|
|
7
7
|
* (the recovery `did.jsonl` bridge, an unlock Space's management zcap, the
|
|
8
|
-
*
|
|
8
|
+
* client annex generation delegation): one shared lifetime, one renewal window,
|
|
9
9
|
* and the one staleness predicate every re-mint pass and login-time health
|
|
10
10
|
* check asks. A leaf file (no internal imports), so both the `webvh` and
|
|
11
11
|
* `recovery` layers can share it without a layering inversion; `recovery`
|
|
12
12
|
* re-exports the members that were born there, so its public surface is
|
|
13
13
|
* unchanged.
|
|
14
14
|
*/
|
|
15
|
+
import type { IZcap } from '@interop/data-integrity-core';
|
|
15
16
|
/**
|
|
16
17
|
* The standing zcap lifetime: one year, following NIST SP 800-57's
|
|
17
18
|
* one-to-two-year cryptoperiod guidance for private signature keys. A
|
|
@@ -45,4 +46,13 @@ export declare function zcapExpiring({ expires, now }: {
|
|
|
45
46
|
expires?: string;
|
|
46
47
|
now?: number;
|
|
47
48
|
}): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* The verification method that signed a delegation's proof -- recorded in the
|
|
51
|
+
* registry entry so the health check and the re-mint's rot check can test it
|
|
52
|
+
* against the current document without holding the code.
|
|
53
|
+
*
|
|
54
|
+
* @param delegation {IZcap}
|
|
55
|
+
* @returns {string | undefined}
|
|
56
|
+
*/
|
|
57
|
+
export declare function delegationProofKeyId(delegation: IZcap): string | undefined;
|
|
48
58
|
//# sourceMappingURL=standingZcap.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standingZcap.d.ts","sourceRoot":"","sources":["../../src/webvh/standingZcap.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"standingZcap.d.ts","sourceRoot":"","sources":["../../src/webvh/standingZcap.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAA;AAEzD;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,QAA4B,CAAA;AAE7D;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,QAA2B,CAAA;AAE9D;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,GAAgB,EACjB,EAAE;IACD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,GAAG,OAAO,CASV;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,KAAK,GAAG,MAAM,GAAG,SAAS,CAU1E"}
|
|
@@ -1,17 +1,3 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) 2026 Interop Alliance. All rights reserved.
|
|
3
|
-
*/
|
|
4
|
-
/**
|
|
5
|
-
* The house policy for standing recorded zcaps -- the long-lived delegations a
|
|
6
|
-
* wallet mints once and records beside a registry entry or inside a document
|
|
7
|
-
* (the recovery `did.jsonl` bridge, an unlock Space's management zcap, the
|
|
8
|
-
* companion generation delegation): one shared lifetime, one renewal window,
|
|
9
|
-
* and the one staleness predicate every re-mint pass and login-time health
|
|
10
|
-
* check asks. A leaf file (no internal imports), so both the `webvh` and
|
|
11
|
-
* `recovery` layers can share it without a layering inversion; `recovery`
|
|
12
|
-
* re-exports the members that were born there, so its public surface is
|
|
13
|
-
* unchanged.
|
|
14
|
-
*/
|
|
15
1
|
/**
|
|
16
2
|
* The standing zcap lifetime: one year, following NIST SP 800-57's
|
|
17
3
|
* one-to-two-year cryptoperiod guidance for private signature keys. A
|
|
@@ -51,4 +37,17 @@ export function zcapExpiring({ expires, now = Date.now() }) {
|
|
|
51
37
|
}
|
|
52
38
|
return expiresAt - now <= ZCAP_RENEWAL_WINDOW_MS;
|
|
53
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* The verification method that signed a delegation's proof -- recorded in the
|
|
42
|
+
* registry entry so the health check and the re-mint's rot check can test it
|
|
43
|
+
* against the current document without holding the code.
|
|
44
|
+
*
|
|
45
|
+
* @param delegation {IZcap}
|
|
46
|
+
* @returns {string | undefined}
|
|
47
|
+
*/
|
|
48
|
+
export function delegationProofKeyId(delegation) {
|
|
49
|
+
const { proof } = delegation;
|
|
50
|
+
const single = Array.isArray(proof) ? proof[0] : proof;
|
|
51
|
+
return single?.verificationMethod;
|
|
52
|
+
}
|
|
54
53
|
//# sourceMappingURL=standingZcap.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standingZcap.js","sourceRoot":"","sources":["../../src/webvh/standingZcap.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"standingZcap.js","sourceRoot":"","sources":["../../src/webvh/standingZcap.ts"],"names":[],"mappings":"AAgBA;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;AAE7D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;AAE9D;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,YAAY,CAAC,EAC3B,OAAO,EACP,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,EAIjB;IACC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAA;IACb,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IACrC,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,SAAS,GAAG,GAAG,IAAI,sBAAsB,CAAA;AAClD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,UAAiB;IACpD,MAAM,EAAE,KAAK,EAAE,GAAG,UAMjB,CAAA;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IACtD,OAAO,MAAM,EAAE,kBAAkB,CAAA;AACnC,CAAC"}
|
|
@@ -6,12 +6,12 @@
|
|
|
6
6
|
* account's identity collections as a {@link WebvhIdStore}, so every wallet
|
|
7
7
|
* app drives the log ceremonies through one implementation instead of its own
|
|
8
8
|
* copy. The log-resource half is parameterized over the collection holding
|
|
9
|
-
* `did.jsonl` ({@link wasWebvhLogStore}), so a
|
|
10
|
-
* a `gen-` collection in the auxiliary
|
|
9
|
+
* `did.jsonl` ({@link wasWebvhLogStore}), so a client-annex generation's log --
|
|
10
|
+
* a `gen-` collection in the auxiliary annex Space -- is served by the
|
|
11
11
|
* same implementation without touching the account-log paths.
|
|
12
12
|
*
|
|
13
13
|
* Collections here are addressed as plaintext: `id` holds published documents
|
|
14
|
-
* (world-readable by policy),
|
|
14
|
+
* (world-readable by policy), an annex generation's collection holds only
|
|
15
15
|
* its `did.jsonl` (capability-gated, but never encrypted -- the server
|
|
16
16
|
* resolves it out of its own storage), and `key-map` holds plain JSON, so
|
|
17
17
|
* none of them goes through the encryption codec.
|
|
@@ -26,32 +26,38 @@
|
|
|
26
26
|
* `conditional-writes` serves no ETag, and the publish degrades to an
|
|
27
27
|
* unconditional write.
|
|
28
28
|
*/
|
|
29
|
+
import type { IZcap } from '@interop/data-integrity-core';
|
|
29
30
|
import type { WasClient } from '@interop/was-client';
|
|
30
31
|
import type { WebvhIdStore } from './didWebvh.js';
|
|
31
32
|
/**
|
|
32
33
|
* The log-resource subset of the seam: what a ceremony that only reads and
|
|
33
34
|
* publishes a `did.jsonl` (and its sibling resources in the same collection)
|
|
34
|
-
* needs. The account store and the
|
|
35
|
+
* needs. The account store and the annex store both serve it.
|
|
35
36
|
*/
|
|
36
37
|
export type WebvhLogResourceStore = Pick<WebvhIdStore, 'getIdResourceRaw' | 'getIdResource' | 'putIdResource'>;
|
|
37
38
|
/**
|
|
38
39
|
* Builds the parameterized log-resource store over one collection of one
|
|
39
40
|
* Space: the shared implementation behind {@link wasWebvhIdStore} (the
|
|
40
|
-
* account's `id` collection) and
|
|
41
|
+
* account's `id` collection) and an annex generation's log store (its
|
|
41
42
|
* `gen-` collection in the auxiliary Space). Signing is whatever the wrapped
|
|
42
43
|
* client signs as -- controller-tier for the account paths, an enrolled
|
|
43
|
-
* client's key for the
|
|
44
|
+
* client's key for the annex.
|
|
44
45
|
*
|
|
45
46
|
* @param options {object}
|
|
46
47
|
* @param options.was {WasClient} the storage client to sign with
|
|
47
48
|
* @param options.spaceId {string} the Space holding the collection
|
|
48
49
|
* @param options.collectionId {string} the collection holding the log
|
|
50
|
+
* @param [options.capability] {IZcap} an invocation capability every request
|
|
51
|
+
* rides (a delegated writer -- e.g. the transient-recovery continuation over
|
|
52
|
+
* the credential's sibling delegation); absent, requests invoke the root
|
|
53
|
+
* capability as before
|
|
49
54
|
* @returns {WebvhLogResourceStore}
|
|
50
55
|
*/
|
|
51
|
-
export declare function wasWebvhLogStore({ was, spaceId, collectionId }: {
|
|
56
|
+
export declare function wasWebvhLogStore({ was, spaceId, collectionId, capability }: {
|
|
52
57
|
was: WasClient;
|
|
53
58
|
spaceId: string;
|
|
54
59
|
collectionId: string;
|
|
60
|
+
capability?: IZcap;
|
|
55
61
|
}): WebvhLogResourceStore;
|
|
56
62
|
/**
|
|
57
63
|
* Builds the `id`-collection store the account's did:webvh ceremonies read
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wasIdStore.d.ts","sourceRoot":"","sources":["../../src/webvh/wasIdStore.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAMpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAEjD;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAAG,IAAI,CACtC,YAAY,EACZ,kBAAkB,GAAG,eAAe,GAAG,eAAe,CACvD,CAAA;AAED
|
|
1
|
+
{"version":3,"file":"wasIdStore.d.ts","sourceRoot":"","sources":["../../src/webvh/wasIdStore.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAA;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAMpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAEjD;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAAG,IAAI,CACtC,YAAY,EACZ,kBAAkB,GAAG,eAAe,GAAG,eAAe,CACvD,CAAA;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,GAAG,EACH,OAAO,EACP,YAAY,EACZ,UAAU,EACX,EAAE;IACD,GAAG,EAAE,SAAS,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,KAAK,CAAA;CACnB,GAAG,qBAAqB,CA+CxB;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,EAC9B,GAAG,EACH,OAAO,EACR,EAAE;IACD,GAAG,EAAE,SAAS,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;CAChB,GAAG,YAAY,CAaf"}
|
package/dist/webvh/wasIdStore.js
CHANGED
|
@@ -2,20 +2,24 @@ import { DID_KEYS_RESOURCE, ID_COLLECTION, KEY_MAP_COLLECTION } from '../space/c
|
|
|
2
2
|
/**
|
|
3
3
|
* Builds the parameterized log-resource store over one collection of one
|
|
4
4
|
* Space: the shared implementation behind {@link wasWebvhIdStore} (the
|
|
5
|
-
* account's `id` collection) and
|
|
5
|
+
* account's `id` collection) and an annex generation's log store (its
|
|
6
6
|
* `gen-` collection in the auxiliary Space). Signing is whatever the wrapped
|
|
7
7
|
* client signs as -- controller-tier for the account paths, an enrolled
|
|
8
|
-
* client's key for the
|
|
8
|
+
* client's key for the annex.
|
|
9
9
|
*
|
|
10
10
|
* @param options {object}
|
|
11
11
|
* @param options.was {WasClient} the storage client to sign with
|
|
12
12
|
* @param options.spaceId {string} the Space holding the collection
|
|
13
13
|
* @param options.collectionId {string} the collection holding the log
|
|
14
|
+
* @param [options.capability] {IZcap} an invocation capability every request
|
|
15
|
+
* rides (a delegated writer -- e.g. the transient-recovery continuation over
|
|
16
|
+
* the credential's sibling delegation); absent, requests invoke the root
|
|
17
|
+
* capability as before
|
|
14
18
|
* @returns {WebvhLogResourceStore}
|
|
15
19
|
*/
|
|
16
|
-
export function wasWebvhLogStore({ was, spaceId, collectionId }) {
|
|
20
|
+
export function wasWebvhLogStore({ was, spaceId, collectionId, capability }) {
|
|
17
21
|
const resource = (resourceId) => was
|
|
18
|
-
.space(spaceId)
|
|
22
|
+
.space(spaceId, capability !== undefined ? { capability } : {})
|
|
19
23
|
.collection(collectionId, { encryption: 'plaintext' })
|
|
20
24
|
.resource(resourceId);
|
|
21
25
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wasIdStore.js","sourceRoot":"","sources":["../../src/webvh/wasIdStore.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wasIdStore.js","sourceRoot":"","sources":["../../src/webvh/wasIdStore.ts"],"names":[],"mappings":"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"}
|