@interop/did-cli 0.6.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 +341 -0
- package/LICENSE.md +21 -0
- package/README.md +1307 -0
- package/dist/commands/did.d.ts +3 -0
- package/dist/commands/did.d.ts.map +1 -0
- package/dist/commands/did.js +605 -0
- package/dist/commands/did.js.map +1 -0
- package/dist/commands/key.d.ts +3 -0
- package/dist/commands/key.d.ts.map +1 -0
- package/dist/commands/key.js +430 -0
- package/dist/commands/key.js.map +1 -0
- package/dist/commands/vc.d.ts +79 -0
- package/dist/commands/vc.d.ts.map +1 -0
- package/dist/commands/vc.js +528 -0
- package/dist/commands/vc.js.map +1 -0
- package/dist/commands/wallet.d.ts +14 -0
- package/dist/commands/wallet.d.ts.map +1 -0
- package/dist/commands/wallet.js +48 -0
- package/dist/commands/wallet.js.map +1 -0
- package/dist/commands/was.d.ts +500 -0
- package/dist/commands/was.d.ts.map +1 -0
- package/dist/commands/was.js +1833 -0
- package/dist/commands/was.js.map +1 -0
- package/dist/commands/zcap.d.ts +85 -0
- package/dist/commands/zcap.d.ts.map +1 -0
- package/dist/commands/zcap.js +447 -0
- package/dist/commands/zcap.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/keys/ecdsa.d.ts +40 -0
- package/dist/keys/ecdsa.d.ts.map +1 -0
- package/dist/keys/ecdsa.js +73 -0
- package/dist/keys/ecdsa.js.map +1 -0
- package/dist/meta.d.ts +164 -0
- package/dist/meta.d.ts.map +1 -0
- package/dist/meta.js +286 -0
- package/dist/meta.js.map +1 -0
- package/dist/storage.d.ts +191 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +307 -0
- package/dist/storage.js.map +1 -0
- package/dist/table.d.ts +43 -0
- package/dist/table.d.ts.map +1 -0
- package/dist/table.js +61 -0
- package/dist/table.js.map +1 -0
- package/dist/vc/fixtures/welcomeCredential.d.ts +22 -0
- package/dist/vc/fixtures/welcomeCredential.d.ts.map +1 -0
- package/dist/vc/fixtures/welcomeCredential.js +25 -0
- package/dist/vc/fixtures/welcomeCredential.js.map +1 -0
- package/dist/vc/issue.d.ts +24 -0
- package/dist/vc/issue.d.ts.map +1 -0
- package/dist/vc/issue.js +211 -0
- package/dist/vc/issue.js.map +1 -0
- package/dist/vc/registries.d.ts +30 -0
- package/dist/vc/registries.d.ts.map +1 -0
- package/dist/vc/registries.js +53 -0
- package/dist/vc/registries.js.map +1 -0
- package/dist/vc/registryManager.d.ts +25 -0
- package/dist/vc/registryManager.d.ts.map +1 -0
- package/dist/vc/registryManager.js +29 -0
- package/dist/vc/registryManager.js.map +1 -0
- package/dist/vc/suites/expirationSuite.d.ts +23 -0
- package/dist/vc/suites/expirationSuite.d.ts.map +1 -0
- package/dist/vc/suites/expirationSuite.js +84 -0
- package/dist/vc/suites/expirationSuite.js.map +1 -0
- package/dist/vc/suites/issuerDetailsSuite.d.ts +22 -0
- package/dist/vc/suites/issuerDetailsSuite.d.ts.map +1 -0
- package/dist/vc/suites/issuerDetailsSuite.js +69 -0
- package/dist/vc/suites/issuerDetailsSuite.js.map +1 -0
- package/dist/vc/verify.d.ts +46 -0
- package/dist/vc/verify.d.ts.map +1 -0
- package/dist/vc/verify.js +147 -0
- package/dist/vc/verify.js.map +1 -0
- package/dist/was/address.d.ts +44 -0
- package/dist/was/address.d.ts.map +1 -0
- package/dist/was/address.js +98 -0
- package/dist/was/address.js.map +1 -0
- package/dist/was/capability.d.ts +65 -0
- package/dist/was/capability.d.ts.map +1 -0
- package/dist/was/capability.js +108 -0
- package/dist/was/capability.js.map +1 -0
- package/dist/was/client.d.ts +108 -0
- package/dist/was/client.d.ts.map +1 -0
- package/dist/was/client.js +142 -0
- package/dist/was/client.js.map +1 -0
- package/dist/was/io.d.ts +71 -0
- package/dist/was/io.d.ts.map +1 -0
- package/dist/was/io.js +146 -0
- package/dist/was/io.js.map +1 -0
- package/dist/was/registry.d.ts +79 -0
- package/dist/was/registry.d.ts.map +1 -0
- package/dist/was/registry.js +99 -0
- package/dist/was/registry.js.map +1 -0
- package/dist/zcap/create.d.ts +20 -0
- package/dist/zcap/create.d.ts.map +1 -0
- package/dist/zcap/create.js +29 -0
- package/dist/zcap/create.js.map +1 -0
- package/dist/zcap/delegate.d.ts +44 -0
- package/dist/zcap/delegate.d.ts.map +1 -0
- package/dist/zcap/delegate.js +77 -0
- package/dist/zcap/delegate.js.map +1 -0
- package/dist/zcap/encoding.d.ts +17 -0
- package/dist/zcap/encoding.d.ts.map +1 -0
- package/dist/zcap/encoding.js +37 -0
- package/dist/zcap/encoding.js.map +1 -0
- package/dist/zcap/signer.d.ts +20 -0
- package/dist/zcap/signer.d.ts.map +1 -0
- package/dist/zcap/signer.js +62 -0
- package/dist/zcap/signer.js.map +1 -0
- package/dist/zcap/ttl.d.ts +19 -0
- package/dist/zcap/ttl.d.ts.map +1 -0
- package/dist/zcap/ttl.js +40 -0
- package/dist/zcap/ttl.js.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"did.d.ts","sourceRoot":"","sources":["../../src/commands/did.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA+EnC,wBAAgB,cAAc,IAAI,OAAO,CAurBxC"}
|
|
@@ -0,0 +1,605 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { decodeSecretKeySeed, generateSecretKeySeed } from '@digitalcredentials/bnid';
|
|
3
|
+
import { driver } from '@interop/did-method-key';
|
|
4
|
+
import * as didWeb from '@interop/did-web-resolver';
|
|
5
|
+
import { Ed25519VerificationKey } from '@interop/ed25519-verification-key';
|
|
6
|
+
import * as EcdsaMultikey from '@interop/ecdsa-multikey';
|
|
7
|
+
import { listDids, loadDidDocument, loadDidKeys, loadDidMeta, removeDidFiles, saveDidMeta, saveToDids } from '../storage.js';
|
|
8
|
+
import { recordKeyDidAssociation, removeKeyDidAssociation, resolveDidRef } from '../meta.js';
|
|
9
|
+
import { renderTable } from '../table.js';
|
|
10
|
+
import { normalizeEcdsaCurve, SUPPORTED_ECDSA_CURVES, warnIfNotVcIssuanceCapable } from '../keys/ecdsa.js';
|
|
11
|
+
/**
|
|
12
|
+
* Save the artifacts of a newly created DID: the DID document, its keys file,
|
|
13
|
+
* a metadata sidecar (creation timestamp plus the handle and description when
|
|
14
|
+
* given), and the key-to-DID association cache of any matching wallet keys.
|
|
15
|
+
*
|
|
16
|
+
* @param options {object}
|
|
17
|
+
* @param options.method {string}
|
|
18
|
+
* @param options.didDocument {object}
|
|
19
|
+
* @param options.exportedKeys {object}
|
|
20
|
+
* @param options.fingerprints {(string | undefined)[]}
|
|
21
|
+
* @param [options.handle] {string}
|
|
22
|
+
* @param [options.description] {string}
|
|
23
|
+
* @returns {Promise<void>}
|
|
24
|
+
*/
|
|
25
|
+
async function saveDidArtifacts({ method, didDocument, exportedKeys, fingerprints, handle, description }) {
|
|
26
|
+
const did = didDocument.id;
|
|
27
|
+
const docPath = await saveToDids({ method, did, data: didDocument });
|
|
28
|
+
await saveToDids({ method, did, suffix: 'keys', data: exportedKeys });
|
|
29
|
+
const meta = { created: new Date().toISOString() };
|
|
30
|
+
if (handle) {
|
|
31
|
+
meta.handle = handle;
|
|
32
|
+
}
|
|
33
|
+
if (description) {
|
|
34
|
+
meta.description = description;
|
|
35
|
+
}
|
|
36
|
+
await saveDidMeta({ did, meta });
|
|
37
|
+
for (const fingerprint of fingerprints) {
|
|
38
|
+
if (fingerprint) {
|
|
39
|
+
await recordKeyDidAssociation({ publicKeyMultibase: fingerprint, did });
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
console.error(`DID saved to ${docPath}`);
|
|
43
|
+
}
|
|
44
|
+
export function makeDidCommand() {
|
|
45
|
+
const did = new Command('did').description('Manage DIDs');
|
|
46
|
+
did
|
|
47
|
+
.command('create [method]')
|
|
48
|
+
.description('Create a new DID (method: key, web, webvh) [default: key]')
|
|
49
|
+
.option('-t, --type <type>', 'key type (supported: ed25519, ecdsa)', 'ed25519')
|
|
50
|
+
.option('--curve <curve>', `ECDSA curve for --type ecdsa (supported: ${SUPPORTED_ECDSA_CURVES})`, 'p256')
|
|
51
|
+
.option('--url <url>', 'HTTPS url of the DID document (required for did:web)')
|
|
52
|
+
.option('--with-seed', 'include the secret key seed in output (generated if SECRET_KEY_SEED is not set)')
|
|
53
|
+
.option('--save', 'save the DID document to local storage (~/.config/did-cli-wallet/dids/)')
|
|
54
|
+
.option('--handle <handle>', 'short tag for the saved DID (requires --save)')
|
|
55
|
+
.option('--description <description>', 'longer description of the saved DID (requires --save)')
|
|
56
|
+
.action(async (method = 'key', options) => {
|
|
57
|
+
if ((options.handle !== undefined || options.description !== undefined) &&
|
|
58
|
+
!options.save) {
|
|
59
|
+
console.error('--handle and --description require --save');
|
|
60
|
+
process.exit(1);
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
switch (method) {
|
|
64
|
+
case 'key': {
|
|
65
|
+
switch (options.type) {
|
|
66
|
+
case 'ed25519': {
|
|
67
|
+
const envSeed = process.env.SECRET_KEY_SEED;
|
|
68
|
+
const secretKeySeed = options.withSeed
|
|
69
|
+
? (envSeed ?? (await generateSecretKeySeed()))
|
|
70
|
+
: envSeed;
|
|
71
|
+
const seedBytes = secretKeySeed
|
|
72
|
+
? decodeSecretKeySeed({ secretKeySeed })
|
|
73
|
+
: undefined;
|
|
74
|
+
const keyPair = await Ed25519VerificationKey.generate({
|
|
75
|
+
seed: seedBytes
|
|
76
|
+
});
|
|
77
|
+
const didDriver = driver();
|
|
78
|
+
didDriver.use({ keyPairClass: Ed25519VerificationKey });
|
|
79
|
+
const { didDocument } = await didDriver.fromKeyPair({
|
|
80
|
+
verificationKeyPair: keyPair
|
|
81
|
+
});
|
|
82
|
+
if (options.save) {
|
|
83
|
+
const exported = await keyPair.export({
|
|
84
|
+
publicKey: true,
|
|
85
|
+
secretKey: true
|
|
86
|
+
});
|
|
87
|
+
await saveDidArtifacts({
|
|
88
|
+
method: 'key',
|
|
89
|
+
didDocument,
|
|
90
|
+
exportedKeys: exported,
|
|
91
|
+
fingerprints: [
|
|
92
|
+
exported
|
|
93
|
+
.publicKeyMultibase
|
|
94
|
+
],
|
|
95
|
+
handle: options.handle,
|
|
96
|
+
description: options.description
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
const output = { id: didDocument.id };
|
|
100
|
+
if (options.withSeed) {
|
|
101
|
+
output.secretKeySeed = secretKeySeed;
|
|
102
|
+
}
|
|
103
|
+
output.didDocument = didDocument;
|
|
104
|
+
console.log(JSON.stringify(output, null, 2));
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
case 'ecdsa': {
|
|
108
|
+
if (options.withSeed) {
|
|
109
|
+
console.error('--with-seed is not supported for ecdsa keys; ECDSA key ' +
|
|
110
|
+
'generation is non-deterministic and cannot be derived ' +
|
|
111
|
+
'from a seed.');
|
|
112
|
+
process.exit(1);
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
const curve = normalizeEcdsaCurve({ curve: options.curve });
|
|
116
|
+
if (!curve) {
|
|
117
|
+
console.error(`Unknown ecdsa curve: ${options.curve}. ` +
|
|
118
|
+
`Supported: ${SUPPORTED_ECDSA_CURVES}`);
|
|
119
|
+
process.exit(1);
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
warnIfNotVcIssuanceCapable({ curve });
|
|
123
|
+
const keyPair = await EcdsaMultikey.generate({ curve });
|
|
124
|
+
const didDriver = driver();
|
|
125
|
+
const { didDocument } = await didDriver.fromKeyPair({
|
|
126
|
+
verificationKeyPair: keyPair
|
|
127
|
+
});
|
|
128
|
+
if (options.save) {
|
|
129
|
+
const exported = await keyPair.export({
|
|
130
|
+
publicKey: true,
|
|
131
|
+
secretKey: true
|
|
132
|
+
});
|
|
133
|
+
await saveDidArtifacts({
|
|
134
|
+
method: 'key',
|
|
135
|
+
didDocument,
|
|
136
|
+
exportedKeys: exported,
|
|
137
|
+
fingerprints: [
|
|
138
|
+
exported
|
|
139
|
+
.publicKeyMultibase
|
|
140
|
+
],
|
|
141
|
+
handle: options.handle,
|
|
142
|
+
description: options.description
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
const output = { id: didDocument.id };
|
|
146
|
+
output.didDocument = didDocument;
|
|
147
|
+
console.log(JSON.stringify(output, null, 2));
|
|
148
|
+
break;
|
|
149
|
+
}
|
|
150
|
+
default:
|
|
151
|
+
console.error(`Unknown key type: ${options.type}. Supported: ed25519, ecdsa`);
|
|
152
|
+
process.exit(1);
|
|
153
|
+
}
|
|
154
|
+
break;
|
|
155
|
+
}
|
|
156
|
+
case 'web': {
|
|
157
|
+
switch (options.type) {
|
|
158
|
+
case 'ed25519': {
|
|
159
|
+
if (!options.url) {
|
|
160
|
+
console.error('did:web requires --url (e.g. --url https://example.com)');
|
|
161
|
+
process.exit(1);
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
const envSeed = process.env.SECRET_KEY_SEED;
|
|
165
|
+
const secretKeySeed = options.withSeed
|
|
166
|
+
? (envSeed ?? (await generateSecretKeySeed()))
|
|
167
|
+
: envSeed;
|
|
168
|
+
const seedBytes = secretKeySeed
|
|
169
|
+
? decodeSecretKeySeed({ secretKeySeed })
|
|
170
|
+
: undefined;
|
|
171
|
+
const didWebDriver = didWeb.driver();
|
|
172
|
+
didWebDriver.use({ keyPairClass: Ed25519VerificationKey });
|
|
173
|
+
const { didDocument, keyPairs } = await didWebDriver.generate({
|
|
174
|
+
url: options.url,
|
|
175
|
+
seed: seedBytes
|
|
176
|
+
});
|
|
177
|
+
if (options.save) {
|
|
178
|
+
const exported = {};
|
|
179
|
+
const fingerprints = [];
|
|
180
|
+
for (const [methodId, keyPair] of keyPairs) {
|
|
181
|
+
const exportedKey = (await keyPair.export({
|
|
182
|
+
publicKey: true,
|
|
183
|
+
secretKey: true
|
|
184
|
+
}));
|
|
185
|
+
exported[methodId] = exportedKey;
|
|
186
|
+
fingerprints.push(exportedKey.publicKeyMultibase);
|
|
187
|
+
}
|
|
188
|
+
await saveDidArtifacts({
|
|
189
|
+
method: 'web',
|
|
190
|
+
didDocument,
|
|
191
|
+
exportedKeys: exported,
|
|
192
|
+
fingerprints,
|
|
193
|
+
handle: options.handle,
|
|
194
|
+
description: options.description
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
const output = { id: didDocument.id };
|
|
198
|
+
if (options.withSeed) {
|
|
199
|
+
output.secretKeySeed = secretKeySeed;
|
|
200
|
+
}
|
|
201
|
+
output.didDocument = didDocument;
|
|
202
|
+
console.log(JSON.stringify(output, null, 2));
|
|
203
|
+
break;
|
|
204
|
+
}
|
|
205
|
+
case 'ecdsa': {
|
|
206
|
+
if (!options.url) {
|
|
207
|
+
console.error('did:web requires --url (e.g. --url https://example.com)');
|
|
208
|
+
process.exit(1);
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
if (options.withSeed) {
|
|
212
|
+
console.error('--with-seed is not supported for ecdsa keys; ECDSA key ' +
|
|
213
|
+
'generation is non-deterministic and cannot be derived ' +
|
|
214
|
+
'from a seed.');
|
|
215
|
+
process.exit(1);
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
const curve = normalizeEcdsaCurve({ curve: options.curve });
|
|
219
|
+
if (!curve) {
|
|
220
|
+
console.error(`Unknown ecdsa curve: ${options.curve}. ` +
|
|
221
|
+
`Supported: ${SUPPORTED_ECDSA_CURVES}`);
|
|
222
|
+
process.exit(1);
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
warnIfNotVcIssuanceCapable({ curve });
|
|
226
|
+
const keyPair = await EcdsaMultikey.generate({ curve });
|
|
227
|
+
const didWebDriver = didWeb.driver();
|
|
228
|
+
const { didDocument, keyPairs } = await didWebDriver.generate({
|
|
229
|
+
url: options.url,
|
|
230
|
+
verificationKeyPair: keyPair
|
|
231
|
+
});
|
|
232
|
+
if (options.save) {
|
|
233
|
+
const exported = {};
|
|
234
|
+
const fingerprints = [];
|
|
235
|
+
for (const [methodId, savedKey] of keyPairs) {
|
|
236
|
+
const exportedKey = (await savedKey.export({
|
|
237
|
+
publicKey: true,
|
|
238
|
+
secretKey: true
|
|
239
|
+
}));
|
|
240
|
+
exported[methodId] = exportedKey;
|
|
241
|
+
fingerprints.push(exportedKey.publicKeyMultibase);
|
|
242
|
+
}
|
|
243
|
+
await saveDidArtifacts({
|
|
244
|
+
method: 'web',
|
|
245
|
+
didDocument,
|
|
246
|
+
exportedKeys: exported,
|
|
247
|
+
fingerprints,
|
|
248
|
+
handle: options.handle,
|
|
249
|
+
description: options.description
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
const output = { id: didDocument.id };
|
|
253
|
+
output.didDocument = didDocument;
|
|
254
|
+
console.log(JSON.stringify(output, null, 2));
|
|
255
|
+
break;
|
|
256
|
+
}
|
|
257
|
+
default:
|
|
258
|
+
console.error(`Unknown key type: ${options.type}. ` +
|
|
259
|
+
`Supported: ed25519, ecdsa`);
|
|
260
|
+
process.exit(1);
|
|
261
|
+
}
|
|
262
|
+
break;
|
|
263
|
+
}
|
|
264
|
+
case 'webvh':
|
|
265
|
+
console.log(`Creating did:${method}...`);
|
|
266
|
+
// TODO: implement
|
|
267
|
+
break;
|
|
268
|
+
default:
|
|
269
|
+
console.error(`Unknown method: ${method}. Supported: key, web, webvh`);
|
|
270
|
+
process.exit(1);
|
|
271
|
+
}
|
|
272
|
+
});
|
|
273
|
+
did
|
|
274
|
+
.command('add-key <did>')
|
|
275
|
+
.description('Add a verification key to an existing (locally stored) did:web')
|
|
276
|
+
.option('-t, --type <type>', 'key type (supported: ed25519, ecdsa)', 'ed25519')
|
|
277
|
+
.option('--curve <curve>', `ECDSA curve for --type ecdsa (supported: ${SUPPORTED_ECDSA_CURVES})`, 'p256')
|
|
278
|
+
.option('--purpose <purpose...>', 'verification relationship(s) to wire the key into ' +
|
|
279
|
+
'(default: authentication, assertionMethod, capabilityDelegation, capabilityInvocation)')
|
|
280
|
+
.option('--with-seed', 'include the new secret key seed in output (generated if SECRET_KEY_SEED is not set)')
|
|
281
|
+
.action(async (did, options) => {
|
|
282
|
+
if (!did.startsWith('did:web:')) {
|
|
283
|
+
console.error('add-key is only supported for did:web DIDs');
|
|
284
|
+
process.exit(1);
|
|
285
|
+
}
|
|
286
|
+
if (options.type !== 'ed25519' && options.type !== 'ecdsa') {
|
|
287
|
+
console.error(`Unknown key type: ${options.type}. Supported: ed25519, ecdsa`);
|
|
288
|
+
process.exit(1);
|
|
289
|
+
}
|
|
290
|
+
let didDocument;
|
|
291
|
+
let exportedKeys;
|
|
292
|
+
try {
|
|
293
|
+
didDocument = await loadDidDocument(did);
|
|
294
|
+
exportedKeys = await loadDidKeys(did);
|
|
295
|
+
}
|
|
296
|
+
catch {
|
|
297
|
+
console.error(`No locally stored did:web found for ${did}`);
|
|
298
|
+
process.exit(1);
|
|
299
|
+
}
|
|
300
|
+
// ed25519 keys are derived from a seed; ecdsa keys are generated
|
|
301
|
+
// non-deterministically and have no seed.
|
|
302
|
+
let secretKeySeed;
|
|
303
|
+
let keyPair;
|
|
304
|
+
const didWebDriver = didWeb.driver();
|
|
305
|
+
if (options.type === 'ed25519') {
|
|
306
|
+
const envSeed = process.env.SECRET_KEY_SEED;
|
|
307
|
+
secretKeySeed = options.withSeed
|
|
308
|
+
? (envSeed ?? (await generateSecretKeySeed()))
|
|
309
|
+
: envSeed;
|
|
310
|
+
const seedBytes = secretKeySeed
|
|
311
|
+
? decodeSecretKeySeed({ secretKeySeed })
|
|
312
|
+
: undefined;
|
|
313
|
+
keyPair = await Ed25519VerificationKey.generate({ seed: seedBytes });
|
|
314
|
+
didWebDriver.use({ keyPairClass: Ed25519VerificationKey });
|
|
315
|
+
}
|
|
316
|
+
else {
|
|
317
|
+
if (options.withSeed) {
|
|
318
|
+
console.error('--with-seed is not supported for ecdsa keys; ECDSA key ' +
|
|
319
|
+
'generation is non-deterministic and cannot be derived ' +
|
|
320
|
+
'from a seed.');
|
|
321
|
+
process.exit(1);
|
|
322
|
+
return;
|
|
323
|
+
}
|
|
324
|
+
const curve = normalizeEcdsaCurve({ curve: options.curve });
|
|
325
|
+
if (!curve) {
|
|
326
|
+
console.error(`Unknown ecdsa curve: ${options.curve}. ` +
|
|
327
|
+
`Supported: ${SUPPORTED_ECDSA_CURVES}`);
|
|
328
|
+
process.exit(1);
|
|
329
|
+
return;
|
|
330
|
+
}
|
|
331
|
+
warnIfNotVcIssuanceCapable({ curve });
|
|
332
|
+
keyPair = await EcdsaMultikey.generate({ curve });
|
|
333
|
+
}
|
|
334
|
+
const keyPairs = new Map();
|
|
335
|
+
try {
|
|
336
|
+
await didWebDriver.addVerificationMethod({
|
|
337
|
+
didDocument,
|
|
338
|
+
keyPairs,
|
|
339
|
+
keyPair,
|
|
340
|
+
purposes: options.purpose
|
|
341
|
+
});
|
|
342
|
+
}
|
|
343
|
+
catch (err) {
|
|
344
|
+
console.error(err.message);
|
|
345
|
+
process.exit(1);
|
|
346
|
+
}
|
|
347
|
+
// Merge the new key into the stored keys file (keyed by VM id).
|
|
348
|
+
const addedFingerprints = [];
|
|
349
|
+
for (const [methodId, addedKey] of keyPairs) {
|
|
350
|
+
const exportedKey = (await addedKey.export({
|
|
351
|
+
publicKey: true,
|
|
352
|
+
secretKey: true
|
|
353
|
+
}));
|
|
354
|
+
exportedKeys[methodId] = exportedKey;
|
|
355
|
+
addedFingerprints.push(exportedKey.publicKeyMultibase);
|
|
356
|
+
}
|
|
357
|
+
const docPath = await saveToDids({
|
|
358
|
+
method: 'web',
|
|
359
|
+
did,
|
|
360
|
+
data: didDocument
|
|
361
|
+
});
|
|
362
|
+
await saveToDids({
|
|
363
|
+
method: 'web',
|
|
364
|
+
did,
|
|
365
|
+
suffix: 'keys',
|
|
366
|
+
data: exportedKeys
|
|
367
|
+
});
|
|
368
|
+
// Update the key-to-DID cache of any matching wallet keys; the DID's
|
|
369
|
+
// own metadata sidecar is left untouched.
|
|
370
|
+
for (const fingerprint of addedFingerprints) {
|
|
371
|
+
if (fingerprint) {
|
|
372
|
+
await recordKeyDidAssociation({
|
|
373
|
+
publicKeyMultibase: fingerprint,
|
|
374
|
+
did
|
|
375
|
+
});
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
console.error(`DID saved to ${docPath}`);
|
|
379
|
+
const output = { id: didDocument.id };
|
|
380
|
+
if (options.withSeed) {
|
|
381
|
+
output.secretKeySeed = secretKeySeed;
|
|
382
|
+
}
|
|
383
|
+
output.didDocument = didDocument;
|
|
384
|
+
console.log(JSON.stringify(output, null, 2));
|
|
385
|
+
});
|
|
386
|
+
did
|
|
387
|
+
.command('resolve <did>')
|
|
388
|
+
.description('Resolve a DID document')
|
|
389
|
+
.option('-o, --output <format>', 'output format (json|pretty)', 'pretty')
|
|
390
|
+
.action((did, options) => {
|
|
391
|
+
console.log(`Resolving ${did} (format: ${options.output})`);
|
|
392
|
+
// TODO: implement
|
|
393
|
+
});
|
|
394
|
+
did
|
|
395
|
+
.command('show <did>')
|
|
396
|
+
.aliases(['view', 'cat'])
|
|
397
|
+
.description('Show a locally stored DID document (no secret key material) by DID ' +
|
|
398
|
+
'or handle')
|
|
399
|
+
.option('--meta', 'show the DID metadata instead of the DID document')
|
|
400
|
+
.option('--json', 'with --meta, output the metadata as JSON')
|
|
401
|
+
.action(async (didRef, options) => {
|
|
402
|
+
let did;
|
|
403
|
+
try {
|
|
404
|
+
did = await resolveDidRef({ ref: didRef });
|
|
405
|
+
}
|
|
406
|
+
catch (err) {
|
|
407
|
+
console.error(err.message);
|
|
408
|
+
process.exit(1);
|
|
409
|
+
return;
|
|
410
|
+
}
|
|
411
|
+
let didDocument;
|
|
412
|
+
try {
|
|
413
|
+
didDocument = await loadDidDocument(did ?? didRef);
|
|
414
|
+
}
|
|
415
|
+
catch {
|
|
416
|
+
console.error(`No locally stored DID found for ${didRef}`);
|
|
417
|
+
process.exit(1);
|
|
418
|
+
return;
|
|
419
|
+
}
|
|
420
|
+
if (options.meta) {
|
|
421
|
+
const docDid = didDocument.id;
|
|
422
|
+
const meta = await loadDidMeta({ did: docDid });
|
|
423
|
+
const keyCount = Array.isArray(didDocument.verificationMethod)
|
|
424
|
+
? didDocument.verificationMethod.length
|
|
425
|
+
: 0;
|
|
426
|
+
if (options.json) {
|
|
427
|
+
const output = {
|
|
428
|
+
did: docDid,
|
|
429
|
+
method: docDid.split(':')[1],
|
|
430
|
+
...(meta?.created && { created: meta.created }),
|
|
431
|
+
...(meta?.handle && { handle: meta.handle }),
|
|
432
|
+
...(meta?.description && { description: meta.description }),
|
|
433
|
+
keys: keyCount
|
|
434
|
+
};
|
|
435
|
+
console.log(JSON.stringify(output, null, 2));
|
|
436
|
+
return;
|
|
437
|
+
}
|
|
438
|
+
const rows = [
|
|
439
|
+
['DID', docDid],
|
|
440
|
+
['Method', docDid.split(':')[1]],
|
|
441
|
+
['Handle', meta?.handle ?? ''],
|
|
442
|
+
['Created', meta?.created ?? ''],
|
|
443
|
+
['Description', meta?.description ?? ''],
|
|
444
|
+
['Keys', String(keyCount)]
|
|
445
|
+
];
|
|
446
|
+
console.log(renderTable({
|
|
447
|
+
columns: [{ header: 'FIELD' }, { header: 'VALUE' }],
|
|
448
|
+
rows
|
|
449
|
+
}));
|
|
450
|
+
return;
|
|
451
|
+
}
|
|
452
|
+
// The stored DID document holds no secret material -- signing keys live in
|
|
453
|
+
// the separate `<did>.keys.json` file -- so it is safe to print as-is.
|
|
454
|
+
console.log(JSON.stringify(didDocument, null, 2));
|
|
455
|
+
});
|
|
456
|
+
did
|
|
457
|
+
.command('list')
|
|
458
|
+
.description('List locally stored DIDs with their metadata')
|
|
459
|
+
.option('--json', 'output the list as a JSON array of objects with metadata')
|
|
460
|
+
.option('--plain', 'output one DID per line, sorted (no metadata)')
|
|
461
|
+
.action(async (options) => {
|
|
462
|
+
const dids = await listDids();
|
|
463
|
+
if (options.plain) {
|
|
464
|
+
for (const did of dids) {
|
|
465
|
+
console.log(did);
|
|
466
|
+
}
|
|
467
|
+
return;
|
|
468
|
+
}
|
|
469
|
+
const entries = [];
|
|
470
|
+
for (const did of dids) {
|
|
471
|
+
const meta = await loadDidMeta({ did });
|
|
472
|
+
entries.push({ did, method: did.split(':')[1], ...meta });
|
|
473
|
+
}
|
|
474
|
+
if (options.json) {
|
|
475
|
+
const output = entries.map(entry => ({
|
|
476
|
+
did: entry.did,
|
|
477
|
+
method: entry.method,
|
|
478
|
+
...(entry.created && { created: entry.created }),
|
|
479
|
+
...(entry.handle && { handle: entry.handle }),
|
|
480
|
+
...(entry.description && { description: entry.description })
|
|
481
|
+
}));
|
|
482
|
+
console.log(JSON.stringify(output, null, 2));
|
|
483
|
+
return;
|
|
484
|
+
}
|
|
485
|
+
if (entries.length === 0) {
|
|
486
|
+
return;
|
|
487
|
+
}
|
|
488
|
+
const rows = entries.map(entry => [
|
|
489
|
+
entry.handle ?? '',
|
|
490
|
+
entry.method,
|
|
491
|
+
entry.created?.slice(0, 10) ?? '',
|
|
492
|
+
entry.did,
|
|
493
|
+
entry.description ?? ''
|
|
494
|
+
]);
|
|
495
|
+
console.log(renderTable({
|
|
496
|
+
columns: [
|
|
497
|
+
{ header: 'HANDLE', maxWidth: 16 },
|
|
498
|
+
{ header: 'METHOD' },
|
|
499
|
+
{ header: 'CREATED' },
|
|
500
|
+
{ header: 'DID', maxWidth: 44 },
|
|
501
|
+
{ header: 'DESCRIPTION', maxWidth: 40 }
|
|
502
|
+
],
|
|
503
|
+
rows
|
|
504
|
+
}));
|
|
505
|
+
});
|
|
506
|
+
did
|
|
507
|
+
.command('meta <did>')
|
|
508
|
+
.description('Show or edit the metadata of a locally stored DID (by DID or handle); ' +
|
|
509
|
+
'with no options, prints the current metadata')
|
|
510
|
+
.option('--handle <handle>', 'set the handle (an empty string clears it)')
|
|
511
|
+
.option('--description <description>', 'set the description (an empty string clears it)')
|
|
512
|
+
.action(async (didRef, options) => {
|
|
513
|
+
let did;
|
|
514
|
+
try {
|
|
515
|
+
did = await resolveDidRef({ ref: didRef });
|
|
516
|
+
}
|
|
517
|
+
catch (err) {
|
|
518
|
+
console.error(err.message);
|
|
519
|
+
process.exit(1);
|
|
520
|
+
return;
|
|
521
|
+
}
|
|
522
|
+
if (did) {
|
|
523
|
+
// Refuse to create metadata for DIDs that are not saved locally.
|
|
524
|
+
try {
|
|
525
|
+
await loadDidDocument(did);
|
|
526
|
+
}
|
|
527
|
+
catch {
|
|
528
|
+
did = undefined;
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
if (!did) {
|
|
532
|
+
console.error(`No locally stored DID found for ${didRef}`);
|
|
533
|
+
process.exit(1);
|
|
534
|
+
return;
|
|
535
|
+
}
|
|
536
|
+
const existing = await loadDidMeta({ did });
|
|
537
|
+
const hasEdits = options.handle !== undefined || options.description !== undefined;
|
|
538
|
+
if (!hasEdits) {
|
|
539
|
+
console.log(JSON.stringify(existing ?? {}, null, 2));
|
|
540
|
+
return;
|
|
541
|
+
}
|
|
542
|
+
const meta = { ...(existing ?? {}) };
|
|
543
|
+
if (options.handle !== undefined) {
|
|
544
|
+
if (options.handle === '') {
|
|
545
|
+
delete meta.handle;
|
|
546
|
+
}
|
|
547
|
+
else {
|
|
548
|
+
meta.handle = options.handle;
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
if (options.description !== undefined) {
|
|
552
|
+
if (options.description === '') {
|
|
553
|
+
delete meta.description;
|
|
554
|
+
}
|
|
555
|
+
else {
|
|
556
|
+
meta.description = options.description;
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
const filePath = await saveDidMeta({ did, meta });
|
|
560
|
+
console.error(`Metadata saved to ${filePath}`);
|
|
561
|
+
console.log(JSON.stringify(meta, null, 2));
|
|
562
|
+
});
|
|
563
|
+
did
|
|
564
|
+
.command('remove <did>')
|
|
565
|
+
.aliases(['delete', 'rm'])
|
|
566
|
+
.description('Remove a locally stored DID document, its keys file, and its ' +
|
|
567
|
+
'metadata sidecar (by DID or handle)')
|
|
568
|
+
.action(async (didRef) => {
|
|
569
|
+
let did;
|
|
570
|
+
try {
|
|
571
|
+
did = await resolveDidRef({ ref: didRef });
|
|
572
|
+
}
|
|
573
|
+
catch (err) {
|
|
574
|
+
console.error(err.message);
|
|
575
|
+
process.exit(1);
|
|
576
|
+
return;
|
|
577
|
+
}
|
|
578
|
+
let didDocument;
|
|
579
|
+
try {
|
|
580
|
+
didDocument = await loadDidDocument(did ?? didRef);
|
|
581
|
+
}
|
|
582
|
+
catch {
|
|
583
|
+
console.error(`No locally stored DID found for ${didRef}`);
|
|
584
|
+
process.exit(1);
|
|
585
|
+
return;
|
|
586
|
+
}
|
|
587
|
+
const docDid = did ?? didRef;
|
|
588
|
+
// Scrub the cached key-to-DID associations of any matching wallet keys
|
|
589
|
+
// before the DID document (the source of truth) is deleted.
|
|
590
|
+
for (const method of didDocument.verificationMethod ?? []) {
|
|
591
|
+
if (method.publicKeyMultibase) {
|
|
592
|
+
await removeKeyDidAssociation({
|
|
593
|
+
publicKeyMultibase: method.publicKeyMultibase,
|
|
594
|
+
did: docDid
|
|
595
|
+
});
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
const removed = await removeDidFiles({ did: docDid });
|
|
599
|
+
for (const filePath of removed) {
|
|
600
|
+
console.error(`Removed ${filePath}`);
|
|
601
|
+
}
|
|
602
|
+
});
|
|
603
|
+
return did;
|
|
604
|
+
}
|
|
605
|
+
//# sourceMappingURL=did.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"did.js","sourceRoot":"","sources":["../../src/commands/did.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key.d.ts","sourceRoot":"","sources":["../../src/commands/key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAmGnC,wBAAgB,cAAc,IAAI,OAAO,CAkdxC"}
|