@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.
- package/CHANGELOG.md +113 -0
- package/README.md +184 -35
- package/dist/commands/collection-command.d.ts +169 -0
- package/dist/commands/collection-command.d.ts.map +1 -0
- package/dist/commands/collection-command.js +241 -0
- package/dist/commands/collection-command.js.map +1 -0
- package/dist/commands/did/create.d.ts +63 -0
- package/dist/commands/did/create.d.ts.map +1 -0
- package/dist/commands/did/create.js +624 -0
- package/dist/commands/did/create.js.map +1 -0
- package/dist/commands/did/manage.d.ts +69 -0
- package/dist/commands/did/manage.d.ts.map +1 -0
- package/dist/commands/did/manage.js +322 -0
- package/dist/commands/did/manage.js.map +1 -0
- package/dist/commands/did/service.d.ts +93 -0
- package/dist/commands/did/service.d.ts.map +1 -0
- package/dist/commands/did/service.js +322 -0
- package/dist/commands/did/service.js.map +1 -0
- package/dist/commands/did/webvh-update.d.ts +172 -0
- package/dist/commands/did/webvh-update.d.ts.map +1 -0
- package/dist/commands/did/webvh-update.js +438 -0
- package/dist/commands/did/webvh-update.js.map +1 -0
- package/dist/commands/did.d.ts +8 -8
- package/dist/commands/did.d.ts.map +1 -1
- package/dist/commands/did.js +31 -1519
- package/dist/commands/did.js.map +1 -1
- package/dist/commands/edv.d.ts +15 -6
- package/dist/commands/edv.d.ts.map +1 -1
- package/dist/commands/edv.js +38 -28
- package/dist/commands/edv.js.map +1 -1
- package/dist/commands/key.d.ts +104 -0
- package/dist/commands/key.d.ts.map +1 -1
- package/dist/commands/key.js +432 -402
- package/dist/commands/key.js.map +1 -1
- package/dist/commands/vc.d.ts +2 -1
- package/dist/commands/vc.d.ts.map +1 -1
- package/dist/commands/vc.js +88 -145
- package/dist/commands/vc.js.map +1 -1
- package/dist/commands/was/collection.d.ts.map +1 -1
- package/dist/commands/was/collection.js +31 -85
- package/dist/commands/was/collection.js.map +1 -1
- package/dist/commands/was/publish.d.ts.map +1 -1
- package/dist/commands/was/publish.js +16 -44
- package/dist/commands/was/publish.js.map +1 -1
- package/dist/commands/was/resource.d.ts.map +1 -1
- package/dist/commands/was/resource.js +24 -51
- package/dist/commands/was/resource.js.map +1 -1
- package/dist/commands/was/shared.d.ts +83 -6
- package/dist/commands/was/shared.d.ts.map +1 -1
- package/dist/commands/was/shared.js +104 -1
- package/dist/commands/was/shared.js.map +1 -1
- package/dist/commands/was/space.d.ts.map +1 -1
- package/dist/commands/was/space.js +10 -16
- package/dist/commands/was/space.js.map +1 -1
- package/dist/commands/was/tree.d.ts.map +1 -1
- package/dist/commands/was/tree.js +4 -6
- package/dist/commands/was/tree.js.map +1 -1
- package/dist/commands/was.d.ts.map +1 -1
- package/dist/commands/was.js +60 -74
- package/dist/commands/was.js.map +1 -1
- package/dist/commands/zcap.d.ts +0 -18
- package/dist/commands/zcap.d.ts.map +1 -1
- package/dist/commands/zcap.js +63 -155
- package/dist/commands/zcap.js.map +1 -1
- package/dist/documentLoader.d.ts +3 -0
- package/dist/documentLoader.d.ts.map +1 -0
- package/dist/documentLoader.js +26 -0
- package/dist/documentLoader.js.map +1 -0
- package/dist/edv/core.d.ts +5 -4
- package/dist/edv/core.d.ts.map +1 -1
- package/dist/edv/core.js +22 -19
- package/dist/edv/core.js.map +1 -1
- package/dist/edv/hmac.d.ts.map +1 -1
- package/dist/edv/hmac.js +12 -12
- package/dist/edv/hmac.js.map +1 -1
- package/dist/edv/recipients.d.ts +2 -0
- package/dist/edv/recipients.d.ts.map +1 -1
- package/dist/edv/recipients.js +12 -15
- package/dist/edv/recipients.js.map +1 -1
- package/dist/keys/webvh-signer.d.ts +4 -10
- package/dist/keys/webvh-signer.d.ts.map +1 -1
- package/dist/keys/webvh-signer.js +10 -14
- package/dist/keys/webvh-signer.js.map +1 -1
- package/dist/keys/webvh-update.d.ts +6 -1
- package/dist/keys/webvh-update.d.ts.map +1 -1
- package/dist/keys/webvh-update.js +5 -2
- package/dist/keys/webvh-update.js.map +1 -1
- package/dist/meta.d.ts +36 -11
- package/dist/meta.d.ts.map +1 -1
- package/dist/meta.js +95 -73
- package/dist/meta.js.map +1 -1
- package/dist/storage.d.ts +65 -13
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +75 -17
- package/dist/storage.js.map +1 -1
- package/dist/vc/issue.d.ts.map +1 -1
- package/dist/vc/issue.js +4 -7
- package/dist/vc/issue.js.map +1 -1
- package/dist/vc/suites/expirationSuite.d.ts.map +1 -1
- package/dist/vc/suites/expirationSuite.js.map +1 -1
- package/dist/vc/suites/issuerDetailsSuite.d.ts.map +1 -1
- package/dist/vc/suites/issuerDetailsSuite.js.map +1 -1
- package/dist/vc/verify.d.ts +10 -0
- package/dist/vc/verify.d.ts.map +1 -1
- package/dist/vc/verify.js +38 -1
- package/dist/vc/verify.js.map +1 -1
- package/dist/was/client.d.ts.map +1 -1
- package/dist/was/client.js +8 -2
- package/dist/was/client.js.map +1 -1
- package/dist/was/grant.d.ts +44 -0
- package/dist/was/grant.d.ts.map +1 -0
- package/dist/was/grant.js +78 -0
- package/dist/was/grant.js.map +1 -0
- package/dist/was/io.d.ts +2 -2
- package/dist/was/io.d.ts.map +1 -1
- package/dist/was/io.js +1 -1
- package/dist/was/registry.d.ts.map +1 -1
- package/dist/was/registry.js +9 -2
- package/dist/was/registry.js.map +1 -1
- package/dist/zcap/delegate.d.ts.map +1 -1
- package/dist/zcap/delegate.js +1 -6
- package/dist/zcap/delegate.js.map +1 -1
- package/dist/zcap/signer.d.ts.map +1 -1
- package/dist/zcap/signer.js.map +1 -1
- package/package.json +20 -19
- package/dist/keys/webvh-driver.d.ts +0 -24
- package/dist/keys/webvh-driver.d.ts.map +0 -1
- package/dist/keys/webvh-driver.js +0 -73
- 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
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
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?:
|
|
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(
|
|
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
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
})
|
|
179
|
-
|
|
180
|
-
|
|
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
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
}
|
|
190
|
-
|
|
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?:
|
|
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(
|
|
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(
|
|
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
|
-
|
|
233
|
-
matches.push({ storageId, meta });
|
|
234
|
-
}
|
|
254
|
+
return { storageId: ref, credential, meta };
|
|
235
255
|
}
|
|
236
|
-
|
|
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
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
}
|
|
243
|
-
|
|
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:
|
|
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
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
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
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
}
|
|
282
|
-
|
|
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":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,aAAa,EACb,cAAc,EACd,QAAQ,EACR,eAAe,EACf,WAAW,EACX,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,
|
|
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
|
|
47
|
-
* @param
|
|
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
|
|
51
|
-
|
|
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<
|
|
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<
|
|
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:
|
|
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.
|
package/dist/storage.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"
|
|
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
|
|
54
|
-
* @param
|
|
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
|
-
|
|
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<
|
|
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:
|
|
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(
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
}
|