@interop/did-cli 0.10.0 → 0.12.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.
Files changed (129) hide show
  1. package/CHANGELOG.md +113 -0
  2. package/README.md +184 -35
  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 +624 -0
  10. package/dist/commands/did/create.js.map +1 -0
  11. package/dist/commands/did/manage.d.ts +69 -0
  12. package/dist/commands/did/manage.d.ts.map +1 -0
  13. package/dist/commands/did/manage.js +322 -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 +322 -0
  18. package/dist/commands/did/service.js.map +1 -0
  19. package/dist/commands/did/webvh-update.d.ts +172 -0
  20. package/dist/commands/did/webvh-update.d.ts.map +1 -0
  21. package/dist/commands/did/webvh-update.js +438 -0
  22. package/dist/commands/did/webvh-update.js.map +1 -0
  23. package/dist/commands/did.d.ts +8 -8
  24. package/dist/commands/did.d.ts.map +1 -1
  25. package/dist/commands/did.js +31 -1519
  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 +83 -6
  49. package/dist/commands/was/shared.d.ts.map +1 -1
  50. package/dist/commands/was/shared.js +104 -1
  51. package/dist/commands/was/shared.js.map +1 -1
  52. package/dist/commands/was/space.d.ts.map +1 -1
  53. package/dist/commands/was/space.js +10 -16
  54. package/dist/commands/was/space.js.map +1 -1
  55. package/dist/commands/was/tree.d.ts.map +1 -1
  56. package/dist/commands/was/tree.js +4 -6
  57. package/dist/commands/was/tree.js.map +1 -1
  58. package/dist/commands/was.d.ts.map +1 -1
  59. package/dist/commands/was.js +60 -74
  60. package/dist/commands/was.js.map +1 -1
  61. package/dist/commands/zcap.d.ts +0 -18
  62. package/dist/commands/zcap.d.ts.map +1 -1
  63. package/dist/commands/zcap.js +63 -155
  64. package/dist/commands/zcap.js.map +1 -1
  65. package/dist/documentLoader.d.ts +3 -0
  66. package/dist/documentLoader.d.ts.map +1 -0
  67. package/dist/documentLoader.js +26 -0
  68. package/dist/documentLoader.js.map +1 -0
  69. package/dist/edv/core.d.ts +5 -4
  70. package/dist/edv/core.d.ts.map +1 -1
  71. package/dist/edv/core.js +22 -19
  72. package/dist/edv/core.js.map +1 -1
  73. package/dist/edv/hmac.d.ts.map +1 -1
  74. package/dist/edv/hmac.js +12 -12
  75. package/dist/edv/hmac.js.map +1 -1
  76. package/dist/edv/recipients.d.ts +2 -0
  77. package/dist/edv/recipients.d.ts.map +1 -1
  78. package/dist/edv/recipients.js +12 -15
  79. package/dist/edv/recipients.js.map +1 -1
  80. package/dist/keys/webvh-signer.d.ts +4 -10
  81. package/dist/keys/webvh-signer.d.ts.map +1 -1
  82. package/dist/keys/webvh-signer.js +10 -14
  83. package/dist/keys/webvh-signer.js.map +1 -1
  84. package/dist/keys/webvh-update.d.ts +6 -1
  85. package/dist/keys/webvh-update.d.ts.map +1 -1
  86. package/dist/keys/webvh-update.js +5 -2
  87. package/dist/keys/webvh-update.js.map +1 -1
  88. package/dist/meta.d.ts +36 -11
  89. package/dist/meta.d.ts.map +1 -1
  90. package/dist/meta.js +95 -73
  91. package/dist/meta.js.map +1 -1
  92. package/dist/storage.d.ts +65 -13
  93. package/dist/storage.d.ts.map +1 -1
  94. package/dist/storage.js +75 -17
  95. package/dist/storage.js.map +1 -1
  96. package/dist/vc/issue.d.ts.map +1 -1
  97. package/dist/vc/issue.js +4 -7
  98. package/dist/vc/issue.js.map +1 -1
  99. package/dist/vc/suites/expirationSuite.d.ts.map +1 -1
  100. package/dist/vc/suites/expirationSuite.js.map +1 -1
  101. package/dist/vc/suites/issuerDetailsSuite.d.ts.map +1 -1
  102. package/dist/vc/suites/issuerDetailsSuite.js.map +1 -1
  103. package/dist/vc/verify.d.ts +10 -0
  104. package/dist/vc/verify.d.ts.map +1 -1
  105. package/dist/vc/verify.js +38 -1
  106. package/dist/vc/verify.js.map +1 -1
  107. package/dist/was/client.d.ts.map +1 -1
  108. package/dist/was/client.js +8 -2
  109. package/dist/was/client.js.map +1 -1
  110. package/dist/was/grant.d.ts +44 -0
  111. package/dist/was/grant.d.ts.map +1 -0
  112. package/dist/was/grant.js +78 -0
  113. package/dist/was/grant.js.map +1 -0
  114. package/dist/was/io.d.ts +2 -2
  115. package/dist/was/io.d.ts.map +1 -1
  116. package/dist/was/io.js +1 -1
  117. package/dist/was/registry.d.ts.map +1 -1
  118. package/dist/was/registry.js +9 -2
  119. package/dist/was/registry.js.map +1 -1
  120. package/dist/zcap/delegate.d.ts.map +1 -1
  121. package/dist/zcap/delegate.js +1 -6
  122. package/dist/zcap/delegate.js.map +1 -1
  123. package/dist/zcap/signer.d.ts.map +1 -1
  124. package/dist/zcap/signer.js.map +1 -1
  125. package/package.json +20 -19
  126. package/dist/keys/webvh-driver.d.ts +0 -24
  127. package/dist/keys/webvh-driver.d.ts.map +0 -1
  128. package/dist/keys/webvh-driver.js +0 -73
  129. package/dist/keys/webvh-driver.js.map +0 -1
package/dist/meta.js CHANGED
@@ -115,6 +115,40 @@ export async function removeKeyDidAssociation({ publicKeyMultibase, did }) {
115
115
  meta: updated
116
116
  });
117
117
  }
118
+ /**
119
+ * Resolve a metadata handle to a single storage id by scanning the `.meta.json`
120
+ * sidecars of a set of items. This is the shared core of every `resolve*Ref`
121
+ * helper: the direct id/fingerprint match stays in each caller, and this
122
+ * collapses the "scan handles, collect matches, complain on ambiguity" tail.
123
+ * Returns undefined when no handle matches; throws when more than one does
124
+ * (handles are not unique).
125
+ *
126
+ * @param options {object}
127
+ * @param options.ref {string} The handle to match.
128
+ * @param options.noun {string} Plural noun for the ambiguity message (e.g. `zcaps`).
129
+ * @param options.alternative {string} The unambiguous identifier to suggest instead.
130
+ * @param options.storageIds {string[]} The storage ids to scan.
131
+ * @param options.loadMeta {(storageId: string) => Promise<MetaType | undefined>}
132
+ * Loads the metadata sidecar for a storage id.
133
+ * @returns {Promise<{storageId: string, meta: MetaType} | undefined>}
134
+ */
135
+ export async function resolveByHandle({ ref, noun, alternative, storageIds, loadMeta }) {
136
+ const matches = [];
137
+ for (const storageId of storageIds) {
138
+ const meta = await loadMeta(storageId);
139
+ if (meta?.handle === ref) {
140
+ matches.push({ storageId, meta });
141
+ }
142
+ }
143
+ if (matches.length === 0) {
144
+ return undefined;
145
+ }
146
+ if (matches.length > 1) {
147
+ throw new Error(`Handle "${ref}" matches ${matches.length} ${noun}; ` +
148
+ `use the ${alternative} instead.`);
149
+ }
150
+ return matches[0];
151
+ }
118
152
  /**
119
153
  * Resolve a user-supplied DID reference -- a full DID or a metadata handle --
120
154
  * to a stored DID. Anything starting with `did:` is returned as-is; otherwise
@@ -130,22 +164,14 @@ export async function resolveDidRef({ ref }) {
130
164
  if (ref.startsWith('did:')) {
131
165
  return ref;
132
166
  }
133
- const dids = await listDids();
134
- const matches = [];
135
- for (const did of dids) {
136
- const meta = await loadDidMeta({ did });
137
- if (meta?.handle === ref) {
138
- matches.push(did);
139
- }
140
- }
141
- if (matches.length === 0) {
142
- return undefined;
143
- }
144
- if (matches.length > 1) {
145
- throw new Error(`Handle "${ref}" matches ${matches.length} DIDs; ` +
146
- 'use the full DID instead.');
147
- }
148
- return matches[0];
167
+ const match = await resolveByHandle({
168
+ ref,
169
+ noun: 'DIDs',
170
+ alternative: 'full DID',
171
+ storageIds: await listDids(),
172
+ loadMeta: did => loadDidMeta({ did })
173
+ });
174
+ return match?.storageId;
149
175
  }
150
176
  /**
151
177
  * Resolve a user-supplied zcap reference -- a capability id (the `urn:...`
@@ -156,12 +182,15 @@ export async function resolveDidRef({ ref }) {
156
182
  *
157
183
  * @param options {object}
158
184
  * @param options.ref {string}
159
- * @returns {Promise<{storageId: string, zcap: StoredZcap, meta?: KeyMetadata} | undefined>}
185
+ * @returns {Promise<{storageId: string, zcap: StoredZcap, meta?: ItemMetadata} | undefined>}
160
186
  */
161
187
  export async function resolveZcapRef({ ref }) {
162
188
  const storageIds = await listCollection('zcaps');
163
189
  for (const storageId of storageIds) {
164
- const zcap = await loadFromCollection('zcaps', storageId);
190
+ const zcap = await loadFromCollection({
191
+ collection: 'zcaps',
192
+ storageId
193
+ });
165
194
  if (zcap.id === ref) {
166
195
  const meta = await loadMetaFromCollection({
167
196
  collection: 'zcaps',
@@ -170,26 +199,21 @@ export async function resolveZcapRef({ ref }) {
170
199
  return { storageId, zcap, meta };
171
200
  }
172
201
  }
173
- const matches = [];
174
- for (const storageId of storageIds) {
175
- const meta = await loadMetaFromCollection({
176
- collection: 'zcaps',
177
- storageId
178
- });
179
- if (meta?.handle === ref) {
180
- matches.push({ storageId, meta });
181
- }
182
- }
183
- if (matches.length === 0) {
202
+ const match = await resolveByHandle({
203
+ ref,
204
+ noun: 'zcaps',
205
+ alternative: 'capability id',
206
+ storageIds,
207
+ loadMeta: storageId => loadMetaFromCollection({ collection: 'zcaps', storageId })
208
+ });
209
+ if (!match) {
184
210
  return undefined;
185
211
  }
186
- if (matches.length > 1) {
187
- throw new Error(`Handle "${ref}" matches ${matches.length} zcaps; ` +
188
- 'use the capability id instead.');
189
- }
190
- const { storageId, meta } = matches[0];
191
- const zcap = await loadFromCollection('zcaps', storageId);
192
- return { storageId, zcap, meta };
212
+ const zcap = await loadFromCollection({
213
+ collection: 'zcaps',
214
+ storageId: match.storageId
215
+ });
216
+ return { storageId: match.storageId, zcap, meta: match.meta };
193
217
  }
194
218
  /**
195
219
  * Resolve a user-supplied credential reference -- a credential id, a storage
@@ -201,12 +225,15 @@ export async function resolveZcapRef({ ref }) {
201
225
  *
202
226
  * @param options {object}
203
227
  * @param options.ref {string}
204
- * @returns {Promise<{storageId: string, credential: StoredCredential, meta?: KeyMetadata} | undefined>}
228
+ * @returns {Promise<{storageId: string, credential: StoredCredential, meta?: ItemMetadata} | undefined>}
205
229
  */
206
230
  export async function resolveCredentialRef({ ref }) {
207
231
  const storageIds = await listCollection('credentials');
208
232
  for (const storageId of storageIds) {
209
- const credential = await loadFromCollection('credentials', storageId);
233
+ const credential = await loadFromCollection({
234
+ collection: 'credentials',
235
+ storageId
236
+ });
210
237
  if (credential.id === ref) {
211
238
  const meta = await loadMetaFromCollection({
212
239
  collection: 'credentials',
@@ -216,33 +243,31 @@ export async function resolveCredentialRef({ ref }) {
216
243
  }
217
244
  }
218
245
  if (storageIds.includes(ref)) {
219
- const credential = await loadFromCollection('credentials', ref);
220
- const meta = await loadMetaFromCollection({
246
+ const credential = await loadFromCollection({
221
247
  collection: 'credentials',
222
248
  storageId: ref
223
249
  });
224
- return { storageId: ref, credential, meta };
225
- }
226
- const matches = [];
227
- for (const storageId of storageIds) {
228
250
  const meta = await loadMetaFromCollection({
229
251
  collection: 'credentials',
230
- storageId
252
+ storageId: ref
231
253
  });
232
- if (meta?.handle === ref) {
233
- matches.push({ storageId, meta });
234
- }
254
+ return { storageId: ref, credential, meta };
235
255
  }
236
- if (matches.length === 0) {
256
+ const match = await resolveByHandle({
257
+ ref,
258
+ noun: 'credentials',
259
+ alternative: 'credential id',
260
+ storageIds,
261
+ loadMeta: storageId => loadMetaFromCollection({ collection: 'credentials', storageId })
262
+ });
263
+ if (!match) {
237
264
  return undefined;
238
265
  }
239
- if (matches.length > 1) {
240
- throw new Error(`Handle "${ref}" matches ${matches.length} credentials; ` +
241
- 'use the credential id instead.');
242
- }
243
- const { storageId, meta } = matches[0];
244
- const credential = await loadFromCollection('credentials', storageId);
245
- return { storageId, credential, meta };
266
+ const credential = await loadFromCollection({
267
+ collection: 'credentials',
268
+ storageId: match.storageId
269
+ });
270
+ return { storageId: match.storageId, credential, meta: match.meta };
246
271
  }
247
272
  /**
248
273
  * Resolve a user-supplied key reference -- a publicKeyMultibase fingerprint
@@ -253,7 +278,7 @@ export async function resolveCredentialRef({ ref }) {
253
278
  *
254
279
  * @param options {object}
255
280
  * @param options.ref {string}
256
- * @returns {Promise<{storageId: string, key: object, meta?: KeyMetadata} | undefined>}
281
+ * @returns {Promise<{storageId: string, key: StoredKeyPair, meta?: KeyMetadata} | undefined>}
257
282
  */
258
283
  export async function resolveKeyRef({ ref }) {
259
284
  const byFingerprint = await findStoredKey({ fingerprint: ref });
@@ -264,23 +289,20 @@ export async function resolveKeyRef({ ref }) {
264
289
  });
265
290
  return { ...byFingerprint, meta };
266
291
  }
267
- const storageIds = await listCollection('keys');
268
- const matches = [];
269
- for (const storageId of storageIds) {
270
- const meta = await loadMetaFromCollection({ collection: 'keys', storageId });
271
- if (meta?.handle === ref) {
272
- matches.push({ storageId, meta });
273
- }
274
- }
275
- if (matches.length === 0) {
292
+ const match = await resolveByHandle({
293
+ ref,
294
+ noun: 'keys',
295
+ alternative: 'publicKeyMultibase fingerprint',
296
+ storageIds: await listCollection('keys'),
297
+ loadMeta: storageId => loadMetaFromCollection({ collection: 'keys', storageId })
298
+ });
299
+ if (!match) {
276
300
  return undefined;
277
301
  }
278
- if (matches.length > 1) {
279
- throw new Error(`Handle "${ref}" matches ${matches.length} keys; ` +
280
- 'use the publicKeyMultibase fingerprint instead.');
281
- }
282
- const { storageId, meta } = matches[0];
283
- const key = await loadFromCollection('keys', storageId);
284
- return { storageId, key, meta };
302
+ const key = await loadFromCollection({
303
+ collection: 'keys',
304
+ storageId: match.storageId
305
+ });
306
+ return { storageId: match.storageId, key, meta: match.meta };
285
307
  }
286
308
  //# sourceMappingURL=meta.js.map
package/dist/meta.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"meta.js","sourceRoot":"","sources":["../src/meta.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"meta.js","sourceRoot":"","sources":["../src/meta.ts"],"names":[],"mappings":"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"}
package/dist/storage.d.ts CHANGED
@@ -28,6 +28,19 @@ export interface ItemMetadata {
28
28
  export interface KeyMetadata extends ItemMetadata {
29
29
  dids?: string[];
30
30
  }
31
+ /**
32
+ * The shape of an exported key pair saved in a `<did>.keys.json` file (a DID
33
+ * signing key) or a wallet `keys/` collection item. Only `id` is always
34
+ * present: `controller`/`type` are absent from some exports, and the
35
+ * `publicKeyMultibase`/`secretKeyMultibase` pair is absent for a symmetric key.
36
+ */
37
+ export interface StoredKeyPair {
38
+ id: string;
39
+ controller?: string;
40
+ type?: string;
41
+ publicKeyMultibase?: string;
42
+ secretKeyMultibase?: string;
43
+ }
31
44
  /**
32
45
  * List the storage IDs of all items saved in a wallet collection.
33
46
  *
@@ -43,24 +56,41 @@ export declare function listCollection(collection: string): Promise<string[]>;
43
56
  /**
44
57
  * Load and JSON-parse a single item from a wallet collection.
45
58
  *
46
- * @param collection {string}
47
- * @param storageId {string}
59
+ * @param options {object}
60
+ * @param options.collection {string}
61
+ * @param options.storageId {string}
48
62
  * @returns {Promise<T>}
49
63
  */
50
- export declare function loadFromCollection<T = unknown>(collection: string, storageId: string): Promise<T>;
51
- export declare function saveToCollection(collection: string, storageId: string, data: object): Promise<string>;
64
+ export declare function loadFromCollection<T = unknown>({ collection, storageId }: {
65
+ collection: string;
66
+ storageId: string;
67
+ }): Promise<T>;
68
+ /**
69
+ * JSON-serialize and save a single item into a wallet collection.
70
+ *
71
+ * @param options {object}
72
+ * @param options.collection {string}
73
+ * @param options.storageId {string}
74
+ * @param options.data {object}
75
+ * @returns {Promise<string>} the item file path.
76
+ */
77
+ export declare function saveToCollection({ collection, storageId, data }: {
78
+ collection: string;
79
+ storageId: string;
80
+ data: object;
81
+ }): Promise<string>;
52
82
  /**
53
83
  * Load the `.meta.json` metadata sidecar of a wallet collection item.
54
84
  *
55
85
  * @param options {object}
56
86
  * @param options.collection {string}
57
87
  * @param options.storageId {string}
58
- * @returns {Promise<KeyMetadata | undefined>} undefined when no sidecar exists.
88
+ * @returns {Promise<T | undefined>} undefined when no sidecar exists.
59
89
  */
60
- export declare function loadMetaFromCollection({ collection, storageId }: {
90
+ export declare function loadMetaFromCollection<T extends ItemMetadata = ItemMetadata>({ collection, storageId }: {
61
91
  collection: string;
62
92
  storageId: string;
63
- }): Promise<KeyMetadata | undefined>;
93
+ }): Promise<T | undefined>;
64
94
  /**
65
95
  * Save the `.meta.json` metadata sidecar of a wallet collection item.
66
96
  *
@@ -98,18 +128,23 @@ export declare function removeFromCollection({ collection, storageId }: {
98
128
  *
99
129
  * @param options {object}
100
130
  * @param options.fingerprint {string}
101
- * @returns {Promise<{storageId: string, key: object} | undefined>}
131
+ * @returns {Promise<{storageId: string, key: StoredKeyPair} | undefined>}
102
132
  */
103
133
  export declare function findStoredKey({ fingerprint }: {
104
134
  fingerprint: string;
105
135
  }): Promise<{
106
136
  storageId: string;
107
- key: {
108
- id?: string;
109
- publicKeyMultibase?: string;
110
- secretKeyMultibase?: string;
111
- };
137
+ key: StoredKeyPair;
112
138
  } | undefined>;
139
+ /**
140
+ * Extract the method name from a DID -- the segment between the first two
141
+ * colons (`did:web:example.com` -> `web`). Used to pick the per-method storage
142
+ * subdirectory and to label DIDs in listings.
143
+ *
144
+ * @param did {string}
145
+ * @returns {string}
146
+ */
147
+ export declare function methodOf(did: string): string;
113
148
  /**
114
149
  * List the DIDs saved in local storage, across all method subdirectories.
115
150
  *
@@ -176,6 +211,23 @@ export declare function saveDidMeta({ did, meta }: {
176
211
  export declare function removeDidFiles({ did }: {
177
212
  did: string;
178
213
  }): Promise<string[]>;
214
+ /**
215
+ * Report the on-disk file paths a DID's stored artifacts use -- the DID
216
+ * document, its keys file, its metadata sidecar, and (for did:webvh) the
217
+ * history log and update-keys sidecar -- whether or not each one currently
218
+ * exists. Non-destructive; used to surface where things live (e.g. `did meta`).
219
+ *
220
+ * @param options {object}
221
+ * @param options.did {string}
222
+ * @returns {Promise<{ label: string, path: string, exists: boolean }[]>}
223
+ */
224
+ export declare function didStorageFiles({ did }: {
225
+ did: string;
226
+ }): Promise<{
227
+ label: string;
228
+ path: string;
229
+ exists: boolean;
230
+ }[]>;
179
231
  /**
180
232
  * Save a did:webvh history log as a raw newline-delimited JSON (`.jsonl`) file
181
233
  * alongside the DID document, under the method subdirectory.
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
package/dist/storage.js CHANGED
@@ -1,4 +1,4 @@
1
- import { mkdir, readFile, readdir, unlink, writeFile } from 'node:fs/promises';
1
+ import { mkdir, readFile, readdir, stat, unlink, writeFile } from 'node:fs/promises';
2
2
  import { homedir } from 'node:os';
3
3
  import { join } from 'node:path';
4
4
  function getWalletDir() {
@@ -50,15 +50,25 @@ export async function listCollection(collection) {
50
50
  /**
51
51
  * Load and JSON-parse a single item from a wallet collection.
52
52
  *
53
- * @param collection {string}
54
- * @param storageId {string}
53
+ * @param options {object}
54
+ * @param options.collection {string}
55
+ * @param options.storageId {string}
55
56
  * @returns {Promise<T>}
56
57
  */
57
- export async function loadFromCollection(collection, storageId) {
58
+ export async function loadFromCollection({ collection, storageId }) {
58
59
  const filePath = join(getWalletDir(), collection, `${storageId}.json`);
59
60
  return JSON.parse(await readFile(filePath, 'utf8'));
60
61
  }
61
- export async function saveToCollection(collection, storageId, data) {
62
+ /**
63
+ * JSON-serialize and save a single item into a wallet collection.
64
+ *
65
+ * @param options {object}
66
+ * @param options.collection {string}
67
+ * @param options.storageId {string}
68
+ * @param options.data {object}
69
+ * @returns {Promise<string>} the item file path.
70
+ */
71
+ export async function saveToCollection({ collection, storageId, data }) {
62
72
  const dir = join(getWalletDir(), collection);
63
73
  await mkdir(dir, { recursive: true });
64
74
  const filePath = join(dir, `${storageId}.json`);
@@ -71,7 +81,7 @@ export async function saveToCollection(collection, storageId, data) {
71
81
  * @param options {object}
72
82
  * @param options.collection {string}
73
83
  * @param options.storageId {string}
74
- * @returns {Promise<KeyMetadata | undefined>} undefined when no sidecar exists.
84
+ * @returns {Promise<T | undefined>} undefined when no sidecar exists.
75
85
  */
76
86
  export async function loadMetaFromCollection({ collection, storageId }) {
77
87
  const filePath = join(getWalletDir(), collection, `${storageId}.meta.json`);
@@ -150,12 +160,15 @@ export async function removeFromCollection({ collection, storageId }) {
150
160
  *
151
161
  * @param options {object}
152
162
  * @param options.fingerprint {string}
153
- * @returns {Promise<{storageId: string, key: object} | undefined>}
163
+ * @returns {Promise<{storageId: string, key: StoredKeyPair} | undefined>}
154
164
  */
155
165
  export async function findStoredKey({ fingerprint }) {
156
166
  const storageIds = await listCollection('keys');
157
167
  for (const storageId of storageIds) {
158
- const key = await loadFromCollection('keys', storageId);
168
+ const key = await loadFromCollection({
169
+ collection: 'keys',
170
+ storageId
171
+ });
159
172
  if (key.publicKeyMultibase === fingerprint || key.id === fingerprint) {
160
173
  return { storageId, key };
161
174
  }
@@ -165,6 +178,17 @@ export async function findStoredKey({ fingerprint }) {
165
178
  function getDidsDir() {
166
179
  return process.env.DIDS_DIR ?? join(getWalletDir(), 'dids');
167
180
  }
181
+ /**
182
+ * Extract the method name from a DID -- the segment between the first two
183
+ * colons (`did:web:example.com` -> `web`). Used to pick the per-method storage
184
+ * subdirectory and to label DIDs in listings.
185
+ *
186
+ * @param did {string}
187
+ * @returns {string}
188
+ */
189
+ export function methodOf(did) {
190
+ return did.split(':')[1];
191
+ }
168
192
  /**
169
193
  * List the DIDs saved in local storage, across all method subdirectories.
170
194
  *
@@ -216,7 +240,7 @@ export async function listDids() {
216
240
  * @returns {Promise<T>}
217
241
  */
218
242
  export async function loadDidDocument(did) {
219
- const method = did.split(':')[1];
243
+ const method = methodOf(did);
220
244
  const filePath = join(getDidsDir(), method, `${did}.json`);
221
245
  return JSON.parse(await readFile(filePath, 'utf8'));
222
246
  }
@@ -230,7 +254,7 @@ export async function loadDidDocument(did) {
230
254
  * @returns {Promise<T>}
231
255
  */
232
256
  export async function loadDidKeys(did) {
233
- const method = did.split(':')[1];
257
+ const method = methodOf(did);
234
258
  const filePath = join(getDidsDir(), method, `${did}.keys.json`);
235
259
  return JSON.parse(await readFile(filePath, 'utf8'));
236
260
  }
@@ -242,7 +266,7 @@ export async function loadDidKeys(did) {
242
266
  * @returns {Promise<ItemMetadata | undefined>} undefined when no sidecar exists.
243
267
  */
244
268
  export async function loadDidMeta({ did }) {
245
- const method = did.split(':')[1];
269
+ const method = methodOf(did);
246
270
  const filePath = join(getDidsDir(), method, `${did}.meta.json`);
247
271
  try {
248
272
  return JSON.parse(await readFile(filePath, 'utf8'));
@@ -263,7 +287,7 @@ export async function loadDidMeta({ did }) {
263
287
  * @returns {Promise<string>} the sidecar file path.
264
288
  */
265
289
  export async function saveDidMeta({ did, meta }) {
266
- const method = did.split(':')[1];
290
+ const method = methodOf(did);
267
291
  return saveToDids({ method, did, suffix: 'meta', data: meta });
268
292
  }
269
293
  /**
@@ -276,7 +300,7 @@ export async function saveDidMeta({ did, meta }) {
276
300
  * @returns {Promise<string[]>} the file paths that were deleted.
277
301
  */
278
302
  export async function removeDidFiles({ did }) {
279
- const method = did.split(':')[1];
303
+ const method = methodOf(did);
280
304
  const dir = join(getDidsDir(), method);
281
305
  const removed = [];
282
306
  const docPath = join(dir, `${did}.json`);
@@ -296,6 +320,40 @@ export async function removeDidFiles({ did }) {
296
320
  }
297
321
  return removed;
298
322
  }
323
+ /**
324
+ * Report the on-disk file paths a DID's stored artifacts use -- the DID
325
+ * document, its keys file, its metadata sidecar, and (for did:webvh) the
326
+ * history log and update-keys sidecar -- whether or not each one currently
327
+ * exists. Non-destructive; used to surface where things live (e.g. `did meta`).
328
+ *
329
+ * @param options {object}
330
+ * @param options.did {string}
331
+ * @returns {Promise<{ label: string, path: string, exists: boolean }[]>}
332
+ */
333
+ export async function didStorageFiles({ did }) {
334
+ const method = methodOf(did);
335
+ const dir = join(getDidsDir(), method);
336
+ const candidates = [
337
+ { label: 'document', path: join(dir, `${did}.json`) },
338
+ { label: 'keys', path: join(dir, `${did}.keys.json`) },
339
+ { label: 'metadata', path: join(dir, `${did}.meta.json`) },
340
+ // did:webvh-only artifacts; omitted from the listing when absent.
341
+ { label: 'log', path: join(dir, `${did}.jsonl`) },
342
+ { label: 'update-keys', path: join(dir, `${did}.update-keys.json`) }
343
+ ];
344
+ const files = [];
345
+ for (const candidate of candidates) {
346
+ let exists = true;
347
+ try {
348
+ await stat(candidate.path);
349
+ }
350
+ catch {
351
+ exists = false;
352
+ }
353
+ files.push({ ...candidate, exists });
354
+ }
355
+ return files;
356
+ }
299
357
  /**
300
358
  * Save a did:webvh history log as a raw newline-delimited JSON (`.jsonl`) file
301
359
  * alongside the DID document, under the method subdirectory.
@@ -310,7 +368,7 @@ export async function removeDidFiles({ did }) {
310
368
  * @returns {Promise<string>} the log file path.
311
369
  */
312
370
  export async function saveDidLog({ did, log }) {
313
- const method = did.split(':')[1];
371
+ const method = methodOf(did);
314
372
  const dir = join(getDidsDir(), method);
315
373
  await mkdir(dir, { recursive: true });
316
374
  const filePath = join(dir, `${did}.jsonl`);
@@ -328,7 +386,7 @@ export async function saveDidLog({ did, log }) {
328
386
  * @returns {Promise<string>}
329
387
  */
330
388
  export async function loadDidLog(did) {
331
- const method = did.split(':')[1];
389
+ const method = methodOf(did);
332
390
  const filePath = join(getDidsDir(), method, `${did}.jsonl`);
333
391
  return readFile(filePath, 'utf8');
334
392
  }
@@ -342,7 +400,7 @@ export async function loadDidLog(did) {
342
400
  * @returns {Promise<string>} the sidecar file path.
343
401
  */
344
402
  export async function saveDidUpdateKeys({ did, updateKeys }) {
345
- const method = did.split(':')[1];
403
+ const method = methodOf(did);
346
404
  return saveToDids({ method, did, suffix: 'update-keys', data: updateKeys });
347
405
  }
348
406
  /**
@@ -353,7 +411,7 @@ export async function saveDidUpdateKeys({ did, updateKeys }) {
353
411
  * @returns {Promise<WebvhUpdateKeys>}
354
412
  */
355
413
  export async function loadDidUpdateKeys(did) {
356
- const method = did.split(':')[1];
414
+ const method = methodOf(did);
357
415
  const filePath = join(getDidsDir(), method, `${did}.update-keys.json`);
358
416
  return JSON.parse(await readFile(filePath, 'utf8'));
359
417
  }