@bitgo-beta/utxo-bin 2.8.3-beta.152 → 2.8.3-beta.1521
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 +5 -5
- package/dist/bin/index.js +40 -4
- package/dist/src/AddressParser.d.ts +0 -1
- package/dist/src/AddressParser.d.ts.map +1 -1
- package/dist/src/AddressParser.js +48 -9
- package/dist/src/InputParser.d.ts +1 -2
- package/dist/src/InputParser.d.ts.map +1 -1
- package/dist/src/InputParser.js +71 -23
- package/dist/src/OutputParser.d.ts +3 -3
- package/dist/src/OutputParser.d.ts.map +1 -1
- package/dist/src/OutputParser.js +52 -6
- package/dist/src/Parser.d.ts +3 -3
- package/dist/src/Parser.d.ts.map +1 -1
- package/dist/src/Parser.js +12 -5
- package/dist/src/ParserTx.d.ts +3 -4
- package/dist/src/ParserTx.d.ts.map +1 -1
- package/dist/src/ParserTx.js +41 -9
- package/dist/src/ScriptParser.d.ts +8 -6
- package/dist/src/ScriptParser.d.ts.map +1 -1
- package/dist/src/ScriptParser.js +60 -8
- package/dist/src/TxParser.d.ts +3 -2
- package/dist/src/TxParser.d.ts.map +1 -1
- package/dist/src/TxParser.js +44 -11
- package/dist/src/args/format.d.ts +8 -0
- package/dist/src/args/format.d.ts.map +1 -0
- package/dist/src/args/format.js +15 -0
- package/dist/src/args/index.d.ts +5 -0
- package/dist/src/args/index.d.ts.map +1 -0
- package/dist/src/args/index.js +21 -0
- package/dist/src/args/parseNetwork.d.ts +25 -0
- package/dist/src/args/parseNetwork.d.ts.map +1 -0
- package/dist/src/args/parseNetwork.js +108 -0
- package/dist/src/args/parseString.d.ts +40 -0
- package/dist/src/args/parseString.d.ts.map +1 -0
- package/dist/src/args/parseString.js +153 -0
- package/dist/src/args/walletKeys.d.ts +38 -0
- package/dist/src/args/walletKeys.d.ts.map +1 -0
- package/dist/src/args/walletKeys.js +64 -0
- package/dist/src/bip32.d.ts +5 -0
- package/dist/src/bip32.d.ts.map +1 -0
- package/dist/src/bip32.js +56 -0
- package/dist/src/commands/cmdAddress/cmdGenerate.d.ts +21 -0
- package/dist/src/commands/cmdAddress/cmdGenerate.d.ts.map +1 -0
- package/dist/src/commands/cmdAddress/cmdGenerate.js +89 -0
- package/dist/src/commands/cmdAddress/cmdParse.d.ts +20 -0
- package/dist/src/commands/cmdAddress/cmdParse.d.ts.map +1 -0
- package/dist/src/commands/cmdAddress/cmdParse.js +28 -0
- package/dist/src/commands/cmdAddress/index.d.ts +3 -0
- package/dist/src/commands/cmdAddress/index.d.ts.map +1 -0
- package/dist/src/commands/cmdAddress/index.js +16 -0
- package/dist/src/commands/cmdBip32.d.ts +16 -0
- package/dist/src/commands/cmdBip32.d.ts.map +1 -0
- package/dist/src/commands/cmdBip32.js +78 -0
- package/dist/src/commands/cmdDescriptor/fromFixedScript.d.ts +10 -0
- package/dist/src/commands/cmdDescriptor/fromFixedScript.d.ts.map +1 -0
- package/dist/src/commands/cmdDescriptor/fromFixedScript.js +73 -0
- package/dist/src/commands/cmdDescriptor/index.d.ts +4 -0
- package/dist/src/commands/cmdDescriptor/index.d.ts.map +1 -0
- package/dist/src/commands/cmdDescriptor/index.js +30 -0
- package/dist/src/commands/cmdParseScript.d.ts +18 -0
- package/dist/src/commands/cmdParseScript.d.ts.map +1 -0
- package/dist/src/commands/cmdParseScript.js +27 -0
- package/dist/src/commands/cmdParseTx.d.ts +31 -0
- package/dist/src/commands/cmdParseTx.d.ts.map +1 -0
- package/dist/src/commands/cmdParseTx.js +162 -0
- package/dist/src/commands/cmdPsbt/cmdAddDescriptorInput.d.ts +13 -0
- package/dist/src/commands/cmdPsbt/cmdAddDescriptorInput.d.ts.map +1 -0
- package/dist/src/commands/cmdPsbt/cmdAddDescriptorInput.js +100 -0
- package/dist/src/commands/cmdPsbt/cmdAddOutput.d.ts +11 -0
- package/dist/src/commands/cmdPsbt/cmdAddOutput.d.ts.map +1 -0
- package/dist/src/commands/cmdPsbt/cmdAddOutput.js +122 -0
- package/dist/src/commands/cmdPsbt/cmdCreate.d.ts +9 -0
- package/dist/src/commands/cmdPsbt/cmdCreate.d.ts.map +1 -0
- package/dist/src/commands/cmdPsbt/cmdCreate.js +23 -0
- package/dist/src/commands/cmdPsbt/cmdFinalize.d.ts +11 -0
- package/dist/src/commands/cmdPsbt/cmdFinalize.d.ts.map +1 -0
- package/dist/src/commands/cmdPsbt/cmdFinalize.js +43 -0
- package/dist/src/commands/cmdPsbt/cmdSign.d.ts +7 -0
- package/dist/src/commands/cmdPsbt/cmdSign.d.ts.map +1 -0
- package/dist/src/commands/cmdPsbt/cmdSign.js +57 -0
- package/dist/src/commands/cmdPsbt/index.d.ts +8 -0
- package/dist/src/commands/cmdPsbt/index.d.ts.map +1 -0
- package/dist/src/commands/cmdPsbt/index.js +27 -0
- package/dist/src/commands/cmdPsbt/withPsbt.d.ts +63 -0
- package/dist/src/commands/cmdPsbt/withPsbt.d.ts.map +1 -0
- package/dist/src/commands/cmdPsbt/withPsbt.js +99 -0
- package/dist/src/commands/cmdPsbt/wrap.d.ts +5 -0
- package/dist/src/commands/cmdPsbt/wrap.d.ts.map +1 -0
- package/dist/src/commands/cmdPsbt/wrap.js +60 -0
- package/dist/src/commands/formatString.d.ts +8 -0
- package/dist/src/commands/formatString.d.ts.map +1 -0
- package/dist/src/commands/formatString.js +14 -0
- package/dist/src/commands/index.d.ts +7 -0
- package/dist/src/commands/index.d.ts.map +1 -0
- package/dist/src/commands/index.js +23 -0
- package/dist/src/ecdsa.d.ts +1 -2
- package/dist/src/ecdsa.d.ts.map +1 -1
- package/dist/src/ecdsa.js +9 -9
- package/dist/src/fetch.d.ts +8 -1
- package/dist/src/fetch.d.ts.map +1 -1
- package/dist/src/fetch.js +77 -11
- package/dist/src/format.d.ts +5 -2
- package/dist/src/format.d.ts.map +1 -1
- package/dist/src/format.js +24 -9
- package/dist/src/generateAddress.d.ts +24 -9
- package/dist/src/generateAddress.d.ts.map +1 -1
- package/dist/src/generateAddress.js +99 -26
- package/dist/src/hollowSegwitSpend.d.ts +1 -1
- package/dist/src/hollowSegwitSpend.d.ts.map +1 -1
- package/dist/src/hollowSegwitSpend.js +37 -5
- package/dist/src/parseUnknown.js +4 -5
- package/dist/src/prevTx.d.ts +4 -0
- package/dist/src/prevTx.d.ts.map +1 -0
- package/dist/src/prevTx.js +77 -0
- package/dist/test/args/stringToBuffer.d.ts.map +1 -0
- package/dist/test/args/stringToBuffer.js +49 -0
- package/dist/test/bip32.d.ts +2 -0
- package/dist/test/bip32.d.ts.map +1 -0
- package/dist/test/bip32.js +55 -0
- package/dist/test/bip32.util.d.ts +6 -0
- package/dist/test/bip32.util.d.ts.map +1 -0
- package/dist/test/bip32.util.js +46 -0
- package/dist/test/captureConsole.d.ts +6 -0
- package/dist/test/captureConsole.d.ts.map +1 -0
- package/dist/test/captureConsole.js +65 -0
- package/dist/test/cmdDescriptor/fromFixedScript.d.ts +2 -0
- package/dist/test/cmdDescriptor/fromFixedScript.d.ts.map +1 -0
- package/dist/test/cmdDescriptor/fromFixedScript.js +70 -0
- package/dist/test/cmdPsbt.d.ts +2 -0
- package/dist/test/cmdPsbt.d.ts.map +1 -0
- package/dist/test/cmdPsbt.js +138 -0
- package/dist/test/fixtures.d.ts +4 -4
- package/dist/test/fixtures.d.ts.map +1 -1
- package/dist/test/fixtures.js +45 -13
- package/dist/test/generateAddress.js +63 -13
- package/dist/test/parseAddress.d.ts +1 -5
- package/dist/test/parseAddress.d.ts.map +1 -1
- package/dist/test/parseAddress.js +54 -22
- package/dist/test/parseScript.js +45 -9
- package/dist/test/parseTransaction.js +49 -12
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +11 -9
- package/dist/src/commands.d.ts +0 -78
- package/dist/src/commands.d.ts.map +0 -1
- package/dist/src/commands.js +0 -284
- package/dist/src/parseString.d.ts +0 -5
- package/dist/src/parseString.d.ts.map +0 -1
- package/dist/src/parseString.js +0 -29
- package/dist/src/readStdin.d.ts +0 -5
- package/dist/src/readStdin.d.ts.map +0 -1
- package/dist/src/readStdin.js +0 -42
- package/dist/test/stringToBuffer.d.ts.map +0 -1
- package/dist/test/stringToBuffer.js +0 -16
- /package/dist/test/{stringToBuffer.d.ts → args/stringToBuffer.d.ts} +0 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as utxolib from '@bitgo-beta/utxo-lib';
|
|
2
|
+
import * as yargs from 'yargs';
|
|
3
|
+
import { AddressParser } from '../../AddressParser';
|
|
4
|
+
import { FormatTreeOrJson } from '../../args';
|
|
5
|
+
export type ArgsParseAddress = {
|
|
6
|
+
network?: utxolib.Network;
|
|
7
|
+
format: FormatTreeOrJson;
|
|
8
|
+
all: boolean;
|
|
9
|
+
convert: boolean;
|
|
10
|
+
address: string;
|
|
11
|
+
};
|
|
12
|
+
export declare function getAddressParser(argv: ArgsParseAddress): AddressParser;
|
|
13
|
+
export declare const cmdParse: {
|
|
14
|
+
readonly command: "parse [address]";
|
|
15
|
+
readonly aliases: readonly ["address"];
|
|
16
|
+
readonly describe: "parse address";
|
|
17
|
+
readonly builder: (b: yargs.Argv<unknown>) => yargs.Argv<ArgsParseAddress>;
|
|
18
|
+
readonly handler: (argv: yargs.Arguments<ArgsParseAddress>) => void;
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=cmdParse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cmdParse.d.ts","sourceRoot":"","sources":["../../../../src/commands/cmdAddress/cmdParse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAoB,gBAAgB,EAAqB,MAAM,YAAY,CAAC;AAInF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC;IAC1B,MAAM,EAAE,gBAAgB,CAAC;IACzB,GAAG,EAAE,OAAO,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,GAAG,aAAa,CAEtE;AAED,eAAO,MAAM,QAAQ;;;;0BAIR,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAG,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC;6BAS/C,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,KAAG,IAAI;CAI9C,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.cmdParse = void 0;
|
|
4
|
+
exports.getAddressParser = getAddressParser;
|
|
5
|
+
const AddressParser_1 = require("../../AddressParser");
|
|
6
|
+
const args_1 = require("../../args");
|
|
7
|
+
const formatString_1 = require("../formatString");
|
|
8
|
+
function getAddressParser(argv) {
|
|
9
|
+
return new AddressParser_1.AddressParser(argv);
|
|
10
|
+
}
|
|
11
|
+
exports.cmdParse = {
|
|
12
|
+
command: 'parse [address]',
|
|
13
|
+
aliases: ['address'],
|
|
14
|
+
describe: 'parse address',
|
|
15
|
+
builder(b) {
|
|
16
|
+
return b
|
|
17
|
+
.options((0, args_1.getNetworkOptions)())
|
|
18
|
+
.option('format', args_1.formatTreeOrJson)
|
|
19
|
+
.option('convert', { type: 'boolean', default: false })
|
|
20
|
+
.option('all', { type: 'boolean', default: false })
|
|
21
|
+
.positional('address', { type: 'string', demandOption: true });
|
|
22
|
+
},
|
|
23
|
+
handler(argv) {
|
|
24
|
+
const parsed = getAddressParser(argv).parse(argv.address);
|
|
25
|
+
console.log((0, formatString_1.formatString)(parsed, argv));
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY21kUGFyc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tbWFuZHMvY21kQWRkcmVzcy9jbWRQYXJzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFnQkEsNENBRUM7QUFmRCx1REFBb0Q7QUFDcEQscUNBQW1GO0FBRW5GLGtEQUErQztBQVUvQyxTQUFnQixnQkFBZ0IsQ0FBQyxJQUFzQjtJQUNyRCxPQUFPLElBQUksNkJBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqQyxDQUFDO0FBRVksUUFBQSxRQUFRLEdBQUc7SUFDdEIsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUM7SUFDcEIsUUFBUSxFQUFFLGVBQWU7SUFDekIsT0FBTyxDQUFDLENBQXNCO1FBQzVCLE9BQU8sQ0FBQzthQUNMLE9BQU8sQ0FBQyxJQUFBLHdCQUFpQixHQUFFLENBQUM7YUFDNUIsTUFBTSxDQUFDLFFBQVEsRUFBRSx1QkFBZ0IsQ0FBQzthQUNsQyxNQUFNLENBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7YUFDdEQsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO2FBQ2xELFVBQVUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCxPQUFPLENBQUMsSUFBdUM7UUFDN0MsTUFBTSxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxRCxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUEsMkJBQVksRUFBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMxQyxDQUFDO0NBQ08sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0ICogYXMgeWFyZ3MgZnJvbSAneWFyZ3MnO1xuXG5pbXBvcnQgeyBBZGRyZXNzUGFyc2VyIH0gZnJvbSAnLi4vLi4vQWRkcmVzc1BhcnNlcic7XG5pbXBvcnQgeyBmb3JtYXRUcmVlT3JKc29uLCBGb3JtYXRUcmVlT3JKc29uLCBnZXROZXR3b3JrT3B0aW9ucyB9IGZyb20gJy4uLy4uL2FyZ3MnO1xuXG5pbXBvcnQgeyBmb3JtYXRTdHJpbmcgfSBmcm9tICcuLi9mb3JtYXRTdHJpbmcnO1xuXG5leHBvcnQgdHlwZSBBcmdzUGFyc2VBZGRyZXNzID0ge1xuICBuZXR3b3JrPzogdXR4b2xpYi5OZXR3b3JrO1xuICBmb3JtYXQ6IEZvcm1hdFRyZWVPckpzb247XG4gIGFsbDogYm9vbGVhbjtcbiAgY29udmVydDogYm9vbGVhbjtcbiAgYWRkcmVzczogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFkZHJlc3NQYXJzZXIoYXJndjogQXJnc1BhcnNlQWRkcmVzcyk6IEFkZHJlc3NQYXJzZXIge1xuICByZXR1cm4gbmV3IEFkZHJlc3NQYXJzZXIoYXJndik7XG59XG5cbmV4cG9ydCBjb25zdCBjbWRQYXJzZSA9IHtcbiAgY29tbWFuZDogJ3BhcnNlIFthZGRyZXNzXScsXG4gIGFsaWFzZXM6IFsnYWRkcmVzcyddLFxuICBkZXNjcmliZTogJ3BhcnNlIGFkZHJlc3MnLFxuICBidWlsZGVyKGI6IHlhcmdzLkFyZ3Y8dW5rbm93bj4pOiB5YXJncy5Bcmd2PEFyZ3NQYXJzZUFkZHJlc3M+IHtcbiAgICByZXR1cm4gYlxuICAgICAgLm9wdGlvbnMoZ2V0TmV0d29ya09wdGlvbnMoKSlcbiAgICAgIC5vcHRpb24oJ2Zvcm1hdCcsIGZvcm1hdFRyZWVPckpzb24pXG4gICAgICAub3B0aW9uKCdjb252ZXJ0JywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlIH0pXG4gICAgICAub3B0aW9uKCdhbGwnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UgfSlcbiAgICAgIC5wb3NpdGlvbmFsKCdhZGRyZXNzJywgeyB0eXBlOiAnc3RyaW5nJywgZGVtYW5kT3B0aW9uOiB0cnVlIH0pO1xuICB9LFxuXG4gIGhhbmRsZXIoYXJndjogeWFyZ3MuQXJndW1lbnRzPEFyZ3NQYXJzZUFkZHJlc3M+KTogdm9pZCB7XG4gICAgY29uc3QgcGFyc2VkID0gZ2V0QWRkcmVzc1BhcnNlcihhcmd2KS5wYXJzZShhcmd2LmFkZHJlc3MpO1xuICAgIGNvbnNvbGUubG9nKGZvcm1hdFN0cmluZyhwYXJzZWQsIGFyZ3YpKTtcbiAgfSxcbn0gYXMgY29uc3Q7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/cmdAddress/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAKtC,eAAO,MAAM,UAAU,EAAE,aAAa,CAAC,OAAO,EAAE,OAAO,CAStD,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.cmdAddress = void 0;
|
|
4
|
+
const cmdGenerate_1 = require("./cmdGenerate");
|
|
5
|
+
const cmdParse_1 = require("./cmdParse");
|
|
6
|
+
exports.cmdAddress = {
|
|
7
|
+
command: 'address <command>',
|
|
8
|
+
describe: 'address commands',
|
|
9
|
+
builder(b) {
|
|
10
|
+
return b.strict().command(cmdGenerate_1.cmdGenerateFixedScript).command(cmdGenerate_1.cmdFromDescriptor).command(cmdParse_1.cmdParse).demandCommand();
|
|
11
|
+
},
|
|
12
|
+
handler() {
|
|
13
|
+
// do nothing
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tbWFuZHMvY21kQWRkcmVzcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSwrQ0FBMEU7QUFDMUUseUNBQXNDO0FBRXpCLFFBQUEsVUFBVSxHQUFvQztJQUN6RCxPQUFPLEVBQUUsbUJBQW1CO0lBQzVCLFFBQVEsRUFBRSxrQkFBa0I7SUFDNUIsT0FBTyxDQUFDLENBQUM7UUFDUCxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsb0NBQXNCLENBQUMsQ0FBQyxPQUFPLENBQUMsK0JBQWlCLENBQUMsQ0FBQyxPQUFPLENBQUMsbUJBQVEsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ2pILENBQUM7SUFDRCxPQUFPO1FBQ0wsYUFBYTtJQUNmLENBQUM7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbWFuZE1vZHVsZSB9IGZyb20gJ3lhcmdzJztcblxuaW1wb3J0IHsgY21kRnJvbURlc2NyaXB0b3IsIGNtZEdlbmVyYXRlRml4ZWRTY3JpcHQgfSBmcm9tICcuL2NtZEdlbmVyYXRlJztcbmltcG9ydCB7IGNtZFBhcnNlIH0gZnJvbSAnLi9jbWRQYXJzZSc7XG5cbmV4cG9ydCBjb25zdCBjbWRBZGRyZXNzOiBDb21tYW5kTW9kdWxlPHVua25vd24sIHVua25vd24+ID0ge1xuICBjb21tYW5kOiAnYWRkcmVzcyA8Y29tbWFuZD4nLFxuICBkZXNjcmliZTogJ2FkZHJlc3MgY29tbWFuZHMnLFxuICBidWlsZGVyKGIpIHtcbiAgICByZXR1cm4gYi5zdHJpY3QoKS5jb21tYW5kKGNtZEdlbmVyYXRlRml4ZWRTY3JpcHQpLmNvbW1hbmQoY21kRnJvbURlc2NyaXB0b3IpLmNvbW1hbmQoY21kUGFyc2UpLmRlbWFuZENvbW1hbmQoKTtcbiAgfSxcbiAgaGFuZGxlcigpIHtcbiAgICAvLyBkbyBub3RoaW5nXG4gIH0sXG59O1xuIl19
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { CommandModule } from 'yargs';
|
|
2
|
+
import { FormatTreeOrJson } from '../args';
|
|
3
|
+
type ArgsBip32Generate = {
|
|
4
|
+
format: FormatTreeOrJson;
|
|
5
|
+
bip32Key: string;
|
|
6
|
+
derive?: string;
|
|
7
|
+
all: boolean;
|
|
8
|
+
};
|
|
9
|
+
export declare const cmdBip32Parse: CommandModule<unknown, ArgsBip32Generate>;
|
|
10
|
+
type GenerateBip32Args = {
|
|
11
|
+
seed: string;
|
|
12
|
+
};
|
|
13
|
+
export declare const cmdBip32Generate: CommandModule<unknown, GenerateBip32Args>;
|
|
14
|
+
export declare const cmdBip32: CommandModule<unknown, unknown>;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=cmdBip32.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cmdBip32.d.ts","sourceRoot":"","sources":["../../../src/commands/cmdBip32.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAItC,OAAO,EAAoB,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAI7D,KAAK,iBAAiB,GAAG;IACvB,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;CACd,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,aAAa,CAAC,OAAO,EAAE,iBAAiB,CAanE,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,aAAa,CAAC,OAAO,EAAE,iBAAiB,CAWtE,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,aAAa,CAAC,OAAO,EAAE,OAAO,CASpD,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.cmdBip32 = exports.cmdBip32Generate = exports.cmdBip32Parse = void 0;
|
|
37
|
+
const crypto = __importStar(require("crypto"));
|
|
38
|
+
const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
|
|
39
|
+
const bip32_1 = require("../bip32");
|
|
40
|
+
const args_1 = require("../args");
|
|
41
|
+
const formatString_1 = require("./formatString");
|
|
42
|
+
exports.cmdBip32Parse = {
|
|
43
|
+
command: 'parse [xpub|xprv]',
|
|
44
|
+
describe: 'show xpub info',
|
|
45
|
+
builder(b) {
|
|
46
|
+
return b
|
|
47
|
+
.options({ format: args_1.formatTreeOrJson })
|
|
48
|
+
.positional('bip32Key', { type: 'string', demandOption: true })
|
|
49
|
+
.option('all', { type: 'boolean', default: false })
|
|
50
|
+
.option('derive', { type: 'string', description: 'show xpub derived with path' });
|
|
51
|
+
},
|
|
52
|
+
handler(argv) {
|
|
53
|
+
console.log((0, formatString_1.formatString)((0, bip32_1.parseBip32)(argv.bip32Key, { derive: argv.derive }), argv));
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
exports.cmdBip32Generate = {
|
|
57
|
+
command: 'generateFromSeed',
|
|
58
|
+
describe: 'generate keypair from seed - do not use for real keys!',
|
|
59
|
+
builder(b) {
|
|
60
|
+
return b.option('seed', { type: 'string', demandOption: true, default: 'setec astronomy' });
|
|
61
|
+
},
|
|
62
|
+
handler(argv) {
|
|
63
|
+
const key = utxolib.bip32.fromSeed(crypto.createHash('sha256').update(argv.seed).digest());
|
|
64
|
+
console.log(key.toBase58());
|
|
65
|
+
console.log(key.neutered().toBase58());
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
exports.cmdBip32 = {
|
|
69
|
+
command: 'bip32 <command>',
|
|
70
|
+
describe: 'bip32 commands',
|
|
71
|
+
builder(b) {
|
|
72
|
+
return b.strict().command(exports.cmdBip32Parse).command(exports.cmdBip32Generate).demandCommand();
|
|
73
|
+
},
|
|
74
|
+
handler() {
|
|
75
|
+
// do nothing
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY21kQmlwMzIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbWFuZHMvY21kQmlwMzIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0NBQWlDO0FBSWpDLDhEQUFnRDtBQUVoRCxvQ0FBc0M7QUFDdEMsa0NBQTZEO0FBRTdELGlEQUE4QztBQVNqQyxRQUFBLGFBQWEsR0FBOEM7SUFDdEUsT0FBTyxFQUFFLG1CQUFtQjtJQUM1QixRQUFRLEVBQUUsZ0JBQWdCO0lBQzFCLE9BQU8sQ0FBQyxDQUFzQjtRQUM1QixPQUFPLENBQUM7YUFDTCxPQUFPLENBQUMsRUFBRSxNQUFNLEVBQUUsdUJBQWdCLEVBQUUsQ0FBQzthQUNyQyxVQUFVLENBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUM7YUFDOUQsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO2FBQ2xELE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSw2QkFBNkIsRUFBRSxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUNELE9BQU8sQ0FBQyxJQUFJO1FBQ1YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFBLDJCQUFZLEVBQUMsSUFBQSxrQkFBVSxFQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN0RixDQUFDO0NBQ0YsQ0FBQztBQU1XLFFBQUEsZ0JBQWdCLEdBQThDO0lBQ3pFLE9BQU8sRUFBRSxrQkFBa0I7SUFDM0IsUUFBUSxFQUFFLHdEQUF3RDtJQUNsRSxPQUFPLENBQUMsQ0FBQztRQUNQLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLENBQUMsQ0FBQztJQUM5RixDQUFDO0lBQ0QsT0FBTyxDQUFDLElBQUk7UUFDVixNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUMzRixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzVCLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDekMsQ0FBQztDQUNGLENBQUM7QUFFVyxRQUFBLFFBQVEsR0FBb0M7SUFDdkQsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixRQUFRLEVBQUUsZ0JBQWdCO0lBQzFCLE9BQU8sQ0FBQyxDQUFzQjtRQUM1QixPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMscUJBQWEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyx3QkFBZ0IsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3JGLENBQUM7SUFDRCxPQUFPO1FBQ0wsYUFBYTtJQUNmLENBQUM7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5cbmltcG9ydCAqIGFzIHlhcmdzIGZyb20gJ3lhcmdzJztcbmltcG9ydCB7IENvbW1hbmRNb2R1bGUgfSBmcm9tICd5YXJncyc7XG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcblxuaW1wb3J0IHsgcGFyc2VCaXAzMiB9IGZyb20gJy4uL2JpcDMyJztcbmltcG9ydCB7IGZvcm1hdFRyZWVPckpzb24sIEZvcm1hdFRyZWVPckpzb24gfSBmcm9tICcuLi9hcmdzJztcblxuaW1wb3J0IHsgZm9ybWF0U3RyaW5nIH0gZnJvbSAnLi9mb3JtYXRTdHJpbmcnO1xuXG50eXBlIEFyZ3NCaXAzMkdlbmVyYXRlID0ge1xuICBmb3JtYXQ6IEZvcm1hdFRyZWVPckpzb247XG4gIGJpcDMyS2V5OiBzdHJpbmc7XG4gIGRlcml2ZT86IHN0cmluZztcbiAgYWxsOiBib29sZWFuO1xufTtcblxuZXhwb3J0IGNvbnN0IGNtZEJpcDMyUGFyc2U6IENvbW1hbmRNb2R1bGU8dW5rbm93biwgQXJnc0JpcDMyR2VuZXJhdGU+ID0ge1xuICBjb21tYW5kOiAncGFyc2UgW3hwdWJ8eHBydl0nLFxuICBkZXNjcmliZTogJ3Nob3cgeHB1YiBpbmZvJyxcbiAgYnVpbGRlcihiOiB5YXJncy5Bcmd2PHVua25vd24+KTogeWFyZ3MuQXJndjxBcmdzQmlwMzJHZW5lcmF0ZT4ge1xuICAgIHJldHVybiBiXG4gICAgICAub3B0aW9ucyh7IGZvcm1hdDogZm9ybWF0VHJlZU9ySnNvbiB9KVxuICAgICAgLnBvc2l0aW9uYWwoJ2JpcDMyS2V5JywgeyB0eXBlOiAnc3RyaW5nJywgZGVtYW5kT3B0aW9uOiB0cnVlIH0pXG4gICAgICAub3B0aW9uKCdhbGwnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UgfSlcbiAgICAgIC5vcHRpb24oJ2Rlcml2ZScsIHsgdHlwZTogJ3N0cmluZycsIGRlc2NyaXB0aW9uOiAnc2hvdyB4cHViIGRlcml2ZWQgd2l0aCBwYXRoJyB9KTtcbiAgfSxcbiAgaGFuZGxlcihhcmd2KTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coZm9ybWF0U3RyaW5nKHBhcnNlQmlwMzIoYXJndi5iaXAzMktleSwgeyBkZXJpdmU6IGFyZ3YuZGVyaXZlIH0pLCBhcmd2KSk7XG4gIH0sXG59O1xuXG50eXBlIEdlbmVyYXRlQmlwMzJBcmdzID0ge1xuICBzZWVkOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgY29uc3QgY21kQmlwMzJHZW5lcmF0ZTogQ29tbWFuZE1vZHVsZTx1bmtub3duLCBHZW5lcmF0ZUJpcDMyQXJncz4gPSB7XG4gIGNvbW1hbmQ6ICdnZW5lcmF0ZUZyb21TZWVkJyxcbiAgZGVzY3JpYmU6ICdnZW5lcmF0ZSBrZXlwYWlyIGZyb20gc2VlZCAtIGRvIG5vdCB1c2UgZm9yIHJlYWwga2V5cyEnLFxuICBidWlsZGVyKGIpIHtcbiAgICByZXR1cm4gYi5vcHRpb24oJ3NlZWQnLCB7IHR5cGU6ICdzdHJpbmcnLCBkZW1hbmRPcHRpb246IHRydWUsIGRlZmF1bHQ6ICdzZXRlYyBhc3Ryb25vbXknIH0pO1xuICB9LFxuICBoYW5kbGVyKGFyZ3YpIHtcbiAgICBjb25zdCBrZXkgPSB1dHhvbGliLmJpcDMyLmZyb21TZWVkKGNyeXB0by5jcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUoYXJndi5zZWVkKS5kaWdlc3QoKSk7XG4gICAgY29uc29sZS5sb2coa2V5LnRvQmFzZTU4KCkpO1xuICAgIGNvbnNvbGUubG9nKGtleS5uZXV0ZXJlZCgpLnRvQmFzZTU4KCkpO1xuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IGNtZEJpcDMyOiBDb21tYW5kTW9kdWxlPHVua25vd24sIHVua25vd24+ID0ge1xuICBjb21tYW5kOiAnYmlwMzIgPGNvbW1hbmQ+JyxcbiAgZGVzY3JpYmU6ICdiaXAzMiBjb21tYW5kcycsXG4gIGJ1aWxkZXIoYjogeWFyZ3MuQXJndjx1bmtub3duPik6IHlhcmdzLkFyZ3Y8dW5rbm93bj4ge1xuICAgIHJldHVybiBiLnN0cmljdCgpLmNvbW1hbmQoY21kQmlwMzJQYXJzZSkuY29tbWFuZChjbWRCaXAzMkdlbmVyYXRlKS5kZW1hbmRDb21tYW5kKCk7XG4gIH0sXG4gIGhhbmRsZXIoKTogdm9pZCB7XG4gICAgLy8gZG8gbm90aGluZ1xuICB9LFxufTtcbiJdfQ==
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { CommandModule } from 'yargs';
|
|
2
|
+
import * as utxolib from '@bitgo-beta/utxo-lib';
|
|
3
|
+
import { FormatTreeOrJson, KeyOptions } from '../../args';
|
|
4
|
+
type ArgsFixedScriptToDescriptor = KeyOptions & {
|
|
5
|
+
network: utxolib.Network;
|
|
6
|
+
format: FormatTreeOrJson;
|
|
7
|
+
};
|
|
8
|
+
export declare const cmdFromFixedScript: CommandModule<unknown, ArgsFixedScriptToDescriptor>;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=fromFixedScript.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fromFixedScript.d.ts","sourceRoot":"","sources":["../../../../src/commands/cmdDescriptor/fromFixedScript.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAGhD,OAAO,EACL,gBAAgB,EAKhB,UAAU,EACX,MAAM,YAAY,CAAC;AAKpB,KAAK,2BAA2B,GAAG,UAAU,GAAG;IAC9C,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC;IACzB,MAAM,EAAE,gBAAgB,CAAC;CAC1B,CAAC;AAkBF,eAAO,MAAM,kBAAkB,EAAE,aAAa,CAAC,OAAO,EAAE,2BAA2B,CAuBlF,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.cmdFromFixedScript = void 0;
|
|
37
|
+
const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
|
|
38
|
+
const descriptor_1 = require("@bitgo-beta/utxo-core/descriptor");
|
|
39
|
+
const args_1 = require("../../args");
|
|
40
|
+
const format_1 = require("../../format");
|
|
41
|
+
function mapKeyToNetwork(key, network) {
|
|
42
|
+
key = utxolib.bip32.fromBase58(key.toBase58());
|
|
43
|
+
key.network = network;
|
|
44
|
+
return key;
|
|
45
|
+
}
|
|
46
|
+
function mapRootWalletKeysToNetwork(rootWalletKeys, network) {
|
|
47
|
+
return new utxolib.bitgo.RootWalletKeys(rootWalletKeys.triple.map((key) => mapKeyToNetwork(key, network)), rootWalletKeys.derivationPrefixes);
|
|
48
|
+
}
|
|
49
|
+
exports.cmdFromFixedScript = {
|
|
50
|
+
command: 'fromFixedScript',
|
|
51
|
+
describe: 'Convert BitGo FixedScript RootWalletKeys to output descriptors',
|
|
52
|
+
builder(b) {
|
|
53
|
+
return b.option((0, args_1.getNetworkOptionsDemand)('bitcoin')).options(args_1.keyOptions).options({ format: args_1.formatTreeOrJson });
|
|
54
|
+
},
|
|
55
|
+
handler(argv) {
|
|
56
|
+
let rootWalletKeys = (0, args_1.getRootWalletKeys)(argv);
|
|
57
|
+
if (argv.network !== utxolib.networks.bitcoin) {
|
|
58
|
+
rootWalletKeys = mapRootWalletKeysToNetwork(rootWalletKeys, argv.network);
|
|
59
|
+
}
|
|
60
|
+
const descriptorMap = (0, descriptor_1.getNamedDescriptorsForRootWalletKeys)(rootWalletKeys);
|
|
61
|
+
const obj = Object.fromEntries([...descriptorMap].map(([name, descriptor]) => [name, descriptor?.toString() ?? null]));
|
|
62
|
+
if (argv.format === 'tree') {
|
|
63
|
+
console.log((0, format_1.formatObjAsTree)('descriptors', obj));
|
|
64
|
+
}
|
|
65
|
+
else if (argv.format === 'json') {
|
|
66
|
+
console.log(JSON.stringify(obj, null, 2));
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
throw new Error(`Invalid format: ${argv.format}. Expected 'tree' or 'json'.`);
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbUZpeGVkU2NyaXB0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2NtZERlc2NyaXB0b3IvZnJvbUZpeGVkU2NyaXB0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLDhEQUFnRDtBQUNoRCxpRUFBd0Y7QUFFeEYscUNBT29CO0FBQ3BCLHlDQUErQztBQVMvQyxTQUFTLGVBQWUsQ0FBQyxHQUEyQixFQUFFLE9BQXdCO0lBQzVFLEdBQUcsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUMvQyxHQUFHLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUN0QixPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxTQUFTLDBCQUEwQixDQUNqQyxjQUE0QyxFQUM1QyxPQUF3QjtJQUV4QixPQUFPLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQ3JDLGNBQWMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFtQyxFQUNuRyxjQUFjLENBQUMsa0JBQWtCLENBQ2xDLENBQUM7QUFDSixDQUFDO0FBRVksUUFBQSxrQkFBa0IsR0FBd0Q7SUFDckYsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixRQUFRLEVBQUUsZ0VBQWdFO0lBQzFFLE9BQU8sQ0FBQyxDQUFDO1FBQ1AsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUEsOEJBQXVCLEVBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsaUJBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sRUFBRSx1QkFBZ0IsRUFBRSxDQUFDLENBQUM7SUFDaEgsQ0FBQztJQUNELE9BQU8sQ0FBQyxJQUFJO1FBQ1YsSUFBSSxjQUFjLEdBQUcsSUFBQSx3QkFBaUIsRUFBQyxJQUFJLENBQUMsQ0FBQztRQUM3QyxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUM5QyxjQUFjLEdBQUcsMEJBQTBCLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1RSxDQUFDO1FBQ0QsTUFBTSxhQUFhLEdBQUcsSUFBQSxpREFBb0MsRUFBQyxjQUFjLENBQUMsQ0FBQztRQUMzRSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUM1QixDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUN2RixDQUFDO1FBQ0YsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQzNCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBQSx3QkFBZSxFQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ25ELENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDbEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QyxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLElBQUksQ0FBQyxNQUFNLDhCQUE4QixDQUFDLENBQUM7UUFDaEYsQ0FBQztJQUNILENBQUM7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbWFuZE1vZHVsZSB9IGZyb20gJ3lhcmdzJztcbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0IHsgZ2V0TmFtZWREZXNjcmlwdG9yc0ZvclJvb3RXYWxsZXRLZXlzIH0gZnJvbSAnQGJpdGdvLWJldGEvdXR4by1jb3JlL2Rlc2NyaXB0b3InO1xuXG5pbXBvcnQge1xuICBGb3JtYXRUcmVlT3JKc29uLFxuICBmb3JtYXRUcmVlT3JKc29uLFxuICBnZXROZXR3b3JrT3B0aW9uc0RlbWFuZCxcbiAgZ2V0Um9vdFdhbGxldEtleXMsXG4gIGtleU9wdGlvbnMsXG4gIEtleU9wdGlvbnMsXG59IGZyb20gJy4uLy4uL2FyZ3MnO1xuaW1wb3J0IHsgZm9ybWF0T2JqQXNUcmVlIH0gZnJvbSAnLi4vLi4vZm9ybWF0JztcblxudHlwZSBUcmlwbGU8VD4gPSBbVCwgVCwgVF07XG5cbnR5cGUgQXJnc0ZpeGVkU2NyaXB0VG9EZXNjcmlwdG9yID0gS2V5T3B0aW9ucyAmIHtcbiAgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrO1xuICBmb3JtYXQ6IEZvcm1hdFRyZWVPckpzb247XG59O1xuXG5mdW5jdGlvbiBtYXBLZXlUb05ldHdvcmsoa2V5OiB1dHhvbGliLkJJUDMySW50ZXJmYWNlLCBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmspOiB1dHhvbGliLkJJUDMySW50ZXJmYWNlIHtcbiAga2V5ID0gdXR4b2xpYi5iaXAzMi5mcm9tQmFzZTU4KGtleS50b0Jhc2U1OCgpKTtcbiAga2V5Lm5ldHdvcmsgPSBuZXR3b3JrO1xuICByZXR1cm4ga2V5O1xufVxuXG5mdW5jdGlvbiBtYXBSb290V2FsbGV0S2V5c1RvTmV0d29yayhcbiAgcm9vdFdhbGxldEtleXM6IHV0eG9saWIuYml0Z28uUm9vdFdhbGxldEtleXMsXG4gIG5ldHdvcms6IHV0eG9saWIuTmV0d29ya1xuKTogdXR4b2xpYi5iaXRnby5Sb290V2FsbGV0S2V5cyB7XG4gIHJldHVybiBuZXcgdXR4b2xpYi5iaXRnby5Sb290V2FsbGV0S2V5cyhcbiAgICByb290V2FsbGV0S2V5cy50cmlwbGUubWFwKChrZXkpID0+IG1hcEtleVRvTmV0d29yayhrZXksIG5ldHdvcmspKSBhcyBUcmlwbGU8dXR4b2xpYi5CSVAzMkludGVyZmFjZT4sXG4gICAgcm9vdFdhbGxldEtleXMuZGVyaXZhdGlvblByZWZpeGVzXG4gICk7XG59XG5cbmV4cG9ydCBjb25zdCBjbWRGcm9tRml4ZWRTY3JpcHQ6IENvbW1hbmRNb2R1bGU8dW5rbm93biwgQXJnc0ZpeGVkU2NyaXB0VG9EZXNjcmlwdG9yPiA9IHtcbiAgY29tbWFuZDogJ2Zyb21GaXhlZFNjcmlwdCcsXG4gIGRlc2NyaWJlOiAnQ29udmVydCBCaXRHbyBGaXhlZFNjcmlwdCBSb290V2FsbGV0S2V5cyB0byBvdXRwdXQgZGVzY3JpcHRvcnMnLFxuICBidWlsZGVyKGIpIHtcbiAgICByZXR1cm4gYi5vcHRpb24oZ2V0TmV0d29ya09wdGlvbnNEZW1hbmQoJ2JpdGNvaW4nKSkub3B0aW9ucyhrZXlPcHRpb25zKS5vcHRpb25zKHsgZm9ybWF0OiBmb3JtYXRUcmVlT3JKc29uIH0pO1xuICB9LFxuICBoYW5kbGVyKGFyZ3YpOiB2b2lkIHtcbiAgICBsZXQgcm9vdFdhbGxldEtleXMgPSBnZXRSb290V2FsbGV0S2V5cyhhcmd2KTtcbiAgICBpZiAoYXJndi5uZXR3b3JrICE9PSB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW4pIHtcbiAgICAgIHJvb3RXYWxsZXRLZXlzID0gbWFwUm9vdFdhbGxldEtleXNUb05ldHdvcmsocm9vdFdhbGxldEtleXMsIGFyZ3YubmV0d29yayk7XG4gICAgfVxuICAgIGNvbnN0IGRlc2NyaXB0b3JNYXAgPSBnZXROYW1lZERlc2NyaXB0b3JzRm9yUm9vdFdhbGxldEtleXMocm9vdFdhbGxldEtleXMpO1xuICAgIGNvbnN0IG9iaiA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIFsuLi5kZXNjcmlwdG9yTWFwXS5tYXAoKFtuYW1lLCBkZXNjcmlwdG9yXSkgPT4gW25hbWUsIGRlc2NyaXB0b3I/LnRvU3RyaW5nKCkgPz8gbnVsbF0pXG4gICAgKTtcbiAgICBpZiAoYXJndi5mb3JtYXQgPT09ICd0cmVlJykge1xuICAgICAgY29uc29sZS5sb2coZm9ybWF0T2JqQXNUcmVlKCdkZXNjcmlwdG9ycycsIG9iaikpO1xuICAgIH0gZWxzZSBpZiAoYXJndi5mb3JtYXQgPT09ICdqc29uJykge1xuICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkob2JqLCBudWxsLCAyKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBmb3JtYXQ6ICR7YXJndi5mb3JtYXR9LiBFeHBlY3RlZCAndHJlZScgb3IgJ2pzb24nLmApO1xuICAgIH1cbiAgfSxcbn07XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/cmdDescriptor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAGtC,cAAc,mBAAmB,CAAC;AAElC,eAAO,MAAM,aAAa,EAAE,aAAa,CAAC,OAAO,EAAE,OAAO,CASzD,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.cmdDescriptor = void 0;
|
|
18
|
+
const fromFixedScript_1 = require("./fromFixedScript");
|
|
19
|
+
__exportStar(require("./fromFixedScript"), exports);
|
|
20
|
+
exports.cmdDescriptor = {
|
|
21
|
+
command: 'descriptor <command>',
|
|
22
|
+
describe: 'descriptor commands',
|
|
23
|
+
builder(b) {
|
|
24
|
+
return b.strict().command(fromFixedScript_1.cmdFromFixedScript).demandCommand();
|
|
25
|
+
},
|
|
26
|
+
handler() {
|
|
27
|
+
// do nothing
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tbWFuZHMvY21kRGVzY3JpcHRvci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLHVEQUF1RDtBQUV2RCxvREFBa0M7QUFFckIsUUFBQSxhQUFhLEdBQW9DO0lBQzVELE9BQU8sRUFBRSxzQkFBc0I7SUFDL0IsUUFBUSxFQUFFLHFCQUFxQjtJQUMvQixPQUFPLENBQUMsQ0FBQztRQUNQLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxvQ0FBa0IsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ2hFLENBQUM7SUFDRCxPQUFPO1FBQ0wsYUFBYTtJQUNmLENBQUM7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbWFuZE1vZHVsZSB9IGZyb20gJ3lhcmdzJztcbmltcG9ydCB7IGNtZEZyb21GaXhlZFNjcmlwdCB9IGZyb20gJy4vZnJvbUZpeGVkU2NyaXB0JztcblxuZXhwb3J0ICogZnJvbSAnLi9mcm9tRml4ZWRTY3JpcHQnO1xuXG5leHBvcnQgY29uc3QgY21kRGVzY3JpcHRvcjogQ29tbWFuZE1vZHVsZTx1bmtub3duLCB1bmtub3duPiA9IHtcbiAgY29tbWFuZDogJ2Rlc2NyaXB0b3IgPGNvbW1hbmQ+JyxcbiAgZGVzY3JpYmU6ICdkZXNjcmlwdG9yIGNvbW1hbmRzJyxcbiAgYnVpbGRlcihiKSB7XG4gICAgcmV0dXJuIGIuc3RyaWN0KCkuY29tbWFuZChjbWRGcm9tRml4ZWRTY3JpcHQpLmRlbWFuZENvbW1hbmQoKTtcbiAgfSxcbiAgaGFuZGxlcigpIHtcbiAgICAvLyBkbyBub3RoaW5nXG4gIH0sXG59O1xuIl19
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as utxolib from '@bitgo-beta/utxo-lib';
|
|
2
|
+
import * as yargs from 'yargs';
|
|
3
|
+
import { ScriptParser } from '../ScriptParser';
|
|
4
|
+
import { FormatTreeOrJson } from '../args';
|
|
5
|
+
export type ArgsParseScript = {
|
|
6
|
+
network: utxolib.Network;
|
|
7
|
+
format: FormatTreeOrJson;
|
|
8
|
+
all: boolean;
|
|
9
|
+
script: string;
|
|
10
|
+
};
|
|
11
|
+
export declare function getScriptParser(argv: ArgsParseScript): ScriptParser;
|
|
12
|
+
export declare const cmdParseScript: {
|
|
13
|
+
command: string;
|
|
14
|
+
describe: string;
|
|
15
|
+
builder(b: yargs.Argv<unknown>): yargs.Argv<ArgsParseScript>;
|
|
16
|
+
handler(argv: yargs.Arguments<ArgsParseScript>): void;
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=cmdParseScript.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cmdParseScript.d.ts","sourceRoot":"","sources":["../../../src/commands/cmdParseScript.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAoB,gBAAgB,EAA2C,MAAM,SAAS,CAAC;AAItG,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC;IACzB,MAAM,EAAE,gBAAgB,CAAC;IACzB,GAAG,EAAE,OAAO,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,wBAAgB,eAAe,CAAC,IAAI,EAAE,eAAe,GAAG,YAAY,CAEnE;AAED,eAAO,MAAM,cAAc;;;eAGd,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC;kBAO9C,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC,GAAG,IAAI;CAKtD,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.cmdParseScript = void 0;
|
|
4
|
+
exports.getScriptParser = getScriptParser;
|
|
5
|
+
const ScriptParser_1 = require("../ScriptParser");
|
|
6
|
+
const args_1 = require("../args");
|
|
7
|
+
const formatString_1 = require("./formatString");
|
|
8
|
+
function getScriptParser(argv) {
|
|
9
|
+
return new ScriptParser_1.ScriptParser(argv);
|
|
10
|
+
}
|
|
11
|
+
exports.cmdParseScript = {
|
|
12
|
+
command: 'parseScript [script]',
|
|
13
|
+
describe: 'parse script',
|
|
14
|
+
builder(b) {
|
|
15
|
+
return b
|
|
16
|
+
.options((0, args_1.getNetworkOptionsDemand)('bitcoin'))
|
|
17
|
+
.option('format', args_1.formatTreeOrJson)
|
|
18
|
+
.option('all', { type: 'boolean', default: false })
|
|
19
|
+
.positional('script', { type: 'string', demandOption: true });
|
|
20
|
+
},
|
|
21
|
+
handler(argv) {
|
|
22
|
+
const script = (0, args_1.stringToBuffer)(argv.script, 'hex');
|
|
23
|
+
const parsed = getScriptParser(argv).parse(script);
|
|
24
|
+
console.log((0, formatString_1.formatString)(parsed, { ...argv, all: true }));
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY21kUGFyc2VTY3JpcHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbWFuZHMvY21kUGFyc2VTY3JpcHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBZUEsMENBRUM7QUFkRCxrREFBK0M7QUFDL0Msa0NBQXNHO0FBRXRHLGlEQUE4QztBQVM5QyxTQUFnQixlQUFlLENBQUMsSUFBcUI7SUFDbkQsT0FBTyxJQUFJLDJCQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDaEMsQ0FBQztBQUVZLFFBQUEsY0FBYyxHQUFHO0lBQzVCLE9BQU8sRUFBRSxzQkFBc0I7SUFDL0IsUUFBUSxFQUFFLGNBQWM7SUFDeEIsT0FBTyxDQUFDLENBQXNCO1FBQzVCLE9BQU8sQ0FBQzthQUNMLE9BQU8sQ0FBQyxJQUFBLDhCQUF1QixFQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQzNDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsdUJBQWdCLENBQUM7YUFDbEMsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO2FBQ2xELFVBQVUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFDRCxPQUFPLENBQUMsSUFBc0M7UUFDNUMsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBYyxFQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbEQsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuRCxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUEsMkJBQVksRUFBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzVELENBQUM7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgKiBhcyB5YXJncyBmcm9tICd5YXJncyc7XG5cbmltcG9ydCB7IFNjcmlwdFBhcnNlciB9IGZyb20gJy4uL1NjcmlwdFBhcnNlcic7XG5pbXBvcnQgeyBmb3JtYXRUcmVlT3JKc29uLCBGb3JtYXRUcmVlT3JKc29uLCBzdHJpbmdUb0J1ZmZlciwgZ2V0TmV0d29ya09wdGlvbnNEZW1hbmQgfSBmcm9tICcuLi9hcmdzJztcblxuaW1wb3J0IHsgZm9ybWF0U3RyaW5nIH0gZnJvbSAnLi9mb3JtYXRTdHJpbmcnO1xuXG5leHBvcnQgdHlwZSBBcmdzUGFyc2VTY3JpcHQgPSB7XG4gIG5ldHdvcms6IHV0eG9saWIuTmV0d29yaztcbiAgZm9ybWF0OiBGb3JtYXRUcmVlT3JKc29uO1xuICBhbGw6IGJvb2xlYW47XG4gIHNjcmlwdDogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNjcmlwdFBhcnNlcihhcmd2OiBBcmdzUGFyc2VTY3JpcHQpOiBTY3JpcHRQYXJzZXIge1xuICByZXR1cm4gbmV3IFNjcmlwdFBhcnNlcihhcmd2KTtcbn1cblxuZXhwb3J0IGNvbnN0IGNtZFBhcnNlU2NyaXB0ID0ge1xuICBjb21tYW5kOiAncGFyc2VTY3JpcHQgW3NjcmlwdF0nLFxuICBkZXNjcmliZTogJ3BhcnNlIHNjcmlwdCcsXG4gIGJ1aWxkZXIoYjogeWFyZ3MuQXJndjx1bmtub3duPik6IHlhcmdzLkFyZ3Y8QXJnc1BhcnNlU2NyaXB0PiB7XG4gICAgcmV0dXJuIGJcbiAgICAgIC5vcHRpb25zKGdldE5ldHdvcmtPcHRpb25zRGVtYW5kKCdiaXRjb2luJykpXG4gICAgICAub3B0aW9uKCdmb3JtYXQnLCBmb3JtYXRUcmVlT3JKc29uKVxuICAgICAgLm9wdGlvbignYWxsJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlIH0pXG4gICAgICAucG9zaXRpb25hbCgnc2NyaXB0JywgeyB0eXBlOiAnc3RyaW5nJywgZGVtYW5kT3B0aW9uOiB0cnVlIH0pO1xuICB9LFxuICBoYW5kbGVyKGFyZ3Y6IHlhcmdzLkFyZ3VtZW50czxBcmdzUGFyc2VTY3JpcHQ+KTogdm9pZCB7XG4gICAgY29uc3Qgc2NyaXB0ID0gc3RyaW5nVG9CdWZmZXIoYXJndi5zY3JpcHQsICdoZXgnKTtcbiAgICBjb25zdCBwYXJzZWQgPSBnZXRTY3JpcHRQYXJzZXIoYXJndikucGFyc2Uoc2NyaXB0KTtcbiAgICBjb25zb2xlLmxvZyhmb3JtYXRTdHJpbmcocGFyc2VkLCB7IC4uLmFyZ3YsIGFsbDogdHJ1ZSB9KSk7XG4gIH0sXG59O1xuIl19
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import * as utxolib from '@bitgo-beta/utxo-lib';
|
|
2
|
+
import * as yargs from 'yargs';
|
|
3
|
+
import { FormatTreeOrJson, ReadStringOptions } from '../args';
|
|
4
|
+
import { TxParser, TxParserArgs } from '../TxParser';
|
|
5
|
+
export type ArgsParseTransaction = ReadStringOptions & {
|
|
6
|
+
network: utxolib.Network;
|
|
7
|
+
txid?: string;
|
|
8
|
+
prevTx?: string[];
|
|
9
|
+
blockHeight?: number;
|
|
10
|
+
txIndex?: number;
|
|
11
|
+
all: boolean;
|
|
12
|
+
cache: boolean;
|
|
13
|
+
format: FormatTreeOrJson;
|
|
14
|
+
fetchAll: boolean;
|
|
15
|
+
fetchStatus: boolean;
|
|
16
|
+
fetchInputs: boolean;
|
|
17
|
+
fetchSpends: boolean;
|
|
18
|
+
finalize: boolean;
|
|
19
|
+
parseSignatureData: boolean;
|
|
20
|
+
parseAsUnknown: boolean;
|
|
21
|
+
parseError: 'throw' | 'continue';
|
|
22
|
+
} & Omit<TxParserArgs, 'parseSignatureData'>;
|
|
23
|
+
export declare function getTxParser(argv: ArgsParseTransaction): TxParser;
|
|
24
|
+
export declare const cmdParseTx: {
|
|
25
|
+
readonly command: "parseTx [path]";
|
|
26
|
+
readonly aliases: readonly ["parse", "tx"];
|
|
27
|
+
readonly describe: string;
|
|
28
|
+
readonly builder: (b: yargs.Argv<unknown>) => yargs.Argv<ArgsParseTransaction>;
|
|
29
|
+
readonly handler: (argv: yargs.Arguments<ArgsParseTransaction>) => Promise<void>;
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=cmdParseTx.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cmdParseTx.d.ts","sourceRoot":"","sources":["../../../src/commands/cmdParseTx.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAIL,gBAAgB,EAChB,iBAAiB,EAGlB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAgBrD,MAAM,MAAM,oBAAoB,GAAG,iBAAiB,GAAG;IACrD,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,cAAc,EAAE,OAAO,CAAC;IACxB,UAAU,EAAE,OAAO,GAAG,UAAU,CAAC;CAClC,GAAG,IAAI,CAAC,YAAY,EAAE,oBAAoB,CAAC,CAAC;AAE7C,wBAAgB,WAAW,CAAC,IAAI,EAAE,oBAAoB,GAAG,QAAQ,CAYhE;AAED,eAAO,MAAM,UAAU;;;;0BASV,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAG,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC;6BAyC7C,KAAK,CAAC,SAAS,CAAC,oBAAoB,CAAC,KAAG,OAAO,CAAC,IAAI,CAAC;CAqEjE,CAAC"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.cmdParseTx = void 0;
|
|
37
|
+
exports.getTxParser = getTxParser;
|
|
38
|
+
const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
|
|
39
|
+
const args_1 = require("../args");
|
|
40
|
+
const TxParser_1 = require("../TxParser");
|
|
41
|
+
const fetch_1 = require("../fetch");
|
|
42
|
+
const ParserTx_1 = require("../ParserTx");
|
|
43
|
+
const parseUnknown_1 = require("../parseUnknown");
|
|
44
|
+
const Parser_1 = require("../Parser");
|
|
45
|
+
const formatString_1 = require("./formatString");
|
|
46
|
+
const prevTx_1 = require("../prevTx");
|
|
47
|
+
function getTxParser(argv) {
|
|
48
|
+
if (argv.all) {
|
|
49
|
+
return new TxParser_1.TxParser({ ...argv, ...TxParser_1.TxParser.PARSE_ALL });
|
|
50
|
+
}
|
|
51
|
+
return new TxParser_1.TxParser({
|
|
52
|
+
...argv,
|
|
53
|
+
parseSignatureData: {
|
|
54
|
+
script: argv.parseSignatureData,
|
|
55
|
+
ecdsa: argv.parseSignatureData,
|
|
56
|
+
schnorr: argv.parseSignatureData,
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
exports.cmdParseTx = {
|
|
61
|
+
command: 'parseTx [path]',
|
|
62
|
+
aliases: ['parse', 'tx'],
|
|
63
|
+
describe: 'Display transaction components in human-readable form. ' +
|
|
64
|
+
'Supported formats are Partially Signed Bitcoin Transaction (PSBT), ' +
|
|
65
|
+
'bitcoinjs-lib encoding (Legacy) or fully signed transaction. ' +
|
|
66
|
+
'Bytes must be encoded in hex or base64 format.',
|
|
67
|
+
builder(b) {
|
|
68
|
+
return b
|
|
69
|
+
.options(args_1.readStringOptions)
|
|
70
|
+
.options((0, args_1.getNetworkOptionsDemand)())
|
|
71
|
+
.option('txid', { type: 'string' })
|
|
72
|
+
.option('prevTx', { type: 'string', description: 'previous transaction hex or base64 string', array: true })
|
|
73
|
+
.option('blockHeight', { type: 'number' })
|
|
74
|
+
.option('txIndex', { type: 'number' })
|
|
75
|
+
.option('fetchAll', { type: 'boolean', default: false })
|
|
76
|
+
.option('fetchStatus', { type: 'boolean', default: false })
|
|
77
|
+
.option('fetchInputs', { type: 'boolean', default: false })
|
|
78
|
+
.option('fetchSpends', { type: 'boolean', default: false })
|
|
79
|
+
.option('parseScriptAsm', { alias: 'scriptasm', type: 'boolean', default: false })
|
|
80
|
+
.option('parseScriptData', { alias: 'scriptdata', type: 'boolean', default: false })
|
|
81
|
+
.option('parseSignatureData', { alias: 'sigdata', type: 'boolean', default: false })
|
|
82
|
+
.option('parseOutputScript', { type: 'boolean', default: false })
|
|
83
|
+
.option('parseAsUnknown', {
|
|
84
|
+
type: 'boolean',
|
|
85
|
+
default: false,
|
|
86
|
+
description: 'show plain Javascript object without any post-processing',
|
|
87
|
+
})
|
|
88
|
+
.option('maxOutputs', { type: 'number' })
|
|
89
|
+
.option('vin', { type: 'number' })
|
|
90
|
+
.array('vin')
|
|
91
|
+
.option('vout', { type: 'number' })
|
|
92
|
+
.array('vout')
|
|
93
|
+
.option('finalize', {
|
|
94
|
+
type: 'boolean',
|
|
95
|
+
default: false,
|
|
96
|
+
description: 'finalize PSBT and parse result instead of PSBT',
|
|
97
|
+
})
|
|
98
|
+
.option('all', { type: 'boolean', default: false })
|
|
99
|
+
.option('cache', {
|
|
100
|
+
type: 'boolean',
|
|
101
|
+
default: false,
|
|
102
|
+
description: 'use local cache for http responses',
|
|
103
|
+
})
|
|
104
|
+
.option('format', args_1.formatTreeOrJson)
|
|
105
|
+
.option('parseError', { choices: ['continue', 'throw'], default: 'continue' });
|
|
106
|
+
},
|
|
107
|
+
async handler(argv) {
|
|
108
|
+
let data;
|
|
109
|
+
const httpClient = await (0, fetch_1.getClient)({ cache: argv.cache });
|
|
110
|
+
if (argv.txid || argv.blockHeight !== undefined || argv.txIndex !== undefined) {
|
|
111
|
+
data = await (0, fetch_1.fetchTransactionHex)(httpClient, {
|
|
112
|
+
txid: argv.txid,
|
|
113
|
+
blockHeight: argv.blockHeight,
|
|
114
|
+
txIndex: argv.txIndex,
|
|
115
|
+
}, argv.network);
|
|
116
|
+
}
|
|
117
|
+
const string = await (0, args_1.argToString)(argv, data);
|
|
118
|
+
if (!string) {
|
|
119
|
+
throw new Error(`no txdata`);
|
|
120
|
+
}
|
|
121
|
+
function decodeBytes(bytes) {
|
|
122
|
+
return utxolib.bitgo.isPsbt(bytes)
|
|
123
|
+
? utxolib.bitgo.createPsbtFromBuffer(bytes, argv.network)
|
|
124
|
+
: utxolib.bitgo.createTransactionFromBuffer(bytes, argv.network, { amountType: 'bigint' });
|
|
125
|
+
}
|
|
126
|
+
const bytes = (0, args_1.stringToBuffer)(string, ['hex', 'base64']);
|
|
127
|
+
let tx = decodeBytes(bytes);
|
|
128
|
+
const { id: txid } = (0, ParserTx_1.getParserTxProperties)(tx, undefined);
|
|
129
|
+
if (tx instanceof utxolib.bitgo.UtxoTransaction) {
|
|
130
|
+
if (argv.txid && txid !== argv.txid) {
|
|
131
|
+
throw new Error(`computed txid does not match txid argument`);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
else if (argv.finalize) {
|
|
135
|
+
tx.finalizeAllInputs();
|
|
136
|
+
tx = tx.extractTransaction();
|
|
137
|
+
}
|
|
138
|
+
const prevTxs = (argv.prevTx ?? []).map((s) => {
|
|
139
|
+
const buf = (0, args_1.stringToBuffer)(s, ['hex', 'base64']);
|
|
140
|
+
return decodeBytes(buf);
|
|
141
|
+
});
|
|
142
|
+
if (argv.parseAsUnknown) {
|
|
143
|
+
console.log((0, formatString_1.formatString)((0, parseUnknown_1.parseUnknown)(new Parser_1.Parser(), 'tx', tx), argv));
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
if (argv.fetchAll) {
|
|
147
|
+
argv.fetchStatus = true;
|
|
148
|
+
argv.fetchInputs = true;
|
|
149
|
+
argv.fetchSpends = true;
|
|
150
|
+
}
|
|
151
|
+
const parsed = getTxParser(argv).parse(tx, {
|
|
152
|
+
status: argv.fetchStatus && txid ? await (0, fetch_1.fetchTransactionStatus)(httpClient, txid, argv.network) : undefined,
|
|
153
|
+
prevOutputs: argv.fetchInputs ? await (0, fetch_1.fetchPrevOutputs)(httpClient, tx) : (0, prevTx_1.getPrevOutputsFromPrevTxs)(tx, prevTxs),
|
|
154
|
+
prevOutputSpends: argv.fetchSpends ? await (0, fetch_1.fetchPrevOutputSpends)(httpClient, tx) : undefined,
|
|
155
|
+
outputSpends: argv.fetchSpends && tx instanceof utxolib.bitgo.UtxoTransaction
|
|
156
|
+
? await (0, fetch_1.fetchOutputSpends)(httpClient, tx)
|
|
157
|
+
: undefined,
|
|
158
|
+
});
|
|
159
|
+
console.log((0, formatString_1.formatString)(parsed, argv));
|
|
160
|
+
},
|
|
161
|
+
};
|
|
162
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY21kUGFyc2VUeC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9jbWRQYXJzZVR4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQStDQSxrQ0FZQztBQTNERCw4REFBZ0Q7QUFHaEQsa0NBUWlCO0FBQ2pCLDBDQUFxRDtBQUNyRCxvQ0FPa0I7QUFDbEIsMENBQThEO0FBQzlELGtEQUErQztBQUMvQyxzQ0FBbUM7QUFFbkMsaURBQThDO0FBQzlDLHNDQUFzRDtBQXFCdEQsU0FBZ0IsV0FBVyxDQUFDLElBQTBCO0lBQ3BELElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2IsT0FBTyxJQUFJLG1CQUFRLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLG1CQUFRLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBQ0QsT0FBTyxJQUFJLG1CQUFRLENBQUM7UUFDbEIsR0FBRyxJQUFJO1FBQ1Asa0JBQWtCLEVBQUU7WUFDbEIsTUFBTSxFQUFFLElBQUksQ0FBQyxrQkFBa0I7WUFDL0IsS0FBSyxFQUFFLElBQUksQ0FBQyxrQkFBa0I7WUFDOUIsT0FBTyxFQUFFLElBQUksQ0FBQyxrQkFBa0I7U0FDakM7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRVksUUFBQSxVQUFVLEdBQUc7SUFDeEIsT0FBTyxFQUFFLGdCQUFnQjtJQUN6QixPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDO0lBQ3hCLFFBQVEsRUFDTix5REFBeUQ7UUFDekQscUVBQXFFO1FBQ3JFLCtEQUErRDtRQUMvRCxnREFBZ0Q7SUFFbEQsT0FBTyxDQUFDLENBQXNCO1FBQzVCLE9BQU8sQ0FBQzthQUNMLE9BQU8sQ0FBQyx3QkFBaUIsQ0FBQzthQUMxQixPQUFPLENBQUMsSUFBQSw4QkFBdUIsR0FBRSxDQUFDO2FBQ2xDLE1BQU0sQ0FB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QztRQUVELE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQ3pDLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFBLDhCQUFzQixFQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1lBQzNHLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUEsd0JBQWdCLEVBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFBLGtDQUF5QixFQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7WUFDL0csZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFBLDZCQUFxQixFQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztZQUM1RixZQUFZLEVBQ1YsSUFBSSxDQUFDLFdBQVcsSUFBSSxFQUFFLFlBQVksT0FBTyxDQUFDLEtBQUssQ0FBQyxlQUFlO2dCQUM3RCxDQUFDLENBQUMsTUFBTSxJQUFBLHlCQUFpQixFQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7Z0JBQ3pDLENBQUMsQ0FBQyxTQUFTO1NBQ2hCLENBQUMsQ0FBQztRQUVILE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBQSwyQkFBWSxFQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzFDLENBQUM7Q0FDTyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgKiBhcyB5YXJncyBmcm9tICd5YXJncyc7XG5cbmltcG9ydCB7XG4gIGFyZ1RvU3RyaW5nLFxuICBmb3JtYXRUcmVlT3JKc29uLFxuICBnZXROZXR3b3JrT3B0aW9uc0RlbWFuZCxcbiAgRm9ybWF0VHJlZU9ySnNvbixcbiAgUmVhZFN0cmluZ09wdGlvbnMsXG4gIHJlYWRTdHJpbmdPcHRpb25zLFxuICBzdHJpbmdUb0J1ZmZlcixcbn0gZnJvbSAnLi4vYXJncyc7XG5pbXBvcnQgeyBUeFBhcnNlciwgVHhQYXJzZXJBcmdzIH0gZnJvbSAnLi4vVHhQYXJzZXInO1xuaW1wb3J0IHtcbiAgZmV0Y2hPdXRwdXRTcGVuZHMsXG4gIGZldGNoUHJldk91dHB1dHMsXG4gIGZldGNoUHJldk91dHB1dFNwZW5kcyxcbiAgZmV0Y2hUcmFuc2FjdGlvbkhleCxcbiAgZmV0Y2hUcmFuc2FjdGlvblN0YXR1cyxcbiAgZ2V0Q2xpZW50LFxufSBmcm9tICcuLi9mZXRjaCc7XG5pbXBvcnQgeyBnZXRQYXJzZXJUeFByb3BlcnRpZXMsIFBhcnNlclR4IH0gZnJvbSAnLi4vUGFyc2VyVHgnO1xuaW1wb3J0IHsgcGFyc2VVbmtub3duIH0gZnJvbSAnLi4vcGFyc2VVbmtub3duJztcbmltcG9ydCB7IFBhcnNlciB9IGZyb20gJy4uL1BhcnNlcic7XG5cbmltcG9ydCB7IGZvcm1hdFN0cmluZyB9IGZyb20gJy4vZm9ybWF0U3RyaW5nJztcbmltcG9ydCB7IGdldFByZXZPdXRwdXRzRnJvbVByZXZUeHMgfSBmcm9tICcuLi9wcmV2VHgnO1xuXG5leHBvcnQgdHlwZSBBcmdzUGFyc2VUcmFuc2FjdGlvbiA9IFJlYWRTdHJpbmdPcHRpb25zICYge1xuICBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcms7XG4gIHR4aWQ/OiBzdHJpbmc7XG4gIHByZXZUeD86IHN0cmluZ1tdO1xuICBibG9ja0hlaWdodD86IG51bWJlcjtcbiAgdHhJbmRleD86IG51bWJlcjtcbiAgYWxsOiBib29sZWFuO1xuICBjYWNoZTogYm9vbGVhbjtcbiAgZm9ybWF0OiBGb3JtYXRUcmVlT3JKc29uO1xuICBmZXRjaEFsbDogYm9vbGVhbjtcbiAgZmV0Y2hTdGF0dXM6IGJvb2xlYW47XG4gIGZldGNoSW5wdXRzOiBib29sZWFuO1xuICBmZXRjaFNwZW5kczogYm9vbGVhbjtcbiAgZmluYWxpemU6IGJvb2xlYW47XG4gIHBhcnNlU2lnbmF0dXJlRGF0YTogYm9vbGVhbjtcbiAgcGFyc2VBc1Vua25vd246IGJvb2xlYW47XG4gIHBhcnNlRXJyb3I6ICd0aHJvdycgfCAnY29udGludWUnO1xufSAmIE9taXQ8VHhQYXJzZXJBcmdzLCAncGFyc2VTaWduYXR1cmVEYXRhJz47XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeFBhcnNlcihhcmd2OiBBcmdzUGFyc2VUcmFuc2FjdGlvbik6IFR4UGFyc2VyIHtcbiAgaWYgKGFyZ3YuYWxsKSB7XG4gICAgcmV0dXJuIG5ldyBUeFBhcnNlcih7IC4uLmFyZ3YsIC4uLlR4UGFyc2VyLlBBUlNFX0FMTCB9KTtcbiAgfVxuICByZXR1cm4gbmV3IFR4UGFyc2VyKHtcbiAgICAuLi5hcmd2LFxuICAgIHBhcnNlU2lnbmF0dXJlRGF0YToge1xuICAgICAgc2NyaXB0OiBhcmd2LnBhcnNlU2lnbmF0dXJlRGF0YSxcbiAgICAgIGVjZHNhOiBhcmd2LnBhcnNlU2lnbmF0dXJlRGF0YSxcbiAgICAgIHNjaG5vcnI6IGFyZ3YucGFyc2VTaWduYXR1cmVEYXRhLFxuICAgIH0sXG4gIH0pO1xufVxuXG5leHBvcnQgY29uc3QgY21kUGFyc2VUeCA9IHtcbiAgY29tbWFuZDogJ3BhcnNlVHggW3BhdGhdJyxcbiAgYWxpYXNlczogWydwYXJzZScsICd0eCddLFxuICBkZXNjcmliZTpcbiAgICAnRGlzcGxheSB0cmFuc2FjdGlvbiBjb21wb25lbnRzIGluIGh1bWFuLXJlYWRhYmxlIGZvcm0uICcgK1xuICAgICdTdXBwb3J0ZWQgZm9ybWF0cyBhcmUgUGFydGlhbGx5IFNpZ25lZCBCaXRjb2luIFRyYW5zYWN0aW9uIChQU0JUKSwgJyArXG4gICAgJ2JpdGNvaW5qcy1saWIgZW5jb2RpbmcgKExlZ2FjeSkgb3IgZnVsbHkgc2lnbmVkIHRyYW5zYWN0aW9uLiAnICtcbiAgICAnQnl0ZXMgbXVzdCBiZSBlbmNvZGVkIGluIGhleCBvciBiYXNlNjQgZm9ybWF0LicsXG5cbiAgYnVpbGRlcihiOiB5YXJncy5Bcmd2PHVua25vd24+KTogeWFyZ3MuQXJndjxBcmdzUGFyc2VUcmFuc2FjdGlvbj4ge1xuICAgIHJldHVybiBiXG4gICAgICAub3B0aW9ucyhyZWFkU3RyaW5nT3B0aW9ucylcbiAgICAgIC5vcHRpb25zKGdldE5ldHdvcmtPcHRpb25zRGVtYW5kKCkpXG4gICAgICAub3B0aW9uKCd0eGlkJywgeyB0eXBlOiAnc3RyaW5nJyB9KVxuICAgICAgLm9wdGlvbigncHJldlR4JywgeyB0eXBlOiAnc3RyaW5nJywgZGVzY3JpcHRpb246ICdwcmV2aW91cyB0cmFuc2FjdGlvbiBoZXggb3IgYmFzZTY0IHN0cmluZycsIGFycmF5OiB0cnVlIH0pXG4gICAgICAub3B0aW9uKCdibG9ja0hlaWdodCcsIHsgdHlwZTogJ251bWJlcicgfSlcbiAgICAgIC5vcHRpb24oJ3R4SW5kZXgnLCB7IHR5cGU6ICdudW1iZXInIH0pXG4gICAgICAub3B0aW9uKCdmZXRjaEFsbCcsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSB9KVxuICAgICAgLm9wdGlvbignZmV0Y2hTdGF0dXMnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UgfSlcbiAgICAgIC5vcHRpb24oJ2ZldGNoSW5wdXRzJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlIH0pXG4gICAgICAub3B0aW9uKCdmZXRjaFNwZW5kcycsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSB9KVxuICAgICAgLm9wdGlvbigncGFyc2VTY3JpcHRBc20nLCB7IGFsaWFzOiAnc2NyaXB0YXNtJywgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSB9KVxuICAgICAgLm9wdGlvbigncGFyc2VTY3JpcHREYXRhJywgeyBhbGlhczogJ3NjcmlwdGRhdGEnLCB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlIH0pXG4gICAgICAub3B0aW9uKCdwYXJzZVNpZ25hdHVyZURhdGEnLCB7IGFsaWFzOiAnc2lnZGF0YScsIHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UgfSlcbiAgICAgIC5vcHRpb24oJ3BhcnNlT3V0cHV0U2NyaXB0JywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlIH0pXG4gICAgICAub3B0aW9uKCdwYXJzZUFzVW5rbm93bicsIHtcbiAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdzaG93IHBsYWluIEphdmFzY3JpcHQgb2JqZWN0IHdpdGhvdXQgYW55IHBvc3QtcHJvY2Vzc2luZycsXG4gICAgICB9KVxuICAgICAgLm9wdGlvbignbWF4T3V0cHV0cycsIHsgdHlwZTogJ251bWJlcicgfSlcbiAgICAgIC5vcHRpb24oJ3ZpbicsIHsgdHlwZTogJ251bWJlcicgfSlcbiAgICAgIC5hcnJheSgndmluJylcbiAgICAgIC5vcHRpb24oJ3ZvdXQnLCB7IHR5cGU6ICdudW1iZXInIH0pXG4gICAgICAuYXJyYXkoJ3ZvdXQnKVxuICAgICAgLm9wdGlvbignZmluYWxpemUnLCB7XG4gICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnZmluYWxpemUgUFNCVCBhbmQgcGFyc2UgcmVzdWx0IGluc3RlYWQgb2YgUFNCVCcsXG4gICAgICB9KVxuICAgICAgLm9wdGlvbignYWxsJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlIH0pXG4gICAgICAub3B0aW9uKCdjYWNoZScsIHtcbiAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgZGVzY3JpcHRpb246ICd1c2UgbG9jYWwgY2FjaGUgZm9yIGh0dHAgcmVzcG9uc2VzJyxcbiAgICAgIH0pXG4gICAgICAub3B0aW9uKCdmb3JtYXQnLCBmb3JtYXRUcmVlT3JKc29uKVxuICAgICAgLm9wdGlvbigncGFyc2VFcnJvcicsIHsgY2hvaWNlczogWydjb250aW51ZScsICd0aHJvdyddLCBkZWZhdWx0OiAnY29udGludWUnIH0gYXMgY29uc3QpO1xuICB9LFxuXG4gIGFzeW5jIGhhbmRsZXIoYXJndjogeWFyZ3MuQXJndW1lbnRzPEFyZ3NQYXJzZVRyYW5zYWN0aW9uPik6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBkYXRhO1xuXG4gICAgY29uc3QgaHR0cENsaWVudCA9IGF3YWl0IGdldENsaWVudCh7IGNhY2hlOiBhcmd2LmNhY2hlIH0pO1xuXG4gICAgaWYgKGFyZ3YudHhpZCB8fCBhcmd2LmJsb2NrSGVpZ2h0ICE9PSB1bmRlZmluZWQgfHwgYXJndi50eEluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGRhdGEgPSBhd2FpdCBmZXRjaFRyYW5zYWN0aW9uSGV4KFxuICAgICAgICBodHRwQ2xpZW50LFxuICAgICAgICB7XG4gICAgICAgICAgdHhpZDogYXJndi50eGlkLFxuICAgICAgICAgIGJsb2NrSGVpZ2h0OiBhcmd2LmJsb2NrSGVpZ2h0LFxuICAgICAgICAgIHR4SW5kZXg6IGFyZ3YudHhJbmRleCxcbiAgICAgICAgfSxcbiAgICAgICAgYXJndi5uZXR3b3JrXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHN0cmluZyA9IGF3YWl0IGFyZ1RvU3RyaW5nKGFyZ3YsIGRhdGEpO1xuICAgIGlmICghc3RyaW5nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYG5vIHR4ZGF0YWApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlY29kZUJ5dGVzKGJ5dGVzOiBCdWZmZXIpOiBQYXJzZXJUeCB7XG4gICAgICByZXR1cm4gdXR4b2xpYi5iaXRnby5pc1BzYnQoYnl0ZXMpXG4gICAgICAgID8gdXR4b2xpYi5iaXRnby5jcmVhdGVQc2J0RnJvbUJ1ZmZlcihieXRlcywgYXJndi5uZXR3b3JrKVxuICAgICAgICA6IHV0eG9saWIuYml0Z28uY3JlYXRlVHJhbnNhY3Rpb25Gcm9tQnVmZmVyKGJ5dGVzLCBhcmd2Lm5ldHdvcmssIHsgYW1vdW50VHlwZTogJ2JpZ2ludCcgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgYnl0ZXMgPSBzdHJpbmdUb0J1ZmZlcihzdHJpbmcsIFsnaGV4JywgJ2Jhc2U2NCddKTtcbiAgICBsZXQgdHggPSBkZWNvZGVCeXRlcyhieXRlcyk7XG5cbiAgICBjb25zdCB7IGlkOiB0eGlkIH0gPSBnZXRQYXJzZXJUeFByb3BlcnRpZXModHgsIHVuZGVmaW5lZCk7XG4gICAgaWYgKHR4IGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb24pIHtcbiAgICAgIGlmIChhcmd2LnR4aWQgJiYgdHhpZCAhPT0gYXJndi50eGlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgY29tcHV0ZWQgdHhpZCBkb2VzIG5vdCBtYXRjaCB0eGlkIGFyZ3VtZW50YCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChhcmd2LmZpbmFsaXplKSB7XG4gICAgICB0eC5maW5hbGl6ZUFsbElucHV0cygpO1xuICAgICAgdHggPSB0eC5leHRyYWN0VHJhbnNhY3Rpb24oKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcmV2VHhzOiBQYXJzZXJUeFtdID0gKGFyZ3YucHJldlR4ID8/IFtdKS5tYXAoKHMpID0+IHtcbiAgICAgIGNvbnN0IGJ1ZiA9IHN0cmluZ1RvQnVmZmVyKHMsIFsnaGV4JywgJ2Jhc2U2NCddKTtcbiAgICAgIHJldHVybiBkZWNvZGVCeXRlcyhidWYpO1xuICAgIH0pO1xuXG4gICAgaWYgKGFyZ3YucGFyc2VBc1Vua25vd24pIHtcbiAgICAgIGNvbnNvbGUubG9nKGZvcm1hdFN0cmluZyhwYXJzZVVua25vd24obmV3IFBhcnNlcigpLCAndHgnLCB0eCksIGFyZ3YpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoYXJndi5mZXRjaEFsbCkge1xuICAgICAgYXJndi5mZXRjaFN0YXR1cyA9IHRydWU7XG4gICAgICBhcmd2LmZldGNoSW5wdXRzID0gdHJ1ZTtcbiAgICAgIGFyZ3YuZmV0Y2hTcGVuZHMgPSB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZCA9IGdldFR4UGFyc2VyKGFyZ3YpLnBhcnNlKHR4LCB7XG4gICAgICBzdGF0dXM6IGFyZ3YuZmV0Y2hTdGF0dXMgJiYgdHhpZCA/IGF3YWl0IGZldGNoVHJhbnNhY3Rpb25TdGF0dXMoaHR0cENsaWVudCwgdHhpZCwgYXJndi5uZXR3b3JrKSA6IHVuZGVmaW5lZCxcbiAgICAgIHByZXZPdXRwdXRzOiBhcmd2LmZldGNoSW5wdXRzID8gYXdhaXQgZmV0Y2hQcmV2T3V0cHV0cyhodHRwQ2xpZW50LCB0eCkgOiBnZXRQcmV2T3V0cHV0c0Zyb21QcmV2VHhzKHR4LCBwcmV2VHhzKSxcbiAgICAgIHByZXZPdXRwdXRTcGVuZHM6IGFyZ3YuZmV0Y2hTcGVuZHMgPyBhd2FpdCBmZXRjaFByZXZPdXRwdXRTcGVuZHMoaHR0cENsaWVudCwgdHgpIDogdW5kZWZpbmVkLFxuICAgICAgb3V0cHV0U3BlbmRzOlxuICAgICAgICBhcmd2LmZldGNoU3BlbmRzICYmIHR4IGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb25cbiAgICAgICAgICA/IGF3YWl0IGZldGNoT3V0cHV0U3BlbmRzKGh0dHBDbGllbnQsIHR4KVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuXG4gICAgY29uc29sZS5sb2coZm9ybWF0U3RyaW5nKHBhcnNlZCwgYXJndikpO1xuICB9LFxufSBhcyBjb25zdDtcbiJdfQ==
|