@did-btcr2/cli 0.21.0 → 0.23.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/README.md +29 -2
- package/dist/.tsbuildinfo +1 -1
- package/dist/cjs/index.js +494 -64
- package/dist/esm/src/cli.js +4 -2
- package/dist/esm/src/cli.js.map +1 -1
- package/dist/esm/src/commands/completion.js +1 -1
- package/dist/esm/src/commands/completion.js.map +1 -1
- package/dist/esm/src/commands/create.js +33 -41
- package/dist/esm/src/commands/create.js.map +1 -1
- package/dist/esm/src/commands/genesis.js +119 -0
- package/dist/esm/src/commands/genesis.js.map +1 -0
- package/dist/esm/src/commands/identifier.js +96 -0
- package/dist/esm/src/commands/identifier.js.map +1 -0
- package/dist/esm/src/commands/index.js +2 -0
- package/dist/esm/src/commands/index.js.map +1 -1
- package/dist/esm/src/commands/resolve.js +15 -1
- package/dist/esm/src/commands/resolve.js.map +1 -1
- package/dist/esm/src/commands/write.js +10 -7
- package/dist/esm/src/commands/write.js.map +1 -1
- package/dist/esm/src/genesis-document-file.js +26 -0
- package/dist/esm/src/genesis-document-file.js.map +1 -0
- package/dist/esm/src/genesis-spec.js +93 -0
- package/dist/esm/src/genesis-spec.js.map +1 -0
- package/dist/esm/src/genesis-wizard.js +132 -0
- package/dist/esm/src/genesis-wizard.js.map +1 -0
- package/dist/esm/src/hints.js +14 -3
- package/dist/esm/src/hints.js.map +1 -1
- package/dist/esm/src/network-option.js +39 -0
- package/dist/esm/src/network-option.js.map +1 -0
- package/dist/esm/src/resolution-options.js +19 -2
- package/dist/esm/src/resolution-options.js.map +1 -1
- package/dist/types/src/cli.d.ts +1 -1
- package/dist/types/src/cli.d.ts.map +1 -1
- package/dist/types/src/commands/create.d.ts +5 -4
- package/dist/types/src/commands/create.d.ts.map +1 -1
- package/dist/types/src/commands/genesis.d.ts +20 -0
- package/dist/types/src/commands/genesis.d.ts.map +1 -0
- package/dist/types/src/commands/identifier.d.ts +12 -0
- package/dist/types/src/commands/identifier.d.ts.map +1 -0
- package/dist/types/src/commands/index.d.ts +2 -0
- package/dist/types/src/commands/index.d.ts.map +1 -1
- package/dist/types/src/commands/resolve.d.ts +7 -0
- package/dist/types/src/commands/resolve.d.ts.map +1 -1
- package/dist/types/src/commands/write.d.ts +2 -1
- package/dist/types/src/commands/write.d.ts.map +1 -1
- package/dist/types/src/genesis-document-file.d.ts +11 -0
- package/dist/types/src/genesis-document-file.d.ts.map +1 -0
- package/dist/types/src/genesis-spec.d.ts +70 -0
- package/dist/types/src/genesis-spec.d.ts.map +1 -0
- package/dist/types/src/genesis-wizard.d.ts +30 -0
- package/dist/types/src/genesis-wizard.d.ts.map +1 -0
- package/dist/types/src/hints.d.ts +7 -0
- package/dist/types/src/hints.d.ts.map +1 -1
- package/dist/types/src/network-option.d.ts +15 -0
- package/dist/types/src/network-option.d.ts.map +1 -0
- package/dist/types/src/resolution-options.d.ts +6 -2
- package/dist/types/src/resolution-options.d.ts.map +1 -1
- package/dist/types/src/types.d.ts +38 -1
- package/dist/types/src/types.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/cli.ts +5 -1
- package/src/commands/completion.ts +1 -1
- package/src/commands/create.ts +39 -55
- package/src/commands/genesis.ts +149 -0
- package/src/commands/identifier.ts +134 -0
- package/src/commands/index.ts +2 -0
- package/src/commands/resolve.ts +20 -1
- package/src/commands/write.ts +10 -7
- package/src/genesis-document-file.ts +35 -0
- package/src/genesis-spec.ts +149 -0
- package/src/genesis-wizard.ts +163 -0
- package/src/hints.ts +13 -2
- package/src/network-option.ts +50 -0
- package/src/resolution-options.ts +21 -2
- package/src/types.ts +34 -2
package/dist/esm/src/cli.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DidMethodError } from '@did-btcr2/common';
|
|
2
2
|
import { Command, CommanderError } from 'commander';
|
|
3
|
-
import { registerCompletionCommand, registerConfigCommand, registerCreateCommand, registerDeactivateCommand, registerInitCommand, registerKeyCommand, registerKeystoreCommand, registerProfileCommand, registerQuickstartCommand, registerResolveCommand, registerUpdateCommand, } from './commands/index.js';
|
|
3
|
+
import { registerCompletionCommand, registerConfigCommand, registerCreateCommand, registerDeactivateCommand, registerGenesisCommand, registerIdentifierCommand, registerInitCommand, registerKeyCommand, registerKeystoreCommand, registerProfileCommand, registerQuickstartCommand, registerResolveCommand, registerUpdateCommand, } from './commands/index.js';
|
|
4
4
|
import { defaultApiFactory, keystoreApiFactory, resolveOutputFormat } from './config.js';
|
|
5
5
|
import { VERSION } from './version.js';
|
|
6
6
|
/**
|
|
@@ -17,7 +17,7 @@ export class DidBtcr2Cli {
|
|
|
17
17
|
* for known networks and localhost Polar for regtest.
|
|
18
18
|
*
|
|
19
19
|
* @param factory - Optional API factory for keystore-free commands (create,
|
|
20
|
-
* resolve). Defaults to {@link defaultApiFactory}.
|
|
20
|
+
* resolve, identifier). Defaults to {@link defaultApiFactory}.
|
|
21
21
|
* @param keystoreFactory - Optional keystore-aware API factory for commands
|
|
22
22
|
* that need a signing identity (key, update, deactivate). Defaults to
|
|
23
23
|
* {@link keystoreApiFactory}.
|
|
@@ -68,6 +68,8 @@ export class DidBtcr2Cli {
|
|
|
68
68
|
registerResolveCommand(this.program, factory, globals);
|
|
69
69
|
registerUpdateCommand(this.program, keystoreFactory, globals);
|
|
70
70
|
registerDeactivateCommand(this.program, keystoreFactory, globals);
|
|
71
|
+
registerIdentifierCommand(this.program, factory, globals);
|
|
72
|
+
registerGenesisCommand(this.program, factory, keystoreFactory, globals);
|
|
71
73
|
registerKeyCommand(this.program, keystoreFactory, globals);
|
|
72
74
|
registerKeystoreCommand(this.program, globals);
|
|
73
75
|
registerConfigCommand(this.program, globals);
|
package/dist/esm/src/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CLIError } from '../error.js';
|
|
2
|
-
const COMMANDS = 'create resolve read update deactivate delete key config profile completion';
|
|
2
|
+
const COMMANDS = 'create resolve read update deactivate delete identifier genesis key config profile completion';
|
|
3
3
|
/** Registers the `completion` command, which prints a shell completion script to stdout. */
|
|
4
4
|
export function registerCompletionCommand(program, _globals) {
|
|
5
5
|
program
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"completion.js","sourceRoot":"","sources":["../../../../src/commands/completion.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,MAAM,QAAQ,GAAG,
|
|
1
|
+
{"version":3,"file":"completion.js","sourceRoot":"","sources":["../../../../src/commands/completion.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,MAAM,QAAQ,GAAG,+FAA+F,CAAC;AAEjH,4FAA4F;AAC5F,MAAM,UAAU,yBAAyB,CAAC,OAAgB,EAAE,QAA6B;IACvF,OAAO;SACJ,OAAO,CAAC,oBAAoB,CAAC;SAC7B,WAAW,CAAC,iEAAiE,CAAC;SAC9E,MAAM,CAAC,CAAC,KAAK,GAAG,MAAM,EAAE,EAAE;QACzB,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACP,CAAC;AAED,uDAAuD;AACvD,SAAS,gBAAgB,CAAC,KAAa;IACrC,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,MAAM;YACT,OAAO;gBACL,wEAAwE;gBACxE,uCAAuC,GAAG,QAAQ,GAAG,wCAAwC;gBAC7F,0BAA0B;aAC3B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACf,KAAK,KAAK;YACR,OAAO;gBACL,sEAAsE;gBACtE,qBAAqB,GAAG,QAAQ,GAAG,IAAI;gBACvC,sBAAsB;aACvB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACf,KAAK,MAAM;YACT,OAAO;gBACL,wEAAwE;gBACxE,2BAA2B,GAAG,QAAQ,GAAG,GAAG;aAC7C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACf;YACE,MAAM,IAAI,QAAQ,CAAC,sBAAsB,KAAK,4BAA4B,EAAE,wBAAwB,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IACrH,CAAC;AACH,CAAC"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { bytesToHex, hexToBytes } from '@noble/hashes/utils.js';
|
|
2
|
-
import { assertKeystoreAllowedForNetwork
|
|
2
|
+
import { assertKeystoreAllowedForNetwork } from '../config.js';
|
|
3
3
|
import { CLIError } from '../error.js';
|
|
4
|
-
import {
|
|
4
|
+
import { readGenesisDocumentFile } from '../genesis-document-file.js';
|
|
5
|
+
import { printBeaconFundingHint, printCreateFundingHint } from '../hints.js';
|
|
5
6
|
import { resolveKeyRef } from '../keystore/resolve-key-ref.js';
|
|
7
|
+
import { NETWORK_OPTION_HELP, overridesFromGlobals, resolveNetworkOption, warnProfileNetworkMismatch } from '../network-option.js';
|
|
6
8
|
import { formatResult } from '../output.js';
|
|
7
|
-
import { SUPPORTED_NETWORKS } from '../types.js';
|
|
8
9
|
/** Expected byte length per identifier type: compressed secp256k1 = 33, SHA-256 hash = 32. */
|
|
9
10
|
const EXPECTED_BYTES = {
|
|
10
11
|
k: { length: 33, label: 'secp256k1 compressed public key (33 bytes)' },
|
|
@@ -22,59 +23,69 @@ const EXPECTED_BYTES = {
|
|
|
22
23
|
* genesis bytes. Reading a public key never decrypts, so this never prompts.
|
|
23
24
|
* - raw (`--bytes <hex>`): a 33-byte public key as hex. Offline, keystore-free.
|
|
24
25
|
*
|
|
25
|
-
* An external (`-t x`) identifier
|
|
26
|
-
*
|
|
26
|
+
* An external (`-t x`) identifier has two input modes: the genesis document
|
|
27
|
+
* file (`--document <path>`), which the api hashes, or the 32-byte hash as
|
|
28
|
+
* hex (`--bytes`). Generation and `--signing-key` apply only to `-t k`.
|
|
27
29
|
*
|
|
28
|
-
* The keystore-free `factory` serves the raw-bytes
|
|
29
|
-
* `keystoreFactory` serves the generate and existing-key paths.
|
|
30
|
+
* The keystore-free `factory` serves the raw-bytes and document paths; the
|
|
31
|
+
* keystore-aware `keystoreFactory` serves the generate and existing-key paths.
|
|
30
32
|
*/
|
|
31
33
|
export function registerCreateCommand(program, factory, keystoreFactory, globals) {
|
|
32
34
|
program
|
|
33
35
|
.command('create')
|
|
34
36
|
.description('Create an identifier and initial DID document')
|
|
35
37
|
.option('-t, --type <type>', 'Identifier type <k|x>', 'k')
|
|
36
|
-
.option('-n, --network <network>',
|
|
37
|
-
+ '(default: config defaults.network, else regtest)')
|
|
38
|
+
.option('-n, --network <network>', NETWORK_OPTION_HELP)
|
|
38
39
|
.option('-b, --bytes <bytes>', 'Genesis bytes as a hex string. '
|
|
39
40
|
+ 'For type=k, a 33-byte secp256k1 public key (omit to generate a key). '
|
|
40
41
|
+ 'For type=x, the 32-byte SHA-256 hash of a genesis document.')
|
|
42
|
+
.option('--document <path>', 'For type=x, the path of the JSON genesis document to hash (see "btcr2 genesis build"). '
|
|
43
|
+
+ 'Exclusive with --bytes.')
|
|
41
44
|
.action(async (options) => {
|
|
42
45
|
const g = globals();
|
|
43
46
|
if (options.type !== 'k' && options.type !== 'x') {
|
|
44
47
|
throw new CLIError('Invalid type. Must be "k" or "x".', 'INVALID_ARGUMENT_ERROR', options);
|
|
45
48
|
}
|
|
46
49
|
const overrides = overridesFromGlobals(g);
|
|
47
|
-
const network =
|
|
50
|
+
const network = resolveNetworkOption(options.network, overrides);
|
|
48
51
|
const signingKey = g.signingKey;
|
|
49
|
-
|
|
50
|
-
// active profile's declared network, so a `production` profile holding
|
|
51
|
-
// mainnet endpoints cannot silently mint a regtest DID.
|
|
52
|
-
const mismatch = profileNetworkMismatch(network, overrides);
|
|
53
|
-
if (mismatch && !g.quiet) {
|
|
54
|
-
process.stderr.write(`Warning: creating a "${network}" identifier while the active profile `
|
|
55
|
-
+ `"${mismatch.profile}" declares network "${mismatch.declared}". The `
|
|
56
|
-
+ 'identifier\'s network and the profile\'s endpoints may not match.\n');
|
|
57
|
-
}
|
|
52
|
+
warnProfileNetworkMismatch(g, network, overrides);
|
|
58
53
|
/** Prints the result, plus a stderr provenance line in text mode. */
|
|
59
54
|
const print = (result, note) => {
|
|
60
55
|
console.log(formatResult(result, g));
|
|
61
56
|
if (note && g.output !== 'json')
|
|
62
57
|
process.stderr.write(`${note}\n`);
|
|
63
58
|
};
|
|
64
|
-
// External: raw
|
|
59
|
+
// External: the genesis document file, or its hash as raw bytes.
|
|
65
60
|
if (options.type === 'x') {
|
|
66
61
|
if (signingKey) {
|
|
67
62
|
throw new CLIError('--signing-key applies only to deterministic identifiers (-t k).', 'INVALID_ARGUMENT_ERROR');
|
|
68
63
|
}
|
|
64
|
+
if (options.bytes !== undefined && options.document !== undefined) {
|
|
65
|
+
throw new CLIError('Provide at most one of --bytes or --document.', 'INVALID_ARGUMENT_ERROR');
|
|
66
|
+
}
|
|
67
|
+
if (options.document !== undefined) {
|
|
68
|
+
const genesisDocument = await readGenesisDocumentFile(options.document);
|
|
69
|
+
const api = factory();
|
|
70
|
+
const { did, genesisBytes, didDocument } = api.btcr2.createExternalFromDocument(genesisDocument, { network });
|
|
71
|
+
print({ action: 'create', data: did, genesisBytes: bytesToHex(genesisBytes) });
|
|
72
|
+
const beacons = api.btcr2.getBeacons(didDocument);
|
|
73
|
+
if (beacons.length > 0)
|
|
74
|
+
printBeaconFundingHint(g, network, beacons[0].address);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
69
77
|
if (options.bytes === undefined) {
|
|
70
|
-
throw new CLIError('External identifiers (-t x) require --
|
|
71
|
-
+ 'Key generation is only available for -t k.', 'INVALID_ARGUMENT_ERROR');
|
|
78
|
+
throw new CLIError('External identifiers (-t x) require --document <path>, the genesis document, '
|
|
79
|
+
+ 'or --bytes <hex>, its 32-byte hash. Key generation is only available for -t k.', 'INVALID_ARGUMENT_ERROR');
|
|
72
80
|
}
|
|
73
81
|
const genesisBytes = parseGenesisBytes(options.bytes, 'x');
|
|
74
82
|
const did = factory().createDid('external', genesisBytes, { network });
|
|
75
83
|
print({ action: 'create', data: did });
|
|
76
84
|
return;
|
|
77
85
|
}
|
|
86
|
+
if (options.document !== undefined) {
|
|
87
|
+
throw new CLIError('--document applies only to external identifiers (-t x).', 'INVALID_ARGUMENT_ERROR');
|
|
88
|
+
}
|
|
78
89
|
// Deterministic (KEY): three mutually-exclusive modes.
|
|
79
90
|
if (options.bytes !== undefined && signingKey) {
|
|
80
91
|
throw new CLIError('Provide at most one of --bytes or --signing-key.', 'INVALID_ARGUMENT_ERROR');
|
|
@@ -107,25 +118,6 @@ export function registerCreateCommand(program, factory, keystoreFactory, globals
|
|
|
107
118
|
printCreateFundingHint(g, network, did);
|
|
108
119
|
});
|
|
109
120
|
}
|
|
110
|
-
/** Builds the keystore- and config-resolution overrides from the global flags. */
|
|
111
|
-
function overridesFromGlobals(g) {
|
|
112
|
-
return {
|
|
113
|
-
home: g.home,
|
|
114
|
-
config: g.config,
|
|
115
|
-
profile: g.profile,
|
|
116
|
-
keystore: g.keystore,
|
|
117
|
-
passphraseFile: g.passphraseFile,
|
|
118
|
-
};
|
|
119
|
-
}
|
|
120
|
-
/** Validates an explicit `--network`, or resolves the default from configuration. */
|
|
121
|
-
function resolveNetwork(explicit, overrides) {
|
|
122
|
-
if (!explicit)
|
|
123
|
-
return resolveDefaultNetwork(overrides);
|
|
124
|
-
if (!SUPPORTED_NETWORKS.includes(explicit)) {
|
|
125
|
-
throw new CLIError('Invalid network. Must be one of "bitcoin", "testnet3", "testnet4", "signet", "mutinynet", or "regtest".', 'INVALID_ARGUMENT_ERROR', { network: explicit });
|
|
126
|
-
}
|
|
127
|
-
return explicit;
|
|
128
|
-
}
|
|
129
121
|
/** Parses and length-checks hex genesis bytes for the given identifier type. */
|
|
130
122
|
function parseGenesisBytes(hex, type) {
|
|
131
123
|
const expected = EXPECTED_BYTES[type];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../../src/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGhE,OAAO,EAAE,+BAA+B,EAAE,
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../../src/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGhE,OAAO,EAAE,+BAA+B,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AACnI,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C,8FAA8F;AAC9F,MAAM,cAAc,GAAyD;IAC3E,CAAC,EAAG,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,4CAA4C,EAAE;IACvE,CAAC,EAAG,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,yBAAyB,EAAE;CACrD,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAAyB,EACzB,OAA4B,EAC5B,eAA4B,EAC5B,OAAqC;IAErC,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,+CAA+C,CAAC;SAC5D,MAAM,CAAC,mBAAmB,EAAE,uBAAuB,EAAE,GAAG,CAAC;SACzD,MAAM,CAAC,yBAAyB,EAAE,mBAAmB,CAAC;SACtD,MAAM,CACL,qBAAqB,EACrB,iCAAiC;UAC/B,uEAAuE;UACvE,6DAA6D,CAChE;SACA,MAAM,CACL,mBAAmB,EACnB,yFAAyF;UACvF,yBAAyB,CAC5B;SACA,MAAM,CAAC,KAAK,EAAE,OAA8E,EAAE,EAAE;QAC/F,MAAM,CAAC,GAAG,OAAO,EAAE,CAAC;QACpB,IAAI,OAAO,CAAC,IAAI,KAAK,GAAG,IAAI,OAAO,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;YACjD,MAAM,IAAI,QAAQ,CAAC,mCAAmC,EAAE,wBAAwB,EAAE,OAAO,CAAC,CAAC;QAC7F,CAAC;QAED,MAAM,SAAS,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,oBAAoB,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACjE,MAAM,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC;QAChC,0BAA0B,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QAElD,qEAAqE;QACrE,MAAM,KAAK,GAAG,CAAC,MAAqB,EAAE,IAAa,EAAQ,EAAE;YAC3D,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;YACrC,IAAI,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM;gBAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;QACrE,CAAC,CAAC;QAEF,iEAAiE;QACjE,IAAI,OAAO,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;YACzB,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,IAAI,QAAQ,CAChB,iEAAiE,EACjE,wBAAwB,CACzB,CAAC;YACJ,CAAC;YACD,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAClE,MAAM,IAAI,QAAQ,CAAC,+CAA+C,EAAE,wBAAwB,CAAC,CAAC;YAChG,CAAC;YACD,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBACnC,MAAM,eAAe,GAAG,MAAM,uBAAuB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACxE,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;gBACtB,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,0BAA0B,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;gBAC9G,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,YAAY,EAAE,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;gBAC/E,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;gBAClD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;oBAAE,sBAAsB,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;gBAC/E,OAAO;YACT,CAAC;YACD,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBAChC,MAAM,IAAI,QAAQ,CAChB,+EAA+E;sBAC7E,gFAAgF,EAClF,wBAAwB,CACzB,CAAC;YACJ,CAAC;YACD,MAAM,YAAY,GAAG,iBAAiB,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC3D,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YACvE,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;YACvC,OAAO;QACT,CAAC;QAED,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACnC,MAAM,IAAI,QAAQ,CAAC,yDAAyD,EAAE,wBAAwB,CAAC,CAAC;QAC1G,CAAC;QAED,uDAAuD;QACvD,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,UAAU,EAAE,CAAC;YAC9C,MAAM,IAAI,QAAQ,CAChB,kDAAkD,EAClD,wBAAwB,CACzB,CAAC;QACJ,CAAC;QAED,qCAAqC;QACrC,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAChC,MAAM,YAAY,GAAG,iBAAiB,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC3D,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC,SAAS,CAAC,eAAe,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAC5E,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;YACvC,sBAAsB,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;YACxC,OAAO;QACT,CAAC;QAED,8EAA8E;QAC9E,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,eAAe,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAClD,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;YACrD,MAAM,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAC9C,MAAM,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YACnE,KAAK,CACH,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,EACxE,oBAAoB,KAAK,GAAG,CAC7B,CAAC;YACF,sBAAsB,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;YACxC,OAAO;QACT,CAAC;QAED,iFAAiF;QACjF,iFAAiF;QACjF,+BAA+B,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACpD,MAAM,GAAG,GAAG,eAAe,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAClD,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACrE,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1D,KAAK,CACH,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,EACjD,4BAA4B,KAAK,wBAAwB,CAC1D,CAAC;QACF,sBAAsB,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACP,CAAC;AAED,gFAAgF;AAChF,SAAS,iBAAiB,CAAC,GAAW,EAAE,IAAe;IACrD,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,KAAiB,CAAC;IACtB,IAAI,CAAC;QACH,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,QAAQ,CAChB,0CAA0C,QAAQ,CAAC,KAAK,GAAG,EAC3D,wBAAwB,EACxB,EAAE,KAAK,EAAE,GAAG,EAAE,CACf,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;QACrC,MAAM,IAAI,QAAQ,CAChB,kCAAkC,IAAI,eAAe,QAAQ,CAAC,KAAK,SAAS,KAAK,CAAC,MAAM,SAAS,EACjG,wBAAwB,EACxB,EAAE,KAAK,EAAE,GAAG,EAAE,CACf,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { bytesToHex } from '@noble/hashes/utils.js';
|
|
2
|
+
import { existsSync } from 'node:fs';
|
|
3
|
+
import { readFile, writeFile } from 'node:fs/promises';
|
|
4
|
+
import { resolve as resolvePath } from 'node:path';
|
|
5
|
+
import { createInterface } from 'node:readline/promises';
|
|
6
|
+
import { CLIError } from '../error.js';
|
|
7
|
+
import { parseGenesisSpec, toApiSpec } from '../genesis-spec.js';
|
|
8
|
+
import { collectGenesisSpec } from '../genesis-wizard.js';
|
|
9
|
+
import { printBeaconFundingHint } from '../hints.js';
|
|
10
|
+
import { resolveKeyRef } from '../keystore/resolve-key-ref.js';
|
|
11
|
+
import { NETWORK_OPTION_HELP, overridesFromGlobals, resolveNetworkOption, warnProfileNetworkMismatch } from '../network-option.js';
|
|
12
|
+
import { formatResult } from '../output.js';
|
|
13
|
+
/** The default path of the genesis document that `genesis build` writes. */
|
|
14
|
+
export const DEFAULT_GENESIS_PATH = 'genesis.json';
|
|
15
|
+
/**
|
|
16
|
+
* Registers the `genesis` command group. `genesis build` builds the genesis
|
|
17
|
+
* document of an external (`x`) identifier, writes it to a file, and prints
|
|
18
|
+
* the identifier. On a terminal the command asks for the keys, the beacons,
|
|
19
|
+
* and the services. With `--spec <path>` it reads them from a JSON file and
|
|
20
|
+
* asks nothing. The command is offline: it derives the beacon addresses from
|
|
21
|
+
* the keys and opens no Bitcoin connection.
|
|
22
|
+
*
|
|
23
|
+
* The keystore-free `factory` builds the document; the keystore-aware
|
|
24
|
+
* `keystoreFactory` resolves key references and lists the keys for the
|
|
25
|
+
* wizard. Reading a public key never decrypts, so the command never prompts
|
|
26
|
+
* for the passphrase.
|
|
27
|
+
*/
|
|
28
|
+
export function registerGenesisCommand(program, factory, keystoreFactory, globals) {
|
|
29
|
+
const genesis = program
|
|
30
|
+
.command('genesis')
|
|
31
|
+
.description('Build the genesis document of an external identifier (offline).');
|
|
32
|
+
const print = (result) => console.log(formatResult(result, globals()));
|
|
33
|
+
genesis
|
|
34
|
+
.command('build')
|
|
35
|
+
.description('Build a genesis document, write it to a file, and print the external identifier.')
|
|
36
|
+
.option('-n, --network <network>', NETWORK_OPTION_HELP)
|
|
37
|
+
.option('--spec <path>', 'Path to a JSON spec file with the keys, beacons, and services. Runs without prompts.')
|
|
38
|
+
.option('--out <path>', 'Path of the genesis document to write.', DEFAULT_GENESIS_PATH)
|
|
39
|
+
.option('--force', 'Overwrite an existing --out file.', false)
|
|
40
|
+
.action(async (options) => {
|
|
41
|
+
const g = globals();
|
|
42
|
+
const overrides = overridesFromGlobals(g);
|
|
43
|
+
const network = resolveNetworkOption(options.network, overrides);
|
|
44
|
+
warnProfileNetworkMismatch(g, network, overrides);
|
|
45
|
+
// Refuse to overwrite before any question is asked.
|
|
46
|
+
const outPath = resolvePath(options.out);
|
|
47
|
+
if (!options.force && existsSync(outPath)) {
|
|
48
|
+
throw new CLIError(`The file ${outPath} exists. Pass --force to overwrite it, or --out <path> for another file.`, 'INVALID_ARGUMENT_ERROR', { out: outPath });
|
|
49
|
+
}
|
|
50
|
+
// The keystore opens only when a key reference or the wizard needs it.
|
|
51
|
+
let keystoreApi;
|
|
52
|
+
const kms = () => (keystoreApi ??= keystoreFactory(undefined, overrides)).kms.kms;
|
|
53
|
+
const resolvePublicKey = (ref) => kms().getPublicKey(resolveKeyRef(kms(), ref));
|
|
54
|
+
const spec = options.spec !== undefined
|
|
55
|
+
? await readSpecFile(options.spec)
|
|
56
|
+
: await runWizard(kms);
|
|
57
|
+
const api = factory();
|
|
58
|
+
const document = api.btcr2.buildGenesisDocument(toApiSpec(spec, network, resolvePublicKey));
|
|
59
|
+
// Hash exactly the bytes that the file carries: the parsed form of the
|
|
60
|
+
// pretty-printed JSON, not the document instance.
|
|
61
|
+
const json = `${JSON.stringify(document, null, 2)}\n`;
|
|
62
|
+
const { did, genesisBytes, didDocument } = api.btcr2.createExternalFromDocument(JSON.parse(json), { network });
|
|
63
|
+
await writeFile(outPath, json, { encoding: 'utf-8', flag: options.force ? 'w' : 'wx' });
|
|
64
|
+
const beacons = api.btcr2.getBeacons(didDocument);
|
|
65
|
+
print({
|
|
66
|
+
action: 'genesis-build',
|
|
67
|
+
data: { did, network, genesisBytes: bytesToHex(genesisBytes), path: outPath, beacons },
|
|
68
|
+
});
|
|
69
|
+
if (!g.quiet && g.output !== 'json') {
|
|
70
|
+
process.stderr.write(`Wrote the genesis document to ${outPath}. Keep it: the identifier resolves only with it. `
|
|
71
|
+
+ 'Pass --genesis-document <path> to resolve, update, and deactivate, or publish it to a CAS.\n');
|
|
72
|
+
if (beacons.length > 0)
|
|
73
|
+
printBeaconFundingHint(g, network, beacons[0].address);
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
/** Reads and checks the spec file. */
|
|
78
|
+
async function readSpecFile(path) {
|
|
79
|
+
let parsed;
|
|
80
|
+
try {
|
|
81
|
+
parsed = JSON.parse(await readFile(path, 'utf-8'));
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
throw new CLIError('Invalid genesis spec path. Must be a valid path to a JSON file.', 'INVALID_ARGUMENT_ERROR', { spec: path });
|
|
85
|
+
}
|
|
86
|
+
return parseGenesisSpec(parsed, path);
|
|
87
|
+
}
|
|
88
|
+
/** Runs the wizard on the terminal. Refuses without one. */
|
|
89
|
+
async function runWizard(kms) {
|
|
90
|
+
if (!process.stdin.isTTY) {
|
|
91
|
+
throw new CLIError('No terminal is attached. Pass --spec <path> to build the genesis document without prompts.', 'INVALID_ARGUMENT_ERROR');
|
|
92
|
+
}
|
|
93
|
+
const store = kms();
|
|
94
|
+
const rl = createInterface({ input: process.stdin, output: process.stderr });
|
|
95
|
+
try {
|
|
96
|
+
return await collectGenesisSpec((question) => rl.question(question), {
|
|
97
|
+
say: (line) => process.stderr.write(`${line}\n`),
|
|
98
|
+
keys: listKeys(store),
|
|
99
|
+
resolveKey: (ref) => resolveKeyRef(store, ref),
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
finally {
|
|
103
|
+
rl.close();
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/** The keys of the keystore in the shape that `key list` prints. */
|
|
107
|
+
function listKeys(kms) {
|
|
108
|
+
const active = kms.activeKeyId;
|
|
109
|
+
return kms.listKeys().map(id => {
|
|
110
|
+
const entry = kms.getEntry(id);
|
|
111
|
+
return {
|
|
112
|
+
keyId: id,
|
|
113
|
+
fingerprint: id.split(':').pop() ?? id,
|
|
114
|
+
...(entry.tags?.name && { name: entry.tags.name }),
|
|
115
|
+
active: id === active,
|
|
116
|
+
};
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=genesis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"genesis.js","sourceRoot":"","sources":["../../../../src/commands/genesis.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { Identifier } from '@did-btcr2/api';
|
|
2
|
+
import { bytesToHex, hexToBytes } from '@noble/hashes/utils.js';
|
|
3
|
+
import { CLIError } from '../error.js';
|
|
4
|
+
import { readGenesisDocumentFile } from '../genesis-document-file.js';
|
|
5
|
+
import { formatResult } from '../output.js';
|
|
6
|
+
/**
|
|
7
|
+
* Registers the `identifier` command group. `decode` prints the components of
|
|
8
|
+
* a did:btcr2 identifier. `validate` checks that an identifier conforms to the
|
|
9
|
+
* specification and prints a report. Both commands are offline and
|
|
10
|
+
* keystore-free: they use the api with no Bitcoin connection, no CAS, and no
|
|
11
|
+
* key material.
|
|
12
|
+
*/
|
|
13
|
+
export function registerIdentifierCommand(program, factory, globals) {
|
|
14
|
+
const identifier = program
|
|
15
|
+
.command('identifier')
|
|
16
|
+
.description('Decode and validate did:btcr2 identifiers (offline).');
|
|
17
|
+
const print = (result) => console.log(formatResult(result, globals()));
|
|
18
|
+
identifier
|
|
19
|
+
.command('decode <did>')
|
|
20
|
+
.description('Print the components of a did:btcr2 identifier.')
|
|
21
|
+
.option('--initial-document', 'Add the initial DID document. An external identifier (x) needs --genesis-document.', false)
|
|
22
|
+
.option('--genesis-document <path>', 'Path to the JSON genesis document of an external identifier (x). Requires --initial-document.')
|
|
23
|
+
.action(async (did, options) => {
|
|
24
|
+
if (options.genesisDocument !== undefined && !options.initialDocument) {
|
|
25
|
+
throw new CLIError('--genesis-document requires --initial-document.', 'INVALID_ARGUMENT_ERROR');
|
|
26
|
+
}
|
|
27
|
+
assertValidIdentifier(did);
|
|
28
|
+
const api = factory();
|
|
29
|
+
const components = api.did.decode(did);
|
|
30
|
+
if (options.genesisDocument !== undefined && components.hrp === 'k') {
|
|
31
|
+
throw new CLIError('--genesis-document applies only to external identifiers (x).', 'INVALID_ARGUMENT_ERROR', { did });
|
|
32
|
+
}
|
|
33
|
+
const data = {
|
|
34
|
+
did,
|
|
35
|
+
idType: components.idType,
|
|
36
|
+
hrp: components.hrp,
|
|
37
|
+
version: components.version,
|
|
38
|
+
network: components.network,
|
|
39
|
+
genesisBytes: bytesToHex(components.genesisBytes),
|
|
40
|
+
};
|
|
41
|
+
if (options.initialDocument) {
|
|
42
|
+
if (components.hrp === 'x' && options.genesisDocument === undefined) {
|
|
43
|
+
throw new CLIError('An external identifier (x) needs --genesis-document <path> for --initial-document.', 'INVALID_ARGUMENT_ERROR', { did });
|
|
44
|
+
}
|
|
45
|
+
const genesisDocument = options.genesisDocument === undefined
|
|
46
|
+
? undefined
|
|
47
|
+
: await readGenesisDocumentFile(options.genesisDocument);
|
|
48
|
+
data.initialDocument = api.btcr2.getInitialDocument(did, genesisDocument);
|
|
49
|
+
}
|
|
50
|
+
print({ action: 'identifier-decode', data });
|
|
51
|
+
});
|
|
52
|
+
identifier
|
|
53
|
+
.command('validate <did>')
|
|
54
|
+
.description('Check that a did:btcr2 identifier conforms to the specification. Exit code 1 if it does not.')
|
|
55
|
+
.option('-b, --bytes <hex>', 'Genesis bytes as a hex string that the identifier must encode: the 33-byte public key (k) '
|
|
56
|
+
+ 'or the 32-byte genesis document hash (x). Adds the genesisBytesMatch check.')
|
|
57
|
+
.option('--genesis-document <path>', 'Path to the JSON genesis document of an external identifier (x). Adds the genesisDocument check.')
|
|
58
|
+
.action(async (did, options) => {
|
|
59
|
+
const genesisBytes = options.bytes === undefined ? undefined : parseHexBytes(options.bytes);
|
|
60
|
+
let genesisDocument;
|
|
61
|
+
if (options.genesisDocument !== undefined) {
|
|
62
|
+
// Refuse the flag for a KEY identifier before the file read. An invalid
|
|
63
|
+
// identifier passes through: the report names its failed check.
|
|
64
|
+
if (Identifier.isValid(did) && Identifier.decode(did).hrp === 'k') {
|
|
65
|
+
throw new CLIError('--genesis-document applies only to external identifiers (x).', 'INVALID_ARGUMENT_ERROR', { did });
|
|
66
|
+
}
|
|
67
|
+
genesisDocument = await readGenesisDocumentFile(options.genesisDocument);
|
|
68
|
+
}
|
|
69
|
+
const report = factory().did.validate(did, { genesisBytes, genesisDocument });
|
|
70
|
+
print({ action: 'identifier-validate', data: report });
|
|
71
|
+
if (!report.valid)
|
|
72
|
+
process.exitCode = 1;
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Throws a `CLIError` that names the failed check if the identifier is not
|
|
77
|
+
* valid. The Bech32m decoder alone throws a raw error with a stack; this
|
|
78
|
+
* guard gives `decode` one message shape for every failure.
|
|
79
|
+
*/
|
|
80
|
+
function assertValidIdentifier(did) {
|
|
81
|
+
const report = Identifier.validate(did);
|
|
82
|
+
if (report.valid)
|
|
83
|
+
return;
|
|
84
|
+
const failed = report.checks[report.checks.length - 1];
|
|
85
|
+
throw new CLIError(`Invalid identifier (${failed.name} check): ${failed.detail ?? 'failed'}`, 'INVALID_ARGUMENT_ERROR', { did, check: failed.name });
|
|
86
|
+
}
|
|
87
|
+
/** Parses the `--bytes` hex string. The length is a validation result, not an argument error. */
|
|
88
|
+
function parseHexBytes(value) {
|
|
89
|
+
try {
|
|
90
|
+
return hexToBytes(value.trim());
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
throw new CLIError('Invalid bytes: not valid hex.', 'INVALID_ARGUMENT_ERROR', { bytes: value });
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=identifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identifier.js","sourceRoot":"","sources":["../../../../src/commands/identifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,8 @@ export { registerCreateCommand } from './create.js';
|
|
|
4
4
|
export { registerResolveCommand } from './resolve.js';
|
|
5
5
|
export { registerUpdateCommand } from './update.js';
|
|
6
6
|
export { registerDeactivateCommand } from './deactivate.js';
|
|
7
|
+
export { registerIdentifierCommand } from './identifier.js';
|
|
8
|
+
export { registerGenesisCommand } from './genesis.js';
|
|
7
9
|
export { registerKeyCommand } from './key.js';
|
|
8
10
|
export { registerKeystoreCommand } from './keystore.js';
|
|
9
11
|
export { registerConfigCommand } from './config.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { Identifier } from '@did-btcr2/api';
|
|
2
2
|
import { deriveNetwork } from '../config.js';
|
|
3
|
+
import { CLIError } from '../error.js';
|
|
4
|
+
import { GENESIS_DOCUMENT_HELP } from '../genesis-document-file.js';
|
|
3
5
|
import { formatResult } from '../output.js';
|
|
4
6
|
import { MIN_CONF_HELP, parseMinConf, readResolutionOptions } from '../resolution-options.js';
|
|
5
7
|
export function registerResolveCommand(program, factory, globals) {
|
|
@@ -11,6 +13,7 @@ export function registerResolveCommand(program, factory, globals) {
|
|
|
11
13
|
.option('-r, --resolution-options <json>', 'JSON string containing resolution options')
|
|
12
14
|
.option('-p, --resolution-options-path <path>', 'Path to a JSON file containing resolution options')
|
|
13
15
|
.option('--min-conf <n>', MIN_CONF_HELP, parseMinConf)
|
|
16
|
+
.option('--genesis-document <path>', GENESIS_DOCUMENT_HELP)
|
|
14
17
|
.action(async (options) => {
|
|
15
18
|
const parsed = await validateResolveOptions(options);
|
|
16
19
|
const network = deriveNetwork(parsed.identifier);
|
|
@@ -22,8 +25,19 @@ export function registerResolveCommand(program, factory, globals) {
|
|
|
22
25
|
}
|
|
23
26
|
async function validateResolveOptions(options) {
|
|
24
27
|
// Validate identifier format early
|
|
25
|
-
Identifier.decode(options.identifier);
|
|
28
|
+
const components = Identifier.decode(options.identifier);
|
|
29
|
+
assertGenesisDocumentApplies(options, components.hrp);
|
|
26
30
|
const resolutionOptions = await readResolutionOptions(options);
|
|
27
31
|
return { identifier: options.identifier, options: resolutionOptions };
|
|
28
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* Refuses `--genesis-document` for a KEY identifier before the file is read.
|
|
35
|
+
* A KEY identifier has no genesis document; the resolver would ignore the
|
|
36
|
+
* file in silence. `resolve`, `update`, and `deactivate` share the check.
|
|
37
|
+
*/
|
|
38
|
+
export function assertGenesisDocumentApplies(flags, hrp) {
|
|
39
|
+
if (flags.genesisDocument !== undefined && hrp === 'k') {
|
|
40
|
+
throw new CLIError('--genesis-document applies only to external identifiers (x).', 'INVALID_ARGUMENT_ERROR', { genesisDocument: flags.genesisDocument });
|
|
41
|
+
}
|
|
42
|
+
}
|
|
29
43
|
//# sourceMappingURL=resolve.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../../../src/commands/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAmB,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,qBAAqB,EAA8B,MAAM,0BAA0B,CAAC;AAG1H,MAAM,UAAU,sBAAsB,CACpC,OAAiB,EACjB,OAAoB,EACpB,OAA6B;IAE7B,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,KAAK,CAAC,MAAM,CAAC;SACb,WAAW,CAAC,6CAA6C,CAAC;SAC1D,cAAc,CAAC,+BAA+B,EAAE,sBAAsB,CAAC;SACvE,MAAM,CAAC,iCAAiC,EAAE,2CAA2C,CAAC;SACtF,MAAM,CAAC,sCAAsC,EAAE,mDAAmD,CAAC;SACnG,MAAM,CAAC,gBAAgB,EAAE,aAAa,EAAE,YAAY,CAAC;SACrD,MAAM,CAAC,KAAK,EAAE,OAAuD,EAAE,EAAE;QACxE,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACjD,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,EAAE,MAAM,EAAE,SAAkB,EAAE,IAAI,EAAE,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;AACP,CAAC;AAED,KAAK,UAAU,sBAAsB,CACnC,OAAuD;IAEvD,mCAAmC;IACnC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../../../src/commands/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAmB,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,qBAAqB,EAA8B,MAAM,0BAA0B,CAAC;AAG1H,MAAM,UAAU,sBAAsB,CACpC,OAAiB,EACjB,OAAoB,EACpB,OAA6B;IAE7B,OAAO;SACJ,OAAO,CAAC,SAAS,CAAC;SAClB,KAAK,CAAC,MAAM,CAAC;SACb,WAAW,CAAC,6CAA6C,CAAC;SAC1D,cAAc,CAAC,+BAA+B,EAAE,sBAAsB,CAAC;SACvE,MAAM,CAAC,iCAAiC,EAAE,2CAA2C,CAAC;SACtF,MAAM,CAAC,sCAAsC,EAAE,mDAAmD,CAAC;SACnG,MAAM,CAAC,gBAAgB,EAAE,aAAa,EAAE,YAAY,CAAC;SACrD,MAAM,CAAC,2BAA2B,EAAE,qBAAqB,CAAC;SAC1D,MAAM,CAAC,KAAK,EAAE,OAAuD,EAAE,EAAE;QACxE,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACjD,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,EAAE,MAAM,EAAE,SAAkB,EAAE,IAAI,EAAE,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;AACP,CAAC;AAED,KAAK,UAAU,sBAAsB,CACnC,OAAuD;IAEvD,mCAAmC;IACnC,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACzD,4BAA4B,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;IACtD,MAAM,iBAAiB,GAAG,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/D,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC;AACxE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,4BAA4B,CAAC,KAA4B,EAAE,GAAW;IACpF,IAAI,KAAK,CAAC,eAAe,KAAK,SAAS,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;QACvD,MAAM,IAAI,QAAQ,CAChB,8DAA8D,EAC9D,wBAAwB,EACxB,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE,CAC3C,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { KeyManagerSigner } from '@did-btcr2/key-manager';
|
|
2
2
|
import { assertKeystoreAllowedForNetwork, deriveNetwork, resolveBroadcastOptions, resolveSigningKeyRef, } from '../config.js';
|
|
3
|
+
import { Identifier } from '@did-btcr2/api';
|
|
3
4
|
import { CLIError } from '../error.js';
|
|
5
|
+
import { GENESIS_DOCUMENT_HELP } from '../genesis-document-file.js';
|
|
4
6
|
import { resolveKeyRef } from '../keystore/resolve-key-ref.js';
|
|
5
|
-
import { MIN_CONF_HELP, parseMinConf, readResolutionOptions } from '../resolution-options.js';
|
|
7
|
+
import { hasResolutionFlags, MIN_CONF_HELP, parseMinConf, readResolutionOptions } from '../resolution-options.js';
|
|
8
|
+
import { assertGenesisDocumentApplies } from './resolve.js';
|
|
6
9
|
/**
|
|
7
10
|
* Registers the flags that `update` and `deactivate` share. Each command
|
|
8
11
|
* registers `-i/--identifier` (and `update` its `-p/--patches`) before it
|
|
@@ -20,6 +23,7 @@ export function registerWriteOptions(command) {
|
|
|
20
23
|
.option('-r, --resolution-options <json>', 'Resolution options as a JSON string, for the resolution of the source document')
|
|
21
24
|
.option('--resolution-options-path <path>', 'Path to a JSON file with resolution options, for the resolution of the source document')
|
|
22
25
|
.option('--min-conf <n>', MIN_CONF_HELP, parseMinConf)
|
|
26
|
+
.option('--genesis-document <path>', `${GENESIS_DOCUMENT_HELP}, for the resolution of the source document`)
|
|
23
27
|
.option('--publish-to-cas <mode>', 'Publish update artifacts to a writable CAS before broadcast: auto|always|never. '
|
|
24
28
|
+ 'CAS publication is optional; the default distributes the returned artifacts via sidecar.', parsePublishToCasMode, 'never')
|
|
25
29
|
.option('--fee-rate <satsPerVByte>', 'Fee rate in sats/vByte for the beacon transaction (default: 5). '
|
|
@@ -39,7 +43,8 @@ export function registerWriteOptions(command) {
|
|
|
39
43
|
* 3. The resolution flags come only without the source pair. The api ignores
|
|
40
44
|
* `resolutionOptions` when the pair is supplied (ADR 098). A silent ignore
|
|
41
45
|
* of `--min-conf` would mislead.
|
|
42
|
-
* 4.
|
|
46
|
+
* 4. `--genesis-document` comes only with an external (x) identifier.
|
|
47
|
+
* 5. A mainnet write is refused with an unencrypted dev keystore (ADR 080).
|
|
43
48
|
*/
|
|
44
49
|
export async function prepareWrite(options, factory, g) {
|
|
45
50
|
const did = options.identifier;
|
|
@@ -50,13 +55,11 @@ export async function prepareWrite(options, factory, g) {
|
|
|
50
55
|
throw new CLIError('Provide both --source-document and --source-version-id, or neither. '
|
|
51
56
|
+ 'Omit both to resolve the current document first.', 'INVALID_ARGUMENT_ERROR', { did });
|
|
52
57
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|| options.minConf !== undefined;
|
|
56
|
-
if (hasDocument && hasResolutionFlags) {
|
|
57
|
-
throw new CLIError('--resolution-options, --resolution-options-path, and --min-conf apply only when '
|
|
58
|
+
if (hasDocument && hasResolutionFlags(options)) {
|
|
59
|
+
throw new CLIError('--resolution-options, --resolution-options-path, --min-conf, and --genesis-document apply only when '
|
|
58
60
|
+ '--source-document and --source-version-id are omitted. A supplied source pair skips resolution.', 'INVALID_ARGUMENT_ERROR', { did });
|
|
59
61
|
}
|
|
62
|
+
assertGenesisDocumentApplies(options, Identifier.decode(did).hrp);
|
|
60
63
|
assertKeystoreAllowedForNetwork(network, g);
|
|
61
64
|
const resolutionOptions = await readResolutionOptions(options);
|
|
62
65
|
const api = factory(network, g);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"write.js","sourceRoot":"","sources":["../../../../src/commands/write.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EACL,+BAA+B,EAC/B,aAAa,EACb,uBAAuB,EACvB,oBAAoB,GAErB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,qBAAqB,EAA8B,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"write.js","sourceRoot":"","sources":["../../../../src/commands/write.ts"],"names":[],"mappings":"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"}
|