@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.
Files changed (75) hide show
  1. package/README.md +29 -2
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/cjs/index.js +494 -64
  4. package/dist/esm/src/cli.js +4 -2
  5. package/dist/esm/src/cli.js.map +1 -1
  6. package/dist/esm/src/commands/completion.js +1 -1
  7. package/dist/esm/src/commands/completion.js.map +1 -1
  8. package/dist/esm/src/commands/create.js +33 -41
  9. package/dist/esm/src/commands/create.js.map +1 -1
  10. package/dist/esm/src/commands/genesis.js +119 -0
  11. package/dist/esm/src/commands/genesis.js.map +1 -0
  12. package/dist/esm/src/commands/identifier.js +96 -0
  13. package/dist/esm/src/commands/identifier.js.map +1 -0
  14. package/dist/esm/src/commands/index.js +2 -0
  15. package/dist/esm/src/commands/index.js.map +1 -1
  16. package/dist/esm/src/commands/resolve.js +15 -1
  17. package/dist/esm/src/commands/resolve.js.map +1 -1
  18. package/dist/esm/src/commands/write.js +10 -7
  19. package/dist/esm/src/commands/write.js.map +1 -1
  20. package/dist/esm/src/genesis-document-file.js +26 -0
  21. package/dist/esm/src/genesis-document-file.js.map +1 -0
  22. package/dist/esm/src/genesis-spec.js +93 -0
  23. package/dist/esm/src/genesis-spec.js.map +1 -0
  24. package/dist/esm/src/genesis-wizard.js +132 -0
  25. package/dist/esm/src/genesis-wizard.js.map +1 -0
  26. package/dist/esm/src/hints.js +14 -3
  27. package/dist/esm/src/hints.js.map +1 -1
  28. package/dist/esm/src/network-option.js +39 -0
  29. package/dist/esm/src/network-option.js.map +1 -0
  30. package/dist/esm/src/resolution-options.js +19 -2
  31. package/dist/esm/src/resolution-options.js.map +1 -1
  32. package/dist/types/src/cli.d.ts +1 -1
  33. package/dist/types/src/cli.d.ts.map +1 -1
  34. package/dist/types/src/commands/create.d.ts +5 -4
  35. package/dist/types/src/commands/create.d.ts.map +1 -1
  36. package/dist/types/src/commands/genesis.d.ts +20 -0
  37. package/dist/types/src/commands/genesis.d.ts.map +1 -0
  38. package/dist/types/src/commands/identifier.d.ts +12 -0
  39. package/dist/types/src/commands/identifier.d.ts.map +1 -0
  40. package/dist/types/src/commands/index.d.ts +2 -0
  41. package/dist/types/src/commands/index.d.ts.map +1 -1
  42. package/dist/types/src/commands/resolve.d.ts +7 -0
  43. package/dist/types/src/commands/resolve.d.ts.map +1 -1
  44. package/dist/types/src/commands/write.d.ts +2 -1
  45. package/dist/types/src/commands/write.d.ts.map +1 -1
  46. package/dist/types/src/genesis-document-file.d.ts +11 -0
  47. package/dist/types/src/genesis-document-file.d.ts.map +1 -0
  48. package/dist/types/src/genesis-spec.d.ts +70 -0
  49. package/dist/types/src/genesis-spec.d.ts.map +1 -0
  50. package/dist/types/src/genesis-wizard.d.ts +30 -0
  51. package/dist/types/src/genesis-wizard.d.ts.map +1 -0
  52. package/dist/types/src/hints.d.ts +7 -0
  53. package/dist/types/src/hints.d.ts.map +1 -1
  54. package/dist/types/src/network-option.d.ts +15 -0
  55. package/dist/types/src/network-option.d.ts.map +1 -0
  56. package/dist/types/src/resolution-options.d.ts +6 -2
  57. package/dist/types/src/resolution-options.d.ts.map +1 -1
  58. package/dist/types/src/types.d.ts +38 -1
  59. package/dist/types/src/types.d.ts.map +1 -1
  60. package/package.json +3 -3
  61. package/src/cli.ts +5 -1
  62. package/src/commands/completion.ts +1 -1
  63. package/src/commands/create.ts +39 -55
  64. package/src/commands/genesis.ts +149 -0
  65. package/src/commands/identifier.ts +134 -0
  66. package/src/commands/index.ts +2 -0
  67. package/src/commands/resolve.ts +20 -1
  68. package/src/commands/write.ts +10 -7
  69. package/src/genesis-document-file.ts +35 -0
  70. package/src/genesis-spec.ts +149 -0
  71. package/src/genesis-wizard.ts +163 -0
  72. package/src/hints.ts +13 -2
  73. package/src/network-option.ts +50 -0
  74. package/src/resolution-options.ts +21 -2
  75. package/src/types.ts +34 -2
@@ -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);
@@ -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,4EAA4E,CAAC;AAE9F,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
+ {"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, profileNetworkMismatch, resolveDefaultNetwork } from '../config.js';
2
+ import { assertKeystoreAllowedForNetwork } from '../config.js';
3
3
  import { CLIError } from '../error.js';
4
- import { printCreateFundingHint } from '../hints.js';
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 is raw-bytes-only: a 32-byte genesis-document
26
- * hash via `--bytes`. Generation and `--signing-key` apply only to `-t k`.
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 path; the keystore-aware
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>', 'Identifier bitcoin network <bitcoin|testnet3|testnet4|signet|mutinynet|regtest> '
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 = resolveNetwork(options.network, overrides);
50
+ const network = resolveNetworkOption(options.network, overrides);
48
51
  const signingKey = g.signingKey;
49
- // Warn (never block) when the network being encoded disagrees with the
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-bytes only.
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 --bytes <hex>, the 32-byte genesis document hash. '
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":"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"}
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../../src/commands/create.ts"],"names":[],"mappings":"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"}
@@ -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;IACtC,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"}
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. A mainnet write is refused with an unencrypted dev keystore (ADR 080).
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
- const hasResolutionFlags = options.resolutionOptions !== undefined
54
- || options.resolutionOptionsPath !== undefined
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":"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"}
1
+ {"version":3,"file":"write.js","sourceRoot":"","sources":["../../../../src/commands/write.ts"],"names":[],"mappings":"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"}