@did-btcr2/cli 0.14.0 → 0.16.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 +106 -17
- package/dist/.tsbuildinfo +1 -1
- package/dist/cjs/index.js +1160 -131
- package/dist/esm/src/cli.js +29 -5
- package/dist/esm/src/cli.js.map +1 -1
- package/dist/esm/src/commands/config.js +130 -18
- package/dist/esm/src/commands/config.js.map +1 -1
- package/dist/esm/src/commands/create.js +13 -1
- package/dist/esm/src/commands/create.js.map +1 -1
- package/dist/esm/src/commands/deactivate.js +16 -2
- package/dist/esm/src/commands/deactivate.js.map +1 -1
- package/dist/esm/src/commands/index.js +2 -0
- package/dist/esm/src/commands/index.js.map +1 -1
- package/dist/esm/src/commands/init.js +63 -0
- package/dist/esm/src/commands/init.js.map +1 -0
- package/dist/esm/src/commands/keystore.js +81 -0
- package/dist/esm/src/commands/keystore.js.map +1 -0
- package/dist/esm/src/commands/profile.js +6 -4
- package/dist/esm/src/commands/profile.js.map +1 -1
- package/dist/esm/src/commands/update.js +16 -2
- package/dist/esm/src/commands/update.js.map +1 -1
- package/dist/esm/src/config-schema.js +149 -0
- package/dist/esm/src/config-schema.js.map +1 -0
- package/dist/esm/src/config.js +579 -55
- package/dist/esm/src/config.js.map +1 -1
- package/dist/esm/src/keystore/file-key-store.js +340 -32
- package/dist/esm/src/keystore/file-key-store.js.map +1 -1
- package/dist/esm/src/keystore/passphrase.js +40 -10
- package/dist/esm/src/keystore/passphrase.js.map +1 -1
- package/dist/esm/src/keystore/paths.js +6 -17
- package/dist/esm/src/keystore/paths.js.map +1 -1
- package/dist/esm/src/output.js +49 -0
- package/dist/esm/src/output.js.map +1 -1
- package/dist/esm/src/paths.js +59 -0
- package/dist/esm/src/paths.js.map +1 -0
- package/dist/esm/src/types.js +11 -0
- package/dist/esm/src/types.js.map +1 -1
- package/dist/types/src/cli.d.ts.map +1 -1
- package/dist/types/src/commands/config.d.ts.map +1 -1
- package/dist/types/src/commands/create.d.ts.map +1 -1
- package/dist/types/src/commands/deactivate.d.ts.map +1 -1
- 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/init.d.ts +13 -0
- package/dist/types/src/commands/init.d.ts.map +1 -0
- package/dist/types/src/commands/keystore.d.ts +10 -0
- package/dist/types/src/commands/keystore.d.ts.map +1 -0
- package/dist/types/src/commands/profile.d.ts.map +1 -1
- package/dist/types/src/commands/update.d.ts.map +1 -1
- package/dist/types/src/config-schema.d.ts +24 -0
- package/dist/types/src/config-schema.d.ts.map +1 -0
- package/dist/types/src/config.d.ts +252 -14
- package/dist/types/src/config.d.ts.map +1 -1
- package/dist/types/src/keystore/file-key-store.d.ts +86 -10
- package/dist/types/src/keystore/file-key-store.d.ts.map +1 -1
- package/dist/types/src/keystore/passphrase.d.ts +16 -1
- package/dist/types/src/keystore/passphrase.d.ts.map +1 -1
- package/dist/types/src/keystore/paths.d.ts +6 -10
- package/dist/types/src/keystore/paths.d.ts.map +1 -1
- package/dist/types/src/output.d.ts +22 -0
- package/dist/types/src/output.d.ts.map +1 -1
- package/dist/types/src/paths.d.ts +54 -0
- package/dist/types/src/paths.d.ts.map +1 -0
- package/dist/types/src/types.d.ts +70 -0
- package/dist/types/src/types.d.ts.map +1 -1
- package/package.json +5 -5
- package/src/cli.ts +32 -4
- package/src/commands/config.ts +143 -18
- package/src/commands/create.ts +16 -1
- package/src/commands/deactivate.ts +24 -2
- package/src/commands/index.ts +2 -0
- package/src/commands/init.ts +74 -0
- package/src/commands/keystore.ts +98 -0
- package/src/commands/profile.ts +6 -4
- package/src/commands/update.ts +24 -2
- package/src/config-schema.ts +178 -0
- package/src/config.ts +752 -58
- package/src/keystore/file-key-store.ts +455 -43
- package/src/keystore/passphrase.ts +48 -8
- package/src/keystore/paths.ts +6 -18
- package/src/output.ts +53 -0
- package/src/paths.ts +79 -0
- package/src/types.ts +34 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keystore.js","sourceRoot":"","sources":["../../../../src/commands/keystore.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { defaultConfigPath, readConfigFile, writeConfigFile } from '../config.js';
|
|
2
2
|
import { CLIError } from '../error.js';
|
|
3
|
-
import { formatResult } from '../output.js';
|
|
3
|
+
import { formatResult, redactSecrets } from '../output.js';
|
|
4
4
|
/** Registers the `profile` command group for managing configuration profiles. */
|
|
5
5
|
export function registerProfileCommand(program, globals) {
|
|
6
6
|
const profile = program.command('profile').description('Manage configuration profiles.');
|
|
7
|
-
const path = () => globals().config ?? defaultConfigPath();
|
|
7
|
+
const path = () => globals().config ?? defaultConfigPath(globals());
|
|
8
8
|
const print = (result) => console.log(formatResult(result, globals()));
|
|
9
9
|
profile
|
|
10
10
|
.command('add <name>')
|
|
@@ -34,7 +34,8 @@ export function registerProfileCommand(program, globals) {
|
|
|
34
34
|
profile
|
|
35
35
|
.command('show [name]')
|
|
36
36
|
.description('Show a profile (defaults to the active profile).')
|
|
37
|
-
.
|
|
37
|
+
.option('--show-secrets', 'Reveal secret values (RPC password, etc.) instead of redacting them.', false)
|
|
38
|
+
.action((name, opts) => {
|
|
38
39
|
const file = readConfigFile(path()) ?? {};
|
|
39
40
|
const target = name ?? file.defaults?.profile;
|
|
40
41
|
if (!target) {
|
|
@@ -44,7 +45,8 @@ export function registerProfileCommand(program, globals) {
|
|
|
44
45
|
if (!data) {
|
|
45
46
|
throw new CLIError(`Profile "${target}" not found.`, 'INVALID_ARGUMENT_ERROR', { profile: target });
|
|
46
47
|
}
|
|
47
|
-
|
|
48
|
+
const payload = { profile: target, ...data };
|
|
49
|
+
print({ action: 'profile-show', data: opts.showSecrets ? payload : redactSecrets(payload) });
|
|
48
50
|
});
|
|
49
51
|
profile
|
|
50
52
|
.command('remove <name>')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../../../src/commands/profile.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAClF,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../../../src/commands/profile.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { KeyManagerSigner } from '@did-btcr2/key-manager';
|
|
2
|
-
import { deriveNetwork } from '../config.js';
|
|
2
|
+
import { assertKeystoreAllowedForNetwork, deriveNetwork, resolveBroadcastOptions, resolveSigningKeyRef } from '../config.js';
|
|
3
3
|
import { CLIError } from '../error.js';
|
|
4
4
|
import { resolveKeyRef } from '../keystore/resolve-key-ref.js';
|
|
5
5
|
import { formatResult } from '../output.js';
|
|
@@ -14,6 +14,10 @@ export function registerUpdateCommand(program, factory, globals) {
|
|
|
14
14
|
.requiredOption('-b, --beacon-id <json>', 'Beacon ID as a JSON string', parseJsonArg('--beacon-id'))
|
|
15
15
|
.option('--publish-to-cas <mode>', 'Publish update artifacts to a writable CAS before broadcast: auto|always|never. '
|
|
16
16
|
+ 'CAS publication is optional; the default distributes the returned artifacts via sidecar.', parsePublishToCasMode, 'never')
|
|
17
|
+
.option('--fee-rate <satsPerVByte>', 'Fee rate in sats/vByte for the beacon transaction (default: 5). '
|
|
18
|
+
+ 'Raise it under congestion so the transaction confirms.')
|
|
19
|
+
.option('--change-address <address>', 'Send transaction change to this address instead of the beacon address, '
|
|
20
|
+
+ 'so a DID\'s announcements are not linked on-chain (ADR 044).')
|
|
17
21
|
.action(async (options) => {
|
|
18
22
|
if (!/^\d+$/.test(options.sourceVersionId)) {
|
|
19
23
|
throw new CLIError('--source-version-id must be a non-negative integer.', 'INVALID_ARGUMENT_ERROR', { value: options.sourceVersionId });
|
|
@@ -30,9 +34,18 @@ export function registerUpdateCommand(program, factory, globals) {
|
|
|
30
34
|
throw new CLIError('Source document must contain an "id" field.', 'INVALID_ARGUMENT_ERROR', options);
|
|
31
35
|
}
|
|
32
36
|
const network = deriveNetwork(did);
|
|
37
|
+
// Refuse to sign a mainnet update with an unencrypted dev keystore (ADR 080).
|
|
38
|
+
assertKeystoreAllowedForNetwork(network, globals());
|
|
33
39
|
const api = factory(network, globals());
|
|
34
|
-
const keyId = resolveKeyRef(api.kms.kms, globals()
|
|
40
|
+
const keyId = resolveKeyRef(api.kms.kms, resolveSigningKeyRef(globals()));
|
|
35
41
|
const signer = new KeyManagerSigner(api.kms.kms, keyId);
|
|
42
|
+
// Resolve fee-rate/change-address through the flag -> env -> profile chain
|
|
43
|
+
// into beacon broadcast options. Undefined when neither is set, so the
|
|
44
|
+
// SDK defaults (5 sat/vB, change back to the beacon address) still apply.
|
|
45
|
+
const broadcastOptions = resolveBroadcastOptions(network, globals(), {
|
|
46
|
+
feeRate: options.feeRate,
|
|
47
|
+
changeAddress: options.changeAddress,
|
|
48
|
+
});
|
|
36
49
|
// CAS publication is optional and never required: every beacon update can
|
|
37
50
|
// be completed and shared via sidecar alone. It is opt-in and defaults to
|
|
38
51
|
// 'never'; pass --publish-to-cas auto|always to publish the signed update
|
|
@@ -47,6 +60,7 @@ export function registerUpdateCommand(program, factory, globals) {
|
|
|
47
60
|
beaconId: parsed.beaconId,
|
|
48
61
|
signer,
|
|
49
62
|
publishToCas: options.publishToCas,
|
|
63
|
+
...(broadcastOptions ? { broadcastOptions } : {}),
|
|
50
64
|
});
|
|
51
65
|
console.log(formatResult({ action: 'update', data }, globals()));
|
|
52
66
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../../src/commands/update.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EAAE,aAAa,EAAmB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../../src/commands/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { CLIError } from './error.js';
|
|
2
|
+
import { SUPPORTED_NETWORKS } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Declarative schema of the known config-file paths, used by both the write-time
|
|
5
|
+
* validation in `config set` and the strict `config validate` check so the two
|
|
6
|
+
* cannot disagree. Leaves name a value kind: `'string'`, `'number'`, `'object'`
|
|
7
|
+
* (a free-form map, e.g. headers), or `'enum:<name>'`. The `'*'` key under
|
|
8
|
+
* `profiles` matches any profile name.
|
|
9
|
+
*/
|
|
10
|
+
const CONFIG_SCHEMA = {
|
|
11
|
+
schemaVersion: 'number',
|
|
12
|
+
defaults: {
|
|
13
|
+
profile: 'string',
|
|
14
|
+
network: 'enum:network',
|
|
15
|
+
output: 'enum:output',
|
|
16
|
+
},
|
|
17
|
+
profiles: {
|
|
18
|
+
'*': {
|
|
19
|
+
network: 'enum:network',
|
|
20
|
+
btc: {
|
|
21
|
+
rest: 'string',
|
|
22
|
+
rpcUrl: 'string',
|
|
23
|
+
rpcUser: 'string',
|
|
24
|
+
rpcPass: 'string',
|
|
25
|
+
feeRate: 'number',
|
|
26
|
+
changeAddress: 'string',
|
|
27
|
+
timeoutMs: 'number',
|
|
28
|
+
headers: 'object',
|
|
29
|
+
wallet: 'string',
|
|
30
|
+
rpcHeaders: 'object',
|
|
31
|
+
},
|
|
32
|
+
cas: {
|
|
33
|
+
gateway: 'string',
|
|
34
|
+
rpcUrl: 'string',
|
|
35
|
+
timeoutMs: 'number',
|
|
36
|
+
},
|
|
37
|
+
identity: {
|
|
38
|
+
keystore: 'string',
|
|
39
|
+
default: 'string',
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Resolves a dotted config path to its schema node: a leaf kind string, a nested
|
|
46
|
+
* {@link SchemaNode}, or `undefined` when the path is not part of the known
|
|
47
|
+
* schema. A segment under `profiles` matches the `'*'` template.
|
|
48
|
+
*/
|
|
49
|
+
function lookupSchemaNode(dotted) {
|
|
50
|
+
let node = CONFIG_SCHEMA;
|
|
51
|
+
for (const segment of dotted.split('.')) {
|
|
52
|
+
if (typeof node !== 'object')
|
|
53
|
+
return undefined;
|
|
54
|
+
// Own-property checks only: `in` would match inherited Object.prototype names
|
|
55
|
+
// (`toString`, `constructor`, `__proto__`), treating a builtin as a known key.
|
|
56
|
+
if (Object.hasOwn(node, segment)) {
|
|
57
|
+
node = node[segment];
|
|
58
|
+
}
|
|
59
|
+
else if (Object.hasOwn(node, '*')) {
|
|
60
|
+
node = node['*'];
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
return undefined;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return node;
|
|
67
|
+
}
|
|
68
|
+
/** Whether a dotted path is part of the known config schema (leaf or intermediate). */
|
|
69
|
+
export function isKnownConfigPath(dotted) {
|
|
70
|
+
return lookupSchemaNode(dotted) !== undefined;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Validates a value against a leaf kind, throwing a {@link CLIError} for a value
|
|
74
|
+
* that does not match: an out-of-range enum, a non-number for a `number` leaf, or
|
|
75
|
+
* a non-object for an `object` leaf (a map such as `headers`). A no-op for
|
|
76
|
+
* `string` leaves and for intermediate nodes.
|
|
77
|
+
*/
|
|
78
|
+
function assertLeafValue(kind, dotted, value) {
|
|
79
|
+
if (kind === 'enum:network' && !SUPPORTED_NETWORKS.includes(value)) {
|
|
80
|
+
throw new CLIError(`Invalid value for ${dotted}: "${String(value)}". Expected one of ${SUPPORTED_NETWORKS.join(', ')}.`, 'INVALID_ARGUMENT_ERROR', { path: dotted, value });
|
|
81
|
+
}
|
|
82
|
+
if (kind === 'enum:output' && value !== 'json' && value !== 'text') {
|
|
83
|
+
throw new CLIError(`Invalid value for ${dotted}: "${String(value)}". Expected "json" or "text".`, 'INVALID_ARGUMENT_ERROR', { path: dotted, value });
|
|
84
|
+
}
|
|
85
|
+
if (kind === 'number' && typeof value !== 'number') {
|
|
86
|
+
throw new CLIError(`Invalid value for ${dotted}: expected a number, got ${typeof value}. `
|
|
87
|
+
+ 'Pass a bare number (e.g. `config set ' + dotted + ' 5`).', 'INVALID_ARGUMENT_ERROR', { path: dotted, value });
|
|
88
|
+
}
|
|
89
|
+
if (kind === 'object' && (typeof value !== 'object' || value === null || Array.isArray(value))) {
|
|
90
|
+
throw new CLIError(`Invalid value for ${dotted}: expected a JSON object (e.g. \`config set ${dotted} '{"Key":"Value"}'\`).`, 'INVALID_ARGUMENT_ERROR', { path: dotted, value });
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Write-time validation for `config set`. An enum, number, or object leaf whose
|
|
95
|
+
* value has the wrong kind is a hard rejection (throws). An unknown path is
|
|
96
|
+
* permitted but reported, so `config set` can warn and still write (keeping
|
|
97
|
+
* forward-compatible and third-party keys usable). Returns `{ unknownPath }`.
|
|
98
|
+
*/
|
|
99
|
+
export function validateConfigSet(dotted, value) {
|
|
100
|
+
const node = lookupSchemaNode(dotted);
|
|
101
|
+
if (node === undefined)
|
|
102
|
+
return { unknownPath: true };
|
|
103
|
+
if (typeof node === 'string') {
|
|
104
|
+
assertLeafValue(node, dotted, value);
|
|
105
|
+
}
|
|
106
|
+
return { unknownPath: false };
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Strict validation for `config validate`: walks a parsed config and collects
|
|
110
|
+
* every unknown key and out-of-enum value, plus a `schemaVersion` that is newer
|
|
111
|
+
* than this CLI supports. Never throws; returns the full list so the caller can
|
|
112
|
+
* report all problems at once.
|
|
113
|
+
*/
|
|
114
|
+
export function findConfigIssues(config, supportedSchemaVersion) {
|
|
115
|
+
const issues = [];
|
|
116
|
+
const version = config.schemaVersion;
|
|
117
|
+
if (typeof version === 'number' && version > supportedSchemaVersion) {
|
|
118
|
+
issues.push({
|
|
119
|
+
path: 'schemaVersion',
|
|
120
|
+
issue: `newer than supported (${version} > ${supportedSchemaVersion}); upgrade the CLI to use this file`,
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
walk(config, [], issues);
|
|
124
|
+
return issues;
|
|
125
|
+
}
|
|
126
|
+
/** Recursively collects unknown-key and bad-enum issues under `prefix`. */
|
|
127
|
+
function walk(obj, prefix, issues) {
|
|
128
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
129
|
+
const path = [...prefix, key];
|
|
130
|
+
const dotted = path.join('.');
|
|
131
|
+
const node = lookupSchemaNode(dotted);
|
|
132
|
+
if (node === undefined) {
|
|
133
|
+
issues.push({ path: dotted, issue: 'unknown key' });
|
|
134
|
+
continue; // Do not descend into an unknown subtree.
|
|
135
|
+
}
|
|
136
|
+
if (typeof node === 'string') {
|
|
137
|
+
try {
|
|
138
|
+
assertLeafValue(node, dotted, value);
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
issues.push({ path: dotted, issue: error.message });
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
else if (value !== null && typeof value === 'object' && !Array.isArray(value)) {
|
|
145
|
+
walk(value, path, issues);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=config-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-schema.js","sourceRoot":"","sources":["../../../src/config-schema.ts"],"names":[],"mappings":"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"}
|