@bitgo-beta/abstract-utxo 1.6.1-alpha.35 → 1.6.1-alpha.351

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 (169) hide show
  1. package/dist/src/abstractUtxoCoin.d.ts +200 -98
  2. package/dist/src/abstractUtxoCoin.d.ts.map +1 -1
  3. package/dist/src/abstractUtxoCoin.js +314 -541
  4. package/dist/src/descriptor/NamedDescriptor.d.ts +20 -0
  5. package/dist/src/descriptor/NamedDescriptor.d.ts.map +1 -0
  6. package/dist/src/descriptor/NamedDescriptor.js +79 -0
  7. package/dist/src/descriptor/assertDescriptorWalletAddress.d.ts +5 -0
  8. package/dist/src/descriptor/assertDescriptorWalletAddress.d.ts.map +1 -0
  9. package/dist/src/descriptor/assertDescriptorWalletAddress.js +66 -0
  10. package/dist/src/descriptor/builder/builder.d.ts +13 -0
  11. package/dist/src/descriptor/builder/builder.d.ts.map +1 -0
  12. package/dist/src/descriptor/builder/builder.js +37 -0
  13. package/dist/src/descriptor/builder/index.d.ts +3 -0
  14. package/dist/src/descriptor/builder/index.d.ts.map +1 -0
  15. package/dist/src/descriptor/builder/index.js +8 -0
  16. package/dist/src/descriptor/builder/parse.d.ts +5 -0
  17. package/dist/src/descriptor/builder/parse.d.ts.map +1 -0
  18. package/dist/src/descriptor/builder/parse.js +149 -0
  19. package/dist/src/descriptor/createWallet/createDescriptorWallet.d.ts +20 -0
  20. package/dist/src/descriptor/createWallet/createDescriptorWallet.d.ts.map +1 -0
  21. package/dist/src/descriptor/createWallet/createDescriptorWallet.js +74 -0
  22. package/dist/src/descriptor/createWallet/createDescriptors.d.ts +12 -0
  23. package/dist/src/descriptor/createWallet/createDescriptors.d.ts.map +1 -0
  24. package/dist/src/descriptor/createWallet/createDescriptors.js +33 -0
  25. package/dist/src/descriptor/createWallet/index.d.ts +3 -0
  26. package/dist/src/descriptor/createWallet/index.d.ts.map +1 -0
  27. package/dist/src/descriptor/createWallet/index.js +19 -0
  28. package/dist/src/descriptor/descriptorWallet.d.ts +19 -0
  29. package/dist/src/descriptor/descriptorWallet.d.ts.map +1 -0
  30. package/dist/src/descriptor/descriptorWallet.js +54 -0
  31. package/dist/src/descriptor/index.d.ts +8 -0
  32. package/dist/src/descriptor/index.d.ts.map +1 -0
  33. package/dist/src/descriptor/index.js +53 -0
  34. package/dist/src/descriptor/validatePolicy.d.ts +22 -0
  35. package/dist/src/descriptor/validatePolicy.d.ts.map +1 -0
  36. package/dist/src/descriptor/validatePolicy.js +92 -0
  37. package/dist/src/index.d.ts +3 -0
  38. package/dist/src/index.d.ts.map +1 -1
  39. package/dist/src/index.js +31 -2
  40. package/dist/src/keychains.d.ts +48 -0
  41. package/dist/src/keychains.d.ts.map +1 -0
  42. package/dist/src/keychains.js +104 -0
  43. package/dist/src/names.d.ts +26 -0
  44. package/dist/src/names.d.ts.map +1 -0
  45. package/dist/src/names.js +214 -0
  46. package/dist/src/offlineVault/OfflineVaultHalfSigned.d.ts +8 -0
  47. package/dist/src/offlineVault/OfflineVaultHalfSigned.d.ts.map +1 -0
  48. package/dist/src/offlineVault/OfflineVaultHalfSigned.js +59 -0
  49. package/dist/src/offlineVault/OfflineVaultSignable.d.ts +46 -0
  50. package/dist/src/offlineVault/OfflineVaultSignable.d.ts.map +1 -0
  51. package/dist/src/offlineVault/OfflineVaultSignable.js +55 -0
  52. package/dist/src/offlineVault/TransactionExplanation.d.ts +15 -0
  53. package/dist/src/offlineVault/TransactionExplanation.d.ts.map +1 -0
  54. package/dist/src/offlineVault/TransactionExplanation.js +16 -0
  55. package/dist/src/offlineVault/descriptor/index.d.ts +2 -0
  56. package/dist/src/offlineVault/descriptor/index.d.ts.map +1 -0
  57. package/dist/src/offlineVault/descriptor/index.js +18 -0
  58. package/dist/src/offlineVault/descriptor/transaction.d.ts +38 -0
  59. package/dist/src/offlineVault/descriptor/transaction.d.ts.map +1 -0
  60. package/dist/src/offlineVault/descriptor/transaction.js +80 -0
  61. package/dist/src/offlineVault/index.d.ts +6 -0
  62. package/dist/src/offlineVault/index.d.ts.map +1 -0
  63. package/dist/src/offlineVault/index.js +44 -0
  64. package/dist/src/recovery/RecoveryProvider.d.ts +1 -1
  65. package/dist/src/recovery/RecoveryProvider.d.ts.map +1 -1
  66. package/dist/src/recovery/RecoveryProvider.js +2 -4
  67. package/dist/src/recovery/backupKeyRecovery.d.ts +42 -16
  68. package/dist/src/recovery/backupKeyRecovery.d.ts.map +1 -1
  69. package/dist/src/recovery/backupKeyRecovery.js +174 -102
  70. package/dist/src/recovery/baseApi.d.ts +3 -6
  71. package/dist/src/recovery/baseApi.d.ts.map +1 -1
  72. package/dist/src/recovery/baseApi.js +6 -6
  73. package/dist/src/recovery/coingeckoApi.d.ts +0 -3
  74. package/dist/src/recovery/coingeckoApi.d.ts.map +1 -1
  75. package/dist/src/recovery/coingeckoApi.js +1 -4
  76. package/dist/src/recovery/crossChainRecovery.d.ts +5 -4
  77. package/dist/src/recovery/crossChainRecovery.d.ts.map +1 -1
  78. package/dist/src/recovery/crossChainRecovery.js +95 -25
  79. package/dist/src/recovery/index.d.ts +0 -1
  80. package/dist/src/recovery/index.d.ts.map +1 -1
  81. package/dist/src/recovery/index.js +6 -3
  82. package/dist/src/recovery/mempoolApi.d.ts.map +1 -1
  83. package/dist/src/recovery/mempoolApi.js +10 -7
  84. package/dist/src/replayProtection.js +37 -5
  85. package/dist/src/sign.d.ts +31 -8
  86. package/dist/src/sign.d.ts.map +1 -1
  87. package/dist/src/sign.js +116 -15
  88. package/dist/src/transaction/common/verifyPayGoAmount.d.ts +2 -0
  89. package/dist/src/transaction/common/verifyPayGoAmount.d.ts.map +1 -0
  90. package/dist/src/transaction/common/verifyPayGoAmount.js +3 -0
  91. package/dist/src/transaction/descriptor/explainPsbt.d.ts +5 -0
  92. package/dist/src/transaction/descriptor/explainPsbt.d.ts.map +1 -0
  93. package/dist/src/transaction/descriptor/explainPsbt.js +80 -0
  94. package/dist/src/transaction/descriptor/index.d.ts +7 -0
  95. package/dist/src/transaction/descriptor/index.d.ts.map +1 -0
  96. package/dist/src/transaction/descriptor/index.js +14 -0
  97. package/dist/src/transaction/descriptor/parse.d.ts +15 -0
  98. package/dist/src/transaction/descriptor/parse.d.ts.map +1 -0
  99. package/dist/src/transaction/descriptor/parse.js +116 -0
  100. package/dist/src/transaction/descriptor/parseToAmountType.d.ts +13 -0
  101. package/dist/src/transaction/descriptor/parseToAmountType.d.ts.map +1 -0
  102. package/dist/src/transaction/descriptor/parseToAmountType.js +60 -0
  103. package/dist/src/transaction/descriptor/recipient.d.ts +5 -0
  104. package/dist/src/transaction/descriptor/recipient.d.ts.map +1 -0
  105. package/dist/src/transaction/descriptor/recipient.js +3 -0
  106. package/dist/src/transaction/descriptor/signPsbt.d.ts +25 -0
  107. package/dist/src/transaction/descriptor/signPsbt.d.ts.map +1 -0
  108. package/dist/src/transaction/descriptor/signPsbt.js +43 -0
  109. package/dist/src/transaction/descriptor/verifyTransaction.d.ts +33 -0
  110. package/dist/src/transaction/descriptor/verifyTransaction.d.ts.map +1 -0
  111. package/dist/src/transaction/descriptor/verifyTransaction.js +105 -0
  112. package/dist/src/transaction/explainTransaction.d.ts +17 -0
  113. package/dist/src/transaction/explainTransaction.d.ts.map +1 -0
  114. package/dist/src/transaction/explainTransaction.js +67 -0
  115. package/dist/src/transaction/fetchInputs.d.ts +26 -0
  116. package/dist/src/transaction/fetchInputs.d.ts.map +1 -0
  117. package/dist/src/transaction/fetchInputs.js +109 -0
  118. package/dist/src/transaction/fixedScript/explainTransaction.d.ts +30 -0
  119. package/dist/src/transaction/fixedScript/explainTransaction.d.ts.map +1 -0
  120. package/dist/src/transaction/fixedScript/explainTransaction.js +216 -0
  121. package/dist/src/transaction/fixedScript/index.d.ts +6 -0
  122. package/dist/src/transaction/fixedScript/index.d.ts.map +1 -0
  123. package/dist/src/transaction/fixedScript/index.js +13 -0
  124. package/dist/src/transaction/fixedScript/parseOutput.d.ts +26 -0
  125. package/dist/src/transaction/fixedScript/parseOutput.d.ts.map +1 -0
  126. package/dist/src/transaction/fixedScript/parseOutput.js +213 -0
  127. package/dist/src/transaction/fixedScript/parseTransaction.d.ts +7 -0
  128. package/dist/src/transaction/fixedScript/parseTransaction.d.ts.map +1 -0
  129. package/dist/src/transaction/fixedScript/parseTransaction.js +203 -0
  130. package/dist/src/transaction/fixedScript/signTransaction.d.ts +18 -0
  131. package/dist/src/transaction/fixedScript/signTransaction.d.ts.map +1 -0
  132. package/dist/src/transaction/fixedScript/signTransaction.js +100 -0
  133. package/dist/src/transaction/fixedScript/verifyTransaction.d.ts +4 -0
  134. package/dist/src/transaction/fixedScript/verifyTransaction.d.ts.map +1 -0
  135. package/dist/src/transaction/fixedScript/verifyTransaction.js +176 -0
  136. package/dist/src/transaction/index.d.ts +6 -0
  137. package/dist/src/transaction/index.d.ts.map +1 -0
  138. package/dist/src/transaction/index.js +26 -0
  139. package/dist/src/transaction/outputDifference.d.ts +40 -0
  140. package/dist/src/transaction/outputDifference.d.ts.map +1 -0
  141. package/dist/src/transaction/outputDifference.js +47 -0
  142. package/dist/src/transaction/parseTransaction.d.ts +3 -0
  143. package/dist/src/transaction/parseTransaction.d.ts.map +1 -0
  144. package/dist/src/transaction/parseTransaction.js +48 -0
  145. package/dist/src/transaction/recipient.d.ts +29 -0
  146. package/dist/src/transaction/recipient.d.ts.map +1 -0
  147. package/dist/src/transaction/recipient.js +88 -0
  148. package/dist/src/transaction/signTransaction.d.ts +6 -0
  149. package/dist/src/transaction/signTransaction.d.ts.map +1 -0
  150. package/dist/src/transaction/signTransaction.js +102 -0
  151. package/dist/src/transaction/verifyTransaction.d.ts +4 -0
  152. package/dist/src/transaction/verifyTransaction.d.ts.map +1 -0
  153. package/dist/src/transaction/verifyTransaction.js +50 -0
  154. package/dist/src/verifyKey.d.ts +28 -0
  155. package/dist/src/verifyKey.d.ts.map +1 -0
  156. package/dist/src/verifyKey.js +164 -0
  157. package/dist/src/wallet.d.ts +15 -0
  158. package/dist/src/wallet.d.ts.map +1 -0
  159. package/dist/src/wallet.js +8 -0
  160. package/package.json +19 -13
  161. package/.eslintignore +0 -5
  162. package/CHANGELOG.md +0 -235
  163. package/dist/src/parseOutput.d.ts +0 -22
  164. package/dist/src/parseOutput.d.ts.map +0 -1
  165. package/dist/src/parseOutput.js +0 -170
  166. package/dist/src/recovery/smartbitApi.d.ts +0 -11
  167. package/dist/src/recovery/smartbitApi.d.ts.map +0 -1
  168. package/dist/src/recovery/smartbitApi.js +0 -36
  169. package/dist/tsconfig.tsbuildinfo +0 -9887
@@ -0,0 +1,109 @@
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.getPsbtTxInputs = getPsbtTxInputs;
37
+ exports.getTxInputs = getTxInputs;
38
+ const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
39
+ /**
40
+ * Get the inputs for a psbt from a prebuild.
41
+ */
42
+ function getPsbtTxInputs(psbtArg, network) {
43
+ const psbt = psbtArg instanceof utxolib.bitgo.UtxoPsbt ? psbtArg : utxolib.bitgo.createPsbtFromHex(psbtArg, network);
44
+ const txInputs = psbt.txInputs;
45
+ return psbt.data.inputs.map((input, index) => {
46
+ let address;
47
+ let value;
48
+ if (input.witnessUtxo) {
49
+ address = utxolib.address.fromOutputScript(input.witnessUtxo.script, network);
50
+ value = input.witnessUtxo.value;
51
+ }
52
+ else if (input.nonWitnessUtxo) {
53
+ const tx = utxolib.bitgo.createTransactionFromBuffer(input.nonWitnessUtxo, network, {
54
+ amountType: 'bigint',
55
+ });
56
+ const txId = Buffer.from(txInputs[index].hash).reverse().toString('hex');
57
+ if (tx.getId() !== txId) {
58
+ throw new Error('input transaction hex does not match id');
59
+ }
60
+ const prevTxOutputIndex = txInputs[index].index;
61
+ address = utxolib.address.fromOutputScript(tx.outs[prevTxOutputIndex].script, network);
62
+ value = tx.outs[prevTxOutputIndex].value;
63
+ }
64
+ else {
65
+ throw new Error('psbt input is missing both witnessUtxo and nonWitnessUtxo');
66
+ }
67
+ return { address, value, valueString: value.toString() };
68
+ });
69
+ }
70
+ /**
71
+ * Get the inputs for a transaction from a prebuild.
72
+ */
73
+ async function getTxInputs(params) {
74
+ const { txPrebuild, bitgo, coin, disableNetworking, reqId } = params;
75
+ if (!txPrebuild.txHex) {
76
+ throw new Error(`txPrebuild.txHex not set`);
77
+ }
78
+ const transaction = coin.createTransactionFromHex(txPrebuild.txHex);
79
+ const transactionCache = {};
80
+ return await Promise.all(transaction.ins.map(async (currentInput) => {
81
+ const transactionId = Buffer.from(currentInput.hash).reverse().toString('hex');
82
+ const txHex = txPrebuild.txInfo?.txHexes?.[transactionId];
83
+ if (txHex) {
84
+ const localTx = coin.createTransactionFromHex(txHex);
85
+ if (localTx.getId() !== transactionId) {
86
+ throw new Error('input transaction hex does not match id');
87
+ }
88
+ const currentOutput = localTx.outs[currentInput.index];
89
+ const address = utxolib.address.fromOutputScript(currentOutput.script, coin.network);
90
+ return {
91
+ address,
92
+ value: currentOutput.value,
93
+ valueString: currentOutput.value.toString(),
94
+ };
95
+ }
96
+ else if (!transactionCache[transactionId]) {
97
+ if (disableNetworking) {
98
+ throw new Error('attempting to retrieve transaction details externally with networking disabled');
99
+ }
100
+ if (reqId) {
101
+ bitgo.setRequestTracer(reqId);
102
+ }
103
+ transactionCache[transactionId] = await bitgo.get(coin.url(`/public/tx/${transactionId}`)).result();
104
+ }
105
+ const transactionDetails = transactionCache[transactionId];
106
+ return transactionDetails.outputs[currentInput.index];
107
+ }));
108
+ }
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmV0Y2hJbnB1dHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vZmV0Y2hJbnB1dHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRQSwwQ0E0QkM7QUFLRCxrQ0EwQ0M7QUFuRkQsOERBQWdEO0FBS2hEOztHQUVHO0FBQ0gsU0FBZ0IsZUFBZSxDQUM3QixPQUF3QyxFQUN4QyxPQUF3QjtJQUV4QixNQUFNLElBQUksR0FBRyxPQUFPLFlBQVksT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDckgsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUMvQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUMzQyxJQUFJLE9BQWUsQ0FBQztRQUNwQixJQUFJLEtBQWEsQ0FBQztRQUNsQixJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN0QixPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUM5RSxLQUFLLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7UUFDbEMsQ0FBQzthQUFNLElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsMkJBQTJCLENBQVMsS0FBSyxDQUFDLGNBQWMsRUFBRSxPQUFPLEVBQUU7Z0JBQzFGLFVBQVUsRUFBRSxRQUFRO2FBQ3JCLENB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QUFLLENBQUMsZ0ZBQWdGLENBQUMsQ0FBQztZQUNwRyxDQUFDO1lBQ0QsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDVixLQUFLLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEMsQ0FBQztZQUNELGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3RHLENBQUM7UUFDRCxNQUFNLGtCQUFrQixHQUFHLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzNELE9BQU8sa0JBQWtCLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4RCxDQUFDLENBQUMsQ0FDSCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0IHsgQml0R29CYXNlLCBJUmVxdWVzdFRyYWNlciB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcblxuaW1wb3J0IHsgQWJzdHJhY3RVdHhvQ29pbiwgVHJhbnNhY3Rpb25QcmVidWlsZCB9IGZyb20gJy4uL2Fic3RyYWN0VXR4b0NvaW4nO1xuXG4vKipcbiAqIEdldCB0aGUgaW5wdXRzIGZvciBhIHBzYnQgZnJvbSBhIHByZWJ1aWxkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHNidFR4SW5wdXRzKFxuICBwc2J0QXJnOiBzdHJpbmcgfCB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0LFxuICBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmtcbik6IHsgYWRkcmVzczogc3RyaW5nOyB2YWx1ZTogYmlnaW50OyB2YWx1ZVN0cmluZzogc3RyaW5nIH1bXSB7XG4gIGNvbnN0IHBzYnQgPSBwc2J0QXJnIGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvUHNidCA/IHBzYnRBcmcgOiB1dHhvbGliLmJpdGdvLmNyZWF0ZVBzYnRGcm9tSGV4KHBzYnRBcmcsIG5ldHdvcmspO1xuICBjb25zdCB0eElucHV0cyA9IHBzYnQudHhJbnB1dHM7XG4gIHJldHVybiBwc2J0LmRhdGEuaW5wdXRzLm1hcCgoaW5wdXQsIGluZGV4KSA9PiB7XG4gICAgbGV0IGFkZHJlc3M6IHN0cmluZztcbiAgICBsZXQgdmFsdWU6IGJpZ2ludDtcbiAgICBpZiAoaW5wdXQud2l0bmVzc1V0eG8pIHtcbiAgICAgIGFkZHJlc3MgPSB1dHhvbGliLmFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdChpbnB1dC53aXRuZXNzVXR4by5zY3JpcHQsIG5ldHdvcmspO1xuICAgICAgdmFsdWUgPSBpbnB1dC53aXRuZXNzVXR4by52YWx1ZTtcbiAgICB9IGVsc2UgaWYgKGlucHV0Lm5vbldpdG5lc3NVdHhvKSB7XG4gICAgICBjb25zdCB0eCA9IHV0eG9saWIuYml0Z28uY3JlYXRlVHJhbnNhY3Rpb25Gcm9tQnVmZmVyPGJpZ2ludD4oaW5wdXQubm9uV2l0bmVzc1V0eG8sIG5ldHdvcmssIHtcbiAgICAgICAgYW1vdW50VHlwZTogJ2JpZ2ludCcsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHR4SWQgPSAoQnVmZmVyLmZyb20odHhJbnB1dHNbaW5kZXhdLmhhc2gpLnJldmVyc2UoKSBhcyBCdWZmZXIpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgIGlmICh0eC5nZXRJZCgpICE9PSB0eElkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW5wdXQgdHJhbnNhY3Rpb24gaGV4IGRvZXMgbm90IG1hdGNoIGlkJyk7XG4gICAgICB9XG4gICAgICBjb25zdCBwcmV2VHhPdXRwdXRJbmRleCA9IHR4SW5wdXRzW2luZGV4XS5pbmRleDtcbiAgICAgIGFkZHJlc3MgPSB1dHhvbGliLmFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdCh0eC5vdXRzW3ByZXZUeE91dHB1dEluZGV4XS5zY3JpcHQsIG5ldHdvcmspO1xuICAgICAgdmFsdWUgPSB0eC5vdXRzW3ByZXZUeE91dHB1dEluZGV4XS52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdwc2J0IGlucHV0IGlzIG1pc3NpbmcgYm90aCB3aXRuZXNzVXR4byBhbmQgbm9uV2l0bmVzc1V0eG8nKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgYWRkcmVzcywgdmFsdWUsIHZhbHVlU3RyaW5nOiB2YWx1ZS50b1N0cmluZygpIH07XG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCB0aGUgaW5wdXRzIGZvciBhIHRyYW5zYWN0aW9uIGZyb20gYSBwcmVidWlsZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFR4SW5wdXRzPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KHBhcmFtczoge1xuICB0eFByZWJ1aWxkOiBUcmFuc2FjdGlvblByZWJ1aWxkPFROdW1iZXI+O1xuICBiaXRnbzogQml0R29CYXNlO1xuICBjb2luOiBBYnN0cmFjdFV0eG9Db2luO1xuICBkaXNhYmxlTmV0d29ya2luZzogYm9vbGVhbjtcbiAgcmVxSWQ/OiBJUmVxdWVzdFRyYWNlcjtcbn0pOiBQcm9taXNlPHsgYWRkcmVzczogc3RyaW5nOyB2YWx1ZTogVE51bWJlcjsgdmFsdWVTdHJpbmc6IHN0cmluZyB9W10+IHtcbiAgY29uc3QgeyB0eFByZWJ1aWxkLCBiaXRnbywgY29pbiwgZGlzYWJsZU5ldHdvcmtpbmcsIHJlcUlkIH0gPSBwYXJhbXM7XG4gIGlmICghdHhQcmVidWlsZC50eEhleCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgdHhQcmVidWlsZC50eEhleCBub3Qgc2V0YCk7XG4gIH1cbiAgY29uc3QgdHJhbnNhY3Rpb24gPSBjb2luLmNyZWF0ZVRyYW5zYWN0aW9uRnJvbUhleDxUTnVtYmVyPih0eFByZWJ1aWxkLnR4SGV4KTtcbiAgY29uc3QgdHJhbnNhY3Rpb25DYWNoZSA9IHt9O1xuICByZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgdHJhbnNhY3Rpb24uaW5zLm1hcChhc3luYyAoY3VycmVudElucHV0KTogUHJvbWlzZTx7IGFkZHJlc3M6IHN0cmluZzsgdmFsdWU6IFROdW1iZXI7IHZhbHVlU3RyaW5nOiBzdHJpbmcgfT4gPT4ge1xuICAgICAgY29uc3QgdHJhbnNhY3Rpb25JZCA9IChCdWZmZXIuZnJvbShjdXJyZW50SW5wdXQuaGFzaCkucmV2ZXJzZSgpIGFzIEJ1ZmZlcikudG9TdHJpbmcoJ2hleCcpO1xuICAgICAgY29uc3QgdHhIZXggPSB0eFByZWJ1aWxkLnR4SW5mbz8udHhIZXhlcz8uW3RyYW5zYWN0aW9uSWRdO1xuICAgICAgaWYgKHR4SGV4KSB7XG4gICAgICAgIGNvbnN0IGxvY2FsVHggPSBjb2luLmNyZWF0ZVRyYW5zYWN0aW9uRnJvbUhleDxUTnVtYmVyPih0eEhleCk7XG4gICAgICAgIGlmIChsb2NhbFR4LmdldElkKCkgIT09IHRyYW5zYWN0aW9uSWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2lucHV0IHRyYW5zYWN0aW9uIGhleCBkb2VzIG5vdCBtYXRjaCBpZCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnJlbnRPdXRwdXQgPSBsb2NhbFR4Lm91dHNbY3VycmVudElucHV0LmluZGV4XTtcbiAgICAgICAgY29uc3QgYWRkcmVzcyA9IHV0eG9saWIuYWRkcmVzcy5mcm9tT3V0cHV0U2NyaXB0KGN1cnJlbnRPdXRwdXQuc2NyaXB0LCBjb2luLm5ldHdvcmspO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGFkZHJlc3MsXG4gICAgICAgICAgdmFsdWU6IGN1cnJlbnRPdXRwdXQudmFsdWUsXG4gICAgICAgICAgdmFsdWVTdHJpbmc6IGN1cnJlbnRPdXRwdXQudmFsdWUudG9TdHJpbmcoKSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoIXRyYW5zYWN0aW9uQ2FjaGVbdHJhbnNhY3Rpb25JZF0pIHtcbiAgICAgICAgaWYgKGRpc2FibGVOZXR3b3JraW5nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdhdHRlbXB0aW5nIHRvIHJldHJpZXZlIHRyYW5zYWN0aW9uIGRldGFpbHMgZXh0ZXJuYWxseSB3aXRoIG5ldHdvcmtpbmcgZGlzYWJsZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVxSWQpIHtcbiAgICAgICAgICBiaXRnby5zZXRSZXF1ZXN0VHJhY2VyKHJlcUlkKTtcbiAgICAgICAgfVxuICAgICAgICB0cmFuc2FjdGlvbkNhY2hlW3RyYW5zYWN0aW9uSWRdID0gYXdhaXQgYml0Z28uZ2V0KGNvaW4udXJsKGAvcHVibGljL3R4LyR7dHJhbnNhY3Rpb25JZH1gKSkucmVzdWx0KCk7XG4gICAgICB9XG4gICAgICBjb25zdCB0cmFuc2FjdGlvbkRldGFpbHMgPSB0cmFuc2FjdGlvbkNhY2hlW3RyYW5zYWN0aW9uSWRdO1xuICAgICAgcmV0dXJuIHRyYW5zYWN0aW9uRGV0YWlscy5vdXRwdXRzW2N1cnJlbnRJbnB1dC5pbmRleF07XG4gICAgfSlcbiAgKTtcbn1cbiJdfQ==
@@ -0,0 +1,30 @@
1
+ import * as utxolib from '@bitgo-beta/utxo-lib';
2
+ import { bitgo } from '@bitgo-beta/utxo-lib';
3
+ import { TransactionExplanation } from '../../abstractUtxoCoin';
4
+ export type ChangeAddressInfo = {
5
+ address: string;
6
+ chain: number;
7
+ index: number;
8
+ };
9
+ /**
10
+ * Decompose a raw psbt into useful information, such as the total amounts,
11
+ * change amounts, and transaction outputs.
12
+ */
13
+ export declare function explainPsbt<TNumber extends number | bigint, Tx extends bitgo.UtxoTransaction<bigint>>(psbt: bitgo.UtxoPsbt<Tx>, params: {
14
+ pubs?: string[];
15
+ txInfo?: {
16
+ unspents?: bitgo.Unspent<TNumber>[];
17
+ };
18
+ }, network: utxolib.Network): TransactionExplanation;
19
+ export declare function explainLegacyTx<TNumber extends number | bigint>(tx: bitgo.UtxoTransaction<TNumber>, params: {
20
+ pubs?: string[];
21
+ txInfo?: {
22
+ unspents?: bitgo.Unspent<TNumber>[];
23
+ };
24
+ changeInfo?: {
25
+ address: string;
26
+ chain: number;
27
+ index: number;
28
+ }[];
29
+ }, network: utxolib.Network): TransactionExplanation;
30
+ //# sourceMappingURL=explainTransaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explainTransaction.d.ts","sourceRoot":"","sources":["../../../../src/transaction/fixedScript/explainTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAyB,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAGpE,OAAO,EAAU,sBAAsB,EAA2B,MAAM,wBAAwB,CAAC;AAGjG,MAAM,MAAM,iBAAiB,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAiIlF;;;GAGG;AACH,wBAAgB,WAAW,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAAE,EAAE,SAAS,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,EACnG,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,EACxB,MAAM,EAAE;IACN,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAA;KAAE,CAAC;CAClD,EACD,OAAO,EAAE,OAAO,CAAC,OAAO,GACvB,sBAAsB,CAuExB;AAED,wBAAgB,eAAe,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC7D,EAAE,EAAE,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,EAClC,MAAM,EAAE;IACN,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAA;KAAE,CAAC;IACjD,UAAU,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAClE,EACD,OAAO,EAAE,OAAO,CAAC,OAAO,GACvB,sBAAsB,CAQxB"}
@@ -0,0 +1,216 @@
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.explainPsbt = explainPsbt;
37
+ exports.explainLegacyTx = explainLegacyTx;
38
+ const utxolib = __importStar(require("@bitgo-beta/utxo-lib"));
39
+ const utxo_lib_1 = require("@bitgo-beta/utxo-lib");
40
+ const recipient_1 = require("../recipient");
41
+ function explainCommon(tx, params, network) {
42
+ const displayOrder = ['id', 'outputAmount', 'changeAmount', 'outputs', 'changeOutputs'];
43
+ let spendAmount = BigInt(0);
44
+ let changeAmount = BigInt(0);
45
+ const changeOutputs = [];
46
+ const outputs = [];
47
+ const { changeInfo } = params;
48
+ const changeAddresses = changeInfo?.map((info) => info.address) ?? [];
49
+ tx.outs.forEach((currentOutput) => {
50
+ // Try to encode the script pubkey with an address. If it fails, try to parse it as an OP_RETURN output with the prefix.
51
+ // If that fails, then it is an unrecognized scriptPubkey and should fail
52
+ const currentAddress = (0, recipient_1.toExtendedAddressFormat)(currentOutput.script, network);
53
+ const currentAmount = BigInt(currentOutput.value);
54
+ if (changeAddresses.includes(currentAddress)) {
55
+ // this is change
56
+ changeAmount += currentAmount;
57
+ const change = changeInfo?.find((change) => change.address === currentAddress);
58
+ if (!change) {
59
+ throw new Error('changeInfo must have change information for all change outputs');
60
+ }
61
+ changeOutputs.push({
62
+ address: currentAddress,
63
+ amount: currentAmount.toString(),
64
+ chain: change.chain,
65
+ index: change.index,
66
+ external: false,
67
+ });
68
+ return;
69
+ }
70
+ spendAmount += currentAmount;
71
+ outputs.push({
72
+ address: currentAddress,
73
+ amount: currentAmount.toString(),
74
+ // If changeInfo has a length greater than or equal to zero, it means that the change information
75
+ // was provided to the function but the output was not identified as change. In this case,
76
+ // the output is external, and we can set it as so. If changeInfo is undefined, it means we were
77
+ // given no information about change outputs, so we can't determine anything about the output,
78
+ // so we leave it undefined.
79
+ external: changeInfo ? true : undefined,
80
+ });
81
+ });
82
+ const outputDetails = {
83
+ outputAmount: spendAmount.toString(),
84
+ changeAmount: changeAmount.toString(),
85
+ outputs,
86
+ changeOutputs,
87
+ };
88
+ let fee;
89
+ let locktime;
90
+ if (params.feeInfo) {
91
+ displayOrder.push('fee');
92
+ fee = params.feeInfo;
93
+ }
94
+ if (Number.isInteger(tx.locktime) && tx.locktime > 0) {
95
+ displayOrder.push('locktime');
96
+ locktime = tx.locktime;
97
+ }
98
+ return { displayOrder, id: tx.getId(), ...outputDetails, fee, locktime };
99
+ }
100
+ function getRootWalletKeys(params) {
101
+ const keys = params.pubs?.map((xpub) => utxo_lib_1.bip32.fromBase58(xpub));
102
+ return keys && keys.length === 3 ? new utxo_lib_1.bitgo.RootWalletKeys(keys) : undefined;
103
+ }
104
+ function getPsbtInputSignaturesCount(psbt, params) {
105
+ const rootWalletKeys = getRootWalletKeys(params);
106
+ return rootWalletKeys
107
+ ? utxo_lib_1.bitgo.getSignatureValidationArrayPsbt(psbt, rootWalletKeys).map((sv) => sv[1].filter((v) => v).length)
108
+ : Array(psbt.data.inputs.length).fill(0);
109
+ }
110
+ function getTxInputSignaturesCount(tx, params, network) {
111
+ const prevOutputs = params.txInfo?.unspents?.map((u) => utxo_lib_1.bitgo.toOutput(u, network));
112
+ const rootWalletKeys = getRootWalletKeys(params);
113
+ const { unspents = [] } = params.txInfo ?? {};
114
+ // get the number of signatures per input
115
+ return tx.ins.map((input, idx) => {
116
+ if (unspents.length !== tx.ins.length) {
117
+ return 0;
118
+ }
119
+ if (!prevOutputs) {
120
+ throw new Error(`invalid state`);
121
+ }
122
+ if (!rootWalletKeys) {
123
+ // no pub keys or incorrect number of pub keys
124
+ return 0;
125
+ }
126
+ try {
127
+ return utxo_lib_1.bitgo.verifySignatureWithUnspent(tx, idx, unspents, rootWalletKeys).filter((v) => v).length;
128
+ }
129
+ catch (e) {
130
+ // some other error occurred and we can't validate the signatures
131
+ return 0;
132
+ }
133
+ });
134
+ }
135
+ /**
136
+ * Decompose a raw psbt into useful information, such as the total amounts,
137
+ * change amounts, and transaction outputs.
138
+ */
139
+ function explainPsbt(psbt, params, network) {
140
+ const txOutputs = psbt.txOutputs;
141
+ function getChainAndIndexFromBip32Derivations(output) {
142
+ const derivations = output.bip32Derivation ?? output.tapBip32Derivation ?? undefined;
143
+ if (!derivations) {
144
+ return undefined;
145
+ }
146
+ const paths = derivations.map((d) => d.path);
147
+ if (!paths || paths.length !== 3) {
148
+ throw new Error('expected 3 paths in bip32Derivation or tapBip32Derivation');
149
+ }
150
+ if (!paths.every((p) => paths[0] === p)) {
151
+ throw new Error('expected all paths to be the same');
152
+ }
153
+ paths.forEach((path) => {
154
+ if (paths[0] !== path) {
155
+ throw new Error('Unable to get a single chain and index on the output because there are different paths for different keys');
156
+ }
157
+ });
158
+ return utxolib.bitgo.getChainAndIndexFromPath(paths[0]);
159
+ }
160
+ function getChangeInfo() {
161
+ try {
162
+ return utxolib.bitgo.findInternalOutputIndices(psbt).map((i) => {
163
+ const derivationInformation = getChainAndIndexFromBip32Derivations(psbt.data.outputs[i]);
164
+ if (!derivationInformation) {
165
+ throw new Error('could not find derivation information on bip32Derivation or tapBip32Derivation');
166
+ }
167
+ return {
168
+ address: utxolib.address.fromOutputScript(txOutputs[i].script, network),
169
+ external: false,
170
+ ...derivationInformation,
171
+ };
172
+ });
173
+ }
174
+ catch (e) {
175
+ if (e instanceof utxolib.bitgo.ErrorNoMultiSigInputFound) {
176
+ return undefined;
177
+ }
178
+ throw e;
179
+ }
180
+ }
181
+ const changeInfo = getChangeInfo();
182
+ const tx = psbt.getUnsignedTx();
183
+ const common = explainCommon(tx, { ...params, changeInfo }, network);
184
+ const inputSignaturesCount = getPsbtInputSignaturesCount(psbt, params);
185
+ // Set fee from subtracting inputs from outputs
186
+ const outputAmount = txOutputs.reduce((cumulative, curr) => cumulative + BigInt(curr.value), BigInt(0));
187
+ const inputAmount = psbt.txInputs.reduce((cumulative, txInput, i) => {
188
+ const data = psbt.data.inputs[i];
189
+ if (data.witnessUtxo) {
190
+ return cumulative + BigInt(data.witnessUtxo.value);
191
+ }
192
+ else if (data.nonWitnessUtxo) {
193
+ const tx = utxo_lib_1.bitgo.createTransactionFromBuffer(data.nonWitnessUtxo, network, { amountType: 'bigint' });
194
+ return cumulative + BigInt(tx.outs[txInput.index].value);
195
+ }
196
+ else {
197
+ throw new Error('could not find value on input');
198
+ }
199
+ }, BigInt(0));
200
+ return {
201
+ ...common,
202
+ fee: (inputAmount - outputAmount).toString(),
203
+ inputSignatures: inputSignaturesCount,
204
+ signatures: inputSignaturesCount.reduce((prev, curr) => (curr > prev ? curr : prev), 0),
205
+ };
206
+ }
207
+ function explainLegacyTx(tx, params, network) {
208
+ const common = explainCommon(tx, params, network);
209
+ const inputSignaturesCount = getTxInputSignaturesCount(tx, params, network);
210
+ return {
211
+ ...common,
212
+ inputSignatures: inputSignaturesCount,
213
+ signatures: inputSignaturesCount.reduce((prev, curr) => (curr > prev ? curr : prev), 0),
214
+ };
215
+ }
216
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwbGFpblRyYW5zYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L2V4cGxhaW5UcmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTRJQSxrQ0E4RUM7QUFFRCwwQ0FnQkM7QUE1T0QsOERBQWdEO0FBQ2hELG1EQUFvRTtBQUlwRSw0Q0FBdUQ7QUFJdkQsU0FBUyxhQUFhLENBQ3BCLEVBQWtDLEVBQ2xDLE1BR0MsRUFDRCxPQUF3QjtJQUV4QixNQUFNLFlBQVksR0FBRyxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxlQUFlLENBQUMsQ0FBQztJQUN4RixJQUFJLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUIsSUFBSSxZQUFZLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdCLE1BQU0sYUFBYSxHQUE4QixFQUFFLENBQUM7SUFDcEQsTUFBTSxPQUFPLEdBQWEsRUFBRSxDQUFDO0lBRTdCLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFDOUIsTUFBTSxlQUFlLEdBQUcsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUV0RSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLGFBQWEsRUFBRSxFQUFFO1FBQ2hDLHdIQUF3SDtRQUN4SCx5RUFBeUU7UUFDekUsTUFBTSxjQUFjLEdBQUcsSUFBQSxtQ0FBdUIsRUFBQyxhQUFhLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzlFLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFF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QUM7SUFDSCxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFZCxPQUFPO1FBQ0wsR0FBRyxNQUFNO1FBQ1QsR0FBRyxFQUFFLENBQUMsV0FBVyxHQUFHLFlBQVksQ0FBQyxDQUFDLFFBQVEsRUFBRTtRQUM1QyxlQUFlLEVBQUUsb0JBQW9CO1FBQ3JDLFVBQVUsRUFBRSxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQzlELENBQUM7QUFDOUIsQ0FBQztBQUVELFNBQWdCLGVBQWUsQ0FDN0IsRUFBa0MsRUFDbEMsTUFJQyxFQUNELE9BQXdCO0lBRXhCLE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2xELE1BQU0sb0JBQW9CLEdBQUcseUJBQXlCLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM1RSxPQUFPO1FBQ0wsR0FBRyxNQUFNO1FBQ1QsZUFBZSxFQUFFLG9CQUFvQjtRQUNyQyxVQUFVLEVBQUUsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUM5RCxDQUFDO0FBQzlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7IGJpcDMyLCBCSVAzMkludGVyZmFjZSwgYml0Z28gfSBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQgeyBUcmlwbGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5cbmltcG9ydCB7IE91dHB1dCwgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiwgRml4ZWRTY3JpcHRXYWxsZXRPdXRwdXQgfSBmcm9tICcuLi8uLi9hYnN0cmFjdFV0eG9Db2luJztcbmltcG9ydCB7IHRvRXh0ZW5kZWRBZGRyZXNzRm9ybWF0IH0gZnJvbSAnLi4vcmVjaXBpZW50JztcblxuZXhwb3J0IHR5cGUgQ2hhbmdlQWRkcmVzc0luZm8gPSB7IGFkZHJlc3M6IHN0cmluZzsgY2hhaW46IG51bWJlcjsgaW5kZXg6IG51bWJlciB9O1xuXG5mdW5jdGlvbiBleHBsYWluQ29tbW9uPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICB0eDogYml0Z28uVXR4b1RyYW5zYWN0aW9uPFROdW1iZXI+LFxuICBwYXJhbXM6IHtcbiAgICBjaGFuZ2VJbmZvPzogQ2hhbmdlQWRkcmVzc0luZm9bXTtcbiAgICBmZWVJbmZvPzogc3RyaW5nO1xuICB9LFxuICBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmtcbikge1xuICBjb25zdCBkaXNwbGF5T3JkZXIgPSBbJ2lkJywgJ291dHB1dEFtb3VudCcsICdjaGFuZ2VBbW91bnQnLCAnb3V0cHV0cycsICdjaGFuZ2VPdXRwdXRzJ107XG4gIGxldCBzcGVuZEFtb3VudCA9IEJpZ0ludCgwKTtcbiAgbGV0IGNoYW5nZUFtb3VudCA9IEJpZ0ludCgwKTtcbiAgY29uc3QgY2hhbmdlT3V0cHV0czogRml4ZWRTY3JpcHRXYWxsZXRPdXRwdXRbXSA9IFtdO1xuICBjb25zdCBvdXRwdXRzOiBPdXRwdXRbXSA9IFtdO1xuXG4gIGNvbnN0IHsgY2hhbmdlSW5mbyB9ID0gcGFyYW1zO1xuICBjb25zdCBjaGFuZ2VBZGRyZXNzZXMgPSBjaGFuZ2VJbmZvPy5tYXAoKGluZm8pID0+IGluZm8uYWRkcmVzcykgPz8gW107XG5cbiAgdHgub3V0cy5mb3JFYWNoKChjdXJyZW50T3V0cHV0KSA9PiB7XG4gICAgLy8gVHJ5IHRvIGVuY29kZSB0aGUgc2NyaXB0IHB1YmtleSB3aXRoIGFuIGFkZHJlc3MuIElmIGl0IGZhaWxzLCB0cnkgdG8gcGFyc2UgaXQgYXMgYW4gT1BfUkVUVVJOIG91dHB1dCB3aXRoIHRoZSBwcmVmaXguXG4gICAgLy8gSWYgdGhhdCBmYWlscywgdGhlbiBpdCBpcyBhbiB1bnJlY29nbml6ZWQgc2NyaXB0UHVia2V5IGFuZCBzaG91bGQgZmFpbFxuICAgIGNvbnN0IGN1cnJlbnRBZGRyZXNzID0gdG9FeHRlbmRlZEFkZHJlc3NGb3JtYXQoY3VycmVudE91dHB1dC5zY3JpcHQsIG5ldHdvcmspO1xuICAgIGNvbnN0IGN1cnJlbnRBbW91bnQgPSBCaWdJbnQoY3VycmVudE91dHB1dC52YWx1ZSk7XG5cbiAgICBpZiAoY2hhbmdlQWRkcmVzc2VzLmluY2x1ZGVzKGN1cnJlbnRBZGRyZXNzKSkge1xuICAgICAgLy8gdGhpcyBpcyBjaGFuZ2VcbiAgICAgIGNoYW5nZUFtb3VudCArPSBjdXJyZW50QW1vdW50O1xuICAgICAgY29uc3QgY2hhbmdlID0gY2hhbmdlSW5mbz8uZmluZCgoY2hhbmdlKSA9PiBjaGFuZ2UuYWRkcmVzcyA9PT0gY3VycmVudEFkZHJlc3MpO1xuXG4gICAgICBpZiAoIWNoYW5nZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NoYW5nZUluZm8gbXVzdCBoYXZlIGNoYW5nZSBpbmZvcm1hdGlvbiBmb3IgYWxsIGNoYW5nZSBvdXRwdXRzJyk7XG4gICAgICB9XG4gICAgICBjaGFuZ2VPdXRwdXRzLnB1c2goe1xuICAgICAgICBhZGRyZXNzOiBjdXJyZW50QWRkcmVzcyxcbiAgICAgICAgYW1vdW50OiBjdXJyZW50QW1vdW50LnRvU3RyaW5nKCksXG4gICAgICAgIGNoYWluOiBjaGFuZ2UuY2hhaW4sXG4gICAgICAgIGluZGV4OiBjaGFuZ2UuaW5kZXgsXG4gICAgICAgIGV4dGVybmFsOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNwZW5kQW1vdW50ICs9IGN1cnJlbnRBbW91bnQ7XG4gICAgb3V0cHV0cy5wdXNoKHtcbiAgICAgIGFkZHJlc3M6IGN1cnJlbnRBZGRyZXNzLFxuICAgICAgYW1vdW50OiBjdXJyZW50QW1vdW50LnRvU3RyaW5nKCksXG4gICAgICAvLyBJZiBjaGFuZ2VJbmZvIGhhcyBhIGxlbmd0aCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVybywgaXQgbWVhbnMgdGhhdCB0aGUgY2hhbmdlIGluZm9ybWF0aW9uXG4gICAgICAvLyB3YXMgcHJvdmlkZWQgdG8gdGhlIGZ1bmN0aW9uIGJ1dCB0aGUgb3V0cHV0IHdhcyBub3QgaWRlbnRpZmllZCBhcyBjaGFuZ2UuIEluIHRoaXMgY2FzZSxcbiAgICAgIC8vIHRoZSBvdXRwdXQgaXMgZXh0ZXJuYWwsIGFuZCB3ZSBjYW4gc2V0IGl0IGFzIHNvLiBJZiBjaGFuZ2VJbmZvIGlzIHVuZGVmaW5lZCwgaXQgbWVhbnMgd2Ugd2VyZVxuICAgICAgLy8gZ2l2ZW4gbm8gaW5mb3JtYXRpb24gYWJvdXQgY2hhbmdlIG91dHB1dHMsIHNvIHdlIGNhbid0IGRldGVybWluZSBhbnl0aGluZyBhYm91dCB0aGUgb3V0cHV0LFxuICAgICAgLy8gc28gd2UgbGVhdmUgaXQgdW5kZWZpbmVkLlxuICAgICAgZXh0ZXJuYWw6IGNoYW5nZUluZm8gPyB0cnVlIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuICB9KTtcblxuICBjb25zdCBvdXRwdXREZXRhaWxzID0ge1xuICAgIG91dHB1dEFtb3VudDogc3BlbmRBbW91bnQudG9TdHJpbmcoKSxcbiAgICBjaGFuZ2VBbW91bnQ6IGNoYW5nZUFtb3VudC50b1N0cmluZygpLFxuICAgIG91dHB1dHMsXG4gICAgY2hhbmdlT3V0cHV0cyxcbiAgfTtcblxuICBsZXQgZmVlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGxldCBsb2NrdGltZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gIGlmIChwYXJhbXMuZmVlSW5mbykge1xuICAgIGRpc3BsYXlPcmRlci5wdXNoKCdmZWUnKTtcbiAgICBmZWUgPSBwYXJhbXMuZmVlSW5mbztcbiAgfVxuXG4gIGlmIChOdW1iZXIuaXNJbnRlZ2VyKHR4LmxvY2t0aW1lKSAmJiB0eC5sb2NrdGltZSA+IDApIHtcbiAgICBkaXNwbGF5T3JkZXIucHVzaCgnbG9ja3RpbWUnKTtcbiAgICBsb2NrdGltZSA9IHR4LmxvY2t0aW1lO1xuICB9XG5cbiAgcmV0dXJuIHsgZGlzcGxheU9yZGVyLCBpZDogdHguZ2V0SWQoKSwgLi4ub3V0cHV0RGV0YWlscywgZmVlLCBsb2NrdGltZSB9O1xufVxuXG5mdW5jdGlvbiBnZXRSb290V2FsbGV0S2V5cyhwYXJhbXM6IHsgcHVicz86IHN0cmluZ1tdIH0pIHtcbiAgY29uc3Qga2V5cyA9IHBhcmFtcy5wdWJzPy5tYXAoKHhwdWIpID0+IGJpcDMyLmZyb21CYXNlNTgoeHB1YikpO1xuICByZXR1cm4ga2V5cyAmJiBrZXlzLmxlbmd0aCA9PT0gMyA/IG5ldyBiaXRnby5Sb290V2FsbGV0S2V5cyhrZXlzIGFzIFRyaXBsZTxCSVAzMkludGVyZmFjZT4pIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBnZXRQc2J0SW5wdXRTaWduYXR1cmVzQ291bnQoXG4gIHBzYnQ6IGJpdGdvLlV0eG9Qc2J0LFxuICBwYXJhbXM6IHtcbiAgICBwdWJzPzogc3RyaW5nW107XG4gIH1cbikge1xuICBjb25zdCByb290V2FsbGV0S2V5cyA9IGdldFJvb3RXYWxsZXRLZXlzKHBhcmFtcyk7XG4gIHJldHVybiByb290V2FsbGV0S2V5c1xuICAgID8gYml0Z28uZ2V0U2lnbmF0dXJlVmFsaWRhdGlvbkFycmF5UHNidChwc2J0LCByb290V2FsbGV0S2V5cykubWFwKChzdikgPT4gc3ZbMV0uZmlsdGVyKCh2KSA9PiB2KS5sZW5ndGgpXG4gICAgOiAoQXJyYXkocHNidC5kYXRhLmlucHV0cy5sZW5ndGgpIGFzIG51bWJlcltdKS5maWxsKDApO1xufVxuXG5mdW5jdGlvbiBnZXRUeElucHV0U2lnbmF0dXJlc0NvdW50PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICB0eDogYml0Z28uVXR4b1RyYW5zYWN0aW9uPFROdW1iZXI+LFxuICBwYXJhbXM6IHtcbiAgICB0eEluZm8/OiB7IHVuc3BlbnRzPzogYml0Z28uVW5zcGVudDxUTnVtYmVyPltdIH07XG4gICAgcHVicz86IHN0cmluZ1tdO1xuICB9LFxuICBuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmtcbikge1xuICBjb25zdCBwcmV2T3V0cHV0cyA9IHBhcmFtcy50eEluZm8/LnVuc3BlbnRzPy5tYXAoKHUpID0+IGJpdGdvLnRvT3V0cHV0PFROdW1iZXI+KHUsIG5ldHdvcmspKTtcbiAgY29uc3Qgcm9vdFdhbGxldEtleXMgPSBnZXRSb290V2FsbGV0S2V5cyhwYXJhbXMpO1xuICBjb25zdCB7IHVuc3BlbnRzID0gW10gfSA9IHBhcmFtcy50eEluZm8gPz8ge307XG5cbiAgLy8gZ2V0IHRoZSBudW1iZXIgb2Ygc2lnbmF0dXJlcyBwZXIgaW5wdXRcbiAgcmV0dXJuIHR4Lmlucy5tYXAoKGlucHV0LCBpZHgpOiBudW1iZXIgPT4ge1xuICAgIGlmICh1bnNwZW50cy5sZW5ndGggIT09IHR4Lmlucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBpZiAoIXByZXZPdXRwdXRzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgc3RhdGVgKTtcbiAgICB9XG4gICAgaWYgKCFyb290V2FsbGV0S2V5cykge1xuICAgICAgLy8gbm8gcHViIGtleXMgb3IgaW5jb3JyZWN0IG51bWJlciBvZiBwdWIga2V5c1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYml0Z28udmVyaWZ5U2lnbmF0dXJlV2l0aFVuc3BlbnQ8VE51bWJlcj4odHgsIGlkeCwgdW5zcGVudHMsIHJvb3RXYWxsZXRLZXlzKS5maWx0ZXIoKHYpID0+IHYpLmxlbmd0aDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBzb21lIG90aGVyIGVycm9yIG9jY3VycmVkIGFuZCB3ZSBjYW4ndCB2YWxpZGF0ZSB0aGUgc2lnbmF0dXJlc1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBEZWNvbXBvc2UgYSByYXcgcHNidCBpbnRvIHVzZWZ1bCBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgdG90YWwgYW1vdW50cyxcbiAqIGNoYW5nZSBhbW91bnRzLCBhbmQgdHJhbnNhY3Rpb24gb3V0cHV0cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4cGxhaW5Qc2J0PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQsIFR4IGV4dGVuZHMgYml0Z28uVXR4b1RyYW5zYWN0aW9uPGJpZ2ludD4+KFxuICBwc2J0OiBiaXRnby5VdHhvUHNidDxUeD4sXG4gIHBhcmFtczoge1xuICAgIHB1YnM/OiBzdHJpbmdbXTtcbiAgICB0eEluZm8/OiB7IHVuc3BlbnRzPzogYml0Z28uVW5zcGVudDxUTnVtYmVyPltdIH07XG4gIH0sXG4gIG5ldHdvcms6IHV0eG9saWIuTmV0d29ya1xuKTogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB7XG4gIGNvbnN0IHR4T3V0cHV0cyA9IHBzYnQudHhPdXRwdXRzO1xuXG4gIGZ1bmN0aW9uIGdldENoYWluQW5kSW5kZXhGcm9tQmlwMzJEZXJpdmF0aW9ucyhvdXRwdXQ6IGJpdGdvLlBzYnRPdXRwdXQpIHtcbiAgICBjb25zdCBkZXJpdmF0aW9ucyA9IG91dHB1dC5iaXAzMkRlcml2YXRpb24gPz8gb3V0cHV0LnRhcEJpcDMyRGVyaXZhdGlvbiA/PyB1bmRlZmluZWQ7XG4gICAgaWYgKCFkZXJpdmF0aW9ucykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgcGF0aHMgPSBkZXJpdmF0aW9ucy5tYXAoKGQpID0+IGQucGF0aCk7XG4gICAgaWYgKCFwYXRocyB8fCBwYXRocy5sZW5ndGggIT09IDMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQgMyBwYXRocyBpbiBiaXAzMkRlcml2YXRpb24gb3IgdGFwQmlwMzJEZXJpdmF0aW9uJyk7XG4gICAgfVxuICAgIGlmICghcGF0aHMuZXZlcnkoKHApID0+IHBhdGhzWzBdID09PSBwKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCBhbGwgcGF0aHMgdG8gYmUgdGhlIHNhbWUnKTtcbiAgICB9XG5cbiAgICBwYXRocy5mb3JFYWNoKChwYXRoKSA9PiB7XG4gICAgICBpZiAocGF0aHNbMF0gIT09IHBhdGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdVbmFibGUgdG8gZ2V0IGEgc2luZ2xlIGNoYWluIGFuZCBpbmRleCBvbiB0aGUgb3V0cHV0IGJlY2F1c2UgdGhlcmUgYXJlIGRpZmZlcmVudCBwYXRocyBmb3IgZGlmZmVyZW50IGtleXMnXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHV0eG9saWIuYml0Z28uZ2V0Q2hhaW5BbmRJbmRleEZyb21QYXRoKHBhdGhzWzBdKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldENoYW5nZUluZm8oKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB1dHhvbGliLmJpdGdvLmZpbmRJbnRlcm5hbE91dHB1dEluZGljZXMocHNidCkubWFwKChpKSA9PiB7XG4gICAgICAgIGNvbnN0IGRlcml2YXRpb25JbmZvcm1hdGlvbiA9IGdldENoYWluQW5kSW5kZXhGcm9tQmlwMzJEZXJpdmF0aW9ucyhwc2J0LmRhdGEub3V0cHV0c1tpXSk7XG4gICAgICAgIGlmICghZGVyaXZhdGlvbkluZm9ybWF0aW9uKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgZmluZCBkZXJpdmF0aW9uIGluZm9ybWF0aW9uIG9uIGJpcDMyRGVyaXZhdGlvbiBvciB0YXBCaXAzMkRlcml2YXRpb24nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGFkZHJlc3M6IHV0eG9saWIuYWRkcmVzcy5mcm9tT3V0cHV0U2NyaXB0KHR4T3V0cHV0c1tpXS5zY3JpcHQsIG5ldHdvcmspLFxuICAgICAgICAgIGV4dGVybmFsOiBmYWxzZSxcbiAgICAgICAgICAuLi5kZXJpdmF0aW9uSW5mb3JtYXRpb24sXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uRXJyb3JOb011bHRpU2lnSW5wdXRGb3VuZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cbiAgY29uc3QgY2hhbmdlSW5mbyA9IGdldENoYW5nZUluZm8oKTtcbiAgY29uc3QgdHggPSBwc2J0LmdldFVuc2lnbmVkVHgoKSBhcyBiaXRnby5VdHhvVHJhbnNhY3Rpb248VE51bWJlcj47XG4gIGNvbnN0IGNvbW1vbiA9IGV4cGxhaW5Db21tb24odHgsIHsgLi4ucGFyYW1zLCBjaGFuZ2VJbmZvIH0sIG5ldHdvcmspO1xuICBjb25zdCBpbnB1dFNpZ25hdHVyZXNDb3VudCA9IGdldFBzYnRJbnB1dFNpZ25hdHVyZXNDb3VudChwc2J0LCBwYXJhbXMpO1xuXG4gIC8vIFNldCBmZWUgZnJvbSBzdWJ0cmFjdGluZyBpbnB1dHMgZnJvbSBvdXRwdXRzXG4gIGNvbnN0IG91dHB1dEFtb3VudCA9IHR4T3V0cHV0cy5yZWR1Y2UoKGN1bXVsYXRpdmUsIGN1cnIpID0+IGN1bXVsYXRpdmUgKyBCaWdJbnQoY3Vyci52YWx1ZSksIEJpZ0ludCgwKSk7XG4gIGNvbnN0IGlucHV0QW1vdW50ID0gcHNidC50eElucHV0cy5yZWR1Y2UoKGN1bXVsYXRpdmUsIHR4SW5wdXQsIGkpID0+IHtcbiAgICBjb25zdCBkYXRhID0gcHNidC5kYXRhLmlucHV0c1tpXTtcbiAgICBpZiAoZGF0YS53aXRuZXNzVXR4bykge1xuICAgICAgcmV0dXJuIGN1bXVsYXRpdmUgKyBCaWdJbnQoZGF0YS53aXRuZXNzVXR4by52YWx1ZSk7XG4gICAgfSBlbHNlIGlmIChkYXRhLm5vbldpdG5lc3NVdHhvKSB7XG4gICAgICBjb25zdCB0eCA9IGJpdGdvLmNyZWF0ZVRyYW5zYWN0aW9uRnJvbUJ1ZmZlcjxiaWdpbnQ+KGRhdGEubm9uV2l0bmVzc1V0eG8sIG5ldHdvcmssIHsgYW1vdW50VHlwZTogJ2JpZ2ludCcgfSk7XG4gICAgICByZXR1cm4gY3VtdWxhdGl2ZSArIEJpZ0ludCh0eC5vdXRzW3R4SW5wdXQuaW5kZXhdLnZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgZmluZCB2YWx1ZSBvbiBpbnB1dCcpO1xuICAgIH1cbiAgfSwgQmlnSW50KDApKTtcblxuICByZXR1cm4ge1xuICAgIC4uLmNvbW1vbixcbiAgICBmZWU6IChpbnB1dEFtb3VudCAtIG91dHB1dEFtb3VudCkudG9TdHJpbmcoKSxcbiAgICBpbnB1dFNpZ25hdHVyZXM6IGlucHV0U2lnbmF0dXJlc0NvdW50LFxuICAgIHNpZ25hdHVyZXM6IGlucHV0U2lnbmF0dXJlc0NvdW50LnJlZHVjZSgocHJldiwgY3VycikgPT4gKGN1cnIgPiBwcmV2ID8gY3VyciA6IHByZXYpLCAwKSxcbiAgfSBhcyBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwbGFpbkxlZ2FjeVR4PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICB0eDogYml0Z28uVXR4b1RyYW5zYWN0aW9uPFROdW1iZXI+LFxuICBwYXJhbXM6IHtcbiAgICBwdWJzPzogc3RyaW5nW107XG4gICAgdHhJbmZvPzogeyB1bnNwZW50cz86IGJpdGdvLlVuc3BlbnQ8VE51bWJlcj5bXSB9O1xuICAgIGNoYW5nZUluZm8/OiB7IGFkZHJlc3M6IHN0cmluZzsgY2hhaW46IG51bWJlcjsgaW5kZXg6IG51bWJlciB9W107XG4gIH0sXG4gIG5ldHdvcms6IHV0eG9saWIuTmV0d29ya1xuKTogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB7XG4gIGNvbnN0IGNvbW1vbiA9IGV4cGxhaW5Db21tb24odHgsIHBhcmFtcywgbmV0d29yayk7XG4gIGNvbnN0IGlucHV0U2lnbmF0dXJlc0NvdW50ID0gZ2V0VHhJbnB1dFNpZ25hdHVyZXNDb3VudCh0eCwgcGFyYW1zLCBuZXR3b3JrKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5jb21tb24sXG4gICAgaW5wdXRTaWduYXR1cmVzOiBpbnB1dFNpZ25hdHVyZXNDb3VudCxcbiAgICBzaWduYXR1cmVzOiBpbnB1dFNpZ25hdHVyZXNDb3VudC5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IChjdXJyID4gcHJldiA/IGN1cnIgOiBwcmV2KSwgMCksXG4gIH0gYXMgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbjtcbn1cbiJdfQ==
@@ -0,0 +1,6 @@
1
+ export { explainPsbt, explainLegacyTx, ChangeAddressInfo } from './explainTransaction';
2
+ export { parseTransaction } from './parseTransaction';
3
+ export { CustomChangeOptions } from './parseOutput';
4
+ export { verifyTransaction } from './verifyTransaction';
5
+ export { signTransaction } from './signTransaction';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/transaction/fixedScript/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.signTransaction = exports.verifyTransaction = exports.parseTransaction = exports.explainLegacyTx = exports.explainPsbt = void 0;
4
+ var explainTransaction_1 = require("./explainTransaction");
5
+ Object.defineProperty(exports, "explainPsbt", { enumerable: true, get: function () { return explainTransaction_1.explainPsbt; } });
6
+ Object.defineProperty(exports, "explainLegacyTx", { enumerable: true, get: function () { return explainTransaction_1.explainLegacyTx; } });
7
+ var parseTransaction_1 = require("./parseTransaction");
8
+ Object.defineProperty(exports, "parseTransaction", { enumerable: true, get: function () { return parseTransaction_1.parseTransaction; } });
9
+ var verifyTransaction_1 = require("./verifyTransaction");
10
+ Object.defineProperty(exports, "verifyTransaction", { enumerable: true, get: function () { return verifyTransaction_1.verifyTransaction; } });
11
+ var signTransaction_1 = require("./signTransaction");
12
+ Object.defineProperty(exports, "signTransaction", { enumerable: true, get: function () { return signTransaction_1.signTransaction; } });
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkRBQXVGO0FBQTlFLGlIQUFBLFdBQVcsT0FBQTtBQUFFLHFIQUFBLGVBQWUsT0FBQTtBQUNyQyx1REFBc0Q7QUFBN0Msb0hBQUEsZ0JBQWdCLE9BQUE7QUFFekIseURBQXdEO0FBQS9DLHNIQUFBLGlCQUFpQixPQUFBO0FBQzFCLHFEQUFvRDtBQUEzQyxrSEFBQSxlQUFlLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBleHBsYWluUHNidCwgZXhwbGFpbkxlZ2FjeVR4LCBDaGFuZ2VBZGRyZXNzSW5mbyB9IGZyb20gJy4vZXhwbGFpblRyYW5zYWN0aW9uJztcbmV4cG9ydCB7IHBhcnNlVHJhbnNhY3Rpb24gfSBmcm9tICcuL3BhcnNlVHJhbnNhY3Rpb24nO1xuZXhwb3J0IHsgQ3VzdG9tQ2hhbmdlT3B0aW9ucyB9IGZyb20gJy4vcGFyc2VPdXRwdXQnO1xuZXhwb3J0IHsgdmVyaWZ5VHJhbnNhY3Rpb24gfSBmcm9tICcuL3ZlcmlmeVRyYW5zYWN0aW9uJztcbmV4cG9ydCB7IHNpZ25UcmFuc2FjdGlvbiB9IGZyb20gJy4vc2lnblRyYW5zYWN0aW9uJztcbiJdfQ==
@@ -0,0 +1,26 @@
1
+ import { IRequestTracer, IWallet, TransactionPrebuild, VerificationOptions, ITransactionRecipient, Triple } from '@bitgo-beta/sdk-core';
2
+ import { AbstractUtxoCoin, Output } from '../../abstractUtxoCoin';
3
+ export interface CustomChangeOptions {
4
+ keys: Triple<{
5
+ pub: string;
6
+ }>;
7
+ signatures: Triple<string>;
8
+ }
9
+ export interface ParseOutputOptions {
10
+ currentOutput: Output;
11
+ coin: AbstractUtxoCoin;
12
+ txPrebuild: TransactionPrebuild;
13
+ verification: VerificationOptions;
14
+ keychainArray: Triple<{
15
+ pub: string;
16
+ }>;
17
+ wallet: IWallet;
18
+ txParams: {
19
+ recipients: ITransactionRecipient[];
20
+ changeAddress?: string;
21
+ };
22
+ customChange?: CustomChangeOptions;
23
+ reqId?: IRequestTracer;
24
+ }
25
+ export declare function parseOutput({ currentOutput, coin, txPrebuild, verification, keychainArray, wallet, txParams, customChange, reqId, }: ParseOutputOptions): Promise<Output>;
26
+ //# sourceMappingURL=parseOutput.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseOutput.d.ts","sourceRoot":"","sources":["../../../../src/transaction/fixedScript/parseOutput.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,cAAc,EAEd,OAAO,EACP,mBAAmB,EAEnB,mBAAmB,EACnB,qBAAqB,EACrB,MAAM,EACP,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAkB,MAAM,wBAAwB,CAAC;AA0KlF,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;CAC5B;AAED,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,gBAAgB,CAAC;IACvB,UAAU,EAAE,mBAAmB,CAAC;IAChC,YAAY,EAAE,mBAAmB,CAAC;IAClC,aAAa,EAAE,MAAM,CAAC;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvC,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE;QACR,UAAU,EAAE,qBAAqB,EAAE,CAAC;QACpC,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,YAAY,CAAC,EAAE,mBAAmB,CAAC;IACnC,KAAK,CAAC,EAAE,cAAc,CAAC;CACxB;AAED,wBAAsB,WAAW,CAAC,EAChC,aAAa,EACb,IAAI,EACJ,UAAU,EACV,YAAY,EACZ,aAAa,EACb,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,KAAK,GACN,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CA+GtC"}