@interop/did-cli 0.13.0 → 0.14.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/CHANGELOG.md +117 -6
- package/README.md +157 -17
- package/dist/commands/did/create.d.ts +22 -0
- package/dist/commands/did/create.d.ts.map +1 -1
- package/dist/commands/did/create.js +6 -27
- package/dist/commands/did/create.js.map +1 -1
- package/dist/commands/did/service.d.ts +19 -4
- package/dist/commands/did/service.d.ts.map +1 -1
- package/dist/commands/did/service.js +46 -45
- package/dist/commands/did/service.js.map +1 -1
- package/dist/commands/did/webvh-update.d.ts +72 -9
- package/dist/commands/did/webvh-update.d.ts.map +1 -1
- package/dist/commands/did/webvh-update.js +177 -61
- package/dist/commands/did/webvh-update.js.map +1 -1
- package/dist/commands/did.d.ts.map +1 -1
- package/dist/commands/did.js +10 -1
- package/dist/commands/did.js.map +1 -1
- package/dist/commands/key.d.ts.map +1 -1
- package/dist/commands/key.js +5 -8
- package/dist/commands/key.js.map +1 -1
- package/dist/commands/was/request-grant.d.ts +37 -0
- package/dist/commands/was/request-grant.d.ts.map +1 -0
- package/dist/commands/was/request-grant.js +248 -0
- package/dist/commands/was/request-grant.js.map +1 -0
- package/dist/commands/was/resource.d.ts +21 -7
- package/dist/commands/was/resource.d.ts.map +1 -1
- package/dist/commands/was/resource.js +40 -15
- package/dist/commands/was/resource.js.map +1 -1
- package/dist/commands/was/shared.d.ts +43 -3
- package/dist/commands/was/shared.d.ts.map +1 -1
- package/dist/commands/was/shared.js +82 -4
- package/dist/commands/was/shared.js.map +1 -1
- package/dist/commands/was/shell/completer.d.ts +24 -0
- package/dist/commands/was/shell/completer.d.ts.map +1 -0
- package/dist/commands/was/shell/completer.js +99 -0
- package/dist/commands/was/shell/completer.js.map +1 -0
- package/dist/commands/was/shell/dispatcher.d.ts +27 -0
- package/dist/commands/was/shell/dispatcher.d.ts.map +1 -0
- package/dist/commands/was/shell/dispatcher.js +227 -0
- package/dist/commands/was/shell/dispatcher.js.map +1 -0
- package/dist/commands/was/shell/session.d.ts +37 -0
- package/dist/commands/was/shell/session.d.ts.map +1 -0
- package/dist/commands/was/shell/session.js +67 -0
- package/dist/commands/was/shell/session.js.map +1 -0
- package/dist/commands/was/shell/tokenize.d.ts +19 -0
- package/dist/commands/was/shell/tokenize.d.ts.map +1 -0
- package/dist/commands/was/shell/tokenize.js +77 -0
- package/dist/commands/was/shell/tokenize.js.map +1 -0
- package/dist/commands/was/shell.d.ts +30 -0
- package/dist/commands/was/shell.d.ts.map +1 -0
- package/dist/commands/was/shell.js +170 -0
- package/dist/commands/was/shell.js.map +1 -0
- package/dist/commands/was/tree.d.ts +6 -1
- package/dist/commands/was/tree.d.ts.map +1 -1
- package/dist/commands/was/tree.js +12 -5
- package/dist/commands/was/tree.js.map +1 -1
- package/dist/commands/was.d.ts.map +1 -1
- package/dist/commands/was.js +31 -1
- package/dist/commands/was.js.map +1 -1
- package/dist/keys/seed.d.ts +21 -0
- package/dist/keys/seed.d.ts.map +1 -0
- package/dist/keys/seed.js +41 -0
- package/dist/keys/seed.js.map +1 -0
- package/dist/keys/webvh-signer.d.ts +18 -13
- package/dist/keys/webvh-signer.d.ts.map +1 -1
- package/dist/keys/webvh-signer.js +5 -20
- package/dist/keys/webvh-signer.js.map +1 -1
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +57 -10
- package/dist/storage.js.map +1 -1
- package/dist/was/address.d.ts +24 -0
- package/dist/was/address.d.ts.map +1 -1
- package/dist/was/address.js +49 -3
- package/dist/was/address.js.map +1 -1
- package/dist/was/request-grant.d.ts +144 -0
- package/dist/was/request-grant.d.ts.map +1 -0
- package/dist/was/request-grant.js +249 -0
- package/dist/was/request-grant.js.map +1 -0
- package/package.json +22 -20
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/commands/did/service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,2BAA2B,CAAA;
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/commands/did/service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,2BAA2B,CAAA;AAqBlC;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,GAAG,EACH,EAAE,EACH,EAAE;IACD,GAAG,EAAE,MAAM,CAAA;IACX,EAAE,EAAE,MAAM,CAAA;CACX,GAAG,MAAM,CAQT;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,QAAQ,EACR,YAAY,EACb,EAAE;IACD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,GAAG,eAAe,CAAC,iBAAiB,CAAC,CAerC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,GAAG,EACH,EAAE,EACF,IAAI,EACJ,QAAQ,EACR,YAAY,EACb,EAAE;IACD,GAAG,EAAE,MAAM,CAAA;IACX,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,GAAG,eAAe,CAMlB;AA4BD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,EAC9B,OAAO,EACP,KAAK,EACL,GAAG,EACJ,EAAE;IACD,OAAO,EAAE,eAAe,EAAE,CAAA;IAC1B,KAAK,EAAE,eAAe,CAAA;IACtB,GAAG,EAAE,MAAM,CAAA;CACZ,GAAG,eAAe,EAAE,CAKpB;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,OAAO,EACP,EAAE,EACF,GAAG,EACJ,EAAE;IACD,OAAO,EAAE,eAAe,EAAE,CAAA;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,GAAG,EAAE,MAAM,CAAA;CACZ,GAAG,eAAe,EAAE,CAMpB;AAgMD;;;;;;;;;;;GAWG;AACH,wBAAsB,qBAAqB,CAAC,EAC1C,GAAG,EACH,SAAS,EACT,GAAG,EACH,UAAU,EACX,EAAE;IACD,GAAG,EAAE,MAAM,CAAA;IACX,SAAS,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,EAAE,GAAG,EAAE,MAAM,KAAK,eAAe,EAAE,CAAA;IACzE,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,GAAG,OAAO,CAAC,MAAM,CAAC,CAoBlB"}
|
|
@@ -1,16 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
* Service-entry management for did:web and did:webvh DIDs. Builds and edits the
|
|
3
|
-
* `service` array (add/remove by id, with id normalization) and routes a
|
|
4
|
-
* service-array transform to the right per-method runner: did:web is a direct
|
|
5
|
-
* document edit, did:webvh appends a sparse log entry (advancing the
|
|
6
|
-
* pre-rotation ratchet when one is armed). The webvh log machinery is reused
|
|
7
|
-
* from `./webvh-update.js`.
|
|
8
|
-
*/
|
|
9
|
-
import { updateDID } from '@interop/did-method-webvh';
|
|
10
|
-
import { loadDidDocument, saveDidLog, saveToDids } from '../../storage.js';
|
|
1
|
+
import { loadDidDocument, saveToDids } from '../../storage.js';
|
|
11
2
|
import { resolveDidRef } from '../../meta.js';
|
|
12
3
|
import { generateStagedKey } from '../../keys/webvh-update.js';
|
|
13
|
-
import { confirmAction, loadActiveSigner, loadStoredUpdateKeys, makeWebvhEntrySigner,
|
|
4
|
+
import { appendWebvhEntry, confirmAction, loadActiveSigner, loadStoredUpdateKeys, makeWebvhEntrySigner, persistWebvhUpdate, resolveWebvhForUpdate, revealStagedSigner } from './webvh-update.js';
|
|
14
5
|
/**
|
|
15
6
|
* Expand a service id to a full DID URL. A bare fragment (`files`) or a
|
|
16
7
|
* leading-`#` fragment (`#files`) is resolved against the DID; a value that is
|
|
@@ -32,42 +23,52 @@ export function normalizeServiceId({ did, id }) {
|
|
|
32
23
|
return `${did}#${id}`;
|
|
33
24
|
}
|
|
34
25
|
/**
|
|
35
|
-
* Build
|
|
36
|
-
* `endpoint` (one or more endpoint values -- a single value
|
|
37
|
-
* several become an array) or `endpointJson` (a raw JSON
|
|
38
|
-
*
|
|
26
|
+
* Build (and validate) the serviceEndpoint value from add-service options.
|
|
27
|
+
* Exactly one of `endpoint` (one or more endpoint values -- a single value
|
|
28
|
+
* stays a string, several become an array) or `endpointJson` (a raw JSON
|
|
29
|
+
* value) must supply it. Needs no DID, so the CLI layer calls it up front to
|
|
30
|
+
* reject bad arguments before any (expensive) log resolution.
|
|
39
31
|
*
|
|
40
32
|
* @param options {object}
|
|
41
|
-
* @param options.did {string}
|
|
42
|
-
* @param options.id {string}
|
|
43
|
-
* @param options.type {string[]}
|
|
44
33
|
* @param [options.endpoint] {string[]}
|
|
45
34
|
* @param [options.endpointJson] {string}
|
|
46
|
-
* @returns {ServiceEndpoint}
|
|
35
|
+
* @returns {ServiceEndpoint['serviceEndpoint']}
|
|
47
36
|
*/
|
|
48
|
-
export function
|
|
37
|
+
export function buildServiceEndpoint({ endpoint, endpointJson }) {
|
|
49
38
|
const hasEndpoint = Boolean(endpoint?.length);
|
|
50
39
|
const hasEndpointJson = Boolean(endpointJson);
|
|
51
40
|
// True when both are supplied or neither is -- i.e. not exactly one.
|
|
52
41
|
if (hasEndpoint === hasEndpointJson) {
|
|
53
42
|
throw new Error('Provide exactly one of --endpoint or --endpoint-json.');
|
|
54
43
|
}
|
|
55
|
-
let serviceEndpoint;
|
|
56
44
|
if (endpointJson) {
|
|
57
45
|
try {
|
|
58
|
-
|
|
46
|
+
return JSON.parse(endpointJson);
|
|
59
47
|
}
|
|
60
48
|
catch {
|
|
61
49
|
throw new Error('--endpoint-json must be valid JSON.');
|
|
62
50
|
}
|
|
63
51
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
52
|
+
return endpoint.length === 1 ? endpoint[0] : endpoint;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Build a service-endpoint entry from add-service options (see
|
|
56
|
+
* `buildServiceEndpoint` for the serviceEndpoint rules); a single `type`
|
|
57
|
+
* stays a string.
|
|
58
|
+
*
|
|
59
|
+
* @param options {object}
|
|
60
|
+
* @param options.did {string}
|
|
61
|
+
* @param options.id {string}
|
|
62
|
+
* @param options.type {string[]}
|
|
63
|
+
* @param [options.endpoint] {string[]}
|
|
64
|
+
* @param [options.endpointJson] {string}
|
|
65
|
+
* @returns {ServiceEndpoint}
|
|
66
|
+
*/
|
|
67
|
+
export function buildServiceEntry({ did, id, type, endpoint, endpointJson }) {
|
|
67
68
|
return {
|
|
68
69
|
id: normalizeServiceId({ did, id }),
|
|
69
70
|
type: type.length === 1 ? type[0] : type,
|
|
70
|
-
serviceEndpoint
|
|
71
|
+
serviceEndpoint: buildServiceEndpoint({ endpoint, endpointJson })
|
|
71
72
|
};
|
|
72
73
|
}
|
|
73
74
|
/**
|
|
@@ -200,7 +201,14 @@ async function runWebvhServiceUpdate({ targetDid, transform, yes, keepOldKey })
|
|
|
200
201
|
console.error(err.message);
|
|
201
202
|
return 1;
|
|
202
203
|
}
|
|
203
|
-
|
|
204
|
+
let stored;
|
|
205
|
+
try {
|
|
206
|
+
stored = await loadStoredUpdateKeys(targetDid);
|
|
207
|
+
}
|
|
208
|
+
catch (err) {
|
|
209
|
+
console.error(err.message);
|
|
210
|
+
return 1;
|
|
211
|
+
}
|
|
204
212
|
// Choose the signer and key parameters. A sparse update normally omits
|
|
205
213
|
// updateKeys/nextKeyHashes so the keys carry forward untouched; a
|
|
206
214
|
// pre-rotation DID instead must reveal its staged key (which signs) and stage
|
|
@@ -245,13 +253,14 @@ async function runWebvhServiceUpdate({ targetDid, transform, yes, keepOldKey })
|
|
|
245
253
|
});
|
|
246
254
|
if (!confirmed) {
|
|
247
255
|
console.error('Aborted.');
|
|
248
|
-
return
|
|
256
|
+
return 1;
|
|
249
257
|
}
|
|
250
258
|
const signer = makeWebvhEntrySigner(signerKeyPair);
|
|
251
259
|
let result;
|
|
252
260
|
try {
|
|
253
|
-
result = await
|
|
261
|
+
result = await appendWebvhEntry({
|
|
254
262
|
log,
|
|
263
|
+
meta,
|
|
255
264
|
signer,
|
|
256
265
|
services,
|
|
257
266
|
...(updateKeys ? { updateKeys } : {}),
|
|
@@ -262,23 +271,15 @@ async function runWebvhServiceUpdate({ targetDid, transform, yes, keepOldKey })
|
|
|
262
271
|
console.error(`Service update failed: ${err.message}`);
|
|
263
272
|
return 1;
|
|
264
273
|
}
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
274
|
+
// The advanced ratchet is persisted only on the pre-rotation path; an
|
|
275
|
+
// ordinary service update leaves the update-keys sidecar untouched.
|
|
276
|
+
const { logPath, docPath, updateKeysPath } = await persistWebvhUpdate({
|
|
277
|
+
result,
|
|
278
|
+
sidecar: meta.prerotation && newActive
|
|
279
|
+
? { newActive, newStaged, retiredActive, stored, keepOldKey }
|
|
280
|
+
: undefined
|
|
270
281
|
});
|
|
271
|
-
|
|
272
|
-
// service update leaves the update-keys sidecar untouched.
|
|
273
|
-
if (meta.prerotation && newActive) {
|
|
274
|
-
const updateKeysPath = await persistUpdateKeysSidecar({
|
|
275
|
-
did: result.did,
|
|
276
|
-
newActive,
|
|
277
|
-
newStaged,
|
|
278
|
-
retiredActive,
|
|
279
|
-
stored,
|
|
280
|
-
keepOldKey
|
|
281
|
-
});
|
|
282
|
+
if (updateKeysPath !== undefined) {
|
|
282
283
|
console.error(`Update keys saved to ${updateKeysPath}`);
|
|
283
284
|
console.error('Pre-rotation: the update key was advanced as part of this change.');
|
|
284
285
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/commands/did/service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/commands/did/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { resolveDIDFromLog, type DIDLog } from '@interop/did-method-webvh';
|
|
1
|
+
import { resolveDIDFromLog, updateDID, type DIDLog } from '@interop/did-method-webvh';
|
|
2
2
|
import { Ed25519VerificationKey } from '@interop/ed25519-verification-key';
|
|
3
3
|
import { type WebvhUpdateKey, type WebvhUpdateKeys } from '../../storage.js';
|
|
4
4
|
/**
|
|
@@ -11,8 +11,10 @@ import { type WebvhUpdateKey, type WebvhUpdateKeys } from '../../storage.js';
|
|
|
11
11
|
export declare function parseDidLog(logText: string): DIDLog;
|
|
12
12
|
/**
|
|
13
13
|
* Ask the user to confirm a hard-to-undo action. Returns true immediately when
|
|
14
|
-
* `--yes` was passed
|
|
15
|
-
*
|
|
14
|
+
* `--yes` was passed. When stdin is not an interactive TTY the question cannot
|
|
15
|
+
* be asked, so the action is refused (with a hint to pass `--yes`) rather than
|
|
16
|
+
* silently confirmed -- a script or cron job must opt in explicitly. Otherwise
|
|
17
|
+
* prompts and requires an explicit `y`.
|
|
16
18
|
*
|
|
17
19
|
* @param options {object}
|
|
18
20
|
* @param options.message {string}
|
|
@@ -70,7 +72,12 @@ export declare function loadStoredUpdateKeys(did: string): Promise<WebvhUpdateKe
|
|
|
70
72
|
/**
|
|
71
73
|
* Pre-rotation reveal: validate and load the staged (pre-committed) update key
|
|
72
74
|
* that must sign this entry, returning the signer key pair plus the records
|
|
73
|
-
* that make it the new active key and retire the current one.
|
|
75
|
+
* that make it the new active key and retire the current one. As a recovery
|
|
76
|
+
* path, when the staged record does not match the log's commitment but the
|
|
77
|
+
* sidecar's `active` record does (an earlier rotation wrote the sidecar and
|
|
78
|
+
* was then interrupted before the log write), the active record is revealed
|
|
79
|
+
* instead; `retiredActive` is undefined in that case, since the active record
|
|
80
|
+
* is not superseded.
|
|
74
81
|
*
|
|
75
82
|
* @param options {object}
|
|
76
83
|
* @param options.stored {WebvhUpdateKeys | undefined} the update-keys sidecar.
|
|
@@ -89,11 +96,15 @@ export declare function revealStagedSigner({ stored, meta, targetDid, action }:
|
|
|
89
96
|
}): Promise<{
|
|
90
97
|
signerKeyPair: Ed25519VerificationKey;
|
|
91
98
|
newActive: WebvhUpdateKey;
|
|
92
|
-
retiredActive
|
|
99
|
+
retiredActive?: WebvhUpdateKey;
|
|
93
100
|
}>;
|
|
94
101
|
/**
|
|
95
102
|
* Ordinary (non-pre-rotation) signer: the current active update key signs.
|
|
96
|
-
* Returns the signer key pair and the active record it was loaded from.
|
|
103
|
+
* Returns the signer key pair and the active record it was loaded from. When
|
|
104
|
+
* the `active` record does not match the log's updateKeys, the staged and
|
|
105
|
+
* retired records are searched as a recovery path: an interrupted rotation
|
|
106
|
+
* can leave the sidecar one step ahead of (or behind) the log, and the secret
|
|
107
|
+
* authorized by the log may then live in one of those records.
|
|
97
108
|
*
|
|
98
109
|
* @param options {object}
|
|
99
110
|
* @param options.stored {WebvhUpdateKeys | undefined} the update-keys sidecar.
|
|
@@ -101,8 +112,7 @@ export declare function revealStagedSigner({ stored, meta, targetDid, action }:
|
|
|
101
112
|
* @param options.targetDid {string}
|
|
102
113
|
* @param options.action {string} verb used in error messages.
|
|
103
114
|
* @returns {Promise<{ signerKeyPair, activeRecord }>}
|
|
104
|
-
* @throws {Error} if
|
|
105
|
-
* log's updateKeys.
|
|
115
|
+
* @throws {Error} if no stored secret matches the log's updateKeys.
|
|
106
116
|
*/
|
|
107
117
|
export declare function loadActiveSigner({ stored, meta, targetDid, action }: {
|
|
108
118
|
stored: WebvhUpdateKeys | undefined;
|
|
@@ -116,10 +126,63 @@ export declare function loadActiveSigner({ stored, meta, targetDid, action }: {
|
|
|
116
126
|
/**
|
|
117
127
|
* Build the entry signer for a did:webvh update from an update key pair.
|
|
118
128
|
*
|
|
119
|
-
* @param keyPair {Ed25519VerificationKey}
|
|
129
|
+
* @param keyPair {Ed25519VerificationKey}
|
|
120
130
|
* @returns the signer to pass to `updateDID`.
|
|
121
131
|
*/
|
|
122
132
|
export declare function makeWebvhEntrySigner(keyPair: Ed25519VerificationKey): import("@interop/did-method-webvh").Signer<import("@interop/did-method-webvh").SignableDocument>;
|
|
133
|
+
/**
|
|
134
|
+
* Append a signed entry to a did:webvh history log via the library's
|
|
135
|
+
* `updateDID`, passing the already-resolved `meta` as `priorMeta` to skip its
|
|
136
|
+
* internal re-resolution (a full re-verification of every log entry). The
|
|
137
|
+
* library trusts `priorMeta` blindly, so it must describe this exact log's
|
|
138
|
+
* head; that pairing is asserted here (an O(1) check) before signing, so a
|
|
139
|
+
* future edit that reloads or truncates the log cannot sign a forked entry.
|
|
140
|
+
*
|
|
141
|
+
* @param options {object}
|
|
142
|
+
* @param options.meta {Awaited<ReturnType<typeof resolveDIDFromLog>>['meta']}
|
|
143
|
+
* the metadata resolved from this same log (e.g. by
|
|
144
|
+
* `resolveWebvhForUpdate`).
|
|
145
|
+
* @param options.log {DIDLog}
|
|
146
|
+
* @param options.signer the entry signer (see `makeWebvhEntrySigner`).
|
|
147
|
+
* @returns {Promise<Awaited<ReturnType<typeof updateDID>>>}
|
|
148
|
+
* @throws {Error} if `meta` does not match the log head.
|
|
149
|
+
*/
|
|
150
|
+
export declare function appendWebvhEntry({ meta, ...update }: Omit<Parameters<typeof updateDID>[0], 'priorMeta'> & {
|
|
151
|
+
meta: Awaited<ReturnType<typeof resolveDIDFromLog>>['meta'];
|
|
152
|
+
}): Promise<Awaited<ReturnType<typeof updateDID>>>;
|
|
153
|
+
/**
|
|
154
|
+
* Persist the artifacts of a signed did:webvh update in a crash-safe order:
|
|
155
|
+
* the update-keys sidecar first -- retaining the superseded secret regardless
|
|
156
|
+
* of `keepOldKey`, so that every key authorized by either the old or the new
|
|
157
|
+
* log head has its secret on disk -- then the log and document, then the
|
|
158
|
+
* sidecar again in its final shape when the retained secret should be
|
|
159
|
+
* dropped. An interruption at any point leaves a state the signer loaders
|
|
160
|
+
* (`loadActiveSigner`, `revealStagedSigner`) can recover from; the reverse
|
|
161
|
+
* order could commit a log whose only authorized secret was never persisted.
|
|
162
|
+
*
|
|
163
|
+
* @param options {object}
|
|
164
|
+
* @param options.result {Awaited<ReturnType<typeof updateDID>>}
|
|
165
|
+
* @param [options.sidecar] {object} update-keys sidecar changes, if any:
|
|
166
|
+
* the `persistUpdateKeysSidecar` arguments minus `did`.
|
|
167
|
+
* @returns {Promise<{ logPath, docPath, updateKeysPath }>} the saved paths;
|
|
168
|
+
* `updateKeysPath` is undefined when no sidecar change was requested.
|
|
169
|
+
*/
|
|
170
|
+
export declare function persistWebvhUpdate({ result, sidecar }: {
|
|
171
|
+
result: Awaited<ReturnType<typeof updateDID>>;
|
|
172
|
+
sidecar?: {
|
|
173
|
+
newActive: WebvhUpdateKey;
|
|
174
|
+
newStaged?: WebvhUpdateKey & {
|
|
175
|
+
nextKeyHash: string;
|
|
176
|
+
};
|
|
177
|
+
retiredActive?: WebvhUpdateKey;
|
|
178
|
+
stored?: WebvhUpdateKeys;
|
|
179
|
+
keepOldKey?: boolean;
|
|
180
|
+
};
|
|
181
|
+
}): Promise<{
|
|
182
|
+
logPath: string;
|
|
183
|
+
docPath: string;
|
|
184
|
+
updateKeysPath?: string;
|
|
185
|
+
}>;
|
|
123
186
|
/**
|
|
124
187
|
* Write the update-keys sidecar: the active key, the staged next key (or
|
|
125
188
|
* none), and any retired secrets. At creation there is no prior sidecar; after
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webvh-update.d.ts","sourceRoot":"","sources":["../../../src/commands/did/webvh-update.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"webvh-update.d.ts","sourceRoot":"","sources":["../../../src/commands/did/webvh-update.ts"],"names":[],"mappings":"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"}
|