@did-btcr2/cli 0.12.18 → 0.14.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 +37 -4
- package/dist/.tsbuildinfo +1 -1
- package/dist/cjs/index.js +48 -9
- package/dist/esm/src/cli.js +2 -1
- package/dist/esm/src/cli.js.map +1 -1
- package/dist/esm/src/commands/deactivate.js +19 -0
- package/dist/esm/src/commands/deactivate.js.map +1 -1
- package/dist/esm/src/commands/update.js +19 -0
- package/dist/esm/src/commands/update.js.map +1 -1
- package/dist/esm/src/config.js +15 -2
- package/dist/esm/src/config.js.map +1 -1
- package/dist/esm/src/types.js.map +1 -1
- package/dist/types/src/cli.d.ts.map +1 -1
- package/dist/types/src/commands/deactivate.d.ts.map +1 -1
- package/dist/types/src/commands/update.d.ts.map +1 -1
- package/dist/types/src/config.d.ts +9 -1
- package/dist/types/src/config.d.ts.map +1 -1
- package/dist/types/src/types.d.ts +5 -3
- package/dist/types/src/types.d.ts.map +1 -1
- package/package.json +5 -5
- package/src/cli.ts +2 -1
- package/src/commands/deactivate.ts +31 -0
- package/src/commands/update.ts +31 -0
- package/src/config.ts +22 -5
- package/src/types.ts +5 -3
package/dist/cjs/index.js
CHANGED
|
@@ -710,7 +710,8 @@ var ENV_VARS = {
|
|
|
710
710
|
BTC_RPC_URL: "BTCR2_BTC_RPC_URL",
|
|
711
711
|
BTC_RPC_USER: "BTCR2_BTC_RPC_USER",
|
|
712
712
|
BTC_RPC_PASS: "BTCR2_BTC_RPC_PASS",
|
|
713
|
-
CAS_GATEWAY: "BTCR2_CAS_GATEWAY"
|
|
713
|
+
CAS_GATEWAY: "BTCR2_CAS_GATEWAY",
|
|
714
|
+
CAS_RPC_URL: "BTCR2_CAS_RPC_URL"
|
|
714
715
|
};
|
|
715
716
|
function readEnvOverrides() {
|
|
716
717
|
const env = (key) => process.env[key] || void 0;
|
|
@@ -719,7 +720,8 @@ function readEnvOverrides() {
|
|
|
719
720
|
btcRpcUrl: env(ENV_VARS.BTC_RPC_URL),
|
|
720
721
|
btcRpcUser: env(ENV_VARS.BTC_RPC_USER),
|
|
721
722
|
btcRpcPass: env(ENV_VARS.BTC_RPC_PASS),
|
|
722
|
-
casGateway: env(ENV_VARS.CAS_GATEWAY)
|
|
723
|
+
casGateway: env(ENV_VARS.CAS_GATEWAY),
|
|
724
|
+
casRpcUrl: env(ENV_VARS.CAS_RPC_URL)
|
|
723
725
|
};
|
|
724
726
|
}
|
|
725
727
|
function defaultConfigPath() {
|
|
@@ -742,7 +744,8 @@ function profileToOverrides(config, profileName) {
|
|
|
742
744
|
btcRpcUrl: profile.btc?.rpcUrl,
|
|
743
745
|
btcRpcUser: profile.btc?.rpcUser,
|
|
744
746
|
btcRpcPass: profile.btc?.rpcPass,
|
|
745
|
-
casGateway: profile.cas?.gateway
|
|
747
|
+
casGateway: profile.cas?.gateway,
|
|
748
|
+
casRpcUrl: profile.cas?.rpcUrl
|
|
746
749
|
};
|
|
747
750
|
}
|
|
748
751
|
function resolveDefaultNetwork(overrides) {
|
|
@@ -768,7 +771,8 @@ function resolveConnectionConfig(network, overrides) {
|
|
|
768
771
|
btcRpcUrl: overrides?.btcRpcUrl ?? env.btcRpcUrl ?? fileOverrides.btcRpcUrl,
|
|
769
772
|
btcRpcUser: overrides?.btcRpcUser ?? env.btcRpcUser ?? fileOverrides.btcRpcUser,
|
|
770
773
|
btcRpcPass: overrides?.btcRpcPass ?? env.btcRpcPass ?? fileOverrides.btcRpcPass,
|
|
771
|
-
casGateway: overrides?.casGateway ?? env.casGateway ?? fileOverrides.casGateway
|
|
774
|
+
casGateway: overrides?.casGateway ?? env.casGateway ?? fileOverrides.casGateway,
|
|
775
|
+
casRpcUrl: overrides?.casRpcUrl ?? env.casRpcUrl ?? fileOverrides.casRpcUrl
|
|
772
776
|
};
|
|
773
777
|
const btc = { network };
|
|
774
778
|
if (merged.btcRest) {
|
|
@@ -781,8 +785,11 @@ function resolveConnectionConfig(network, overrides) {
|
|
|
781
785
|
password: merged.btcRpcPass
|
|
782
786
|
};
|
|
783
787
|
}
|
|
784
|
-
const cas =
|
|
785
|
-
|
|
788
|
+
const cas = {};
|
|
789
|
+
if (merged.casGateway) cas.gateway = merged.casGateway;
|
|
790
|
+
if (merged.casRpcUrl) cas.rpcUrl = merged.casRpcUrl;
|
|
791
|
+
const hasCas = merged.casGateway || merged.casRpcUrl;
|
|
792
|
+
return { btc, ...hasCas && { cas } };
|
|
786
793
|
}
|
|
787
794
|
function defaultApiFactory(network, overrides) {
|
|
788
795
|
return (0, import_api.createApi)(resolveConnectionConfig(network, overrides));
|
|
@@ -1036,6 +1043,11 @@ function registerUpdateCommand(program, factory, globals) {
|
|
|
1036
1043
|
"-b, --beacon-id <json>",
|
|
1037
1044
|
"Beacon ID as a JSON string",
|
|
1038
1045
|
parseJsonArg("--beacon-id")
|
|
1046
|
+
).option(
|
|
1047
|
+
"--publish-to-cas <mode>",
|
|
1048
|
+
"Publish update artifacts to a writable CAS before broadcast: auto|always|never. CAS publication is optional; the default distributes the returned artifacts via sidecar.",
|
|
1049
|
+
parsePublishToCasMode,
|
|
1050
|
+
"never"
|
|
1039
1051
|
).action(async (options) => {
|
|
1040
1052
|
if (!/^\d+$/.test(options.sourceVersionId)) {
|
|
1041
1053
|
throw new CLIError(
|
|
@@ -1069,11 +1081,22 @@ function registerUpdateCommand(program, factory, globals) {
|
|
|
1069
1081
|
sourceVersionId: parsed.sourceVersionId,
|
|
1070
1082
|
verificationMethodId: parsed.verificationMethodId,
|
|
1071
1083
|
beaconId: parsed.beaconId,
|
|
1072
|
-
signer
|
|
1084
|
+
signer,
|
|
1085
|
+
publishToCas: options.publishToCas
|
|
1073
1086
|
});
|
|
1074
1087
|
console.log(formatResult({ action: "update", data }, globals()));
|
|
1075
1088
|
});
|
|
1076
1089
|
}
|
|
1090
|
+
function parsePublishToCasMode(value) {
|
|
1091
|
+
if (value !== "auto" && value !== "always" && value !== "never") {
|
|
1092
|
+
throw new CLIError(
|
|
1093
|
+
'--publish-to-cas must be one of "auto", "always", or "never".',
|
|
1094
|
+
"INVALID_ARGUMENT_ERROR",
|
|
1095
|
+
{ value }
|
|
1096
|
+
);
|
|
1097
|
+
}
|
|
1098
|
+
return value;
|
|
1099
|
+
}
|
|
1077
1100
|
function parseJsonArg(flagName) {
|
|
1078
1101
|
return (value) => {
|
|
1079
1102
|
try {
|
|
@@ -1106,6 +1129,11 @@ function registerDeactivateCommand(program, factory, globals) {
|
|
|
1106
1129
|
"-b, --beacon-id <json>",
|
|
1107
1130
|
"Beacon ID as a JSON string",
|
|
1108
1131
|
parseJsonArg2("--beacon-id")
|
|
1132
|
+
).option(
|
|
1133
|
+
"--publish-to-cas <mode>",
|
|
1134
|
+
"Publish update artifacts to a writable CAS before broadcast: auto|always|never. CAS publication is optional; the default distributes the returned artifacts via sidecar.",
|
|
1135
|
+
parsePublishToCasMode2,
|
|
1136
|
+
"never"
|
|
1109
1137
|
).action(async (options) => {
|
|
1110
1138
|
if (!/^\d+$/.test(options.sourceVersionId)) {
|
|
1111
1139
|
throw new CLIError(
|
|
@@ -1139,11 +1167,22 @@ function registerDeactivateCommand(program, factory, globals) {
|
|
|
1139
1167
|
sourceVersionId: parsed.sourceVersionId,
|
|
1140
1168
|
verificationMethodId: parsed.verificationMethodId,
|
|
1141
1169
|
beaconId: parsed.beaconId,
|
|
1142
|
-
signer
|
|
1170
|
+
signer,
|
|
1171
|
+
publishToCas: options.publishToCas
|
|
1143
1172
|
});
|
|
1144
1173
|
console.log(formatResult({ action: "deactivate", data }, globals()));
|
|
1145
1174
|
});
|
|
1146
1175
|
}
|
|
1176
|
+
function parsePublishToCasMode2(value) {
|
|
1177
|
+
if (value !== "auto" && value !== "always" && value !== "never") {
|
|
1178
|
+
throw new CLIError(
|
|
1179
|
+
'--publish-to-cas must be one of "auto", "always", or "never".',
|
|
1180
|
+
"INVALID_ARGUMENT_ERROR",
|
|
1181
|
+
{ value }
|
|
1182
|
+
);
|
|
1183
|
+
}
|
|
1184
|
+
return value;
|
|
1185
|
+
}
|
|
1147
1186
|
function parseJsonArg2(flagName) {
|
|
1148
1187
|
return (value) => {
|
|
1149
1188
|
try {
|
|
@@ -1438,7 +1477,7 @@ var DidBtcr2Cli = class {
|
|
|
1438
1477
|
* {@link keystoreApiFactory}.
|
|
1439
1478
|
*/
|
|
1440
1479
|
constructor(factory = defaultApiFactory, keystoreFactory = keystoreApiFactory) {
|
|
1441
|
-
this.program = new import_commander.Command("btcr2").version(`btcr2 ${VERSION}`, "-v, --version", "Output the current version").description("CLI tool for the did:btcr2 method").option("-o, --output <format>", "Output format <json|text>", "text").option("--verbose", "Verbose output", false).option("--quiet", "Suppress non-essential output", false).option("-c, --config <path>", "Path to config file (default: $XDG_CONFIG_HOME/btcr2/config.json)").option("--profile <name>", "Config profile name (default: auto-detected from network)").option("--btc-rest <url>", "Override Bitcoin REST endpoint (Esplora API)").option("--btc-rpc-url <url>", "Override Bitcoin Core RPC endpoint").option("--btc-rpc-user <user>", "Bitcoin Core RPC username").option("--btc-rpc-pass <pass>", "Bitcoin Core RPC password").option("--cas-gateway <url>", "IPFS HTTP gateway for CAS reads").option("--keystore <path>", "Path to the keystore file (default: $XDG_DATA_HOME/btcr2/keystore.json)").option("--passphrase-file <path>", "Read the keystore passphrase from a file (unattended use)").option("--signing-key <ref>", "Key for create/update/deactivate signing: a URN, fingerprint prefix, or name");
|
|
1480
|
+
this.program = new import_commander.Command("btcr2").version(`btcr2 ${VERSION}`, "-v, --version", "Output the current version").description("CLI tool for the did:btcr2 method").option("-o, --output <format>", "Output format <json|text>", "text").option("--verbose", "Verbose output", false).option("--quiet", "Suppress non-essential output", false).option("-c, --config <path>", "Path to config file (default: $XDG_CONFIG_HOME/btcr2/config.json)").option("--profile <name>", "Config profile name (default: auto-detected from network)").option("--btc-rest <url>", "Override Bitcoin REST endpoint (Esplora API)").option("--btc-rpc-url <url>", "Override Bitcoin Core RPC endpoint").option("--btc-rpc-user <user>", "Bitcoin Core RPC username").option("--btc-rpc-pass <pass>", "Bitcoin Core RPC password").option("--cas-gateway <url>", "IPFS HTTP gateway for CAS reads (read-only)").option("--cas-rpc-url <url>", "IPFS HTTP RPC endpoint for a writable CAS (reads + writes; enables --publish-to-cas)").option("--keystore <path>", "Path to the keystore file (default: $XDG_DATA_HOME/btcr2/keystore.json)").option("--passphrase-file <path>", "Read the keystore passphrase from a file (unattended use)").option("--signing-key <ref>", "Key for create/update/deactivate signing: a URN, fingerprint prefix, or name");
|
|
1442
1481
|
const globals = () => this.program.opts();
|
|
1443
1482
|
registerCreateCommand(this.program, factory, keystoreFactory, globals);
|
|
1444
1483
|
registerResolveCommand(this.program, factory, globals);
|
package/dist/esm/src/cli.js
CHANGED
|
@@ -35,7 +35,8 @@ export class DidBtcr2Cli {
|
|
|
35
35
|
.option('--btc-rpc-url <url>', 'Override Bitcoin Core RPC endpoint')
|
|
36
36
|
.option('--btc-rpc-user <user>', 'Bitcoin Core RPC username')
|
|
37
37
|
.option('--btc-rpc-pass <pass>', 'Bitcoin Core RPC password')
|
|
38
|
-
.option('--cas-gateway <url>', 'IPFS HTTP gateway for CAS reads')
|
|
38
|
+
.option('--cas-gateway <url>', 'IPFS HTTP gateway for CAS reads (read-only)')
|
|
39
|
+
.option('--cas-rpc-url <url>', 'IPFS HTTP RPC endpoint for a writable CAS (reads + writes; enables --publish-to-cas)')
|
|
39
40
|
.option('--keystore <path>', 'Path to the keystore file (default: $XDG_DATA_HOME/btcr2/keystore.json)')
|
|
40
41
|
.option('--passphrase-file <path>', 'Read the keystore passphrase from a file (unattended use)')
|
|
41
42
|
.option('--signing-key <ref>', 'Key for create/update/deactivate signing: a URN, fingerprint prefix, or name');
|
package/dist/esm/src/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,qBAAqB,EACrB,yBAAyB,EACzB,kBAAkB,EAClB,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAmB,MAAM,aAAa,CAAC;AAErF,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC;;GAEG;AACH,MAAM,OAAO,WAAW;IACN,OAAO,CAAU;IAEjC;;;;;;;;;;;;;OAaG;IACH,YACE,UAAsB,iBAAiB,EACvC,kBAA8B,kBAAkB;QAEhD,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;aAChC,OAAO,CAAC,SAAS,OAAO,EAAE,EAAE,eAAe,EAAE,4BAA4B,CAAC;aAC1E,WAAW,CAAC,mCAAmC,CAAC;aAChD,MAAM,CAAC,uBAAuB,EAAE,2BAA2B,EAAE,MAAM,CAAC;aACpE,MAAM,CAAC,WAAW,EAAE,gBAAgB,EAAE,KAAK,CAAC;aAC5C,MAAM,CAAC,SAAS,EAAE,+BAA+B,EAAE,KAAK,CAAC;aACzD,MAAM,CAAC,qBAAqB,EAAE,mEAAmE,CAAC;aAClG,MAAM,CAAC,kBAAkB,EAAE,2DAA2D,CAAC;aACvF,MAAM,CAAC,kBAAkB,EAAE,8CAA8C,CAAC;aAC1E,MAAM,CAAC,qBAAqB,EAAE,oCAAoC,CAAC;aACnE,MAAM,CAAC,uBAAuB,EAAE,2BAA2B,CAAC;aAC5D,MAAM,CAAC,uBAAuB,EAAE,2BAA2B,CAAC;aAC5D,MAAM,CAAC,qBAAqB,EAAE,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,8 @@ export function registerDeactivateCommand(program, factory, globals) {
|
|
|
14
14
|
.requiredOption('--source-version-id <number>', 'Current version ID of the DID document')
|
|
15
15
|
.requiredOption('-m, --verification-method-id <id>', 'DID document verification method ID used to sign the deactivation')
|
|
16
16
|
.requiredOption('-b, --beacon-id <json>', 'Beacon ID as a JSON string', parseJsonArg('--beacon-id'))
|
|
17
|
+
.option('--publish-to-cas <mode>', 'Publish update artifacts to a writable CAS before broadcast: auto|always|never. '
|
|
18
|
+
+ 'CAS publication is optional; the default distributes the returned artifacts via sidecar.', parsePublishToCasMode, 'never')
|
|
17
19
|
.action(async (options) => {
|
|
18
20
|
if (!/^\d+$/.test(options.sourceVersionId)) {
|
|
19
21
|
throw new CLIError('--source-version-id must be a non-negative integer.', 'INVALID_ARGUMENT_ERROR', { value: options.sourceVersionId });
|
|
@@ -35,6 +37,12 @@ export function registerDeactivateCommand(program, factory, globals) {
|
|
|
35
37
|
const api = factory(network, globals());
|
|
36
38
|
const keyId = resolveKeyRef(api.kms.kms, globals().signingKey);
|
|
37
39
|
const signer = new KeyManagerSigner(api.kms.kms, keyId);
|
|
40
|
+
// CAS publication is optional and never required: every beacon update can
|
|
41
|
+
// be completed and shared via sidecar alone. It is opt-in and defaults to
|
|
42
|
+
// 'never'; pass --publish-to-cas auto|always to publish the signed update
|
|
43
|
+
// (and, for CAS beacons, the announcement) to a writable CAS configured
|
|
44
|
+
// via --cas-rpc-url. The returned artifacts (txid, announcement, proof)
|
|
45
|
+
// are always printed for sidecar distribution regardless.
|
|
38
46
|
const data = await api.btcr2.update({
|
|
39
47
|
sourceDocument: parsed.sourceDocument,
|
|
40
48
|
patches: parsed.patches,
|
|
@@ -42,10 +50,21 @@ export function registerDeactivateCommand(program, factory, globals) {
|
|
|
42
50
|
verificationMethodId: parsed.verificationMethodId,
|
|
43
51
|
beaconId: parsed.beaconId,
|
|
44
52
|
signer,
|
|
53
|
+
publishToCas: options.publishToCas,
|
|
45
54
|
});
|
|
46
55
|
console.log(formatResult({ action: 'deactivate', data }, globals()));
|
|
47
56
|
});
|
|
48
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* Commander argParser for `--publish-to-cas`. Validates the value is one of the
|
|
60
|
+
* three {@link PublishToCasMode} policies, erroring at parse time otherwise.
|
|
61
|
+
*/
|
|
62
|
+
function parsePublishToCasMode(value) {
|
|
63
|
+
if (value !== 'auto' && value !== 'always' && value !== 'never') {
|
|
64
|
+
throw new CLIError('--publish-to-cas must be one of "auto", "always", or "never".', 'INVALID_ARGUMENT_ERROR', { value });
|
|
65
|
+
}
|
|
66
|
+
return value;
|
|
67
|
+
}
|
|
49
68
|
/**
|
|
50
69
|
* Returns a commander argParser that validates JSON.
|
|
51
70
|
* Errors at parse time with a clear flag reference.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deactivate.js","sourceRoot":"","sources":["../../../../src/commands/deactivate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"deactivate.js","sourceRoot":"","sources":["../../../../src/commands/deactivate.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,8 @@ export function registerUpdateCommand(program, factory, globals) {
|
|
|
12
12
|
.requiredOption('-p, --patches <json>', 'JSON Patch operations as a JSON string array', parseJsonArg('--patches'))
|
|
13
13
|
.requiredOption('-m, --verification-method-id <id>', 'DID document verification method ID')
|
|
14
14
|
.requiredOption('-b, --beacon-id <json>', 'Beacon ID as a JSON string', parseJsonArg('--beacon-id'))
|
|
15
|
+
.option('--publish-to-cas <mode>', 'Publish update artifacts to a writable CAS before broadcast: auto|always|never. '
|
|
16
|
+
+ 'CAS publication is optional; the default distributes the returned artifacts via sidecar.', parsePublishToCasMode, 'never')
|
|
15
17
|
.action(async (options) => {
|
|
16
18
|
if (!/^\d+$/.test(options.sourceVersionId)) {
|
|
17
19
|
throw new CLIError('--source-version-id must be a non-negative integer.', 'INVALID_ARGUMENT_ERROR', { value: options.sourceVersionId });
|
|
@@ -31,6 +33,12 @@ export function registerUpdateCommand(program, factory, globals) {
|
|
|
31
33
|
const api = factory(network, globals());
|
|
32
34
|
const keyId = resolveKeyRef(api.kms.kms, globals().signingKey);
|
|
33
35
|
const signer = new KeyManagerSigner(api.kms.kms, keyId);
|
|
36
|
+
// CAS publication is optional and never required: every beacon update can
|
|
37
|
+
// be completed and shared via sidecar alone. It is opt-in and defaults to
|
|
38
|
+
// 'never'; pass --publish-to-cas auto|always to publish the signed update
|
|
39
|
+
// (and, for CAS beacons, the announcement) to a writable CAS configured
|
|
40
|
+
// via --cas-rpc-url. The returned artifacts (txid, announcement, proof)
|
|
41
|
+
// are always printed for sidecar distribution regardless.
|
|
34
42
|
const data = await api.btcr2.update({
|
|
35
43
|
sourceDocument: parsed.sourceDocument,
|
|
36
44
|
patches: parsed.patches,
|
|
@@ -38,10 +46,21 @@ export function registerUpdateCommand(program, factory, globals) {
|
|
|
38
46
|
verificationMethodId: parsed.verificationMethodId,
|
|
39
47
|
beaconId: parsed.beaconId,
|
|
40
48
|
signer,
|
|
49
|
+
publishToCas: options.publishToCas,
|
|
41
50
|
});
|
|
42
51
|
console.log(formatResult({ action: 'update', data }, globals()));
|
|
43
52
|
});
|
|
44
53
|
}
|
|
54
|
+
/**
|
|
55
|
+
* Commander argParser for `--publish-to-cas`. Validates the value is one of the
|
|
56
|
+
* three {@link PublishToCasMode} policies, erroring at parse time otherwise.
|
|
57
|
+
*/
|
|
58
|
+
function parsePublishToCasMode(value) {
|
|
59
|
+
if (value !== 'auto' && value !== 'always' && value !== 'never') {
|
|
60
|
+
throw new CLIError('--publish-to-cas must be one of "auto", "always", or "never".', 'INVALID_ARGUMENT_ERROR', { value });
|
|
61
|
+
}
|
|
62
|
+
return value;
|
|
63
|
+
}
|
|
45
64
|
/**
|
|
46
65
|
* Returns a commander argParser that validates JSON.
|
|
47
66
|
* Errors at parse time with a clear flag reference.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../../src/commands/update.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../../src/commands/update.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/src/config.js
CHANGED
|
@@ -64,6 +64,7 @@ export function unsetConfigPath(config, path) {
|
|
|
64
64
|
* | `BTCR2_BTC_RPC_USER` | `--btc-rpc-user` |
|
|
65
65
|
* | `BTCR2_BTC_RPC_PASS` | `--btc-rpc-pass` |
|
|
66
66
|
* | `BTCR2_CAS_GATEWAY` | `--cas-gateway` |
|
|
67
|
+
* | `BTCR2_CAS_RPC_URL` | `--cas-rpc-url` |
|
|
67
68
|
*/
|
|
68
69
|
export const ENV_VARS = {
|
|
69
70
|
BTC_REST: 'BTCR2_BTC_REST',
|
|
@@ -71,6 +72,7 @@ export const ENV_VARS = {
|
|
|
71
72
|
BTC_RPC_USER: 'BTCR2_BTC_RPC_USER',
|
|
72
73
|
BTC_RPC_PASS: 'BTCR2_BTC_RPC_PASS',
|
|
73
74
|
CAS_GATEWAY: 'BTCR2_CAS_GATEWAY',
|
|
75
|
+
CAS_RPC_URL: 'BTCR2_CAS_RPC_URL',
|
|
74
76
|
};
|
|
75
77
|
/**
|
|
76
78
|
* Reads {@link ConnectionOverrides} from environment variables.
|
|
@@ -84,6 +86,7 @@ export function readEnvOverrides() {
|
|
|
84
86
|
btcRpcUser: env(ENV_VARS.BTC_RPC_USER),
|
|
85
87
|
btcRpcPass: env(ENV_VARS.BTC_RPC_PASS),
|
|
86
88
|
casGateway: env(ENV_VARS.CAS_GATEWAY),
|
|
89
|
+
casRpcUrl: env(ENV_VARS.CAS_RPC_URL),
|
|
87
90
|
};
|
|
88
91
|
}
|
|
89
92
|
/**
|
|
@@ -127,6 +130,7 @@ export function profileToOverrides(config, profileName) {
|
|
|
127
130
|
btcRpcUser: profile.btc?.rpcUser,
|
|
128
131
|
btcRpcPass: profile.btc?.rpcPass,
|
|
129
132
|
casGateway: profile.cas?.gateway,
|
|
133
|
+
casRpcUrl: profile.cas?.rpcUrl,
|
|
130
134
|
};
|
|
131
135
|
}
|
|
132
136
|
/**
|
|
@@ -177,6 +181,7 @@ function resolveConnectionConfig(network, overrides) {
|
|
|
177
181
|
btcRpcUser: overrides?.btcRpcUser ?? env.btcRpcUser ?? fileOverrides.btcRpcUser,
|
|
178
182
|
btcRpcPass: overrides?.btcRpcPass ?? env.btcRpcPass ?? fileOverrides.btcRpcPass,
|
|
179
183
|
casGateway: overrides?.casGateway ?? env.casGateway ?? fileOverrides.casGateway,
|
|
184
|
+
casRpcUrl: overrides?.casRpcUrl ?? env.casRpcUrl ?? fileOverrides.casRpcUrl,
|
|
180
185
|
};
|
|
181
186
|
const btc = { network };
|
|
182
187
|
if (merged.btcRest) {
|
|
@@ -189,8 +194,16 @@ function resolveConnectionConfig(network, overrides) {
|
|
|
189
194
|
password: merged.btcRpcPass,
|
|
190
195
|
};
|
|
191
196
|
}
|
|
192
|
-
|
|
193
|
-
|
|
197
|
+
// A configured RPC endpoint is writable and takes precedence over the
|
|
198
|
+
// read-only gateway (matching the api's CasConfig priority: rpcUrl > gateway).
|
|
199
|
+
// Both may be set; the api selects one executor from them.
|
|
200
|
+
const cas = {};
|
|
201
|
+
if (merged.casGateway)
|
|
202
|
+
cas.gateway = merged.casGateway;
|
|
203
|
+
if (merged.casRpcUrl)
|
|
204
|
+
cas.rpcUrl = merged.casRpcUrl;
|
|
205
|
+
const hasCas = merged.casGateway || merged.casRpcUrl;
|
|
206
|
+
return { btc, ...(hasCas && { cas }) };
|
|
194
207
|
}
|
|
195
208
|
/**
|
|
196
209
|
* Default {@link ApiFactory} backed by network defaults from
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,kBAAkB,GAAoB;IACjD,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS;CACpE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../../src/cli.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAkB,MAAM,WAAW,CAAC;AAWpD,OAAO,EAAyC,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAIrF;;GAEG;AACH,qBAAa,WAAW;IACtB,SAAgB,OAAO,EAAE,OAAO,CAAC;IAEjC;;;;;;;;;;;;;OAaG;gBAED,OAAO,GAAE,UAA8B,EACvC,eAAe,GAAE,UAA+B;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../../src/cli.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAkB,MAAM,WAAW,CAAC;AAWpD,OAAO,EAAyC,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAIrF;;GAEG;AACH,qBAAa,WAAW;IACtB,SAAgB,OAAO,EAAE,OAAO,CAAC;IAEjC;;;;;;;;;;;;;OAaG;gBAED,OAAO,GAAE,UAA8B,EACvC,eAAe,GAAE,UAA+B;IAgClD;;;;OAIG;IACU,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CASjD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deactivate.d.ts","sourceRoot":"","sources":["../../../../src/commands/deactivate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"deactivate.d.ts","sourceRoot":"","sources":["../../../../src/commands/deactivate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAiB,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAI9D,OAAO,KAAK,EAAE,aAAa,EAAwB,MAAM,aAAa,CAAC;AAKvE,wBAAgB,yBAAyB,CACvC,OAAO,EAAG,OAAO,EACjB,OAAO,EAAG,UAAU,EACpB,OAAO,EAAG,MAAM,aAAa,GAC5B,IAAI,CAkFN"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../../src/commands/update.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../../src/commands/update.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAiB,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAI9D,OAAO,KAAK,EAAE,aAAa,EAAwB,MAAM,aAAa,CAAC;AAEvE,wBAAgB,qBAAqB,CACnC,OAAO,EAAG,OAAO,EACjB,OAAO,EAAG,UAAU,EACpB,OAAO,EAAG,MAAM,aAAa,GAC5B,IAAI,CAqFN"}
|
|
@@ -13,7 +13,10 @@ export type ConnectionOverrides = {
|
|
|
13
13
|
btcRpcUrl?: string;
|
|
14
14
|
btcRpcUser?: string;
|
|
15
15
|
btcRpcPass?: string;
|
|
16
|
+
/** IPFS HTTP gateway for CAS reads (read-only). */
|
|
16
17
|
casGateway?: string;
|
|
18
|
+
/** IPFS HTTP RPC endpoint for a writable CAS (reads + writes). */
|
|
19
|
+
casRpcUrl?: string;
|
|
17
20
|
config?: string;
|
|
18
21
|
profile?: string;
|
|
19
22
|
/** Keystore file path. Overrides the default `$XDG_DATA_HOME/btcr2/keystore.json`. */
|
|
@@ -38,7 +41,7 @@ export type ConnectionOverrides = {
|
|
|
38
41
|
* },
|
|
39
42
|
* "bitcoin": {
|
|
40
43
|
* "btc": { "rest": "https://my-mempool/api" },
|
|
41
|
-
* "cas": { "gateway": "https://ipfs.io" }
|
|
44
|
+
* "cas": { "gateway": "https://ipfs.io", "rpcUrl": "http://127.0.0.1:5001" }
|
|
42
45
|
* }
|
|
43
46
|
* }
|
|
44
47
|
* }
|
|
@@ -61,7 +64,10 @@ export type ConfigFile = {
|
|
|
61
64
|
rpcPass?: string;
|
|
62
65
|
};
|
|
63
66
|
cas?: {
|
|
67
|
+
/** IPFS HTTP gateway for CAS reads (read-only). */
|
|
64
68
|
gateway?: string;
|
|
69
|
+
/** IPFS HTTP RPC endpoint for a writable CAS (reads + writes). */
|
|
70
|
+
rpcUrl?: string;
|
|
65
71
|
};
|
|
66
72
|
/** Signing identity references. Never embeds key material; the secret lives in the keystore. */
|
|
67
73
|
identity?: {
|
|
@@ -104,6 +110,7 @@ export type ApiFactory = (network?: NetworkOption, overrides?: ConnectionOverrid
|
|
|
104
110
|
* | `BTCR2_BTC_RPC_USER` | `--btc-rpc-user` |
|
|
105
111
|
* | `BTCR2_BTC_RPC_PASS` | `--btc-rpc-pass` |
|
|
106
112
|
* | `BTCR2_CAS_GATEWAY` | `--cas-gateway` |
|
|
113
|
+
* | `BTCR2_CAS_RPC_URL` | `--cas-rpc-url` |
|
|
107
114
|
*/
|
|
108
115
|
export declare const ENV_VARS: {
|
|
109
116
|
readonly BTC_REST: "BTCR2_BTC_REST";
|
|
@@ -111,6 +118,7 @@ export declare const ENV_VARS: {
|
|
|
111
118
|
readonly BTC_RPC_USER: "BTCR2_BTC_RPC_USER";
|
|
112
119
|
readonly BTC_RPC_PASS: "BTCR2_BTC_RPC_PASS";
|
|
113
120
|
readonly CAS_GATEWAY: "BTCR2_CAS_GATEWAY";
|
|
121
|
+
readonly CAS_RPC_URL: "BTCR2_CAS_RPC_URL";
|
|
114
122
|
};
|
|
115
123
|
/**
|
|
116
124
|
* Reads {@link ConnectionOverrides} from environment variables.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import type { DidUpdateResult } from '@did-btcr2/api';
|
|
1
2
|
import type { PatchOperation } from '@did-btcr2/common';
|
|
2
|
-
import type { Btcr2DidDocument, ResolutionOptions
|
|
3
|
+
import type { Btcr2DidDocument, ResolutionOptions } from '@did-btcr2/method';
|
|
3
4
|
import type { DidResolutionResult } from '@web5/dids';
|
|
4
5
|
export type NetworkOption = 'bitcoin' | 'testnet3' | 'testnet4' | 'signet' | 'mutinynet' | 'regtest';
|
|
5
6
|
export type OutputFormat = 'json' | 'text';
|
|
@@ -25,10 +26,10 @@ export type CommandResult = {
|
|
|
25
26
|
data: DidResolutionResult;
|
|
26
27
|
} | {
|
|
27
28
|
action: 'update';
|
|
28
|
-
data:
|
|
29
|
+
data: DidUpdateResult;
|
|
29
30
|
} | {
|
|
30
31
|
action: 'deactivate';
|
|
31
|
-
data:
|
|
32
|
+
data: DidUpdateResult;
|
|
32
33
|
} | {
|
|
33
34
|
action: 'key-generate';
|
|
34
35
|
data: {
|
|
@@ -129,6 +130,7 @@ export interface GlobalOptions {
|
|
|
129
130
|
btcRpcUser?: string;
|
|
130
131
|
btcRpcPass?: string;
|
|
131
132
|
casGateway?: string;
|
|
133
|
+
casRpcUrl?: string;
|
|
132
134
|
keystore?: string;
|
|
133
135
|
passphraseFile?: string;
|
|
134
136
|
signingKey?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@did-btcr2/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.14.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "CLI for interacting with did-btcr2-js, the JavaScript/TypeScript reference implementation of the did:btcr2 method. Exposes various parts of multiple packages in the did-btcr2-js monorepo.",
|
|
6
6
|
"main": "./dist/cjs/index.js",
|
|
@@ -61,11 +61,11 @@
|
|
|
61
61
|
"@scure/base": "^1.2.6",
|
|
62
62
|
"@web5/dids": "^1.2.0",
|
|
63
63
|
"commander": "^13.1.0",
|
|
64
|
+
"@did-btcr2/common": "^9.1.0",
|
|
64
65
|
"@did-btcr2/keypair": "^0.13.1",
|
|
65
|
-
"@did-btcr2/
|
|
66
|
-
"@did-btcr2/
|
|
67
|
-
"@did-btcr2/key-manager": "^0.7.0"
|
|
68
|
-
"@did-btcr2/common": "^9.1.0"
|
|
66
|
+
"@did-btcr2/method": "^0.54.0",
|
|
67
|
+
"@did-btcr2/api": "^0.16.0",
|
|
68
|
+
"@did-btcr2/key-manager": "^0.7.0"
|
|
69
69
|
},
|
|
70
70
|
"devDependencies": {
|
|
71
71
|
"@eslint/js": "^9.21.0",
|
package/src/cli.ts
CHANGED
|
@@ -50,7 +50,8 @@ export class DidBtcr2Cli {
|
|
|
50
50
|
.option('--btc-rpc-url <url>', 'Override Bitcoin Core RPC endpoint')
|
|
51
51
|
.option('--btc-rpc-user <user>', 'Bitcoin Core RPC username')
|
|
52
52
|
.option('--btc-rpc-pass <pass>', 'Bitcoin Core RPC password')
|
|
53
|
-
.option('--cas-gateway <url>', 'IPFS HTTP gateway for CAS reads')
|
|
53
|
+
.option('--cas-gateway <url>', 'IPFS HTTP gateway for CAS reads (read-only)')
|
|
54
|
+
.option('--cas-rpc-url <url>', 'IPFS HTTP RPC endpoint for a writable CAS (reads + writes; enables --publish-to-cas)')
|
|
54
55
|
.option('--keystore <path>', 'Path to the keystore file (default: $XDG_DATA_HOME/btcr2/keystore.json)')
|
|
55
56
|
.option('--passphrase-file <path>', 'Read the keystore passphrase from a file (unattended use)')
|
|
56
57
|
.option('--signing-key <ref>', 'Key for create/update/deactivate signing: a URN, fingerprint prefix, or name');
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { PublishToCasMode } from '@did-btcr2/api';
|
|
1
2
|
import { KeyManagerSigner } from '@did-btcr2/key-manager';
|
|
2
3
|
import type { Command } from 'commander';
|
|
3
4
|
import { deriveNetwork, type ApiFactory } from '../config.js';
|
|
@@ -36,11 +37,19 @@ export function registerDeactivateCommand(
|
|
|
36
37
|
'Beacon ID as a JSON string',
|
|
37
38
|
parseJsonArg('--beacon-id'),
|
|
38
39
|
)
|
|
40
|
+
.option(
|
|
41
|
+
'--publish-to-cas <mode>',
|
|
42
|
+
'Publish update artifacts to a writable CAS before broadcast: auto|always|never. '
|
|
43
|
+
+ 'CAS publication is optional; the default distributes the returned artifacts via sidecar.',
|
|
44
|
+
parsePublishToCasMode,
|
|
45
|
+
'never',
|
|
46
|
+
)
|
|
39
47
|
.action(async (options: {
|
|
40
48
|
sourceDocument : unknown;
|
|
41
49
|
sourceVersionId : string;
|
|
42
50
|
verificationMethodId : string;
|
|
43
51
|
beaconId : unknown;
|
|
52
|
+
publishToCas : PublishToCasMode;
|
|
44
53
|
}) => {
|
|
45
54
|
if (!/^\d+$/.test(options.sourceVersionId)) {
|
|
46
55
|
throw new CLIError(
|
|
@@ -70,6 +79,12 @@ export function registerDeactivateCommand(
|
|
|
70
79
|
const api = factory(network, globals());
|
|
71
80
|
const keyId = resolveKeyRef(api.kms.kms, globals().signingKey);
|
|
72
81
|
const signer = new KeyManagerSigner(api.kms.kms, keyId);
|
|
82
|
+
// CAS publication is optional and never required: every beacon update can
|
|
83
|
+
// be completed and shared via sidecar alone. It is opt-in and defaults to
|
|
84
|
+
// 'never'; pass --publish-to-cas auto|always to publish the signed update
|
|
85
|
+
// (and, for CAS beacons, the announcement) to a writable CAS configured
|
|
86
|
+
// via --cas-rpc-url. The returned artifacts (txid, announcement, proof)
|
|
87
|
+
// are always printed for sidecar distribution regardless.
|
|
73
88
|
const data = await api.btcr2.update({
|
|
74
89
|
sourceDocument : parsed.sourceDocument,
|
|
75
90
|
patches : parsed.patches,
|
|
@@ -77,11 +92,27 @@ export function registerDeactivateCommand(
|
|
|
77
92
|
verificationMethodId : parsed.verificationMethodId,
|
|
78
93
|
beaconId : parsed.beaconId,
|
|
79
94
|
signer,
|
|
95
|
+
publishToCas : options.publishToCas,
|
|
80
96
|
});
|
|
81
97
|
console.log(formatResult({ action: 'deactivate', data }, globals()));
|
|
82
98
|
});
|
|
83
99
|
}
|
|
84
100
|
|
|
101
|
+
/**
|
|
102
|
+
* Commander argParser for `--publish-to-cas`. Validates the value is one of the
|
|
103
|
+
* three {@link PublishToCasMode} policies, erroring at parse time otherwise.
|
|
104
|
+
*/
|
|
105
|
+
function parsePublishToCasMode(value: string): PublishToCasMode {
|
|
106
|
+
if (value !== 'auto' && value !== 'always' && value !== 'never') {
|
|
107
|
+
throw new CLIError(
|
|
108
|
+
'--publish-to-cas must be one of "auto", "always", or "never".',
|
|
109
|
+
'INVALID_ARGUMENT_ERROR',
|
|
110
|
+
{ value },
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
return value;
|
|
114
|
+
}
|
|
115
|
+
|
|
85
116
|
/**
|
|
86
117
|
* Returns a commander argParser that validates JSON.
|
|
87
118
|
* Errors at parse time with a clear flag reference.
|