@bitgo-beta/utxo-bin 2.8.3-beta.13 → 2.8.3-beta.1300

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 (154) hide show
  1. package/README.md +107 -86
  2. package/dist/bin/index.js +46 -3
  3. package/dist/src/AddressParser.d.ts +1 -1
  4. package/dist/src/AddressParser.d.ts.map +1 -1
  5. package/dist/src/AddressParser.js +54 -9
  6. package/dist/src/InputParser.d.ts +43 -0
  7. package/dist/src/InputParser.d.ts.map +1 -0
  8. package/dist/src/InputParser.js +282 -0
  9. package/dist/src/OutputParser.d.ts +24 -0
  10. package/dist/src/OutputParser.d.ts.map +1 -0
  11. package/dist/src/OutputParser.js +98 -0
  12. package/dist/src/Parser.d.ts +9 -3
  13. package/dist/src/Parser.d.ts.map +1 -1
  14. package/dist/src/Parser.js +35 -1
  15. package/dist/src/ParserTx.d.ts +27 -0
  16. package/dist/src/ParserTx.d.ts.map +1 -0
  17. package/dist/src/ParserTx.js +126 -0
  18. package/dist/src/ScriptParser.d.ts +23 -0
  19. package/dist/src/ScriptParser.d.ts.map +1 -0
  20. package/dist/src/ScriptParser.js +129 -0
  21. package/dist/src/TxParser.d.ts +12 -8
  22. package/dist/src/TxParser.d.ts.map +1 -1
  23. package/dist/src/TxParser.js +60 -29
  24. package/dist/src/args/format.d.ts +8 -0
  25. package/dist/src/args/format.d.ts.map +1 -0
  26. package/dist/src/args/format.js +15 -0
  27. package/dist/src/args/index.d.ts +5 -0
  28. package/dist/src/args/index.d.ts.map +1 -0
  29. package/dist/src/args/index.js +21 -0
  30. package/dist/src/args/parseNetwork.d.ts +25 -0
  31. package/dist/src/args/parseNetwork.d.ts.map +1 -0
  32. package/dist/src/args/parseNetwork.js +108 -0
  33. package/dist/src/args/parseString.d.ts +40 -0
  34. package/dist/src/args/parseString.d.ts.map +1 -0
  35. package/dist/src/args/parseString.js +153 -0
  36. package/dist/src/args/walletKeys.d.ts +38 -0
  37. package/dist/src/args/walletKeys.d.ts.map +1 -0
  38. package/dist/src/args/walletKeys.js +64 -0
  39. package/dist/src/bip32.d.ts +5 -0
  40. package/dist/src/bip32.d.ts.map +1 -0
  41. package/dist/src/bip32.js +56 -0
  42. package/dist/src/commands/cmdAddress/cmdGenerate.d.ts +21 -0
  43. package/dist/src/commands/cmdAddress/cmdGenerate.d.ts.map +1 -0
  44. package/dist/src/commands/cmdAddress/cmdGenerate.js +89 -0
  45. package/dist/src/commands/cmdAddress/cmdParse.d.ts +20 -0
  46. package/dist/src/commands/cmdAddress/cmdParse.d.ts.map +1 -0
  47. package/dist/src/commands/cmdAddress/cmdParse.js +28 -0
  48. package/dist/src/commands/cmdAddress/index.d.ts +3 -0
  49. package/dist/src/commands/cmdAddress/index.d.ts.map +1 -0
  50. package/dist/src/commands/cmdAddress/index.js +16 -0
  51. package/dist/src/commands/cmdBip32.d.ts +16 -0
  52. package/dist/src/commands/cmdBip32.d.ts.map +1 -0
  53. package/dist/src/commands/cmdBip32.js +78 -0
  54. package/dist/src/commands/cmdDescriptor/fromFixedScript.d.ts +10 -0
  55. package/dist/src/commands/cmdDescriptor/fromFixedScript.d.ts.map +1 -0
  56. package/dist/src/commands/cmdDescriptor/fromFixedScript.js +73 -0
  57. package/dist/src/commands/cmdDescriptor/index.d.ts +4 -0
  58. package/dist/src/commands/cmdDescriptor/index.d.ts.map +1 -0
  59. package/dist/src/commands/cmdDescriptor/index.js +30 -0
  60. package/dist/src/commands/cmdParseScript.d.ts +18 -0
  61. package/dist/src/commands/cmdParseScript.d.ts.map +1 -0
  62. package/dist/src/commands/cmdParseScript.js +27 -0
  63. package/dist/src/commands/cmdParseTx.d.ts +30 -0
  64. package/dist/src/commands/cmdParseTx.d.ts.map +1 -0
  65. package/dist/src/commands/cmdParseTx.js +153 -0
  66. package/dist/src/commands/cmdPsbt/cmdAddDescriptorInput.d.ts +13 -0
  67. package/dist/src/commands/cmdPsbt/cmdAddDescriptorInput.d.ts.map +1 -0
  68. package/dist/src/commands/cmdPsbt/cmdAddDescriptorInput.js +100 -0
  69. package/dist/src/commands/cmdPsbt/cmdAddOutput.d.ts +11 -0
  70. package/dist/src/commands/cmdPsbt/cmdAddOutput.d.ts.map +1 -0
  71. package/dist/src/commands/cmdPsbt/cmdAddOutput.js +122 -0
  72. package/dist/src/commands/cmdPsbt/cmdCreate.d.ts +9 -0
  73. package/dist/src/commands/cmdPsbt/cmdCreate.d.ts.map +1 -0
  74. package/dist/src/commands/cmdPsbt/cmdCreate.js +23 -0
  75. package/dist/src/commands/cmdPsbt/cmdFinalize.d.ts +11 -0
  76. package/dist/src/commands/cmdPsbt/cmdFinalize.d.ts.map +1 -0
  77. package/dist/src/commands/cmdPsbt/cmdFinalize.js +43 -0
  78. package/dist/src/commands/cmdPsbt/cmdSign.d.ts +7 -0
  79. package/dist/src/commands/cmdPsbt/cmdSign.d.ts.map +1 -0
  80. package/dist/src/commands/cmdPsbt/cmdSign.js +57 -0
  81. package/dist/src/commands/cmdPsbt/index.d.ts +8 -0
  82. package/dist/src/commands/cmdPsbt/index.d.ts.map +1 -0
  83. package/dist/src/commands/cmdPsbt/index.js +27 -0
  84. package/dist/src/commands/cmdPsbt/withPsbt.d.ts +63 -0
  85. package/dist/src/commands/cmdPsbt/withPsbt.d.ts.map +1 -0
  86. package/dist/src/commands/cmdPsbt/withPsbt.js +99 -0
  87. package/dist/src/commands/cmdPsbt/wrap.d.ts +5 -0
  88. package/dist/src/commands/cmdPsbt/wrap.d.ts.map +1 -0
  89. package/dist/src/commands/cmdPsbt/wrap.js +60 -0
  90. package/dist/src/commands/formatString.d.ts +8 -0
  91. package/dist/src/commands/formatString.d.ts.map +1 -0
  92. package/dist/src/commands/formatString.js +14 -0
  93. package/dist/src/commands/index.d.ts +7 -0
  94. package/dist/src/commands/index.d.ts.map +1 -0
  95. package/dist/src/commands/index.js +23 -0
  96. package/dist/src/ecdsa.d.ts +1 -2
  97. package/dist/src/ecdsa.d.ts.map +1 -1
  98. package/dist/src/ecdsa.js +9 -9
  99. package/dist/src/fetch.d.ts +12 -4
  100. package/dist/src/fetch.d.ts.map +1 -1
  101. package/dist/src/fetch.js +90 -13
  102. package/dist/src/format.d.ts +6 -3
  103. package/dist/src/format.d.ts.map +1 -1
  104. package/dist/src/format.js +38 -13
  105. package/dist/src/generateAddress.d.ts +47 -0
  106. package/dist/src/generateAddress.d.ts.map +1 -0
  107. package/dist/src/generateAddress.js +177 -0
  108. package/dist/src/hollowSegwitSpend.d.ts +1 -1
  109. package/dist/src/hollowSegwitSpend.d.ts.map +1 -1
  110. package/dist/src/hollowSegwitSpend.js +37 -5
  111. package/dist/src/parseUnknown.d.ts +5 -0
  112. package/dist/src/parseUnknown.d.ts.map +1 -0
  113. package/dist/src/parseUnknown.js +49 -0
  114. package/dist/test/args/stringToBuffer.d.ts +2 -0
  115. package/dist/test/args/stringToBuffer.d.ts.map +1 -0
  116. package/dist/test/args/stringToBuffer.js +49 -0
  117. package/dist/test/bip32.d.ts +2 -0
  118. package/dist/test/bip32.d.ts.map +1 -0
  119. package/dist/test/bip32.js +55 -0
  120. package/dist/test/bip32.util.d.ts +6 -0
  121. package/dist/test/bip32.util.d.ts.map +1 -0
  122. package/dist/test/bip32.util.js +46 -0
  123. package/dist/test/captureConsole.d.ts +6 -0
  124. package/dist/test/captureConsole.d.ts.map +1 -0
  125. package/dist/test/captureConsole.js +65 -0
  126. package/dist/test/cmdDescriptor/fromFixedScript.d.ts +2 -0
  127. package/dist/test/cmdDescriptor/fromFixedScript.d.ts.map +1 -0
  128. package/dist/test/cmdDescriptor/fromFixedScript.js +70 -0
  129. package/dist/test/cmdPsbt.d.ts +2 -0
  130. package/dist/test/cmdPsbt.d.ts.map +1 -0
  131. package/dist/test/cmdPsbt.js +138 -0
  132. package/dist/test/fixtures.d.ts +24 -0
  133. package/dist/test/fixtures.d.ts.map +1 -0
  134. package/dist/test/fixtures.js +127 -0
  135. package/dist/test/generateAddress.d.ts +2 -0
  136. package/dist/test/generateAddress.d.ts.map +1 -0
  137. package/dist/test/generateAddress.js +79 -0
  138. package/dist/test/parseAddress.d.ts +6 -0
  139. package/dist/test/parseAddress.d.ts.map +1 -0
  140. package/dist/test/parseAddress.js +119 -0
  141. package/dist/test/parseScript.d.ts +2 -0
  142. package/dist/test/parseScript.d.ts.map +1 -0
  143. package/dist/test/parseScript.js +74 -0
  144. package/dist/test/parseTransaction.d.ts +2 -0
  145. package/dist/test/parseTransaction.d.ts.map +1 -0
  146. package/dist/test/parseTransaction.js +103 -0
  147. package/dist/tsconfig.tsbuildinfo +1 -4635
  148. package/package.json +13 -9
  149. package/dist/src/InputOutputParser.d.ts +0 -35
  150. package/dist/src/InputOutputParser.d.ts.map +0 -1
  151. package/dist/src/InputOutputParser.js +0 -196
  152. package/dist/src/commands.d.ts +0 -43
  153. package/dist/src/commands.d.ts.map +0 -1
  154. package/dist/src/commands.js +0 -152
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.formatTreeNoColor = formatTreeNoColor;
37
+ exports.getPsbt = getPsbt;
38
+ exports.getTransactionWithSpendType = getTransactionWithSpendType;
39
+ exports.getFixtureString = getFixtureString;
40
+ const fs_1 = require("fs");
41
+ const chalk_1 = require("chalk");
42
+ const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
43
+ const format_1 = require("../src/format");
44
+ function formatTreeNoColor(n, { showAll }) {
45
+ return (0, format_1.formatTree)(n, { hide: showAll ? [] : undefined, chalk: new chalk_1.Instance({ level: 0 }) });
46
+ }
47
+ const walletKeys = utxolib.testutil.getDefaultWalletKeys();
48
+ async function getPsbt(network, basePath, params, { writeFixture } = {}) {
49
+ const inputs = [
50
+ { scriptType: params.spendType === 'keyPath' ? 'taprootKeyPathSpend' : params.scriptType, value: BigInt(10000) },
51
+ ];
52
+ const outputs = [{ scriptType: params.scriptType, value: BigInt(9000) }];
53
+ let stage = params.fixtureType;
54
+ if (stage.startsWith('psbt')) {
55
+ stage = stage.slice('psbt'.length).toLowerCase();
56
+ }
57
+ if (stage !== 'unsigned' && stage !== 'halfsigned' && stage !== 'fullsigned') {
58
+ throw new Error(`invalid stage ${stage}`);
59
+ }
60
+ if (params.spendType === 'keyPath' && writeFixture === undefined) {
61
+ // because we currently cannot create deterministic signatures for taprootKeyPathSpend, we
62
+ // store a copy in fixtures/psbt and use that instead of creating a new one
63
+ const filename = basePath + `/${params.scriptType}.${params.spendType}.${stage}.json`;
64
+ try {
65
+ const psbtHex = JSON.parse(await fs_1.promises.readFile(filename, 'utf8'));
66
+ const transaction = utxolib.bitgo.createPsbtFromHex(psbtHex, network);
67
+ return { transaction, prevOutputs: undefined };
68
+ }
69
+ catch (e) {
70
+ if (e.code === 'ENOENT') {
71
+ return await getPsbt(network, basePath, params, { writeFixture: filename });
72
+ }
73
+ throw e;
74
+ }
75
+ }
76
+ const transaction = utxolib.testutil.constructPsbt(inputs, outputs, network, walletKeys, stage);
77
+ if (writeFixture) {
78
+ await fs_1.promises.writeFile(writeFixture, JSON.stringify(transaction.toHex()), 'utf8');
79
+ }
80
+ return {
81
+ transaction,
82
+ prevOutputs: undefined,
83
+ };
84
+ }
85
+ async function getTransactionWithSpendType(network, basePath, params) {
86
+ if (params.fixtureType !== 'networkFullSigned') {
87
+ return getPsbt(network, basePath, params);
88
+ }
89
+ if (params.scriptType === 'p2trMusig2') {
90
+ if (!params.spendType) {
91
+ throw new Error('p2trMusig2 requires params');
92
+ }
93
+ }
94
+ else {
95
+ if (params.spendType) {
96
+ throw new Error('only p2trMusig2 requires spendType');
97
+ }
98
+ }
99
+ const filename = `spend_${params.scriptType}${params.spendType ? `${params.spendType}` : ''}.json`;
100
+ const f = await JSON.parse(await fs_1.promises.readFile(`../utxo-lib/test/integration_local_rpc/fixtures/${utxolib.getNetworkName(network)}/v1/${filename}`, 'utf8'));
101
+ function getPrevOut(i) {
102
+ for (const t of inputTxs) {
103
+ if (t.getHash().equals(i.hash) && i.index in t.outs) {
104
+ return t.outs[i.index];
105
+ }
106
+ }
107
+ throw new Error(`missing input ${utxolib.bitgo.formatOutputId(utxolib.bitgo.getOutputIdForInput(i))}`);
108
+ }
109
+ const inputTxs = f.inputs.map((i) => utxolib.bitgo.createTransactionFromBuffer(Buffer.from(i.hex, 'hex'), network, { amountType: 'bigint' }));
110
+ const tx = utxolib.bitgo.createTransactionFromBuffer(Buffer.from(f.transaction.hex, 'hex'), network, {
111
+ amountType: 'bigint',
112
+ });
113
+ return { transaction: tx, prevOutputs: tx.ins.map((i) => getPrevOut(i)) };
114
+ }
115
+ async function getFixtureString(path, defaultValue) {
116
+ try {
117
+ return await fs_1.promises.readFile(path, 'utf8');
118
+ }
119
+ catch (e) {
120
+ if (e.code === 'ENOENT') {
121
+ await fs_1.promises.writeFile(path, defaultValue, 'utf8');
122
+ throw new Error(`wrote default value for ${path}`);
123
+ }
124
+ throw e;
125
+ }
126
+ }
127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90ZXN0L2ZpeHR1cmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUUEsOENBRUM7QUFvQkQsMEJBd0NDO0FBRUQsa0VBZ0RDO0FBRUQsNENBVUM7QUFwSUQsMkJBQW9DO0FBRXBDLGlDQUFpQztBQUNqQyw4REFBZ0Q7QUFFaEQsMENBQTJDO0FBRzNDLFNBQWdCLGlCQUFpQixDQUFDLENBQWEsRUFBRSxFQUFFLE9BQU8sRUFBd0I7SUFDaEYsT0FBTyxJQUFBLG1CQUFVLEVBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksZ0JBQVEsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM5RixDQUFDO0FBa0JELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztBQUVwRCxLQUFLLFVBQVUsT0FBTyxDQUMzQixPQUF3QixFQUN4QixRQUFnQixFQUNoQixNQUFxQixFQUNyQixFQUFFLFlBQVksS0FBZ0MsRUFBRTtJQUVoRCxNQUFNLE1BQU0sR0FBNkI7UUFDdkMsRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBTSxDQUFDLEVBQUU7S0FDbEgsQ0FBQztJQUNGLE1BQU0sT0FBTyxHQUFHLENBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMx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QUMsRUFBRSxPQUFPLEVBQUU7UUFDbkcsVUFBVSxFQUFFLFFBQVE7S0FDckIsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzVFLENBQUM7QUFFTSxLQUFLLFVBQVUsZ0JBQWdCLENBQUMsSUFBWSxFQUFFLFlBQW9CO0lBQ3ZFLElBQUksQ0FBQztRQUNILE9BQU8sTUFBTSxhQUFFLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLElBQUssQ0FBUyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNqQyxNQUFNLGFBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUMvQyxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELENBQUM7UUFDRCxNQUFNLENBQUMsQ0FBQztJQUNWLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcHJvbWlzZXMgYXMgZnMgfSBmcm9tICdmcyc7XG5cbmltcG9ydCB7IEluc3RhbmNlIH0gZnJvbSAnY2hhbGsnO1xuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5cbmltcG9ydCB7IGZvcm1hdFRyZWUgfSBmcm9tICcuLi9zcmMvZm9ybWF0JztcbmltcG9ydCB7IFBhcnNlck5vZGUgfSBmcm9tICcuLi9zcmMvUGFyc2VyJztcblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFRyZWVOb0NvbG9yKG46IFBhcnNlck5vZGUsIHsgc2hvd0FsbCB9OiB7IHNob3dBbGw6IGJvb2xlYW4gfSk6IHN0cmluZyB7XG4gIHJldHVybiBmb3JtYXRUcmVlKG4sIHsgaGlkZTogc2hvd0FsbCA/IFtdIDogdW5kZWZpbmVkLCBjaGFsazogbmV3IEluc3RhbmNlKHsgbGV2ZWw6IDAgfSkgfSk7XG59XG5cbmV4cG9ydCB0eXBlIFBhcnNlZEZpeHR1cmUgPVxuICB8IHtcbiAgICAgIHRyYW5zYWN0aW9uOiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxiaWdpbnQ+O1xuICAgICAgcHJldk91dHB1dHM6IHV0eG9saWIuVHhPdXRwdXQ8YmlnaW50PltdO1xuICAgIH1cbiAgfCB7XG4gICAgICB0cmFuc2FjdGlvbjogdXR4b2xpYi5iaXRnby5VdHhvUHNidDtcbiAgICAgIHByZXZPdXRwdXRzOiB1bmRlZmluZWQ7XG4gICAgfTtcblxudHlwZSBGaXh0dXJlUGFyYW1zID0ge1xuICBmaXh0dXJlVHlwZTogJ3BzYnRVbnNpZ25lZCcgfCAncHNidEhhbGZTaWduZWQnIHwgJ3BzYnRGdWxsU2lnbmVkJyB8ICduZXR3b3JrRnVsbFNpZ25lZCc7XG4gIHNjcmlwdFR5cGU6IHV0eG9saWIuYml0Z28ub3V0cHV0U2NyaXB0cy5TY3JpcHRUeXBlMk9mMztcbiAgc3BlbmRUeXBlPzogJ2tleVBhdGgnIHwgJ3NjcmlwdFBhdGgnO1xufTtcblxuY29uc3Qgd2FsbGV0S2V5cyA9IHV0eG9saWIudGVzdHV0aWwuZ2V0RGVmYXVsdFdhbGxldEtleXMoKTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFBzYnQoXG4gIG5ldHdvcms6IHV0eG9saWIuTmV0d29yayxcbiAgYmFzZVBhdGg6IHN0cmluZyxcbiAgcGFyYW1zOiBGaXh0dXJlUGFyYW1zLFxuICB7IHdyaXRlRml4dHVyZSB9OiB7IHdyaXRlRml4dHVyZT86IHN0cmluZyB9ID0ge31cbik6IFByb21pc2U8UGFyc2VkRml4dHVyZT4ge1xuICBjb25zdCBpbnB1dHM6IHV0eG9saWIudGVzdHV0aWwuSW5wdXRbXSA9IFtcbiAgICB7IHNjcmlwdFR5cGU6IHBhcmFtcy5zcGVuZFR5cGUgPT09ICdrZXlQYXRoJyA/ICd0YXByb290S2V5UGF0aFNwZW5kJyA6IHBhcmFtcy5zY3JpcHRUeXBlLCB2YWx1ZTogQmlnSW50KDEwXzAwMCkgfSxcbiAgXTtcbiAgY29uc3Qgb3V0cHV0cyA9IFt7IHNjcmlwdFR5cGU6IHBhcmFtcy5zY3JpcHRUeXBlLCB2YWx1ZTogQmlnSW50KDlfMDAwKSB9XTtcbiAgbGV0IHN0YWdlOiBzdHJpbmcgPSBwYXJhbXMuZml4dHVyZVR5cGU7XG4gIGlmIChzdGFnZS5zdGFydHNXaXRoKCdwc2J0JykpIHtcbiAgICBzdGFnZSA9IHN0YWdlLnNsaWNlKCdwc2J0Jy5sZW5ndGgpLnRvTG93ZXJDYXNlKCk7XG4gIH1cbiAgaWYgKHN0YWdlICE9PSAndW5zaWduZWQnICYmIHN0YWdlICE9PSAnaGFsZnNpZ25lZCcgJiYgc3RhZ2UgIT09ICdmdWxsc2lnbmVkJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBzdGFnZSAke3N0YWdlfWApO1xuICB9XG4gIGlmIChwYXJhbXMuc3BlbmRUeXBlID09PSAna2V5UGF0aCcgJiYgd3JpdGVGaXh0dXJlID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBiZWNhdXNlIHdlIGN1cnJlbnRseSBjYW5ub3QgY3JlYXRlIGRldGVybWluaXN0aWMgc2lnbmF0dXJlcyBmb3IgdGFwcm9vdEtleVBhdGhTcGVuZCwgd2VcbiAgICAvLyBzdG9yZSBhIGNvcHkgaW4gZml4dHVyZXMvcHNidCBhbmQgdXNlIHRoYXQgaW5zdGVhZCBvZiBjcmVhdGluZyBhIG5ldyBvbmVcbiAgICBjb25zdCBmaWxlbmFtZSA9IGJhc2VQYXRoICsgYC8ke3BhcmFtcy5zY3JpcHRUeXBlfS4ke3BhcmFtcy5zcGVuZFR5cGV9LiR7c3RhZ2V9Lmpzb25gO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwc2J0SGV4ID0gSlNPTi5wYXJzZShhd2FpdCBmcy5yZWFkRmlsZShmaWxlbmFtZSwgJ3V0ZjgnKSk7XG4gICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHV0eG9saWIuYml0Z28uY3JlYXRlUHNidEZyb21IZXgocHNidEhleCwgbmV0d29yayk7XG4gICAgICByZXR1cm4geyB0cmFuc2FjdGlvbiwgcHJldk91dHB1dHM6IHVuZGVmaW5lZCB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBnZXRQc2J0KG5ldHdvcmssIGJhc2VQYXRoLCBwYXJhbXMsIHsgd3JpdGVGaXh0dXJlOiBmaWxlbmFtZSB9KTtcbiAgICAgIH1cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG4gIGNvbnN0IHRyYW5zYWN0aW9uID0gdXR4b2xpYi50ZXN0dXRpbC5jb25zdHJ1Y3RQc2J0KGlucHV0cywgb3V0cHV0cywgbmV0d29yaywgd2FsbGV0S2V5cywgc3RhZ2UpO1xuICBpZiAod3JpdGVGaXh0dXJlKSB7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKHdyaXRlRml4dHVyZSwgSlNPTi5zdHJpbmdpZnkodHJhbnNhY3Rpb24udG9IZXgoKSksICd1dGY4Jyk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB0cmFuc2FjdGlvbixcbiAgICBwcmV2T3V0cHV0czogdW5kZWZpbmVkLFxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0VHJhbnNhY3Rpb25XaXRoU3BlbmRUeXBlKFxuICBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmssXG4gIGJhc2VQYXRoOiBzdHJpbmcsXG4gIHBhcmFtczogRml4dHVyZVBhcmFtc1xuKTogUHJvbWlzZTxQYXJzZWRGaXh0dXJlPiB7XG4gIGlmIChwYXJhbXMuZml4dHVyZVR5cGUgIT09ICduZXR3b3JrRnVsbFNpZ25lZCcpIHtcbiAgICByZXR1cm4gZ2V0UHNidChuZXR3b3JrLCBiYXNlUGF0aCwgcGFyYW1zKTtcbiAgfVxuXG4gIGlmIChwYXJhbXMuc2NyaXB0VHlwZSA9PT0gJ3AydHJNdXNpZzInKSB7XG4gICAgaWYgKCFwYXJhbXMuc3BlbmRUeXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3AydHJNdXNpZzIgcmVxdWlyZXMgcGFyYW1zJyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChwYXJhbXMuc3BlbmRUeXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ29ubHkgcDJ0ck11c2lnMiByZXF1aXJlcyBzcGVuZFR5cGUnKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBmaWxlbmFtZSA9IGBzcGVuZF8ke3BhcmFtcy5zY3JpcHRUeXBlfSR7cGFyYW1zLnNwZW5kVHlwZSA/IGAke3BhcmFtcy5zcGVuZFR5cGV9YCA6ICcnfS5qc29uYDtcbiAgdHlwZSBGaXh0dXJlID0ge1xuICAgIHRyYW5zYWN0aW9uOiB7IGhleDogc3RyaW5nIH07XG4gICAgaW5wdXRzOiB7IGhleDogc3RyaW5nIH1bXTtcbiAgfTtcblxuICBjb25zdCBmOiBGaXh0dXJlID0gYXdhaXQgSlNPTi5wYXJzZShcbiAgICBhd2FpdCBmcy5yZWFkRmlsZShcbiAgICAgIGAuLi91dHhvLWxpYi90ZXN0L2ludGVncmF0aW9uX2xvY2FsX3JwYy9maXh0dXJlcy8ke3V0eG9saWIuZ2V0TmV0d29ya05hbWUobmV0d29yayl9L3YxLyR7ZmlsZW5hbWV9YCxcbiAgICAgICd1dGY4J1xuICAgIClcbiAgKTtcblxuICBmdW5jdGlvbiBnZXRQcmV2T3V0KGk6IHV0eG9saWIuVHhJbnB1dCk6IHV0eG9saWIuVHhPdXRwdXQ8YmlnaW50PiB7XG4gICAgZm9yIChjb25zdCB0IG9mIGlucHV0VHhzKSB7XG4gICAgICBpZiAodC5nZXRIYXNoKCkuZXF1YWxzKGkuaGFzaCkgJiYgaS5pbmRleCBpbiB0Lm91dHMpIHtcbiAgICAgICAgcmV0dXJuIHQub3V0c1tpLmluZGV4XTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBtaXNzaW5nIGlucHV0ICR7dXR4b2xpYi5iaXRnby5mb3JtYXRPdXRwdXRJZCh1dHhvbGliLmJpdGdvLmdldE91dHB1dElkRm9ySW5wdXQoaSkpfWApO1xuICB9XG5cbiAgY29uc3QgaW5wdXRUeHMgPSBmLmlucHV0cy5tYXAoKGkpID0+XG4gICAgdXR4b2xpYi5iaXRnby5jcmVhdGVUcmFuc2FjdGlvbkZyb21CdWZmZXIoQnVmZmVyLmZyb20oaS5oZXgsICdoZXgnKSwgbmV0d29yaywgeyBhbW91bnRUeXBlOiAnYmlnaW50JyB9KVxuICApO1xuICBjb25zdCB0eCA9IHV0eG9saWIuYml0Z28uY3JlYXRlVHJhbnNhY3Rpb25Gcm9tQnVmZmVyKEJ1ZmZlci5mcm9tKGYudHJhbnNhY3Rpb24uaGV4LCAnaGV4JyksIG5ldHdvcmssIHtcbiAgICBhbW91bnRUeXBlOiAnYmlnaW50JyxcbiAgfSk7XG4gIHJldHVybiB7IHRyYW5zYWN0aW9uOiB0eCwgcHJldk91dHB1dHM6IHR4Lmlucy5tYXAoKGkpID0+IGdldFByZXZPdXQoaSkpIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRGaXh0dXJlU3RyaW5nKHBhdGg6IHN0cmluZywgZGVmYXVsdFZhbHVlOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBmcy5yZWFkRmlsZShwYXRoLCAndXRmOCcpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKChlIGFzIGFueSkuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShwYXRoLCBkZWZhdWx0VmFsdWUsICd1dGY4Jyk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHdyb3RlIGRlZmF1bHQgdmFsdWUgZm9yICR7cGF0aH1gKTtcbiAgICB9XG4gICAgdGhyb3cgZTtcbiAgfVxufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=generateAddress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateAddress.d.ts","sourceRoot":"","sources":["../../test/generateAddress.ts"],"names":[],"mappings":""}
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const assert = __importStar(require("assert"));
37
+ const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
38
+ const generateAddress_1 = require("../src/generateAddress");
39
+ const bip32_util_1 = require("./bip32.util");
40
+ describe('generateAddresses', function () {
41
+ const [userKey, backupKey, bitgoKey] = (0, bip32_util_1.getKeyTriple)('generateAddress').map((k) => k.neutered().toBase58());
42
+ // addr${chain}${index}
43
+ const [addr00, addr10, addr01, addr11] = [
44
+ '38FHxcU7KY4E2nDEezEVcKWGvHy9717ehF',
45
+ '35Qg1UqVWSJdtF1ysfz9h3KRGdk9uH8iYx',
46
+ '3ARnshsLXE9QfJemQdoKL2kp6TRqGohLDz',
47
+ '3QxKW93NN8CQrKaNqkDsAXPyxPsrxfTYME',
48
+ ];
49
+ it('should generate addresses', function () {
50
+ const lines = [];
51
+ for (const l of (0, generateAddress_1.generateFixedScriptAddress)({
52
+ userKey,
53
+ backupKey,
54
+ bitgoKey,
55
+ index: (0, generateAddress_1.parseIndexRange)(['0-1']),
56
+ format: '%a',
57
+ chain: [0, 1],
58
+ })) {
59
+ lines.push((0, generateAddress_1.formatFixedScriptAddress)(l, '%a'));
60
+ }
61
+ assert.strictEqual(lines.length, 4);
62
+ assert.deepStrictEqual(lines, [addr00, addr10, addr01, addr11]);
63
+ });
64
+ it('should generate descriptor addresses', function () {
65
+ // only generate addresses for chain 0
66
+ const xpubs = [userKey, backupKey, bitgoKey].map((x) => x + '/0/0/0/*');
67
+ const lines = [];
68
+ for (const l of (0, generateAddress_1.generateDescriptorAddress)({
69
+ network: utxolib.networks.bitcoin,
70
+ descriptor: `sh(multi(2,${xpubs.join(',')}))`,
71
+ index: (0, generateAddress_1.parseIndexRange)(['0-1']),
72
+ format: '%d',
73
+ })) {
74
+ lines.push((0, generateAddress_1.formatDescriptorAddress)(l, '%a'));
75
+ }
76
+ assert.deepStrictEqual(lines, [addr00, addr01]);
77
+ });
78
+ });
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVBZGRyZXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdGVzdC9nZW5lcmF0ZUFkZHJlc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBaUM7QUFFakMsOERBQWdEO0FBRWhELDREQU1nQztBQUVoQyw2Q0FBNEM7QUFFNUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFO0lBQzVCLE1BQU0sQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxHQUFHLElBQUEseUJBQVksRUFBQyxpQkFBaUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDM0csdUJBQXVCO0lBQ3ZCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsR0FBRztRQUN2QyxvQ0FBb0M7UUFDcEMsb0NBQW9DO1FBQ3BDLG9DQUFvQztRQUNwQyxvQ0FBb0M7S0FDckMsQ0FBQztJQUNGLEVBQUUsQ0FBQywyQkFBMkIsRUFBRTtRQUM5QixNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDakIsS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFBLDRDQUEwQixFQUFDO1lBQ3pDLE9BQU87WUFDUCxTQUFTO1lBQ1QsUUFBUTtZQUNSLEtBQUssRUFBRSxJQUFBLGlDQUFlLEVBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMvQixNQUFNLEVBQUUsSUFBSTtZQUNaLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDZCxDQUFDLEVBQUUsQ0FBQztZQUNILEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBQSwwQ0FBd0IsRUFBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBRUQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxzQ0FBc0MsRUFBRTtRQUN6QyxzQ0FBc0M7UUFDdEMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNqQixLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUEsMkNBQXlCLEVBQUM7WUFDeEMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTztZQUNqQyxVQUFVLEVBQUUsY0FBYyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJO1lBQzdDLEtBQUssRUFBRSxJQUFBLGlDQUFlLEVBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMvQixNQUFNLEVBQUUsSUFBSTtTQUNiLENBQUMsRUFBRSxDQUFDO1lBQ0gsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFBLHlDQUF1QixFQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQy9DLENBQUM7UUFDRCxNQUFNLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2xELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5cbmltcG9ydCB7XG4gIGZvcm1hdERlc2NyaXB0b3JBZGRyZXNzLFxuICBmb3JtYXRGaXhlZFNjcmlwdEFkZHJlc3MsXG4gIGdlbmVyYXRlRGVzY3JpcHRvckFkZHJlc3MsXG4gIGdlbmVyYXRlRml4ZWRTY3JpcHRBZGRyZXNzLFxuICBwYXJzZUluZGV4UmFuZ2UsXG59IGZyb20gJy4uL3NyYy9nZW5lcmF0ZUFkZHJlc3MnO1xuXG5pbXBvcnQgeyBnZXRLZXlUcmlwbGUgfSBmcm9tICcuL2JpcDMyLnV0aWwnO1xuXG5kZXNjcmliZSgnZ2VuZXJhdGVBZGRyZXNzZXMnLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IFt1c2VyS2V5LCBiYWNrdXBLZXksIGJpdGdvS2V5XSA9IGdldEtleVRyaXBsZSgnZ2VuZXJhdGVBZGRyZXNzJykubWFwKChrKSA9PiBrLm5ldXRlcmVkKCkudG9CYXNlNTgoKSk7XG4gIC8vIGFkZHIke2NoYWlufSR7aW5kZXh9XG4gIGNvbnN0IFthZGRyMDAsIGFkZHIxMCwgYWRkcjAxLCBhZGRyMTFdID0gW1xuICAgICczOEZIeGNVN0tZNEUybkRFZXpFVmNLV0d2SHk5NzE3ZWhGJyxcbiAgICAnMzVRZzFVcVZXU0pkdEYxeXNmejloM0tSR2RrOXVIOGlZeCcsXG4gICAgJzNBUm5zaHNMWEU5UWZKZW1RZG9LTDJrcDZUUnFHb2hMRHonLFxuICAgICczUXhLVzkzTk44Q1FyS2FOcWtEc0FYUHl4UHNyeGZUWU1FJyxcbiAgXTtcbiAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBhZGRyZXNzZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgbGluZXMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGwgb2YgZ2VuZXJhdGVGaXhlZFNjcmlwdEFkZHJlc3Moe1xuICAgICAgdXNlcktleSxcbiAgICAgIGJhY2t1cEtleSxcbiAgICAgIGJpdGdvS2V5LFxuICAgICAgaW5kZXg6IHBhcnNlSW5kZXhSYW5nZShbJzAtMSddKSxcbiAgICAgIGZvcm1hdDogJyVhJyxcbiAgICAgIGNoYWluOiBbMCwgMV0sXG4gICAgfSkpIHtcbiAgICAgIGxpbmVzLnB1c2goZm9ybWF0Rml4ZWRTY3JpcHRBZGRyZXNzKGwsICclYScpKTtcbiAgICB9XG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwobGluZXMubGVuZ3RoLCA0KTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGxpbmVzLCBbYWRkcjAwLCBhZGRyMTAsIGFkZHIwMSwgYWRkcjExXSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZ2VuZXJhdGUgZGVzY3JpcHRvciBhZGRyZXNzZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgLy8gb25seSBnZW5lcmF0ZSBhZGRyZXNzZXMgZm9yIGNoYWluIDBcbiAgICBjb25zdCB4cHVicyA9IFt1c2VyS2V5LCBiYWNrdXBLZXksIGJpdGdvS2V5XS5tYXAoKHgpID0+IHggKyAnLzAvMC8wLyonKTtcbiAgICBjb25zdCBsaW5lcyA9IFtdO1xuICAgIGZvciAoY29uc3QgbCBvZiBnZW5lcmF0ZURlc2NyaXB0b3JBZGRyZXNzKHtcbiAgICAgIG5ldHdvcms6IHV0eG9saWIubmV0d29ya3MuYml0Y29pbixcbiAgICAgIGRlc2NyaXB0b3I6IGBzaChtdWx0aSgyLCR7eHB1YnMuam9pbignLCcpfSkpYCxcbiAgICAgIGluZGV4OiBwYXJzZUluZGV4UmFuZ2UoWycwLTEnXSksXG4gICAgICBmb3JtYXQ6ICclZCcsXG4gICAgfSkpIHtcbiAgICAgIGxpbmVzLnB1c2goZm9ybWF0RGVzY3JpcHRvckFkZHJlc3MobCwgJyVhJykpO1xuICAgIH1cbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGxpbmVzLCBbYWRkcjAwLCBhZGRyMDFdKTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,6 @@
1
+ import * as utxolib from '@bitgo-beta/utxo-lib';
2
+ declare const scriptTypes: readonly ["p2sh", "p2shP2wsh", "p2wsh", "p2tr", "p2trMusig2", "p2pkh", "p2wkh"];
3
+ type ScriptType = (typeof scriptTypes)[number];
4
+ export declare function isSupportedDepositType(network: utxolib.Network, scriptType: ScriptType): boolean;
5
+ export {};
6
+ //# sourceMappingURL=parseAddress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseAddress.d.ts","sourceRoot":"","sources":["../../test/parseAddress.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAQhD,QAAA,MAAM,WAAW,iFAAqF,CAAC;AACvG,KAAK,UAAU,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/C,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,GAAG,OAAO,CAchG"}
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.isSupportedDepositType = isSupportedDepositType;
40
+ const assert_1 = __importDefault(require("assert"));
41
+ const yargs_1 = __importDefault(require("yargs"));
42
+ const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
43
+ const fixtures_1 = require("./fixtures");
44
+ const bip32_util_1 = require("./bip32.util");
45
+ const cmdParse_1 = require("../src/commands/cmdAddress/cmdParse");
46
+ const args_1 = require("../src/args");
47
+ const scriptTypesSingleSig = ['p2pkh', 'p2wkh'];
48
+ const scriptTypes = [...utxolib.bitgo.outputScripts.scriptTypes2Of3, ...scriptTypesSingleSig];
49
+ function isSupportedDepositType(network, scriptType) {
50
+ if (network === args_1.bitcoinRegtest) {
51
+ return isSupportedDepositType(utxolib.networks.bitcoin, scriptType);
52
+ }
53
+ if (scriptType === 'p2pkh') {
54
+ return true;
55
+ }
56
+ if (scriptType === 'p2wkh') {
57
+ return utxolib.supportsSegwit(network);
58
+ }
59
+ return utxolib.bitgo.outputScripts.isSupportedScriptType(network, scriptType);
60
+ }
61
+ /**
62
+ *
63
+ * @param keys - Pubkeys to use for generating the address.
64
+ * If scriptType is single-sig, the first key will be used.
65
+ * @param scriptType
66
+ * @param network
67
+ * @return {Buffer} scriptPubKey
68
+ */
69
+ function createScriptPubKey(keys, scriptType, network) {
70
+ const pubkeys = keys.map((k) => k.publicKey);
71
+ switch (scriptType) {
72
+ case 'p2sh':
73
+ case 'p2shP2wsh':
74
+ case 'p2wsh':
75
+ case 'p2tr':
76
+ case 'p2trMusig2':
77
+ return utxolib.bitgo.outputScripts.createOutputScript2of3(pubkeys, scriptType).scriptPubKey;
78
+ case 'p2pkh':
79
+ return utxolib.payments.p2pkh({ pubkey: keys[0].publicKey }).output;
80
+ case 'p2wkh':
81
+ return utxolib.payments.p2wpkh({ pubkey: keys[0].publicKey }).output;
82
+ default:
83
+ throw new Error(`unsupported output type ${scriptType}`);
84
+ }
85
+ }
86
+ function getAddresses(n) {
87
+ const keys = (0, bip32_util_1.getKeyTriple)('parseAddress');
88
+ return scriptTypes
89
+ .filter((t) => isSupportedDepositType(n, t))
90
+ .flatMap((t) => utxolib.addressFormat.addressFormats
91
+ .filter((format) => utxolib.addressFormat.isSupportedAddressFormat(format, n))
92
+ .map((format) => [
93
+ t,
94
+ format,
95
+ utxolib.addressFormat.fromOutputScriptWithFormat(createScriptPubKey(keys, t, n), format, n),
96
+ ]));
97
+ }
98
+ function parse(address, args) {
99
+ return (0, cmdParse_1.getAddressParser)((0, yargs_1.default)([]).command(cmdParse_1.cmdParse).parseSync(args)).parse(address);
100
+ }
101
+ function testParseAddress(network, type, addressFormat, address, args, suffix) {
102
+ describe(`parse address ${address} with arguments ${args.join(' ')}`, function () {
103
+ it(`formats address`, async function () {
104
+ const formatted = (0, fixtures_1.formatTreeNoColor)(parse(address, args), { showAll: true });
105
+ const addrNoColon = address.replace(':', '_');
106
+ const filename = [(0, args_1.getNetworkName)(network), type, addressFormat, addrNoColon + suffix].join('_');
107
+ assert_1.default.strictEqual(await (0, fixtures_1.getFixtureString)(`test/fixtures/formatAddress/${filename}.txt`, formatted), formatted);
108
+ });
109
+ });
110
+ }
111
+ (0, args_1.getNetworkList)().forEach((n) => {
112
+ getAddresses(n).forEach(([type, addressFormat, address], i) => {
113
+ testParseAddress(n, type, addressFormat, address, [], '');
114
+ if ([utxolib.networks.bitcoin, utxolib.networks.bitcoincash, utxolib.networks.ecash].includes(n)) {
115
+ testParseAddress(n, type, addressFormat, address, ['--all'], '.all');
116
+ }
117
+ });
118
+ });
119
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VBZGRyZXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdGVzdC9wYXJzZUFkZHJlc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFjQSx3REFjQztBQTVCRCxvREFBNEI7QUFFNUIsa0RBQTBCO0FBQzFCLDhEQUFnRDtBQUVoRCx5Q0FBaUU7QUFDakUsNkNBQXVEO0FBQ3ZELGtFQUFpRjtBQUNqRixzQ0FBNkU7QUFFN0UsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQVUsQ0FBQztBQUN6RCxNQUFNLFdBQVcsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsZUFBZSxFQUFFLEdBQUcsb0JBQW9CLENBQVUsQ0FBQztBQUd2RyxTQUFnQixzQkFBc0IsQ0FBQyxPQUF3QixFQUFFLFVBQXNCO0lBQ3JGLElBQUksT0FBTyxLQUFLLHFCQUFjLEVBQUUsQ0FBQztRQUMvQixPQUFPLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRCxJQUFJLFVBQVUsS0FBSyxPQUFPLEVBQUUsQ0FBQztRQUMzQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxJQUFJLFVBQVUsS0FBSyxPQUFPLEVBQUUsQ0FBQztRQUMzQixPQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMscUJBQXFCLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ2hGLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBUyxrQkFBa0IsQ0FBQyxJQUFlLEVBQUUsVUFBc0IsRUFBRSxPQUF3QjtJQUMzRixNQUFNLE9BQU8sR0FBRyxJQUFJLENB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QUFHLENBQUMsQ0FBQztZQUNoRyxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLElBQUEsMkJBQWdCLEVBQUMsK0JBQStCLFFBQVEsTUFBTSxFQUFFLFNBQVMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2xILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsSUFBQSxxQkFBYyxHQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7SUFDN0IsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUM1RCxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2pHLGdCQUFnQixDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgeWFyZ3MgZnJvbSAneWFyZ3MnO1xuaW1wb3J0ICogYXMgdXR4b2xpYiBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5cbmltcG9ydCB7IGZvcm1hdFRyZWVOb0NvbG9yLCBnZXRGaXh0dXJlU3RyaW5nIH0gZnJvbSAnLi9maXh0dXJlcyc7XG5pbXBvcnQgeyBnZXRLZXlUcmlwbGUsIEtleVRyaXBsZSB9IGZyb20gJy4vYmlwMzIudXRpbCc7XG5pbXBvcnQgeyBnZXRBZGRyZXNzUGFyc2VyLCBjbWRQYXJzZSB9IGZyb20gJy4uL3NyYy9jb21tYW5kcy9jbWRBZGRyZXNzL2NtZFBhcnNlJztcbmltcG9ydCB7IGJpdGNvaW5SZWd0ZXN0LCBnZXROZXR3b3JrTGlzdCwgZ2V0TmV0d29ya05hbWUgfSBmcm9tICcuLi9zcmMvYXJncyc7XG5cbmNvbnN0IHNjcmlwdFR5cGVzU2luZ2xlU2lnID0gWydwMnBraCcsICdwMndraCddIGFzIGNvbnN0O1xuY29uc3Qgc2NyaXB0VHlwZXMgPSBbLi4udXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLnNjcmlwdFR5cGVzMk9mMywgLi4uc2NyaXB0VHlwZXNTaW5nbGVTaWddIGFzIGNvbnN0O1xudHlwZSBTY3JpcHRUeXBlID0gKHR5cGVvZiBzY3JpcHRUeXBlcylbbnVtYmVyXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzU3VwcG9ydGVkRGVwb3NpdFR5cGUobmV0d29yazogdXR4b2xpYi5OZXR3b3JrLCBzY3JpcHRUeXBlOiBTY3JpcHRUeXBlKTogYm9vbGVhbiB7XG4gIGlmIChuZXR3b3JrID09PSBiaXRjb2luUmVndGVzdCkge1xuICAgIHJldHVybiBpc1N1cHBvcnRlZERlcG9zaXRUeXBlKHV0eG9saWIubmV0d29ya3MuYml0Y29pbiwgc2NyaXB0VHlwZSk7XG4gIH1cblxuICBpZiAoc2NyaXB0VHlwZSA9PT0gJ3AycGtoJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHNjcmlwdFR5cGUgPT09ICdwMndraCcpIHtcbiAgICByZXR1cm4gdXR4b2xpYi5zdXBwb3J0c1NlZ3dpdChuZXR3b3JrKTtcbiAgfVxuXG4gIHJldHVybiB1dHhvbGliLmJpdGdvLm91dHB1dFNjcmlwdHMuaXNTdXBwb3J0ZWRTY3JpcHRUeXBlKG5ldHdvcmssIHNjcmlwdFR5cGUpO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ga2V5cyAtIFB1YmtleXMgdG8gdXNlIGZvciBnZW5lcmF0aW5nIHRoZSBhZGRyZXNzLlxuICogICAgICAgICAgICAgICBJZiBzY3JpcHRUeXBlIGlzIHNpbmdsZS1zaWcsIHRoZSBmaXJzdCBrZXkgd2lsbCBiZSB1c2VkLlxuICogQHBhcmFtIHNjcmlwdFR5cGVcbiAqIEBwYXJhbSBuZXR3b3JrXG4gKiBAcmV0dXJuIHtCdWZmZXJ9IHNjcmlwdFB1YktleVxuICovXG5mdW5jdGlvbiBjcmVhdGVTY3JpcHRQdWJLZXkoa2V5czogS2V5VHJpcGxlLCBzY3JpcHRUeXBlOiBTY3JpcHRUeXBlLCBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmspOiBCdWZmZXIge1xuICBjb25zdCBwdWJrZXlzID0ga2V5cy5tYXAoKGspID0+IGsucHVibGljS2V5KTtcblxuICBzd2l0Y2ggKHNjcmlwdFR5cGUpIHtcbiAgICBjYXNlICdwMnNoJzpcbiAgICBjYXNlICdwMnNoUDJ3c2gnOlxuICAgIGNhc2UgJ3Ayd3NoJzpcbiAgICBjYXNlICdwMnRyJzpcbiAgICBjYXNlICdwMnRyTXVzaWcyJzpcbiAgICAgIHJldHVybiB1dHhvbGliLmJpdGdvLm91dHB1dFNjcmlwdHMuY3JlYXRlT3V0cHV0U2NyaXB0Mm9mMyhwdWJrZXlzLCBzY3JpcHRUeXBlKS5zY3JpcHRQdWJLZXk7XG4gICAgY2FzZSAncDJwa2gnOlxuICAgICAgcmV0dXJuIHV0eG9saWIucGF5bWVudHMucDJwa2goeyBwdWJrZXk6IGtleXNbMF0ucHVibGljS2V5IH0pLm91dHB1dCBhcyBCdWZmZXI7XG4gICAgY2FzZSAncDJ3a2gnOlxuICAgICAgcmV0dXJuIHV0eG9saWIucGF5bWVudHMucDJ3cGtoKHsgcHVia2V5OiBrZXlzWzBdLnB1YmxpY0tleSB9KS5vdXRwdXQgYXMgQnVmZmVyO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIG91dHB1dCB0eXBlICR7c2NyaXB0VHlwZX1gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRBZGRyZXNzZXMobjogdXR4b2xpYi5OZXR3b3JrKTogW3R5cGU6IHN0cmluZywgZm9ybWF0OiBzdHJpbmcsIGFkZHJlc3M6IHN0cmluZ11bXSB7XG4gIGNvbnN0IGtleXMgPSBnZXRLZXlUcmlwbGUoJ3BhcnNlQWRkcmVzcycpO1xuICByZXR1cm4gc2NyaXB0VHlwZXNcbiAgICAuZmlsdGVyKCh0KSA9PiBpc1N1cHBvcnRlZERlcG9zaXRUeXBlKG4sIHQpKVxuICAgIC5mbGF0TWFwKCh0KSA9PlxuICAgICAgdXR4b2xpYi5hZGRyZXNzRm9ybWF0LmFkZHJlc3NGb3JtYXRzXG4gICAgICAgIC5maWx0ZXIoKGZvcm1hdCkgPT4gdXR4b2xpYi5hZGRyZXNzRm9ybWF0LmlzU3VwcG9ydGVkQWRkcmVzc0Zvcm1hdChmb3JtYXQsIG4pKVxuICAgICAgICAubWFwKChmb3JtYXQpOiBbc3RyaW5nLCBzdHJpbmcsIHN0cmluZ10gPT4gW1xuICAgICAgICAgIHQsXG4gICAgICAgICAgZm9ybWF0LFxuICAgICAgICAgIHV0eG9saWIuYWRkcmVzc0Zvcm1hdC5mcm9tT3V0cHV0U2NyaXB0V2l0aEZvcm1hdChjcmVhdGVTY3JpcHRQdWJLZXkoa2V5cywgdCwgbiksIGZvcm1hdCwgbiksXG4gICAgICAgIF0pXG4gICAgKTtcbn1cblxuZnVuY3Rpb24gcGFyc2UoYWRkcmVzczogc3RyaW5nLCBhcmdzOiBzdHJpbmdbXSkge1xuICByZXR1cm4gZ2V0QWRkcmVzc1BhcnNlcih5YXJncyhbXSkuY29tbWFuZChjbWRQYXJzZSkucGFyc2VTeW5jKGFyZ3MpKS5wYXJzZShhZGRyZXNzKTtcbn1cblxuZnVuY3Rpb24gdGVzdFBhcnNlQWRkcmVzcyhcbiAgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrLFxuICB0eXBlOiBzdHJpbmcsXG4gIGFkZHJlc3NGb3JtYXQ6IHN0cmluZyxcbiAgYWRkcmVzczogc3RyaW5nLFxuICBhcmdzOiBzdHJpbmdbXSxcbiAgc3VmZml4OiBzdHJpbmdcbikge1xuICBkZXNjcmliZShgcGFyc2UgYWRkcmVzcyAke2FkZHJlc3N9IHdpdGggYXJndW1lbnRzICR7YXJncy5qb2luKCcgJyl9YCwgZnVuY3Rpb24gKCkge1xuICAgIGl0KGBmb3JtYXRzIGFkZHJlc3NgLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBmb3JtYXR0ZWQgPSBmb3JtYXRUcmVlTm9Db2xvcihwYXJzZShhZGRyZXNzLCBhcmdzKSwgeyBzaG93QWxsOiB0cnVlIH0pO1xuICAgICAgY29uc3QgYWRkck5vQ29sb24gPSBhZGRyZXNzLnJlcGxhY2UoJzonLCAnXycpO1xuICAgICAgY29uc3QgZmlsZW5hbWUgPSBbZ2V0TmV0d29ya05hbWUobmV0d29yayksIHR5cGUsIGFkZHJlc3NGb3JtYXQsIGFkZHJOb0NvbG9uICsgc3VmZml4XS5qb2luKCdfJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYXdhaXQgZ2V0Rml4dHVyZVN0cmluZyhgdGVzdC9maXh0dXJlcy9mb3JtYXRBZGRyZXNzLyR7ZmlsZW5hbWV9LnR4dGAsIGZvcm1hdHRlZCksIGZvcm1hdHRlZCk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5nZXROZXR3b3JrTGlzdCgpLmZvckVhY2goKG4pID0+IHtcbiAgZ2V0QWRkcmVzc2VzKG4pLmZvckVhY2goKFt0eXBlLCBhZGRyZXNzRm9ybWF0LCBhZGRyZXNzXSwgaSkgPT4ge1xuICAgIHRlc3RQYXJzZUFkZHJlc3MobiwgdHlwZSwgYWRkcmVzc0Zvcm1hdCwgYWRkcmVzcywgW10sICcnKTtcbiAgICBpZiAoW3V0eG9saWIubmV0d29ya3MuYml0Y29pbiwgdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luY2FzaCwgdXR4b2xpYi5uZXR3b3Jrcy5lY2FzaF0uaW5jbHVkZXMobikpIHtcbiAgICAgIHRlc3RQYXJzZUFkZHJlc3MobiwgdHlwZSwgYWRkcmVzc0Zvcm1hdCwgYWRkcmVzcywgWyctLWFsbCddLCAnLmFsbCcpO1xuICAgIH1cbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=parseScript.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseScript.d.ts","sourceRoot":"","sources":["../../test/parseScript.ts"],"names":[],"mappings":""}
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const assert = __importStar(require("assert"));
37
+ const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
38
+ const ScriptParser_1 = require("../src/ScriptParser");
39
+ const fixtures_1 = require("./fixtures");
40
+ function getParser() {
41
+ return new ScriptParser_1.ScriptParser({ network: utxolib.networks.bitcoin });
42
+ }
43
+ function testParseScript(type) {
44
+ let tx;
45
+ before('setup transaction', async function () {
46
+ tx = await (0, fixtures_1.getTransactionWithSpendType)(utxolib.networks.testnet, 'test/fixtures/parse/psbt', {
47
+ scriptType: type,
48
+ spendType: type === 'p2trMusig2' ? 'scriptPath' : undefined,
49
+ fixtureType: 'psbtFullSigned',
50
+ });
51
+ });
52
+ const parser = getParser();
53
+ function parse(label, script) {
54
+ return parser.node(label, undefined, [parser.parse(script)]);
55
+ }
56
+ it(`parse script ${type}`, async function () {
57
+ if (tx.transaction instanceof utxolib.bitgo.UtxoTransaction) {
58
+ return this.skip();
59
+ }
60
+ const nodes = tx.transaction.data.inputs.flatMap((input) => {
61
+ return [
62
+ ...(input.redeemScript ? [parse('redeemScript', input.redeemScript)] : []),
63
+ ...(input.witnessScript ? [parse('witnessScript', input.witnessScript)] : []),
64
+ ];
65
+ });
66
+ const root = getParser().node('inputScripts', undefined, nodes);
67
+ const formatted = (0, fixtures_1.formatTreeNoColor)(root, { showAll: true });
68
+ assert.strictEqual(formatted, await (0, fixtures_1.getFixtureString)(`test/fixtures/formatScript/${type}.txt`, formatted));
69
+ });
70
+ }
71
+ utxolib.bitgo.outputScripts.scriptTypes2Of3.forEach((scriptType) => {
72
+ testParseScript(scriptType);
73
+ });
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VTY3JpcHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90ZXN0L3BhcnNlU2NyaXB0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0NBQWlDO0FBRWpDLDhEQUFnRDtBQUdoRCxzREFBbUQ7QUFFbkQseUNBQTZHO0FBRTdHLFNBQVMsU0FBUztJQUNoQixPQUFPLElBQUksMkJBQVksQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDakUsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLElBQWdEO0lBQ3ZFLElBQUksRUFBaUIsQ0FBQztJQUN0QixNQUFNLENBQUMsbUJBQW1CLEVBQUUsS0FBSztRQUMvQixFQUFFLEdBQUcsTUFBTSxJQUFBLHNDQUEyQixFQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLDBCQUEwQixFQUFFO1lBQzNGLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFNBQVMsRUFBRSxJQUFJLEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDM0QsV0FBVyxFQUFFLGdCQUFnQjtTQUM5QixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sTUFBTSxHQUFHLFNBQVMsRUFBRSxDQUFDO0lBRTNCLFNBQVMsS0FBSyxDQUFDLEtBQWEsRUFBRSxNQUFjO1FBQzFDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELEVBQUUsQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLEVBQUUsS0FBSztRQUM5QixJQUFJLEVBQUUsQ0FBQyxXQUFXLFlBQVksT0FBTyxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUM1RCxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixDQUFDO1FBRUQsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3pELE9BQU87Z0JBQ0wsR0FBRyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUMxRSxHQUFHLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDOUUsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxJQUFJLEdBQUcsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFaEUsTUFBTSxTQUFTLEdBQUcsSUFBQSw0QkFBaUIsRUFBQyxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUU3RCxNQUFNLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxNQUFNLElBQUEsMkJBQWdCLEVBQUMsOEJBQThCLElBQUksTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDN0csQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsT0FBTyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO0lBQ2pFLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUM5QixDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcblxuaW1wb3J0IHsgUGFyc2VyTm9kZSB9IGZyb20gJy4uL3NyYy9QYXJzZXInO1xuaW1wb3J0IHsgU2NyaXB0UGFyc2VyIH0gZnJvbSAnLi4vc3JjL1NjcmlwdFBhcnNlcic7XG5cbmltcG9ydCB7IGZvcm1hdFRyZWVOb0NvbG9yLCBnZXRGaXh0dXJlU3RyaW5nLCBnZXRUcmFuc2FjdGlvbldpdGhTcGVuZFR5cGUsIFBhcnNlZEZpeHR1cmUgfSBmcm9tICcuL2ZpeHR1cmVzJztcblxuZnVuY3Rpb24gZ2V0UGFyc2VyKCk6IFNjcmlwdFBhcnNlciB7XG4gIHJldHVybiBuZXcgU2NyaXB0UGFyc2VyKHsgbmV0d29yazogdXR4b2xpYi5uZXR3b3Jrcy5iaXRjb2luIH0pO1xufVxuXG5mdW5jdGlvbiB0ZXN0UGFyc2VTY3JpcHQodHlwZTogdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLlNjcmlwdFR5cGUyT2YzKSB7XG4gIGxldCB0eDogUGFyc2VkRml4dHVyZTtcbiAgYmVmb3JlKCdzZXR1cCB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICB0eCA9IGF3YWl0IGdldFRyYW5zYWN0aW9uV2l0aFNwZW5kVHlwZSh1dHhvbGliLm5ldHdvcmtzLnRlc3RuZXQsICd0ZXN0L2ZpeHR1cmVzL3BhcnNlL3BzYnQnLCB7XG4gICAgICBzY3JpcHRUeXBlOiB0eXBlLFxuICAgICAgc3BlbmRUeXBlOiB0eXBlID09PSAncDJ0ck11c2lnMicgPyAnc2NyaXB0UGF0aCcgOiB1bmRlZmluZWQsXG4gICAgICBmaXh0dXJlVHlwZTogJ3BzYnRGdWxsU2lnbmVkJyxcbiAgICB9KTtcbiAgfSk7XG5cbiAgY29uc3QgcGFyc2VyID0gZ2V0UGFyc2VyKCk7XG5cbiAgZnVuY3Rpb24gcGFyc2UobGFiZWw6IHN0cmluZywgc2NyaXB0OiBCdWZmZXIpOiBQYXJzZXJOb2RlIHtcbiAgICByZXR1cm4gcGFyc2VyLm5vZGUobGFiZWwsIHVuZGVmaW5lZCwgW3BhcnNlci5wYXJzZShzY3JpcHQpXSk7XG4gIH1cblxuICBpdChgcGFyc2Ugc2NyaXB0ICR7dHlwZX1gLCBhc3luYyBmdW5jdGlvbiAodGhpczogTW9jaGEuQ29udGV4dCkge1xuICAgIGlmICh0eC50cmFuc2FjdGlvbiBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy5za2lwKCk7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZXMgPSB0eC50cmFuc2FjdGlvbi5kYXRhLmlucHV0cy5mbGF0TWFwKChpbnB1dCkgPT4ge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgLi4uKGlucHV0LnJlZGVlbVNjcmlwdCA/IFtwYXJzZSgncmVkZWVtU2NyaXB0JywgaW5wdXQucmVkZWVtU2NyaXB0KV0gOiBbXSksXG4gICAgICAgIC4uLihpbnB1dC53aXRuZXNzU2NyaXB0ID8gW3BhcnNlKCd3aXRuZXNzU2NyaXB0JywgaW5wdXQud2l0bmVzc1NjcmlwdCldIDogW10pLFxuICAgICAgXTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHJvb3QgPSBnZXRQYXJzZXIoKS5ub2RlKCdpbnB1dFNjcmlwdHMnLCB1bmRlZmluZWQsIG5vZGVzKTtcblxuICAgIGNvbnN0IGZvcm1hdHRlZCA9IGZvcm1hdFRyZWVOb0NvbG9yKHJvb3QsIHsgc2hvd0FsbDogdHJ1ZSB9KTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChmb3JtYXR0ZWQsIGF3YWl0IGdldEZpeHR1cmVTdHJpbmcoYHRlc3QvZml4dHVyZXMvZm9ybWF0U2NyaXB0LyR7dHlwZX0udHh0YCwgZm9ybWF0dGVkKSk7XG4gIH0pO1xufVxuXG51dHhvbGliLmJpdGdvLm91dHB1dFNjcmlwdHMuc2NyaXB0VHlwZXMyT2YzLmZvckVhY2goKHNjcmlwdFR5cGUpID0+IHtcbiAgdGVzdFBhcnNlU2NyaXB0KHNjcmlwdFR5cGUpO1xufSk7XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=parseTransaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseTransaction.d.ts","sourceRoot":"","sources":["../../test/parseTransaction.ts"],"names":[],"mappings":""}
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const assert_1 = __importDefault(require("assert"));
40
+ const yargs_1 = __importDefault(require("yargs"));
41
+ const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
42
+ const commands_1 = require("../src/commands");
43
+ const fixtures_1 = require("./fixtures");
44
+ function getArgs({ showAll }) {
45
+ return showAll ? ['--all'] : [];
46
+ }
47
+ function getParams() {
48
+ return ['psbtUnsigned', 'psbtHalfSigned', 'psbtFullSigned', 'networkFullSigned'].flatMap((fixtureType) => {
49
+ return [false, true].flatMap((showAll) => {
50
+ return utxolib.bitgo.outputScripts.scriptTypes2Of3.flatMap((scriptType) => {
51
+ if (scriptType === 'p2trMusig2') {
52
+ return [
53
+ { scriptType, spendType: 'keyPath', showAll, fixtureType },
54
+ { scriptType, spendType: 'scriptPath', showAll, fixtureType },
55
+ ];
56
+ }
57
+ return [{ scriptType, spendType: undefined, showAll, fixtureType }];
58
+ });
59
+ });
60
+ });
61
+ }
62
+ getParams().forEach(({ scriptType, spendType, fixtureType, showAll }) => {
63
+ const args = getArgs({ showAll });
64
+ describe(`parse ${fixtureType} ${scriptType} ${spendType ? spendType : 'default'} spend [args=${args}]`, function () {
65
+ function parse(tx, prevOutputs) {
66
+ return (0, commands_1.getTxParser)((0, yargs_1.default)([])
67
+ .command(commands_1.cmdParseTx)
68
+ .parse([...getArgs({ showAll }), '--parseError=throw'])).parse(tx, {
69
+ prevOutputs,
70
+ });
71
+ }
72
+ let fixture;
73
+ before(async function () {
74
+ fixture = await (0, fixtures_1.getTransactionWithSpendType)(utxolib.networks.testnet, 'test/fixtures/parse/psbt', {
75
+ scriptType,
76
+ spendType,
77
+ fixtureType,
78
+ });
79
+ });
80
+ it(`parses`, function () {
81
+ parse(fixture.transaction);
82
+ if (fixture.prevOutputs) {
83
+ parse(fixture.transaction, fixture.prevOutputs);
84
+ }
85
+ });
86
+ [false, true].forEach((usePrevOuts) => {
87
+ it(`formats [usePrevOuts=${usePrevOuts}]`, async function () {
88
+ if (usePrevOuts && !fixture.prevOutputs) {
89
+ this.skip();
90
+ }
91
+ const formatted = (0, fixtures_1.formatTreeNoColor)(parse(fixture.transaction, usePrevOuts ? fixture.prevOutputs : undefined), {
92
+ showAll,
93
+ });
94
+ const fixtureName = spendType ? `${scriptType}_${spendType}` : scriptType;
95
+ const filename = [fixtureName, fixtureType, showAll ? 'all' : '', usePrevOuts ? 'prevOuts' : '']
96
+ .filter((v) => v !== '')
97
+ .join('_');
98
+ assert_1.default.strictEqual(formatted, await (0, fixtures_1.getFixtureString)(`test/fixtures/formatTransaction/${filename}.txt`, formatted));
99
+ });
100
+ });
101
+ });
102
+ });
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VUcmFuc2FjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3Rlc3QvcGFyc2VUcmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUU1QixrREFBMEI7QUFFMUIsOERBQWdEO0FBSWhELDhDQUEwRDtBQUUxRCx5Q0FBNkc7QUFTN0csU0FBUyxPQUFPLENBQUMsRUFBRSxPQUFPLEVBQXdCO0lBQ2hELE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDbEMsQ0FBQztBQUVELFNBQVMsU0FBUztJQUNoQixPQUFRLENBQUMsY0FBYyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLG1CQUFtQixDQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUU7UUFDbEgsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUN2QyxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLEVBQWdCLEVBQUU7Z0JBQ3RGLElBQUksVUFBVSxLQUFLLFlBQVksRUFBRSxDQUFDO29CQUNoQyxPQUFPO3dCQUNMLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRTt3QkFDMUQsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFO3FCQUM5RCxDQUFDO2dCQUNKLENBQUM7Z0JBQ0QsT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDdEUsQ0FBQyxD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QUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCB5YXJncyBmcm9tICd5YXJncyc7XG5pbXBvcnQgKiBhcyBtb2NoYSBmcm9tICdtb2NoYSc7XG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcblxuaW1wb3J0IHsgUGFyc2VyTm9kZSB9IGZyb20gJy4uL3NyYy9QYXJzZXInO1xuaW1wb3J0IHsgUGFyc2VyVHggfSBmcm9tICcuLi9zcmMvUGFyc2VyVHgnO1xuaW1wb3J0IHsgY21kUGFyc2VUeCwgZ2V0VHhQYXJzZXIgfSBmcm9tICcuLi9zcmMvY29tbWFuZHMnO1xuXG5pbXBvcnQgeyBmb3JtYXRUcmVlTm9Db2xvciwgZ2V0Rml4dHVyZVN0cmluZywgZ2V0VHJhbnNhY3Rpb25XaXRoU3BlbmRUeXBlLCBQYXJzZWRGaXh0dXJlIH0gZnJvbSAnLi9maXh0dXJlcyc7XG5cbnR5cGUgVGVzdFBhcmFtcyA9IHtcbiAgc2NyaXB0VHlwZTogdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLlNjcmlwdFR5cGUyT2YzO1xuICBzcGVuZFR5cGU6ICdrZXlQYXRoJyB8ICdzY3JpcHRQYXRoJyB8IHVuZGVmaW5lZDtcbiAgZml4dHVyZVR5cGU6ICdwc2J0VW5zaWduZWQnIHwgJ3BzYnRIYWxmU2lnbmVkJyB8ICdwc2J0RnVsbFNpZ25lZCcgfCAnbmV0d29ya0Z1bGxTaWduZWQnO1xuICBzaG93QWxsOiBib29sZWFuO1xufTtcblxuZnVuY3Rpb24gZ2V0QXJncyh7IHNob3dBbGwgfTogeyBzaG93QWxsOiBib29sZWFuIH0pOiBzdHJpbmdbXSB7XG4gIHJldHVybiBzaG93QWxsID8gWyctLWFsbCddIDogW107XG59XG5cbmZ1bmN0aW9uIGdldFBhcmFtcygpOiBUZXN0UGFyYW1zW10ge1xuICByZXR1cm4gKFsncHNidFVuc2lnbmVkJywgJ3BzYnRIYWxmU2lnbmVkJywgJ3BzYnRGdWxsU2lnbmVkJywgJ25ldHdvcmtGdWxsU2lnbmVkJ10gYXMgY29uc3QpLmZsYXRNYXAoKGZpeHR1cmVUeXBlKSA9PiB7XG4gICAgcmV0dXJuIFtmYWxzZSwgdHJ1ZV0uZmxhdE1hcCgoc2hvd0FsbCkgPT4ge1xuICAgICAgcmV0dXJuIHV0eG9saWIuYml0Z28ub3V0cHV0U2NyaXB0cy5zY3JpcHRUeXBlczJPZjMuZmxhdE1hcCgoc2NyaXB0VHlwZSk6IFRlc3RQYXJhbXNbXSA9PiB7XG4gICAgICAgIGlmIChzY3JpcHRUeXBlID09PSAncDJ0ck11c2lnMicpIHtcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgeyBzY3JpcHRUeXBlLCBzcGVuZFR5cGU6ICdrZXlQYXRoJywgc2hvd0FsbCwgZml4dHVyZVR5cGUgfSxcbiAgICAgICAgICAgIHsgc2NyaXB0VHlwZSwgc3BlbmRUeXBlOiAnc2NyaXB0UGF0aCcsIHNob3dBbGwsIGZpeHR1cmVUeXBlIH0sXG4gICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW3sgc2NyaXB0VHlwZSwgc3BlbmRUeXBlOiB1bmRlZmluZWQsIHNob3dBbGwsIGZpeHR1cmVUeXBlIH1dO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5nZXRQYXJhbXMoKS5mb3JFYWNoKCh7IHNjcmlwdFR5cGUsIHNwZW5kVHlwZSwgZml4dHVyZVR5cGUsIHNob3dBbGwgfSkgPT4ge1xuICBjb25zdCBhcmdzID0gZ2V0QXJncyh7IHNob3dBbGwgfSk7XG4gIGRlc2NyaWJlKGBwYXJzZSAke2ZpeHR1cmVUeXBlfSAke3NjcmlwdFR5cGV9ICR7c3BlbmRUeXBlID8gc3BlbmRUeXBlIDogJ2RlZmF1bHQnfSBzcGVuZCBbYXJncz0ke2FyZ3N9XWAsIGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBwYXJzZSh0eDogUGFyc2VyVHgsIHByZXZPdXRwdXRzPzogdXR4b2xpYi5UeE91dHB1dDxiaWdpbnQ+W10pOiBQYXJzZXJOb2RlIHtcbiAgICAgIHJldHVybiBnZXRUeFBhcnNlcihcbiAgICAgICAgeWFyZ3MoW10pXG4gICAgICAgICAgLmNvbW1hbmQoY21kUGFyc2VUeClcbiAgICAgICAgICAucGFyc2UoWy4uLmdldEFyZ3MoeyBzaG93QWxsIH0pLCAnLS1wYXJzZUVycm9yPXRocm93J10pIGFzIGFueVxuICAgICAgKS5wYXJzZSh0eCwge1xuICAgICAgICBwcmV2T3V0cHV0cyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGxldCBmaXh0dXJlOiBQYXJzZWRGaXh0dXJlO1xuICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBmaXh0dXJlID0gYXdhaXQgZ2V0VHJhbnNhY3Rpb25XaXRoU3BlbmRUeXBlKHV0eG9saWIubmV0d29ya3MudGVzdG5ldCwgJ3Rlc3QvZml4dHVyZXMvcGFyc2UvcHNidCcsIHtcbiAgICAgICAgc2NyaXB0VHlwZSxcbiAgICAgICAgc3BlbmRUeXBlLFxuICAgICAgICBmaXh0dXJlVHlwZSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoYHBhcnNlc2AsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHBhcnNlKGZpeHR1cmUudHJhbnNhY3Rpb24pO1xuICAgICAgaWYgKGZpeHR1cmUucHJldk91dHB1dHMpIHtcbiAgICAgICAgcGFyc2UoZml4dHVyZS50cmFuc2FjdGlvbiwgZml4dHVyZS5wcmV2T3V0cHV0cyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBbZmFsc2UsIHRydWVdLmZvckVhY2goKHVzZVByZXZPdXRzKSA9PiB7XG4gICAgICBpdChgZm9ybWF0cyBbdXNlUHJldk91dHM9JHt1c2VQcmV2T3V0c31dYCwgYXN5bmMgZnVuY3Rpb24gKHRoaXM6IG1vY2hhLkNvbnRleHQpIHtcbiAgICAgICAgaWYgKHVzZVByZXZPdXRzICYmICFmaXh0dXJlLnByZXZPdXRwdXRzKSB7XG4gICAgICAgICAgdGhpcy5za2lwKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gZm9ybWF0VHJlZU5vQ29sb3IocGFyc2UoZml4dHVyZS50cmFuc2FjdGlvbiwgdXNlUHJldk91dHMgPyBmaXh0dXJlLnByZXZPdXRwdXRzIDogdW5kZWZpbmVkKSwge1xuICAgICAgICAgIHNob3dBbGwsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBmaXh0dXJlTmFtZSA9IHNwZW5kVHlwZSA/IGAke3NjcmlwdFR5cGV9XyR7c3BlbmRUeXBlfWAgOiBzY3JpcHRUeXBlO1xuICAgICAgICBjb25zdCBmaWxlbmFtZSA9IFtmaXh0dXJlTmFtZSwgZml4dHVyZVR5cGUsIHNob3dBbGwgPyAnYWxsJyA6ICcnLCB1c2VQcmV2T3V0cyA/ICdwcmV2T3V0cycgOiAnJ11cbiAgICAgICAgICAuZmlsdGVyKCh2KSA9PiB2ICE9PSAnJylcbiAgICAgICAgICAuam9pbignXycpO1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoXG4gICAgICAgICAgZm9ybWF0dGVkLFxuICAgICAgICAgIGF3YWl0IGdldEZpeHR1cmVTdHJpbmcoYHRlc3QvZml4dHVyZXMvZm9ybWF0VHJhbnNhY3Rpb24vJHtmaWxlbmFtZX0udHh0YCwgZm9ybWF0dGVkKVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=