@bitgo-beta/utxo-bin 2.8.3-beta.49 → 2.8.3-beta.490
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 +63 -4
- package/dist/bin/index.js +10 -2
- package/dist/src/AddressParser.d.ts +1 -0
- package/dist/src/AddressParser.d.ts.map +1 -1
- package/dist/src/AddressParser.js +7 -1
- package/dist/src/InputParser.d.ts +1 -1
- package/dist/src/InputParser.d.ts.map +1 -1
- package/dist/src/InputParser.js +29 -22
- package/dist/src/OutputParser.d.ts +3 -2
- package/dist/src/OutputParser.d.ts.map +1 -1
- package/dist/src/OutputParser.js +17 -4
- package/dist/src/Parser.d.ts +2 -2
- package/dist/src/Parser.d.ts.map +1 -1
- package/dist/src/Parser.js +5 -2
- package/dist/src/ParserTx.d.ts +3 -3
- package/dist/src/ParserTx.d.ts.map +1 -1
- package/dist/src/ScriptParser.d.ts +21 -0
- package/dist/src/ScriptParser.d.ts.map +1 -0
- package/dist/src/ScriptParser.js +77 -0
- package/dist/src/TxParser.d.ts +3 -2
- package/dist/src/TxParser.d.ts.map +1 -1
- package/dist/src/TxParser.js +9 -7
- package/dist/src/args/index.d.ts +4 -0
- package/dist/src/args/index.d.ts.map +1 -0
- package/dist/src/args/index.js +20 -0
- package/dist/src/args/parseNetwork.d.ts +22 -0
- package/dist/src/args/parseNetwork.d.ts.map +1 -0
- package/dist/src/args/parseNetwork.js +34 -0
- package/dist/src/args/parseString.d.ts +41 -0
- package/dist/src/args/parseString.d.ts.map +1 -0
- package/dist/src/args/parseString.js +120 -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 +29 -0
- package/dist/src/bip32.d.ts +5 -0
- package/dist/src/bip32.d.ts.map +1 -0
- package/dist/src/bip32.js +23 -0
- package/dist/src/commands/cmdGenerateAddress.d.ts +17 -0
- package/dist/src/commands/cmdGenerateAddress.d.ts.map +1 -0
- package/dist/src/commands/cmdGenerateAddress.js +55 -0
- package/dist/src/commands/cmdParseAddress.d.ts +20 -0
- package/dist/src/commands/cmdParseAddress.d.ts.map +1 -0
- package/dist/src/commands/cmdParseAddress.js +28 -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 +120 -0
- package/dist/src/commands/cmdParseXpub.d.ts +15 -0
- package/dist/src/commands/cmdParseXpub.d.ts.map +1 -0
- package/dist/src/commands/cmdParseXpub.js +20 -0
- package/dist/src/commands/formatString.d.ts +9 -0
- package/dist/src/commands/formatString.d.ts.map +1 -0
- package/dist/src/commands/formatString.js +15 -0
- package/dist/src/commands/index.d.ts +6 -0
- package/dist/src/commands/index.d.ts.map +1 -0
- package/dist/src/commands/index.js +22 -0
- package/dist/src/fetch.d.ts +8 -1
- package/dist/src/fetch.d.ts.map +1 -1
- package/dist/src/fetch.js +38 -4
- package/dist/src/format.d.ts.map +1 -1
- package/dist/src/format.js +14 -5
- package/dist/src/generateAddress.d.ts +30 -0
- package/dist/src/generateAddress.d.ts.map +1 -0
- package/dist/src/generateAddress.js +103 -0
- package/dist/src/hollowSegwitSpend.d.ts +1 -1
- package/dist/src/hollowSegwitSpend.d.ts.map +1 -1
- package/dist/src/parseUnknown.d.ts +3 -1
- package/dist/src/parseUnknown.d.ts.map +1 -1
- package/dist/src/parseUnknown.js +4 -4
- package/dist/test/args/stringToBuffer.d.ts +2 -0
- package/dist/test/args/stringToBuffer.d.ts.map +1 -0
- package/dist/test/args/stringToBuffer.js +16 -0
- package/dist/test/bip32.d.ts +2 -0
- package/dist/test/bip32.d.ts.map +1 -0
- package/dist/test/bip32.js +21 -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 +14 -0
- package/dist/test/fixtures.d.ts +2 -2
- package/dist/test/fixtures.d.ts.map +1 -1
- package/dist/test/fixtures.js +11 -4
- package/dist/test/generateAddress.d.ts +2 -0
- package/dist/test/generateAddress.d.ts.map +1 -0
- package/dist/test/generateAddress.js +29 -0
- package/dist/test/parseAddress.d.ts +1 -5
- package/dist/test/parseAddress.d.ts.map +1 -1
- package/dist/test/parseAddress.js +14 -18
- package/dist/test/parseScript.d.ts +2 -0
- package/dist/test/parseScript.d.ts.map +1 -0
- package/dist/test/parseScript.js +38 -0
- package/dist/test/parseTransaction.js +10 -7
- package/dist/tsconfig.tsbuildinfo +1 -4790
- package/package.json +7 -6
- package/dist/src/commands.d.ts +0 -48
- package/dist/src/commands.d.ts.map +0 -1
- package/dist/src/commands.js +0 -213
- package/dist/src/readStdin.d.ts +0 -5
- package/dist/src/readStdin.d.ts.map +0 -1
- package/dist/src/readStdin.js +0 -42
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.cmdParseTx = exports.getTxParser = void 0;
|
|
4
|
+
const utxolib = require("@bitgo-beta/utxo-lib");
|
|
5
|
+
const args_1 = require("../args");
|
|
6
|
+
const TxParser_1 = require("../TxParser");
|
|
7
|
+
const fetch_1 = require("../fetch");
|
|
8
|
+
const ParserTx_1 = require("../ParserTx");
|
|
9
|
+
const parseUnknown_1 = require("../parseUnknown");
|
|
10
|
+
const Parser_1 = require("../Parser");
|
|
11
|
+
const formatString_1 = require("./formatString");
|
|
12
|
+
function getTxParser(argv) {
|
|
13
|
+
if (argv.all) {
|
|
14
|
+
return new TxParser_1.TxParser({ ...argv, ...TxParser_1.TxParser.PARSE_ALL });
|
|
15
|
+
}
|
|
16
|
+
return new TxParser_1.TxParser({
|
|
17
|
+
...argv,
|
|
18
|
+
parseSignatureData: {
|
|
19
|
+
script: argv.parseSignatureData,
|
|
20
|
+
ecdsa: argv.parseSignatureData,
|
|
21
|
+
schnorr: argv.parseSignatureData,
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
exports.getTxParser = getTxParser;
|
|
26
|
+
exports.cmdParseTx = {
|
|
27
|
+
command: 'parseTx [path]',
|
|
28
|
+
aliases: ['parse', 'tx'],
|
|
29
|
+
describe: 'Display transaction components in human-readable form. ' +
|
|
30
|
+
'Supported formats are Partially Signed Bitcoin Transaction (PSBT), ' +
|
|
31
|
+
'bitcoinjs-lib encoding (Legacy) or fully signed transaction. ' +
|
|
32
|
+
'Bytes must be encoded in hex or base64 format.',
|
|
33
|
+
builder(b) {
|
|
34
|
+
return b
|
|
35
|
+
.options(args_1.readStringOptions)
|
|
36
|
+
.options((0, args_1.getNetworkOptionsDemand)())
|
|
37
|
+
.option('txid', { type: 'string' })
|
|
38
|
+
.option('blockHeight', { type: 'number' })
|
|
39
|
+
.option('txIndex', { type: 'number' })
|
|
40
|
+
.option('fetchAll', { type: 'boolean', default: false })
|
|
41
|
+
.option('fetchStatus', { type: 'boolean', default: false })
|
|
42
|
+
.option('fetchInputs', { type: 'boolean', default: false })
|
|
43
|
+
.option('fetchSpends', { type: 'boolean', default: false })
|
|
44
|
+
.option('parseScriptAsm', { alias: 'scriptasm', type: 'boolean', default: false })
|
|
45
|
+
.option('parseScriptData', { alias: 'scriptdata', type: 'boolean', default: false })
|
|
46
|
+
.option('parseSignatureData', { alias: 'sigdata', type: 'boolean', default: false })
|
|
47
|
+
.option('parseOutputScript', { type: 'boolean', default: false })
|
|
48
|
+
.option('parseAsUnknown', {
|
|
49
|
+
type: 'boolean',
|
|
50
|
+
default: false,
|
|
51
|
+
description: 'show plain Javascript object without any post-processing',
|
|
52
|
+
})
|
|
53
|
+
.option('maxOutputs', { type: 'number' })
|
|
54
|
+
.option('vin', { type: 'number' })
|
|
55
|
+
.array('vin')
|
|
56
|
+
.option('vout', { type: 'number' })
|
|
57
|
+
.array('vout')
|
|
58
|
+
.option('finalize', {
|
|
59
|
+
type: 'boolean',
|
|
60
|
+
default: false,
|
|
61
|
+
description: 'finalize PSBT and parse result instead of PSBT',
|
|
62
|
+
})
|
|
63
|
+
.option('all', { type: 'boolean', default: false })
|
|
64
|
+
.option('cache', {
|
|
65
|
+
type: 'boolean',
|
|
66
|
+
default: false,
|
|
67
|
+
description: 'use local cache for http responses',
|
|
68
|
+
})
|
|
69
|
+
.option('format', { choices: ['tree', 'json'], default: 'tree' })
|
|
70
|
+
.option('parseError', { choices: ['continue', 'throw'], default: 'continue' });
|
|
71
|
+
},
|
|
72
|
+
async handler(argv) {
|
|
73
|
+
let data;
|
|
74
|
+
const httpClient = await (0, fetch_1.getClient)({ cache: argv.cache });
|
|
75
|
+
if (argv.txid || argv.blockHeight !== undefined || argv.txIndex !== undefined) {
|
|
76
|
+
data = await (0, fetch_1.fetchTransactionHex)(httpClient, {
|
|
77
|
+
txid: argv.txid,
|
|
78
|
+
blockHeight: argv.blockHeight,
|
|
79
|
+
txIndex: argv.txIndex,
|
|
80
|
+
}, argv.network);
|
|
81
|
+
}
|
|
82
|
+
const string = await (0, args_1.argToString)(argv, data);
|
|
83
|
+
if (!string) {
|
|
84
|
+
throw new Error(`no txdata`);
|
|
85
|
+
}
|
|
86
|
+
const bytes = (0, args_1.stringToBuffer)(string, 'hex');
|
|
87
|
+
let tx = utxolib.bitgo.isPsbt(bytes)
|
|
88
|
+
? utxolib.bitgo.createPsbtFromBuffer(bytes, argv.network)
|
|
89
|
+
: utxolib.bitgo.createTransactionFromBuffer(bytes, argv.network, { amountType: 'bigint' });
|
|
90
|
+
const { id: txid } = (0, ParserTx_1.getParserTxProperties)(tx, undefined);
|
|
91
|
+
if (tx instanceof utxolib.bitgo.UtxoTransaction) {
|
|
92
|
+
if (argv.txid && txid !== argv.txid) {
|
|
93
|
+
throw new Error(`computed txid does not match txid argument`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
else if (argv.finalize) {
|
|
97
|
+
tx.finalizeAllInputs();
|
|
98
|
+
tx = tx.extractTransaction();
|
|
99
|
+
}
|
|
100
|
+
if (argv.parseAsUnknown) {
|
|
101
|
+
console.log((0, formatString_1.formatString)((0, parseUnknown_1.parseUnknown)(new Parser_1.Parser(), 'tx', tx), argv));
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
if (argv.fetchAll) {
|
|
105
|
+
argv.fetchStatus = true;
|
|
106
|
+
argv.fetchInputs = true;
|
|
107
|
+
argv.fetchSpends = true;
|
|
108
|
+
}
|
|
109
|
+
const parsed = getTxParser(argv).parse(tx, {
|
|
110
|
+
status: argv.fetchStatus && txid ? await (0, fetch_1.fetchTransactionStatus)(httpClient, txid, argv.network) : undefined,
|
|
111
|
+
prevOutputs: argv.fetchInputs ? await (0, fetch_1.fetchPrevOutputs)(httpClient, tx) : undefined,
|
|
112
|
+
prevOutputSpends: argv.fetchSpends ? await (0, fetch_1.fetchPrevOutputSpends)(httpClient, tx) : undefined,
|
|
113
|
+
outputSpends: argv.fetchSpends && tx instanceof utxolib.bitgo.UtxoTransaction
|
|
114
|
+
? await (0, fetch_1.fetchOutputSpends)(httpClient, tx)
|
|
115
|
+
: undefined,
|
|
116
|
+
});
|
|
117
|
+
console.log((0, formatString_1.formatString)(parsed, argv));
|
|
118
|
+
},
|
|
119
|
+
};
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY21kUGFyc2VUeC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9jbWRQYXJzZVR4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGdEQUFnRDtBQUdoRCxrQ0FBcUg7QUFDckgsMENBQXFEO0FBQ3JELG9DQU9rQjtBQUNsQiwwQ0FBb0Q7QUFDcEQsa0RBQStDO0FBQy9DLHNDQUFtQztBQUVuQyxpREFBOEM7QUFxQjlDLFNBQWdCLFdBQVcsQ0FBQyxJQUEyQztJQUNyRSxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDWixPQUFPLElBQUksbUJBQVEsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsbUJBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0tBQ3pEO0lBQ0QsT0FBTyxJQUFJLG1CQUFRLENBQUM7UUFDbEIsR0FBRyxJQUFJO1FBQ1Asa0JBQWtCLEVBQUU7WUFDbEIsTUFBTSxFQUFFLElBQUksQ0FBQyxrQkFBa0I7WUFDL0IsS0FBSyxFQUFFLElBQUksQ0FBQyxrQkFBa0I7WUFDOUIsT0FBTyxFQUFFLElBQUksQ0FBQyxrQkFBa0I7U0FDakM7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDO0FBWkQsa0NBWUM7QUFFWSxRQUFBLFVBQVUsR0FBRztJQUN4QixPQUFPLEVBQUUsZ0JBQWdCO0lBQ3pCLE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUM7SUFDeEIsUUFBUSxFQUNOLHlEQUF5RDtRQUN6RCxxRUFBcUU7UUFDckUsK0RBQStEO1FBQy9ELGdEQUFnRDtJQUVsRCxPQUFPLENBQUMsQ0FBc0I7UUFDNUIsT0FBTyxDQUFDO2FBQ0wsT0FBTyxDQUFDLHdCQUFpQixDQUFDO2FBQzFCLE9BQU8sQ0FBQyxJQUFBLDhCQUF1QixHQUFFLENBQUM7YUFDbEMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQzthQUNsQyxNQUFNLENBQUMs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QWU7Z0JBQzdELENBQUMsQ0FBQyxNQUFNLElBQUEseUJBQWlCLEVBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztnQkFDekMsQ0FBQyxDQUFDLFNBQVM7U0FDaEIsQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFBLDJCQUFZLEVBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDMUMsQ0FBQztDQUNPLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCAqIGFzIHlhcmdzIGZyb20gJ3lhcmdzJztcblxuaW1wb3J0IHsgYXJnVG9TdHJpbmcsIGdldE5ldHdvcmtPcHRpb25zRGVtYW5kLCBSZWFkU3RyaW5nT3B0aW9ucywgcmVhZFN0cmluZ09wdGlvbnMsIHN0cmluZ1RvQnVmZmVyIH0gZnJvbSAnLi4vYXJncyc7XG5pbXBvcnQgeyBUeFBhcnNlciwgVHhQYXJzZXJBcmdzIH0gZnJvbSAnLi4vVHhQYXJzZXInO1xuaW1wb3J0IHtcbiAgZmV0Y2hPdXRwdXRTcGVuZHMsXG4gIGZldGNoUHJldk91dHB1dHMsXG4gIGZldGNoUHJldk91dHB1dFNwZW5kcyxcbiAgZmV0Y2hUcmFuc2FjdGlvbkhleCxcbiAgZmV0Y2hUcmFuc2FjdGlvblN0YXR1cyxcbiAgZ2V0Q2xpZW50LFxufSBmcm9tICcuLi9mZXRjaCc7XG5pbXBvcnQgeyBnZXRQYXJzZXJUeFByb3BlcnRpZXMgfSBmcm9tICcuLi9QYXJzZXJUeCc7XG5pbXBvcnQgeyBwYXJzZVVua25vd24gfSBmcm9tICcuLi9wYXJzZVVua25vd24nO1xuaW1wb3J0IHsgUGFyc2VyIH0gZnJvbSAnLi4vUGFyc2VyJztcblxuaW1wb3J0IHsgZm9ybWF0U3RyaW5nIH0gZnJvbSAnLi9mb3JtYXRTdHJpbmcnO1xuXG5leHBvcnQgdHlwZSBPdXRwdXRGb3JtYXQgPSAndHJlZScgfCAnanNvbic7XG5leHBvcnQgdHlwZSBBcmdzUGFyc2VUcmFuc2FjdGlvbiA9IFJlYWRTdHJpbmdPcHRpb25zICYge1xuICBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcms7XG4gIHR4aWQ/OiBzdHJpbmc7XG4gIGJsb2NrSGVpZ2h0PzogbnVtYmVyO1xuICB0eEluZGV4PzogbnVtYmVyO1xuICBhbGw6IGJvb2xlYW47XG4gIGNhY2hlOiBib29sZWFuO1xuICBmb3JtYXQ6IE91dHB1dEZvcm1hdDtcbiAgZmV0Y2hBbGw6IGJvb2xlYW47XG4gIGZldGNoU3RhdHVzOiBib29sZWFuO1xuICBmZXRjaElucHV0czogYm9vbGVhbjtcbiAgZmV0Y2hTcGVuZHM6IGJvb2xlYW47XG4gIGZpbmFsaXplOiBib29sZWFuO1xuICBwYXJzZVNpZ25hdHVyZURhdGE6IGJvb2xlYW47XG4gIHBhcnNlQXNVbmtub3duOiBib29sZWFuO1xuICBwYXJzZUVycm9yOiAndGhyb3cnIHwgJ2NvbnRpbnVlJztcbn0gJiBPbWl0PFR4UGFyc2VyQXJncywgJ3BhcnNlU2lnbmF0dXJlRGF0YSc+O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHhQYXJzZXIoYXJndjogeWFyZ3MuQXJndW1lbnRzPEFyZ3NQYXJzZVRyYW5zYWN0aW9uPik6IFR4UGFyc2VyIHtcbiAgaWYgKGFyZ3YuYWxsKSB7XG4gICAgcmV0dXJuIG5ldyBUeFBhcnNlcih7IC4uLmFyZ3YsIC4uLlR4UGFyc2VyLlBBUlNFX0FMTCB9KTtcbiAgfVxuICByZXR1cm4gbmV3IFR4UGFyc2VyKHtcbiAgICAuLi5hcmd2LFxuICAgIHBhcnNlU2lnbmF0dXJlRGF0YToge1xuICAgICAgc2NyaXB0OiBhcmd2LnBhcnNlU2lnbmF0dXJlRGF0YSxcbiAgICAgIGVjZHNhOiBhcmd2LnBhcnNlU2lnbmF0dXJlRGF0YSxcbiAgICAgIHNjaG5vcnI6IGFyZ3YucGFyc2VTaWduYXR1cmVEYXRhLFxuICAgIH0sXG4gIH0pO1xufVxuXG5leHBvcnQgY29uc3QgY21kUGFyc2VUeCA9IHtcbiAgY29tbWFuZDogJ3BhcnNlVHggW3BhdGhdJyxcbiAgYWxpYXNlczogWydwYXJzZScsICd0eCddLFxuICBkZXNjcmliZTpcbiAgICAnRGlzcGxheSB0cmFuc2FjdGlvbiBjb21wb25lbnRzIGluIGh1bWFuLXJlYWRhYmxlIGZvcm0uICcgK1xuICAgICdTdXBwb3J0ZWQgZm9ybWF0cyBhcmUgUGFydGlhbGx5IFNpZ25lZCBCaXRjb2luIFRyYW5zYWN0aW9uIChQU0JUKSwgJyArXG4gICAgJ2JpdGNvaW5qcy1saWIgZW5jb2RpbmcgKExlZ2FjeSkgb3IgZnVsbHkgc2lnbmVkIHRyYW5zYWN0aW9uLiAnICtcbiAgICAnQnl0ZXMgbXVzdCBiZSBlbmNvZGVkIGluIGhleCBvciBiYXNlNjQgZm9ybWF0LicsXG5cbiAgYnVpbGRlcihiOiB5YXJncy5Bcmd2PHVua25vd24+KTogeWFyZ3MuQXJndjxBcmdzUGFyc2VUcmFuc2FjdGlvbj4ge1xuICAgIHJldHVybiBiXG4gICAgICAub3B0aW9ucyhyZWFkU3RyaW5nT3B0aW9ucylcbiAgICAgIC5vcHRpb25zKGdldE5ldHdvcmtPcHRpb25zRGVtYW5kKCkpXG4gICAgICAub3B0aW9uKCd0eGlkJywgeyB0eXBlOiAnc3RyaW5nJyB9KVxuICAgICAgLm9wdGlvbignYmxvY2tIZWlnaHQnLCB7IHR5cGU6ICdudW1iZXInIH0pXG4gICAgICAub3B0aW9uKCd0eEluZGV4JywgeyB0eXBlOiAnbnVtYmVyJyB9KVxuICAgICAgLm9wdGlvbignZmV0Y2hBbGwnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UgfSlcbiAgICAgIC5vcHRpb24oJ2ZldGNoU3RhdHVzJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlIH0pXG4gICAgICAub3B0aW9uKCdmZXRjaElucHV0cycsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSB9KVxuICAgICAgLm9wdGlvbignZmV0Y2hTcGVuZHMnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UgfSlcbiAgICAgIC5vcHRpb24oJ3BhcnNlU2NyaXB0QXNtJywgeyBhbGlhczogJ3NjcmlwdGFzbScsIHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UgfSlcbiAgICAgIC5vcHRpb24oJ3BhcnNlU2NyaXB0RGF0YScsIHsgYWxpYXM6ICdzY3JpcHRkYXRhJywgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSB9KVxuICAgICAgLm9wdGlvbigncGFyc2VTaWduYXR1cmVEYXRhJywgeyBhbGlhczogJ3NpZ2RhdGEnLCB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlIH0pXG4gICAgICAub3B0aW9uKCdwYXJzZU91dHB1dFNjcmlwdCcsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSB9KVxuICAgICAgLm9wdGlvbigncGFyc2VBc1Vua25vd24nLCB7XG4gICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnc2hvdyBwbGFpbiBKYXZhc2NyaXB0IG9iamVjdCB3aXRob3V0IGFueSBwb3N0LXByb2Nlc3NpbmcnLFxuICAgICAgfSlcbiAgICAgIC5vcHRpb24oJ21heE91dHB1dHMnLCB7IHR5cGU6ICdudW1iZXInIH0pXG4gICAgICAub3B0aW9uKCd2aW4nLCB7IHR5cGU6ICdudW1iZXInIH0pXG4gICAgICAuYXJyYXkoJ3ZpbicpXG4gICAgICAub3B0aW9uKCd2b3V0JywgeyB0eXBlOiAnbnVtYmVyJyB9KVxuICAgICAgLmFycmF5KCd2b3V0JylcbiAgICAgIC5vcHRpb24oJ2ZpbmFsaXplJywge1xuICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ2ZpbmFsaXplIFBTQlQgYW5kIHBhcnNlIHJlc3VsdCBpbnN0ZWFkIG9mIFBTQlQnLFxuICAgICAgfSlcbiAgICAgIC5vcHRpb24oJ2FsbCcsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSB9KVxuICAgICAgLm9wdGlvbignY2FjaGUnLCB7XG4gICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAndXNlIGxvY2FsIGNhY2hlIGZvciBodHRwIHJlc3BvbnNlcycsXG4gICAgICB9KVxuICAgICAgLm9wdGlvbignZm9ybWF0JywgeyBjaG9pY2VzOiBbJ3RyZWUnLCAnanNvbiddLCBkZWZhdWx0OiAndHJlZScgfSBhcyBjb25zdClcbiAgICAgIC5vcHRpb24oJ3BhcnNlRXJyb3InLCB7IGNob2ljZXM6IFsnY29udGludWUnLCAndGhyb3cnXSwgZGVmYXVsdDogJ2NvbnRpbnVlJyB9IGFzIGNvbnN0KTtcbiAgfSxcblxuICBhc3luYyBoYW5kbGVyKGFyZ3Y6IHlhcmdzLkFyZ3VtZW50czxBcmdzUGFyc2VUcmFuc2FjdGlvbj4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgZGF0YTtcblxuICAgIGNvbnN0IGh0dHBDbGllbnQgPSBhd2FpdCBnZXRDbGllbnQoeyBjYWNoZTogYXJndi5jYWNoZSB9KTtcblxuICAgIGlmIChhcmd2LnR4aWQgfHwgYXJndi5ibG9ja0hlaWdodCAhPT0gdW5kZWZpbmVkIHx8IGFyZ3YudHhJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBkYXRhID0gYXdhaXQgZmV0Y2hUcmFuc2FjdGlvbkhleChcbiAgICAgICAgaHR0cENsaWVudCxcbiAgICAgICAge1xuICAgICAgICAgIHR4aWQ6IGFyZ3YudHhpZCxcbiAgICAgICAgICBibG9ja0hlaWdodDogYXJndi5ibG9ja0hlaWdodCxcbiAgICAgICAgICB0eEluZGV4OiBhcmd2LnR4SW5kZXgsXG4gICAgICAgIH0sXG4gICAgICAgIGFyZ3YubmV0d29ya1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdHJpbmcgPSBhd2FpdCBhcmdUb1N0cmluZyhhcmd2LCBkYXRhKTtcbiAgICBpZiAoIXN0cmluZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBubyB0eGRhdGFgKTtcbiAgICB9XG5cbiAgICBjb25zdCBieXRlcyA9IHN0cmluZ1RvQnVmZmVyKHN0cmluZywgJ2hleCcpO1xuXG4gICAgbGV0IHR4ID0gdXR4b2xpYi5iaXRnby5pc1BzYnQoYnl0ZXMpXG4gICAgICA/IHV0eG9saWIuYml0Z28uY3JlYXRlUHNidEZyb21CdWZmZXIoYnl0ZXMsIGFyZ3YubmV0d29yaylcbiAgICAgIDogdXR4b2xpYi5iaXRnby5jcmVhdGVUcmFuc2FjdGlvbkZyb21CdWZmZXIoYnl0ZXMsIGFyZ3YubmV0d29yaywgeyBhbW91bnRUeXBlOiAnYmlnaW50JyB9KTtcblxuICAgIGNvbnN0IHsgaWQ6IHR4aWQgfSA9IGdldFBhcnNlclR4UHJvcGVydGllcyh0eCwgdW5kZWZpbmVkKTtcbiAgICBpZiAodHggaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbikge1xuICAgICAgaWYgKGFyZ3YudHhpZCAmJiB0eGlkICE9PSBhcmd2LnR4aWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjb21wdXRlZCB0eGlkIGRvZXMgbm90IG1hdGNoIHR4aWQgYXJndW1lbnRgKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGFyZ3YuZmluYWxpemUpIHtcbiAgICAgIHR4LmZpbmFsaXplQWxsSW5wdXRzKCk7XG4gICAgICB0eCA9IHR4LmV4dHJhY3RUcmFuc2FjdGlvbigpO1xuICAgIH1cblxuICAgIGlmIChhcmd2LnBhcnNlQXNVbmtub3duKSB7XG4gICAgICBjb25zb2xlLmxvZyhmb3JtYXRTdHJpbmcocGFyc2VVbmtub3duKG5ldyBQYXJzZXIoKSwgJ3R4JywgdHgpLCBhcmd2KSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGFyZ3YuZmV0Y2hBbGwpIHtcbiAgICAgIGFyZ3YuZmV0Y2hTdGF0dXMgPSB0cnVlO1xuICAgICAgYXJndi5mZXRjaElucHV0cyA9IHRydWU7XG4gICAgICBhcmd2LmZldGNoU3BlbmRzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZWQgPSBnZXRUeFBhcnNlcihhcmd2KS5wYXJzZSh0eCwge1xuICAgICAgc3RhdHVzOiBhcmd2LmZldGNoU3RhdHVzICYmIHR4aWQgPyBhd2FpdCBmZXRjaFRyYW5zYWN0aW9uU3RhdHVzKGh0dHBDbGllbnQsIHR4aWQsIGFyZ3YubmV0d29yaykgOiB1bmRlZmluZWQsXG4gICAgICBwcmV2T3V0cHV0czogYXJndi5mZXRjaElucHV0cyA/IGF3YWl0IGZldGNoUHJldk91dHB1dHMoaHR0cENsaWVudCwgdHgpIDogdW5kZWZpbmVkLFxuICAgICAgcHJldk91dHB1dFNwZW5kczogYXJndi5mZXRjaFNwZW5kcyA/IGF3YWl0IGZldGNoUHJldk91dHB1dFNwZW5kcyhodHRwQ2xpZW50LCB0eCkgOiB1bmRlZmluZWQsXG4gICAgICBvdXRwdXRTcGVuZHM6XG4gICAgICAgIGFyZ3YuZmV0Y2hTcGVuZHMgJiYgdHggaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvblxuICAgICAgICAgID8gYXdhaXQgZmV0Y2hPdXRwdXRTcGVuZHMoaHR0cENsaWVudCwgdHgpXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICBjb25zb2xlLmxvZyhmb3JtYXRTdHJpbmcocGFyc2VkLCBhcmd2KSk7XG4gIH0sXG59IGFzIGNvbnN0O1xuIl19
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as yargs from 'yargs';
|
|
2
|
+
import { FormatStringArgs } from './formatString';
|
|
3
|
+
export declare const cmdParseXpub: {
|
|
4
|
+
command: string;
|
|
5
|
+
describe: string;
|
|
6
|
+
builder(b: yargs.Argv<unknown>): yargs.Argv<{
|
|
7
|
+
xpub: string;
|
|
8
|
+
derive?: string;
|
|
9
|
+
} & FormatStringArgs>;
|
|
10
|
+
handler(argv: yargs.Arguments<{
|
|
11
|
+
xpub: string;
|
|
12
|
+
derive?: string;
|
|
13
|
+
} & FormatStringArgs>): void;
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=cmdParseXpub.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cmdParseXpub.d.ts","sourceRoot":"","sources":["../../../src/commands/cmdParseXpub.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAgB,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEhE,eAAO,MAAM,YAAY;;;eAGZ,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,MAAM,IAAI,CACzC;QACE,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,gBAAgB,CACrB;kBAQO,MAAM,SAAS,CACnB;QACE,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,gBAAgB,CACrB,GACA,IAAI;CAGR,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.cmdParseXpub = void 0;
|
|
4
|
+
const bip32_1 = require("../bip32");
|
|
5
|
+
const formatString_1 = require("./formatString");
|
|
6
|
+
exports.cmdParseXpub = {
|
|
7
|
+
command: 'parseXpub [xpub]',
|
|
8
|
+
describe: 'show xpub info',
|
|
9
|
+
builder(b) {
|
|
10
|
+
return b
|
|
11
|
+
.positional('xpub', { type: 'string', demandOption: true })
|
|
12
|
+
.option('format', { choices: ['tree', 'json'], default: 'tree' })
|
|
13
|
+
.option('all', { type: 'boolean', default: false })
|
|
14
|
+
.option('derive', { type: 'string', description: 'show xpub derived with path' });
|
|
15
|
+
},
|
|
16
|
+
handler(argv) {
|
|
17
|
+
console.log((0, formatString_1.formatString)((0, bip32_1.parseXpub)(argv.xpub, { derive: argv.derive }), argv));
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY21kUGFyc2VYcHViLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2NtZFBhcnNlWHB1Yi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxvQ0FBcUM7QUFFckMsaURBQWdFO0FBRW5ELFFBQUEsWUFBWSxHQUFHO0lBQzFCLE9BQU8sRUFBRSxrQkFBa0I7SUFDM0IsUUFBUSxFQUFFLGdCQUFnQjtJQUMxQixPQUFPLENBQUMsQ0FBc0I7UUFNNUIsT0FBTyxDQUFDO2FBQ0wsVUFBVSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDO2FBQzFELE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBVyxDQUFDO2FBQ3pFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQzthQUNsRCxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsNkJBQTZCLEVBQUUsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFDRCxPQUFPLENBQ0wsSUFLQztRQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBQSwyQkFBWSxFQUFDLElBQUEsaUJBQVMsRUFBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDakYsQ0FBQztDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB5YXJncyBmcm9tICd5YXJncyc7XG5cbmltcG9ydCB7IHBhcnNlWHB1YiB9IGZyb20gJy4uL2JpcDMyJztcblxuaW1wb3J0IHsgZm9ybWF0U3RyaW5nLCBGb3JtYXRTdHJpbmdBcmdzIH0gZnJvbSAnLi9mb3JtYXRTdHJpbmcnO1xuXG5leHBvcnQgY29uc3QgY21kUGFyc2VYcHViID0ge1xuICBjb21tYW5kOiAncGFyc2VYcHViIFt4cHViXScsXG4gIGRlc2NyaWJlOiAnc2hvdyB4cHViIGluZm8nLFxuICBidWlsZGVyKGI6IHlhcmdzLkFyZ3Y8dW5rbm93bj4pOiB5YXJncy5Bcmd2PFxuICAgIHtcbiAgICAgIHhwdWI6IHN0cmluZztcbiAgICAgIGRlcml2ZT86IHN0cmluZztcbiAgICB9ICYgRm9ybWF0U3RyaW5nQXJnc1xuICA+IHtcbiAgICByZXR1cm4gYlxuICAgICAgLnBvc2l0aW9uYWwoJ3hwdWInLCB7IHR5cGU6ICdzdHJpbmcnLCBkZW1hbmRPcHRpb246IHRydWUgfSlcbiAgICAgIC5vcHRpb24oJ2Zvcm1hdCcsIHsgY2hvaWNlczogWyd0cmVlJywgJ2pzb24nXSwgZGVmYXVsdDogJ3RyZWUnIH0gYXMgY29uc3QpXG4gICAgICAub3B0aW9uKCdhbGwnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UgfSlcbiAgICAgIC5vcHRpb24oJ2Rlcml2ZScsIHsgdHlwZTogJ3N0cmluZycsIGRlc2NyaXB0aW9uOiAnc2hvdyB4cHViIGRlcml2ZWQgd2l0aCBwYXRoJyB9KTtcbiAgfSxcbiAgaGFuZGxlcihcbiAgICBhcmd2OiB5YXJncy5Bcmd1bWVudHM8XG4gICAgICB7XG4gICAgICAgIHhwdWI6IHN0cmluZztcbiAgICAgICAgZGVyaXZlPzogc3RyaW5nO1xuICAgICAgfSAmIEZvcm1hdFN0cmluZ0FyZ3NcbiAgICA+XG4gICk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKGZvcm1hdFN0cmluZyhwYXJzZVhwdWIoYXJndi54cHViLCB7IGRlcml2ZTogYXJndi5kZXJpdmUgfSksIGFyZ3YpKTtcbiAgfSxcbn07XG4iXX0=
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as yargs from 'yargs';
|
|
2
|
+
import { ParserNode } from '../Parser';
|
|
3
|
+
import { OutputFormat } from './cmdParseTx';
|
|
4
|
+
export type FormatStringArgs = {
|
|
5
|
+
format: OutputFormat;
|
|
6
|
+
all: boolean;
|
|
7
|
+
};
|
|
8
|
+
export declare function formatString(parsed: ParserNode, argv: yargs.Arguments<FormatStringArgs>): string;
|
|
9
|
+
//# sourceMappingURL=formatString.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatString.d.ts","sourceRoot":"","sources":["../../../src/commands/formatString.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAGvC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,YAAY,CAAC;IACrB,GAAG,EAAE,OAAO,CAAC;CACd,CAAC;AAEF,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAQhG"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.formatString = void 0;
|
|
4
|
+
const format_1 = require("../format");
|
|
5
|
+
function formatString(parsed, argv) {
|
|
6
|
+
switch (argv.format) {
|
|
7
|
+
case 'json':
|
|
8
|
+
return JSON.stringify(parsed, null, 2);
|
|
9
|
+
case 'tree':
|
|
10
|
+
return (0, format_1.formatTree)(parsed, { hide: argv.all ? [] : undefined });
|
|
11
|
+
}
|
|
12
|
+
throw new Error(`invalid format ${argv.format}`);
|
|
13
|
+
}
|
|
14
|
+
exports.formatString = formatString;
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0U3RyaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2Zvcm1hdFN0cmluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFHQSxzQ0FBdUM7QUFTdkMsU0FBZ0IsWUFBWSxDQUFDLE1BQWtCLEVBQUUsSUFBdUM7SUFDdEYsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFO1FBQ25CLEtBQUssTUFBTTtZQUNULE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLEtBQUssTUFBTTtZQUNULE9BQU8sSUFBQSxtQkFBVSxFQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7S0FDbEU7SUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUNuRCxDQUFDO0FBUkQsb0NBUUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB5YXJncyBmcm9tICd5YXJncyc7XG5cbmltcG9ydCB7IFBhcnNlck5vZGUgfSBmcm9tICcuLi9QYXJzZXInO1xuaW1wb3J0IHsgZm9ybWF0VHJlZSB9IGZyb20gJy4uL2Zvcm1hdCc7XG5cbmltcG9ydCB7IE91dHB1dEZvcm1hdCB9IGZyb20gJy4vY21kUGFyc2VUeCc7XG5cbmV4cG9ydCB0eXBlIEZvcm1hdFN0cmluZ0FyZ3MgPSB7XG4gIGZvcm1hdDogT3V0cHV0Rm9ybWF0O1xuICBhbGw6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0U3RyaW5nKHBhcnNlZDogUGFyc2VyTm9kZSwgYXJndjogeWFyZ3MuQXJndW1lbnRzPEZvcm1hdFN0cmluZ0FyZ3M+KTogc3RyaW5nIHtcbiAgc3dpdGNoIChhcmd2LmZvcm1hdCkge1xuICAgIGNhc2UgJ2pzb24nOlxuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHBhcnNlZCwgbnVsbCwgMik7XG4gICAgY2FzZSAndHJlZSc6XG4gICAgICByZXR1cm4gZm9ybWF0VHJlZShwYXJzZWQsIHsgaGlkZTogYXJndi5hbGwgPyBbXSA6IHVuZGVmaW5lZCB9KTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgZm9ybWF0ICR7YXJndi5mb3JtYXR9YCk7XG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
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
|
+
__exportStar(require("./cmdParseTx"), exports);
|
|
18
|
+
__exportStar(require("./cmdParseAddress"), exports);
|
|
19
|
+
__exportStar(require("./cmdParseScript"), exports);
|
|
20
|
+
__exportStar(require("./cmdGenerateAddress"), exports);
|
|
21
|
+
__exportStar(require("./cmdParseXpub"), exports);
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbWFuZHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUE2QjtBQUM3QixvREFBa0M7QUFDbEMsbURBQWlDO0FBQ2pDLHVEQUFxQztBQUNyQyxpREFBK0IiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2NtZFBhcnNlVHgnO1xuZXhwb3J0ICogZnJvbSAnLi9jbWRQYXJzZUFkZHJlc3MnO1xuZXhwb3J0ICogZnJvbSAnLi9jbWRQYXJzZVNjcmlwdCc7XG5leHBvcnQgKiBmcm9tICcuL2NtZEdlbmVyYXRlQWRkcmVzcyc7XG5leHBvcnQgKiBmcm9tICcuL2NtZFBhcnNlWHB1Yic7XG4iXX0=
|
package/dist/src/fetch.d.ts
CHANGED
|
@@ -2,9 +2,16 @@ import * as utxolib from '@bitgo-beta/utxo-lib';
|
|
|
2
2
|
import * as blockapis from '@bitgo-beta/blockapis';
|
|
3
3
|
import { HttpClient } from '@bitgo-beta/blockapis';
|
|
4
4
|
import { ParserTx } from './ParserTx';
|
|
5
|
-
export declare function fetchTransactionHex(httpClient: HttpClient,
|
|
5
|
+
export declare function fetchTransactionHex(httpClient: HttpClient, location: {
|
|
6
|
+
txid?: string;
|
|
7
|
+
blockHeight?: number;
|
|
8
|
+
txIndex?: number;
|
|
9
|
+
}, network: utxolib.Network): Promise<string>;
|
|
6
10
|
export declare function fetchTransactionStatus(httpClient: HttpClient, txid: string, network: utxolib.Network): Promise<blockapis.TransactionStatus>;
|
|
7
11
|
export declare function fetchPrevOutputs(httpClient: HttpClient, tx: ParserTx): Promise<utxolib.TxOutput<bigint>[]>;
|
|
8
12
|
export declare function fetchPrevOutputSpends(httpClient: HttpClient, tx: utxolib.bitgo.UtxoTransaction<bigint> | utxolib.bitgo.UtxoPsbt): Promise<blockapis.OutputSpend[]>;
|
|
9
13
|
export declare function fetchOutputSpends(httpClient: HttpClient, tx: utxolib.bitgo.UtxoTransaction<bigint>): Promise<blockapis.OutputSpend[]>;
|
|
14
|
+
export declare function getClient({ cache }: {
|
|
15
|
+
cache: boolean;
|
|
16
|
+
}): Promise<HttpClient>;
|
|
10
17
|
//# sourceMappingURL=fetch.d.ts.map
|
package/dist/src/fetch.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../src/fetch.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../src/fetch.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,KAAK,SAAS,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAgE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGjH,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AA6CtC,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE;IACR,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,EACD,OAAO,EAAE,OAAO,CAAC,OAAO,GACvB,OAAO,CAAC,MAAM,CAAC,CAwBjB;AAED,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,CAAC,OAAO,GACvB,OAAO,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAEtC;AAED,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAKhH;AAED,wBAAsB,qBAAqB,CACzC,UAAU,EAAE,UAAU,EACtB,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,GACjE,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAElC;AAED,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,UAAU,EACtB,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,GACxC,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAOlC;AAED,wBAAsB,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAQlF"}
|
package/dist/src/fetch.js
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.fetchOutputSpends = exports.fetchPrevOutputSpends = exports.fetchPrevOutputs = exports.fetchTransactionStatus = exports.fetchTransactionHex = void 0;
|
|
3
|
+
exports.getClient = exports.fetchOutputSpends = exports.fetchPrevOutputSpends = exports.fetchPrevOutputs = exports.fetchTransactionStatus = exports.fetchTransactionHex = void 0;
|
|
4
|
+
const fs = require("fs");
|
|
5
|
+
const process = require("process");
|
|
6
|
+
const util_1 = require("util");
|
|
4
7
|
const utxolib = require("@bitgo-beta/utxo-lib");
|
|
5
8
|
const blockapis = require("@bitgo-beta/blockapis");
|
|
9
|
+
const blockapis_1 = require("@bitgo-beta/blockapis");
|
|
6
10
|
const statics_1 = require("@bitgo-beta/statics");
|
|
7
11
|
function getTxOutPoints(tx) {
|
|
8
12
|
if (tx instanceof utxolib.bitgo.UtxoTransaction) {
|
|
@@ -41,8 +45,27 @@ function getApi(httpClient, network) {
|
|
|
41
45
|
return blockapis.BlockchairApi.forCoin(coinName, { httpClient });
|
|
42
46
|
}
|
|
43
47
|
}
|
|
44
|
-
async function fetchTransactionHex(httpClient,
|
|
45
|
-
|
|
48
|
+
async function fetchTransactionHex(httpClient, location, network) {
|
|
49
|
+
location = Object.fromEntries(Object.entries(location).filter(([k, v]) => v !== undefined));
|
|
50
|
+
if (location.blockHeight !== undefined && location.txIndex !== undefined) {
|
|
51
|
+
const api = getApi(httpClient, network);
|
|
52
|
+
if (api instanceof blockapis.BlockstreamApi) {
|
|
53
|
+
const txids = await (0, blockapis_1.getTransactionIdsAtHeight)(api, location.blockHeight);
|
|
54
|
+
const txid = txids[location.txIndex];
|
|
55
|
+
if (!txid) {
|
|
56
|
+
throw new Error(`no tx at height ${location.blockHeight} position ${location.txIndex}`);
|
|
57
|
+
}
|
|
58
|
+
return fetchTransactionHex(httpClient, { txid }, network);
|
|
59
|
+
}
|
|
60
|
+
throw new Error(`cannot use api ${api.constructor.name} to fetch tx by height`);
|
|
61
|
+
}
|
|
62
|
+
if (location.txid) {
|
|
63
|
+
if (Object.keys(location).length > 1) {
|
|
64
|
+
throw new Error(`cannot specify both txid and ${Object.keys(location)}`);
|
|
65
|
+
}
|
|
66
|
+
return await getApi(httpClient, network).getTransactionHex(location.txid);
|
|
67
|
+
}
|
|
68
|
+
throw new Error(`invalid location: ${JSON.stringify(location)}`);
|
|
46
69
|
}
|
|
47
70
|
exports.fetchTransactionHex = fetchTransactionHex;
|
|
48
71
|
async function fetchTransactionStatus(httpClient, txid, network) {
|
|
@@ -65,8 +88,19 @@ async function fetchOutputSpends(httpClient, tx) {
|
|
|
65
88
|
return await getApi(httpClient, tx.network).getTransactionSpends(tx.getId());
|
|
66
89
|
}
|
|
67
90
|
catch (e) {
|
|
91
|
+
console.error(`error fetching spends for tx ${tx.getId()}: ${e}`);
|
|
68
92
|
return [];
|
|
69
93
|
}
|
|
70
94
|
}
|
|
71
95
|
exports.fetchOutputSpends = fetchOutputSpends;
|
|
72
|
-
|
|
96
|
+
async function getClient({ cache }) {
|
|
97
|
+
if (cache) {
|
|
98
|
+
const mkdir = (0, util_1.promisify)(fs.mkdir);
|
|
99
|
+
const dir = `${process.env.HOME}/.cache/utxo-bin/`;
|
|
100
|
+
await mkdir(dir, { recursive: true });
|
|
101
|
+
return new blockapis_1.CachingHttpClient(dir);
|
|
102
|
+
}
|
|
103
|
+
return new blockapis_1.BaseHttpClient();
|
|
104
|
+
}
|
|
105
|
+
exports.getClient = getClient;
|
|
106
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmV0Y2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZmV0Y2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUJBQXlCO0FBQ3pCLG1DQUFtQztBQUNuQywrQkFBaUM7QUFFakMsZ0RBQWdEO0FBQ2hELG1EQUFtRDtBQUNuRCxxREFBaUg7QUFDakgsaURBQXNEO0FBSXRELFNBQVMsY0FBYyxDQUFDLEVBQVk7SUFDbEMsSUFBSSxFQUFFLFlBQVksT0FBTyxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUU7UUFDL0MsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2hFO1NBQU07UUFDTCxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDckU7QUFDSCxDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsT0FBd0I7SUFDM0MsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUVwRCw4RkFBOEY7SUFDOUYsUUFBUSxXQUFXLEVBQUU7UUFDbkIsS0FBSyxhQUFhO1lBQ2hCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsS0FBSyxvQkFBb0I7WUFDdkIsT0FBTyxNQUFNLENBQUM7S0FDakI7SUFFRCxNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQUcsZUFBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FDOUMsSUFBSSxZQUFZLGtCQUFRLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxD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QUM7S0FDWDtBQUNILENBQUM7QUFWRCw4Q0FVQztBQUVNLEtBQUssVUFBVSxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQXNCO0lBQzNELElBQUksS0FBSyxFQUFFO1FBQ1QsTUFBTSxLQUFLLEdBQUcsSUFBQSxnQkFBUyxFQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxNQUFNLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxtQkFBbUIsQ0FBQztRQUNuRCxNQUFNLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN0QyxPQUFPLElBQUksNkJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDbkM7SUFDRCxPQUFPLElBQUksMEJBQWMsRUFBRSxDQUFDO0FBQzlCLENBQUM7QUFSRCw4QkFRQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHByb2Nlc3MgZnJvbSAncHJvY2Vzcyc7XG5pbXBvcnQgeyBwcm9taXNpZnkgfSBmcm9tICd1dGlsJztcblxuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgKiBhcyBibG9ja2FwaXMgZnJvbSAnQGJpdGdvLWJldGEvYmxvY2thcGlzJztcbmltcG9ydCB7IEJhc2VIdHRwQ2xpZW50LCBDYWNoaW5nSHR0cENsaWVudCwgZ2V0VHJhbnNhY3Rpb25JZHNBdEhlaWdodCwgSHR0cENsaWVudCB9IGZyb20gJ0BiaXRnby1iZXRhL2Jsb2NrYXBpcyc7XG5pbXBvcnQgeyBjb2lucywgVXR4b0NvaW4gfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcblxuaW1wb3J0IHsgUGFyc2VyVHggfSBmcm9tICcuL1BhcnNlclR4JztcblxuZnVuY3Rpb24gZ2V0VHhPdXRQb2ludHModHg6IFBhcnNlclR4KTogdXR4b2xpYi5iaXRnby5UeE91dFBvaW50W10ge1xuICBpZiAodHggaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbikge1xuICAgIHJldHVybiB0eC5pbnMubWFwKChpKSA9PiB1dHhvbGliLmJpdGdvLmdldE91dHB1dElkRm9ySW5wdXQoaSkpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB0eC50eElucHV0cy5tYXAoKGkpID0+IHV0eG9saWIuYml0Z28uZ2V0T3V0cHV0SWRGb3JJbnB1dChpKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0Q29pbk5hbWUobmV0d29yazogdXR4b2xpYi5OZXR3b3JrKTogc3RyaW5nIHtcbiAgY29uc3QgbmV0d29ya05hbWUgPSB1dHhvbGliLmdldE5ldHdvcmtOYW1lKG5ldHdvcmspO1xuXG4gIC8vIHRoZSBiaXRjb2luY2FzaCBuZXR3b3JrIGFjdHVhbGx5IGhhcyB0d28gY29pbnM6IGJjaCBhbmQgYmNoYSAtIGhhcmRjb2RlIGJjaCBieSBkZWZhdWx0IGhlcmVcbiAgc3dpdGNoIChuZXR3b3JrTmFtZSkge1xuICAgIGNhc2UgJ2JpdGNvaW5jYXNoJzpcbiAgICAgIHJldHVybiAnYmNoJztcbiAgICBjYXNlICdiaXRjb2luY2FzaFRlc3RuZXQnOlxuICAgICAgcmV0dXJuICd0YmNoJztcbiAgfVxuXG4gIGNvbnN0IG1hdGNoZXMgPSBbLi4uY29pbnNdLmZsYXRNYXAoKFssIGNvaW5dKSA9PlxuICAgIGNvaW4gaW5zdGFuY2VvZiBVdHhvQ29pbiAmJiBjb2luLm5ldHdvcmsudXR4b2xpYk5hbWUgPT09IG5ldHdvcmtOYW1lID8gW2NvaW4ubmFtZV0gOiBbXVxuICApO1xuICBzd2l0Y2ggKG1hdGNoZXMubGVuZ3RoKSB7XG4gICAgY2FzZSAwOlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBubyBjb2luIGZvciBuZXR3b3JrICR7bmV0d29ya05hbWV9YCk7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIG1hdGNoZXNbMF07XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgbW9yZSB0aGFuIG9uZSBjb2luIGZvciAke25ldHdvcmtOYW1lfTogJHttYXRjaGVzfWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEFwaShodHRwQ2xpZW50OiBIdHRwQ2xpZW50LCBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmspOiBibG9ja2FwaXMuVXR4b0FwaSB7XG4gIGNvbnN0IGNvaW5OYW1lID0gZ2V0Q29pbk5hbWUobmV0d29yayk7XG4gIHN3aXRjaCAoY29pbk5hbWUpIHtcbiAgICBjYXNlICdidGMnOlxuICAgIGNhc2UgJ3RidGMnOlxuICAgICAgcmV0dXJuIGJsb2NrYXBpcy5CbG9ja3N0cmVhbUFwaS5mb3JDb2luKGNvaW5OYW1lLCB7IGh0dHBDbGllbnQgfSk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBibG9ja2FwaXMuQmxvY2tjaGFpckFwaS5mb3JDb2luKGNvaW5OYW1lLCB7IGh0dHBDbGllbnQgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoVHJhbnNhY3Rpb25IZXgoXG4gIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXG4gIGxvY2F0aW9uOiB7XG4gICAgdHhpZD86IHN0cmluZztcbiAgICBibG9ja0hlaWdodD86IG51bWJlcjtcbiAgICB0eEluZGV4PzogbnVtYmVyO1xuICB9LFxuICBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmtcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGxvY2F0aW9uID0gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGxvY2F0aW9uKS5maWx0ZXIoKFtrLCB2XSkgPT4gdiAhPT0gdW5kZWZpbmVkKSk7XG5cbiAgaWYgKGxvY2F0aW9uLmJsb2NrSGVpZ2h0ICE9PSB1bmRlZmluZWQgJiYgbG9jYXRpb24udHhJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgYXBpID0gZ2V0QXBpKGh0dHBDbGllbnQsIG5ldHdvcmspO1xuICAgIGlmIChhcGkgaW5zdGFuY2VvZiBibG9ja2FwaXMuQmxvY2tzdHJlYW1BcGkpIHtcbiAgICAgIGNvbnN0IHR4aWRzID0gYXdhaXQgZ2V0VHJhbnNhY3Rpb25JZHNBdEhlaWdodChhcGksIGxvY2F0aW9uLmJsb2NrSGVpZ2h0KTtcbiAgICAgIGNvbnN0IHR4aWQgPSB0eGlkc1tsb2NhdGlvbi50eEluZGV4XTtcbiAgICAgIGlmICghdHhpZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG5vIHR4IGF0IGhlaWdodCAke2xvY2F0aW9uLmJsb2NrSGVpZ2h0fSBwb3NpdGlvbiAke2xvY2F0aW9uLnR4SW5kZXh9YCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmV0Y2hUcmFuc2FjdGlvbkhleChodHRwQ2xpZW50LCB7IHR4aWQgfSwgbmV0d29yayk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgY2Fubm90IHVzZSBhcGkgJHthcGkuY29uc3RydWN0b3IubmFtZX0gdG8gZmV0Y2ggdHggYnkgaGVpZ2h0YCk7XG4gIH1cblxuICBpZiAobG9jYXRpb24udHhpZCkge1xuICAgIGlmIChPYmplY3Qua2V5cyhsb2NhdGlvbikubGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBjYW5ub3Qgc3BlY2lmeSBib3RoIHR4aWQgYW5kICR7T2JqZWN0LmtleXMobG9jYXRpb24pfWApO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgZ2V0QXBpKGh0dHBDbGllbnQsIG5ldHdvcmspLmdldFRyYW5zYWN0aW9uSGV4KGxvY2F0aW9uLnR4aWQpO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGxvY2F0aW9uOiAke0pTT04uc3RyaW5naWZ5KGxvY2F0aW9uKX1gKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoVHJhbnNhY3Rpb25TdGF0dXMoXG4gIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXG4gIHR4aWQ6IHN0cmluZyxcbiAgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrXG4pOiBQcm9taXNlPGJsb2NrYXBpcy5UcmFuc2FjdGlvblN0YXR1cz4ge1xuICByZXR1cm4gYXdhaXQgZ2V0QXBpKGh0dHBDbGllbnQsIG5ldHdvcmspLmdldFRyYW5zYWN0aW9uU3RhdHVzKHR4aWQpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hQcmV2T3V0cHV0cyhodHRwQ2xpZW50OiBIdHRwQ2xpZW50LCB0eDogUGFyc2VyVHgpOiBQcm9taXNlPHV0eG9saWIuVHhPdXRwdXQ8YmlnaW50PltdPiB7XG4gIHJldHVybiAoYXdhaXQgYmxvY2thcGlzLmZldGNoSW5wdXRzKGdldFR4T3V0UG9pbnRzKHR4KSwgZ2V0QXBpKGh0dHBDbGllbnQsIHR4Lm5ldHdvcmspLCB0eC5uZXR3b3JrKSkubWFwKCh2KSA9PiAoe1xuICAgIC4uLnYsXG4gICAgdmFsdWU6IEJpZ0ludCh2LnZhbHVlKSxcbiAgfSkpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hQcmV2T3V0cHV0U3BlbmRzKFxuICBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxuICB0eDogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248YmlnaW50PiB8IHV0eG9saWIuYml0Z28uVXR4b1BzYnRcbik6IFByb21pc2U8YmxvY2thcGlzLk91dHB1dFNwZW5kW10+IHtcbiAgcmV0dXJuIGF3YWl0IGJsb2NrYXBpcy5mZXRjaFRyYW5zYWN0aW9uU3BlbmRzKGdldFR4T3V0UG9pbnRzKHR4KSwgZ2V0QXBpKGh0dHBDbGllbnQsIHR4Lm5ldHdvcmspKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoT3V0cHV0U3BlbmRzKFxuICBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxuICB0eDogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248YmlnaW50PlxuKTogUHJvbWlzZTxibG9ja2FwaXMuT3V0cHV0U3BlbmRbXT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBnZXRBcGkoaHR0cENsaWVudCwgdHgubmV0d29yaykuZ2V0VHJhbnNhY3Rpb25TcGVuZHModHguZ2V0SWQoKSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zb2xlLmVycm9yKGBlcnJvciBmZXRjaGluZyBzcGVuZHMgZm9yIHR4ICR7dHguZ2V0SWQoKX06ICR7ZX1gKTtcbiAgICByZXR1cm4gW107XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldENsaWVudCh7IGNhY2hlIH06IHsgY2FjaGU6IGJvb2xlYW4gfSk6IFByb21pc2U8SHR0cENsaWVudD4ge1xuICBpZiAoY2FjaGUpIHtcbiAgICBjb25zdCBta2RpciA9IHByb21pc2lmeShmcy5ta2Rpcik7XG4gICAgY29uc3QgZGlyID0gYCR7cHJvY2Vzcy5lbnYuSE9NRX0vLmNhY2hlL3V0eG8tYmluL2A7XG4gICAgYXdhaXQgbWtkaXIoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICByZXR1cm4gbmV3IENhY2hpbmdIdHRwQ2xpZW50KGRpcik7XG4gIH1cbiAgcmV0dXJuIG5ldyBCYXNlSHR0cENsaWVudCgpO1xufVxuIl19
|
package/dist/src/format.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAY,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAY,MAAM,OAAO,CAAC;AAGxC,OAAO,EAAE,UAAU,EAAmB,MAAM,UAAU,CAAC;AAIvD,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,UAAU,CACxB,CAAC,EAAE,UAAU,EACb,EAAE,IAAkB,EAAE,KAAsB,EAAE,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CAAO,GACtF,MAAM,CAgDR"}
|
package/dist/src/format.js
CHANGED
|
@@ -9,9 +9,14 @@ function formatSat(v) {
|
|
|
9
9
|
}
|
|
10
10
|
exports.formatSat = formatSat;
|
|
11
11
|
function formatTree(n, { hide = hideDefault, chalk = new chalk_1.Instance() } = {}) {
|
|
12
|
-
function getLabel(label, v) {
|
|
12
|
+
function getLabel(label, v, { showUndefined } = { showUndefined: false }) {
|
|
13
13
|
const arr = [chalk.bold(label)];
|
|
14
|
-
if (v
|
|
14
|
+
if (v === undefined) {
|
|
15
|
+
if (showUndefined) {
|
|
16
|
+
arr.push(chalk.dim('undefined'));
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
15
20
|
arr.push(String(v));
|
|
16
21
|
}
|
|
17
22
|
return arr.join(': ');
|
|
@@ -30,18 +35,22 @@ function formatTree(n, { hide = hideDefault, chalk = new chalk_1.Instance() } =
|
|
|
30
35
|
return String(v);
|
|
31
36
|
}
|
|
32
37
|
if (Buffer.isBuffer(v)) {
|
|
33
|
-
return v.
|
|
38
|
+
return `${v.toString('hex')} ${chalk.dim(`(${v.length} bytes)`)}`;
|
|
39
|
+
}
|
|
40
|
+
if (v instanceof Uint8Array) {
|
|
41
|
+
return getLabelFromValue(Buffer.from(v));
|
|
34
42
|
}
|
|
35
43
|
}
|
|
36
44
|
throw new Error(`could not get label from value ${typeof v}`);
|
|
37
45
|
}
|
|
38
46
|
function toArchy(n) {
|
|
47
|
+
var _a;
|
|
39
48
|
return {
|
|
40
|
-
label: getLabel(n.label, getLabelFromValue(n.value)),
|
|
49
|
+
label: getLabel(n.label, getLabelFromValue(n.value), { showUndefined: !Boolean((_a = n.nodes) === null || _a === void 0 ? void 0 : _a.length) }),
|
|
41
50
|
nodes: n.nodes ? n.nodes.flatMap((e) => (hide.includes(e.label) ? [] : [toArchy(e)])) : undefined,
|
|
42
51
|
};
|
|
43
52
|
}
|
|
44
53
|
return archy(toArchy(n));
|
|
45
54
|
}
|
|
46
55
|
exports.formatTree = formatTree;
|
|
47
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Zvcm1hdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpQ0FBd0M7QUFDeEMsK0JBQStCO0FBSS9CLE1BQU0sV0FBVyxHQUFHLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBRWhGLFNBQWdCLFNBQVMsQ0FBQyxDQUFrQjtJQUMxQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QyxDQUFDO0FBRkQsOEJBRUM7QUFFRCxTQUFnQixVQUFVLENBQ3hCLENBQWEsRUFDYixFQUFFLElBQUksR0FBRyxXQUFXLEVBQUUsS0FBSyxHQUFHLElBQUksZ0JBQVEsRUFBRSxLQUF5QyxFQUFFO0lBRXZGLFNBQVMsUUFBUSxDQUNmLEtBQXNCLEVBQ3RCLENBQVcsRUFDWCxFQUFFLGFBQWEsS0FBaUMsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFO1FBRXhFLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxLQUFLLFNBQVMsRUFBRTtZQUNuQixJQUFJLGFBQWEsRUFBRTtnQkFDakIsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7YUFDbEM7U0FDRjthQUFNO1lBQ0wsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNyQjtRQUNELE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQsU0FBUyxpQkFBaUIsQ0FBQyxDQUFrQjtRQUMzQyxRQUFRLE9BQU8sQ0FBQyxFQUFFO1lBQ2hCLEtBQUssV0FBVztnQkFDZCxPQUFPLFNBQVMsQ0FBQztZQUNuQixLQUFLLFNBQVMsQ0FBQztZQUNmLEtBQUssUUFBUSxDQUFDO1lBQ2QsS0FBSyxRQUFRLENBQUM7WUFDZCxLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkIsS0FBSyxRQUFRO2dCQUNYLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTtvQkFDZCxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDbEI7Z0JBQ0QsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUN0QixPQUFPLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sU0FBUyxDQUFDLEVBQUUsQ0FBQztpQkFDbkU7Z0JBQ0QsSUFBSSxDQUFDLFlBQVksVUFBVSxFQUFFO29CQUMzQixPQUFPLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDMUM7U0FDSjtRQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsU0FBUyxPQUFPLENBQUMsQ0FBYTs7UUFDNUIsT0FBTztZQUNMLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxhQUFhLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBQSxDQUFDLENBQUMsS0FBSywwQ0FBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2xHLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztTQUNsRyxDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLENBQUM7QUFuREQsZ0NBbURDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbGssIEluc3RhbmNlIH0gZnJvbSAnY2hhbGsnO1xuaW1wb3J0ICogYXMgYXJjaHkgZnJvbSAnYXJjaHknO1xuXG5pbXBvcnQgeyBQYXJzZXJOb2RlLCBQYXJzZXJOb2RlVmFsdWUgfSBmcm9tICcuL1BhcnNlcic7XG5cbmNvbnN0IGhpZGVEZWZhdWx0ID0gWydwdWJrZXlzJywgJ3NlcXVlbmNlJywgJ2xvY2t0aW1lJywgJ3NjcmlwdFNpZycsICd3aXRuZXNzJ107XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRTYXQodjogbnVtYmVyIHwgYmlnaW50KTogc3RyaW5nIHtcbiAgcmV0dXJuIChOdW1iZXIodikgLyAxZTgpLnRvRml4ZWQoOCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRUcmVlKFxuICBuOiBQYXJzZXJOb2RlLFxuICB7IGhpZGUgPSBoaWRlRGVmYXVsdCwgY2hhbGsgPSBuZXcgSW5zdGFuY2UoKSB9OiB7IGhpZGU/OiBzdHJpbmdbXTsgY2hhbGs/OiBDaGFsayB9ID0ge31cbik6IHN0cmluZyB7XG4gIGZ1bmN0aW9uIGdldExhYmVsKFxuICAgIGxhYmVsOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgdj86IHVua25vd24sXG4gICAgeyBzaG93VW5kZWZpbmVkIH06IHsgc2hvd1VuZGVmaW5lZDogYm9vbGVhbiB9ID0geyBzaG93VW5kZWZpbmVkOiBmYWxzZSB9XG4gICk6IHN0cmluZyB7XG4gICAgY29uc3QgYXJyID0gW2NoYWxrLmJvbGQobGFiZWwpXTtcbiAgICBpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoc2hvd1VuZGVmaW5lZCkge1xuICAgICAgICBhcnIucHVzaChjaGFsay5kaW0oJ3VuZGVmaW5lZCcpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYXJyLnB1c2goU3RyaW5nKHYpKTtcbiAgICB9XG4gICAgcmV0dXJuIGFyci5qb2luKCc6ICcpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0TGFiZWxGcm9tVmFsdWUodjogUGFyc2VyTm9kZVZhbHVlKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBzd2l0Y2ggKHR5cGVvZiB2KSB7XG4gICAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIGNhc2UgJ2JpZ2ludCc6XG4gICAgICAgIHJldHVybiBTdHJpbmcodik7XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBpZiAodiA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBTdHJpbmcodik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2KSkge1xuICAgICAgICAgIHJldHVybiBgJHt2LnRvU3RyaW5nKCdoZXgnKX0gJHtjaGFsay5kaW0oYCgke3YubGVuZ3RofSBieXRlcylgKX1gO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2IGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgICAgICAgIHJldHVybiBnZXRMYWJlbEZyb21WYWx1ZShCdWZmZXIuZnJvbSh2KSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBjb3VsZCBub3QgZ2V0IGxhYmVsIGZyb20gdmFsdWUgJHt0eXBlb2Ygdn1gKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvQXJjaHkobjogUGFyc2VyTm9kZSk6IGFyY2h5LkRhdGEge1xuICAgIHJldHVybiB7XG4gICAgICBsYWJlbDogZ2V0TGFiZWwobi5sYWJlbCwgZ2V0TGFiZWxGcm9tVmFsdWUobi52YWx1ZSksIHsgc2hvd1VuZGVmaW5lZDogIUJvb2xlYW4obi5ub2Rlcz8ubGVuZ3RoKSB9KSxcbiAgICAgIG5vZGVzOiBuLm5vZGVzID8gbi5ub2Rlcy5mbGF0TWFwKChlKSA9PiAoaGlkZS5pbmNsdWRlcyhlLmxhYmVsKSA/IFtdIDogW3RvQXJjaHkoZSldKSkgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBhcmNoeSh0b0FyY2h5KG4pKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import * as utxolib from '@bitgo-beta/utxo-lib';
|
|
2
|
+
import { KeyOptions } from './args';
|
|
3
|
+
type AddressProperties = {
|
|
4
|
+
chain: utxolib.bitgo.ChainCode;
|
|
5
|
+
index: number;
|
|
6
|
+
type: utxolib.bitgo.outputScripts.ScriptType;
|
|
7
|
+
userPath: string;
|
|
8
|
+
backupPath: string;
|
|
9
|
+
bitgoPath: string;
|
|
10
|
+
userKey: string;
|
|
11
|
+
backupKey: string;
|
|
12
|
+
bitgoKey: string;
|
|
13
|
+
redeemScript?: string;
|
|
14
|
+
witnessScript?: string;
|
|
15
|
+
scriptPubKey: string;
|
|
16
|
+
address: string;
|
|
17
|
+
};
|
|
18
|
+
export declare function getAddressPlaceholderDescription(): string;
|
|
19
|
+
export declare function formatAddressTree(props: AddressProperties): string;
|
|
20
|
+
export declare function formatAddressWithFormatString(props: AddressProperties, format: string): string;
|
|
21
|
+
export declare function getRange(start: number, end: number): number[];
|
|
22
|
+
export declare function parseIndexRange(ranges: string[]): number[];
|
|
23
|
+
export declare function generateAddress(argv: KeyOptions & {
|
|
24
|
+
network?: utxolib.Network;
|
|
25
|
+
chain?: number[];
|
|
26
|
+
format: string;
|
|
27
|
+
index: number[];
|
|
28
|
+
}): Generator<AddressProperties>;
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=generateAddress.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateAddress.d.ts","sourceRoot":"","sources":["../../src/generateAddress.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAKhD,OAAO,EAAE,UAAU,EAAqB,MAAM,QAAQ,CAAC;AASvD,KAAK,iBAAiB,GAAG;IACvB,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC;IAC7C,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAmBF,wBAAgB,gCAAgC,IAAI,MAAM,CAIzD;AA6BD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAGlE;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAU9F;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAE7D;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAQ1D;AAED,wBAAiB,eAAe,CAC9B,IAAI,EAAE,UAAU,GAAG;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,GACA,SAAS,CAAC,iBAAiB,CAAC,CAU9B"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateAddress = exports.parseIndexRange = exports.getRange = exports.formatAddressWithFormatString = exports.formatAddressTree = exports.getAddressPlaceholderDescription = void 0;
|
|
4
|
+
const assert = require("assert");
|
|
5
|
+
const utxolib = require("@bitgo-beta/utxo-lib");
|
|
6
|
+
const Parser_1 = require("./Parser");
|
|
7
|
+
const parseUnknown_1 = require("./parseUnknown");
|
|
8
|
+
const format_1 = require("./format");
|
|
9
|
+
const args_1 = require("./args");
|
|
10
|
+
function getDefaultChainCodes() {
|
|
11
|
+
return utxolib.bitgo.chainCodes.filter(
|
|
12
|
+
// these are rare and show an annoying warning in stderr
|
|
13
|
+
(c) => utxolib.bitgo.scriptTypeForChain(c) !== 'p2tr' && utxolib.bitgo.scriptTypeForChain(c) !== 'p2trMusig2');
|
|
14
|
+
}
|
|
15
|
+
const placeholders = {
|
|
16
|
+
'%c': 'chain',
|
|
17
|
+
'%i': 'index',
|
|
18
|
+
'%p': 'userPath',
|
|
19
|
+
'%t': 'type',
|
|
20
|
+
'%p0': 'userPath',
|
|
21
|
+
'%p1': 'backupPath',
|
|
22
|
+
'%p2': 'bitgoPath',
|
|
23
|
+
'%k0': 'userKey',
|
|
24
|
+
'%k1': 'backupKey',
|
|
25
|
+
'%k2': 'bitgoKey',
|
|
26
|
+
'%s': 'scriptPubKey',
|
|
27
|
+
'%r': 'redeemScript',
|
|
28
|
+
'%w': 'witnessScript',
|
|
29
|
+
'%a': 'address',
|
|
30
|
+
};
|
|
31
|
+
function getAddressPlaceholderDescription() {
|
|
32
|
+
return Object.entries(placeholders)
|
|
33
|
+
.map(([placeholder, prop]) => `${placeholder} -> ${prop}`)
|
|
34
|
+
.join('\n');
|
|
35
|
+
}
|
|
36
|
+
exports.getAddressPlaceholderDescription = getAddressPlaceholderDescription;
|
|
37
|
+
function getAddressProperties(keys, chain, index, network) {
|
|
38
|
+
var _a, _b;
|
|
39
|
+
const [userPath, backupPath, bitgoPath] = keys.triple.map((k) => keys.getDerivationPath(k, chain, index));
|
|
40
|
+
const scripts = utxolib.bitgo.getWalletOutputScripts(keys, chain, index);
|
|
41
|
+
const [userKey, backupKey, bitgoKey] = keys.triple.map((k) => k.derivePath(userPath).publicKey.toString('hex'));
|
|
42
|
+
const address = utxolib.address.fromOutputScript(scripts.scriptPubKey, network);
|
|
43
|
+
return {
|
|
44
|
+
chain,
|
|
45
|
+
index,
|
|
46
|
+
type: utxolib.bitgo.scriptTypeForChain(chain),
|
|
47
|
+
userPath,
|
|
48
|
+
backupPath,
|
|
49
|
+
bitgoPath,
|
|
50
|
+
userKey,
|
|
51
|
+
backupKey,
|
|
52
|
+
bitgoKey,
|
|
53
|
+
scriptPubKey: scripts.scriptPubKey.toString('hex'),
|
|
54
|
+
redeemScript: (_a = scripts.redeemScript) === null || _a === void 0 ? void 0 : _a.toString('hex'),
|
|
55
|
+
witnessScript: (_b = scripts.witnessScript) === null || _b === void 0 ? void 0 : _b.toString('hex'),
|
|
56
|
+
address,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
function formatAddressTree(props) {
|
|
60
|
+
const parser = new Parser_1.Parser();
|
|
61
|
+
return (0, format_1.formatTree)((0, parseUnknown_1.parseUnknown)(parser, 'address', props));
|
|
62
|
+
}
|
|
63
|
+
exports.formatAddressTree = formatAddressTree;
|
|
64
|
+
function formatAddressWithFormatString(props, format) {
|
|
65
|
+
// replace all patterns with a % prefix from format string with the corresponding property
|
|
66
|
+
// e.g. %p0 -> userPath, %k1 -> backupKey, etc.
|
|
67
|
+
return format.replace(/%[a-z0-9]+/gi, (match) => {
|
|
68
|
+
if (match in placeholders) {
|
|
69
|
+
const prop = placeholders[match];
|
|
70
|
+
return String(props[prop]);
|
|
71
|
+
}
|
|
72
|
+
return match;
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
exports.formatAddressWithFormatString = formatAddressWithFormatString;
|
|
76
|
+
function getRange(start, end) {
|
|
77
|
+
return Array.from({ length: end - start + 1 }, (_, i) => start + i);
|
|
78
|
+
}
|
|
79
|
+
exports.getRange = getRange;
|
|
80
|
+
function parseIndexRange(ranges) {
|
|
81
|
+
return ranges.flatMap((range) => {
|
|
82
|
+
const [start, end] = range.split('-');
|
|
83
|
+
if (end) {
|
|
84
|
+
return getRange(Number(start), Number(end));
|
|
85
|
+
}
|
|
86
|
+
return [Number(start)];
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
exports.parseIndexRange = parseIndexRange;
|
|
90
|
+
function* generateAddress(argv) {
|
|
91
|
+
var _a, _b;
|
|
92
|
+
const rootXpubs = (0, args_1.getRootWalletKeys)(argv);
|
|
93
|
+
const chains = (_a = argv.chain) !== null && _a !== void 0 ? _a : getDefaultChainCodes();
|
|
94
|
+
for (const i of argv.index) {
|
|
95
|
+
for (const chain of chains) {
|
|
96
|
+
assert(utxolib.bitgo.isChainCode(chain));
|
|
97
|
+
// yield formatAddress(rootXpubs, chain, i, argv.network ?? utxolib.networks.bitcoin, argv.format);
|
|
98
|
+
yield getAddressProperties(rootXpubs, chain, i, (_b = argv.network) !== null && _b !== void 0 ? _b : utxolib.networks.bitcoin);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
exports.generateAddress = generateAddress;
|
|
103
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVBZGRyZXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2dlbmVyYXRlQWRkcmVzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpQ0FBaUM7QUFFakMsZ0RBQWdEO0FBRWhELHFDQUFrQztBQUNsQyxpREFBOEM7QUFDOUMscUNBQXNDO0FBQ3RDLGlDQUF1RDtBQUV2RCxTQUFTLG9CQUFvQjtJQUMzQixPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU07SUFDcEMsd0RBQXdEO0lBQ3hELENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxLQUFLLFlBQVksQ0FDOUcsQ0FBQztBQUNKLENBQUM7QUFrQkQsTUFBTSxZQUFZLEdBQUc7SUFDbkIsSUFBSSxFQUFFLE9BQU87SUFDYixJQUFJLEVBQUUsT0FBTztJQUNiLElBQUksRUFBRSxVQUFVO0lBQ2hCLElBQUksRUFBRSxNQUFNO0lBQ1osS0FBSyxFQUFFLFVBQVU7SUFDakIsS0FBSyxFQUFFLFlBQVk7SUFDbkIsS0FBSyxFQUFFLFdBQVc7SUFDbEIsS0FBSyxFQUFFLFNBQVM7SUFDaEIsS0FBSyxFQUFFLFdBQVc7SUFDbEIsS0FBSyxFQUFFLFVBQVU7SUFDakIsSUFBSSxFQUFFLGNBQWM7SUFDcEIsSUFBSSxFQUFFLGNBQWM7SUFDcEIsSUFBSSxFQUFFLGVBQWU7SUFDckIsSUFBSSxFQUFFLFNBQVM7Q0FDUCxDQUFDO0FBRVgsU0FBZ0IsZ0NBQWdDO0lBQzlDLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7U0FDaEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsV0FBVyxPQUFPLElB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QUFDLEtBQUssRUFBRSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLElBQUksR0FBRyxFQUFFO1lBQ1AsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQzdDO1FBQ0QsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQVJELDBDQVFDO0FBRUQsUUFBZSxDQUFDLENBQUMsZUFBZSxDQUM5QixJQUtDOztJQUVELE1BQU0sU0FBUyxHQUFHLElBQUEsd0JBQWlCLEVBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUMsTUFBTSxNQUFNLEdBQUcsTUFBQSxJQUFJLENBQUMsS0FBSyxtQ0FBSSxvQkFBb0IsRUFBRSxDQUFDO0lBQ3BELEtBQUssTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtRQUMxQixLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRTtZQUMxQixNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUN6QyxtR0FBbUc7WUFDbkcsTUFBTSxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFBLElBQUksQ0FBQyxPQUFPLG1DQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDM0Y7S0FDRjtBQUNILENBQUM7QUFqQkQsMENBaUJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuXG5pbXBvcnQgeyBQYXJzZXIgfSBmcm9tICcuL1BhcnNlcic7XG5pbXBvcnQgeyBwYXJzZVVua25vd24gfSBmcm9tICcuL3BhcnNlVW5rbm93bic7XG5pbXBvcnQgeyBmb3JtYXRUcmVlIH0gZnJvbSAnLi9mb3JtYXQnO1xuaW1wb3J0IHsgS2V5T3B0aW9ucywgZ2V0Um9vdFdhbGxldEtleXMgfSBmcm9tICcuL2FyZ3MnO1xuXG5mdW5jdGlvbiBnZXREZWZhdWx0Q2hhaW5Db2RlcygpOiBudW1iZXJbXSB7XG4gIHJldHVybiB1dHhvbGliLmJpdGdvLmNoYWluQ29kZXMuZmlsdGVyKFxuICAgIC8vIHRoZXNlIGFyZSByYXJlIGFuZCBzaG93IGFuIGFubm95aW5nIHdhcm5pbmcgaW4gc3RkZXJyXG4gICAgKGMpID0+IHV0eG9saWIuYml0Z28uc2NyaXB0VHlwZUZvckNoYWluKGMpICE9PSAncDJ0cicgJiYgdXR4b2xpYi5iaXRnby5zY3JpcHRUeXBlRm9yQ2hhaW4oYykgIT09ICdwMnRyTXVzaWcyJ1xuICApO1xufVxuXG50eXBlIEFkZHJlc3NQcm9wZXJ0aWVzID0ge1xuICBjaGFpbjogdXR4b2xpYi5iaXRnby5DaGFpbkNvZGU7XG4gIGluZGV4OiBudW1iZXI7XG4gIHR5cGU6IHV0eG9saWIuYml0Z28ub3V0cHV0U2NyaXB0cy5TY3JpcHRUeXBlO1xuICB1c2VyUGF0aDogc3RyaW5nO1xuICBiYWNrdXBQYXRoOiBzdHJpbmc7XG4gIGJpdGdvUGF0aDogc3RyaW5nO1xuICB1c2VyS2V5OiBzdHJpbmc7XG4gIGJhY2t1cEtleTogc3RyaW5nO1xuICBiaXRnb0tleTogc3RyaW5nO1xuICByZWRlZW1TY3JpcHQ/OiBzdHJpbmc7XG4gIHdpdG5lc3NTY3JpcHQ/OiBzdHJpbmc7XG4gIHNjcmlwdFB1YktleTogc3RyaW5nO1xuICBhZGRyZXNzOiBzdHJpbmc7XG59O1xuXG5jb25zdCBwbGFjZWhvbGRlcnMgPSB7XG4gICclYyc6ICdjaGFpbicsXG4gICclaSc6ICdpbmRleCcsXG4gICclcCc6ICd1c2VyUGF0aCcsXG4gICcldCc6ICd0eXBlJyxcbiAgJyVwMCc6ICd1c2VyUGF0aCcsXG4gICclcDEnOiAnYmFja3VwUGF0aCcsXG4gICclcDInOiAnYml0Z29QYXRoJyxcbiAgJyVrMCc6ICd1c2VyS2V5JyxcbiAgJyVrMSc6ICdiYWNrdXBLZXknLFxuICAnJWsyJzogJ2JpdGdvS2V5JyxcbiAgJyVzJzogJ3NjcmlwdFB1YktleScsXG4gICclcic6ICdyZWRlZW1TY3JpcHQnLFxuICAnJXcnOiAnd2l0bmVzc1NjcmlwdCcsXG4gICclYSc6ICdhZGRyZXNzJyxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBZGRyZXNzUGxhY2Vob2xkZXJEZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocGxhY2Vob2xkZXJzKVxuICAgIC5tYXAoKFtwbGFjZWhvbGRlciwgcHJvcF0pID0+IGAke3BsYWNlaG9sZGVyfSAtPiAke3Byb3B9YClcbiAgICAuam9pbignXFxuJyk7XG59XG5cbmZ1bmN0aW9uIGdldEFkZHJlc3NQcm9wZXJ0aWVzKFxuICBrZXlzOiB1dHhvbGliLmJpdGdvLlJvb3RXYWxsZXRLZXlzLFxuICBjaGFpbjogdXR4b2xpYi5iaXRnby5DaGFpbkNvZGUsXG4gIGluZGV4OiBudW1iZXIsXG4gIG5ldHdvcms6IHV0eG9saWIuTmV0d29ya1xuKTogQWRkcmVzc1Byb3BlcnRpZXMge1xuICBjb25zdCBbdXNlclBhdGgsIGJhY2t1cFBhdGgsIGJpdGdvUGF0aF0gPSBrZXlzLnRyaXBsZS5tYXAoKGspID0+IGtleXMuZ2V0RGVyaXZhdGlvblBhdGgoaywgY2hhaW4sIGluZGV4KSk7XG4gIGNvbnN0IHNjcmlwdHMgPSB1dHhvbGliLmJpdGdvLmdldFdhbGxldE91dHB1dFNjcmlwdHMoa2V5cywgY2hhaW4sIGluZGV4KTtcbiAgY29uc3QgW3VzZXJLZXksIGJhY2t1cEtleSwgYml0Z29LZXldID0ga2V5cy50cmlwbGUubWFwKChrKSA9PiBrLmRlcml2ZVBhdGgodXNlclBhdGgpLnB1YmxpY0tleS50b1N0cmluZygnaGV4JykpO1xuICBjb25zdCBhZGRyZXNzID0gdXR4b2xpYi5hZGRyZXNzLmZyb21PdXRwdXRTY3JpcHQoc2NyaXB0cy5zY3JpcHRQdWJLZXksIG5ldHdvcmspO1xuICByZXR1cm4ge1xuICAgIGNoYWluLFxuICAgIGluZGV4LFxuICAgIHR5cGU6IHV0eG9saWIuYml0Z28uc2NyaXB0VHlwZUZvckNoYWluKGNoYWluKSxcbiAgICB1c2VyUGF0aCxcbiAgICBiYWNrdXBQYXRoLFxuICAgIGJpdGdvUGF0aCxcbiAgICB1c2VyS2V5LFxuICAgIGJhY2t1cEtleSxcbiAgICBiaXRnb0tleSxcbiAgICBzY3JpcHRQdWJLZXk6IHNjcmlwdHMuc2NyaXB0UHViS2V5LnRvU3RyaW5nKCdoZXgnKSxcbiAgICByZWRlZW1TY3JpcHQ6IHNjcmlwdHMucmVkZWVtU2NyaXB0Py50b1N0cmluZygnaGV4JyksXG4gICAgd2l0bmVzc1NjcmlwdDogc2NyaXB0cy53aXRuZXNzU2NyaXB0Py50b1N0cmluZygnaGV4JyksXG4gICAgYWRkcmVzcyxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEFkZHJlc3NUcmVlKHByb3BzOiBBZGRyZXNzUHJvcGVydGllcyk6IHN0cmluZyB7XG4gIGNvbnN0IHBhcnNlciA9IG5ldyBQYXJzZXIoKTtcbiAgcmV0dXJuIGZvcm1hdFRyZWUocGFyc2VVbmtub3duKHBhcnNlciwgJ2FkZHJlc3MnLCBwcm9wcykpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0QWRkcmVzc1dpdGhGb3JtYXRTdHJpbmcocHJvcHM6IEFkZHJlc3NQcm9wZXJ0aWVzLCBmb3JtYXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIHJlcGxhY2UgYWxsIHBhdHRlcm5zIHdpdGggYSAlIHByZWZpeCBmcm9tIGZvcm1hdCBzdHJpbmcgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBwcm9wZXJ0eVxuICAvLyBlLmcuICVwMCAtPiB1c2VyUGF0aCwgJWsxIC0+IGJhY2t1cEtleSwgZXRjLlxuICByZXR1cm4gZm9ybWF0LnJlcGxhY2UoLyVbYS16MC05XSsvZ2ksIChtYXRjaCkgPT4ge1xuICAgIGlmIChtYXRjaCBpbiBwbGFjZWhvbGRlcnMpIHtcbiAgICAgIGNvbnN0IHByb3AgPSBwbGFjZWhvbGRlcnNbbWF0Y2ggYXMga2V5b2YgdHlwZW9mIHBsYWNlaG9sZGVyc107XG4gICAgICByZXR1cm4gU3RyaW5nKHByb3BzW3Byb3BdKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJhbmdlKHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKTogbnVtYmVyW10ge1xuICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogZW5kIC0gc3RhcnQgKyAxIH0sIChfLCBpKSA9PiBzdGFydCArIGkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VJbmRleFJhbmdlKHJhbmdlczogc3RyaW5nW10pOiBudW1iZXJbXSB7XG4gIHJldHVybiByYW5nZXMuZmxhdE1hcCgocmFuZ2UpID0+IHtcbiAgICBjb25zdCBbc3RhcnQsIGVuZF0gPSByYW5nZS5zcGxpdCgnLScpO1xuICAgIGlmIChlbmQpIHtcbiAgICAgIHJldHVybiBnZXRSYW5nZShOdW1iZXIoc3RhcnQpLCBOdW1iZXIoZW5kKSk7XG4gICAgfVxuICAgIHJldHVybiBbTnVtYmVyKHN0YXJ0KV07XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24qIGdlbmVyYXRlQWRkcmVzcyhcbiAgYXJndjogS2V5T3B0aW9ucyAmIHtcbiAgICBuZXR3b3JrPzogdXR4b2xpYi5OZXR3b3JrO1xuICAgIGNoYWluPzogbnVtYmVyW107XG4gICAgZm9ybWF0OiBzdHJpbmc7XG4gICAgaW5kZXg6IG51bWJlcltdO1xuICB9XG4pOiBHZW5lcmF0b3I8QWRkcmVzc1Byb3BlcnRpZXM+IHtcbiAgY29uc3Qgcm9vdFhwdWJzID0gZ2V0Um9vdFdhbGxldEtleXMoYXJndik7XG4gIGNvbnN0IGNoYWlucyA9IGFyZ3YuY2hhaW4gPz8gZ2V0RGVmYXVsdENoYWluQ29kZXMoKTtcbiAgZm9yIChjb25zdCBpIG9mIGFyZ3YuaW5kZXgpIHtcbiAgICBmb3IgKGNvbnN0IGNoYWluIG9mIGNoYWlucykge1xuICAgICAgYXNzZXJ0KHV0eG9saWIuYml0Z28uaXNDaGFpbkNvZGUoY2hhaW4pKTtcbiAgICAgIC8vIHlpZWxkIGZvcm1hdEFkZHJlc3Mocm9vdFhwdWJzLCBjaGFpbiwgaSwgYXJndi5uZXR3b3JrID8/IHV0eG9saWIubmV0d29ya3MuYml0Y29pbiwgYXJndi5mb3JtYXQpO1xuICAgICAgeWllbGQgZ2V0QWRkcmVzc1Byb3BlcnRpZXMocm9vdFhwdWJzLCBjaGFpbiwgaSwgYXJndi5uZXR3b3JrID8/IHV0eG9saWIubmV0d29ya3MuYml0Y29pbik7XG4gICAgfVxuICB9XG59XG4iXX0=
|