@bitgo-beta/abstract-utxo 1.1.1-beta.201 → 1.1.1-beta.2011

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 (841) hide show
  1. package/README.md +76 -0
  2. package/dist/cjs/src/abstractUtxoCoin.d.ts +473 -0
  3. package/dist/cjs/src/abstractUtxoCoin.d.ts.map +1 -0
  4. package/dist/cjs/src/abstractUtxoCoin.js +718 -0
  5. package/dist/cjs/src/address/fixedScript.d.ts +44 -0
  6. package/dist/cjs/src/address/fixedScript.d.ts.map +1 -0
  7. package/dist/cjs/src/address/fixedScript.js +108 -0
  8. package/dist/cjs/src/address/index.d.ts +2 -0
  9. package/dist/cjs/src/address/index.d.ts.map +1 -0
  10. package/dist/cjs/src/address/index.js +8 -0
  11. package/dist/cjs/src/config.d.ts.map +1 -0
  12. package/dist/cjs/src/config.js +14 -0
  13. package/dist/cjs/src/descriptor/NamedDescriptor.d.ts +19 -0
  14. package/dist/cjs/src/descriptor/NamedDescriptor.d.ts.map +1 -0
  15. package/dist/cjs/src/descriptor/NamedDescriptor.js +77 -0
  16. package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.d.ts +5 -0
  17. package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.d.ts.map +1 -0
  18. package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.js +33 -0
  19. package/dist/cjs/src/descriptor/builder/builder.d.ts +12 -0
  20. package/dist/cjs/src/descriptor/builder/builder.d.ts.map +1 -0
  21. package/dist/cjs/src/descriptor/builder/builder.js +37 -0
  22. package/dist/cjs/src/descriptor/builder/index.d.ts +3 -0
  23. package/dist/cjs/src/descriptor/builder/index.d.ts.map +1 -0
  24. package/dist/cjs/src/descriptor/builder/index.js +8 -0
  25. package/dist/cjs/src/descriptor/builder/parse.d.ts +5 -0
  26. package/dist/cjs/src/descriptor/builder/parse.d.ts.map +1 -0
  27. package/dist/cjs/src/descriptor/builder/parse.js +116 -0
  28. package/dist/cjs/src/descriptor/createWallet/createDescriptorWallet.d.ts +20 -0
  29. package/dist/cjs/src/descriptor/createWallet/createDescriptorWallet.d.ts.map +1 -0
  30. package/dist/cjs/src/descriptor/createWallet/createDescriptorWallet.js +41 -0
  31. package/dist/cjs/src/descriptor/createWallet/createDescriptors.d.ts +12 -0
  32. package/dist/cjs/src/descriptor/createWallet/createDescriptors.d.ts.map +1 -0
  33. package/dist/cjs/src/descriptor/createWallet/createDescriptors.js +33 -0
  34. package/dist/cjs/src/descriptor/createWallet/index.d.ts +3 -0
  35. package/dist/cjs/src/descriptor/createWallet/index.d.ts.map +1 -0
  36. package/dist/cjs/src/descriptor/createWallet/index.js +19 -0
  37. package/dist/cjs/src/descriptor/descriptorWallet.d.ts +19 -0
  38. package/dist/cjs/src/descriptor/descriptorWallet.d.ts.map +1 -0
  39. package/dist/cjs/src/descriptor/descriptorWallet.js +54 -0
  40. package/dist/cjs/src/descriptor/index.d.ts +8 -0
  41. package/dist/cjs/src/descriptor/index.d.ts.map +1 -0
  42. package/dist/cjs/src/descriptor/index.js +53 -0
  43. package/dist/cjs/src/descriptor/validatePolicy.d.ts +22 -0
  44. package/dist/cjs/src/descriptor/validatePolicy.d.ts.map +1 -0
  45. package/dist/cjs/src/descriptor/validatePolicy.js +92 -0
  46. package/dist/cjs/src/impl/bch/bch.d.ts +22 -0
  47. package/dist/cjs/src/impl/bch/bch.d.ts.map +1 -0
  48. package/dist/cjs/src/impl/bch/bch.js +43 -0
  49. package/dist/cjs/src/impl/bch/index.d.ts +3 -0
  50. package/dist/cjs/src/impl/bch/index.d.ts.map +1 -0
  51. package/dist/cjs/src/impl/bch/index.js +19 -0
  52. package/dist/cjs/src/impl/bch/tbch.d.ts +12 -0
  53. package/dist/cjs/src/impl/bch/tbch.d.ts.map +1 -0
  54. package/dist/cjs/src/impl/bch/tbch.js +15 -0
  55. package/dist/cjs/src/impl/bcha/bcha.d.ts +9 -0
  56. package/dist/cjs/src/impl/bcha/bcha.d.ts.map +1 -0
  57. package/dist/cjs/src/impl/bcha/bcha.js +15 -0
  58. package/dist/cjs/src/impl/bcha/index.d.ts +3 -0
  59. package/dist/cjs/src/impl/bcha/index.d.ts.map +1 -0
  60. package/dist/cjs/src/impl/bcha/index.js +19 -0
  61. package/dist/cjs/src/impl/bcha/tbcha.d.ts +12 -0
  62. package/dist/cjs/src/impl/bcha/tbcha.d.ts.map +1 -0
  63. package/dist/cjs/src/impl/bcha/tbcha.js +15 -0
  64. package/dist/cjs/src/impl/bsv/bsv.d.ts +9 -0
  65. package/dist/cjs/src/impl/bsv/bsv.d.ts.map +1 -0
  66. package/dist/cjs/src/impl/bsv/bsv.js +15 -0
  67. package/dist/cjs/src/impl/bsv/index.d.ts +3 -0
  68. package/dist/cjs/src/impl/bsv/index.d.ts.map +1 -0
  69. package/dist/cjs/src/impl/bsv/index.js +19 -0
  70. package/dist/cjs/src/impl/bsv/tbsv.d.ts +12 -0
  71. package/dist/cjs/src/impl/bsv/tbsv.d.ts.map +1 -0
  72. package/dist/cjs/src/impl/bsv/tbsv.js +15 -0
  73. package/dist/cjs/src/impl/btc/btc.d.ts +15 -0
  74. package/dist/cjs/src/impl/btc/btc.d.ts.map +1 -0
  75. package/dist/cjs/src/impl/btc/btc.js +22 -0
  76. package/dist/cjs/src/impl/btc/index.d.ts +7 -0
  77. package/dist/cjs/src/impl/btc/index.d.ts.map +1 -0
  78. package/dist/cjs/src/impl/btc/index.js +23 -0
  79. package/dist/cjs/src/impl/btc/inscriptionBuilder.d.ts +61 -0
  80. package/dist/cjs/src/impl/btc/inscriptionBuilder.d.ts.map +1 -0
  81. package/dist/cjs/src/impl/btc/inscriptionBuilder.js +171 -0
  82. package/dist/cjs/src/impl/btc/tbtc.d.ts +12 -0
  83. package/dist/cjs/src/impl/btc/tbtc.d.ts.map +1 -0
  84. package/dist/cjs/src/impl/btc/tbtc.js +15 -0
  85. package/dist/cjs/src/impl/btc/tbtc4.d.ts +12 -0
  86. package/dist/cjs/src/impl/btc/tbtc4.d.ts.map +1 -0
  87. package/dist/cjs/src/impl/btc/tbtc4.js +15 -0
  88. package/dist/cjs/src/impl/btc/tbtcbgsig.d.ts +12 -0
  89. package/dist/cjs/src/impl/btc/tbtcbgsig.d.ts.map +1 -0
  90. package/dist/cjs/src/impl/btc/tbtcbgsig.js +15 -0
  91. package/dist/cjs/src/impl/btc/tbtcsig.d.ts +12 -0
  92. package/dist/cjs/src/impl/btc/tbtcsig.d.ts.map +1 -0
  93. package/dist/cjs/src/impl/btc/tbtcsig.js +15 -0
  94. package/dist/cjs/src/impl/btg/btg.d.ts +9 -0
  95. package/dist/cjs/src/impl/btg/btg.d.ts.map +1 -0
  96. package/dist/cjs/src/impl/btg/btg.js +15 -0
  97. package/dist/cjs/src/impl/btg/index.d.ts +2 -0
  98. package/dist/cjs/src/impl/btg/index.d.ts.map +1 -0
  99. package/dist/cjs/src/impl/btg/index.js +18 -0
  100. package/dist/cjs/src/impl/dash/dash.d.ts +9 -0
  101. package/dist/cjs/src/impl/dash/dash.d.ts.map +1 -0
  102. package/dist/cjs/src/impl/dash/dash.js +15 -0
  103. package/dist/cjs/src/impl/dash/index.d.ts +3 -0
  104. package/dist/cjs/src/impl/dash/index.d.ts.map +1 -0
  105. package/dist/cjs/src/impl/dash/index.js +19 -0
  106. package/dist/cjs/src/impl/dash/tdash.d.ts +12 -0
  107. package/dist/cjs/src/impl/dash/tdash.d.ts.map +1 -0
  108. package/dist/cjs/src/impl/dash/tdash.js +15 -0
  109. package/dist/cjs/src/impl/doge/doge.d.ts +35 -0
  110. package/dist/cjs/src/impl/doge/doge.d.ts.map +1 -0
  111. package/dist/cjs/src/impl/doge/doge.js +79 -0
  112. package/dist/cjs/src/impl/doge/index.d.ts +3 -0
  113. package/dist/cjs/src/impl/doge/index.d.ts.map +1 -0
  114. package/dist/cjs/src/impl/doge/index.js +19 -0
  115. package/dist/cjs/src/impl/doge/tdoge.d.ts +12 -0
  116. package/dist/cjs/src/impl/doge/tdoge.d.ts.map +1 -0
  117. package/dist/cjs/src/impl/doge/tdoge.js +15 -0
  118. package/dist/cjs/src/impl/index.d.ts +10 -0
  119. package/dist/cjs/src/impl/index.d.ts.map +1 -0
  120. package/dist/cjs/src/impl/index.js +46 -0
  121. package/dist/cjs/src/impl/ltc/index.d.ts +3 -0
  122. package/dist/cjs/src/impl/ltc/index.d.ts.map +1 -0
  123. package/dist/cjs/src/impl/ltc/index.js +19 -0
  124. package/dist/cjs/src/impl/ltc/ltc.d.ts +8 -0
  125. package/dist/cjs/src/impl/ltc/ltc.d.ts.map +1 -0
  126. package/dist/cjs/src/impl/ltc/ltc.js +15 -0
  127. package/dist/cjs/src/impl/ltc/tltc.d.ts +8 -0
  128. package/dist/cjs/src/impl/ltc/tltc.d.ts.map +1 -0
  129. package/dist/cjs/src/impl/ltc/tltc.js +15 -0
  130. package/dist/cjs/src/impl/zec/index.d.ts +3 -0
  131. package/dist/cjs/src/impl/zec/index.d.ts.map +1 -0
  132. package/dist/cjs/src/impl/zec/index.js +19 -0
  133. package/dist/cjs/src/impl/zec/tzec.d.ts +9 -0
  134. package/dist/cjs/src/impl/zec/tzec.d.ts.map +1 -0
  135. package/dist/cjs/src/impl/zec/tzec.js +15 -0
  136. package/dist/cjs/src/impl/zec/zec.d.ts +12 -0
  137. package/dist/cjs/src/impl/zec/zec.d.ts.map +1 -0
  138. package/dist/cjs/src/impl/zec/zec.js +15 -0
  139. package/dist/cjs/src/index.d.ts +23 -0
  140. package/dist/cjs/src/index.d.ts.map +1 -0
  141. package/dist/cjs/src/index.js +62 -0
  142. package/dist/cjs/src/keychains.d.ts +56 -0
  143. package/dist/cjs/src/keychains.d.ts.map +1 -0
  144. package/dist/cjs/src/keychains.js +144 -0
  145. package/dist/cjs/src/names.d.ts +36 -0
  146. package/dist/cjs/src/names.d.ts.map +1 -0
  147. package/dist/cjs/src/names.js +231 -0
  148. package/dist/cjs/src/offlineVault/OfflineVaultHalfSigned.d.ts +9 -0
  149. package/dist/cjs/src/offlineVault/OfflineVaultHalfSigned.d.ts.map +1 -0
  150. package/dist/cjs/src/offlineVault/OfflineVaultHalfSigned.js +23 -0
  151. package/dist/cjs/src/offlineVault/OfflineVaultSignable.d.ts +46 -0
  152. package/dist/cjs/src/offlineVault/OfflineVaultSignable.d.ts.map +1 -0
  153. package/dist/cjs/src/offlineVault/OfflineVaultSignable.js +55 -0
  154. package/dist/cjs/src/offlineVault/TransactionExplanation.d.ts +16 -0
  155. package/dist/cjs/src/offlineVault/TransactionExplanation.d.ts.map +1 -0
  156. package/dist/cjs/src/offlineVault/TransactionExplanation.js +15 -0
  157. package/dist/cjs/src/offlineVault/descriptor/index.d.ts +2 -0
  158. package/dist/cjs/src/offlineVault/descriptor/index.d.ts.map +1 -0
  159. package/dist/cjs/src/offlineVault/descriptor/index.js +18 -0
  160. package/dist/cjs/src/offlineVault/descriptor/transaction.d.ts +39 -0
  161. package/dist/cjs/src/offlineVault/descriptor/transaction.d.ts.map +1 -0
  162. package/dist/cjs/src/offlineVault/descriptor/transaction.js +80 -0
  163. package/dist/cjs/src/offlineVault/index.d.ts +6 -0
  164. package/dist/cjs/src/offlineVault/index.d.ts.map +1 -0
  165. package/dist/cjs/src/offlineVault/index.js +44 -0
  166. package/dist/{src → cjs/src}/recovery/RecoveryProvider.d.ts +1 -3
  167. package/dist/cjs/src/recovery/RecoveryProvider.d.ts.map +1 -0
  168. package/dist/cjs/src/recovery/RecoveryProvider.js +22 -0
  169. package/dist/cjs/src/recovery/backupKeyRecovery.d.ts +158 -0
  170. package/dist/cjs/src/recovery/backupKeyRecovery.d.ts.map +1 -0
  171. package/dist/cjs/src/recovery/backupKeyRecovery.js +411 -0
  172. package/dist/{src → cjs/src}/recovery/baseApi.d.ts +3 -6
  173. package/dist/cjs/src/recovery/baseApi.d.ts.map +1 -0
  174. package/dist/cjs/src/recovery/baseApi.js +73 -0
  175. package/dist/{src → cjs/src}/recovery/coingeckoApi.d.ts +0 -3
  176. package/dist/cjs/src/recovery/coingeckoApi.d.ts.map +1 -0
  177. package/dist/cjs/src/recovery/coingeckoApi.js +44 -0
  178. package/dist/{src → cjs/src}/recovery/crossChainRecovery.d.ts +21 -9
  179. package/dist/cjs/src/recovery/crossChainRecovery.d.ts.map +1 -0
  180. package/dist/cjs/src/recovery/crossChainRecovery.js +299 -0
  181. package/dist/{src → cjs/src}/recovery/index.d.ts +0 -1
  182. package/dist/cjs/src/recovery/index.d.ts.map +1 -0
  183. package/dist/{src → cjs/src}/recovery/index.js +6 -3
  184. package/dist/cjs/src/recovery/mempoolApi.d.ts.map +1 -0
  185. package/dist/cjs/src/recovery/mempoolApi.js +36 -0
  186. package/dist/cjs/src/recovery/psbt.d.ts +62 -0
  187. package/dist/cjs/src/recovery/psbt.d.ts.map +1 -0
  188. package/dist/cjs/src/recovery/psbt.js +153 -0
  189. package/dist/cjs/src/tnumber.d.ts +4 -0
  190. package/dist/cjs/src/tnumber.d.ts.map +1 -0
  191. package/dist/cjs/src/tnumber.js +12 -0
  192. package/dist/cjs/src/transaction/bip322.d.ts +27 -0
  193. package/dist/cjs/src/transaction/bip322.d.ts.map +1 -0
  194. package/dist/cjs/src/transaction/bip322.js +139 -0
  195. package/dist/cjs/src/transaction/common/verifyPayGoAmount.d.ts +2 -0
  196. package/dist/cjs/src/transaction/common/verifyPayGoAmount.d.ts.map +1 -0
  197. package/dist/cjs/src/transaction/common/verifyPayGoAmount.js +3 -0
  198. package/dist/cjs/src/transaction/decode.d.ts +25 -0
  199. package/dist/cjs/src/transaction/decode.d.ts.map +1 -0
  200. package/dist/cjs/src/transaction/decode.js +106 -0
  201. package/dist/cjs/src/transaction/descriptor/explainPsbt.d.ts +5 -0
  202. package/dist/cjs/src/transaction/descriptor/explainPsbt.d.ts.map +1 -0
  203. package/dist/cjs/src/transaction/descriptor/explainPsbt.js +45 -0
  204. package/dist/cjs/src/transaction/descriptor/index.d.ts +7 -0
  205. package/dist/cjs/src/transaction/descriptor/index.d.ts.map +1 -0
  206. package/dist/cjs/src/transaction/descriptor/index.js +14 -0
  207. package/dist/cjs/src/transaction/descriptor/parse.d.ts +19 -0
  208. package/dist/cjs/src/transaction/descriptor/parse.d.ts.map +1 -0
  209. package/dist/cjs/src/transaction/descriptor/parse.js +84 -0
  210. package/dist/cjs/src/transaction/descriptor/parseToAmountType.d.ts +14 -0
  211. package/dist/cjs/src/transaction/descriptor/parseToAmountType.d.ts.map +1 -0
  212. package/dist/cjs/src/transaction/descriptor/parseToAmountType.js +60 -0
  213. package/dist/cjs/src/transaction/descriptor/recipient.d.ts +5 -0
  214. package/dist/cjs/src/transaction/descriptor/recipient.d.ts.map +1 -0
  215. package/dist/cjs/src/transaction/descriptor/recipient.js +3 -0
  216. package/dist/cjs/src/transaction/descriptor/signPsbt.d.ts +24 -0
  217. package/dist/cjs/src/transaction/descriptor/signPsbt.d.ts.map +1 -0
  218. package/dist/cjs/src/transaction/descriptor/signPsbt.js +44 -0
  219. package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts +37 -0
  220. package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts.map +1 -0
  221. package/dist/cjs/src/transaction/descriptor/verifyTransaction.js +80 -0
  222. package/dist/cjs/src/transaction/explainTransaction.d.ts +21 -0
  223. package/dist/cjs/src/transaction/explainTransaction.d.ts.map +1 -0
  224. package/dist/cjs/src/transaction/explainTransaction.js +92 -0
  225. package/dist/cjs/src/transaction/fetchInputs.d.ts +27 -0
  226. package/dist/cjs/src/transaction/fetchInputs.d.ts.map +1 -0
  227. package/dist/cjs/src/transaction/fetchInputs.js +111 -0
  228. package/dist/cjs/src/transaction/fixedScript/SigningError.d.ts +24 -0
  229. package/dist/cjs/src/transaction/fixedScript/SigningError.d.ts.map +1 -0
  230. package/dist/cjs/src/transaction/fixedScript/SigningError.js +32 -0
  231. package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.d.ts +45 -0
  232. package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.d.ts.map +1 -0
  233. package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.js +149 -0
  234. package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts +83 -0
  235. package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts.map +1 -0
  236. package/dist/cjs/src/transaction/fixedScript/explainTransaction.js +346 -0
  237. package/dist/cjs/src/transaction/fixedScript/index.d.ts +10 -0
  238. package/dist/cjs/src/transaction/fixedScript/index.d.ts.map +1 -0
  239. package/dist/cjs/src/transaction/fixedScript/index.js +34 -0
  240. package/dist/cjs/src/transaction/fixedScript/musig2.d.ts +4 -0
  241. package/dist/cjs/src/transaction/fixedScript/musig2.d.ts.map +1 -0
  242. package/dist/cjs/src/transaction/fixedScript/musig2.js +3 -0
  243. package/dist/cjs/src/transaction/fixedScript/parseOutput.d.ts +28 -0
  244. package/dist/cjs/src/transaction/fixedScript/parseOutput.d.ts.map +1 -0
  245. package/dist/cjs/src/transaction/fixedScript/parseOutput.js +216 -0
  246. package/dist/cjs/src/transaction/fixedScript/parseTransaction.d.ts +8 -0
  247. package/dist/cjs/src/transaction/fixedScript/parseTransaction.d.ts.map +1 -0
  248. package/dist/cjs/src/transaction/fixedScript/parseTransaction.js +228 -0
  249. package/dist/cjs/src/transaction/fixedScript/replayProtection.d.ts +10 -0
  250. package/dist/cjs/src/transaction/fixedScript/replayProtection.d.ts.map +1 -0
  251. package/dist/cjs/src/transaction/fixedScript/replayProtection.js +44 -0
  252. package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.d.ts +32 -0
  253. package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.d.ts.map +1 -0
  254. package/dist/cjs/src/transaction/fixedScript/signLegacyTransaction.js +163 -0
  255. package/dist/cjs/src/transaction/fixedScript/signPsbtUtxolib.d.ts +20 -0
  256. package/dist/cjs/src/transaction/fixedScript/signPsbtUtxolib.d.ts.map +1 -0
  257. package/dist/cjs/src/transaction/fixedScript/signPsbtUtxolib.js +157 -0
  258. package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.d.ts +20 -0
  259. package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.d.ts.map +1 -0
  260. package/dist/cjs/src/transaction/fixedScript/signPsbtWasm.js +116 -0
  261. package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts +34 -0
  262. package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts.map +1 -0
  263. package/dist/cjs/src/transaction/fixedScript/signTransaction.js +78 -0
  264. package/dist/cjs/src/transaction/fixedScript/verifyTransaction.d.ts +21 -0
  265. package/dist/cjs/src/transaction/fixedScript/verifyTransaction.d.ts.map +1 -0
  266. package/dist/cjs/src/transaction/fixedScript/verifyTransaction.js +203 -0
  267. package/dist/cjs/src/transaction/getPayGoVerificationPubkey.d.ts +9 -0
  268. package/dist/cjs/src/transaction/getPayGoVerificationPubkey.d.ts.map +1 -0
  269. package/dist/cjs/src/transaction/getPayGoVerificationPubkey.js +20 -0
  270. package/dist/cjs/src/transaction/index.d.ts +10 -0
  271. package/dist/cjs/src/transaction/index.d.ts.map +1 -0
  272. package/dist/cjs/src/transaction/index.js +54 -0
  273. package/dist/cjs/src/transaction/outputDifference.d.ts +44 -0
  274. package/dist/cjs/src/transaction/outputDifference.d.ts.map +1 -0
  275. package/dist/cjs/src/transaction/outputDifference.js +51 -0
  276. package/dist/cjs/src/transaction/parseTransaction.d.ts +4 -0
  277. package/dist/cjs/src/transaction/parseTransaction.d.ts.map +1 -0
  278. package/dist/cjs/src/transaction/parseTransaction.js +48 -0
  279. package/dist/cjs/src/transaction/recipient.d.ts +34 -0
  280. package/dist/cjs/src/transaction/recipient.d.ts.map +1 -0
  281. package/dist/cjs/src/transaction/recipient.js +69 -0
  282. package/dist/cjs/src/transaction/signTransaction.d.ts +6 -0
  283. package/dist/cjs/src/transaction/signTransaction.d.ts.map +1 -0
  284. package/dist/cjs/src/transaction/signTransaction.js +112 -0
  285. package/dist/cjs/src/transaction/types.d.ts +50 -0
  286. package/dist/cjs/src/transaction/types.d.ts.map +1 -0
  287. package/dist/cjs/src/transaction/types.js +7 -0
  288. package/dist/cjs/src/transaction/verifyTransaction.d.ts +4 -0
  289. package/dist/cjs/src/transaction/verifyTransaction.d.ts.map +1 -0
  290. package/dist/cjs/src/transaction/verifyTransaction.js +50 -0
  291. package/dist/cjs/src/unspent.d.ts +59 -0
  292. package/dist/cjs/src/unspent.d.ts.map +1 -0
  293. package/dist/cjs/src/unspent.js +20 -0
  294. package/dist/cjs/src/verifyKey.d.ts +21 -0
  295. package/dist/cjs/src/verifyKey.d.ts.map +1 -0
  296. package/dist/cjs/src/verifyKey.js +108 -0
  297. package/dist/cjs/src/wallet.d.ts +15 -0
  298. package/dist/cjs/src/wallet.d.ts.map +1 -0
  299. package/dist/cjs/src/wallet.js +8 -0
  300. package/dist/cjs/src/wasmUtil.d.ts +34 -0
  301. package/dist/cjs/src/wasmUtil.d.ts.map +1 -0
  302. package/dist/cjs/src/wasmUtil.js +95 -0
  303. package/dist/cjs/test/integration/impl/bch/bch.d.ts +2 -0
  304. package/dist/cjs/test/integration/impl/bch/bch.d.ts.map +1 -0
  305. package/dist/cjs/test/integration/impl/bch/bch.js +76 -0
  306. package/dist/cjs/test/unit/address.d.ts +2 -0
  307. package/dist/cjs/test/unit/address.d.ts.map +1 -0
  308. package/dist/cjs/test/unit/address.js +178 -0
  309. package/dist/cjs/test/unit/bip322.d.ts +2 -0
  310. package/dist/cjs/test/unit/bip322.d.ts.map +1 -0
  311. package/dist/cjs/test/unit/bip322.js +481 -0
  312. package/dist/cjs/test/unit/buildSignSendLegacyFormat.d.ts +2 -0
  313. package/dist/cjs/test/unit/buildSignSendLegacyFormat.d.ts.map +1 -0
  314. package/dist/cjs/test/unit/buildSignSendLegacyFormat.js +99 -0
  315. package/dist/cjs/test/unit/coins.d.ts +2 -0
  316. package/dist/cjs/test/unit/coins.d.ts.map +1 -0
  317. package/dist/cjs/test/unit/coins.js +161 -0
  318. package/dist/cjs/test/unit/customChangeWallet.d.ts +2 -0
  319. package/dist/cjs/test/unit/customChangeWallet.d.ts.map +1 -0
  320. package/dist/cjs/test/unit/customChangeWallet.js +204 -0
  321. package/dist/cjs/test/unit/customChangeWalletFixtures.d.ts +2 -0
  322. package/dist/cjs/test/unit/customChangeWalletFixtures.d.ts.map +1 -0
  323. package/dist/cjs/test/unit/customChangeWalletFixtures.js +53 -0
  324. package/dist/cjs/test/unit/customSigner.d.ts +2 -0
  325. package/dist/cjs/test/unit/customSigner.d.ts.map +1 -0
  326. package/dist/cjs/test/unit/customSigner.js +99 -0
  327. package/dist/cjs/test/unit/descriptor/NamedDescriptor.d.ts +2 -0
  328. package/dist/cjs/test/unit/descriptor/NamedDescriptor.d.ts.map +1 -0
  329. package/dist/cjs/test/unit/descriptor/NamedDescriptor.js +51 -0
  330. package/dist/cjs/test/unit/descriptor/builder.d.ts +2 -0
  331. package/dist/cjs/test/unit/descriptor/builder.d.ts.map +1 -0
  332. package/dist/cjs/test/unit/descriptor/builder.js +78 -0
  333. package/dist/cjs/test/unit/descriptor/createWallet/createDescriptors.d.ts +2 -0
  334. package/dist/cjs/test/unit/descriptor/createWallet/createDescriptors.d.ts.map +1 -0
  335. package/dist/cjs/test/unit/descriptor/createWallet/createDescriptors.js +53 -0
  336. package/dist/cjs/test/unit/descriptor/descriptorWallet.d.ts +2 -0
  337. package/dist/cjs/test/unit/descriptor/descriptorWallet.d.ts.map +1 -0
  338. package/dist/cjs/test/unit/descriptor/descriptorWallet.js +62 -0
  339. package/dist/cjs/test/unit/descriptorAddress.d.ts +3 -0
  340. package/dist/cjs/test/unit/descriptorAddress.d.ts.map +1 -0
  341. package/dist/cjs/test/unit/descriptorAddress.js +103 -0
  342. package/dist/cjs/test/unit/explainTransaction.d.ts +2 -0
  343. package/dist/cjs/test/unit/explainTransaction.d.ts.map +1 -0
  344. package/dist/cjs/test/unit/explainTransaction.js +37 -0
  345. package/dist/cjs/test/unit/fixtures/psbtHexProof.d.ts +4 -0
  346. package/dist/cjs/test/unit/fixtures/psbtHexProof.d.ts.map +1 -0
  347. package/dist/cjs/test/unit/fixtures/psbtHexProof.js +9 -0
  348. package/dist/cjs/test/unit/impl/bch/unit/bch.d.ts +2 -0
  349. package/dist/cjs/test/unit/impl/bch/unit/bch.d.ts.map +1 -0
  350. package/dist/cjs/test/unit/impl/bch/unit/bch.js +71 -0
  351. package/dist/cjs/test/unit/impl/bcha/unit/index.d.ts +2 -0
  352. package/dist/cjs/test/unit/impl/bcha/unit/index.d.ts.map +1 -0
  353. package/dist/cjs/test/unit/impl/bcha/unit/index.js +41 -0
  354. package/dist/cjs/test/unit/impl/bsv/unit/index.d.ts +2 -0
  355. package/dist/cjs/test/unit/impl/bsv/unit/index.d.ts.map +1 -0
  356. package/dist/cjs/test/unit/impl/bsv/unit/index.js +34 -0
  357. package/dist/cjs/test/unit/impl/btg/unit/index.d.ts +2 -0
  358. package/dist/cjs/test/unit/impl/btg/unit/index.d.ts.map +1 -0
  359. package/dist/cjs/test/unit/impl/btg/unit/index.js +33 -0
  360. package/dist/cjs/test/unit/impl/dash/unit/index.d.ts +2 -0
  361. package/dist/cjs/test/unit/impl/dash/unit/index.d.ts.map +1 -0
  362. package/dist/cjs/test/unit/impl/dash/unit/index.js +34 -0
  363. package/dist/cjs/test/unit/impl/doge/unit/index.d.ts +2 -0
  364. package/dist/cjs/test/unit/impl/doge/unit/index.d.ts.map +1 -0
  365. package/dist/cjs/test/unit/impl/doge/unit/index.js +34 -0
  366. package/dist/cjs/test/unit/impl/zec/unit/index.d.ts +2 -0
  367. package/dist/cjs/test/unit/impl/zec/unit/index.d.ts.map +1 -0
  368. package/dist/cjs/test/unit/impl/zec/unit/index.js +30 -0
  369. package/dist/cjs/test/unit/keySignatures.d.ts +2 -0
  370. package/dist/cjs/test/unit/keySignatures.d.ts.map +1 -0
  371. package/dist/cjs/test/unit/keySignatures.js +54 -0
  372. package/dist/cjs/test/unit/keychains.d.ts +2 -0
  373. package/dist/cjs/test/unit/keychains.d.ts.map +1 -0
  374. package/dist/cjs/test/unit/keychains.js +87 -0
  375. package/dist/cjs/test/unit/offlineVault/halfSigned.d.ts +2 -0
  376. package/dist/cjs/test/unit/offlineVault/halfSigned.d.ts.map +1 -0
  377. package/dist/cjs/test/unit/offlineVault/halfSigned.js +124 -0
  378. package/dist/cjs/test/unit/parseTransaction.d.ts +2 -0
  379. package/dist/cjs/test/unit/parseTransaction.d.ts.map +1 -0
  380. package/dist/cjs/test/unit/parseTransaction.js +155 -0
  381. package/dist/cjs/test/unit/pendingApprovalTxHexPsbt.d.ts +2 -0
  382. package/dist/cjs/test/unit/pendingApprovalTxHexPsbt.d.ts.map +1 -0
  383. package/dist/cjs/test/unit/pendingApprovalTxHexPsbt.js +99 -0
  384. package/dist/cjs/test/unit/postProcessPrebuild.d.ts +2 -0
  385. package/dist/cjs/test/unit/postProcessPrebuild.d.ts.map +1 -0
  386. package/dist/cjs/test/unit/postProcessPrebuild.js +65 -0
  387. package/dist/cjs/test/unit/prebuildAndSign.d.ts +2 -0
  388. package/dist/cjs/test/unit/prebuildAndSign.d.ts.map +1 -0
  389. package/dist/cjs/test/unit/prebuildAndSign.js +218 -0
  390. package/dist/cjs/test/unit/recovery/backupKeyRecovery.d.ts +2 -0
  391. package/dist/cjs/test/unit/recovery/backupKeyRecovery.d.ts.map +1 -0
  392. package/dist/cjs/test/unit/recovery/backupKeyRecovery.js +136 -0
  393. package/dist/cjs/test/unit/recovery/backupKeyRecoveryUnspentGathering.d.ts +2 -0
  394. package/dist/cjs/test/unit/recovery/backupKeyRecoveryUnspentGathering.d.ts.map +1 -0
  395. package/dist/cjs/test/unit/recovery/backupKeyRecoveryUnspentGathering.js +144 -0
  396. package/dist/cjs/test/unit/recovery/crossChainRecovery.d.ts +2 -0
  397. package/dist/cjs/test/unit/recovery/crossChainRecovery.d.ts.map +1 -0
  398. package/dist/cjs/test/unit/recovery/crossChainRecovery.js +297 -0
  399. package/dist/cjs/test/unit/recovery/formatBackupKeyRecoveryResult.d.ts +2 -0
  400. package/dist/cjs/test/unit/recovery/formatBackupKeyRecoveryResult.d.ts.map +1 -0
  401. package/dist/cjs/test/unit/recovery/formatBackupKeyRecoveryResult.js +189 -0
  402. package/dist/cjs/test/unit/recovery/mock.d.ts +37 -0
  403. package/dist/cjs/test/unit/recovery/mock.d.ts.map +1 -0
  404. package/dist/cjs/test/unit/recovery/mock.js +111 -0
  405. package/dist/cjs/test/unit/signTransaction.d.ts +2 -0
  406. package/dist/cjs/test/unit/signTransaction.d.ts.map +1 -0
  407. package/dist/cjs/test/unit/signTransaction.js +223 -0
  408. package/dist/cjs/test/unit/testSpoofTransaction.d.ts +2 -0
  409. package/dist/cjs/test/unit/testSpoofTransaction.d.ts.map +1 -0
  410. package/dist/cjs/test/unit/testSpoofTransaction.js +114 -0
  411. package/dist/cjs/test/unit/transaction/descriptor/explainPsbt.d.ts +2 -0
  412. package/dist/cjs/test/unit/transaction/descriptor/explainPsbt.d.ts.map +1 -0
  413. package/dist/cjs/test/unit/transaction/descriptor/explainPsbt.js +64 -0
  414. package/dist/cjs/test/unit/transaction/descriptor/fixtures.utils.d.ts +6 -0
  415. package/dist/cjs/test/unit/transaction/descriptor/fixtures.utils.d.ts.map +1 -0
  416. package/dist/cjs/test/unit/transaction/descriptor/fixtures.utils.js +51 -0
  417. package/dist/cjs/test/unit/transaction/descriptor/parse.d.ts +2 -0
  418. package/dist/cjs/test/unit/transaction/descriptor/parse.d.ts.map +1 -0
  419. package/dist/cjs/test/unit/transaction/descriptor/parse.js +138 -0
  420. package/dist/cjs/test/unit/transaction/descriptor/sign.d.ts +2 -0
  421. package/dist/cjs/test/unit/transaction/descriptor/sign.d.ts.map +1 -0
  422. package/dist/cjs/test/unit/transaction/descriptor/sign.js +76 -0
  423. package/dist/cjs/test/unit/transaction/descriptor/signTransactionE2E.d.ts +2 -0
  424. package/dist/cjs/test/unit/transaction/descriptor/signTransactionE2E.d.ts.map +1 -0
  425. package/dist/cjs/test/unit/transaction/descriptor/signTransactionE2E.js +100 -0
  426. package/dist/cjs/test/unit/transaction/descriptor/signTransactionGuard.d.ts +2 -0
  427. package/dist/cjs/test/unit/transaction/descriptor/signTransactionGuard.d.ts.map +1 -0
  428. package/dist/cjs/test/unit/transaction/descriptor/signTransactionGuard.js +84 -0
  429. package/dist/cjs/test/unit/transaction/descriptor/validatePolicy.d.ts +2 -0
  430. package/dist/cjs/test/unit/transaction/descriptor/validatePolicy.d.ts.map +1 -0
  431. package/dist/cjs/test/unit/transaction/descriptor/validatePolicy.js +81 -0
  432. package/dist/cjs/test/unit/transaction/fixedScript/explainPsbt.d.ts +2 -0
  433. package/dist/cjs/test/unit/transaction/fixedScript/explainPsbt.d.ts.map +1 -0
  434. package/dist/cjs/test/unit/transaction/fixedScript/explainPsbt.js +193 -0
  435. package/dist/cjs/test/unit/transaction/fixedScript/parsePsbt.d.ts +2 -0
  436. package/dist/cjs/test/unit/transaction/fixedScript/parsePsbt.d.ts.map +1 -0
  437. package/dist/cjs/test/unit/transaction/fixedScript/parsePsbt.js +287 -0
  438. package/dist/cjs/test/unit/transaction/fixedScript/replayProtection.d.ts +2 -0
  439. package/dist/cjs/test/unit/transaction/fixedScript/replayProtection.d.ts.map +1 -0
  440. package/dist/cjs/test/unit/transaction/fixedScript/replayProtection.js +60 -0
  441. package/dist/cjs/test/unit/transaction/fixedScript/signPsbt.d.ts +2 -0
  442. package/dist/cjs/test/unit/transaction/fixedScript/signPsbt.d.ts.map +1 -0
  443. package/dist/cjs/test/unit/transaction/fixedScript/signPsbt.js +98 -0
  444. package/dist/cjs/test/unit/transaction/outputDifference.d.ts +2 -0
  445. package/dist/cjs/test/unit/transaction/outputDifference.d.ts.map +1 -0
  446. package/dist/cjs/test/unit/transaction/outputDifference.js +117 -0
  447. package/dist/cjs/test/unit/transaction/recipient.d.ts +2 -0
  448. package/dist/cjs/test/unit/transaction/recipient.d.ts.map +1 -0
  449. package/dist/cjs/test/unit/transaction/recipient.js +52 -0
  450. package/dist/cjs/test/unit/transaction.d.ts +2 -0
  451. package/dist/cjs/test/unit/transaction.d.ts.map +1 -0
  452. package/dist/cjs/test/unit/transaction.js +301 -0
  453. package/dist/cjs/test/unit/txFormat.d.ts +30 -0
  454. package/dist/cjs/test/unit/txFormat.d.ts.map +1 -0
  455. package/dist/cjs/test/unit/txFormat.js +161 -0
  456. package/dist/cjs/test/unit/util/address.d.ts +13 -0
  457. package/dist/cjs/test/unit/util/address.d.ts.map +1 -0
  458. package/dist/cjs/test/unit/util/address.js +15 -0
  459. package/dist/cjs/test/unit/util/assert.d.ts +3 -0
  460. package/dist/cjs/test/unit/util/assert.d.ts.map +1 -0
  461. package/dist/cjs/test/unit/util/assert.js +24 -0
  462. package/dist/cjs/test/unit/util/fixtures.d.ts +13 -0
  463. package/dist/cjs/test/unit/util/fixtures.d.ts.map +1 -0
  464. package/dist/cjs/test/unit/util/fixtures.js +105 -0
  465. package/dist/cjs/test/unit/util/index.d.ts +11 -0
  466. package/dist/cjs/test/unit/util/index.d.ts.map +1 -0
  467. package/dist/cjs/test/unit/util/index.js +27 -0
  468. package/dist/cjs/test/unit/util/keychains.d.ts +55 -0
  469. package/dist/cjs/test/unit/util/keychains.d.ts.map +1 -0
  470. package/dist/cjs/test/unit/util/keychains.js +122 -0
  471. package/dist/cjs/test/unit/util/nockBitGo.d.ts +10 -0
  472. package/dist/cjs/test/unit/util/nockBitGo.d.ts.map +1 -0
  473. package/dist/cjs/test/unit/util/nockBitGo.js +27 -0
  474. package/dist/cjs/test/unit/util/nockIndexerAPI.d.ts +8 -0
  475. package/dist/cjs/test/unit/util/nockIndexerAPI.d.ts.map +1 -0
  476. package/dist/cjs/test/unit/util/nockIndexerAPI.js +23 -0
  477. package/dist/cjs/test/unit/util/psbt.d.ts +19 -0
  478. package/dist/cjs/test/unit/util/psbt.d.ts.map +1 -0
  479. package/dist/cjs/test/unit/util/psbt.js +21 -0
  480. package/dist/cjs/test/unit/util/transaction.d.ts +28 -0
  481. package/dist/cjs/test/unit/util/transaction.d.ts.map +1 -0
  482. package/dist/cjs/test/unit/util/transaction.js +131 -0
  483. package/dist/cjs/test/unit/util/unspents.d.ts +71 -0
  484. package/dist/cjs/test/unit/util/unspents.d.ts.map +1 -0
  485. package/dist/cjs/test/unit/util/unspents.js +224 -0
  486. package/dist/cjs/test/unit/util/utxoCoins.d.ts +30 -0
  487. package/dist/cjs/test/unit/util/utxoCoins.d.ts.map +1 -0
  488. package/dist/cjs/test/unit/util/utxoCoins.js +175 -0
  489. package/dist/cjs/test/unit/util/wallet.d.ts +4 -0
  490. package/dist/cjs/test/unit/util/wallet.d.ts.map +1 -0
  491. package/dist/cjs/test/unit/util/wallet.js +9 -0
  492. package/dist/cjs/test/unit/verifyTransaction.d.ts +2 -0
  493. package/dist/cjs/test/unit/verifyTransaction.d.ts.map +1 -0
  494. package/dist/cjs/test/unit/verifyTransaction.js +327 -0
  495. package/dist/cjs/test/unit/wallet.d.ts +2 -0
  496. package/dist/cjs/test/unit/wallet.d.ts.map +1 -0
  497. package/dist/cjs/test/unit/wallet.js +251 -0
  498. package/dist/cjs/test/unit/webauthn.d.ts +2 -0
  499. package/dist/cjs/test/unit/webauthn.d.ts.map +1 -0
  500. package/dist/cjs/test/unit/webauthn.js +73 -0
  501. package/dist/cjs/tsconfig.tsbuildinfo +1 -0
  502. package/dist/esm/abstractUtxoCoin.d.ts +473 -0
  503. package/dist/esm/abstractUtxoCoin.d.ts.map +1 -0
  504. package/dist/esm/abstractUtxoCoin.js +677 -0
  505. package/dist/esm/address/fixedScript.d.ts +44 -0
  506. package/dist/esm/address/fixedScript.d.ts.map +1 -0
  507. package/dist/esm/address/fixedScript.js +100 -0
  508. package/dist/esm/address/index.d.ts +2 -0
  509. package/dist/esm/address/index.d.ts.map +1 -0
  510. package/dist/esm/address/index.js +2 -0
  511. package/dist/esm/config.d.ts +9 -0
  512. package/dist/esm/config.js +11 -0
  513. package/dist/esm/descriptor/NamedDescriptor.d.ts +19 -0
  514. package/dist/esm/descriptor/NamedDescriptor.d.ts.map +1 -0
  515. package/dist/esm/descriptor/NamedDescriptor.js +37 -0
  516. package/dist/esm/descriptor/assertDescriptorWalletAddress.d.ts +5 -0
  517. package/dist/esm/descriptor/assertDescriptorWalletAddress.d.ts.map +1 -0
  518. package/dist/esm/descriptor/assertDescriptorWalletAddress.js +27 -0
  519. package/dist/esm/descriptor/builder/builder.d.ts +12 -0
  520. package/dist/esm/descriptor/builder/builder.d.ts.map +1 -0
  521. package/dist/esm/descriptor/builder/builder.js +34 -0
  522. package/dist/esm/descriptor/builder/index.d.ts +3 -0
  523. package/dist/esm/descriptor/builder/index.d.ts.map +1 -0
  524. package/dist/esm/descriptor/builder/index.js +3 -0
  525. package/dist/esm/descriptor/builder/parse.d.ts +5 -0
  526. package/dist/esm/descriptor/builder/parse.d.ts.map +1 -0
  527. package/dist/esm/descriptor/builder/parse.js +112 -0
  528. package/dist/esm/descriptor/createWallet/createDescriptorWallet.d.ts +20 -0
  529. package/dist/esm/descriptor/createWallet/createDescriptorWallet.d.ts.map +1 -0
  530. package/dist/esm/descriptor/createWallet/createDescriptorWallet.js +37 -0
  531. package/dist/esm/descriptor/createWallet/createDescriptors.d.ts +12 -0
  532. package/dist/esm/descriptor/createWallet/createDescriptors.d.ts.map +1 -0
  533. package/dist/esm/descriptor/createWallet/createDescriptors.js +29 -0
  534. package/dist/esm/descriptor/createWallet/index.d.ts +3 -0
  535. package/dist/esm/descriptor/createWallet/index.d.ts.map +1 -0
  536. package/dist/esm/descriptor/createWallet/index.js +3 -0
  537. package/dist/esm/descriptor/descriptorWallet.d.ts +19 -0
  538. package/dist/esm/descriptor/descriptorWallet.d.ts.map +1 -0
  539. package/dist/esm/descriptor/descriptorWallet.js +16 -0
  540. package/dist/esm/descriptor/index.d.ts +8 -0
  541. package/dist/esm/descriptor/index.d.ts.map +1 -0
  542. package/dist/esm/descriptor/index.js +7 -0
  543. package/dist/esm/descriptor/validatePolicy.d.ts +22 -0
  544. package/dist/esm/descriptor/validatePolicy.d.ts.map +1 -0
  545. package/dist/esm/descriptor/validatePolicy.js +80 -0
  546. package/dist/esm/impl/bch/bch.d.ts +22 -0
  547. package/dist/esm/impl/bch/bch.d.ts.map +1 -0
  548. package/dist/esm/impl/bch/bch.js +39 -0
  549. package/dist/esm/impl/bch/index.d.ts +3 -0
  550. package/dist/esm/impl/bch/index.d.ts.map +1 -0
  551. package/dist/esm/impl/bch/index.js +3 -0
  552. package/dist/esm/impl/bch/tbch.d.ts +12 -0
  553. package/dist/esm/impl/bch/tbch.d.ts.map +1 -0
  554. package/dist/esm/impl/bch/tbch.js +11 -0
  555. package/dist/esm/impl/bcha/bcha.d.ts +9 -0
  556. package/dist/esm/impl/bcha/bcha.d.ts.map +1 -0
  557. package/dist/esm/impl/bcha/bcha.js +11 -0
  558. package/dist/esm/impl/bcha/index.d.ts +3 -0
  559. package/dist/esm/impl/bcha/index.d.ts.map +1 -0
  560. package/dist/esm/impl/bcha/index.js +3 -0
  561. package/dist/esm/impl/bcha/tbcha.d.ts +12 -0
  562. package/dist/esm/impl/bcha/tbcha.d.ts.map +1 -0
  563. package/dist/esm/impl/bcha/tbcha.js +11 -0
  564. package/dist/esm/impl/bsv/bsv.d.ts +9 -0
  565. package/dist/esm/impl/bsv/bsv.d.ts.map +1 -0
  566. package/dist/esm/impl/bsv/bsv.js +11 -0
  567. package/dist/esm/impl/bsv/index.d.ts +3 -0
  568. package/dist/esm/impl/bsv/index.d.ts.map +1 -0
  569. package/dist/esm/impl/bsv/index.js +3 -0
  570. package/dist/esm/impl/bsv/tbsv.d.ts +12 -0
  571. package/dist/esm/impl/bsv/tbsv.d.ts.map +1 -0
  572. package/dist/esm/impl/bsv/tbsv.js +11 -0
  573. package/dist/esm/impl/btc/btc.d.ts +15 -0
  574. package/dist/esm/impl/btc/btc.d.ts.map +1 -0
  575. package/dist/esm/impl/btc/btc.js +18 -0
  576. package/dist/esm/impl/btc/index.d.ts +7 -0
  577. package/dist/esm/impl/btc/index.d.ts.map +1 -0
  578. package/dist/esm/impl/btc/index.js +7 -0
  579. package/dist/esm/impl/btc/inscriptionBuilder.d.ts +61 -0
  580. package/dist/esm/impl/btc/inscriptionBuilder.d.ts.map +1 -0
  581. package/dist/esm/impl/btc/inscriptionBuilder.js +164 -0
  582. package/dist/esm/impl/btc/tbtc.d.ts +12 -0
  583. package/dist/esm/impl/btc/tbtc.d.ts.map +1 -0
  584. package/dist/esm/impl/btc/tbtc.js +11 -0
  585. package/dist/esm/impl/btc/tbtc4.d.ts +12 -0
  586. package/dist/esm/impl/btc/tbtc4.d.ts.map +1 -0
  587. package/dist/esm/impl/btc/tbtc4.js +11 -0
  588. package/dist/esm/impl/btc/tbtcbgsig.d.ts +12 -0
  589. package/dist/esm/impl/btc/tbtcbgsig.d.ts.map +1 -0
  590. package/dist/esm/impl/btc/tbtcbgsig.js +11 -0
  591. package/dist/esm/impl/btc/tbtcsig.d.ts +12 -0
  592. package/dist/esm/impl/btc/tbtcsig.d.ts.map +1 -0
  593. package/dist/esm/impl/btc/tbtcsig.js +11 -0
  594. package/dist/esm/impl/btg/btg.d.ts +9 -0
  595. package/dist/esm/impl/btg/btg.d.ts.map +1 -0
  596. package/dist/esm/impl/btg/btg.js +11 -0
  597. package/dist/esm/impl/btg/index.d.ts +2 -0
  598. package/dist/esm/impl/btg/index.d.ts.map +1 -0
  599. package/dist/esm/impl/btg/index.js +2 -0
  600. package/dist/esm/impl/dash/dash.d.ts +9 -0
  601. package/dist/esm/impl/dash/dash.d.ts.map +1 -0
  602. package/dist/esm/impl/dash/dash.js +11 -0
  603. package/dist/esm/impl/dash/index.d.ts +3 -0
  604. package/dist/esm/impl/dash/index.d.ts.map +1 -0
  605. package/dist/esm/impl/dash/index.js +3 -0
  606. package/dist/esm/impl/dash/tdash.d.ts +12 -0
  607. package/dist/esm/impl/dash/tdash.d.ts.map +1 -0
  608. package/dist/esm/impl/dash/tdash.js +11 -0
  609. package/dist/esm/impl/doge/doge.d.ts +35 -0
  610. package/dist/esm/impl/doge/doge.d.ts.map +1 -0
  611. package/dist/esm/impl/doge/doge.js +75 -0
  612. package/dist/esm/impl/doge/index.d.ts +3 -0
  613. package/dist/esm/impl/doge/index.d.ts.map +1 -0
  614. package/dist/esm/impl/doge/index.js +3 -0
  615. package/dist/esm/impl/doge/tdoge.d.ts +12 -0
  616. package/dist/esm/impl/doge/tdoge.d.ts.map +1 -0
  617. package/dist/esm/impl/doge/tdoge.js +11 -0
  618. package/dist/esm/impl/index.d.ts +10 -0
  619. package/dist/esm/impl/index.d.ts.map +1 -0
  620. package/dist/esm/impl/index.js +10 -0
  621. package/dist/esm/impl/ltc/index.d.ts +3 -0
  622. package/dist/esm/impl/ltc/index.d.ts.map +1 -0
  623. package/dist/esm/impl/ltc/index.js +3 -0
  624. package/dist/esm/impl/ltc/ltc.d.ts +8 -0
  625. package/dist/esm/impl/ltc/ltc.d.ts.map +1 -0
  626. package/dist/esm/impl/ltc/ltc.js +11 -0
  627. package/dist/esm/impl/ltc/tltc.d.ts +8 -0
  628. package/dist/esm/impl/ltc/tltc.d.ts.map +1 -0
  629. package/dist/esm/impl/ltc/tltc.js +11 -0
  630. package/dist/esm/impl/zec/index.d.ts +3 -0
  631. package/dist/esm/impl/zec/index.d.ts.map +1 -0
  632. package/dist/esm/impl/zec/index.js +3 -0
  633. package/dist/esm/impl/zec/tzec.d.ts +9 -0
  634. package/dist/esm/impl/zec/tzec.d.ts.map +1 -0
  635. package/dist/esm/impl/zec/tzec.js +11 -0
  636. package/dist/esm/impl/zec/zec.d.ts +12 -0
  637. package/dist/esm/impl/zec/zec.d.ts.map +1 -0
  638. package/dist/esm/impl/zec/zec.js +11 -0
  639. package/dist/esm/index.d.ts +23 -0
  640. package/dist/esm/index.d.ts.map +1 -0
  641. package/dist/esm/index.js +23 -0
  642. package/dist/esm/keychains.d.ts +56 -0
  643. package/dist/esm/keychains.d.ts.map +1 -0
  644. package/dist/esm/keychains.js +99 -0
  645. package/dist/esm/names.d.ts +36 -0
  646. package/dist/esm/names.d.ts.map +1 -0
  647. package/dist/esm/names.js +184 -0
  648. package/dist/esm/offlineVault/OfflineVaultHalfSigned.d.ts +9 -0
  649. package/dist/esm/offlineVault/OfflineVaultHalfSigned.d.ts.map +1 -0
  650. package/dist/esm/offlineVault/OfflineVaultHalfSigned.js +20 -0
  651. package/dist/esm/offlineVault/OfflineVaultSignable.d.ts +46 -0
  652. package/dist/esm/offlineVault/OfflineVaultSignable.d.ts.map +1 -0
  653. package/dist/esm/offlineVault/OfflineVaultSignable.js +18 -0
  654. package/dist/esm/offlineVault/TransactionExplanation.d.ts +16 -0
  655. package/dist/esm/offlineVault/TransactionExplanation.d.ts.map +1 -0
  656. package/dist/esm/offlineVault/TransactionExplanation.js +12 -0
  657. package/dist/esm/offlineVault/descriptor/index.d.ts +2 -0
  658. package/dist/esm/offlineVault/descriptor/index.d.ts.map +1 -0
  659. package/dist/esm/offlineVault/descriptor/index.js +2 -0
  660. package/dist/esm/offlineVault/descriptor/transaction.d.ts +39 -0
  661. package/dist/esm/offlineVault/descriptor/transaction.d.ts.map +1 -0
  662. package/dist/esm/offlineVault/descriptor/transaction.js +41 -0
  663. package/dist/esm/offlineVault/index.d.ts +6 -0
  664. package/dist/esm/offlineVault/index.d.ts.map +1 -0
  665. package/dist/esm/offlineVault/index.js +4 -0
  666. package/dist/esm/recovery/RecoveryProvider.d.ts +20 -0
  667. package/dist/esm/recovery/RecoveryProvider.d.ts.map +1 -0
  668. package/dist/esm/recovery/RecoveryProvider.js +19 -0
  669. package/dist/esm/recovery/backupKeyRecovery.d.ts +158 -0
  670. package/dist/esm/recovery/backupKeyRecovery.d.ts.map +1 -0
  671. package/dist/esm/recovery/backupKeyRecovery.js +400 -0
  672. package/dist/esm/recovery/baseApi.d.ts +24 -0
  673. package/dist/esm/recovery/baseApi.d.ts.map +1 -0
  674. package/dist/esm/recovery/baseApi.js +64 -0
  675. package/dist/esm/recovery/coingeckoApi.d.ts +6 -0
  676. package/dist/esm/recovery/coingeckoApi.d.ts.map +1 -0
  677. package/dist/esm/recovery/coingeckoApi.js +40 -0
  678. package/dist/esm/recovery/crossChainRecovery.d.ts +97 -0
  679. package/dist/esm/recovery/crossChainRecovery.d.ts.map +1 -0
  680. package/dist/esm/recovery/crossChainRecovery.js +292 -0
  681. package/dist/esm/recovery/index.d.ts +7 -0
  682. package/dist/{src → esm}/recovery/index.d.ts.map +1 -1
  683. package/dist/esm/recovery/index.js +7 -0
  684. package/dist/esm/recovery/mempoolApi.d.ts +7 -0
  685. package/dist/{src → esm}/recovery/mempoolApi.d.ts.map +1 -1
  686. package/dist/esm/recovery/mempoolApi.js +29 -0
  687. package/dist/esm/recovery/psbt.d.ts +62 -0
  688. package/dist/esm/recovery/psbt.d.ts.map +1 -0
  689. package/dist/esm/recovery/psbt.js +145 -0
  690. package/dist/esm/tnumber.d.ts +4 -0
  691. package/dist/esm/tnumber.d.ts.map +1 -0
  692. package/dist/esm/tnumber.js +9 -0
  693. package/dist/esm/transaction/bip322.d.ts +27 -0
  694. package/dist/esm/transaction/bip322.d.ts.map +1 -0
  695. package/dist/esm/transaction/bip322.js +100 -0
  696. package/dist/esm/transaction/common/verifyPayGoAmount.d.ts +1 -0
  697. package/dist/esm/transaction/common/verifyPayGoAmount.d.ts.map +1 -0
  698. package/dist/esm/transaction/common/verifyPayGoAmount.js +1 -0
  699. package/dist/esm/transaction/decode.d.ts +25 -0
  700. package/dist/esm/transaction/decode.d.ts.map +1 -0
  701. package/dist/esm/transaction/decode.js +66 -0
  702. package/dist/esm/transaction/descriptor/explainPsbt.d.ts +5 -0
  703. package/dist/esm/transaction/descriptor/explainPsbt.d.ts.map +1 -0
  704. package/dist/esm/transaction/descriptor/explainPsbt.js +42 -0
  705. package/dist/esm/transaction/descriptor/index.d.ts +7 -0
  706. package/dist/esm/transaction/descriptor/index.d.ts.map +1 -0
  707. package/dist/esm/transaction/descriptor/index.js +6 -0
  708. package/dist/esm/transaction/descriptor/parse.d.ts +19 -0
  709. package/dist/esm/transaction/descriptor/parse.d.ts.map +1 -0
  710. package/dist/esm/transaction/descriptor/parse.js +80 -0
  711. package/dist/esm/transaction/descriptor/parseToAmountType.d.ts +14 -0
  712. package/dist/esm/transaction/descriptor/parseToAmountType.d.ts.map +1 -0
  713. package/dist/esm/transaction/descriptor/parseToAmountType.js +55 -0
  714. package/dist/esm/transaction/descriptor/recipient.d.ts +5 -0
  715. package/dist/esm/transaction/descriptor/recipient.d.ts.map +1 -0
  716. package/dist/esm/transaction/descriptor/recipient.js +2 -0
  717. package/dist/esm/transaction/descriptor/signPsbt.d.ts +24 -0
  718. package/dist/esm/transaction/descriptor/signPsbt.d.ts.map +1 -0
  719. package/dist/esm/transaction/descriptor/signPsbt.js +39 -0
  720. package/dist/esm/transaction/descriptor/verifyTransaction.d.ts +37 -0
  721. package/dist/esm/transaction/descriptor/verifyTransaction.d.ts.map +1 -0
  722. package/dist/esm/transaction/descriptor/verifyTransaction.js +70 -0
  723. package/dist/esm/transaction/explainTransaction.d.ts +21 -0
  724. package/dist/esm/transaction/explainTransaction.d.ts.map +1 -0
  725. package/dist/esm/transaction/explainTransaction.js +56 -0
  726. package/dist/esm/transaction/fetchInputs.d.ts +27 -0
  727. package/dist/esm/transaction/fetchInputs.d.ts.map +1 -0
  728. package/dist/esm/transaction/fetchInputs.js +74 -0
  729. package/dist/esm/transaction/fixedScript/SigningError.d.ts +24 -0
  730. package/dist/esm/transaction/fixedScript/SigningError.d.ts.map +1 -0
  731. package/dist/esm/transaction/fixedScript/SigningError.js +26 -0
  732. package/dist/esm/transaction/fixedScript/explainPsbtWasm.d.ts +45 -0
  733. package/dist/esm/transaction/fixedScript/explainPsbtWasm.d.ts.map +1 -0
  734. package/dist/esm/transaction/fixedScript/explainPsbtWasm.js +144 -0
  735. package/dist/esm/transaction/fixedScript/explainTransaction.d.ts +83 -0
  736. package/dist/esm/transaction/fixedScript/explainTransaction.d.ts.map +1 -0
  737. package/dist/esm/transaction/fixedScript/explainTransaction.js +309 -0
  738. package/dist/esm/transaction/fixedScript/index.d.ts +10 -0
  739. package/dist/esm/transaction/fixedScript/index.d.ts.map +1 -0
  740. package/dist/esm/transaction/fixedScript/index.js +9 -0
  741. package/dist/esm/transaction/fixedScript/musig2.d.ts +4 -0
  742. package/dist/esm/transaction/fixedScript/musig2.d.ts.map +1 -0
  743. package/dist/esm/transaction/fixedScript/musig2.js +2 -0
  744. package/dist/esm/transaction/fixedScript/parseOutput.d.ts +28 -0
  745. package/dist/esm/transaction/fixedScript/parseOutput.d.ts.map +1 -0
  746. package/dist/esm/transaction/fixedScript/parseOutput.js +209 -0
  747. package/dist/esm/transaction/fixedScript/parseTransaction.d.ts +8 -0
  748. package/dist/esm/transaction/fixedScript/parseTransaction.d.ts.map +1 -0
  749. package/dist/esm/transaction/fixedScript/parseTransaction.js +222 -0
  750. package/dist/esm/transaction/fixedScript/replayProtection.d.ts +10 -0
  751. package/dist/esm/transaction/fixedScript/replayProtection.d.ts.map +1 -0
  752. package/dist/esm/transaction/fixedScript/replayProtection.js +38 -0
  753. package/dist/esm/transaction/fixedScript/signLegacyTransaction.d.ts +32 -0
  754. package/dist/esm/transaction/fixedScript/signLegacyTransaction.d.ts.map +1 -0
  755. package/dist/esm/transaction/fixedScript/signLegacyTransaction.js +123 -0
  756. package/dist/esm/transaction/fixedScript/signPsbtUtxolib.d.ts +20 -0
  757. package/dist/esm/transaction/fixedScript/signPsbtUtxolib.d.ts.map +1 -0
  758. package/dist/esm/transaction/fixedScript/signPsbtUtxolib.js +117 -0
  759. package/dist/esm/transaction/fixedScript/signPsbtWasm.d.ts +20 -0
  760. package/dist/esm/transaction/fixedScript/signPsbtWasm.d.ts.map +1 -0
  761. package/dist/esm/transaction/fixedScript/signPsbtWasm.js +109 -0
  762. package/dist/esm/transaction/fixedScript/signTransaction.d.ts +34 -0
  763. package/dist/esm/transaction/fixedScript/signTransaction.d.ts.map +1 -0
  764. package/dist/esm/transaction/fixedScript/signTransaction.js +71 -0
  765. package/dist/esm/transaction/fixedScript/verifyTransaction.d.ts +21 -0
  766. package/dist/esm/transaction/fixedScript/verifyTransaction.d.ts.map +1 -0
  767. package/dist/esm/transaction/fixedScript/verifyTransaction.js +164 -0
  768. package/dist/esm/transaction/getPayGoVerificationPubkey.d.ts +9 -0
  769. package/dist/esm/transaction/getPayGoVerificationPubkey.d.ts.map +1 -0
  770. package/dist/esm/transaction/getPayGoVerificationPubkey.js +17 -0
  771. package/dist/esm/transaction/index.d.ts +10 -0
  772. package/dist/esm/transaction/index.d.ts.map +1 -0
  773. package/dist/esm/transaction/index.js +10 -0
  774. package/dist/esm/transaction/outputDifference.d.ts +44 -0
  775. package/dist/esm/transaction/outputDifference.d.ts.map +1 -0
  776. package/dist/esm/transaction/outputDifference.js +45 -0
  777. package/dist/esm/transaction/parseTransaction.d.ts +4 -0
  778. package/dist/esm/transaction/parseTransaction.d.ts.map +1 -0
  779. package/dist/esm/transaction/parseTransaction.js +12 -0
  780. package/dist/esm/transaction/recipient.d.ts +34 -0
  781. package/dist/esm/transaction/recipient.d.ts.map +1 -0
  782. package/dist/esm/transaction/recipient.js +61 -0
  783. package/dist/esm/transaction/signTransaction.d.ts +6 -0
  784. package/dist/esm/transaction/signTransaction.d.ts.map +1 -0
  785. package/dist/esm/transaction/signTransaction.js +73 -0
  786. package/dist/esm/transaction/types.d.ts +50 -0
  787. package/dist/esm/transaction/types.d.ts.map +1 -0
  788. package/dist/esm/transaction/types.js +4 -0
  789. package/dist/esm/transaction/verifyTransaction.d.ts +4 -0
  790. package/dist/esm/transaction/verifyTransaction.d.ts.map +1 -0
  791. package/dist/esm/transaction/verifyTransaction.js +14 -0
  792. package/dist/esm/unspent.d.ts +59 -0
  793. package/dist/esm/unspent.d.ts.map +1 -0
  794. package/dist/esm/unspent.js +15 -0
  795. package/dist/esm/verifyKey.d.ts +21 -0
  796. package/dist/esm/verifyKey.d.ts.map +1 -0
  797. package/dist/esm/verifyKey.js +100 -0
  798. package/dist/esm/wallet.d.ts +15 -0
  799. package/dist/esm/wallet.d.ts.map +1 -0
  800. package/dist/esm/wallet.js +5 -0
  801. package/dist/esm/wasmUtil.d.ts +34 -0
  802. package/dist/esm/wasmUtil.d.ts.map +1 -0
  803. package/dist/esm/wasmUtil.js +54 -0
  804. package/package.json +47 -20
  805. package/.eslintignore +0 -5
  806. package/CHANGELOG.md +0 -235
  807. package/dist/src/abstractUtxoCoin.d.ts +0 -392
  808. package/dist/src/abstractUtxoCoin.d.ts.map +0 -1
  809. package/dist/src/abstractUtxoCoin.js +0 -931
  810. package/dist/src/config.js +0 -14
  811. package/dist/src/index.d.ts +0 -6
  812. package/dist/src/index.d.ts.map +0 -1
  813. package/dist/src/index.js +0 -18
  814. package/dist/src/parseOutput.d.ts +0 -22
  815. package/dist/src/parseOutput.d.ts.map +0 -1
  816. package/dist/src/parseOutput.js +0 -181
  817. package/dist/src/recovery/RecoveryProvider.d.ts.map +0 -1
  818. package/dist/src/recovery/RecoveryProvider.js +0 -24
  819. package/dist/src/recovery/backupKeyRecovery.d.ts +0 -62
  820. package/dist/src/recovery/backupKeyRecovery.d.ts.map +0 -1
  821. package/dist/src/recovery/backupKeyRecovery.js +0 -293
  822. package/dist/src/recovery/baseApi.d.ts.map +0 -1
  823. package/dist/src/recovery/baseApi.js +0 -73
  824. package/dist/src/recovery/coingeckoApi.d.ts.map +0 -1
  825. package/dist/src/recovery/coingeckoApi.js +0 -47
  826. package/dist/src/recovery/crossChainRecovery.d.ts.map +0 -1
  827. package/dist/src/recovery/crossChainRecovery.js +0 -294
  828. package/dist/src/recovery/mempoolApi.js +0 -33
  829. package/dist/src/recovery/smartbitApi.d.ts +0 -11
  830. package/dist/src/recovery/smartbitApi.d.ts.map +0 -1
  831. package/dist/src/recovery/smartbitApi.js +0 -36
  832. package/dist/src/replayProtection.d.ts +0 -4
  833. package/dist/src/replayProtection.d.ts.map +0 -1
  834. package/dist/src/replayProtection.js +0 -21
  835. package/dist/src/sign.d.ts +0 -31
  836. package/dist/src/sign.d.ts.map +0 -1
  837. package/dist/src/sign.js +0 -104
  838. package/dist/tsconfig.tsbuildinfo +0 -8021
  839. /package/dist/{src → cjs/src}/config.d.ts +0 -0
  840. /package/dist/{src → cjs/src}/recovery/mempoolApi.d.ts +0 -0
  841. /package/dist/{src → esm}/config.d.ts.map +0 -0
@@ -0,0 +1,297 @@
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 nock = require("nock");
38
+ const sdk_test_1 = require("@bitgo-beta/sdk-test");
39
+ const wasm_utxo_1 = require("@bitgo/wasm-utxo");
40
+ const sinon = __importStar(require("sinon"));
41
+ const src_1 = require("../../../src");
42
+ const names_1 = require("../../../src/names");
43
+ const util_1 = require("../util");
44
+ const nockBitGo_1 = require("../util/nockBitGo");
45
+ const mock_1 = require("./mock");
46
+ function getKeyId(k) {
47
+ return (0, sdk_test_1.getSeed)(k.pub).toString('hex');
48
+ }
49
+ function nockWallet(coin, walletId, walletKeys) {
50
+ return [
51
+ (0, nockBitGo_1.nockBitGo)()
52
+ .get(`/api/v2/${coin.getChain()}/wallet/${walletId}`)
53
+ .reply(200, {
54
+ id: walletId,
55
+ coin: coin.getChain(),
56
+ label: 'crossChainRecovery',
57
+ keys: walletKeys.map((k) => getKeyId(k)),
58
+ })
59
+ .persist(),
60
+ ...walletKeys.map((k) => (0, nockBitGo_1.nockBitGo)()
61
+ .get(`/api/v2/${coin.getChain()}/key/${getKeyId(k)}`)
62
+ .reply(200, k)
63
+ .persist()),
64
+ ];
65
+ }
66
+ function nockWalletAddress(coin, walletId, address) {
67
+ return (0, nockBitGo_1.nockBitGo)()
68
+ .get(`/api/v2/${coin.getChain()}/wallet/${walletId}/address/${address.address}`)
69
+ .reply(200, {
70
+ address: address.address,
71
+ chain: address.chain,
72
+ index: address.index,
73
+ coin: coin.getChain(),
74
+ wallet: walletId,
75
+ })
76
+ .persist();
77
+ }
78
+ /**
79
+ * Setup test for cross-chain recovery.
80
+ *
81
+ * Users can receive deposits on wallet addresses that are on a different chain.
82
+ *
83
+ * For instance, a user can receive litecoin on a bitcoin wallet.
84
+ * This means that the litecoin blockchain has a transaction with outputs that are spendable
85
+ * with keys that were originally created for a BitGo BTC wallet.
86
+ * In this example, LTC is the "source coin" and BTC is the "recovery coin"
87
+ * In cases like these we must use construct a transaction for litecoin network using keys of the
88
+ * bitcoin wallet.
89
+ *
90
+ * @param sourceCoin - the coin to construct the transaction for
91
+ * @param recoveryCoin - the coin the receiving wallet was set up for
92
+ */
93
+ // Get wasm wallet keys for signature verification
94
+ const { walletKeys: wasmWalletKeys, xprivs } = (0, util_1.getDefaultWasmWalletKeys)();
95
+ function run(sourceCoin, recoveryCoin) {
96
+ describe(`Cross-Chain Recovery [sourceCoin=${sourceCoin.getChain()} recoveryCoin=${recoveryCoin.getChain()}]`, function () {
97
+ const recoveryWalletId = '5abacebe28d72fbd07e0b8cbba0ff39e';
98
+ // the address the accidental deposit went to, in both sourceCoin and addressCoin formats
99
+ const [depositAddressSourceCoin, depositAddressRecoveryCoin] = [sourceCoin, recoveryCoin].map((coin) => ({
100
+ address: (0, src_1.generateAddress)(coin.name, { keychains: util_1.keychainsBase58, chain: 0, index: 0 }),
101
+ chain: 0,
102
+ index: 0,
103
+ }));
104
+ const chain = 0;
105
+ const index = 1;
106
+ // the address where we want to recover our funds to
107
+ const recoveryAddress = (0, src_1.generateAddress)(sourceCoin.name, {
108
+ keychains: util_1.keychainsBase58,
109
+ chain,
110
+ index,
111
+ });
112
+ const nocks = [];
113
+ // Create recovery unspent using wasm-utxo (no utxolib dependency)
114
+ function getRecoveryUnspents() {
115
+ const depositValue = (sourceCoin.amountType === 'bigint' ? BigInt(1e8) : 1e8);
116
+ return [
117
+ (0, util_1.createWasmWalletUnspent)(depositAddressSourceCoin.address, chain, index, depositValue, sourceCoin.name),
118
+ ];
119
+ }
120
+ before('setup nocks', function () {
121
+ nocks.push(...nockWallet(recoveryCoin, recoveryWalletId, util_1.keychainsBase58));
122
+ nocks.push(nockWalletAddress(recoveryCoin, recoveryWalletId, depositAddressRecoveryCoin));
123
+ });
124
+ after(function () {
125
+ nocks.forEach((n) => n.done());
126
+ });
127
+ after(function () {
128
+ nock.cleanAll();
129
+ });
130
+ afterEach(function () {
131
+ sinon.restore();
132
+ });
133
+ async function matchFixture(name, recovery) {
134
+ let recoveryObj = { ...recovery };
135
+ if (sourceCoin.amountType === 'bigint') {
136
+ recoveryObj = JSON.parse(JSON.stringify(recoveryObj, (k, v) => {
137
+ if (typeof v === 'bigint') {
138
+ return v.toString();
139
+ }
140
+ else {
141
+ return v;
142
+ }
143
+ }));
144
+ }
145
+ (0, util_1.assertEqualJSON)(recoveryObj, await (0, util_1.getFixture)(sourceCoin, `recovery/crossChainRecovery-${recoveryCoin.getChain()}-${name}`, recoveryObj));
146
+ }
147
+ function checkRecoveryPsbtSignature(psbtHex) {
148
+ // Parse using wasm-utxo for signature verification
149
+ const wasmPsbt = wasm_utxo_1.fixedScriptWallet.BitGoPsbt.fromBytes(Buffer.from(psbtHex, 'hex'), sourceCoin.name);
150
+ const parsed = wasmPsbt.parseTransactionWithWalletKeys(wasmWalletKeys, { replayProtection: { publicKeys: [] } });
151
+ const unspents = getRecoveryUnspents();
152
+ assert.strictEqual(parsed.inputs.length, unspents.length);
153
+ // Verify user key has signed each input (same pattern as backupKeyRecovery test)
154
+ parsed.inputs.forEach((_, i) => {
155
+ const userSigned = wasmPsbt.verifySignature(i, xprivs[0]);
156
+ assert.strictEqual(userSigned, true, `Input ${i} should be signed by user key`);
157
+ });
158
+ }
159
+ it('should test signed cross chain recovery', async () => {
160
+ const depositUnspent = getRecoveryUnspents()[0];
161
+ // Parse txid from the unspent id (format: txid:vout)
162
+ const depositTxid = depositUnspent.id.split(':')[0];
163
+ // Use the deposit address as the input address (simulating a p2sh input)
164
+ const inputAddress = (0, src_1.generateAddress)(sourceCoin.name, { keychains: util_1.keychainsBase58, chain: 0, index: 2 });
165
+ const getRecoveryProviderStub = sinon
166
+ .stub(src_1.AbstractUtxoCoin.prototype, 'getRecoveryProvider')
167
+ .returns(new mock_1.WasmCrossChainRecoveryProvider(sourceCoin, depositUnspent, [inputAddress]));
168
+ const params = {
169
+ recoveryCoin,
170
+ txid: depositTxid,
171
+ recoveryAddress,
172
+ wallet: recoveryWalletId,
173
+ };
174
+ const signedRecovery = (await sourceCoin.recoverFromWrongChain({
175
+ ...params,
176
+ xprv: util_1.keychainsBase58[0].prv,
177
+ }));
178
+ assert.strictEqual(getRecoveryProviderStub.callCount, 1);
179
+ // Verify fixture match
180
+ await matchFixture('signed', signedRecovery);
181
+ // Verify PSBT has valid signatures (user key signed)
182
+ checkRecoveryPsbtSignature(signedRecovery.txHex);
183
+ });
184
+ it('should test unsigned cross chain recovery', async () => {
185
+ const depositUnspent = getRecoveryUnspents()[0];
186
+ // Parse txid from the unspent id (format: txid:vout)
187
+ const depositTxid = depositUnspent.id.split(':')[0];
188
+ // Use the deposit address as the input address (simulating a p2sh input)
189
+ const inputAddress = (0, src_1.generateAddress)(sourceCoin.name, { keychains: util_1.keychainsBase58, chain: 0, index: 2 });
190
+ const getRecoveryProviderStub = sinon
191
+ .stub(src_1.AbstractUtxoCoin.prototype, 'getRecoveryProvider')
192
+ .returns(new mock_1.WasmCrossChainRecoveryProvider(sourceCoin, depositUnspent, [inputAddress]));
193
+ const params = {
194
+ recoveryCoin,
195
+ txid: depositTxid,
196
+ recoveryAddress,
197
+ wallet: recoveryWalletId,
198
+ };
199
+ const unsignedRecovery = (await sourceCoin.recoverFromWrongChain({
200
+ ...params,
201
+ signed: false,
202
+ }));
203
+ assert.strictEqual(getRecoveryProviderStub.callCount, 1);
204
+ // Verify fixture match
205
+ await matchFixture('unsigned', unsignedRecovery);
206
+ // Verify the unsigned PSBT can be signed
207
+ const signedTx = await sourceCoin.signTransaction({
208
+ txPrebuild: unsignedRecovery,
209
+ prv: util_1.keychainsBase58[0].prv,
210
+ pubs: util_1.keychainsBase58.map((k) => k.pub),
211
+ });
212
+ checkRecoveryPsbtSignature(signedTx.txHex);
213
+ });
214
+ });
215
+ }
216
+ function isSupportedCrossChainRecovery(sourceCoin, recoveryCoin) {
217
+ return src_1.supportedCrossChainRecoveries[sourceCoin.getFamily()]?.includes(recoveryCoin.getFamily());
218
+ }
219
+ util_1.utxoCoins.forEach((coin) => {
220
+ util_1.utxoCoins
221
+ .filter((otherCoin) => coin !== otherCoin &&
222
+ isSupportedCrossChainRecovery(coin, otherCoin) &&
223
+ (((0, names_1.isMainnetCoin)(coin.name) && (0, names_1.isMainnetCoin)(otherCoin.name)) ||
224
+ ((0, names_1.isTestnetCoin)(coin.name) && (0, names_1.isTestnetCoin)(otherCoin.name))))
225
+ .forEach((otherCoin) => {
226
+ if (coin.amountType === 'bigint') {
227
+ run(coin, otherCoin);
228
+ }
229
+ else {
230
+ run(coin, otherCoin);
231
+ }
232
+ });
233
+ });
234
+ describe(`Cross-Chain Recovery getWallet`, async function () {
235
+ const bitgo = util_1.defaultBitGo;
236
+ const recoveryCoin = (0, util_1.getUtxoCoin)('btc');
237
+ const recoveryWalletId = '5abacebe28d72fbd07e0b8cbba0ff39e';
238
+ it('should search v1 wallets if the v2 endpoint responds with a 4xx error', async function () {
239
+ const errorResponses = [400, 404];
240
+ for (const error of errorResponses) {
241
+ const nockV2Wallet = (0, nockBitGo_1.nockBitGo)(bitgo)
242
+ .get(`/api/v2/${recoveryCoin.getChain()}/wallet/${recoveryWalletId}`)
243
+ .reply(error);
244
+ const nockV1Wallet = (0, nockBitGo_1.nockBitGo)(bitgo).get(`/api/v1/wallet/${recoveryWalletId}`).reply(error);
245
+ await assert.rejects(() => (0, src_1.getWallet)(bitgo, recoveryCoin, recoveryWalletId), Error(`could not get wallet ${recoveryWalletId} from v1 or v2: ApiResponseError: ${error}`));
246
+ nockV2Wallet.done();
247
+ nockV1Wallet.done();
248
+ }
249
+ });
250
+ it('should throw an error if the v2 endpoint responds with a 5xx error', async function () {
251
+ const errorResponses = [500];
252
+ for (const error of errorResponses) {
253
+ const nockV2Wallet = (0, nockBitGo_1.nockBitGo)(bitgo)
254
+ .get(`/api/v2/${recoveryCoin.getChain()}/wallet/${recoveryWalletId}`)
255
+ .reply(error);
256
+ await assert.rejects(() => (0, src_1.getWallet)(bitgo, recoveryCoin, recoveryWalletId), {
257
+ name: 'ApiResponseError',
258
+ status: 500,
259
+ result: {},
260
+ invalidToken: false,
261
+ needsOTP: false,
262
+ });
263
+ nockV2Wallet.done();
264
+ }
265
+ });
266
+ });
267
+ describe('convertLtcAddressToLegacyFormat', function () {
268
+ const scriptPubKey = Buffer.from('a9149f0bf51fab4d33ab21977e1b89f776f64161ef4287', 'hex');
269
+ it('should convert M... P2SH address to 3... legacy format', function () {
270
+ // These two addresses represent the same underlying script hash:
271
+ // - MNQ7zkgMsaV67rsjA3JuP59RC5wxRXpwgE is the LTC format (scriptHash 0x32)
272
+ // - 3GBygsGPvTdfKMbq4AKZZRu1sPMWPEsBfd is the BTC format (scriptHash 0x05)
273
+ // const ltcAddress = 'MNQ7zkgMsaV67rsjA3JuP59RC5wxRXpwgE';
274
+ const ltcAddress = wasm_utxo_1.address.fromOutputScriptWithCoin(scriptPubKey, 'ltc');
275
+ const tltcAddress = wasm_utxo_1.address.fromOutputScriptWithCoin(scriptPubKey, 'tltc');
276
+ assert.strictEqual(ltcAddress, 'MNQ7zkgMsaV67rsjA3JuP59RC5wxRXpwgE');
277
+ assert.strictEqual(tltcAddress, 'Qb6wsd4fZ2C6fKzRMPyTG5KiE81W6QCxhU');
278
+ const legacyAddress = (0, src_1.convertLtcAddressToLegacyFormat)(ltcAddress, 'ltc');
279
+ const expectedLtcLegacyAddress = '3GBygsGPvTdfKMbq4AKZZRu1sPMWPEsBfd';
280
+ assert.strictEqual(legacyAddress, expectedLtcLegacyAddress);
281
+ const expectedTltcLegacyAddress = '2N7kBkcCRXv91X9ENjHwSBNtH5jZg8yye6r';
282
+ const tltcLegacyAddress = (0, src_1.convertLtcAddressToLegacyFormat)(tltcAddress, 'tltc');
283
+ assert.strictEqual(tltcLegacyAddress, expectedTltcLegacyAddress);
284
+ });
285
+ it('should convert MD68PsdheKxcYsrVLyZRXgoSDLnB1MdVtE to legacy format', function () {
286
+ const address = 'MD68PsdheKxcYsrVLyZRXgoSDLnB1MdVtE';
287
+ const legacyAddress = (0, src_1.convertLtcAddressToLegacyFormat)(address, 'ltc');
288
+ // Should start with '3' (legacy BTC P2SH format)
289
+ assert.ok(legacyAddress.startsWith('3'), `Expected address to start with '3', got: ${legacyAddress}`);
290
+ });
291
+ it('should not modify bech32 addresses', function () {
292
+ const bech32Address = 'ltc1qgrl8zpndsklaa9swgd5vevyxmx5x63vcrl7dk4';
293
+ const result = (0, src_1.convertLtcAddressToLegacyFormat)(bech32Address, 'ltc');
294
+ assert.strictEqual(result, bech32Address);
295
+ });
296
+ });
297
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Jvc3NDaGFpblJlY292ZXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L3JlY292ZXJ5L2Nyb3NzQ2hhaW5SZWNvdmVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUVqQyw2QkFBOEI7QUFFOUIsbURBQStDO0FBQy9DLGdEQUE2RTtBQUM3RSw2Q0FBK0I7QUFFL0Isc0NBUXNCO0FBQ3RCLDhDQUFrRTtBQUVsRSxrQ0FVaUI7QUFDakIsaURBQThDO0FBRTlDLGlDQUF3RDtBQUV4RCxTQUFTLFFBQVEsQ0FBQyxDQUFpQjtJQUNqQyxPQUFPLElBQUEsa0JBQU8sRUFBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxJQUFzQixFQUFFLFFBQWdCLEVBQUUsVUFBa0M7SUFDOUYsT0FBTztRQUNMLElBQUEscUJBQVMsR0FBRTthQUNSLEdBQUcsQ0FBQyxXQUFXLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxRQUFRLEVBQUUsQ0FBQzthQUNwRCxLQUFLLENBQUMsR0FBRyxFQUFFO1lBQ1YsRUFBRSxFQUFFLFFBQVE7WUFDWixJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNyQixLQUFLLEVBQUUsb0JBQW9CO1lBQzNCLElBQUksRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDekMsQ0FBQzthQUNELE9BQU8sRUFBRTtRQUNaLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ3RCLElBQUEscUJBQVMsR0FBRTthQUNSLEdBQUcsQ0FBQyxXQUFXLElBQUksQ0FBQyxRQUFRLEVBQUUs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QyxDQUFDO0lBQ25FLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLG9FQUFvRSxFQUFFO1FBQ3ZFLE1BQU0sT0FBTyxHQUFHLG9DQUFvQyxDQUFDO1FBQ3JELE1BQU0sYUFBYSxHQUFHLElBQUEscUNBQStCLEVBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXRFLGlEQUFpRDtRQUNqRCxNQUFNLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsNENBQTRDLGFBQWEsRUFBRSxDQUFDLENBQUM7SUFDeEcsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsb0NBQW9DLEVBQUU7UUFDdkMsTUFBTSxhQUFhLEdBQUcsNkNBQTZDLENBQUM7UUFDcEUsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQ0FBK0IsRUFBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDckUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDNUMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgbm9jayA9IHJlcXVpcmUoJ25vY2snKTtcbmltcG9ydCB7IFRyaXBsZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IGdldFNlZWQgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstdGVzdCc7XG5pbXBvcnQgeyBhZGRyZXNzIGFzIHdhc21BZGRyZXNzLCBmaXhlZFNjcmlwdFdhbGxldCB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuaW1wb3J0ICogYXMgc2lub24gZnJvbSAnc2lub24nO1xuXG5pbXBvcnQge1xuICBBYnN0cmFjdFV0eG9Db2luLFxuICBDcm9zc0NoYWluUmVjb3ZlcnlTaWduZWQsXG4gIENyb3NzQ2hhaW5SZWNvdmVyeVVuc2lnbmVkLFxuICBnZXRXYWxsZXQsXG4gIHN1cHBvcnRlZENyb3NzQ2hhaW5SZWNvdmVyaWVzLFxuICBnZW5lcmF0ZUFkZHJlc3MsXG4gIGNvbnZlcnRMdGNBZGRyZXNzVG9MZWdhY3lGb3JtYXQsXG59IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBpc01haW5uZXRDb2luLCBpc1Rlc3RuZXRDb2luIH0gZnJvbSAnLi4vLi4vLi4vc3JjL25hbWVzJztcbmltcG9ydCB0eXBlIHsgV2FsbGV0VW5zcGVudCB9IGZyb20gJy4uLy4uLy4uL3NyYy91bnNwZW50JztcbmltcG9ydCB7XG4gIGdldEZpeHR1cmUsXG4gIGtleWNoYWluc0Jhc2U1OCxcbiAgS2V5Y2hhaW5CYXNlNTgsXG4gIGFzc2VydEVxdWFsSlNPTixcbiAgdXR4b0NvaW5zLFxuICBnZXREZWZhdWx0V2FzbVdhbGxldEtleXMsXG4gIGRlZmF1bHRCaXRHbyxcbiAgZ2V0VXR4b0NvaW4sXG4gIGNyZWF0ZVdhc21XYWxsZXRVbnNwZW50LFxufSBmcm9tICcuLi91dGlsJztcbmltcG9ydCB7IG5vY2tCaXRHbyB9IGZyb20gJy4uL3V0aWwvbm9ja0JpdEdvJztcblxuaW1wb3J0IHsgV2FzbUNyb3NzQ2hhaW5SZWNvdmVyeVByb3ZpZGVyIH0gZnJvbSAnLi9tb2NrJztcblxuZnVuY3Rpb24gZ2V0S2V5SWQoazogS2V5Y2hhaW5CYXNlNTgpOiBzdHJpbmcge1xuICByZXR1cm4gZ2V0U2VlZChrLnB1YikudG9TdHJpbmcoJ2hleCcpO1xufVxuXG5mdW5jdGlvbiBub2NrV2FsbGV0KGNvaW46IEFic3RyYWN0VXR4b0NvaW4sIHdhbGxldElkOiBzdHJpbmcsIHdhbGxldEtleXM6IFRyaXBsZTxLZXljaGFpbkJhc2U1OD4pOiBub2NrLlNjb3BlW10ge1xuICByZXR1cm4gW1xuICAgIG5vY2tCaXRHbygpXG4gICAgICAuZ2V0KGAvYXBpL3YyLyR7Y29pbi5nZXRDaGFpbigpfS93YWxsZXQvJHt3YWxsZXRJZH1gKVxuICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICBpZDogd2FsbGV0SWQsXG4gICAgICAgIGNvaW46IGNvaW4uZ2V0Q2hhaW4oKSxcbiAgICAgICAgbGFiZWw6ICdjcm9zc0NoYWluUmVjb3ZlcnknLFxuICAgICAgICBrZXlzOiB3YWxsZXRLZXlzLm1hcCgoaykgPT4gZ2V0S2V5SWQoaykpLFxuICAgICAgfSlcbiAgICAgIC5wZXJzaXN0KCksXG4gICAgLi4ud2FsbGV0S2V5cy5tYXAoKGspID0+XG4gICAgICBub2NrQml0R28oKVxuICAgICAgICAuZ2V0KGAvYXBpL3YyLyR7Y29pbi5nZXRDaGFpbigpfS9rZXkvJHtnZXRLZXlJZChrKX1gKVxuICAgICAgICAucmVwbHkoMjAwLCBrKVxuICAgICAgICAucGVyc2lzdCgpXG4gICAgKSxcbiAgXTtcbn1cblxudHlwZSBBZGRyZXNzID0ge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIGNoYWluOiBudW1iZXI7XG4gIGluZGV4OiBudW1iZXI7XG59O1xuXG5mdW5jdGlvbiBub2NrV2FsbGV0QWRkcmVzcyhjb2luOiBBYnN0cmFjdFV0eG9Db2luLCB3YWxsZXRJZDogc3RyaW5nLCBhZGRyZXNzOiBBZGRyZXNzKTogbm9jay5TY29wZSB7XG4gIHJldHVybiBub2NrQml0R28oKVxuICAgIC5nZXQoYC9hcGkvdjIvJHtjb2luLmdldENoYWluKCl9L3dhbGxldC8ke3dhbGxldElkfS9hZGRyZXNzLyR7YWRkcmVzcy5hZGRyZXNzfWApXG4gICAgLnJlcGx5KDIwMCwge1xuICAgICAgYWRkcmVzczogYWRkcmVzcy5hZGRyZXNzLFxuICAgICAgY2hhaW46IGFkZHJlc3MuY2hhaW4sXG4gICAgICBpbmRleDogYWRkcmVzcy5pbmRleCxcbiAgICAgIGNvaW46IGNvaW4uZ2V0Q2hhaW4oKSxcbiAgICAgIHdhbGxldDogd2FsbGV0SWQsXG4gICAgfSlcbiAgICAucGVyc2lzdCgpO1xufVxuXG4vKipcbiAqIFNldHVwIHRlc3QgZm9yIGNyb3NzLWNoYWluIHJlY292ZXJ5LlxuICpcbiAqIFVzZXJzIGNhbiByZWNlaXZlIGRlcG9zaXRzIG9uIHdhbGxldCBhZGRyZXNzZXMgdGhhdCBhcmUgb24gYSBkaWZmZXJlbnQgY2hhaW4uXG4gKlxuICogRm9yIGluc3RhbmNlLCBhIHVzZXIgY2FuIHJlY2VpdmUgbGl0ZWNvaW4gb24gYSBiaXRjb2luIHdhbGxldC5cbiAqIFRoaXMgbWVhbnMgdGhhdCB0aGUgbGl0ZWNvaW4gYmxvY2tjaGFpbiBoYXMgYSB0cmFuc2FjdGlvbiB3aXRoIG91dHB1dHMgdGhhdCBhcmUgc3BlbmRhYmxlXG4gKiB3aXRoIGtleXMgdGhhdCB3ZXJlIG9yaWdpbmFsbHkgY3JlYXRlZCBmb3IgYSBCaXRHbyBCVEMgd2FsbGV0LlxuICogSW4gdGhpcyBleGFtcGxlLCBMVEMgaXMgdGhlIFwic291cmNlIGNvaW5cIiBhbmQgQlRDIGlzIHRoZSBcInJlY292ZXJ5IGNvaW5cIlxuICogSW4gY2FzZXMgbGlrZSB0aGVzZSB3ZSBtdXN0IHVzZSBjb25zdHJ1Y3QgYSB0cmFuc2FjdGlvbiBmb3IgbGl0ZWNvaW4gbmV0d29yayB1c2luZyBrZXlzIG9mIHRoZVxuICogYml0Y29pbiB3YWxsZXQuXG4gKlxuICogQHBhcmFtIHNvdXJjZUNvaW4gLSB0aGUgY29pbiB0byBjb25zdHJ1Y3QgdGhlIHRyYW5zYWN0aW9uIGZvclxuICogQHBhcmFtIHJlY292ZXJ5Q29pbiAtIHRoZSBjb2luIHRoZSByZWNlaXZpbmcgd2FsbGV0IHdhcyBzZXQgdXAgZm9yXG4gKi9cbi8vIEdldCB3YXNtIHdhbGxldCBrZXlzIGZvciBzaWduYXR1cmUgdmVyaWZpY2F0aW9uXG5jb25zdCB7IHdhbGxldEtleXM6IHdhc21XYWxsZXRLZXlzLCB4cHJpdnMgfSA9IGdldERlZmF1bHRXYXNtV2FsbGV0S2V5cygpO1xuXG5mdW5jdGlvbiBydW48VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oc291cmNlQ29pbjogQWJzdHJhY3RVdHhvQ29pbiwgcmVjb3ZlcnlDb2luOiBBYnN0cmFjdFV0eG9Db2luKSB7XG4gIGRlc2NyaWJlKGBDcm9zcy1DaGFpbiBSZWNvdmVyeSBbc291cmNlQ29pbj0ke3NvdXJjZUNvaW4uZ2V0Q2hhaW4oKX0gcmVjb3ZlcnlDb2luPSR7cmVjb3ZlcnlDb2luLmdldENoYWluKCl9XWAsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByZWNvdmVyeVdhbGxldElkID0gJzVhYmFjZWJlMjhkNzJmYmQwN2UwYjhjYmJhMGZmMzllJztcbiAgICAvLyB0aGUgYWRkcmVzcyB0aGUgYWNjaWRlbnRhbCBkZXBvc2l0IHdlbnQgdG8sIGluIGJvdGggc291cmNlQ29pbiBhbmQgYWRkcmVzc0NvaW4gZm9ybWF0c1xuICAgIGNvbnN0IFtkZXBvc2l0QWRkcmVzc1NvdXJjZUNvaW4sIGRlcG9zaXRBZGRyZXNzUmVjb3ZlcnlDb2luXSA9IFtzb3VyY2VDb2luLCByZWNvdmVyeUNvaW5dLm1hcCgoY29pbikgPT4gKHtcbiAgICAgIGFkZHJlc3M6IGdlbmVyYXRlQWRkcmVzcyhjb2luLm5hbWUsIHsga2V5Y2hhaW5zOiBrZXljaGFpbnNCYXNlNTgsIGNoYWluOiAwLCBpbmRleDogMCB9KSxcbiAgICAgIGNoYWluOiAwLFxuICAgICAgaW5kZXg6IDAsXG4gICAgfSkpO1xuICAgIGNvbnN0IGNoYWluID0gMDtcbiAgICBjb25zdCBpbmRleCA9IDE7XG4gICAgLy8gdGhlIGFkZHJlc3Mgd2hlcmUgd2Ugd2FudCB0byByZWNvdmVyIG91ciBmdW5kcyB0b1xuICAgIGNvbnN0IHJlY292ZXJ5QWRkcmVzcyA9IGdlbmVyYXRlQWRkcmVzcyhzb3VyY2VDb2luLm5hbWUsIHtcbiAgICAgIGtleWNoYWluczoga2V5Y2hhaW5zQmFzZTU4LFxuICAgICAgY2hhaW4sXG4gICAgICBpbmRleCxcbiAgICB9KTtcbiAgICBjb25zdCBub2Nrczogbm9jay5TY29wZVtdID0gW107XG5cbiAgICAvLyBDcmVhdGUgcmVjb3ZlcnkgdW5zcGVudCB1c2luZyB3YXNtLXV0eG8gKG5vIHV0eG9saWIgZGVwZW5kZW5jeSlcbiAgICBmdW5jdGlvbiBnZXRSZWNvdmVyeVVuc3BlbnRzKCk6IFdhbGxldFVuc3BlbnQ8VE51bWJlcj5bXSB7XG4gICAgICBjb25zdCBkZXBvc2l0VmFsdWUgPSAoc291cmNlQ29pbi5hbW91bnRUeXBlID09PSAnYmlnaW50JyA/IEJpZ0ludCgxZTgpIDogMWU4KSBhcyBUTnVtYmVyO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgY3JlYXRlV2FzbVdhbGxldFVuc3BlbnQ8VE51bWJlcj4oZGVwb3NpdEFkZHJlc3NTb3VyY2VDb2luLmFkZHJlc3MsIGNoYWluLCBpbmRleCwgZGVwb3NpdFZhbHVlLCBzb3VyY2VDb2luLm5hbWUpLFxuICAgICAgXTtcbiAgICB9XG5cbiAgICBiZWZvcmUoJ3NldHVwIG5vY2tzJywgZnVuY3Rpb24gKCkge1xuICAgICAgbm9ja3MucHVzaCguLi5ub2NrV2FsbGV0KHJlY292ZXJ5Q29pbiwgcmVjb3ZlcnlXYWxsZXRJZCwga2V5Y2hhaW5zQmFzZTU4KSk7XG4gICAgICBub2Nrcy5wdXNoKG5vY2tXYWxsZXRBZGRyZXNzKHJlY292ZXJ5Q29pbiwgcmVjb3ZlcnlXYWxsZXRJZCwgZGVwb3NpdEFkZHJlc3NSZWNvdmVyeUNvaW4pKTtcbiAgICB9KTtcblxuICAgIGFmdGVyKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2tzLmZvckVhY2goKG4pID0+IG4uZG9uZSgpKTtcbiAgICB9KTtcblxuICAgIGFmdGVyKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vY2suY2xlYW5BbGwoKTtcbiAgICB9KTtcblxuICAgIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBzaW5vbi5yZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBtYXRjaEZpeHR1cmUoXG4gICAgICBuYW1lOiBzdHJpbmcsXG4gICAgICByZWNvdmVyeTogQ3Jvc3NDaGFpblJlY292ZXJ5U2lnbmVkPFROdW1iZXI+IHwgQ3Jvc3NDaGFpblJlY292ZXJ5VW5zaWduZWQ8VE51bWJlcj5cbiAgICApIHtcbiAgICAgIGxldCByZWNvdmVyeU9iajogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7IC4uLnJlY292ZXJ5IH07XG4gICAgICBpZiAoc291cmNlQ29pbi5hbW91bnRUeXBlID09PSAnYmlnaW50Jykge1xuICAgICAgICByZWNvdmVyeU9iaiA9IEpTT04ucGFyc2UoXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkocmVjb3ZlcnlPYmosIChrLCB2KSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHYgPT09ICdiaWdpbnQnKSB7XG4gICAgICAgICAgICAgIHJldHVybiB2LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgYXNzZXJ0RXF1YWxKU09OKFxuICAgICAgICByZWNvdmVyeU9iaixcbiAgICAgICAgYXdhaXQgZ2V0Rml4dHVyZShzb3VyY2VDb2luLCBgcmVjb3ZlcnkvY3Jvc3NDaGFpblJlY292ZXJ5LSR7cmVjb3ZlcnlDb2luLmdldENoYWluKCl9LSR7bmFtZX1gLCByZWNvdmVyeU9iailcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hlY2tSZWNvdmVyeVBzYnRTaWduYXR1cmUocHNidEhleDogc3RyaW5nKSB7XG4gICAgICAvLyBQYXJzZSB1c2luZyB3YXNtLXV0eG8gZm9yIHNpZ25hdHVyZSB2ZXJpZmljYXRpb25cbiAgICAgIGNvbnN0IHdhc21Qc2J0ID0gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmZyb21CeXRlcyhCdWZmZXIuZnJvbShwc2J0SGV4LCAnaGV4JyksIHNvdXJjZUNvaW4ubmFtZSk7XG4gICAgICBjb25zdCBwYXJzZWQgPSB3YXNtUHNidC5wYXJzZVRyYW5zYWN0aW9uV2l0aFdhbGxldEtleXMod2FzbVdhbGxldEtleXMsIHsgcmVwbGF5UHJvdGVjdGlvbjogeyBwdWJsaWNLZXlzOiBbXSB9IH0pO1xuICAgICAgY29uc3QgdW5zcGVudHMgPSBnZXRSZWNvdmVyeVVuc3BlbnRzKCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocGFyc2VkLmlucHV0cy5sZW5ndGgsIHVuc3BlbnRzLmxlbmd0aCk7XG4gICAgICAvLyBWZXJpZnkgdXNlciBrZXkgaGFzIHNpZ25lZCBlYWNoIGlucHV0IChzYW1lIHBhdHRlcm4gYXMgYmFja3VwS2V5UmVjb3ZlcnkgdGVzdClcbiAgICAgIHBhcnNlZC5pbnB1dHMuZm9yRWFjaCgoXywgaSkgPT4ge1xuICAgICAgICBjb25zdCB1c2VyU2lnbmVkID0gd2FzbVBzYnQudmVyaWZ5U2lnbmF0dXJlKGksIHhwcml2c1swXSk7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh1c2VyU2lnbmVkLCB0cnVlLCBgSW5wdXQgJHtpfSBzaG91bGQgYmUgc2lnbmVkIGJ5IHVzZXIga2V5YCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpdCgnc2hvdWxkIHRlc3Qgc2lnbmVkIGNyb3NzIGNoYWluIHJlY292ZXJ5JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgZGVwb3NpdFVuc3BlbnQgPSBnZXRSZWNvdmVyeVVuc3BlbnRzKClbMF07XG4gICAgICAvLyBQYXJzZSB0eGlkIGZyb20gdGhlIHVuc3BlbnQgaWQgKGZvcm1hdDogdHhpZDp2b3V0KVxuICAgICAgY29uc3QgZGVwb3NpdFR4aWQgPSBkZXBvc2l0VW5zcGVudC5pZC5zcGxpdCgnOicpWzBdO1xuICAgICAgLy8gVXNlIHRoZSBkZXBvc2l0IGFkZHJlc3MgYXMgdGhlIGlucHV0IGFkZHJlc3MgKHNpbXVsYXRpbmcgYSBwMnNoIGlucHV0KVxuICAgICAgY29uc3QgaW5wdXRBZGRyZXNzID0gZ2VuZXJhdGVBZGRyZXNzKHNvdXJjZUNvaW4ubmFtZSwgeyBrZXljaGFpbnM6IGtleWNoYWluc0Jhc2U1OCwgY2hhaW46IDAsIGluZGV4OiAyIH0pO1xuICAgICAgY29uc3QgZ2V0UmVjb3ZlcnlQcm92aWRlclN0dWIgPSBzaW5vblxuICAgICAgICAuc3R1YihBYnN0cmFjdFV0eG9Db2luLnByb3RvdHlwZSwgJ2dldFJlY292ZXJ5UHJvdmlkZXInKVxuICAgICAgICAucmV0dXJucyhuZXcgV2FzbUNyb3NzQ2hhaW5SZWNvdmVyeVByb3ZpZGVyPFROdW1iZXI+KHNvdXJjZUNvaW4sIGRlcG9zaXRVbnNwZW50LCBbaW5wdXRBZGRyZXNzXSkpO1xuICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICByZWNvdmVyeUNvaW4sXG4gICAgICAgIHR4aWQ6IGRlcG9zaXRUeGlkLFxuICAgICAgICByZWNvdmVyeUFkZHJlc3MsXG4gICAgICAgIHdhbGxldDogcmVjb3ZlcnlXYWxsZXRJZCxcbiAgICAgIH07XG4gICAgICBjb25zdCBzaWduZWRSZWNvdmVyeSA9IChhd2FpdCBzb3VyY2VDb2luLnJlY292ZXJGcm9tV3JvbmdDaGFpbjxUTnVtYmVyPih7XG4gICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgeHBydjoga2V5Y2hhaW5zQmFzZTU4WzBdLnBydixcbiAgICAgIH0pKSBhcyBDcm9zc0NoYWluUmVjb3ZlcnlTaWduZWQ8VE51bWJlcj47XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZ2V0UmVjb3ZlcnlQcm92aWRlclN0dWIuY2FsbENvdW50LCAxKTtcblxuICAgICAgLy8gVmVyaWZ5IGZpeHR1cmUgbWF0Y2hcbiAgICAgIGF3YWl0IG1hdGNoRml4dHVyZSgnc2lnbmVkJywgc2lnbmVkUmVjb3ZlcnkpO1xuXG4gICAgICAvLyBWZXJpZnkgUFNCVCBoYXMgdmFsaWQgc2lnbmF0dXJlcyAodXNlciBrZXkgc2lnbmVkKVxuICAgICAgY2hlY2tSZWNvdmVyeVBzYnRTaWduYXR1cmUoc2lnbmVkUmVjb3ZlcnkudHhIZXggYXMgc3RyaW5nKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGVzdCB1bnNpZ25lZCBjcm9zcyBjaGFpbiByZWNvdmVyeScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGRlcG9zaXRVbnNwZW50ID0gZ2V0UmVjb3ZlcnlVbnNwZW50cygpWzBdO1xuICAgICAgLy8gUGFyc2UgdHhpZCBmcm9tIHRoZSB1bnNwZW50IGlkIChmb3JtYXQ6IHR4aWQ6dm91dClcbiAgICAgIGNvbnN0IGRlcG9zaXRUeGlkID0gZGVwb3NpdFVuc3BlbnQuaWQuc3BsaXQoJzonKVswXTtcbiAgICAgIC8vIFVzZSB0aGUgZGVwb3NpdCBhZGRyZXNzIGFzIHRoZSBpbnB1dCBhZGRyZXNzIChzaW11bGF0aW5nIGEgcDJzaCBpbnB1dClcbiAgICAgIGNvbnN0IGlucHV0QWRkcmVzcyA9IGdlbmVyYXRlQWRkcmVzcyhzb3VyY2VDb2luLm5hbWUsIHsga2V5Y2hhaW5zOiBrZXljaGFpbnNCYXNlNTgsIGNoYWluOiAwLCBpbmRleDogMiB9KTtcbiAgICAgIGNvbnN0IGdldFJlY292ZXJ5UHJvdmlkZXJTdHViID0gc2lub25cbiAgICAgICAgLnN0dWIoQWJzdHJhY3RVdHhvQ29pbi5wcm90b3R5cGUsICdnZXRSZWNvdmVyeVByb3ZpZGVyJylcbiAgICAgICAgLnJldHVybnMobmV3IFdhc21Dcm9zc0NoYWluUmVjb3ZlcnlQcm92aWRlcjxUTnVtYmVyPihzb3VyY2VDb2luLCBkZXBvc2l0VW5zcGVudCwgW2lucHV0QWRkcmVzc10pKTtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgcmVjb3ZlcnlDb2luLFxuICAgICAgICB0eGlkOiBkZXBvc2l0VHhpZCxcbiAgICAgICAgcmVjb3ZlcnlBZGRyZXNzLFxuICAgICAgICB3YWxsZXQ6IHJlY292ZXJ5V2FsbGV0SWQsXG4gICAgICB9O1xuICAgICAgY29uc3QgdW5zaWduZWRSZWNvdmVyeSA9IChhd2FpdCBzb3VyY2VDb2luLnJlY292ZXJGcm9tV3JvbmdDaGFpbjxUTnVtYmVyPih7XG4gICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgc2lnbmVkOiBmYWxzZSxcbiAgICAgIH0pKSBhcyBDcm9zc0NoYWluUmVjb3ZlcnlVbnNpZ25lZDxUTnVtYmVyPjtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChnZXRSZWNvdmVyeVByb3ZpZGVyU3R1Yi5jYWxsQ291bnQsIDEpO1xuXG4gICAgICAvLyBWZXJpZnkgZml4dHVyZSBtYXRjaFxuICAgICAgYXdhaXQgbWF0Y2hGaXh0dXJlKCd1bnNpZ25lZCcsIHVuc2lnbmVkUmVjb3ZlcnkpO1xuXG4gICAgICAvLyBWZXJpZnkgdGhlIHVuc2lnbmVkIFBTQlQgY2FuIGJlIHNpZ25lZFxuICAgICAgY29uc3Qgc2lnbmVkVHggPSBhd2FpdCBzb3VyY2VDb2luLnNpZ25UcmFuc2FjdGlvbjxUTnVtYmVyPih7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHVuc2lnbmVkUmVjb3ZlcnksXG4gICAgICAgIHBydjoga2V5Y2hhaW5zQmFzZTU4WzBdLnBydixcbiAgICAgICAgcHViczoga2V5Y2hhaW5zQmFzZTU4Lm1hcCgoaykgPT4gay5wdWIpIGFzIFRyaXBsZTxzdHJpbmc+LFxuICAgICAgfSk7XG4gICAgICBjaGVja1JlY292ZXJ5UHNidFNpZ25hdHVyZSgoc2lnbmVkVHggYXMgeyB0eEhleDogc3RyaW5nIH0pLnR4SGV4KTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzU3VwcG9ydGVkQ3Jvc3NDaGFpblJlY292ZXJ5KHNvdXJjZUNvaW46IEFic3RyYWN0VXR4b0NvaW4sIHJlY292ZXJ5Q29pbjogQWJzdHJhY3RVdHhvQ29pbik6IGJvb2xlYW4ge1xuICByZXR1cm4gc3VwcG9ydGVkQ3Jvc3NDaGFpblJlY292ZXJpZXNbc291cmNlQ29pbi5nZXRGYW1pbHkoKV0/LmluY2x1ZGVzKHJlY292ZXJ5Q29pbi5nZXRGYW1pbHkoKSk7XG59XG5cbnV0eG9Db2lucy5mb3JFYWNoKChjb2luKSA9PiB7XG4gIHV0eG9Db2luc1xuICAgIC5maWx0ZXIoXG4gICAgICAob3RoZXJDb2luKSA9PlxuICAgICAgICBjb2luICE9PSBvdGhlckNvaW4gJiZcbiAgICAgICAgaXNTdXBwb3J0ZWRDcm9zc0NoYWluUmVjb3ZlcnkoY29pbiwgb3RoZXJDb2luKSAmJlxuICAgICAgICAoKGlzTWFpbm5ldENvaW4oY29pbi5uYW1lKSAmJiBpc01haW5uZXRDb2luKG90aGVyQ29pbi5uYW1lKSkgfHxcbiAgICAgICAgICAoaXNUZXN0bmV0Q29pbihjb2luLm5hbWUpICYmIGlzVGVzdG5ldENvaW4ob3RoZXJDb2luLm5hbWUpKSlcbiAgICApXG4gICAgLmZvckVhY2goKG90aGVyQ29pbikgPT4ge1xuICAgICAgaWYgKGNvaW4uYW1vdW50VHlwZSA9PT0gJ2JpZ2ludCcpIHtcbiAgICAgICAgcnVuPGJpZ2ludD4oY29pbiwgb3RoZXJDb2luKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJ1bihjb2luLCBvdGhlckNvaW4pO1xuICAgICAgfVxuICAgIH0pO1xufSk7XG5cbmRlc2NyaWJlKGBDcm9zcy1DaGFpbiBSZWNvdmVyeSBnZXRXYWxsZXRgLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGJpdGdvID0gZGVmYXVsdEJpdEdvO1xuICBjb25zdCByZWNvdmVyeUNvaW4gPSBnZXRVdHhvQ29pbignYnRjJyk7XG4gIGNvbnN0IHJlY292ZXJ5V2FsbGV0SWQgPSAnNWFiYWNlYmUyOGQ3MmZiZDA3ZTBiOGNiYmEwZmYzOWUnO1xuXG4gIGl0KCdzaG91bGQgc2VhcmNoIHYxIHdhbGxldHMgaWYgdGhlIHYyIGVuZHBvaW50IHJlc3BvbmRzIHdpdGggYSA0eHggZXJyb3InLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZXJyb3JSZXNwb25zZXMgPSBbNDAwLCA0MDRdO1xuXG4gICAgZm9yIChjb25zdCBlcnJvciBvZiBlcnJvclJlc3BvbnNlcykge1xuICAgICAgY29uc3Qgbm9ja1YyV2FsbGV0ID0gbm9ja0JpdEdvKGJpdGdvKVxuICAgICAgICAuZ2V0KGAvYXBpL3YyLyR7cmVjb3ZlcnlDb2luLmdldENoYWluKCl9L3dhbGxldC8ke3JlY292ZXJ5V2FsbGV0SWR9YClcbiAgICAgICAgLnJlcGx5KGVycm9yKTtcbiAgICAgIGNvbnN0IG5vY2tWMVdhbGxldCA9IG5vY2tCaXRHbyhiaXRnbykuZ2V0KGAvYXBpL3YxL3dhbGxldC8ke3JlY292ZXJ5V2FsbGV0SWR9YCkucmVwbHkoZXJyb3IpO1xuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAgICgpID0+IGdldFdhbGxldChiaXRnbywgcmVjb3ZlcnlDb2luLCByZWNvdmVyeVdhbGxldElkKSxcbiAgICAgICAgRXJyb3IoYGNvdWxkIG5vdCBnZXQgd2FsbGV0ICR7cmVjb3ZlcnlXYWxsZXRJZH0gZnJvbSB2MSBvciB2MjogQXBpUmVzcG9uc2VFcnJvcjogJHtlcnJvcn1gKVxuICAgICAgKTtcbiAgICAgIG5vY2tWMldhbGxldC5kb25lKCk7XG4gICAgICBub2NrVjFXYWxsZXQuZG9uZSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciBpZiB0aGUgdjIgZW5kcG9pbnQgcmVzcG9uZHMgd2l0aCBhIDV4eCBlcnJvcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBlcnJvclJlc3BvbnNlcyA9IFs1MDBdO1xuICAgIGZvciAoY29uc3QgZXJyb3Igb2YgZXJyb3JSZXNwb25zZXMpIHtcbiAgICAgIGNvbnN0IG5vY2tWMldhbGxldCA9IG5vY2tCaXRHbyhiaXRnbylcbiAgICAgICAgLmdldChgL2FwaS92Mi8ke3JlY292ZXJ5Q29pbi5nZXRDaGFpbigpfS93YWxsZXQvJHtyZWNvdmVyeVdhbGxldElkfWApXG4gICAgICAgIC5yZXBseShlcnJvcik7XG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cygoKSA9PiBnZXRXYWxsZXQoYml0Z28sIHJlY292ZXJ5Q29pbiwgcmVjb3ZlcnlXYWxsZXRJZCksIHtcbiAgICAgICAgbmFtZTogJ0FwaVJlc3BvbnNlRXJyb3InLFxuICAgICAgICBzdGF0dXM6IDUwMCxcbiAgICAgICAgcmVzdWx0OiB7fSxcbiAgICAgICAgaW52YWxpZFRva2VuOiBmYWxzZSxcbiAgICAgICAgbmVlZHNPVFA6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgICBub2NrVjJXYWxsZXQuZG9uZSgpO1xuICAgIH1cbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ2NvbnZlcnRMdGNBZGRyZXNzVG9MZWdhY3lGb3JtYXQnLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHNjcmlwdFB1YktleSA9IEJ1ZmZlci5mcm9tKCdhOTE0OWYwYmY1MWZhYjRkMzNhYjIxOTc3ZTFiODlmNzc2ZjY0MTYxZWY0Mjg3JywgJ2hleCcpO1xuICBpdCgnc2hvdWxkIGNvbnZlcnQgTS4uLiBQMlNIIGFkZHJlc3MgdG8gMy4uLiBsZWdhY3kgZm9ybWF0JywgZnVuY3Rpb24gKCkge1xuICAgIC8vIFRoZXNlIHR3byBhZGRyZXNzZXMgcmVwcmVzZW50IHRoZSBzYW1lIHVuZGVybHlpbmcgc2NyaXB0IGhhc2g6XG4gICAgLy8gLSBNTlE3emtnTXNhVjY3cnNqQTNKdVA1OVJDNXd4Ulhwd2dFIGlzIHRoZSBMVEMgZm9ybWF0IChzY3JpcHRIYXNoIDB4MzIpXG4gICAgLy8gLSAzR0J5Z3NHUHZUZGZLTWJxNEFLWlpSdTFzUE1XUEVzQmZkIGlzIHRoZSBCVEMgZm9ybWF0IChzY3JpcHRIYXNoIDB4MDUpXG4gICAgLy8gY29uc3QgbHRjQWRkcmVzcyA9ICdNTlE3emtnTXNhVjY3cnNqQTNKdVA1OVJDNXd4Ulhwd2dFJztcbiAgICBjb25zdCBsdGNBZGRyZXNzID0gd2FzbUFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdFdpdGhDb2luKHNjcmlwdFB1YktleSwgJ2x0YycpO1xuICAgIGNvbnN0IHRsdGNBZGRyZXNzID0gd2FzbUFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdFdpdGhDb2luKHNjcmlwdFB1YktleSwgJ3RsdGMnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwobHRjQWRkcmVzcywgJ01OUTd6a2dNc2FWNjdyc2pBM0p1UDU5UkM1d3hSWHB3Z0UnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwodGx0Y0FkZHJlc3MsICdRYjZ3c2Q0ZloyQzZmS3pSTVB5VEc1S2lFODFXNlFDeGhVJyk7XG5cbiAgICBjb25zdCBsZWdhY3lBZGRyZXNzID0gY29udmVydEx0Y0FkZHJlc3NUb0xlZ2FjeUZvcm1hdChsdGNBZGRyZXNzLCAnbHRjJyk7XG4gICAgY29uc3QgZXhwZWN0ZWRMdGNMZWdhY3lBZGRyZXNzID0gJzNHQnlnc0dQdlRkZktNYnE0QUtaWlJ1MXNQTVdQRXNCZmQnO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChsZWdhY3lBZGRyZXNzLCBleHBlY3RlZEx0Y0xlZ2FjeUFkZHJlc3MpO1xuXG4gICAgY29uc3QgZXhwZWN0ZWRUbHRjTGVnYWN5QWRkcmVzcyA9ICcyTjdrQmtjQ1JYdjkxWDlFTmpId1NCTnRINWpaZzh5eWU2cic7XG4gICAgY29uc3QgdGx0Y0xlZ2FjeUFkZHJlc3MgPSBjb252ZXJ0THRjQWRkcmVzc1RvTGVnYWN5Rm9ybWF0KHRsdGNBZGRyZXNzLCAndGx0YycpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0bHRjTGVnYWN5QWRkcmVzcywgZXhwZWN0ZWRUbHRjTGVnYWN5QWRkcmVzcyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgY29udmVydCBNRDY4UHNkaGVLeGNZc3JWTHlaUlhnb1NETG5CMU1kVnRFIHRvIGxlZ2FjeSBmb3JtYXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYWRkcmVzcyA9ICdNRDY4UHNkaGVLeGNZc3JWTHlaUlhnb1NETG5CMU1kVnRFJztcbiAgICBjb25zdCBsZWdhY3lBZGRyZXNzID0gY29udmVydEx0Y0FkZHJlc3NUb0xlZ2FjeUZvcm1hdChhZGRyZXNzLCAnbHRjJyk7XG5cbiAgICAvLyBTaG91bGQgc3RhcnQgd2l0aCAnMycgKGxlZ2FjeSBCVEMgUDJTSCBmb3JtYXQpXG4gICAgYXNzZXJ0Lm9rKGxlZ2FjeUFkZHJlc3Muc3RhcnRzV2l0aCgnMycpLCBgRXhwZWN0ZWQgYWRkcmVzcyB0byBzdGFydCB3aXRoICczJywgZ290OiAke2xlZ2FjeUFkZHJlc3N9YCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgbm90IG1vZGlmeSBiZWNoMzIgYWRkcmVzc2VzJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGJlY2gzMkFkZHJlc3MgPSAnbHRjMXFncmw4enBuZHNrbGFhOXN3Z2Q1dmV2eXhteDV4NjN2Y3JsN2RrNCc7XG4gICAgY29uc3QgcmVzdWx0ID0gY29udmVydEx0Y0FkZHJlc3NUb0xlZ2FjeUZvcm1hdChiZWNoMzJBZGRyZXNzLCAnbHRjJyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdCwgYmVjaDMyQWRkcmVzcyk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=formatBackupKeyRecoveryResult.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatBackupKeyRecoveryResult.d.ts","sourceRoot":"","sources":["../../../../../test/unit/recovery/formatBackupKeyRecoveryResult.ts"],"names":[],"mappings":""}
@@ -0,0 +1,189 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const strict_1 = __importDefault(require("node:assert/strict"));
7
+ const wasm_utxo_1 = require("@bitgo/wasm-utxo");
8
+ const src_1 = require("../../../src");
9
+ const util_1 = require("../util");
10
+ // Use tbtc for all tests - formatting logic doesn't vary by coin
11
+ const coin = util_1.utxoCoins.find((c) => c.getChain() === 'tbtc');
12
+ const scriptType = 'p2shP2wsh';
13
+ // Get default wasm wallet keys (xpubs and xprivs)
14
+ const { walletKeys: defaultWasmWalletKeys, xpubs, xprivs } = (0, util_1.getDefaultWasmWalletKeys)();
15
+ /**
16
+ * Build signing keys triple with specified neuter options.
17
+ */
18
+ function buildSigningKeys(options) {
19
+ return [
20
+ options.neuterUser ? xpubs[0] : xprivs[0],
21
+ options.neuterBackup ? xpubs[1] : xprivs[1],
22
+ xpubs[2], // bitgo is always xpub
23
+ ];
24
+ }
25
+ function createTestUnspents() {
26
+ return [
27
+ (0, util_1.toUnspent)({ scriptType, value: BigInt(1e8) }, 0, coin.name, defaultWasmWalletKeys),
28
+ (0, util_1.toUnspent)({ scriptType, value: BigInt(2e8) }, 0, coin.name, defaultWasmWalletKeys),
29
+ ];
30
+ }
31
+ /**
32
+ * Clone a PSBT - necessary because formatBackupKeyRecoveryResult mutates when finalizing.
33
+ */
34
+ function clonePsbt(psbt) {
35
+ return wasm_utxo_1.fixedScriptWallet.BitGoPsbt.fromBytes(psbt.serialize(), coin.name);
36
+ }
37
+ describe('formatBackupKeyRecoveryResult', function () {
38
+ const { walletKeys: externalWallet } = (0, util_1.createWasmWalletKeys)('external');
39
+ const recoveryDestination = (0, util_1.getWalletAddress)(coin.name, externalWallet);
40
+ const feeRateSatVB = 100;
41
+ describe('unsigned sweep (no signatures)', function () {
42
+ let psbt;
43
+ let signingKeys;
44
+ let unspents;
45
+ before(function () {
46
+ unspents = createTestUnspents();
47
+ signingKeys = buildSigningKeys({ neuterUser: true, neuterBackup: true });
48
+ psbt = (0, src_1.backupKeyRecoveryWithWalletUnspents)(coin.name, { walletKeys: defaultWasmWalletKeys, keys: signingKeys, recoveryDestination, feeRateSatVB }, unspents);
49
+ });
50
+ it('returns FormattedOfflineVaultTxInfo with PSBT hex', function () {
51
+ const result = (0, src_1.formatBackupKeyRecoveryResult)(coin, clonePsbt(psbt), {
52
+ walletKeys: defaultWasmWalletKeys,
53
+ keys: signingKeys,
54
+ recoveryDestination,
55
+ unspents,
56
+ });
57
+ (0, util_1.assertHasProperty)(result, 'txHex');
58
+ (0, util_1.assertHasProperty)(result, 'txInfo');
59
+ (0, util_1.assertHasProperty)(result, 'feeInfo');
60
+ (0, util_1.assertHasProperty)(result, 'coin');
61
+ strict_1.default.strictEqual(result.coin, coin.getChain());
62
+ const txBuf = Buffer.from(result.txHex, 'hex');
63
+ strict_1.default.strictEqual((0, wasm_utxo_1.hasPsbtMagic)(txBuf), true);
64
+ });
65
+ it('matches fixture', async function () {
66
+ const result = (0, src_1.formatBackupKeyRecoveryResult)(coin, clonePsbt(psbt), {
67
+ walletKeys: defaultWasmWalletKeys,
68
+ keys: signingKeys,
69
+ recoveryDestination,
70
+ unspents,
71
+ });
72
+ const fixture = await (0, util_1.getFixture)(coin, 'recovery/formatBackupKeyRecovery-unsigned', result);
73
+ (0, util_1.assertEqualJSON)(result, fixture);
74
+ });
75
+ });
76
+ describe('KRS recovery with keyternal (legacy format)', function () {
77
+ let psbt;
78
+ let signingKeys;
79
+ let unspents;
80
+ before(function () {
81
+ unspents = createTestUnspents();
82
+ signingKeys = buildSigningKeys({ neuterUser: false, neuterBackup: true });
83
+ psbt = (0, src_1.backupKeyRecoveryWithWalletUnspents)(coin.name, { walletKeys: defaultWasmWalletKeys, keys: signingKeys, recoveryDestination, feeRateSatVB }, unspents);
84
+ });
85
+ it('returns BackupKeyRecoveryTransansaction with legacy tx hex', function () {
86
+ const result = (0, src_1.formatBackupKeyRecoveryResult)(coin, clonePsbt(psbt), {
87
+ walletKeys: defaultWasmWalletKeys,
88
+ keys: signingKeys,
89
+ recoveryDestination,
90
+ krsProvider: 'keyternal',
91
+ backupKey: 'test-backup-key',
92
+ unspents,
93
+ });
94
+ (0, util_1.assertHasProperty)(result, 'transactionHex');
95
+ (0, util_1.assertHasProperty)(result, 'coin');
96
+ (0, util_1.assertHasProperty)(result, 'backupKey');
97
+ (0, util_1.assertHasProperty)(result, 'recoveryAmount');
98
+ (0, util_1.assertHasProperty)(result, 'inputs');
99
+ strict_1.default.strictEqual(result.backupKey, 'test-backup-key');
100
+ const txBuf = Buffer.from(result.transactionHex, 'hex');
101
+ strict_1.default.strictEqual((0, wasm_utxo_1.hasPsbtMagic)(txBuf), false);
102
+ });
103
+ it('matches fixture', async function () {
104
+ const result = (0, src_1.formatBackupKeyRecoveryResult)(coin, clonePsbt(psbt), {
105
+ walletKeys: defaultWasmWalletKeys,
106
+ keys: signingKeys,
107
+ recoveryDestination,
108
+ krsProvider: 'keyternal',
109
+ backupKey: 'test-backup-key',
110
+ unspents,
111
+ });
112
+ const fixture = await (0, util_1.getFixture)(coin, 'recovery/formatBackupKeyRecovery-krs-keyternal', result);
113
+ (0, util_1.assertEqualJSON)(result, fixture);
114
+ });
115
+ });
116
+ describe('KRS recovery with dai (PSBT format)', function () {
117
+ let psbt;
118
+ let signingKeys;
119
+ let unspents;
120
+ before(function () {
121
+ unspents = createTestUnspents();
122
+ signingKeys = buildSigningKeys({ neuterUser: false, neuterBackup: true });
123
+ psbt = (0, src_1.backupKeyRecoveryWithWalletUnspents)(coin.name, { walletKeys: defaultWasmWalletKeys, keys: signingKeys, recoveryDestination, feeRateSatVB }, unspents);
124
+ });
125
+ it('returns BackupKeyRecoveryTransansaction with PSBT hex', function () {
126
+ const result = (0, src_1.formatBackupKeyRecoveryResult)(coin, clonePsbt(psbt), {
127
+ walletKeys: defaultWasmWalletKeys,
128
+ keys: signingKeys,
129
+ recoveryDestination,
130
+ krsProvider: 'dai',
131
+ backupKey: 'test-backup-key',
132
+ unspents,
133
+ });
134
+ (0, util_1.assertHasProperty)(result, 'transactionHex');
135
+ (0, util_1.assertHasProperty)(result, 'coin');
136
+ (0, util_1.assertHasProperty)(result, 'backupKey');
137
+ (0, util_1.assertHasProperty)(result, 'recoveryAmount');
138
+ strict_1.default.strictEqual(result.backupKey, 'test-backup-key');
139
+ const txBuf = Buffer.from(result.transactionHex, 'hex');
140
+ strict_1.default.strictEqual((0, wasm_utxo_1.hasPsbtMagic)(txBuf), true);
141
+ strict_1.default.strictEqual(result.inputs, undefined);
142
+ });
143
+ it('matches fixture', async function () {
144
+ const result = (0, src_1.formatBackupKeyRecoveryResult)(coin, clonePsbt(psbt), {
145
+ walletKeys: defaultWasmWalletKeys,
146
+ keys: signingKeys,
147
+ recoveryDestination,
148
+ krsProvider: 'dai',
149
+ backupKey: 'test-backup-key',
150
+ unspents,
151
+ });
152
+ const fixture = await (0, util_1.getFixture)(coin, 'recovery/formatBackupKeyRecovery-krs-dai', result);
153
+ (0, util_1.assertEqualJSON)(result, fixture);
154
+ });
155
+ });
156
+ describe('full recovery (user + backup signatures)', function () {
157
+ let psbt;
158
+ let signingKeys;
159
+ let unspents;
160
+ before(function () {
161
+ unspents = createTestUnspents();
162
+ signingKeys = buildSigningKeys({ neuterUser: false, neuterBackup: false });
163
+ psbt = (0, src_1.backupKeyRecoveryWithWalletUnspents)(coin.name, { walletKeys: defaultWasmWalletKeys, keys: signingKeys, recoveryDestination, feeRateSatVB }, unspents);
164
+ });
165
+ it('returns BackupKeyRecoveryTransansaction with finalized tx hex', function () {
166
+ const result = (0, src_1.formatBackupKeyRecoveryResult)(coin, clonePsbt(psbt), {
167
+ walletKeys: defaultWasmWalletKeys,
168
+ keys: signingKeys,
169
+ recoveryDestination,
170
+ unspents,
171
+ });
172
+ (0, util_1.assertHasProperty)(result, 'transactionHex');
173
+ (0, util_1.assertHasProperty)(result, 'inputs');
174
+ const txBuf = Buffer.from(result.transactionHex, 'hex');
175
+ strict_1.default.strictEqual((0, wasm_utxo_1.hasPsbtMagic)(txBuf), false);
176
+ });
177
+ it('matches fixture', async function () {
178
+ const result = (0, src_1.formatBackupKeyRecoveryResult)(coin, clonePsbt(psbt), {
179
+ walletKeys: defaultWasmWalletKeys,
180
+ keys: signingKeys,
181
+ recoveryDestination,
182
+ unspents,
183
+ });
184
+ const fixture = await (0, util_1.getFixture)(coin, 'recovery/formatBackupKeyRecovery-fullySigned', result);
185
+ (0, util_1.assertEqualJSON)(result, fixture);
186
+ });
187
+ });
188
+ });
189
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0QmFja3VwS2V5UmVjb3ZlcnlSZXN1bHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvcmVjb3ZlcnkvZm9ybWF0QmFja3VwS2V5UmVjb3ZlcnlSZXN1bHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxnRUFBd0M7QUFHeEMsZ0RBQTBFO0FBRTFFLHNDQUtzQjtBQUV0QixrQ0FTaUI7QUFFakIsaUVBQWlFO0FBQ2pFLE1BQU0sSUFBSSxHQUFHLGdCQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssTUFBTSxDQUFFLENBQUM7QUFDN0QsTUFBTSxVQUFVLEdBQUcsV0FBb0IsQ0FBQztBQUV4QyxrREFBa0Q7QUFDbEQsTUFBTSxFQUFFLFVBQVUsRUFBRSxxQkFBcUIsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBQSwrQkFBd0IsR0FBRSxDQUFDO0FBRXhGOztHQUVHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxPQUF5RDtJQUNqRixPQUFPO1FBQ0wsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUMzQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsdUJBQXVCO0tBQ2xDLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxrQkFBa0I7SUFDekIsT0FBTztRQUNMLElBQUEsZ0JBQVMsRUFBQyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJ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LEVBQUUscUJBQXFCO2dCQUNqQyxJQUFJLEVBQUUsV0FBVztnQkFDakIsbUJBQW1CO2dCQUNuQixRQUFRO2FBQ1QsQ0FBb0MsQ0FBQztZQUV0QyxJQUFBLHdCQUFpQixFQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzVDLElBQUEsd0JBQWlCLEVBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBRXBDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN6RCxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFBLHdCQUFZLEVBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDakQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsaUJBQWlCLEVBQUUsS0FBSztZQUN6QixNQUFNLE1BQU0sR0FBRyxJQUFBLG1DQUE2QixFQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ2xFLFVBQVUsRUFBRSxxQkFBcUI7Z0JBQ2pDLElBQUksRUFBRSxXQUFXO2dCQUNqQixtQkFBbUI7Z0JBQ25CLFFBQVE7YUFDVCxDQUFDLENBQUM7WUFDSCxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUEsaUJBQVUsRUFBQyxJQUFJLEVBQUUsOENBQThDLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDL0YsSUFBQSxzQkFBZSxFQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ25vZGU6YXNzZXJ0L3N0cmljdCc7XG5cbmltcG9ydCB7IFRyaXBsZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJJUDMyLCBmaXhlZFNjcmlwdFdhbGxldCwgaGFzUHNidE1hZ2ljIH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5cbmltcG9ydCB7XG4gIGJhY2t1cEtleVJlY292ZXJ5V2l0aFdhbGxldFVuc3BlbnRzLFxuICBCYWNrdXBLZXlSZWNvdmVyeVRyYW5zYW5zYWN0aW9uLFxuICBmb3JtYXRCYWNrdXBLZXlSZWNvdmVyeVJlc3VsdCxcbiAgRm9ybWF0dGVkT2ZmbGluZVZhdWx0VHhJbmZvLFxufSBmcm9tICcuLi8uLi8uLi9zcmMnO1xuaW1wb3J0IHR5cGUgeyBXYWxsZXRVbnNwZW50IH0gZnJvbSAnLi4vLi4vLi4vc3JjL3Vuc3BlbnQnO1xuaW1wb3J0IHtcbiAgYXNzZXJ0RXF1YWxKU09OLFxuICBhc3NlcnRIYXNQcm9wZXJ0eSxcbiAgY3JlYXRlV2FzbVdhbGxldEtleXMsXG4gIGdldERlZmF1bHRXYXNtV2FsbGV0S2V5cyxcbiAgZ2V0Rml4dHVyZSxcbiAgZ2V0V2FsbGV0QWRkcmVzcyxcbiAgdG9VbnNwZW50LFxuICB1dHhvQ29pbnMsXG59IGZyb20gJy4uL3V0aWwnO1xuXG4vLyBVc2UgdGJ0YyBmb3IgYWxsIHRlc3RzIC0gZm9ybWF0dGluZyBsb2dpYyBkb2Vzbid0IHZhcnkgYnkgY29pblxuY29uc3QgY29pbiA9IHV0eG9Db2lucy5maW5kKChjKSA9PiBjLmdldENoYWluKCkgPT09ICd0YnRjJykhO1xuY29uc3Qgc2NyaXB0VHlwZSA9ICdwMnNoUDJ3c2gnIGFzIGNvbnN0O1xuXG4vLyBHZXQgZGVmYXVsdCB3YXNtIHdhbGxldCBrZXlzICh4cHVicyBhbmQgeHByaXZzKVxuY29uc3QgeyB3YWxsZXRLZXlzOiBkZWZhdWx0V2FzbVdhbGxldEtleXMsIHhwdWJzLCB4cHJpdnMgfSA9IGdldERlZmF1bHRXYXNtV2FsbGV0S2V5cygpO1xuXG4vKipcbiAqIEJ1aWxkIHNpZ25pbmcga2V5cyB0cmlwbGUgd2l0aCBzcGVjaWZpZWQgbmV1dGVyIG9wdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkU2lnbmluZ0tleXMob3B0aW9uczogeyBuZXV0ZXJVc2VyPzogYm9vbGVhbjsgbmV1dGVyQmFja3VwPzogYm9vbGVhbiB9KTogVHJpcGxlPEJJUDMyPiB7XG4gIHJldHVybiBbXG4gICAgb3B0aW9ucy5uZXV0ZXJVc2VyID8geHB1YnNbMF0gOiB4cHJpdnNbMF0sXG4gICAgb3B0aW9ucy5uZXV0ZXJCYWNrdXAgPyB4cHVic1sxXSA6IHhwcml2c1sxXSxcbiAgICB4cHVic1syXSwgLy8gYml0Z28gaXMgYWx3YXlzIHhwdWJcbiAgXTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlVGVzdFVuc3BlbnRzKCk6IFdhbGxldFVuc3BlbnQ8YmlnaW50PltdIHtcbiAgcmV0dXJuIFtcbiAgICB0b1Vuc3BlbnQoeyBzY3JpcHRUeXBlLCB2YWx1ZTogQmlnSW50KDFlOCkgfSwgMCwgY29pbi5uYW1lLCBkZWZhdWx0V2FzbVdhbGxldEtleXMpLFxuICAgIHRvVW5zcGVudCh7IHNjcmlwdFR5cGUsIHZhbHVlOiBCaWdJbnQoMmU4KSB9LCAwLCBjb2luLm5hbWUsIGRlZmF1bHRXYXNtV2FsbGV0S2V5cyksXG4gIF07XG59XG5cbi8qKlxuICogQ2xvbmUgYSBQU0JUIC0gbmVjZXNzYXJ5IGJlY2F1c2UgZm9ybWF0QmFja3VwS2V5UmVjb3ZlcnlSZXN1bHQgbXV0YXRlcyB3aGVuIGZpbmFsaXppbmcuXG4gKi9cbmZ1bmN0aW9uIGNsb25lUHNidChwc2J0OiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQpOiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQge1xuICByZXR1cm4gZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LmZyb21CeXRlcyhwc2J0LnNlcmlhbGl6ZSgpLCBjb2luLm5hbWUpO1xufVxuXG5kZXNjcmliZSgnZm9ybWF0QmFja3VwS2V5UmVjb3ZlcnlSZXN1bHQnLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHsgd2FsbGV0S2V5czogZXh0ZXJuYWxXYWxsZXQgfSA9IGNyZWF0ZVdhc21XYWxsZXRLZXlzKCdleHRlcm5hbCcpO1xuICBjb25zdCByZWNvdmVyeURlc3RpbmF0aW9uID0gZ2V0V2FsbGV0QWRkcmVzcyhjb2luLm5hbWUsIGV4dGVybmFsV2FsbGV0KTtcbiAgY29uc3QgZmVlUmF0ZVNhdFZCID0gMTAwO1xuXG4gIGRlc2NyaWJlKCd1bnNpZ25lZCBzd2VlcCAobm8gc2lnbmF0dXJlcyknLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IHBzYnQ6IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidDtcbiAgICBsZXQgc2lnbmluZ0tleXM6IFRyaXBsZTxCSVAzMj47XG4gICAgbGV0IHVuc3BlbnRzOiBXYWxsZXRVbnNwZW50PGJpZ2ludD5bXTtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgICB1bnNwZW50cyA9IGNyZWF0ZVRlc3RVbnNwZW50cygpO1xuICAgICAgc2lnbmluZ0tleXMgPSBidWlsZFNpZ25pbmdLZXlzKHsgbmV1dGVyVXNlcjogdHJ1ZSwgbmV1dGVyQmFja3VwOiB0cnVlIH0pO1xuICAgICAgcHNidCA9IGJhY2t1cEtleVJlY292ZXJ5V2l0aFdhbGxldFVuc3BlbnRzKFxuICAgICAgICBjb2luLm5hbWUsXG4gICAgICAgIHsgd2FsbGV0S2V5czogZGVmYXVsdFdhc21XYWxsZXRLZXlzLCBrZXlzOiBzaWduaW5nS2V5cywgcmVjb3ZlcnlEZXN0aW5hdGlvbiwgZmVlUmF0ZVNhdFZCIH0sXG4gICAgICAgIHVuc3BlbnRzXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgRm9ybWF0dGVkT2ZmbGluZVZhdWx0VHhJbmZvIHdpdGggUFNCVCBoZXgnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBmb3JtYXRCYWNrdXBLZXlSZWNvdmVyeVJlc3VsdChjb2luLCBjbG9uZVBzYnQocHNidCksIHtcbiAgICAgICAgd2FsbGV0S2V5czogZGVmYXVsdFdhc21XYWxsZXRLZXlzLFxuICAgICAgICBrZXlzOiBzaWduaW5nS2V5cyxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbixcbiAgICAgICAgdW5zcGVudHMsXG4gICAgICB9KSBhcyBGb3JtYXR0ZWRPZmZsaW5lVmF1bHRUeEluZm87XG5cbiAgICAgIGFzc2VydEhhc1Byb3BlcnR5KHJlc3VsdCwgJ3R4SGV4Jyk7XG4gICAgICBhc3NlcnRIYXNQcm9wZXJ0eShyZXN1bHQsICd0eEluZm8nKTtcbiAgICAgIGFzc2VydEhhc1Byb3BlcnR5KHJlc3VsdCwgJ2ZlZUluZm8nKTtcbiAgICAgIGFzc2VydEhhc1Byb3BlcnR5KHJlc3VsdCwgJ2NvaW4nKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuY29pbiEsIGNvaW4uZ2V0Q2hhaW4oKSk7XG5cbiAgICAgIGNvbnN0IHR4QnVmID0gQnVmZmVyLmZyb20ocmVzdWx0LnR4SGV4LCAnaGV4Jyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaGFzUHNidE1hZ2ljKHR4QnVmKSwgdHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnbWF0Y2hlcyBmaXh0dXJlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZm9ybWF0QmFja3VwS2V5UmVjb3ZlcnlSZXN1bHQoY29pbiwgY2xvbmVQc2J0KHBzYnQpLCB7XG4gICAgICAgIHdhbGxldEtleXM6IGRlZmF1bHRXYXNtV2FsbGV0S2V5cyxcbiAgICAgICAga2V5czogc2lnbmluZ0tleXMsXG4gICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb24sXG4gICAgICAgIHVuc3BlbnRzLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBmaXh0dXJlID0gYXdhaXQgZ2V0Rml4dHVyZShjb2luLCAncmVjb3ZlcnkvZm9ybWF0QmFja3VwS2V5UmVjb3ZlcnktdW5zaWduZWQnLCByZXN1bHQpO1xuICAgICAgYXNzZXJ0RXF1YWxKU09OKHJlc3VsdCwgZml4dHVyZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdLUlMgcmVjb3Zlcnkgd2l0aCBrZXl0ZXJuYWwgKGxlZ2FjeSBmb3JtYXQpJywgZnVuY3Rpb24gKCkge1xuICAgIGxldCBwc2J0OiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQ7XG4gICAgbGV0IHNpZ25pbmdLZXlzOiBUcmlwbGU8QklQMzI+O1xuICAgIGxldCB1bnNwZW50czogV2FsbGV0VW5zcGVudDxiaWdpbnQ+W107XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgICAgdW5zcGVudHMgPSBjcmVhdGVUZXN0VW5zcGVudHMoKTtcbiAgICAgIHNpZ25pbmdLZXlzID0gYnVpbGRTaWduaW5nS2V5cyh7IG5ldXRlclVzZXI6IGZhbHNlLCBuZXV0ZXJCYWNrdXA6IHRydWUgfSk7XG4gICAgICBwc2J0ID0gYmFja3VwS2V5UmVjb3ZlcnlXaXRoV2FsbGV0VW5zcGVudHMoXG4gICAgICAgIGNvaW4ubmFtZSxcbiAgICAgICAgeyB3YWxsZXRLZXlzOiBkZWZhdWx0V2FzbVdhbGxldEtleXMsIGtleXM6IHNpZ25pbmdLZXlzLCByZWNvdmVyeURlc3RpbmF0aW9uLCBmZWVSYXRlU2F0VkIgfSxcbiAgICAgICAgdW5zcGVudHNcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyBCYWNrdXBLZXlSZWNvdmVyeVRyYW5zYW5zYWN0aW9uIHdpdGggbGVnYWN5IHR4IGhleCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdEJhY2t1cEtleVJlY292ZXJ5UmVzdWx0KGNvaW4sIGNsb25lUHNidChwc2J0KSwge1xuICAgICAgICB3YWxsZXRLZXlzOiBkZWZhdWx0V2FzbVdhbGxldEtleXMsXG4gICAgICAgIGtleXM6IHNpZ25pbmdLZXlzLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgICBrcnNQcm92aWRlcjogJ2tleXRlcm5hbCcsXG4gICAgICAgIGJhY2t1cEtleTogJ3Rlc3QtYmFja3VwLWtleScsXG4gICAgICAgIHVuc3BlbnRzLFxuICAgICAgfSkgYXMgQmFja3VwS2V5UmVjb3ZlcnlUcmFuc2Fuc2FjdGlvbjtcblxuICAgICAgYXNzZXJ0SGFzUHJvcGVydHkocmVzdWx0LCAndHJhbnNhY3Rpb25IZXgnKTtcbiAgICAgIGFzc2VydEhhc1Byb3BlcnR5KHJlc3VsdCwgJ2NvaW4nKTtcbiAgICAgIGFzc2VydEhhc1Byb3BlcnR5KHJlc3VsdCwgJ2JhY2t1cEtleScpO1xuICAgICAgYXNzZXJ0SGFzUHJvcGVydHkocmVzdWx0LCAncmVjb3ZlcnlBbW91bnQnKTtcbiAgICAgIGFzc2VydEhhc1Byb3BlcnR5KHJlc3VsdCwgJ2lucHV0cycpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5iYWNrdXBLZXkhLCAndGVzdC1iYWNrdXAta2V5Jyk7XG5cbiAgICAgIGNvbnN0IHR4QnVmID0gQnVmZmVyLmZyb20ocmVzdWx0LnRyYW5zYWN0aW9uSGV4ISwgJ2hleCcpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGhhc1BzYnRNYWdpYyh0eEJ1ZiksIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdtYXRjaGVzIGZpeHR1cmUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBmb3JtYXRCYWNrdXBLZXlSZWNvdmVyeVJlc3VsdChjb2luLCBjbG9uZVBzYnQocHNidCksIHtcbiAgICAgICAgd2FsbGV0S2V5czogZGVmYXVsdFdhc21XYWxsZXRLZXlzLFxuICAgICAgICBrZXlzOiBzaWduaW5nS2V5cyxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbixcbiAgICAgICAga3JzUHJvdmlkZXI6ICdrZXl0ZXJuYWwnLFxuICAgICAgICBiYWNrdXBLZXk6ICd0ZXN0LWJhY2t1cC1rZXknLFxuICAgICAgICB1bnNwZW50cyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZml4dHVyZSA9IGF3YWl0IGdldEZpeHR1cmUoY29pbiwgJ3JlY292ZXJ5L2Zvcm1hdEJhY2t1cEtleVJlY292ZXJ5LWtycy1rZXl0ZXJuYWwnLCByZXN1bHQpO1xuICAgICAgYXNzZXJ0RXF1YWxKU09OKHJlc3VsdCwgZml4dHVyZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdLUlMgcmVjb3Zlcnkgd2l0aCBkYWkgKFBTQlQgZm9ybWF0KScsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgcHNidDogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0O1xuICAgIGxldCBzaWduaW5nS2V5czogVHJpcGxlPEJJUDMyPjtcbiAgICBsZXQgdW5zcGVudHM6IFdhbGxldFVuc3BlbnQ8YmlnaW50PltdO1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgIHVuc3BlbnRzID0gY3JlYXRlVGVzdFVuc3BlbnRzKCk7XG4gICAgICBzaWduaW5nS2V5cyA9IGJ1aWxkU2lnbmluZ0tleXMoeyBuZXV0ZXJVc2VyOiBmYWxzZSwgbmV1dGVyQmFja3VwOiB0cnVlIH0pO1xuICAgICAgcHNidCA9IGJhY2t1cEtleVJlY292ZXJ5V2l0aFdhbGxldFVuc3BlbnRzKFxuICAgICAgICBjb2luLm5hbWUsXG4gICAgICAgIHsgd2FsbGV0S2V5czogZGVmYXVsdFdhc21XYWxsZXRLZXlzLCBrZXlzOiBzaWduaW5nS2V5cywgcmVjb3ZlcnlEZXN0aW5hdGlvbiwgZmVlUmF0ZVNhdFZCIH0sXG4gICAgICAgIHVuc3BlbnRzXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgQmFja3VwS2V5UmVjb3ZlcnlUcmFuc2Fuc2FjdGlvbiB3aXRoIFBTQlQgaGV4JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZm9ybWF0QmFja3VwS2V5UmVjb3ZlcnlSZXN1bHQoY29pbiwgY2xvbmVQc2J0KHBzYnQpLCB7XG4gICAgICAgIHdhbGxldEtleXM6IGRlZmF1bHRXYXNtV2FsbGV0S2V5cyxcbiAgICAgICAga2V5czogc2lnbmluZ0tleXMsXG4gICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb24sXG4gICAgICAgIGtyc1Byb3ZpZGVyOiAnZGFpJyxcbiAgICAgICAgYmFja3VwS2V5OiAndGVzdC1iYWNrdXAta2V5JyxcbiAgICAgICAgdW5zcGVudHMsXG4gICAgICB9KSBhcyBCYWNrdXBLZXlSZWNvdmVyeVRyYW5zYW5zYWN0aW9uO1xuXG4gICAgICBhc3NlcnRIYXNQcm9wZXJ0eShyZXN1bHQsICd0cmFuc2FjdGlvbkhleCcpO1xuICAgICAgYXNzZXJ0SGFzUHJvcGVydHkocmVzdWx0LCAnY29pbicpO1xuICAgICAgYXNzZXJ0SGFzUHJvcGVydHkocmVzdWx0LCAnYmFja3VwS2V5Jyk7XG4gICAgICBhc3NlcnRIYXNQcm9wZXJ0eShyZXN1bHQsICdyZWNvdmVyeUFtb3VudCcpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5iYWNrdXBLZXkhLCAndGVzdC1iYWNrdXAta2V5Jyk7XG5cbiAgICAgIGNvbnN0IHR4QnVmID0gQnVmZmVyLmZyb20ocmVzdWx0LnRyYW5zYWN0aW9uSGV4ISwgJ2hleCcpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGhhc1BzYnRNYWdpYyh0eEJ1ZiksIHRydWUpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5pbnB1dHMsIHVuZGVmaW5lZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnbWF0Y2hlcyBmaXh0dXJlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZm9ybWF0QmFja3VwS2V5UmVjb3ZlcnlSZXN1bHQoY29pbiwgY2xvbmVQc2J0KHBzYnQpLCB7XG4gICAgICAgIHdhbGxldEtleXM6IGRlZmF1bHRXYXNtV2FsbGV0S2V5cyxcbiAgICAgICAga2V5czogc2lnbmluZ0tleXMsXG4gICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb24sXG4gICAgICAgIGtyc1Byb3ZpZGVyOiAnZGFpJyxcbiAgICAgICAgYmFja3VwS2V5OiAndGVzdC1iYWNrdXAta2V5JyxcbiAgICAgICAgdW5zcGVudHMsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGZpeHR1cmUgPSBhd2FpdCBnZXRGaXh0dXJlKGNvaW4sICdyZWNvdmVyeS9mb3JtYXRCYWNrdXBLZXlSZWNvdmVyeS1rcnMtZGFpJywgcmVzdWx0KTtcbiAgICAgIGFzc2VydEVxdWFsSlNPTihyZXN1bHQsIGZpeHR1cmUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZnVsbCByZWNvdmVyeSAodXNlciArIGJhY2t1cCBzaWduYXR1cmVzKScsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgcHNidDogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0O1xuICAgIGxldCBzaWduaW5nS2V5czogVHJpcGxlPEJJUDMyPjtcbiAgICBsZXQgdW5zcGVudHM6IFdhbGxldFVuc3BlbnQ8YmlnaW50PltdO1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICAgIHVuc3BlbnRzID0gY3JlYXRlVGVzdFVuc3BlbnRzKCk7XG4gICAgICBzaWduaW5nS2V5cyA9IGJ1aWxkU2lnbmluZ0tleXMoeyBuZXV0ZXJVc2VyOiBmYWxzZSwgbmV1dGVyQmFja3VwOiBmYWxzZSB9KTtcbiAgICAgIHBzYnQgPSBiYWNrdXBLZXlSZWNvdmVyeVdpdGhXYWxsZXRVbnNwZW50cyhcbiAgICAgICAgY29pbi5uYW1lLFxuICAgICAgICB7IHdhbGxldEtleXM6IGRlZmF1bHRXYXNtV2FsbGV0S2V5cywga2V5czogc2lnbmluZ0tleXMsIHJlY292ZXJ5RGVzdGluYXRpb24sIGZlZVJhdGVTYXRWQiB9LFxuICAgICAgICB1bnNwZW50c1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIEJhY2t1cEtleVJlY292ZXJ5VHJhbnNhbnNhY3Rpb24gd2l0aCBmaW5hbGl6ZWQgdHggaGV4JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZm9ybWF0QmFja3VwS2V5UmVjb3ZlcnlSZXN1bHQoY29pbiwgY2xvbmVQc2J0KHBzYnQpLCB7XG4gICAgICAgIHdhbGxldEtleXM6IGRlZmF1bHRXYXNtV2FsbGV0S2V5cyxcbiAgICAgICAga2V5czogc2lnbmluZ0tleXMsXG4gICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb24sXG4gICAgICAgIHVuc3BlbnRzLFxuICAgICAgfSkgYXMgQmFja3VwS2V5UmVjb3ZlcnlUcmFuc2Fuc2FjdGlvbjtcblxuICAgICAgYXNzZXJ0SGFzUHJvcGVydHkocmVzdWx0LCAndHJhbnNhY3Rpb25IZXgnKTtcbiAgICAgIGFzc2VydEhhc1Byb3BlcnR5KHJlc3VsdCwgJ2lucHV0cycpO1xuXG4gICAgICBjb25zdCB0eEJ1ZiA9IEJ1ZmZlci5mcm9tKHJlc3VsdC50cmFuc2FjdGlvbkhleCEsICdoZXgnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChoYXNQc2J0TWFnaWModHhCdWYpLCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnbWF0Y2hlcyBmaXh0dXJlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZm9ybWF0QmFja3VwS2V5UmVjb3ZlcnlSZXN1bHQoY29pbiwgY2xvbmVQc2J0KHBzYnQpLCB7XG4gICAgICAgIHdhbGxldEtleXM6IGRlZmF1bHRXYXNtV2FsbGV0S2V5cyxcbiAgICAgICAga2V5czogc2lnbmluZ0tleXMsXG4gICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb24sXG4gICAgICAgIHVuc3BlbnRzLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBmaXh0dXJlID0gYXdhaXQgZ2V0Rml4dHVyZShjb2luLCAncmVjb3ZlcnkvZm9ybWF0QmFja3VwS2V5UmVjb3ZlcnktZnVsbHlTaWduZWQnLCByZXN1bHQpO1xuICAgICAgYXNzZXJ0RXF1YWxKU09OKHJlc3VsdCwgZml4dHVyZSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -0,0 +1,37 @@
1
+ import { AddressInfo, TransactionIO } from '@bitgo-beta/blockapis';
2
+ import { AbstractUtxoCoin, RecoveryProvider } from '../../../src';
3
+ import { type Unspent, type WalletUnspent } from '../../../src/unspent';
4
+ export declare class MockRecoveryProvider implements RecoveryProvider {
5
+ unspents: Unspent<bigint>[];
6
+ private prevTxCache;
7
+ constructor(unspents: Unspent<bigint>[]);
8
+ getAddressInfo(address: string): Promise<AddressInfo>;
9
+ getUnspentsForAddresses(addresses: string[]): Promise<Unspent[]>;
10
+ getTransactionHex(txid: string): Promise<string>;
11
+ getTransactionInputs(txid: string): Promise<Unspent[]>;
12
+ getTransactionIO(txid: string): Promise<TransactionIO>;
13
+ }
14
+ /**
15
+ * Cross-chain recovery mock provider using wasm-utxo only (no utxolib dependency).
16
+ * Uses direct unspent data instead of parsing a utxolib transaction.
17
+ */
18
+ export declare class WasmCrossChainRecoveryProvider<TNumber extends number | bigint> implements RecoveryProvider {
19
+ coin: AbstractUtxoCoin;
20
+ /** The wallet unspent representing the output on the wrong chain */
21
+ depositUnspent: WalletUnspent<TNumber>;
22
+ /** The addresses that were inputs to the original deposit transaction */
23
+ inputAddresses: string[];
24
+ private addressVersion;
25
+ private addressFormat;
26
+ constructor(coin: AbstractUtxoCoin,
27
+ /** The wallet unspent representing the output on the wrong chain */
28
+ depositUnspent: WalletUnspent<TNumber>,
29
+ /** The addresses that were inputs to the original deposit transaction */
30
+ inputAddresses: string[]);
31
+ getUnspentsForAddresses(addresses: string[]): Promise<Unspent[]>;
32
+ getTransactionIO(txid: string): Promise<TransactionIO>;
33
+ getAddressInfo(address: string): Promise<AddressInfo>;
34
+ getTransactionHex(txid: string): Promise<string>;
35
+ getTransactionInputs(txid: string): Promise<Unspent<TNumber>[]>;
36
+ }
37
+ //# sourceMappingURL=mock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../../../../../test/unit/recovery/mock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGnE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGlE,OAAO,EAAiB,KAAK,OAAO,EAA0B,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC/G,qBAAa,oBAAqB,YAAW,gBAAgB;IACpD,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;IACnC,OAAO,CAAC,WAAW,CAA8B;gBACrC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;IASjC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAQrD,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAUhE,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAItD,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAItD,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;CAGvD;AAED;;;GAGG;AACH,qBAAa,8BAA8B,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,CAAE,YAAW,gBAAgB;IAK7F,IAAI,EAAE,gBAAgB;IAC7B,oEAAoE;IAC7D,cAAc,EAAE,aAAa,CAAC,OAAO,CAAC;IAC7C,yEAAyE;IAClE,cAAc,EAAE,MAAM,EAAE;IARjC,OAAO,CAAC,cAAc,CAAwB;IAC9C,OAAO,CAAC,aAAa,CAAgB;gBAG5B,IAAI,EAAE,gBAAgB;IAC7B,oEAAoE;IAC7D,cAAc,EAAE,aAAa,CAAC,OAAO,CAAC;IAC7C,yEAAyE;IAClE,cAAc,EAAE,MAAM,EAAE;IAM3B,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAwBhE,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IA0BtD,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAIrD,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAItD,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;CAGhE"}