@bitgo-beta/utxo-bin 2.8.3-beta.31 → 2.8.3-beta.310

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/README.md +63 -4
  2. package/dist/bin/index.js +10 -2
  3. package/dist/src/AddressParser.d.ts +1 -0
  4. package/dist/src/AddressParser.d.ts.map +1 -1
  5. package/dist/src/AddressParser.js +7 -1
  6. package/dist/src/InputParser.d.ts +44 -0
  7. package/dist/src/InputParser.d.ts.map +1 -0
  8. package/dist/src/InputParser.js +239 -0
  9. package/dist/src/OutputParser.d.ts +25 -0
  10. package/dist/src/OutputParser.d.ts.map +1 -0
  11. package/dist/src/OutputParser.js +65 -0
  12. package/dist/src/Parser.d.ts +7 -1
  13. package/dist/src/Parser.d.ts.map +1 -1
  14. package/dist/src/Parser.js +29 -2
  15. package/dist/src/ParserTx.d.ts +28 -0
  16. package/dist/src/ParserTx.d.ts.map +1 -0
  17. package/dist/src/ParserTx.js +94 -0
  18. package/dist/src/ScriptParser.d.ts +21 -0
  19. package/dist/src/ScriptParser.d.ts.map +1 -0
  20. package/dist/src/ScriptParser.js +77 -0
  21. package/dist/src/TxParser.d.ts +10 -6
  22. package/dist/src/TxParser.d.ts.map +1 -1
  23. package/dist/src/TxParser.js +25 -25
  24. package/dist/src/bip32.d.ts +5 -0
  25. package/dist/src/bip32.d.ts.map +1 -0
  26. package/dist/src/bip32.js +23 -0
  27. package/dist/src/commands.d.ts +51 -1
  28. package/dist/src/commands.d.ts.map +1 -1
  29. package/dist/src/commands.js +162 -23
  30. package/dist/src/fetch.d.ts +4 -3
  31. package/dist/src/fetch.d.ts.map +1 -1
  32. package/dist/src/fetch.js +15 -3
  33. package/dist/src/format.d.ts +1 -1
  34. package/dist/src/format.d.ts.map +1 -1
  35. package/dist/src/format.js +17 -7
  36. package/dist/src/generateAddress.d.ts +35 -0
  37. package/dist/src/generateAddress.d.ts.map +1 -0
  38. package/dist/src/generateAddress.js +108 -0
  39. package/dist/src/parseString.d.ts +5 -0
  40. package/dist/src/parseString.d.ts.map +1 -0
  41. package/dist/src/parseString.js +29 -0
  42. package/dist/src/parseUnknown.d.ts +5 -0
  43. package/dist/src/parseUnknown.d.ts.map +1 -0
  44. package/dist/src/parseUnknown.js +50 -0
  45. package/dist/test/bip32.d.ts +2 -0
  46. package/dist/test/bip32.d.ts.map +1 -0
  47. package/dist/test/bip32.js +21 -0
  48. package/dist/test/bip32.util.d.ts +6 -0
  49. package/dist/test/bip32.util.d.ts.map +1 -0
  50. package/dist/test/bip32.util.js +14 -0
  51. package/dist/test/fixtures.d.ts +24 -0
  52. package/dist/test/fixtures.d.ts.map +1 -0
  53. package/dist/test/fixtures.js +95 -0
  54. package/dist/test/generateAddress.d.ts +2 -0
  55. package/dist/test/generateAddress.d.ts.map +1 -0
  56. package/dist/test/generateAddress.js +29 -0
  57. package/dist/test/parseAddress.d.ts +6 -0
  58. package/dist/test/parseAddress.d.ts.map +1 -0
  59. package/dist/test/parseAddress.js +80 -0
  60. package/dist/test/parseScript.d.ts +2 -0
  61. package/dist/test/parseScript.d.ts.map +1 -0
  62. package/dist/test/parseScript.js +38 -0
  63. package/dist/test/parseTransaction.d.ts +2 -0
  64. package/dist/test/parseTransaction.d.ts.map +1 -0
  65. package/dist/test/parseTransaction.js +66 -0
  66. package/dist/test/stringToBuffer.d.ts +2 -0
  67. package/dist/test/stringToBuffer.d.ts.map +1 -0
  68. package/dist/test/stringToBuffer.js +16 -0
  69. package/dist/tsconfig.tsbuildinfo +1 -4689
  70. package/package.json +8 -7
  71. package/dist/src/InputOutputParser.d.ts +0 -35
  72. package/dist/src/InputOutputParser.d.ts.map +0 -1
  73. package/dist/src/InputOutputParser.js +0 -196
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bip32.d.ts","sourceRoot":"","sources":["../../src/bip32.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,UAAU,EAAE,MAAM,UAAU,CAAC;AAG9C,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,UAAU,CAc/E"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseXpub = void 0;
4
+ const utxolib = require("@bitgo-beta/utxo-lib");
5
+ const Parser_1 = require("./Parser");
6
+ const parseUnknown_1 = require("./parseUnknown");
7
+ function parseXpub(xpub, params) {
8
+ if (!xpub.startsWith('xpub')) {
9
+ throw new Error('expected xpub');
10
+ }
11
+ const parser = new Parser_1.Parser();
12
+ let xpubObj = utxolib.bip32.fromBase58(xpub);
13
+ if (params.derive) {
14
+ xpubObj = xpubObj.derivePath(params.derive);
15
+ }
16
+ const node = (0, parseUnknown_1.parseUnknown)(parser, 'xpub', xpubObj, {
17
+ omit: ['network', '__Q', '__D', '__DEPTH', '__INDEX', '__PARENT_FINGERPRINT'],
18
+ });
19
+ node.value = xpubObj.toBase58();
20
+ return node;
21
+ }
22
+ exports.parseXpub = parseXpub;
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlwMzIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYmlwMzIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsZ0RBQWdEO0FBQ2hELHFDQUE4QztBQUM5QyxpREFBOEM7QUFFOUMsU0FBZ0IsU0FBUyxDQUFDLElBQVksRUFBRSxNQUEyQjtJQUNqRSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0tBQ2xDO0lBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxlQUFNLEVBQUUsQ0FBQztJQUM1QixJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUU7UUFDakIsT0FBTyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQzdDO0lBQ0QsTUFBTSxJQUFJLEdBQUcsSUFBQSwyQkFBWSxFQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFO1FBQ2pELElBQUksRUFBRSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsc0JBQXNCLENBQUM7S0FDOUUsQ0FBQyxDQUFDO0lBQ0gsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDaEMsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBZEQsOEJBY0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7IFBhcnNlciwgUGFyc2VyTm9kZSB9IGZyb20gJy4vUGFyc2VyJztcbmltcG9ydCB7IHBhcnNlVW5rbm93biB9IGZyb20gJy4vcGFyc2VVbmtub3duJztcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlWHB1Yih4cHViOiBzdHJpbmcsIHBhcmFtczogeyBkZXJpdmU/OiBzdHJpbmcgfSk6IFBhcnNlck5vZGUge1xuICBpZiAoIXhwdWIuc3RhcnRzV2l0aCgneHB1YicpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCB4cHViJyk7XG4gIH1cbiAgY29uc3QgcGFyc2VyID0gbmV3IFBhcnNlcigpO1xuICBsZXQgeHB1Yk9iaiA9IHV0eG9saWIuYmlwMzIuZnJvbUJhc2U1OCh4cHViKTtcbiAgaWYgKHBhcmFtcy5kZXJpdmUpIHtcbiAgICB4cHViT2JqID0geHB1Yk9iai5kZXJpdmVQYXRoKHBhcmFtcy5kZXJpdmUpO1xuICB9XG4gIGNvbnN0IG5vZGUgPSBwYXJzZVVua25vd24ocGFyc2VyLCAneHB1YicsIHhwdWJPYmosIHtcbiAgICBvbWl0OiBbJ25ldHdvcmsnLCAnX19RJywgJ19fRCcsICdfX0RFUFRIJywgJ19fSU5ERVgnLCAnX19QQVJFTlRfRklOR0VSUFJJTlQnXSxcbiAgfSk7XG4gIG5vZGUudmFsdWUgPSB4cHViT2JqLnRvQmFzZTU4KCk7XG4gIHJldHVybiBub2RlO1xufVxuIl19
@@ -1,6 +1,7 @@
1
1
  import * as yargs from 'yargs';
2
2
  import { TxParser, TxParserArgs } from './TxParser';
3
3
  import { AddressParser } from './AddressParser';
4
+ import { ScriptParser } from './ScriptParser';
4
5
  declare type OutputFormat = 'tree' | 'json';
5
6
  declare type ArgsParseTransaction = {
6
7
  network: string;
@@ -8,6 +9,7 @@ declare type ArgsParseTransaction = {
8
9
  clipboard: boolean;
9
10
  path?: string;
10
11
  txid?: string;
12
+ data?: string;
11
13
  all: boolean;
12
14
  cache: boolean;
13
15
  format: OutputFormat;
@@ -15,7 +17,10 @@ declare type ArgsParseTransaction = {
15
17
  fetchStatus: boolean;
16
18
  fetchInputs: boolean;
17
19
  fetchSpends: boolean;
20
+ finalize: boolean;
18
21
  parseSignatureData: boolean;
22
+ parseAsUnknown: boolean;
23
+ parseError: 'throw' | 'continue';
19
24
  } & Omit<TxParserArgs, 'parseSignatureData'>;
20
25
  declare type ArgsParseAddress = {
21
26
  network?: string;
@@ -24,12 +29,33 @@ declare type ArgsParseAddress = {
24
29
  convert: boolean;
25
30
  address: string;
26
31
  };
32
+ declare type ArgsParseScript = {
33
+ network?: string;
34
+ format: OutputFormat;
35
+ all: boolean;
36
+ script: string;
37
+ };
38
+ export declare type ArgsGenerateAddress = {
39
+ network?: string;
40
+ userKey: string;
41
+ backupKey: string;
42
+ bitgoKey: string;
43
+ chain?: number[];
44
+ format: string;
45
+ index?: string[];
46
+ limit?: number;
47
+ };
48
+ declare type FormatStringArgs = {
49
+ format: OutputFormat;
50
+ all: boolean;
51
+ };
27
52
  export declare function getTxParser(argv: yargs.Arguments<ArgsParseTransaction>): TxParser;
28
53
  export declare function getAddressParser(argv: ArgsParseAddress): AddressParser;
54
+ export declare function getScriptParser(argv: ArgsParseScript): ScriptParser;
29
55
  export declare const cmdParseTx: {
30
56
  readonly command: "parseTx [path]";
31
57
  readonly aliases: readonly ["parse", "tx"];
32
- readonly describe: "display transaction components in human-readable form";
58
+ readonly describe: string;
33
59
  readonly builder: (b: yargs.Argv<unknown>) => yargs.Argv<ArgsParseTransaction>;
34
60
  readonly handler: (argv: yargs.Arguments<ArgsParseTransaction>) => Promise<void>;
35
61
  };
@@ -40,5 +66,29 @@ export declare const cmdParseAddress: {
40
66
  readonly builder: (b: yargs.Argv<unknown>) => yargs.Argv<ArgsParseAddress>;
41
67
  readonly handler: (argv: yargs.Arguments<ArgsParseAddress>) => void;
42
68
  };
69
+ export declare const cmdParseScript: {
70
+ command: string;
71
+ describe: string;
72
+ builder(b: yargs.Argv<unknown>): yargs.Argv<ArgsParseScript>;
73
+ handler(argv: yargs.Arguments<ArgsParseScript>): void;
74
+ };
75
+ export declare const cmdGenerateAddress: {
76
+ command: string;
77
+ describe: string;
78
+ builder(b: yargs.Argv<unknown>): yargs.Argv<ArgsGenerateAddress>;
79
+ handler(argv: yargs.Arguments<ArgsGenerateAddress>): void;
80
+ };
81
+ export declare const cmdParseXpub: {
82
+ command: string;
83
+ describe: string;
84
+ builder(b: yargs.Argv<unknown>): yargs.Argv<{
85
+ xpub: string;
86
+ derive?: string;
87
+ } & FormatStringArgs>;
88
+ handler(argv: yargs.Arguments<{
89
+ xpub: string;
90
+ derive?: string;
91
+ } & FormatStringArgs>): void;
92
+ };
43
93
  export {};
44
94
  //# sourceMappingURL=commands.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/commands.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAiB/B,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIhD,aAAK,YAAY,GAAG,MAAM,GAAG,MAAM,CAAC;AAEpC,aAAK,oBAAoB,GAAG;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,kBAAkB,EAAE,OAAO,CAAC;CAC7B,GAAG,IAAI,CAAC,YAAY,EAAE,oBAAoB,CAAC,CAAC;AAE7C,aAAK,gBAAgB,GAAG;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,OAAO,CAAC;IACb,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAyCF,wBAAgB,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,oBAAoB,CAAC,GAAG,QAAQ,CAYjF;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,GAAG,aAAa,CAEtE;AAED,eAAO,MAAM,UAAU;;;;0BAKV,MAAM,IAAI,CAAC,OAAO,CAAC,KAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC;6BAuB7C,MAAM,SAAS,CAAC,oBAAoB,CAAC,KAAG,QAAQ,IAAI,CAAC;CA+DjE,CAAC;AAEX,eAAO,MAAM,eAAe;;;;0BAIf,MAAM,IAAI,CAAC,OAAO,CAAC,KAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC;6BAS/C,MAAM,SAAS,CAAC,gBAAgB,CAAC,KAAG,IAAI;CAI9C,CAAC"}
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/commands.ts"],"names":[],"mappings":"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"}
@@ -1,20 +1,27 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.cmdParseAddress = exports.cmdParseTx = exports.getAddressParser = exports.getTxParser = void 0;
3
+ exports.cmdParseXpub = exports.cmdGenerateAddress = exports.cmdParseScript = exports.cmdParseAddress = exports.cmdParseTx = exports.getScriptParser = exports.getAddressParser = exports.getTxParser = void 0;
4
4
  const fs = require("fs");
5
5
  const process = require("process");
6
6
  const util_1 = require("util");
7
- const clipboardy = require("clipboardy");
7
+ const clipboardy_cjs_1 = require("clipboardy-cjs");
8
8
  const utxolib = require("@bitgo-beta/utxo-lib");
9
+ const Parser_1 = require("./Parser");
9
10
  const format_1 = require("./format");
10
11
  const fetch_1 = require("./fetch");
11
12
  const TxParser_1 = require("./TxParser");
12
13
  const AddressParser_1 = require("./AddressParser");
13
14
  const blockapis_1 = require("@bitgo-beta/blockapis");
14
15
  const readStdin_1 = require("./readStdin");
16
+ const parseUnknown_1 = require("./parseUnknown");
17
+ const ParserTx_1 = require("./ParserTx");
18
+ const ScriptParser_1 = require("./ScriptParser");
19
+ const parseString_1 = require("./parseString");
20
+ const generateAddress_1 = require("./generateAddress");
21
+ const bip32_1 = require("./bip32");
15
22
  async function getClient({ cache }) {
16
23
  if (cache) {
17
- const mkdir = util_1.promisify(fs.mkdir);
24
+ const mkdir = (0, util_1.promisify)(fs.mkdir);
18
25
  const dir = `${process.env.HOME}/.cache/utxo-bin/`;
19
26
  await mkdir(dir, { recursive: true });
20
27
  return new blockapis_1.CachingHttpClient(dir);
@@ -24,7 +31,7 @@ async function getClient({ cache }) {
24
31
  function getNetworkForName(name) {
25
32
  const network = utxolib.networks[name];
26
33
  if (!network) {
27
- throw new Error(`invalid network ${network}`);
34
+ throw new Error(`invalid network ${name}`);
28
35
  }
29
36
  return network;
30
37
  }
@@ -36,7 +43,7 @@ function formatString(parsed, argv) {
36
43
  case 'json':
37
44
  return JSON.stringify(parsed, null, 2);
38
45
  case 'tree':
39
- return format_1.formatTree(parsed, { hide: argv.all ? [] : undefined });
46
+ return (0, format_1.formatTree)(parsed, { hide: argv.all ? [] : undefined });
40
47
  }
41
48
  throw new Error(`invalid format ${argv.format}`);
42
49
  }
@@ -48,7 +55,7 @@ function resolveNetwork(args) {
48
55
  }
49
56
  function getTxParser(argv) {
50
57
  if (argv.all) {
51
- return new TxParser_1.TxParser(TxParser_1.TxParser.PARSE_ALL);
58
+ return new TxParser_1.TxParser({ ...argv, ...TxParser_1.TxParser.PARSE_ALL });
52
59
  }
53
60
  return new TxParser_1.TxParser({
54
61
  ...argv,
@@ -64,14 +71,22 @@ function getAddressParser(argv) {
64
71
  return new AddressParser_1.AddressParser(resolveNetwork(argv));
65
72
  }
66
73
  exports.getAddressParser = getAddressParser;
74
+ function getScriptParser(argv) {
75
+ return new ScriptParser_1.ScriptParser(resolveNetwork(argv));
76
+ }
77
+ exports.getScriptParser = getScriptParser;
67
78
  exports.cmdParseTx = {
68
79
  command: 'parseTx [path]',
69
80
  aliases: ['parse', 'tx'],
70
- describe: 'display transaction components in human-readable form',
81
+ describe: 'Display transaction components in human-readable form. ' +
82
+ 'Supported formats are Partially Signed Bitcoin Transaction (PSBT), ' +
83
+ 'bitcoinjs-lib encoding (Legacy) or fully signed transaction. ' +
84
+ 'Bytes must be encoded in hex or base64 format.',
71
85
  builder(b) {
72
86
  return b
73
87
  .option('path', { type: 'string', nargs: 1, default: '' })
74
88
  .option('stdin', { type: 'boolean', default: false })
89
+ .option('data', { type: 'string', description: 'transaction bytes (hex or base64)', alias: 'hex' })
75
90
  .option('clipboard', { type: 'boolean', default: false })
76
91
  .option('txid', { type: 'string' })
77
92
  .option('fetchAll', { type: 'boolean', default: false })
@@ -83,28 +98,45 @@ exports.cmdParseTx = {
83
98
  .option('parseScriptData', { alias: 'scriptdata', type: 'boolean', default: false })
84
99
  .option('parseSignatureData', { alias: 'sigdata', type: 'boolean', default: false })
85
100
  .option('parseOutputScript', { type: 'boolean', default: false })
101
+ .option('parseAsUnknown', {
102
+ type: 'boolean',
103
+ default: false,
104
+ description: 'show plain Javascript object without any post-processing',
105
+ })
86
106
  .option('maxOutputs', { type: 'number' })
87
107
  .option('vin', { type: 'number' })
88
108
  .array('vin')
109
+ .option('vout', { type: 'number' })
110
+ .array('vout')
111
+ .option('finalize', {
112
+ type: 'boolean',
113
+ default: false,
114
+ description: 'finalize PSBT and parse result instead of PSBT',
115
+ })
89
116
  .option('all', { type: 'boolean', default: false })
90
- .option('cache', { type: 'boolean', default: false, description: 'use local cache for http responses' })
91
- .option('format', { choices: ['tree', 'json'], default: 'tree' });
117
+ .option('cache', {
118
+ type: 'boolean',
119
+ default: false,
120
+ description: 'use local cache for http responses',
121
+ })
122
+ .option('format', { choices: ['tree', 'json'], default: 'tree' })
123
+ .option('parseError', { choices: ['continue', 'throw'], default: 'continue' });
92
124
  },
93
125
  async handler(argv) {
94
126
  const network = getNetwork(argv);
95
127
  let data;
96
128
  const httpClient = await getClient({ cache: argv.cache });
97
129
  if (argv.txid) {
98
- data = await fetch_1.fetchTransactionHex(httpClient, argv.txid, network);
130
+ data = await (0, fetch_1.fetchTransactionHex)(httpClient, argv.txid, network);
99
131
  }
100
132
  if (argv.stdin || argv.path === '-') {
101
133
  if (data) {
102
134
  throw new Error(`conflicting arguments`);
103
135
  }
104
136
  console.log('Reading from stdin. Please paste hex-encoded transaction data.');
105
- console.log('Press Ctrl-D to finish, or Ctrl-C to cancel.');
137
+ console.log('After inserting data, press Ctrl-D to finish. Press Ctrl-C to cancel.');
106
138
  if (process.stdin.isTTY) {
107
- data = await readStdin_1.readStdin();
139
+ data = await (0, readStdin_1.readStdin)();
108
140
  }
109
141
  else {
110
142
  data = await fs.promises.readFile('/dev/stdin', 'utf8');
@@ -114,7 +146,7 @@ exports.cmdParseTx = {
114
146
  if (data) {
115
147
  throw new Error(`conflicting arguments`);
116
148
  }
117
- data = await clipboardy.read();
149
+ data = await clipboardy_cjs_1.default.read();
118
150
  }
119
151
  if (argv.path) {
120
152
  if (data) {
@@ -122,14 +154,33 @@ exports.cmdParseTx = {
122
154
  }
123
155
  data = (await fs.promises.readFile(argv.path, 'utf8')).toString();
124
156
  }
157
+ if (argv.data) {
158
+ if (data) {
159
+ throw new Error(`conflicting arguments`);
160
+ }
161
+ data = argv.data;
162
+ }
163
+ // strip whitespace
125
164
  if (!data) {
126
165
  throw new Error(`no txdata`);
127
166
  }
128
- data = data.replace(/\s*/g, '');
129
- const tx = utxolib.bitgo.createTransactionFromHex(data, network);
130
- const txid = tx.getId();
131
- if (argv.txid && txid !== argv.txid) {
132
- throw new Error(`computed txid does not match txid argument`);
167
+ const bytes = (0, parseString_1.stringToBuffer)(data, ['hex', 'base64']);
168
+ let tx = utxolib.bitgo.isPsbt(bytes)
169
+ ? utxolib.bitgo.createPsbtFromBuffer(bytes, network)
170
+ : utxolib.bitgo.createTransactionFromBuffer(bytes, network, { amountType: 'bigint' });
171
+ const { id: txid } = (0, ParserTx_1.getParserTxProperties)(tx, undefined);
172
+ if (tx instanceof utxolib.bitgo.UtxoTransaction) {
173
+ if (argv.txid && txid !== argv.txid) {
174
+ throw new Error(`computed txid does not match txid argument`);
175
+ }
176
+ }
177
+ else if (argv.finalize) {
178
+ tx.finalizeAllInputs();
179
+ tx = tx.extractTransaction();
180
+ }
181
+ if (argv.parseAsUnknown) {
182
+ console.log(formatString((0, parseUnknown_1.parseUnknown)(new Parser_1.Parser(), 'tx', tx), argv));
183
+ return;
133
184
  }
134
185
  if (argv.fetchAll) {
135
186
  argv.fetchStatus = true;
@@ -137,10 +188,12 @@ exports.cmdParseTx = {
137
188
  argv.fetchSpends = true;
138
189
  }
139
190
  const parsed = getTxParser(argv).parse(tx, {
140
- status: argv.fetchStatus ? await fetch_1.fetchTransactionStatus(httpClient, txid, network) : undefined,
141
- prevOutputs: argv.fetchInputs ? await fetch_1.fetchPrevOutputs(httpClient, tx) : undefined,
142
- prevOutputSpends: argv.fetchSpends ? await fetch_1.fetchPrevOutputSpends(httpClient, tx) : undefined,
143
- outputSpends: argv.fetchSpends ? await fetch_1.fetchOutputSpends(httpClient, tx) : undefined,
191
+ status: argv.fetchStatus && txid ? await (0, fetch_1.fetchTransactionStatus)(httpClient, txid, network) : undefined,
192
+ prevOutputs: argv.fetchInputs ? await (0, fetch_1.fetchPrevOutputs)(httpClient, tx) : undefined,
193
+ prevOutputSpends: argv.fetchSpends ? await (0, fetch_1.fetchPrevOutputSpends)(httpClient, tx) : undefined,
194
+ outputSpends: argv.fetchSpends && tx instanceof utxolib.bitgo.UtxoTransaction
195
+ ? await (0, fetch_1.fetchOutputSpends)(httpClient, tx)
196
+ : undefined,
144
197
  });
145
198
  console.log(formatString(parsed, argv));
146
199
  },
@@ -162,4 +215,90 @@ exports.cmdParseAddress = {
162
215
  console.log(formatString(parsed, argv));
163
216
  },
164
217
  };
165
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEseUJBQXlCO0FBQ3pCLG1DQUFtQztBQUNuQywrQkFBaUM7QUFFakMseUNBQXlDO0FBQ3pDLGdEQUFnRDtBQUdoRCxxQ0FBc0M7QUFDdEMsbUNBTWlCO0FBQ2pCLHlDQUFvRDtBQUNwRCxtREFBZ0Q7QUFDaEQscURBQXNGO0FBQ3RGLDJDQUF3QztBQTRCeEMsS0FBSyxVQUFVLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBc0I7SUFDcEQsSUFBSSxLQUFLLEVBQUU7UUFDVCxNQUFNLEtBQUssR0FBRyxnQkFBUyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxNQUFNLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxtQkFBbUIsQ0FBQztRQUNuRCxNQUFNLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN0QyxPQUFPLElBQUksNkJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDbkM7SUFDRCxPQUFPLElBQUksMEJBQWMsRUFBRSxDQUFDO0FBQzlCLENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFDLElBQVk7SUFDckMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUEyQixDQUFDLENBQUM7SUFDOUQsSUFBSSxDQUFDLE9BQU8sRUFBRTtRQUNaLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLE9BQU8sRUFBRSxDQUFDLENBQUM7S0FDL0M7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsSUFBMEM7SUFDNUQsT0FBTyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDekMsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLE1BQWtCLEVBQUUsSUFBNkQ7SUFDckcsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFO1FBQ25CLEtBQUssTUFBTTtZQUNULE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLEtBQUssTUFBTTtZQUNULE9BQU8sbUJBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0tBQ2xFO0lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDbkQsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUFpQyxJQUFPO0lBQzdELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtRQUNoQixPQUFPLEVBQUUsR0FBRyxJQUFJLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO0tBQzlEO0lBQ0QsT0FBTyxFQUFFLEdBQUcsSUFBSSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQztBQUN6QyxDQUFDO0FBRUQsU0FBZ0IsV0FBVyxDQUFDLElBQTJDO0lBQ3JFLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNaLE9BQU8sSUFBSSxtQkFBUSxDQUFDLG1CQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7S0FDekM7SUFDRCxPQUFPLElBQUksbUJBQVEsQ0FBQztRQUNsQixHQUFHLElBQUk7UUFDUCxrQkFBa0IsRUFBRTtZQUNsQixNQUFNLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtZQUMvQixLQUFLLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtZQUM5QixPQUFPLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtTQUNqQztLQUNGLENBQUMsQ0FBQztBQUNMLENBQUM7QUFaRCxrQ0FZQztBQUVELFNBQWdCLGdCQUFnQixDQUFDLElBQXNCO0lBQ3JELE9BQU8sSUFBSSw2QkFBYSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2pELENBQUM7QUFGRCw0Q0FFQztBQUVZLFFBQUEsVUFBVSxHQUFHO0lBQ3hCLE9BQU8sRUFBRSxnQkFBZ0I7SUFDekIsT0FBTyxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQztJQUN4QixRQUFRLEVBQUUsdURBQXVEO0lBRWpFLE9BQU8sQ0FBQyxDQUFzQjtRQUM1QixPQUFPLENBQUM7YUFDTCxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQzthQUN6RCxNQUFNLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7YUFDcEQsTUFBTSxDQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO2FBQ3hELE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUM7YUFDbEMsTUFBTSxDQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO2FBQ3ZELE1BQU0sQ0FBQyxhQUFhLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQzthQUMxRCxNQUFNLENBQUMsYUFBYSxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7YUFDMUQsTUFBTSxDQUFDLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO2FBQzFELE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDO2FBQ3JFLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7YUFDakYsTUFBTSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQzthQUNuRixNQUFNLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO2FBQ25GLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO2FBQ2hFLE1BQU0sQ0FBQyxZQUFZLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUM7YUFDeEMsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQzthQUNqQyxLQUFLLENBQUMsS0FBSyxDQUFDO2FBQ1osTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO2FBQ2xELE1BQU0sQ0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLG9DQUFvQyxFQUFFLENBQUM7YUFDdkcsTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFXLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUEyQztRQUN2RCxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsSUFBSSxJQUFJLENBQUM7UUFFVCxNQUFNLFVBQVUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUUxRCxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDYixJQUFJLEdBQUcsTUFBTSwyQkFBbUIsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztTQUNsRTtRQUVELElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLEdBQUcsRUFBRTtZQUNuQyxJQUFJLElBQUksRUFBRTtnQkFDUixNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUM7YUFDMUM7WUFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLGdFQUFnRSxDQUFDLENBQUM7WUFDOUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO1lBQzVELElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUU7Z0JBQ3ZCLElBQUksR0FBRyxNQUFNLHFCQUFTLEVBQUUsQ0FBQzthQUMxQjtpQkFBTTtnQkFDTCxJQUFJLEdBQUcsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7YUFDekQ7U0FDRjtRQUVELElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNsQixJQUFJLElBQUksRUFBRTtnQkFDUixNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUM7YUFDMUM7WUFDRCxJQUFJLEdBQUcsTUFBTSxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDaEM7UUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDYixJQUFJLElBQUksRUFBRTtnQkFDUixNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUM7YUFDMUM7WUFDRCxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUNuRTtRQUVELElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQzlCO1FBQ0QsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWhDLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsd0JBQXdCLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN4QixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDbkMsTUFBTSxJQUFJLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1NBQy9EO1FBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1NBQ3pCO1FBRUQsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDekMsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sOEJBQXNCLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztZQUM5RixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSx3QkFBZ0IsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDbEYsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSw2QkFBcUIsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDNUYsWUFBWSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0seUJBQWlCLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1NBQ3JGLENBQUMsQ0FBQztRQUVILE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzFDLENBQUM7Q0FDTyxDQUFDO0FBRUUsUUFBQSxlQUFlLEdBQUc7SUFDN0IsT0FBTyxFQUFFLHdCQUF3QjtJQUNqQyxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUM7SUFDcEIsUUFBUSxFQUFFLGVBQWU7SUFDekIsT0FBTyxDQUFDLENBQXNCO1FBQzVCLE9BQU8sQ0FBQzthQUNMLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQzthQUNqRCxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQVcsQ0FBQzthQUN6RSxNQUFNLENBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7YUFDdEQsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO2FBQ2xELFVBQVUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCxPQUFPLENBQUMsSUFBdUM7UUFDN0MsTUFBTSxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxRCxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMxQyxDQUFDO0NBQ08sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbmltcG9ydCAqIGFzIHlhcmdzIGZyb20gJ3lhcmdzJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHByb2Nlc3MgZnJvbSAncHJvY2Vzcyc7XG5pbXBvcnQgeyBwcm9taXNpZnkgfSBmcm9tICd1dGlsJztcblxuaW1wb3J0ICogYXMgY2xpcGJvYXJkeSBmcm9tICdjbGlwYm9hcmR5JztcbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuXG5pbXBvcnQgeyBQYXJzZXJOb2RlIH0gZnJvbSAnLi9QYXJzZXInO1xuaW1wb3J0IHsgZm9ybWF0VHJlZSB9IGZyb20gJy4vZm9ybWF0JztcbmltcG9ydCB7XG4gIGZldGNoT3V0cHV0U3BlbmRzLFxuICBmZXRjaFByZXZPdXRwdXRzLFxuICBmZXRjaFByZXZPdXRwdXRTcGVuZHMsXG4gIGZldGNoVHJhbnNhY3Rpb25IZXgsXG4gIGZldGNoVHJhbnNhY3Rpb25TdGF0dXMsXG59IGZyb20gJy4vZmV0Y2gnO1xuaW1wb3J0IHsgVHhQYXJzZXIsIFR4UGFyc2VyQXJncyB9IGZyb20gJy4vVHhQYXJzZXInO1xuaW1wb3J0IHsgQWRkcmVzc1BhcnNlciB9IGZyb20gJy4vQWRkcmVzc1BhcnNlcic7XG5pbXBvcnQgeyBCYXNlSHR0cENsaWVudCwgQ2FjaGluZ0h0dHBDbGllbnQsIEh0dHBDbGllbnQgfSBmcm9tICdAYml0Z28tYmV0YS9ibG9ja2FwaXMnO1xuaW1wb3J0IHsgcmVhZFN0ZGluIH0gZnJvbSAnLi9yZWFkU3RkaW4nO1xuXG50eXBlIE91dHB1dEZvcm1hdCA9ICd0cmVlJyB8ICdqc29uJztcblxudHlwZSBBcmdzUGFyc2VUcmFuc2FjdGlvbiA9IHtcbiAgbmV0d29yazogc3RyaW5nO1xuICBzdGRpbjogYm9vbGVhbjtcbiAgY2xpcGJvYXJkOiBib29sZWFuO1xuICBwYXRoPzogc3RyaW5nO1xuICB0eGlkPzogc3RyaW5nO1xuICBhbGw6IGJvb2xlYW47XG4gIGNhY2hlOiBib29sZWFuO1xuICBmb3JtYXQ6IE91dHB1dEZvcm1hdDtcbiAgZmV0Y2hBbGw6IGJvb2xlYW47XG4gIGZldGNoU3RhdHVzOiBib29sZWFuO1xuICBmZXRjaElucHV0czogYm9vbGVhbjtcbiAgZmV0Y2hTcGVuZHM6IGJvb2xlYW47XG4gIHBhcnNlU2lnbmF0dXJlRGF0YTogYm9vbGVhbjtcbn0gJiBPbWl0PFR4UGFyc2VyQXJncywgJ3BhcnNlU2lnbmF0dXJlRGF0YSc+O1xuXG50eXBlIEFyZ3NQYXJzZUFkZHJlc3MgPSB7XG4gIG5ldHdvcms/OiBzdHJpbmc7XG4gIGFsbDogYm9vbGVhbjtcbiAgZm9ybWF0OiBPdXRwdXRGb3JtYXQ7XG4gIGNvbnZlcnQ6IGJvb2xlYW47XG4gIGFkZHJlc3M6IHN0cmluZztcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIGdldENsaWVudCh7IGNhY2hlIH06IHsgY2FjaGU6IGJvb2xlYW4gfSk6IFByb21pc2U8SHR0cENsaWVudD4ge1xuICBpZiAoY2FjaGUpIHtcbiAgICBjb25zdCBta2RpciA9IHByb21pc2lmeShmcy5ta2Rpcik7XG4gICAgY29uc3QgZGlyID0gYCR7cHJvY2Vzcy5lbnYuSE9NRX0vLmNhY2hlL3V0eG8tYmluL2A7XG4gICAgYXdhaXQgbWtkaXIoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICByZXR1cm4gbmV3IENhY2hpbmdIdHRwQ2xpZW50KGRpcik7XG4gIH1cbiAgcmV0dXJuIG5ldyBCYXNlSHR0cENsaWVudCgpO1xufVxuXG5mdW5jdGlvbiBnZXROZXR3b3JrRm9yTmFtZShuYW1lOiBzdHJpbmcpIHtcbiAgY29uc3QgbmV0d29yayA9IHV0eG9saWIubmV0d29ya3NbbmFtZSBhcyB1dHhvbGliLk5ldHdvcmtOYW1lXTtcbiAgaWYgKCFuZXR3b3JrKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIG5ldHdvcmsgJHtuZXR3b3JrfWApO1xuICB9XG4gIHJldHVybiBuZXR3b3JrO1xufVxuXG5mdW5jdGlvbiBnZXROZXR3b3JrKGFyZ3Y6IHlhcmdzLkFyZ3VtZW50czx7IG5ldHdvcms6IHN0cmluZyB9Pik6IHV0eG9saWIuTmV0d29yayB7XG4gIHJldHVybiBnZXROZXR3b3JrRm9yTmFtZShhcmd2Lm5ldHdvcmspO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRTdHJpbmcocGFyc2VkOiBQYXJzZXJOb2RlLCBhcmd2OiB5YXJncy5Bcmd1bWVudHM8eyBmb3JtYXQ6IE91dHB1dEZvcm1hdDsgYWxsOiBib29sZWFuIH0+KTogc3RyaW5nIHtcbiAgc3dpdGNoIChhcmd2LmZvcm1hdCkge1xuICAgIGNhc2UgJ2pzb24nOlxuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHBhcnNlZCwgbnVsbCwgMik7XG4gICAgY2FzZSAndHJlZSc6XG4gICAgICByZXR1cm4gZm9ybWF0VHJlZShwYXJzZWQsIHsgaGlkZTogYXJndi5hbGwgPyBbXSA6IHVuZGVmaW5lZCB9KTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgZm9ybWF0ICR7YXJndi5mb3JtYXR9YCk7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVOZXR3b3JrPFQgZXh0ZW5kcyB7IG5ldHdvcms/OiBzdHJpbmcgfT4oYXJnczogVCk6IFQgJiB7IG5ldHdvcms/OiB1dHhvbGliLk5ldHdvcmsgfSB7XG4gIGlmIChhcmdzLm5ldHdvcmspIHtcbiAgICByZXR1cm4geyAuLi5hcmdzLCBuZXR3b3JrOiBnZXROZXR3b3JrRm9yTmFtZShhcmdzLm5ldHdvcmspIH07XG4gIH1cbiAgcmV0dXJuIHsgLi4uYXJncywgbmV0d29yazogdW5kZWZpbmVkIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeFBhcnNlcihhcmd2OiB5YXJncy5Bcmd1bWVudHM8QXJnc1BhcnNlVHJhbnNhY3Rpb24+KTogVHhQYXJzZXIge1xuICBpZiAoYXJndi5hbGwpIHtcbiAgICByZXR1cm4gbmV3IFR4UGFyc2VyKFR4UGFyc2VyLlBBUlNFX0FMTCk7XG4gIH1cbiAgcmV0dXJuIG5ldyBUeFBhcnNlcih7XG4gICAgLi4uYXJndixcbiAgICBwYXJzZVNpZ25hdHVyZURhdGE6IHtcbiAgICAgIHNjcmlwdDogYXJndi5wYXJzZVNpZ25hdHVyZURhdGEsXG4gICAgICBlY2RzYTogYXJndi5wYXJzZVNpZ25hdHVyZURhdGEsXG4gICAgICBzY2hub3JyOiBhcmd2LnBhcnNlU2lnbmF0dXJlRGF0YSxcbiAgICB9LFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFkZHJlc3NQYXJzZXIoYXJndjogQXJnc1BhcnNlQWRkcmVzcyk6IEFkZHJlc3NQYXJzZXIge1xuICByZXR1cm4gbmV3IEFkZHJlc3NQYXJzZXIocmVzb2x2ZU5ldHdvcmsoYXJndikpO1xufVxuXG5leHBvcnQgY29uc3QgY21kUGFyc2VUeCA9IHtcbiAgY29tbWFuZDogJ3BhcnNlVHggW3BhdGhdJyxcbiAgYWxpYXNlczogWydwYXJzZScsICd0eCddLFxuICBkZXNjcmliZTogJ2Rpc3BsYXkgdHJhbnNhY3Rpb24gY29tcG9uZW50cyBpbiBodW1hbi1yZWFkYWJsZSBmb3JtJyxcblxuICBidWlsZGVyKGI6IHlhcmdzLkFyZ3Y8dW5rbm93bj4pOiB5YXJncy5Bcmd2PEFyZ3NQYXJzZVRyYW5zYWN0aW9uPiB7XG4gICAgcmV0dXJuIGJcbiAgICAgIC5vcHRpb24oJ3BhdGgnLCB7IHR5cGU6ICdzdHJpbmcnLCBuYXJnczogMSwgZGVmYXVsdDogJycgfSlcbiAgICAgIC5vcHRpb24oJ3N0ZGluJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlIH0pXG4gICAgICAub3B0aW9uKCdjbGlwYm9hcmQnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UgfSlcbiAgICAgIC5vcHRpb24oJ3R4aWQnLCB7IHR5cGU6ICdzdHJpbmcnIH0pXG4gICAgICAub3B0aW9uKCdmZXRjaEFsbCcsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSB9KVxuICAgICAgLm9wdGlvbignZmV0Y2hTdGF0dXMnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UgfSlcbiAgICAgIC5vcHRpb24oJ2ZldGNoSW5wdXRzJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlIH0pXG4gICAgICAub3B0aW9uKCdmZXRjaFNwZW5kcycsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSB9KVxuICAgICAgLm9wdGlvbignbmV0d29yaycsIHsgYWxpYXM6ICduJywgdHlwZTogJ3N0cmluZycsIGRlbWFuZE9wdGlvbjogdHJ1ZSB9KVxuICAgICAgLm9wdGlvbigncGFyc2VTY3JpcHRBc20nLCB7IGFsaWFzOiAnc2NyaXB0YXNtJywgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSB9KVxuICAgICAgLm9wdGlvbigncGFyc2VTY3JpcHREYXRhJywgeyBhbGlhczogJ3NjcmlwdGRhdGEnLCB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlIH0pXG4gICAgICAub3B0aW9uKCdwYXJzZVNpZ25hdHVyZURhdGEnLCB7IGFsaWFzOiAnc2lnZGF0YScsIHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UgfSlcbiAgICAgIC5vcHRpb24oJ3BhcnNlT3V0cHV0U2NyaXB0JywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlIH0pXG4gICAgICAub3B0aW9uKCdtYXhPdXRwdXRzJywgeyB0eXBlOiAnbnVtYmVyJyB9KVxuICAgICAgLm9wdGlvbigndmluJywgeyB0eXBlOiAnbnVtYmVyJyB9KVxuICAgICAgLmFycmF5KCd2aW4nKVxuICAgICAgLm9wdGlvbignYWxsJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlIH0pXG4gICAgICAub3B0aW9uKCdjYWNoZScsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSwgZGVzY3JpcHRpb246ICd1c2UgbG9jYWwgY2FjaGUgZm9yIGh0dHAgcmVzcG9uc2VzJyB9KVxuICAgICAgLm9wdGlvbignZm9ybWF0JywgeyBjaG9pY2VzOiBbJ3RyZWUnLCAnanNvbiddLCBkZWZhdWx0OiAndHJlZScgfSBhcyBjb25zdCk7XG4gIH0sXG5cbiAgYXN5bmMgaGFuZGxlcihhcmd2OiB5YXJncy5Bcmd1bWVudHM8QXJnc1BhcnNlVHJhbnNhY3Rpb24+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbmV0d29yayA9IGdldE5ldHdvcmsoYXJndik7XG4gICAgbGV0IGRhdGE7XG5cbiAgICBjb25zdCBodHRwQ2xpZW50ID0gYXdhaXQgZ2V0Q2xpZW50KHsgY2FjaGU6IGFyZ3YuY2FjaGUgfSk7XG5cbiAgICBpZiAoYXJndi50eGlkKSB7XG4gICAgICBkYXRhID0gYXdhaXQgZmV0Y2hUcmFuc2FjdGlvbkhleChodHRwQ2xpZW50LCBhcmd2LnR4aWQsIG5ldHdvcmspO1xuICAgIH1cblxuICAgIGlmIChhcmd2LnN0ZGluIHx8IGFyZ3YucGF0aCA9PT0gJy0nKSB7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGNvbmZsaWN0aW5nIGFyZ3VtZW50c2ApO1xuICAgICAgfVxuICAgICAgY29uc29sZS5sb2coJ1JlYWRpbmcgZnJvbSBzdGRpbi4gUGxlYXNlIHBhc3RlIGhleC1lbmNvZGVkIHRyYW5zYWN0aW9uIGRhdGEuJyk7XG4gICAgICBjb25zb2xlLmxvZygnUHJlc3MgQ3RybC1EIHRvIGZpbmlzaCwgb3IgQ3RybC1DIHRvIGNhbmNlbC4nKTtcbiAgICAgIGlmIChwcm9jZXNzLnN0ZGluLmlzVFRZKSB7XG4gICAgICAgIGRhdGEgPSBhd2FpdCByZWFkU3RkaW4oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGEgPSBhd2FpdCBmcy5wcm9taXNlcy5yZWFkRmlsZSgnL2Rldi9zdGRpbicsICd1dGY4Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFyZ3YuY2xpcGJvYXJkKSB7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGNvbmZsaWN0aW5nIGFyZ3VtZW50c2ApO1xuICAgICAgfVxuICAgICAgZGF0YSA9IGF3YWl0IGNsaXBib2FyZHkucmVhZCgpO1xuICAgIH1cblxuICAgIGlmIChhcmd2LnBhdGgpIHtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgY29uZmxpY3RpbmcgYXJndW1lbnRzYCk7XG4gICAgICB9XG4gICAgICBkYXRhID0gKGF3YWl0IGZzLnByb21pc2VzLnJlYWRGaWxlKGFyZ3YucGF0aCwgJ3V0ZjgnKSkudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgbm8gdHhkYXRhYCk7XG4gICAgfVxuICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoL1xccyovZywgJycpO1xuXG4gICAgY29uc3QgdHggPSB1dHhvbGliLmJpdGdvLmNyZWF0ZVRyYW5zYWN0aW9uRnJvbUhleChkYXRhLCBuZXR3b3JrKTtcbiAgICBjb25zdCB0eGlkID0gdHguZ2V0SWQoKTtcbiAgICBpZiAoYXJndi50eGlkICYmIHR4aWQgIT09IGFyZ3YudHhpZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBjb21wdXRlZCB0eGlkIGRvZXMgbm90IG1hdGNoIHR4aWQgYXJndW1lbnRgKTtcbiAgICB9XG5cbiAgICBpZiAoYXJndi5mZXRjaEFsbCkge1xuICAgICAgYXJndi5mZXRjaFN0YXR1cyA9IHRydWU7XG4gICAgICBhcmd2LmZldGNoSW5wdXRzID0gdHJ1ZTtcbiAgICAgIGFyZ3YuZmV0Y2hTcGVuZHMgPSB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZCA9IGdldFR4UGFyc2VyKGFyZ3YpLnBhcnNlKHR4LCB7XG4gICAgICBzdGF0dXM6IGFyZ3YuZmV0Y2hTdGF0dXMgPyBhd2FpdCBmZXRjaFRyYW5zYWN0aW9uU3RhdHVzKGh0dHBDbGllbnQsIHR4aWQsIG5ldHdvcmspIDogdW5kZWZpbmVkLFxuICAgICAgcHJldk91dHB1dHM6IGFyZ3YuZmV0Y2hJbnB1dHMgPyBhd2FpdCBmZXRjaFByZXZPdXRwdXRzKGh0dHBDbGllbnQsIHR4KSA6IHVuZGVmaW5lZCxcbiAgICAgIHByZXZPdXRwdXRTcGVuZHM6IGFyZ3YuZmV0Y2hTcGVuZHMgPyBhd2FpdCBmZXRjaFByZXZPdXRwdXRTcGVuZHMoaHR0cENsaWVudCwgdHgpIDogdW5kZWZpbmVkLFxuICAgICAgb3V0cHV0U3BlbmRzOiBhcmd2LmZldGNoU3BlbmRzID8gYXdhaXQgZmV0Y2hPdXRwdXRTcGVuZHMoaHR0cENsaWVudCwgdHgpIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuXG4gICAgY29uc29sZS5sb2coZm9ybWF0U3RyaW5nKHBhcnNlZCwgYXJndikpO1xuICB9LFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IGNtZFBhcnNlQWRkcmVzcyA9IHtcbiAgY29tbWFuZDogJ3BhcnNlQWRkcmVzcyBbYWRkcmVzc10nLFxuICBhbGlhc2VzOiBbJ2FkZHJlc3MnXSxcbiAgZGVzY3JpYmU6ICdwYXJzZSBhZGRyZXNzJyxcbiAgYnVpbGRlcihiOiB5YXJncy5Bcmd2PHVua25vd24+KTogeWFyZ3MuQXJndjxBcmdzUGFyc2VBZGRyZXNzPiB7XG4gICAgcmV0dXJuIGJcbiAgICAgIC5vcHRpb24oJ25ldHdvcmsnLCB7IGFsaWFzOiAnbicsIHR5cGU6ICdzdHJpbmcnIH0pXG4gICAgICAub3B0aW9uKCdmb3JtYXQnLCB7IGNob2ljZXM6IFsndHJlZScsICdqc29uJ10sIGRlZmF1bHQ6ICd0cmVlJyB9IGFzIGNvbnN0KVxuICAgICAgLm9wdGlvbignY29udmVydCcsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSB9KVxuICAgICAgLm9wdGlvbignYWxsJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlIH0pXG4gICAgICAucG9zaXRpb25hbCgnYWRkcmVzcycsIHsgdHlwZTogJ3N0cmluZycsIGRlbWFuZE9wdGlvbjogdHJ1ZSB9KTtcbiAgfSxcblxuICBoYW5kbGVyKGFyZ3Y6IHlhcmdzLkFyZ3VtZW50czxBcmdzUGFyc2VBZGRyZXNzPik6IHZvaWQge1xuICAgIGNvbnN0IHBhcnNlZCA9IGdldEFkZHJlc3NQYXJzZXIoYXJndikucGFyc2UoYXJndi5hZGRyZXNzKTtcbiAgICBjb25zb2xlLmxvZyhmb3JtYXRTdHJpbmcocGFyc2VkLCBhcmd2KSk7XG4gIH0sXG59IGFzIGNvbnN0O1xuIl19
218
+ exports.cmdParseScript = {
219
+ command: 'parseScript [script]',
220
+ describe: 'parse script',
221
+ builder(b) {
222
+ return b
223
+ .option('network', { alias: 'n', type: 'string' })
224
+ .option('format', { choices: ['tree', 'json'], default: 'tree' })
225
+ .option('all', { type: 'boolean', default: false })
226
+ .positional('script', { type: 'string', demandOption: true });
227
+ },
228
+ handler(argv) {
229
+ const script = (0, parseString_1.stringToBuffer)(argv.script, 'hex');
230
+ const parsed = getScriptParser(argv).parse(script);
231
+ console.log(formatString(parsed, { ...argv, all: true }));
232
+ },
233
+ };
234
+ exports.cmdGenerateAddress = {
235
+ command: 'generateAddresses',
236
+ describe: 'generate addresses',
237
+ builder(b) {
238
+ return b
239
+ .option('network', { alias: 'n', type: 'string' })
240
+ .option('userKey', { type: 'string', demandOption: true })
241
+ .option('userKeyPrefix', { type: 'string', default: '0/0' })
242
+ .option('backupKey', { type: 'string', demandOption: true })
243
+ .option('backupKeyPrefix', { type: 'string', default: '0/0' })
244
+ .option('bitgoKey', { type: 'string', demandOption: true })
245
+ .option('bitgoKeyPrefix', { type: 'string', default: '0/0' })
246
+ .option('format', {
247
+ type: 'string',
248
+ default: '%p0\t%a',
249
+ description: `Format string. Placeholders: ${(0, generateAddress_1.getAddressPlaceholderDescription)()}`,
250
+ })
251
+ .option('chain', { type: 'number', description: 'Address chain' })
252
+ .array('chain')
253
+ .option('index', {
254
+ type: 'string',
255
+ description: 'Address index. Can be given as a range (e.g. 0-99). Takes precedence over --limit.',
256
+ })
257
+ .array('index')
258
+ .option('limit', {
259
+ type: 'number',
260
+ description: 'Alias for --index with range starting at 0 to limit-1.',
261
+ default: 100,
262
+ });
263
+ },
264
+ handler(argv) {
265
+ var _a;
266
+ let indexRange;
267
+ if (argv.index) {
268
+ indexRange = (0, generateAddress_1.parseIndexRange)(argv.index);
269
+ }
270
+ else if (argv.limit) {
271
+ indexRange = (0, generateAddress_1.getRange)(0, argv.limit - 1);
272
+ }
273
+ else {
274
+ throw new Error(`no index or limit`);
275
+ }
276
+ for (const address of (0, generateAddress_1.generateAddress)({
277
+ ...argv,
278
+ index: indexRange,
279
+ network: getNetworkForName((_a = argv.network) !== null && _a !== void 0 ? _a : 'bitcoin'),
280
+ })) {
281
+ if (argv.format === 'tree') {
282
+ console.log((0, generateAddress_1.formatAddressTree)(address));
283
+ }
284
+ else {
285
+ console.log((0, generateAddress_1.formatAddressWithFormatString)(address, argv.format));
286
+ }
287
+ }
288
+ },
289
+ };
290
+ exports.cmdParseXpub = {
291
+ command: 'parseXpub [xpub]',
292
+ describe: 'show xpub info',
293
+ builder(b) {
294
+ return b
295
+ .positional('xpub', { type: 'string', demandOption: true })
296
+ .option('format', { choices: ['tree', 'json'], default: 'tree' })
297
+ .option('all', { type: 'boolean', default: false })
298
+ .option('derive', { type: 'string', description: 'show xpub derived with path' });
299
+ },
300
+ handler(argv) {
301
+ console.log(formatString((0, bip32_1.parseXpub)(argv.xpub, { derive: argv.derive }), argv));
302
+ },
303
+ };
304
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEseUJBQXlCO0FBQ3pCLG1DQUFtQztBQUNuQywrQkFBaUM7QUFFakMsbURBQXdDO0FBQ3hDLGdEQUFnRDtBQUVoRCxxQ0FBOEM7QUFDOUMscUNBQXNDO0FBQ3RDLG1DQU1pQjtBQUNqQix5Q0FBb0Q7QUFDcEQsbURBQWdEO0FBQ2hELHFEQUFzRjtBQUN0RiwyQ0FBd0M7QUFDeEMsaURBQThDO0FBQzlDLHlDQUFtRDtBQUNuRCxpREFBOEM7QUFDOUMsK0NBQStDO0FBQy9DLHVEQU8yQjtBQUMzQixtQ0FBb0M7QUFrRHBDLEtBQUssVUFBVSxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQXNCO0lBQ3BELElBQUksS0FBSyxFQUFFO1FBQ1QsTUFBTSxLQUFLLEdBQUcsSUFBQSxnQkFBUyxFQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxNQUFNLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxtQkFBbUIsQ0FBQztRQUNuRCxNQUFNLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN0QyxPQUFPLElBQUksNkJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDbkM7SUFDRCxPQUFPLElBQUksMEJBQWMsRUFBRSxDQUFDO0FBQzlCLENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFDLElBQVk7SUFDckMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUEyQixDQUFDLENBQUM7SUFDOUQsSUFBSSxDQUFDLE9BQU8sRUFBRTtRQUNaLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLElBQUksRUFBRSxDQUFDLENBQUM7S0FDNUM7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQsU0FBUyxV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QUFDLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLDZCQUE2QixFQUFFLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBQ0QsT0FBTyxDQUFDLElBQTJFO1FBQ2pGLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUEsaUJBQVMsRUFBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDakYsQ0FBQztDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG5pbXBvcnQgKiBhcyB5YXJncyBmcm9tICd5YXJncyc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwcm9jZXNzIGZyb20gJ3Byb2Nlc3MnO1xuaW1wb3J0IHsgcHJvbWlzaWZ5IH0gZnJvbSAndXRpbCc7XG5cbmltcG9ydCBjbGlwYm9hcmR5IGZyb20gJ2NsaXBib2FyZHktY2pzJztcbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuXG5pbXBvcnQgeyBQYXJzZXIsIFBhcnNlck5vZGUgfSBmcm9tICcuL1BhcnNlcic7XG5pbXBvcnQgeyBmb3JtYXRUcmVlIH0gZnJvbSAnLi9mb3JtYXQnO1xuaW1wb3J0IHtcbiAgZmV0Y2hPdXRwdXRTcGVuZHMsXG4gIGZldGNoUHJldk91dHB1dHMsXG4gIGZldGNoUHJldk91dHB1dFNwZW5kcyxcbiAgZmV0Y2hUcmFuc2FjdGlvbkhleCxcbiAgZmV0Y2hUcmFuc2FjdGlvblN0YXR1cyxcbn0gZnJvbSAnLi9mZXRjaCc7XG5pbXBvcnQgeyBUeFBhcnNlciwgVHhQYXJzZXJBcmdzIH0gZnJvbSAnLi9UeFBhcnNlcic7XG5pbXBvcnQgeyBBZGRyZXNzUGFyc2VyIH0gZnJvbSAnLi9BZGRyZXNzUGFyc2VyJztcbmltcG9ydCB7IEJhc2VIdHRwQ2xpZW50LCBDYWNoaW5nSHR0cENsaWVudCwgSHR0cENsaWVudCB9IGZyb20gJ0BiaXRnby1iZXRhL2Jsb2NrYXBpcyc7XG5pbXBvcnQgeyByZWFkU3RkaW4gfSBmcm9tICcuL3JlYWRTdGRpbic7XG5pbXBvcnQgeyBwYXJzZVVua25vd24gfSBmcm9tICcuL3BhcnNlVW5rbm93bic7XG5pbXBvcnQgeyBnZXRQYXJzZXJUeFByb3BlcnRpZXMgfSBmcm9tICcuL1BhcnNlclR4JztcbmltcG9ydCB7IFNjcmlwdFBhcnNlciB9IGZyb20gJy4vU2NyaXB0UGFyc2VyJztcbmltcG9ydCB7IHN0cmluZ1RvQnVmZmVyIH0gZnJvbSAnLi9wYXJzZVN0cmluZyc7XG5pbXBvcnQge1xuICBmb3JtYXRBZGRyZXNzVHJlZSxcbiAgZm9ybWF0QWRkcmVzc1dpdGhGb3JtYXRTdHJpbmcsXG4gIGdlbmVyYXRlQWRkcmVzcyxcbiAgZ2V0QWRkcmVzc1BsYWNlaG9sZGVyRGVzY3JpcHRpb24sXG4gIGdldFJhbmdlLFxuICBwYXJzZUluZGV4UmFuZ2UsXG59IGZyb20gJy4vZ2VuZXJhdGVBZGRyZXNzJztcbmltcG9ydCB7IHBhcnNlWHB1YiB9IGZyb20gJy4vYmlwMzInO1xuXG50eXBlIE91dHB1dEZvcm1hdCA9ICd0cmVlJyB8ICdqc29uJztcblxudHlwZSBBcmdzUGFyc2VUcmFuc2FjdGlvbiA9IHtcbiAgbmV0d29yazogc3RyaW5nO1xuICBzdGRpbjogYm9vbGVhbjtcbiAgY2xpcGJvYXJkOiBib29sZWFuO1xuICBwYXRoPzogc3RyaW5nO1xuICB0eGlkPzogc3RyaW5nO1xuICBkYXRhPzogc3RyaW5nO1xuICBhbGw6IGJvb2xlYW47XG4gIGNhY2hlOiBib29sZWFuO1xuICBmb3JtYXQ6IE91dHB1dEZvcm1hdDtcbiAgZmV0Y2hBbGw6IGJvb2xlYW47XG4gIGZldGNoU3RhdHVzOiBib29sZWFuO1xuICBmZXRjaElucHV0czogYm9vbGVhbjtcbiAgZmV0Y2hTcGVuZHM6IGJvb2xlYW47XG4gIGZpbmFsaXplOiBib29sZWFuO1xuICBwYXJzZVNpZ25hdHVyZURhdGE6IGJvb2xlYW47XG4gIHBhcnNlQXNVbmtub3duOiBib29sZWFuO1xuICBwYXJzZUVycm9yOiAndGhyb3cnIHwgJ2NvbnRpbnVlJztcbn0gJiBPbWl0PFR4UGFyc2VyQXJncywgJ3BhcnNlU2lnbmF0dXJlRGF0YSc+O1xuXG50eXBlIEFyZ3NQYXJzZUFkZHJlc3MgPSB7XG4gIG5ldHdvcms/OiBzdHJpbmc7XG4gIGFsbDogYm9vbGVhbjtcbiAgZm9ybWF0OiBPdXRwdXRGb3JtYXQ7XG4gIGNvbnZlcnQ6IGJvb2xlYW47XG4gIGFkZHJlc3M6IHN0cmluZztcbn07XG5cbnR5cGUgQXJnc1BhcnNlU2NyaXB0ID0ge1xuICBuZXR3b3JrPzogc3RyaW5nO1xuICBmb3JtYXQ6IE91dHB1dEZvcm1hdDtcbiAgYWxsOiBib29sZWFuO1xuICBzY3JpcHQ6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEFyZ3NHZW5lcmF0ZUFkZHJlc3MgPSB7XG4gIG5ldHdvcms/OiBzdHJpbmc7XG4gIHVzZXJLZXk6IHN0cmluZztcbiAgYmFja3VwS2V5OiBzdHJpbmc7XG4gIGJpdGdvS2V5OiBzdHJpbmc7XG4gIGNoYWluPzogbnVtYmVyW107XG4gIGZvcm1hdDogc3RyaW5nO1xuICBpbmRleD86IHN0cmluZ1tdO1xuICBsaW1pdD86IG51bWJlcjtcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIGdldENsaWVudCh7IGNhY2hlIH06IHsgY2FjaGU6IGJvb2xlYW4gfSk6IFByb21pc2U8SHR0cENsaWVudD4ge1xuICBpZiAoY2FjaGUpIHtcbiAgICBjb25zdCBta2RpciA9IHByb21pc2lmeShmcy5ta2Rpcik7XG4gICAgY29uc3QgZGlyID0gYCR7cHJvY2Vzcy5lbnYuSE9NRX0vLmNhY2hlL3V0eG8tYmluL2A7XG4gICAgYXdhaXQgbWtkaXIoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICByZXR1cm4gbmV3IENhY2hpbmdIdHRwQ2xpZW50KGRpcik7XG4gIH1cbiAgcmV0dXJuIG5ldyBCYXNlSHR0cENsaWVudCgpO1xufVxuXG5mdW5jdGlvbiBnZXROZXR3b3JrRm9yTmFtZShuYW1lOiBzdHJpbmcpIHtcbiAgY29uc3QgbmV0d29yayA9IHV0eG9saWIubmV0d29ya3NbbmFtZSBhcyB1dHhvbGliLk5ldHdvcmtOYW1lXTtcbiAgaWYgKCFuZXR3b3JrKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIG5ldHdvcmsgJHtuYW1lfWApO1xuICB9XG4gIHJldHVybiBuZXR3b3JrO1xufVxuXG5mdW5jdGlvbiBnZXROZXR3b3JrKGFyZ3Y6IHlhcmdzLkFyZ3VtZW50czx7IG5ldHdvcms6IHN0cmluZyB9Pik6IHV0eG9saWIuTmV0d29yayB7XG4gIHJldHVybiBnZXROZXR3b3JrRm9yTmFtZShhcmd2Lm5ldHdvcmspO1xufVxuXG50eXBlIEZvcm1hdFN0cmluZ0FyZ3MgPSB7XG4gIGZvcm1hdDogT3V0cHV0Rm9ybWF0O1xuICBhbGw6IGJvb2xlYW47XG59O1xuXG5mdW5jdGlvbiBmb3JtYXRTdHJpbmcocGFyc2VkOiBQYXJzZXJOb2RlLCBhcmd2OiB5YXJncy5Bcmd1bWVudHM8Rm9ybWF0U3RyaW5nQXJncz4pOiBzdHJpbmcge1xuICBzd2l0Y2ggKGFyZ3YuZm9ybWF0KSB7XG4gICAgY2FzZSAnanNvbic6XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocGFyc2VkLCBudWxsLCAyKTtcbiAgICBjYXNlICd0cmVlJzpcbiAgICAgIHJldHVybiBmb3JtYXRUcmVlKHBhcnNlZCwgeyBoaWRlOiBhcmd2LmFsbCA/IFtdIDogdW5kZWZpbmVkIH0pO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBmb3JtYXQgJHthcmd2LmZvcm1hdH1gKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZU5ldHdvcms8VCBleHRlbmRzIHsgbmV0d29yaz86IHN0cmluZyB9PihcbiAgYXJnczogVFxuKTogVCAmIHtcbiAgbmV0d29yaz86IHV0eG9saWIuTmV0d29yaztcbn0ge1xuICBpZiAoYXJncy5uZXR3b3JrKSB7XG4gICAgcmV0dXJuIHsgLi4uYXJncywgbmV0d29yazogZ2V0TmV0d29ya0Zvck5hbWUoYXJncy5uZXR3b3JrKSB9O1xuICB9XG4gIHJldHVybiB7IC4uLmFyZ3MsIG5ldHdvcms6IHVuZGVmaW5lZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHhQYXJzZXIoYXJndjogeWFyZ3MuQXJndW1lbnRzPEFyZ3NQYXJzZVRyYW5zYWN0aW9uPik6IFR4UGFyc2VyIHtcbiAgaWYgKGFyZ3YuYWxsKSB7XG4gICAgcmV0dXJuIG5ldyBUeFBhcnNlcih7IC4uLmFyZ3YsIC4uLlR4UGFyc2VyLlBBUlNFX0FMTCB9KTtcbiAgfVxuICByZXR1cm4gbmV3IFR4UGFyc2VyKHtcbiAgICAuLi5hcmd2LFxuICAgIHBhcnNlU2lnbmF0dXJlRGF0YToge1xuICAgICAgc2NyaXB0OiBhcmd2LnBhcnNlU2lnbmF0dXJlRGF0YSxcbiAgICAgIGVjZHNhOiBhcmd2LnBhcnNlU2lnbmF0dXJlRGF0YSxcbiAgICAgIHNjaG5vcnI6IGFyZ3YucGFyc2VTaWduYXR1cmVEYXRhLFxuICAgIH0sXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWRkcmVzc1BhcnNlcihhcmd2OiBBcmdzUGFyc2VBZGRyZXNzKTogQWRkcmVzc1BhcnNlciB7XG4gIHJldHVybiBuZXcgQWRkcmVzc1BhcnNlcihyZXNvbHZlTmV0d29yayhhcmd2KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY3JpcHRQYXJzZXIoYXJndjogQXJnc1BhcnNlU2NyaXB0KTogU2NyaXB0UGFyc2VyIHtcbiAgcmV0dXJuIG5ldyBTY3JpcHRQYXJzZXIocmVzb2x2ZU5ldHdvcmsoYXJndikpO1xufVxuXG5leHBvcnQgY29uc3QgY21kUGFyc2VUeCA9IHtcbiAgY29tbWFuZDogJ3BhcnNlVHggW3BhdGhdJyxcbiAgYWxpYXNlczogWydwYXJzZScsICd0eCddLFxuICBkZXNjcmliZTpcbiAgICAnRGlzcGxheSB0cmFuc2FjdGlvbiBjb21wb25lbnRzIGluIGh1bWFuLXJlYWRhYmxlIGZvcm0uICcgK1xuICAgICdTdXBwb3J0ZWQgZm9ybWF0cyBhcmUgUGFydGlhbGx5IFNpZ25lZCBCaXRjb2luIFRyYW5zYWN0aW9uIChQU0JUKSwgJyArXG4gICAgJ2JpdGNvaW5qcy1saWIgZW5jb2RpbmcgKExlZ2FjeSkgb3IgZnVsbHkgc2lnbmVkIHRyYW5zYWN0aW9uLiAnICtcbiAgICAnQnl0ZXMgbXVzdCBiZSBlbmNvZGVkIGluIGhleCBvciBiYXNlNjQgZm9ybWF0LicsXG5cbiAgYnVpbGRlcihiOiB5YXJncy5Bcmd2PHVua25vd24+KTogeWFyZ3MuQXJndjxBcmdzUGFyc2VUcmFuc2FjdGlvbj4ge1xuICAgIHJldHVybiBiXG4gICAgICAub3B0aW9uKCdwYXRoJywgeyB0eXBlOiAnc3RyaW5nJywgbmFyZ3M6IDEsIGRlZmF1bHQ6ICcnIH0pXG4gICAgICAub3B0aW9uKCdzdGRpbicsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSB9KVxuICAgICAgLm9wdGlvbignZGF0YScsIHsgdHlwZTogJ3N0cmluZycsIGRlc2NyaXB0aW9uOiAndHJhbnNhY3Rpb24gYnl0ZXMgKGhleCBvciBiYXNlNjQpJywgYWxpYXM6ICdoZXgnIH0pXG4gICAgICAub3B0aW9uKCdjbGlwYm9hcmQnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UgfSlcbiAgICAgIC5vcHRpb24oJ3R4aWQnLCB7IHR5cGU6ICdzdHJpbmcnIH0pXG4gICAgICAub3B0aW9uKCdmZXRjaEFsbCcsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSB9KVxuICAgICAgLm9wdGlvbignZmV0Y2hTdGF0dXMnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UgfSlcbiAgICAgIC5vcHRpb24oJ2ZldGNoSW5wdXRzJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlIH0pXG4gICAgICAub3B0aW9uKCdmZXRjaFNwZW5kcycsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSB9KVxuICAgICAgLm9wdGlvbignbmV0d29yaycsIHsgYWxpYXM6ICduJywgdHlwZTogJ3N0cmluZycsIGRlbWFuZE9wdGlvbjogdHJ1ZSB9KVxuICAgICAgLm9wdGlvbigncGFyc2VTY3JpcHRBc20nLCB7IGFsaWFzOiAnc2NyaXB0YXNtJywgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSB9KVxuICAgICAgLm9wdGlvbigncGFyc2VTY3JpcHREYXRhJywgeyBhbGlhczogJ3NjcmlwdGRhdGEnLCB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlIH0pXG4gICAgICAub3B0aW9uKCdwYXJzZVNpZ25hdHVyZURhdGEnLCB7IGFsaWFzOiAnc2lnZGF0YScsIHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UgfSlcbiAgICAgIC5vcHRpb24oJ3BhcnNlT3V0cHV0U2NyaXB0JywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlIH0pXG4gICAgICAub3B0aW9uKCdwYXJzZUFzVW5rbm93bicsIHtcbiAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdzaG93IHBsYWluIEphdmFzY3JpcHQgb2JqZWN0IHdpdGhvdXQgYW55IHBvc3QtcHJvY2Vzc2luZycsXG4gICAgICB9KVxuICAgICAgLm9wdGlvbignbWF4T3V0cHV0cycsIHsgdHlwZTogJ251bWJlcicgfSlcbiAgICAgIC5vcHRpb24oJ3ZpbicsIHsgdHlwZTogJ251bWJlcicgfSlcbiAgICAgIC5hcnJheSgndmluJylcbiAgICAgIC5vcHRpb24oJ3ZvdXQnLCB7IHR5cGU6ICdudW1iZXInIH0pXG4gICAgICAuYXJyYXkoJ3ZvdXQnKVxuICAgICAgLm9wdGlvbignZmluYWxpemUnLCB7XG4gICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnZmluYWxpemUgUFNCVCBhbmQgcGFyc2UgcmVzdWx0IGluc3RlYWQgb2YgUFNCVCcsXG4gICAgICB9KVxuICAgICAgLm9wdGlvbignYWxsJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlIH0pXG4gICAgICAub3B0aW9uKCdjYWNoZScsIHtcbiAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgZGVzY3JpcHRpb246ICd1c2UgbG9jYWwgY2FjaGUgZm9yIGh0dHAgcmVzcG9uc2VzJyxcbiAgICAgIH0pXG4gICAgICAub3B0aW9uKCdmb3JtYXQnLCB7IGNob2ljZXM6IFsndHJlZScsICdqc29uJ10sIGRlZmF1bHQ6ICd0cmVlJyB9IGFzIGNvbnN0KVxuICAgICAgLm9wdGlvbigncGFyc2VFcnJvcicsIHsgY2hvaWNlczogWydjb250aW51ZScsICd0aHJvdyddLCBkZWZhdWx0OiAnY29udGludWUnIH0gYXMgY29uc3QpO1xuICB9LFxuXG4gIGFzeW5jIGhhbmRsZXIoYXJndjogeWFyZ3MuQXJndW1lbnRzPEFyZ3NQYXJzZVRyYW5zYWN0aW9uPik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG5ldHdvcmsgPSBnZXROZXR3b3JrKGFyZ3YpO1xuICAgIGxldCBkYXRhO1xuXG4gICAgY29uc3QgaHR0cENsaWVudCA9IGF3YWl0IGdldENsaWVudCh7IGNhY2hlOiBhcmd2LmNhY2hlIH0pO1xuXG4gICAgaWYgKGFyZ3YudHhpZCkge1xuICAgICAgZGF0YSA9IGF3YWl0IGZldGNoVHJhbnNhY3Rpb25IZXgoaHR0cENsaWVudCwgYXJndi50eGlkLCBuZXR3b3JrKTtcbiAgICB9XG5cbiAgICBpZiAoYXJndi5zdGRpbiB8fCBhcmd2LnBhdGggPT09ICctJykge1xuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjb25mbGljdGluZyBhcmd1bWVudHNgKTtcbiAgICAgIH1cbiAgICAgIGNvbnNvbGUubG9nKCdSZWFkaW5nIGZyb20gc3RkaW4uIFBsZWFzZSBwYXN0ZSBoZXgtZW5jb2RlZCB0cmFuc2FjdGlvbiBkYXRhLicpO1xuICAgICAgY29uc29sZS5sb2coJ0FmdGVyIGluc2VydGluZyBkYXRhLCBwcmVzcyBDdHJsLUQgdG8gZmluaXNoLiBQcmVzcyBDdHJsLUMgdG8gY2FuY2VsLicpO1xuICAgICAgaWYgKHByb2Nlc3Muc3RkaW4uaXNUVFkpIHtcbiAgICAgICAgZGF0YSA9IGF3YWl0IHJlYWRTdGRpbigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YSA9IGF3YWl0IGZzLnByb21pc2VzLnJlYWRGaWxlKCcvZGV2L3N0ZGluJywgJ3V0ZjgnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYXJndi5jbGlwYm9hcmQpIHtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgY29uZmxpY3RpbmcgYXJndW1lbnRzYCk7XG4gICAgICB9XG4gICAgICBkYXRhID0gYXdhaXQgY2xpcGJvYXJkeS5yZWFkKCk7XG4gICAgfVxuXG4gICAgaWYgKGFyZ3YucGF0aCkge1xuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjb25mbGljdGluZyBhcmd1bWVudHNgKTtcbiAgICAgIH1cbiAgICAgIGRhdGEgPSAoYXdhaXQgZnMucHJvbWlzZXMucmVhZEZpbGUoYXJndi5wYXRoLCAndXRmOCcpKS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmIChhcmd2LmRhdGEpIHtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgY29uZmxpY3RpbmcgYXJndW1lbnRzYCk7XG4gICAgICB9XG4gICAgICBkYXRhID0gYXJndi5kYXRhO1xuICAgIH1cblxuICAgIC8vIHN0cmlwIHdoaXRlc3BhY2VcbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgbm8gdHhkYXRhYCk7XG4gICAgfVxuXG4gICAgY29uc3QgYnl0ZXMgPSBzdHJpbmdUb0J1ZmZlcihkYXRhLCBbJ2hleCcsICdiYXNlNjQnXSk7XG5cbiAgICBsZXQgdHggPSB1dHhvbGliLmJpdGdvLmlzUHNidChieXRlcylcbiAgICAgID8gdXR4b2xpYi5iaXRnby5jcmVhdGVQc2J0RnJvbUJ1ZmZlcihieXRlcywgbmV0d29yaylcbiAgICAgIDogdXR4b2xpYi5iaXRnby5jcmVhdGVUcmFuc2FjdGlvbkZyb21CdWZmZXIoYnl0ZXMsIG5ldHdvcmssIHsgYW1vdW50VHlwZTogJ2JpZ2ludCcgfSk7XG5cbiAgICBjb25zdCB7IGlkOiB0eGlkIH0gPSBnZXRQYXJzZXJUeFByb3BlcnRpZXModHgsIHVuZGVmaW5lZCk7XG4gICAgaWYgKHR4IGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb24pIHtcbiAgICAgIGlmIChhcmd2LnR4aWQgJiYgdHhpZCAhPT0gYXJndi50eGlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgY29tcHV0ZWQgdHhpZCBkb2VzIG5vdCBtYXRjaCB0eGlkIGFyZ3VtZW50YCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChhcmd2LmZpbmFsaXplKSB7XG4gICAgICB0eC5maW5hbGl6ZUFsbElucHV0cygpO1xuICAgICAgdHggPSB0eC5leHRyYWN0VHJhbnNhY3Rpb24oKTtcbiAgICB9XG5cbiAgICBpZiAoYXJndi5wYXJzZUFzVW5rbm93bikge1xuICAgICAgY29uc29sZS5sb2coZm9ybWF0U3RyaW5nKHBhcnNlVW5rbm93bihuZXcgUGFyc2VyKCksICd0eCcsIHR4KSwgYXJndikpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChhcmd2LmZldGNoQWxsKSB7XG4gICAgICBhcmd2LmZldGNoU3RhdHVzID0gdHJ1ZTtcbiAgICAgIGFyZ3YuZmV0Y2hJbnB1dHMgPSB0cnVlO1xuICAgICAgYXJndi5mZXRjaFNwZW5kcyA9IHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkID0gZ2V0VHhQYXJzZXIoYXJndikucGFyc2UodHgsIHtcbiAgICAgIHN0YXR1czogYXJndi5mZXRjaFN0YXR1cyAmJiB0eGlkID8gYXdhaXQgZmV0Y2hUcmFuc2FjdGlvblN0YXR1cyhodHRwQ2xpZW50LCB0eGlkLCBuZXR3b3JrKSA6IHVuZGVmaW5lZCxcbiAgICAgIHByZXZPdXRwdXRzOiBhcmd2LmZldGNoSW5wdXRzID8gYXdhaXQgZmV0Y2hQcmV2T3V0cHV0cyhodHRwQ2xpZW50LCB0eCkgOiB1bmRlZmluZWQsXG4gICAgICBwcmV2T3V0cHV0U3BlbmRzOiBhcmd2LmZldGNoU3BlbmRzID8gYXdhaXQgZmV0Y2hQcmV2T3V0cHV0U3BlbmRzKGh0dHBDbGllbnQsIHR4KSA6IHVuZGVmaW5lZCxcbiAgICAgIG91dHB1dFNwZW5kczpcbiAgICAgICAgYXJndi5mZXRjaFNwZW5kcyAmJiB0eCBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uXG4gICAgICAgICAgPyBhd2FpdCBmZXRjaE91dHB1dFNwZW5kcyhodHRwQ2xpZW50LCB0eClcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9KTtcblxuICAgIGNvbnNvbGUubG9nKGZvcm1hdFN0cmluZyhwYXJzZWQsIGFyZ3YpKTtcbiAgfSxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBjbWRQYXJzZUFkZHJlc3MgPSB7XG4gIGNvbW1hbmQ6ICdwYXJzZUFkZHJlc3MgW2FkZHJlc3NdJyxcbiAgYWxpYXNlczogWydhZGRyZXNzJ10sXG4gIGRlc2NyaWJlOiAncGFyc2UgYWRkcmVzcycsXG4gIGJ1aWxkZXIoYjogeWFyZ3MuQXJndjx1bmtub3duPik6IHlhcmdzLkFyZ3Y8QXJnc1BhcnNlQWRkcmVzcz4ge1xuICAgIHJldHVybiBiXG4gICAgICAub3B0aW9uKCduZXR3b3JrJywgeyBhbGlhczogJ24nLCB0eXBlOiAnc3RyaW5nJyB9KVxuICAgICAgLm9wdGlvbignZm9ybWF0JywgeyBjaG9pY2VzOiBbJ3RyZWUnLCAnanNvbiddLCBkZWZhdWx0OiAndHJlZScgfSBhcyBjb25zdClcbiAgICAgIC5vcHRpb24oJ2NvbnZlcnQnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UgfSlcbiAgICAgIC5vcHRpb24oJ2FsbCcsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSB9KVxuICAgICAgLnBvc2l0aW9uYWwoJ2FkZHJlc3MnLCB7IHR5cGU6ICdzdHJpbmcnLCBkZW1hbmRPcHRpb246IHRydWUgfSk7XG4gIH0sXG5cbiAgaGFuZGxlcihhcmd2OiB5YXJncy5Bcmd1bWVudHM8QXJnc1BhcnNlQWRkcmVzcz4pOiB2b2lkIHtcbiAgICBjb25zdCBwYXJzZWQgPSBnZXRBZGRyZXNzUGFyc2VyKGFyZ3YpLnBhcnNlKGFyZ3YuYWRkcmVzcyk7XG4gICAgY29uc29sZS5sb2coZm9ybWF0U3RyaW5nKHBhcnNlZCwgYXJndikpO1xuICB9LFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IGNtZFBhcnNlU2NyaXB0ID0ge1xuICBjb21tYW5kOiAncGFyc2VTY3JpcHQgW3NjcmlwdF0nLFxuICBkZXNjcmliZTogJ3BhcnNlIHNjcmlwdCcsXG4gIGJ1aWxkZXIoYjogeWFyZ3MuQXJndjx1bmtub3duPik6IHlhcmdzLkFyZ3Y8QXJnc1BhcnNlU2NyaXB0PiB7XG4gICAgcmV0dXJuIGJcbiAgICAgIC5vcHRpb24oJ25ldHdvcmsnLCB7IGFsaWFzOiAnbicsIHR5cGU6ICdzdHJpbmcnIH0pXG4gICAgICAub3B0aW9uKCdmb3JtYXQnLCB7IGNob2ljZXM6IFsndHJlZScsICdqc29uJ10sIGRlZmF1bHQ6ICd0cmVlJyB9IGFzIGNvbnN0KVxuICAgICAgLm9wdGlvbignYWxsJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlIH0pXG4gICAgICAucG9zaXRpb25hbCgnc2NyaXB0JywgeyB0eXBlOiAnc3RyaW5nJywgZGVtYW5kT3B0aW9uOiB0cnVlIH0pO1xuICB9LFxuICBoYW5kbGVyKGFyZ3Y6IHlhcmdzLkFyZ3VtZW50czxBcmdzUGFyc2VTY3JpcHQ+KTogdm9pZCB7XG4gICAgY29uc3Qgc2NyaXB0ID0gc3RyaW5nVG9CdWZmZXIoYXJndi5zY3JpcHQsICdoZXgnKTtcbiAgICBjb25zdCBwYXJzZWQgPSBnZXRTY3JpcHRQYXJzZXIoYXJndikucGFyc2Uoc2NyaXB0KTtcbiAgICBjb25zb2xlLmxvZyhmb3JtYXRTdHJpbmcocGFyc2VkLCB7IC4uLmFyZ3YsIGFsbDogdHJ1ZSB9KSk7XG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgY21kR2VuZXJhdGVBZGRyZXNzID0ge1xuICBjb21tYW5kOiAnZ2VuZXJhdGVBZGRyZXNzZXMnLFxuICBkZXNjcmliZTogJ2dlbmVyYXRlIGFkZHJlc3NlcycsXG4gIGJ1aWxkZXIoYjogeWFyZ3MuQXJndjx1bmtub3duPik6IHlhcmdzLkFyZ3Y8QXJnc0dlbmVyYXRlQWRkcmVzcz4ge1xuICAgIHJldHVybiBiXG4gICAgICAub3B0aW9uKCduZXR3b3JrJywgeyBhbGlhczogJ24nLCB0eXBlOiAnc3RyaW5nJyB9KVxuICAgICAgLm9wdGlvbigndXNlcktleScsIHsgdHlwZTogJ3N0cmluZycsIGRlbWFuZE9wdGlvbjogdHJ1ZSB9KVxuICAgICAgLm9wdGlvbigndXNlcktleVByZWZpeCcsIHsgdHlwZTogJ3N0cmluZycsIGRlZmF1bHQ6ICcwLzAnIH0pXG4gICAgICAub3B0aW9uKCdiYWNrdXBLZXknLCB7IHR5cGU6ICdzdHJpbmcnLCBkZW1hbmRPcHRpb246IHRydWUgfSlcbiAgICAgIC5vcHRpb24oJ2JhY2t1cEtleVByZWZpeCcsIHsgdHlwZTogJ3N0cmluZycsIGRlZmF1bHQ6ICcwLzAnIH0pXG4gICAgICAub3B0aW9uKCdiaXRnb0tleScsIHsgdHlwZTogJ3N0cmluZycsIGRlbWFuZE9wdGlvbjogdHJ1ZSB9KVxuICAgICAgLm9wdGlvbignYml0Z29LZXlQcmVmaXgnLCB7IHR5cGU6ICdzdHJpbmcnLCBkZWZhdWx0OiAnMC8wJyB9KVxuICAgICAgLm9wdGlvbignZm9ybWF0Jywge1xuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgZGVmYXVsdDogJyVwMFxcdCVhJyxcbiAgICAgICAgZGVzY3JpcHRpb246IGBGb3JtYXQgc3RyaW5nLiBQbGFjZWhvbGRlcnM6ICR7Z2V0QWRkcmVzc1BsYWNlaG9sZGVyRGVzY3JpcHRpb24oKX1gLFxuICAgICAgfSlcbiAgICAgIC5vcHRpb24oJ2NoYWluJywgeyB0eXBlOiAnbnVtYmVyJywgZGVzY3JpcHRpb246ICdBZGRyZXNzIGNoYWluJyB9KVxuICAgICAgLmFycmF5KCdjaGFpbicpXG4gICAgICAub3B0aW9uKCdpbmRleCcsIHtcbiAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnQWRkcmVzcyBpbmRleC4gQ2FuIGJlIGdpdmVuIGFzIGEgcmFuZ2UgKGUuZy4gMC05OSkuIFRha2VzIHByZWNlZGVuY2Ugb3ZlciAtLWxpbWl0LicsXG4gICAgICB9KVxuICAgICAgLmFycmF5KCdpbmRleCcpXG4gICAgICAub3B0aW9uKCdsaW1pdCcsIHtcbiAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnQWxpYXMgZm9yIC0taW5kZXggd2l0aCByYW5nZSBzdGFydGluZyBhdCAwIHRvIGxpbWl0LTEuJyxcbiAgICAgICAgZGVmYXVsdDogMTAwLFxuICAgICAgfSk7XG4gIH0sXG4gIGhhbmRsZXIoYXJndjogeWFyZ3MuQXJndW1lbnRzPEFyZ3NHZW5lcmF0ZUFkZHJlc3M+KTogdm9pZCB7XG4gICAgbGV0IGluZGV4UmFuZ2U6IG51bWJlcltdO1xuICAgIGlmIChhcmd2LmluZGV4KSB7XG4gICAgICBpbmRleFJhbmdlID0gcGFyc2VJbmRleFJhbmdlKGFyZ3YuaW5kZXgpO1xuICAgIH0gZWxzZSBpZiAoYXJndi5saW1pdCkge1xuICAgICAgaW5kZXhSYW5nZSA9IGdldFJhbmdlKDAsIGFyZ3YubGltaXQgLSAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBubyBpbmRleCBvciBsaW1pdGApO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGFkZHJlc3Mgb2YgZ2VuZXJhdGVBZGRyZXNzKHtcbiAgICAgIC4uLmFyZ3YsXG4gICAgICBpbmRleDogaW5kZXhSYW5nZSxcbiAgICAgIG5ldHdvcms6IGdldE5ldHdvcmtGb3JOYW1lKGFyZ3YubmV0d29yayA/PyAnYml0Y29pbicpLFxuICAgIH0pKSB7XG4gICAgICBpZiAoYXJndi5mb3JtYXQgPT09ICd0cmVlJykge1xuICAgICAgICBjb25zb2xlLmxvZyhmb3JtYXRBZGRyZXNzVHJlZShhZGRyZXNzKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhmb3JtYXRBZGRyZXNzV2l0aEZvcm1hdFN0cmluZyhhZGRyZXNzLCBhcmd2LmZvcm1hdCkpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBjbWRQYXJzZVhwdWIgPSB7XG4gIGNvbW1hbmQ6ICdwYXJzZVhwdWIgW3hwdWJdJyxcbiAgZGVzY3JpYmU6ICdzaG93IHhwdWIgaW5mbycsXG4gIGJ1aWxkZXIoYjogeWFyZ3MuQXJndjx1bmtub3duPik6IHlhcmdzLkFyZ3Y8eyB4cHViOiBzdHJpbmc7IGRlcml2ZT86IHN0cmluZyB9ICYgRm9ybWF0U3RyaW5nQXJncz4ge1xuICAgIHJldHVybiBiXG4gICAgICAucG9zaXRpb25hbCgneHB1YicsIHsgdHlwZTogJ3N0cmluZycsIGRlbWFuZE9wdGlvbjogdHJ1ZSB9KVxuICAgICAgLm9wdGlvbignZm9ybWF0JywgeyBjaG9pY2VzOiBbJ3RyZWUnLCAnanNvbiddLCBkZWZhdWx0OiAndHJlZScgfSBhcyBjb25zdClcbiAgICAgIC5vcHRpb24oJ2FsbCcsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSB9KVxuICAgICAgLm9wdGlvbignZGVyaXZlJywgeyB0eXBlOiAnc3RyaW5nJywgZGVzY3JpcHRpb246ICdzaG93IHhwdWIgZGVyaXZlZCB3aXRoIHBhdGgnIH0pO1xuICB9LFxuICBoYW5kbGVyKGFyZ3Y6IHlhcmdzLkFyZ3VtZW50czx7IHhwdWI6IHN0cmluZzsgZGVyaXZlPzogc3RyaW5nIH0gJiBGb3JtYXRTdHJpbmdBcmdzPik6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKGZvcm1hdFN0cmluZyhwYXJzZVhwdWIoYXJndi54cHViLCB7IGRlcml2ZTogYXJndi5kZXJpdmUgfSksIGFyZ3YpKTtcbiAgfSxcbn07XG4iXX0=
@@ -1,9 +1,10 @@
1
1
  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
+ import { ParserTx } from './ParserTx';
4
5
  export declare function fetchTransactionHex(httpClient: HttpClient, txid: string, network: utxolib.Network): Promise<string>;
5
6
  export declare function fetchTransactionStatus(httpClient: HttpClient, txid: string, network: utxolib.Network): Promise<blockapis.TransactionStatus>;
6
- export declare function fetchPrevOutputs(httpClient: HttpClient, tx: utxolib.bitgo.UtxoTransaction): Promise<utxolib.TxOutput[]>;
7
- export declare function fetchPrevOutputSpends(httpClient: HttpClient, tx: utxolib.bitgo.UtxoTransaction): Promise<blockapis.OutputSpend[]>;
8
- export declare function fetchOutputSpends(httpClient: HttpClient, tx: utxolib.bitgo.UtxoTransaction): Promise<blockapis.OutputSpend[]>;
7
+ export declare function fetchPrevOutputs(httpClient: HttpClient, tx: ParserTx): Promise<utxolib.TxOutput<bigint>[]>;
8
+ export declare function fetchPrevOutputSpends(httpClient: HttpClient, tx: utxolib.bitgo.UtxoTransaction<bigint> | utxolib.bitgo.UtxoPsbt): Promise<blockapis.OutputSpend[]>;
9
+ export declare function fetchOutputSpends(httpClient: HttpClient, tx: utxolib.bitgo.UtxoTransaction<bigint>): Promise<blockapis.OutputSpend[]>;
9
10
  //# sourceMappingURL=fetch.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../src/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,KAAK,SAAS,MAAM,uBAAuB,CAAC;AAEnD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAqCnD,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,CAAC,OAAO,GACvB,OAAO,CAAC,MAAM,CAAC,CAEjB;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,CACpC,UAAU,EAAE,UAAU,EACtB,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,eAAe,GAChC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAE7B;AAED,wBAAsB,qBAAqB,CACzC,UAAU,EAAE,UAAU,EACtB,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,eAAe,GAChC,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAKlC;AAED,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,UAAU,EACtB,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,eAAe,GAChC,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAMlC"}
1
+ {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../src/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,KAAK,SAAS,MAAM,uBAAuB,CAAC;AAEnD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AA6CtC,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,CAAC,OAAO,GACvB,OAAO,CAAC,MAAM,CAAC,CAEjB;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"}
package/dist/src/fetch.js CHANGED
@@ -4,6 +4,14 @@ exports.fetchOutputSpends = exports.fetchPrevOutputSpends = exports.fetchPrevOut
4
4
  const utxolib = require("@bitgo-beta/utxo-lib");
5
5
  const blockapis = require("@bitgo-beta/blockapis");
6
6
  const statics_1 = require("@bitgo-beta/statics");
7
+ function getTxOutPoints(tx) {
8
+ if (tx instanceof utxolib.bitgo.UtxoTransaction) {
9
+ return tx.ins.map((i) => utxolib.bitgo.getOutputIdForInput(i));
10
+ }
11
+ else {
12
+ return tx.txInputs.map((i) => utxolib.bitgo.getOutputIdForInput(i));
13
+ }
14
+ }
7
15
  function getCoinName(network) {
8
16
  const networkName = utxolib.getNetworkName(network);
9
17
  // the bitcoincash network actually has two coins: bch and bcha - hardcode bch by default here
@@ -42,11 +50,14 @@ async function fetchTransactionStatus(httpClient, txid, network) {
42
50
  }
43
51
  exports.fetchTransactionStatus = fetchTransactionStatus;
44
52
  async function fetchPrevOutputs(httpClient, tx) {
45
- return await blockapis.fetchInputs(tx.ins, getApi(httpClient, tx.network), tx.network);
53
+ return (await blockapis.fetchInputs(getTxOutPoints(tx), getApi(httpClient, tx.network), tx.network)).map((v) => ({
54
+ ...v,
55
+ value: BigInt(v.value),
56
+ }));
46
57
  }
47
58
  exports.fetchPrevOutputs = fetchPrevOutputs;
48
59
  async function fetchPrevOutputSpends(httpClient, tx) {
49
- return await blockapis.fetchTransactionSpends(tx.ins.map((i) => utxolib.bitgo.getOutputIdForInput(i)), getApi(httpClient, tx.network));
60
+ return await blockapis.fetchTransactionSpends(getTxOutPoints(tx), getApi(httpClient, tx.network));
50
61
  }
51
62
  exports.fetchPrevOutputSpends = fetchPrevOutputSpends;
52
63
  async function fetchOutputSpends(httpClient, tx) {
@@ -54,8 +65,9 @@ async function fetchOutputSpends(httpClient, tx) {
54
65
  return await getApi(httpClient, tx.network).getTransactionSpends(tx.getId());
55
66
  }
56
67
  catch (e) {
68
+ console.error(`error fetching spends for tx ${tx.getId()}: ${e}`);
57
69
  return [];
58
70
  }
59
71
  }
60
72
  exports.fetchOutputSpends = fetchOutputSpends;
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmV0Y2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZmV0Y2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsZ0RBQWdEO0FBQ2hELG1EQUFtRDtBQUNuRCxpREFBc0Q7QUFHdEQsU0FBUyxXQUFXLENBQUMsT0FBd0I7SUFDM0MsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUVwRCw4RkFBOEY7SUFDOUYsUUFBUSxXQUFXLEVBQUU7UUFDbkIsS0FBSyxhQUFhO1lBQ2hCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsS0FBSyxvQkFBb0I7WUFDdkIsT0FBTyxNQUFNLENBQUM7S0FDakI7SUFFRCxNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQUcsZUFBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FDOUMsSUFBSSxZQUFZLGtCQUFRLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUN4RixDQUFDO0lBQ0YsUUFBUSxPQUFPLENBQUMsTUFBTSxFQUFFO1FBQ3RCLEtBQUssQ0FBQztZQUNKLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDeEQsS0FBSyxDQUFDO1lBQ0osT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEI7WUFDRSxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixXQUFXLEtBQUssT0FBTyxFQUFFLENBQUMsQ0FBQztLQUN4RTtBQUNILENBQUM7QUFFRCxTQUFTLE1BQU0sQ0FBQyxVQUFzQixFQUFFLE9BQXdCO0lBQzlELE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN0QyxRQUFRLFFBQVEsRUFBRTtRQUNoQixLQUFLLEtBQUssQ0FBQztRQUNYLEtBQUssTUFBTTtZQUNULE9BQU8sU0FBUyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUNwRTtZQUNFLE9BQU8sU0FBUyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztLQUNwRTtBQUNILENBQUM7QUFFTSxLQUFLLFVBQVUsbUJBQW1CLENBQ3ZDLFVBQXNCLEVBQ3RCLElBQVksRUFDWixPQUF3QjtJQUV4QixPQUFPLE1BQU0sTUFBTSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuRSxDQUFDO0FBTkQsa0RBTUM7QUFFTSxLQUFLLFVBQVUsc0JBQXNCLENBQzFDLFVBQXNCLEVBQ3RCLElBQVksRUFDWixPQUF3QjtJQUV4QixPQUFPLE1BQU0sTUFBTSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN0RSxDQUFDO0FBTkQsd0RBTUM7QUFFTSxLQUFLLFVBQVUsZ0JBQWdCLENBQ3BDLFVBQXNCLEVBQ3RCLEVBQWlDO0lBRWpDLE9BQU8sTUFBTSxTQUFTLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3pGLENBQUM7QUFMRCw0Q0FLQztBQUVNLEtBQUssVUFBVSxxQkFBcUIsQ0FDekMsVUFBc0IsRUFDdEIsRUFBaUM7SUFFakMsT0FBTyxNQUFNLFNBQVMsQ0FBQyxzQkFBc0IsQ0FDM0MsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDdkQsTUFBTSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQy9CLENBQUM7QUFDSixDQUFDO0FBUkQsc0RBUUM7QUFFTSxLQUFLLFVBQVUsaUJBQWlCLENBQ3JDLFVBQXNCLEVBQ3RCLEVBQWlDO0lBRWpDLElBQUk7UUFDRixPQUFPLE1BQU0sTUFBTSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDOUU7SUFBQyxPQUFPLENBQUMsRUFBRTtRQUNWLE9BQU8sRUFBRSxDQUFDO0tBQ1g7QUFDSCxDQUFDO0FBVEQsOENBU0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCAqIGFzIGJsb2NrYXBpcyBmcm9tICdAYml0Z28tYmV0YS9ibG9ja2FwaXMnO1xuaW1wb3J0IHsgY29pbnMsIFV0eG9Db2luIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGJpdGdvLWJldGEvYmxvY2thcGlzJztcblxuZnVuY3Rpb24gZ2V0Q29pbk5hbWUobmV0d29yazogdXR4b2xpYi5OZXR3b3JrKTogc3RyaW5nIHtcbiAgY29uc3QgbmV0d29ya05hbWUgPSB1dHhvbGliLmdldE5ldHdvcmtOYW1lKG5ldHdvcmspO1xuXG4gIC8vIHRoZSBiaXRjb2luY2FzaCBuZXR3b3JrIGFjdHVhbGx5IGhhcyB0d28gY29pbnM6IGJjaCBhbmQgYmNoYSAtIGhhcmRjb2RlIGJjaCBieSBkZWZhdWx0IGhlcmVcbiAgc3dpdGNoIChuZXR3b3JrTmFtZSkge1xuICAgIGNhc2UgJ2JpdGNvaW5jYXNoJzpcbiAgICAgIHJldHVybiAnYmNoJztcbiAgICBjYXNlICdiaXRjb2luY2FzaFRlc3RuZXQnOlxuICAgICAgcmV0dXJuICd0YmNoJztcbiAgfVxuXG4gIGNvbnN0IG1hdGNoZXMgPSBbLi4uY29pbnNdLmZsYXRNYXAoKFssIGNvaW5dKSA9PlxuICAgIGNvaW4gaW5zdGFuY2VvZiBVdHhvQ29pbiAmJiBjb2luLm5ldHdvcmsudXR4b2xpYk5hbWUgPT09IG5ldHdvcmtOYW1lID8gW2NvaW4ubmFtZV0gOiBbXVxuICApO1xuICBzd2l0Y2ggKG1hdGNoZXMubGVuZ3RoKSB7XG4gICAgY2FzZSAwOlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBubyBjb2luIGZvciBuZXR3b3JrICR7bmV0d29ya05hbWV9YCk7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIG1hdGNoZXNbMF07XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgbW9yZSB0aGFuIG9uZSBjb2luIGZvciAke25ldHdvcmtOYW1lfTogJHttYXRjaGVzfWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEFwaShodHRwQ2xpZW50OiBIdHRwQ2xpZW50LCBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmspOiBibG9ja2FwaXMuVXR4b0FwaSB7XG4gIGNvbnN0IGNvaW5OYW1lID0gZ2V0Q29pbk5hbWUobmV0d29yayk7XG4gIHN3aXRjaCAoY29pbk5hbWUpIHtcbiAgICBjYXNlICdidGMnOlxuICAgIGNhc2UgJ3RidGMnOlxuICAgICAgcmV0dXJuIGJsb2NrYXBpcy5CbG9ja3N0cmVhbUFwaS5mb3JDb2luKGNvaW5OYW1lLCB7IGh0dHBDbGllbnQgfSk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBibG9ja2FwaXMuQmxvY2tjaGFpckFwaS5mb3JDb2luKGNvaW5OYW1lLCB7IGh0dHBDbGllbnQgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoVHJhbnNhY3Rpb25IZXgoXG4gIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXG4gIHR4aWQ6IHN0cmluZyxcbiAgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gYXdhaXQgZ2V0QXBpKGh0dHBDbGllbnQsIG5ldHdvcmspLmdldFRyYW5zYWN0aW9uSGV4KHR4aWQpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hUcmFuc2FjdGlvblN0YXR1cyhcbiAgaHR0cENsaWVudDogSHR0cENsaWVudCxcbiAgdHhpZDogc3RyaW5nLFxuICBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmtcbik6IFByb21pc2U8YmxvY2thcGlzLlRyYW5zYWN0aW9uU3RhdHVzPiB7XG4gIHJldHVybiBhd2FpdCBnZXRBcGkoaHR0cENsaWVudCwgbmV0d29yaykuZ2V0VHJhbnNhY3Rpb25TdGF0dXModHhpZCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaFByZXZPdXRwdXRzKFxuICBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxuICB0eDogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb25cbik6IFByb21pc2U8dXR4b2xpYi5UeE91dHB1dFtdPiB7XG4gIHJldHVybiBhd2FpdCBibG9ja2FwaXMuZmV0Y2hJbnB1dHModHguaW5zLCBnZXRBcGkoaHR0cENsaWVudCwgdHgubmV0d29yayksIHR4Lm5ldHdvcmspO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hQcmV2T3V0cHV0U3BlbmRzKFxuICBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxuICB0eDogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb25cbik6IFByb21pc2U8YmxvY2thcGlzLk91dHB1dFNwZW5kW10+IHtcbiAgcmV0dXJuIGF3YWl0IGJsb2NrYXBpcy5mZXRjaFRyYW5zYWN0aW9uU3BlbmRzKFxuICAgIHR4Lmlucy5tYXAoKGkpID0+IHV0eG9saWIuYml0Z28uZ2V0T3V0cHV0SWRGb3JJbnB1dChpKSksXG4gICAgZ2V0QXBpKGh0dHBDbGllbnQsIHR4Lm5ldHdvcmspXG4gICk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaE91dHB1dFNwZW5kcyhcbiAgaHR0cENsaWVudDogSHR0cENsaWVudCxcbiAgdHg6IHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uXG4pOiBQcm9taXNlPGJsb2NrYXBpcy5PdXRwdXRTcGVuZFtdPiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGdldEFwaShodHRwQ2xpZW50LCB0eC5uZXR3b3JrKS5nZXRUcmFuc2FjdGlvblNwZW5kcyh0eC5nZXRJZCgpKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxufVxuIl19
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmV0Y2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZmV0Y2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsZ0RBQWdEO0FBQ2hELG1EQUFtRDtBQUNuRCxpREFBc0Q7QUFJdEQsU0FBUyxjQUFjLENBQUMsRUFBWTtJQUNsQyxJQUFJLEVBQUUsWUFBWSxPQUFPLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRTtRQUMvQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDaEU7U0FBTTtRQUNMLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNyRTtBQUNILENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxPQUF3QjtJQUMzQyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRXBELDhGQUE4RjtJQUM5RixRQUFRLFdBQVcsRUFBRTtRQUNuQixLQUFLLGFBQWE7WUFDaEIsT0FBTyxLQUFLLENBQUM7UUFDZixLQUFLLG9CQUFvQjtZQUN2QixPQUFPLE1BQU0sQ0FBQztLQUNqQjtJQUVELE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBRyxlQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUM5QyxJQUFJLFlBQVksa0JBQVEsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQ3hGLENBQUM7SUFDRixRQUFRLE9BQU8sQ0FBQyxNQUFNLEVBQUU7UUFDdEIsS0FBSyxDQUFDO1lBQ0osTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUN4RCxLQUFLLENBQUM7WUFDSixPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQjtZQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLFdBQVcsS0FBSyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0tBQ3hFO0FBQ0gsQ0FBQztBQUVELFNBQVMsTUFBTSxDQUFDLFVBQXNCLEVBQUUsT0FBd0I7SUFDOUQsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RDLFFBQVEsUUFBUSxFQUFFO1FBQ2hCLEtBQUssS0FBSyxDQUFDO1FBQ1gsS0FBSyxNQUFNO1lBQ1QsT0FBTyxTQUFTLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFO1lBQ0UsT0FBTyxTQUFTLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0tBQ3BFO0FBQ0gsQ0FBQztBQUVNLEtBQUssVUFBVSxtQkFBbUIsQ0FDdkMsVUFBc0IsRUFDdEIsSUFBWSxFQUNaLE9BQXdCO0lBRXhCLE9BQU8sTUFBTSxNQUFNLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25FLENBQUM7QUFORCxrREFNQztBQUVNLEtBQUssVUFBVSxzQkFBc0IsQ0FDMUMsVUFBc0IsRUFDdEIsSUFBWSxFQUNaLE9BQXdCO0lBRXhCLE9BQU8sTUFBTSxNQUFNLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3RFLENBQUM7QUFORCx3REFNQztBQUVNLEtBQUssVUFBVSxnQkFBZ0IsQ0FBQyxVQUFzQixFQUFFLEVBQVk7SUFDekUsT0FBTyxDQUFDLE1BQU0sU0FBUyxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQy9HLEdBQUcsQ0FBQztRQUNKLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztLQUN2QixDQUFDLENBQUMsQ0FBQztBQUNOLENBQUM7QUFMRCw0Q0FLQztBQUVNLEtBQUssVUFBVSxxQkFBcUIsQ0FDekMsVUFBc0IsRUFDdEIsRUFBa0U7SUFFbEUsT0FBTyxNQUFNLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNwRyxDQUFDO0FBTEQsc0RBS0M7QUFFTSxLQUFLLFVBQVUsaUJBQWlCLENBQ3JDLFVBQXNCLEVBQ3RCLEVBQXlDO0lBRXpDLElBQUk7UUFDRixPQUFPLE1BQU0sTUFBTSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDOUU7SUFBQyxPQUFPLENBQUMsRUFBRTtRQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsZ0NBQWdDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLE9BQU8sRUFBRSxDQUFDO0tBQ1g7QUFDSCxDQUFDO0FBVkQsOENBVUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCAqIGFzIGJsb2NrYXBpcyBmcm9tICdAYml0Z28tYmV0YS9ibG9ja2FwaXMnO1xuaW1wb3J0IHsgY29pbnMsIFV0eG9Db2luIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGJpdGdvLWJldGEvYmxvY2thcGlzJztcbmltcG9ydCB7IFBhcnNlclR4IH0gZnJvbSAnLi9QYXJzZXJUeCc7XG5cbmZ1bmN0aW9uIGdldFR4T3V0UG9pbnRzKHR4OiBQYXJzZXJUeCk6IHV0eG9saWIuYml0Z28uVHhPdXRQb2ludFtdIHtcbiAgaWYgKHR4IGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb24pIHtcbiAgICByZXR1cm4gdHguaW5zLm1hcCgoaSkgPT4gdXR4b2xpYi5iaXRnby5nZXRPdXRwdXRJZEZvcklucHV0KGkpKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdHgudHhJbnB1dHMubWFwKChpKSA9PiB1dHhvbGliLmJpdGdvLmdldE91dHB1dElkRm9ySW5wdXQoaSkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldENvaW5OYW1lKG5ldHdvcms6IHV0eG9saWIuTmV0d29yayk6IHN0cmluZyB7XG4gIGNvbnN0IG5ldHdvcmtOYW1lID0gdXR4b2xpYi5nZXROZXR3b3JrTmFtZShuZXR3b3JrKTtcblxuICAvLyB0aGUgYml0Y29pbmNhc2ggbmV0d29yayBhY3R1YWxseSBoYXMgdHdvIGNvaW5zOiBiY2ggYW5kIGJjaGEgLSBoYXJkY29kZSBiY2ggYnkgZGVmYXVsdCBoZXJlXG4gIHN3aXRjaCAobmV0d29ya05hbWUpIHtcbiAgICBjYXNlICdiaXRjb2luY2FzaCc6XG4gICAgICByZXR1cm4gJ2JjaCc7XG4gICAgY2FzZSAnYml0Y29pbmNhc2hUZXN0bmV0JzpcbiAgICAgIHJldHVybiAndGJjaCc7XG4gIH1cblxuICBjb25zdCBtYXRjaGVzID0gWy4uLmNvaW5zXS5mbGF0TWFwKChbLCBjb2luXSkgPT5cbiAgICBjb2luIGluc3RhbmNlb2YgVXR4b0NvaW4gJiYgY29pbi5uZXR3b3JrLnV0eG9saWJOYW1lID09PSBuZXR3b3JrTmFtZSA/IFtjb2luLm5hbWVdIDogW11cbiAgKTtcbiAgc3dpdGNoIChtYXRjaGVzLmxlbmd0aCkge1xuICAgIGNhc2UgMDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgbm8gY29pbiBmb3IgbmV0d29yayAke25ldHdvcmtOYW1lfWApO1xuICAgIGNhc2UgMTpcbiAgICAgIHJldHVybiBtYXRjaGVzWzBdO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYG1vcmUgdGhhbiBvbmUgY29pbiBmb3IgJHtuZXR3b3JrTmFtZX06ICR7bWF0Y2hlc31gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRBcGkoaHR0cENsaWVudDogSHR0cENsaWVudCwgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrKTogYmxvY2thcGlzLlV0eG9BcGkge1xuICBjb25zdCBjb2luTmFtZSA9IGdldENvaW5OYW1lKG5ldHdvcmspO1xuICBzd2l0Y2ggKGNvaW5OYW1lKSB7XG4gICAgY2FzZSAnYnRjJzpcbiAgICBjYXNlICd0YnRjJzpcbiAgICAgIHJldHVybiBibG9ja2FwaXMuQmxvY2tzdHJlYW1BcGkuZm9yQ29pbihjb2luTmFtZSwgeyBodHRwQ2xpZW50IH0pO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gYmxvY2thcGlzLkJsb2NrY2hhaXJBcGkuZm9yQ29pbihjb2luTmFtZSwgeyBodHRwQ2xpZW50IH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaFRyYW5zYWN0aW9uSGV4KFxuICBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxuICB0eGlkOiBzdHJpbmcsXG4gIG5ldHdvcms6IHV0eG9saWIuTmV0d29ya1xuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIGF3YWl0IGdldEFwaShodHRwQ2xpZW50LCBuZXR3b3JrKS5nZXRUcmFuc2FjdGlvbkhleCh0eGlkKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoVHJhbnNhY3Rpb25TdGF0dXMoXG4gIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXG4gIHR4aWQ6IHN0cmluZyxcbiAgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrXG4pOiBQcm9taXNlPGJsb2NrYXBpcy5UcmFuc2FjdGlvblN0YXR1cz4ge1xuICByZXR1cm4gYXdhaXQgZ2V0QXBpKGh0dHBDbGllbnQsIG5ldHdvcmspLmdldFRyYW5zYWN0aW9uU3RhdHVzKHR4aWQpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hQcmV2T3V0cHV0cyhodHRwQ2xpZW50OiBIdHRwQ2xpZW50LCB0eDogUGFyc2VyVHgpOiBQcm9taXNlPHV0eG9saWIuVHhPdXRwdXQ8YmlnaW50PltdPiB7XG4gIHJldHVybiAoYXdhaXQgYmxvY2thcGlzLmZldGNoSW5wdXRzKGdldFR4T3V0UG9pbnRzKHR4KSwgZ2V0QXBpKGh0dHBDbGllbnQsIHR4Lm5ldHdvcmspLCB0eC5uZXR3b3JrKSkubWFwKCh2KSA9PiAoe1xuICAgIC4uLnYsXG4gICAgdmFsdWU6IEJpZ0ludCh2LnZhbHVlKSxcbiAgfSkpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hQcmV2T3V0cHV0U3BlbmRzKFxuICBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxuICB0eDogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248YmlnaW50PiB8IHV0eG9saWIuYml0Z28uVXR4b1BzYnRcbik6IFByb21pc2U8YmxvY2thcGlzLk91dHB1dFNwZW5kW10+IHtcbiAgcmV0dXJuIGF3YWl0IGJsb2NrYXBpcy5mZXRjaFRyYW5zYWN0aW9uU3BlbmRzKGdldFR4T3V0UG9pbnRzKHR4KSwgZ2V0QXBpKGh0dHBDbGllbnQsIHR4Lm5ldHdvcmspKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoT3V0cHV0U3BlbmRzKFxuICBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxuICB0eDogdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb248YmlnaW50PlxuKTogUHJvbWlzZTxibG9ja2FwaXMuT3V0cHV0U3BlbmRbXT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBnZXRBcGkoaHR0cENsaWVudCwgdHgubmV0d29yaykuZ2V0VHJhbnNhY3Rpb25TcGVuZHModHguZ2V0SWQoKSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zb2xlLmVycm9yKGBlcnJvciBmZXRjaGluZyBzcGVuZHMgZm9yIHR4ICR7dHguZ2V0SWQoKX06ICR7ZX1gKTtcbiAgICByZXR1cm4gW107XG4gIH1cbn1cbiJdfQ==