@interop/did-cli 0.9.0 → 0.10.1

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.
Files changed (117) hide show
  1. package/CHANGELOG.md +149 -0
  2. package/README.md +192 -4
  3. package/dist/commands/collection-command.d.ts +169 -0
  4. package/dist/commands/collection-command.d.ts.map +1 -0
  5. package/dist/commands/collection-command.js +241 -0
  6. package/dist/commands/collection-command.js.map +1 -0
  7. package/dist/commands/did/create.d.ts +63 -0
  8. package/dist/commands/did/create.d.ts.map +1 -0
  9. package/dist/commands/did/create.js +625 -0
  10. package/dist/commands/did/create.js.map +1 -0
  11. package/dist/commands/did/manage.d.ts +68 -0
  12. package/dist/commands/did/manage.d.ts.map +1 -0
  13. package/dist/commands/did/manage.js +287 -0
  14. package/dist/commands/did/manage.js.map +1 -0
  15. package/dist/commands/did/service.d.ts +93 -0
  16. package/dist/commands/did/service.d.ts.map +1 -0
  17. package/dist/commands/did/service.js +324 -0
  18. package/dist/commands/did/service.js.map +1 -0
  19. package/dist/commands/did/webvh-update.d.ts +170 -0
  20. package/dist/commands/did/webvh-update.d.ts.map +1 -0
  21. package/dist/commands/did/webvh-update.js +402 -0
  22. package/dist/commands/did/webvh-update.js.map +1 -0
  23. package/dist/commands/did.d.ts +9 -0
  24. package/dist/commands/did.d.ts.map +1 -1
  25. package/dist/commands/did.js +107 -597
  26. package/dist/commands/did.js.map +1 -1
  27. package/dist/commands/edv.d.ts +15 -6
  28. package/dist/commands/edv.d.ts.map +1 -1
  29. package/dist/commands/edv.js +38 -28
  30. package/dist/commands/edv.js.map +1 -1
  31. package/dist/commands/key.d.ts +104 -0
  32. package/dist/commands/key.d.ts.map +1 -1
  33. package/dist/commands/key.js +432 -402
  34. package/dist/commands/key.js.map +1 -1
  35. package/dist/commands/vc.d.ts +2 -1
  36. package/dist/commands/vc.d.ts.map +1 -1
  37. package/dist/commands/vc.js +88 -145
  38. package/dist/commands/vc.js.map +1 -1
  39. package/dist/commands/was/collection.d.ts.map +1 -1
  40. package/dist/commands/was/collection.js +31 -85
  41. package/dist/commands/was/collection.js.map +1 -1
  42. package/dist/commands/was/publish.d.ts.map +1 -1
  43. package/dist/commands/was/publish.js +16 -44
  44. package/dist/commands/was/publish.js.map +1 -1
  45. package/dist/commands/was/resource.d.ts.map +1 -1
  46. package/dist/commands/was/resource.js +24 -51
  47. package/dist/commands/was/resource.js.map +1 -1
  48. package/dist/commands/was/shared.d.ts +78 -0
  49. package/dist/commands/was/shared.d.ts.map +1 -1
  50. package/dist/commands/was/shared.js +84 -0
  51. package/dist/commands/was/shared.js.map +1 -1
  52. package/dist/commands/was/space.d.ts +17 -0
  53. package/dist/commands/was/space.d.ts.map +1 -1
  54. package/dist/commands/was/space.js +47 -18
  55. package/dist/commands/was/space.js.map +1 -1
  56. package/dist/commands/was/tree.d.ts.map +1 -1
  57. package/dist/commands/was/tree.js +4 -6
  58. package/dist/commands/was/tree.js.map +1 -1
  59. package/dist/commands/was.d.ts +1 -1
  60. package/dist/commands/was.d.ts.map +1 -1
  61. package/dist/commands/was.js +71 -76
  62. package/dist/commands/was.js.map +1 -1
  63. package/dist/commands/zcap.d.ts +0 -18
  64. package/dist/commands/zcap.d.ts.map +1 -1
  65. package/dist/commands/zcap.js +63 -155
  66. package/dist/commands/zcap.js.map +1 -1
  67. package/dist/documentLoader.d.ts +5 -0
  68. package/dist/documentLoader.d.ts.map +1 -0
  69. package/dist/documentLoader.js +29 -0
  70. package/dist/documentLoader.js.map +1 -0
  71. package/dist/edv/hmac.d.ts.map +1 -1
  72. package/dist/edv/hmac.js +12 -12
  73. package/dist/edv/hmac.js.map +1 -1
  74. package/dist/edv/recipients.d.ts +2 -0
  75. package/dist/edv/recipients.d.ts.map +1 -1
  76. package/dist/edv/recipients.js +12 -15
  77. package/dist/edv/recipients.js.map +1 -1
  78. package/dist/keys/webvh-signer.d.ts +29 -0
  79. package/dist/keys/webvh-signer.d.ts.map +1 -0
  80. package/dist/keys/webvh-signer.js +44 -0
  81. package/dist/keys/webvh-signer.js.map +1 -0
  82. package/dist/keys/webvh-update.d.ts +33 -0
  83. package/dist/keys/webvh-update.d.ts.map +1 -0
  84. package/dist/keys/webvh-update.js +62 -0
  85. package/dist/keys/webvh-update.js.map +1 -0
  86. package/dist/meta.d.ts +36 -11
  87. package/dist/meta.d.ts.map +1 -1
  88. package/dist/meta.js +95 -73
  89. package/dist/meta.js.map +1 -1
  90. package/dist/storage.d.ts +122 -13
  91. package/dist/storage.d.ts.map +1 -1
  92. package/dist/storage.js +105 -13
  93. package/dist/storage.js.map +1 -1
  94. package/dist/vc/issue.d.ts.map +1 -1
  95. package/dist/vc/issue.js +4 -7
  96. package/dist/vc/issue.js.map +1 -1
  97. package/dist/vc/verify.d.ts +10 -0
  98. package/dist/vc/verify.d.ts.map +1 -1
  99. package/dist/vc/verify.js +38 -1
  100. package/dist/vc/verify.js.map +1 -1
  101. package/dist/was/client.d.ts.map +1 -1
  102. package/dist/was/client.js +8 -2
  103. package/dist/was/client.js.map +1 -1
  104. package/dist/was/grant.d.ts +44 -0
  105. package/dist/was/grant.d.ts.map +1 -0
  106. package/dist/was/grant.js +78 -0
  107. package/dist/was/grant.js.map +1 -0
  108. package/dist/was/registry.d.ts +2 -1
  109. package/dist/was/registry.d.ts.map +1 -1
  110. package/dist/was/registry.js +25 -7
  111. package/dist/was/registry.js.map +1 -1
  112. package/dist/zcap/delegate.d.ts.map +1 -1
  113. package/dist/zcap/delegate.js +1 -6
  114. package/dist/zcap/delegate.js.map +1 -1
  115. package/dist/zcap/signer.d.ts.map +1 -1
  116. package/dist/zcap/signer.js.map +1 -1
  117. package/package.json +8 -6
@@ -0,0 +1,324 @@
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';
11
+ import { resolveDidRef } from '../../meta.js';
12
+ import { webvhLogVerifier } from '../../documentLoader.js';
13
+ import { generateStagedKey } from '../../keys/webvh-update.js';
14
+ import { confirmAction, loadActiveSigner, loadStoredUpdateKeys, makeWebvhEntrySigner, persistUpdateKeysSidecar, resolveWebvhForUpdate, revealStagedSigner } from './webvh-update.js';
15
+ /**
16
+ * Expand a service id to a full DID URL. A bare fragment (`files`) or a
17
+ * leading-`#` fragment (`#files`) is resolved against the DID; a value that is
18
+ * already a full DID URL, or any absolute URI carrying a fragment, is returned
19
+ * unchanged.
20
+ *
21
+ * @param options {object}
22
+ * @param options.did {string}
23
+ * @param options.id {string}
24
+ * @returns {string}
25
+ */
26
+ export function normalizeServiceId({ did, id }) {
27
+ if (id.startsWith('#')) {
28
+ return `${did}${id}`;
29
+ }
30
+ if (id.startsWith('did:') || id.includes('#')) {
31
+ return id;
32
+ }
33
+ return `${did}#${id}`;
34
+ }
35
+ /**
36
+ * Build a service-endpoint entry from add-service options. Exactly one of
37
+ * `endpoint` (one or more endpoint values -- a single value stays a string,
38
+ * several become an array) or `endpointJson` (a raw JSON value) supplies the
39
+ * serviceEndpoint; a single `type` likewise stays a string.
40
+ *
41
+ * @param options {object}
42
+ * @param options.did {string}
43
+ * @param options.id {string}
44
+ * @param options.type {string[]}
45
+ * @param [options.endpoint] {string[]}
46
+ * @param [options.endpointJson] {string}
47
+ * @returns {ServiceEndpoint}
48
+ */
49
+ export function buildServiceEntry({ did, id, type, endpoint, endpointJson }) {
50
+ const hasEndpoint = Boolean(endpoint?.length);
51
+ const hasEndpointJson = Boolean(endpointJson);
52
+ // True when both are supplied or neither is -- i.e. not exactly one.
53
+ if (hasEndpoint === hasEndpointJson) {
54
+ throw new Error('Provide exactly one of --endpoint or --endpoint-json.');
55
+ }
56
+ let serviceEndpoint;
57
+ if (endpointJson) {
58
+ try {
59
+ serviceEndpoint = JSON.parse(endpointJson);
60
+ }
61
+ catch {
62
+ throw new Error('--endpoint-json must be valid JSON.');
63
+ }
64
+ }
65
+ else {
66
+ serviceEndpoint = endpoint.length === 1 ? endpoint[0] : endpoint;
67
+ }
68
+ return {
69
+ id: normalizeServiceId({ did, id }),
70
+ type: type.length === 1 ? type[0] : type,
71
+ serviceEndpoint
72
+ };
73
+ }
74
+ /**
75
+ * Whether a stored service entry has the given (already-normalized, absolute)
76
+ * id. Service ids in a DID document may be relative (`#files`) or absolute, so
77
+ * the stored id is normalized against the DID before comparing.
78
+ *
79
+ * @param options {object}
80
+ * @param options.service {ServiceEndpoint}
81
+ * @param options.id {string} the normalized id to match.
82
+ * @param options.did {string}
83
+ * @returns {boolean}
84
+ */
85
+ function serviceHasId({ service, id, did }) {
86
+ return (service.id !== undefined &&
87
+ normalizeServiceId({ did, id: service.id }) === id);
88
+ }
89
+ /**
90
+ * Append a service entry to the current array, rejecting a duplicate id.
91
+ *
92
+ * @param options {object}
93
+ * @param options.current {ServiceEndpoint[]}
94
+ * @param options.entry {ServiceEndpoint} its `id` is already normalized.
95
+ * @param options.did {string}
96
+ * @returns {ServiceEndpoint[]}
97
+ */
98
+ export function addServiceEntry({ current, entry, did }) {
99
+ if (current.some(service => serviceHasId({ service, id: entry.id, did }))) {
100
+ throw new Error(`A service with id "${entry.id}" already exists.`);
101
+ }
102
+ return [...current, entry];
103
+ }
104
+ /**
105
+ * Remove the service entry with the given (normalized) id, rejecting a missing
106
+ * id.
107
+ *
108
+ * @param options {object}
109
+ * @param options.current {ServiceEndpoint[]}
110
+ * @param options.id {string} the normalized id to remove.
111
+ * @param options.did {string}
112
+ * @returns {ServiceEndpoint[]}
113
+ */
114
+ export function removeServiceEntry({ current, id, did }) {
115
+ const next = current.filter(service => !serviceHasId({ service, id, did }));
116
+ if (next.length === current.length) {
117
+ throw new Error(`No service with id "${id}" found on the DID document.`);
118
+ }
119
+ return next;
120
+ }
121
+ /**
122
+ * Apply a service-array transform to a locally stored did:web document and
123
+ * re-save it. did:web has no history log, so this is a direct document edit;
124
+ * the `service` property is dropped entirely when the array empties out.
125
+ *
126
+ * @param options {object}
127
+ * @param options.did {string}
128
+ * @param options.transform {(current: ServiceEndpoint[], did: string) => ServiceEndpoint[]}
129
+ * @returns {Promise<number>} the process exit code
130
+ */
131
+ async function runWebServiceUpdate({ did, transform }) {
132
+ let didDocument;
133
+ try {
134
+ didDocument = await loadDidDocument(did);
135
+ }
136
+ catch {
137
+ console.error(`No locally stored did:web found for ${did}`);
138
+ return 1;
139
+ }
140
+ const current = Array.isArray(didDocument.service)
141
+ ? didDocument.service
142
+ : [];
143
+ let next;
144
+ try {
145
+ next = transform(current, did);
146
+ }
147
+ catch (err) {
148
+ console.error(err.message);
149
+ return 1;
150
+ }
151
+ if (next.length > 0) {
152
+ didDocument.service = next;
153
+ }
154
+ else {
155
+ delete didDocument.service;
156
+ }
157
+ const docPath = await saveToDids({ method: 'web', did, data: didDocument });
158
+ console.error(`DID saved to ${docPath}`);
159
+ console.log(JSON.stringify({ id: didDocument.id, didDocument }, null, 2));
160
+ return 0;
161
+ }
162
+ /**
163
+ * Apply a service-array transform to a locally stored did:webvh DID by
164
+ * appending a sparse log entry that overlays only the `service` array. Update
165
+ * keys and document verification methods are carried forward unchanged -- with
166
+ * one exception: a pre-rotation-armed DID cannot author a key-neutral update
167
+ * (the library requires the staged key to sign), so the update-key ratchet is
168
+ * advanced as part of the change -- the staged key is revealed to sign and a
169
+ * fresh next key is staged.
170
+ *
171
+ * @param options {object}
172
+ * @param options.targetDid {string} the resolved did:webvh DID.
173
+ * @param options.transform {(current: ServiceEndpoint[], did: string) => ServiceEndpoint[]}
174
+ * @param [options.yes] {boolean} skip the confirmation prompt.
175
+ * @param [options.keepOldKey] {boolean} retain the retired update key secret
176
+ * (pre-rotation path only; default is to drop it).
177
+ * @returns {Promise<number>} the process exit code
178
+ */
179
+ async function runWebvhServiceUpdate({ targetDid, transform, yes, keepOldKey }) {
180
+ let log;
181
+ let doc;
182
+ let meta;
183
+ try {
184
+ ;
185
+ ({ log, doc, meta } = await resolveWebvhForUpdate({
186
+ targetDid,
187
+ action: 'update services'
188
+ }));
189
+ }
190
+ catch (err) {
191
+ console.error(err.message);
192
+ return 1;
193
+ }
194
+ // Compute the new service array from the current resolved document.
195
+ const current = Array.isArray(doc?.service) ? doc.service : [];
196
+ let services;
197
+ try {
198
+ services = transform(current, targetDid);
199
+ }
200
+ catch (err) {
201
+ console.error(err.message);
202
+ return 1;
203
+ }
204
+ const stored = await loadStoredUpdateKeys(targetDid);
205
+ // Choose the signer and key parameters. A sparse update normally omits
206
+ // updateKeys/nextKeyHashes so the keys carry forward untouched; a
207
+ // pre-rotation DID instead must reveal its staged key (which signs) and stage
208
+ // a fresh one in the same entry.
209
+ let signerKeyPair;
210
+ let updateKeys;
211
+ let nextKeyHashes;
212
+ let newActive;
213
+ let newStaged;
214
+ let retiredActive;
215
+ try {
216
+ if (meta.prerotation) {
217
+ ;
218
+ ({ signerKeyPair, newActive, retiredActive } = await revealStagedSigner({
219
+ stored,
220
+ meta,
221
+ targetDid,
222
+ action: 'update services'
223
+ }));
224
+ newStaged = await generateStagedKey();
225
+ updateKeys = [newActive.publicKeyMultibase];
226
+ nextKeyHashes = [newStaged.nextKeyHash];
227
+ }
228
+ else {
229
+ ;
230
+ ({ signerKeyPair } = await loadActiveSigner({
231
+ stored,
232
+ meta,
233
+ targetDid,
234
+ action: 'update services'
235
+ }));
236
+ }
237
+ }
238
+ catch (err) {
239
+ console.error(err.message);
240
+ return 1;
241
+ }
242
+ const confirmed = await confirmAction({
243
+ message: `Update the services of ${targetDid}? This appends a new log entry ` +
244
+ 'and is hard to undo.',
245
+ yes
246
+ });
247
+ if (!confirmed) {
248
+ console.error('Aborted.');
249
+ return 0;
250
+ }
251
+ const signer = makeWebvhEntrySigner(signerKeyPair);
252
+ let result;
253
+ try {
254
+ result = await updateDID({
255
+ log,
256
+ signer,
257
+ verifier: webvhLogVerifier,
258
+ services,
259
+ ...(updateKeys ? { updateKeys } : {}),
260
+ ...(nextKeyHashes ? { nextKeyHashes } : {})
261
+ });
262
+ }
263
+ catch (err) {
264
+ console.error(`Service update failed: ${err.message}`);
265
+ return 1;
266
+ }
267
+ const logPath = await saveDidLog({ did: result.did, log: result.log });
268
+ const docPath = await saveToDids({
269
+ method: 'webvh',
270
+ did: result.did,
271
+ data: result.doc
272
+ });
273
+ // Persist the advanced ratchet only on the pre-rotation path; an ordinary
274
+ // service update leaves the update-keys sidecar untouched.
275
+ if (meta.prerotation && newActive) {
276
+ const updateKeysPath = await persistUpdateKeysSidecar({
277
+ did: result.did,
278
+ newActive,
279
+ newStaged,
280
+ retiredActive,
281
+ stored,
282
+ keepOldKey
283
+ });
284
+ console.error(`Update keys saved to ${updateKeysPath}`);
285
+ console.error('Pre-rotation: the update key was advanced as part of this change.');
286
+ }
287
+ console.error(`DID document saved to ${docPath}`);
288
+ console.error(`DID history log saved to ${logPath}`);
289
+ console.log(JSON.stringify({ id: result.did, didDocument: result.doc }, null, 2));
290
+ return 0;
291
+ }
292
+ /**
293
+ * Resolve a DID reference, then route a service-array transform to the right
294
+ * per-method runner and return its exit code. did:web is a direct document
295
+ * edit; did:webvh appends a log entry.
296
+ *
297
+ * @param options {object}
298
+ * @param options.ref {string} a DID or a local metadata handle.
299
+ * @param options.transform {(current: ServiceEndpoint[], did: string) => ServiceEndpoint[]}
300
+ * @param [options.yes] {boolean} skip the did:webvh confirmation prompt.
301
+ * @param [options.keepOldKey] {boolean} did:webvh pre-rotation path only.
302
+ * @returns {Promise<number>} the process exit code
303
+ */
304
+ export async function dispatchServiceUpdate({ ref, transform, yes, keepOldKey }) {
305
+ let resolved;
306
+ try {
307
+ resolved = await resolveDidRef({ ref });
308
+ }
309
+ catch (err) {
310
+ console.error(err.message);
311
+ return 1;
312
+ }
313
+ const did = resolved ?? ref;
314
+ if (did.startsWith('did:web:')) {
315
+ return runWebServiceUpdate({ did, transform });
316
+ }
317
+ if (did.startsWith('did:webvh:')) {
318
+ return runWebvhServiceUpdate({ targetDid: did, transform, yes, keepOldKey });
319
+ }
320
+ console.error('add-service/remove-service are only supported for did:web and ' +
321
+ 'did:webvh DIDs');
322
+ return 1;
323
+ }
324
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/commands/did/service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,170 @@
1
+ import { resolveDIDFromLog, type DIDLog } from '@interop/did-method-webvh';
2
+ import { Ed25519VerificationKey } from '@interop/ed25519-verification-key';
3
+ import { type WebvhUpdateKey, type WebvhUpdateKeys } from '../../storage.js';
4
+ /**
5
+ * Parse a raw did:webvh history log (newline-delimited JSON) into the entry
6
+ * array the library's resolver/updater expect, ignoring blank lines.
7
+ *
8
+ * @param logText {string}
9
+ * @returns {DIDLog}
10
+ */
11
+ export declare function parseDidLog(logText: string): DIDLog;
12
+ /**
13
+ * Ask the user to confirm a hard-to-undo action. Returns true immediately when
14
+ * `--yes` was passed or when stdin is not an interactive TTY (so scripts and
15
+ * tests are not blocked); otherwise prompts and requires an explicit `y`.
16
+ *
17
+ * @param options {object}
18
+ * @param options.message {string}
19
+ * @param options.yes {boolean} the value of the `--yes` flag.
20
+ * @returns {Promise<boolean>}
21
+ */
22
+ export declare function confirmAction({ message, yes }: {
23
+ message: string;
24
+ yes?: boolean;
25
+ }): Promise<boolean>;
26
+ /**
27
+ * Load and resolve a locally stored did:webvh history log in preparation for an
28
+ * update, asserting it is updatable. The log is the source of truth for a
29
+ * stored did:webvh, so its absence is what "not locally stored" means.
30
+ *
31
+ * @param options {object}
32
+ * @param options.targetDid {string} the resolved did:webvh DID.
33
+ * @param options.action {string} verb used in error messages (e.g.
34
+ * `rotate keys`, `update services`).
35
+ * @returns {Promise<{ log, doc, meta }>}
36
+ * @throws {Error} with a user-facing message if the log is missing, fails to
37
+ * resolve, or the DID is deactivated.
38
+ */
39
+ export declare function resolveWebvhForUpdate({ targetDid, action }: {
40
+ targetDid: string;
41
+ action: string;
42
+ }): Promise<{
43
+ log: DIDLog;
44
+ doc: Awaited<ReturnType<typeof resolveDIDFromLog>>['doc'];
45
+ meta: Awaited<ReturnType<typeof resolveDIDFromLog>>['meta'];
46
+ }>;
47
+ /**
48
+ * Resolve a locally stored did:webvh DID from its history log (`.jsonl`) -- the
49
+ * source of truth for the current document and its accumulated parameters.
50
+ * Unlike `resolveWebvhForUpdate` this does not reject a deactivated DID, since
51
+ * `show` should still display it; it returns `undefined` when no log is stored
52
+ * so the caller can fall back to the stored document snapshot.
53
+ *
54
+ * @param did {string} the resolved did:webvh DID.
55
+ * @returns {Promise<{ doc, meta } | undefined>}
56
+ * @throws {Error} if a log exists but fails to resolve/verify.
57
+ */
58
+ export declare function resolveStoredWebvh(did: string): Promise<{
59
+ doc: Awaited<ReturnType<typeof resolveDIDFromLog>>['doc'];
60
+ meta: Awaited<ReturnType<typeof resolveDIDFromLog>>['meta'];
61
+ } | undefined>;
62
+ /**
63
+ * Load a did:webvh DID's update-keys sidecar, treating an absent file as
64
+ * `undefined` (no stored secrets) rather than an error.
65
+ *
66
+ * @param did {string}
67
+ * @returns {Promise<WebvhUpdateKeys | undefined>}
68
+ */
69
+ export declare function loadStoredUpdateKeys(did: string): Promise<WebvhUpdateKeys | undefined>;
70
+ /**
71
+ * Pre-rotation reveal: validate and load the staged (pre-committed) update key
72
+ * 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.
74
+ *
75
+ * @param options {object}
76
+ * @param options.stored {WebvhUpdateKeys | undefined} the update-keys sidecar.
77
+ * @param options.meta {Awaited<ReturnType<typeof resolveDIDFromLog>>['meta']}
78
+ * @param options.targetDid {string}
79
+ * @param options.action {string} verb used in error messages.
80
+ * @returns {Promise<{ signerKeyPair, newActive, retiredActive }>}
81
+ * @throws {Error} if the staged secret is missing or has diverged from the
82
+ * log's committed nextKeyHashes.
83
+ */
84
+ export declare function revealStagedSigner({ stored, meta, targetDid, action }: {
85
+ stored: WebvhUpdateKeys | undefined;
86
+ meta: Awaited<ReturnType<typeof resolveDIDFromLog>>['meta'];
87
+ targetDid: string;
88
+ action: string;
89
+ }): Promise<{
90
+ signerKeyPair: Ed25519VerificationKey;
91
+ newActive: WebvhUpdateKey;
92
+ retiredActive: WebvhUpdateKey;
93
+ }>;
94
+ /**
95
+ * 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.
97
+ *
98
+ * @param options {object}
99
+ * @param options.stored {WebvhUpdateKeys | undefined} the update-keys sidecar.
100
+ * @param options.meta {Awaited<ReturnType<typeof resolveDIDFromLog>>['meta']}
101
+ * @param options.targetDid {string}
102
+ * @param options.action {string} verb used in error messages.
103
+ * @returns {Promise<{ signerKeyPair, activeRecord }>}
104
+ * @throws {Error} if the active secret is missing or no longer matches the
105
+ * log's updateKeys.
106
+ */
107
+ export declare function loadActiveSigner({ stored, meta, targetDid, action }: {
108
+ stored: WebvhUpdateKeys | undefined;
109
+ meta: Awaited<ReturnType<typeof resolveDIDFromLog>>['meta'];
110
+ targetDid: string;
111
+ action: string;
112
+ }): Promise<{
113
+ signerKeyPair: Ed25519VerificationKey;
114
+ activeRecord: WebvhUpdateKey;
115
+ }>;
116
+ /**
117
+ * Build the entry signer for a did:webvh update from an update key pair.
118
+ *
119
+ * @param keyPair {Ed25519VerificationKey} mutated: its `id` is set in place.
120
+ * @returns the signer to pass to `updateDID`.
121
+ */
122
+ export declare function makeWebvhEntrySigner(keyPair: Ed25519VerificationKey): import("@interop/did-method-webvh").Signer<import("@interop/did-method-webvh").SignableDocument> & import("@interop/did-method-webvh").Verifier;
123
+ /**
124
+ * Write the update-keys sidecar: the active key, the staged next key (or
125
+ * none), and any retired secrets. At creation there is no prior sidecar; after
126
+ * an advance/rotation the superseded active key is appended to `retired` only
127
+ * when `keepOldKey` asks to preserve it.
128
+ *
129
+ * @param options {object}
130
+ * @param options.did {string}
131
+ * @param options.newActive {WebvhUpdateKey}
132
+ * @param [options.newStaged] {WebvhUpdateKey & { nextKeyHash: string }}
133
+ * @param [options.retiredActive] {WebvhUpdateKey} the superseded active key.
134
+ * @param [options.stored] {WebvhUpdateKeys} the prior sidecar, if any.
135
+ * @param [options.keepOldKey] {boolean} retain the retired secret.
136
+ * @returns {Promise<string>} the saved sidecar path.
137
+ */
138
+ export declare function persistUpdateKeysSidecar({ did, newActive, newStaged, retiredActive, stored, keepOldKey }: {
139
+ did: string;
140
+ newActive: WebvhUpdateKey;
141
+ newStaged?: WebvhUpdateKey & {
142
+ nextKeyHash: string;
143
+ };
144
+ retiredActive?: WebvhUpdateKey;
145
+ stored?: WebvhUpdateKeys;
146
+ keepOldKey?: boolean;
147
+ }): Promise<string>;
148
+ /**
149
+ * Rotate the update (authorization) key of a locally stored did:webvh DID. By
150
+ * default advances key pre-rotation -- reveals the staged next key and stages a
151
+ * fresh one -- and never touches the document verification methods.
152
+ *
153
+ * @param options {object}
154
+ * @param options.didRef {string} The DID or metadata handle.
155
+ * @param [options.updateKey] {string[]} Rotate to specific update key(s).
156
+ * @param [options.enablePrerotation] {boolean} Turn pre-rotation on.
157
+ * @param [options.stopPrerotation] {boolean} Turn pre-rotation off.
158
+ * @param [options.keepOldKey] {boolean} Retain the retired update key secret.
159
+ * @param [options.yes] {boolean} Skip the confirmation prompt.
160
+ * @returns {Promise<number>} The process exit code.
161
+ */
162
+ export declare function runRotateKeys(options: {
163
+ didRef: string;
164
+ updateKey?: string[];
165
+ enablePrerotation?: boolean;
166
+ stopPrerotation?: boolean;
167
+ keepOldKey?: boolean;
168
+ yes?: boolean;
169
+ }): Promise<number>;
170
+ //# sourceMappingURL=webvh-update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webvh-update.d.ts","sourceRoot":"","sources":["../../../src/commands/did/webvh-update.ts"],"names":[],"mappings":"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"}