@bitgo-beta/abstract-utxo 1.1.1-beta.192 → 1.1.1-beta.1921

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 (829) hide show
  1. package/README.md +76 -0
  2. package/dist/cjs/src/abstractUtxoCoin.d.ts +461 -0
  3. package/dist/cjs/src/abstractUtxoCoin.d.ts.map +1 -0
  4. package/dist/cjs/src/abstractUtxoCoin.js +705 -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 +105 -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 +13 -0
  199. package/dist/cjs/src/transaction/decode.d.ts.map +1 -0
  200. package/dist/cjs/src/transaction/decode.js +88 -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 +90 -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 +81 -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 +90 -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 +41 -0
  232. package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.d.ts.map +1 -0
  233. package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.js +120 -0
  234. package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts +80 -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 +227 -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 +156 -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 +199 -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 +115 -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 +55 -0
  292. package/dist/cjs/src/unspent.d.ts.map +1 -0
  293. package/dist/cjs/src/unspent.js +12 -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 +152 -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 +410 -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 +215 -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 +97 -0
  345. package/dist/cjs/test/unit/fixtures/bip322/fixtures.d.ts +15 -0
  346. package/dist/cjs/test/unit/fixtures/bip322/fixtures.d.ts.map +1 -0
  347. package/dist/cjs/test/unit/fixtures/bip322/fixtures.js +51 -0
  348. package/dist/cjs/test/unit/fixtures/psbtHexProof.d.ts +4 -0
  349. package/dist/cjs/test/unit/fixtures/psbtHexProof.d.ts.map +1 -0
  350. package/dist/cjs/test/unit/fixtures/psbtHexProof.js +9 -0
  351. package/dist/cjs/test/unit/impl/bch/unit/bch.d.ts +2 -0
  352. package/dist/cjs/test/unit/impl/bch/unit/bch.d.ts.map +1 -0
  353. package/dist/cjs/test/unit/impl/bch/unit/bch.js +71 -0
  354. package/dist/cjs/test/unit/impl/bcha/unit/index.d.ts +2 -0
  355. package/dist/cjs/test/unit/impl/bcha/unit/index.d.ts.map +1 -0
  356. package/dist/cjs/test/unit/impl/bcha/unit/index.js +41 -0
  357. package/dist/cjs/test/unit/impl/bsv/unit/index.d.ts +2 -0
  358. package/dist/cjs/test/unit/impl/bsv/unit/index.d.ts.map +1 -0
  359. package/dist/cjs/test/unit/impl/bsv/unit/index.js +34 -0
  360. package/dist/cjs/test/unit/impl/btg/unit/index.d.ts +2 -0
  361. package/dist/cjs/test/unit/impl/btg/unit/index.d.ts.map +1 -0
  362. package/dist/cjs/test/unit/impl/btg/unit/index.js +33 -0
  363. package/dist/cjs/test/unit/impl/dash/unit/index.d.ts +2 -0
  364. package/dist/cjs/test/unit/impl/dash/unit/index.d.ts.map +1 -0
  365. package/dist/cjs/test/unit/impl/dash/unit/index.js +34 -0
  366. package/dist/cjs/test/unit/impl/doge/unit/index.d.ts +2 -0
  367. package/dist/cjs/test/unit/impl/doge/unit/index.d.ts.map +1 -0
  368. package/dist/cjs/test/unit/impl/doge/unit/index.js +34 -0
  369. package/dist/cjs/test/unit/impl/zec/unit/index.d.ts +2 -0
  370. package/dist/cjs/test/unit/impl/zec/unit/index.d.ts.map +1 -0
  371. package/dist/cjs/test/unit/impl/zec/unit/index.js +30 -0
  372. package/dist/cjs/test/unit/keySignatures.d.ts +2 -0
  373. package/dist/cjs/test/unit/keySignatures.d.ts.map +1 -0
  374. package/dist/cjs/test/unit/keySignatures.js +54 -0
  375. package/dist/cjs/test/unit/keychains.d.ts +2 -0
  376. package/dist/cjs/test/unit/keychains.d.ts.map +1 -0
  377. package/dist/cjs/test/unit/keychains.js +87 -0
  378. package/dist/cjs/test/unit/offlineVault/halfSigned.d.ts +2 -0
  379. package/dist/cjs/test/unit/offlineVault/halfSigned.d.ts.map +1 -0
  380. package/dist/cjs/test/unit/offlineVault/halfSigned.js +124 -0
  381. package/dist/cjs/test/unit/parseTransaction.d.ts +2 -0
  382. package/dist/cjs/test/unit/parseTransaction.d.ts.map +1 -0
  383. package/dist/cjs/test/unit/parseTransaction.js +125 -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 +249 -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 +245 -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/validatePolicy.d.ts +2 -0
  424. package/dist/cjs/test/unit/transaction/descriptor/validatePolicy.d.ts.map +1 -0
  425. package/dist/cjs/test/unit/transaction/descriptor/validatePolicy.js +81 -0
  426. package/dist/cjs/test/unit/transaction/fixedScript/explainPsbt.d.ts +2 -0
  427. package/dist/cjs/test/unit/transaction/fixedScript/explainPsbt.d.ts.map +1 -0
  428. package/dist/cjs/test/unit/transaction/fixedScript/explainPsbt.js +193 -0
  429. package/dist/cjs/test/unit/transaction/fixedScript/parsePsbt.d.ts +2 -0
  430. package/dist/cjs/test/unit/transaction/fixedScript/parsePsbt.d.ts.map +1 -0
  431. package/dist/cjs/test/unit/transaction/fixedScript/parsePsbt.js +287 -0
  432. package/dist/cjs/test/unit/transaction/fixedScript/replayProtection.d.ts +2 -0
  433. package/dist/cjs/test/unit/transaction/fixedScript/replayProtection.d.ts.map +1 -0
  434. package/dist/cjs/test/unit/transaction/fixedScript/replayProtection.js +60 -0
  435. package/dist/cjs/test/unit/transaction/fixedScript/signPsbt.d.ts +2 -0
  436. package/dist/cjs/test/unit/transaction/fixedScript/signPsbt.d.ts.map +1 -0
  437. package/dist/cjs/test/unit/transaction/fixedScript/signPsbt.js +154 -0
  438. package/dist/cjs/test/unit/transaction/outputDifference.d.ts +2 -0
  439. package/dist/cjs/test/unit/transaction/outputDifference.d.ts.map +1 -0
  440. package/dist/cjs/test/unit/transaction/outputDifference.js +117 -0
  441. package/dist/cjs/test/unit/transaction.d.ts +2 -0
  442. package/dist/cjs/test/unit/transaction.d.ts.map +1 -0
  443. package/dist/cjs/test/unit/transaction.js +308 -0
  444. package/dist/cjs/test/unit/txFormat.d.ts +30 -0
  445. package/dist/cjs/test/unit/txFormat.d.ts.map +1 -0
  446. package/dist/cjs/test/unit/txFormat.js +161 -0
  447. package/dist/cjs/test/unit/util/address.d.ts +13 -0
  448. package/dist/cjs/test/unit/util/address.d.ts.map +1 -0
  449. package/dist/cjs/test/unit/util/address.js +15 -0
  450. package/dist/cjs/test/unit/util/assert.d.ts +3 -0
  451. package/dist/cjs/test/unit/util/assert.d.ts.map +1 -0
  452. package/dist/cjs/test/unit/util/assert.js +24 -0
  453. package/dist/cjs/test/unit/util/fixtures.d.ts +13 -0
  454. package/dist/cjs/test/unit/util/fixtures.d.ts.map +1 -0
  455. package/dist/cjs/test/unit/util/fixtures.js +105 -0
  456. package/dist/cjs/test/unit/util/index.d.ts +11 -0
  457. package/dist/cjs/test/unit/util/index.d.ts.map +1 -0
  458. package/dist/cjs/test/unit/util/index.js +27 -0
  459. package/dist/cjs/test/unit/util/keychains.d.ts +55 -0
  460. package/dist/cjs/test/unit/util/keychains.d.ts.map +1 -0
  461. package/dist/cjs/test/unit/util/keychains.js +122 -0
  462. package/dist/cjs/test/unit/util/nockBitGo.d.ts +10 -0
  463. package/dist/cjs/test/unit/util/nockBitGo.d.ts.map +1 -0
  464. package/dist/cjs/test/unit/util/nockBitGo.js +27 -0
  465. package/dist/cjs/test/unit/util/nockIndexerAPI.d.ts +8 -0
  466. package/dist/cjs/test/unit/util/nockIndexerAPI.d.ts.map +1 -0
  467. package/dist/cjs/test/unit/util/nockIndexerAPI.js +23 -0
  468. package/dist/cjs/test/unit/util/psbt.d.ts +19 -0
  469. package/dist/cjs/test/unit/util/psbt.d.ts.map +1 -0
  470. package/dist/cjs/test/unit/util/psbt.js +21 -0
  471. package/dist/cjs/test/unit/util/transaction.d.ts +28 -0
  472. package/dist/cjs/test/unit/util/transaction.d.ts.map +1 -0
  473. package/dist/cjs/test/unit/util/transaction.js +131 -0
  474. package/dist/cjs/test/unit/util/unspents.d.ts +71 -0
  475. package/dist/cjs/test/unit/util/unspents.d.ts.map +1 -0
  476. package/dist/cjs/test/unit/util/unspents.js +224 -0
  477. package/dist/cjs/test/unit/util/utxoCoins.d.ts +30 -0
  478. package/dist/cjs/test/unit/util/utxoCoins.d.ts.map +1 -0
  479. package/dist/cjs/test/unit/util/utxoCoins.js +175 -0
  480. package/dist/cjs/test/unit/util/wallet.d.ts +4 -0
  481. package/dist/cjs/test/unit/util/wallet.d.ts.map +1 -0
  482. package/dist/cjs/test/unit/util/wallet.js +9 -0
  483. package/dist/cjs/test/unit/verifyTransaction.d.ts +2 -0
  484. package/dist/cjs/test/unit/verifyTransaction.d.ts.map +1 -0
  485. package/dist/cjs/test/unit/verifyTransaction.js +327 -0
  486. package/dist/cjs/test/unit/wallet.d.ts +2 -0
  487. package/dist/cjs/test/unit/wallet.d.ts.map +1 -0
  488. package/dist/cjs/test/unit/wallet.js +251 -0
  489. package/dist/cjs/tsconfig.tsbuildinfo +1 -0
  490. package/dist/esm/abstractUtxoCoin.d.ts +461 -0
  491. package/dist/esm/abstractUtxoCoin.d.ts.map +1 -0
  492. package/dist/esm/abstractUtxoCoin.js +664 -0
  493. package/dist/esm/address/fixedScript.d.ts +44 -0
  494. package/dist/esm/address/fixedScript.d.ts.map +1 -0
  495. package/dist/esm/address/fixedScript.js +97 -0
  496. package/dist/esm/address/index.d.ts +2 -0
  497. package/dist/esm/address/index.d.ts.map +1 -0
  498. package/dist/esm/address/index.js +2 -0
  499. package/dist/esm/config.d.ts +9 -0
  500. package/dist/esm/config.js +11 -0
  501. package/dist/esm/descriptor/NamedDescriptor.d.ts +19 -0
  502. package/dist/esm/descriptor/NamedDescriptor.d.ts.map +1 -0
  503. package/dist/esm/descriptor/NamedDescriptor.js +37 -0
  504. package/dist/esm/descriptor/assertDescriptorWalletAddress.d.ts +5 -0
  505. package/dist/esm/descriptor/assertDescriptorWalletAddress.d.ts.map +1 -0
  506. package/dist/esm/descriptor/assertDescriptorWalletAddress.js +27 -0
  507. package/dist/esm/descriptor/builder/builder.d.ts +12 -0
  508. package/dist/esm/descriptor/builder/builder.d.ts.map +1 -0
  509. package/dist/esm/descriptor/builder/builder.js +34 -0
  510. package/dist/esm/descriptor/builder/index.d.ts +3 -0
  511. package/dist/esm/descriptor/builder/index.d.ts.map +1 -0
  512. package/dist/esm/descriptor/builder/index.js +3 -0
  513. package/dist/esm/descriptor/builder/parse.d.ts +5 -0
  514. package/dist/esm/descriptor/builder/parse.d.ts.map +1 -0
  515. package/dist/esm/descriptor/builder/parse.js +112 -0
  516. package/dist/esm/descriptor/createWallet/createDescriptorWallet.d.ts +20 -0
  517. package/dist/esm/descriptor/createWallet/createDescriptorWallet.d.ts.map +1 -0
  518. package/dist/esm/descriptor/createWallet/createDescriptorWallet.js +37 -0
  519. package/dist/esm/descriptor/createWallet/createDescriptors.d.ts +12 -0
  520. package/dist/esm/descriptor/createWallet/createDescriptors.d.ts.map +1 -0
  521. package/dist/esm/descriptor/createWallet/createDescriptors.js +29 -0
  522. package/dist/esm/descriptor/createWallet/index.d.ts +3 -0
  523. package/dist/esm/descriptor/createWallet/index.d.ts.map +1 -0
  524. package/dist/esm/descriptor/createWallet/index.js +3 -0
  525. package/dist/esm/descriptor/descriptorWallet.d.ts +19 -0
  526. package/dist/esm/descriptor/descriptorWallet.d.ts.map +1 -0
  527. package/dist/esm/descriptor/descriptorWallet.js +16 -0
  528. package/dist/esm/descriptor/index.d.ts +8 -0
  529. package/dist/esm/descriptor/index.d.ts.map +1 -0
  530. package/dist/esm/descriptor/index.js +7 -0
  531. package/dist/esm/descriptor/validatePolicy.d.ts +22 -0
  532. package/dist/esm/descriptor/validatePolicy.d.ts.map +1 -0
  533. package/dist/esm/descriptor/validatePolicy.js +80 -0
  534. package/dist/esm/impl/bch/bch.d.ts +22 -0
  535. package/dist/esm/impl/bch/bch.d.ts.map +1 -0
  536. package/dist/esm/impl/bch/bch.js +39 -0
  537. package/dist/esm/impl/bch/index.d.ts +3 -0
  538. package/dist/esm/impl/bch/index.d.ts.map +1 -0
  539. package/dist/esm/impl/bch/index.js +3 -0
  540. package/dist/esm/impl/bch/tbch.d.ts +12 -0
  541. package/dist/esm/impl/bch/tbch.d.ts.map +1 -0
  542. package/dist/esm/impl/bch/tbch.js +11 -0
  543. package/dist/esm/impl/bcha/bcha.d.ts +9 -0
  544. package/dist/esm/impl/bcha/bcha.d.ts.map +1 -0
  545. package/dist/esm/impl/bcha/bcha.js +11 -0
  546. package/dist/esm/impl/bcha/index.d.ts +3 -0
  547. package/dist/esm/impl/bcha/index.d.ts.map +1 -0
  548. package/dist/esm/impl/bcha/index.js +3 -0
  549. package/dist/esm/impl/bcha/tbcha.d.ts +12 -0
  550. package/dist/esm/impl/bcha/tbcha.d.ts.map +1 -0
  551. package/dist/esm/impl/bcha/tbcha.js +11 -0
  552. package/dist/esm/impl/bsv/bsv.d.ts +9 -0
  553. package/dist/esm/impl/bsv/bsv.d.ts.map +1 -0
  554. package/dist/esm/impl/bsv/bsv.js +11 -0
  555. package/dist/esm/impl/bsv/index.d.ts +3 -0
  556. package/dist/esm/impl/bsv/index.d.ts.map +1 -0
  557. package/dist/esm/impl/bsv/index.js +3 -0
  558. package/dist/esm/impl/bsv/tbsv.d.ts +12 -0
  559. package/dist/esm/impl/bsv/tbsv.d.ts.map +1 -0
  560. package/dist/esm/impl/bsv/tbsv.js +11 -0
  561. package/dist/esm/impl/btc/btc.d.ts +15 -0
  562. package/dist/esm/impl/btc/btc.d.ts.map +1 -0
  563. package/dist/esm/impl/btc/btc.js +18 -0
  564. package/dist/esm/impl/btc/index.d.ts +7 -0
  565. package/dist/esm/impl/btc/index.d.ts.map +1 -0
  566. package/dist/esm/impl/btc/index.js +7 -0
  567. package/dist/esm/impl/btc/inscriptionBuilder.d.ts +61 -0
  568. package/dist/esm/impl/btc/inscriptionBuilder.d.ts.map +1 -0
  569. package/dist/esm/impl/btc/inscriptionBuilder.js +164 -0
  570. package/dist/esm/impl/btc/tbtc.d.ts +12 -0
  571. package/dist/esm/impl/btc/tbtc.d.ts.map +1 -0
  572. package/dist/esm/impl/btc/tbtc.js +11 -0
  573. package/dist/esm/impl/btc/tbtc4.d.ts +12 -0
  574. package/dist/esm/impl/btc/tbtc4.d.ts.map +1 -0
  575. package/dist/esm/impl/btc/tbtc4.js +11 -0
  576. package/dist/esm/impl/btc/tbtcbgsig.d.ts +12 -0
  577. package/dist/esm/impl/btc/tbtcbgsig.d.ts.map +1 -0
  578. package/dist/esm/impl/btc/tbtcbgsig.js +11 -0
  579. package/dist/esm/impl/btc/tbtcsig.d.ts +12 -0
  580. package/dist/esm/impl/btc/tbtcsig.d.ts.map +1 -0
  581. package/dist/esm/impl/btc/tbtcsig.js +11 -0
  582. package/dist/esm/impl/btg/btg.d.ts +9 -0
  583. package/dist/esm/impl/btg/btg.d.ts.map +1 -0
  584. package/dist/esm/impl/btg/btg.js +11 -0
  585. package/dist/esm/impl/btg/index.d.ts +2 -0
  586. package/dist/esm/impl/btg/index.d.ts.map +1 -0
  587. package/dist/esm/impl/btg/index.js +2 -0
  588. package/dist/esm/impl/dash/dash.d.ts +9 -0
  589. package/dist/esm/impl/dash/dash.d.ts.map +1 -0
  590. package/dist/esm/impl/dash/dash.js +11 -0
  591. package/dist/esm/impl/dash/index.d.ts +3 -0
  592. package/dist/esm/impl/dash/index.d.ts.map +1 -0
  593. package/dist/esm/impl/dash/index.js +3 -0
  594. package/dist/esm/impl/dash/tdash.d.ts +12 -0
  595. package/dist/esm/impl/dash/tdash.d.ts.map +1 -0
  596. package/dist/esm/impl/dash/tdash.js +11 -0
  597. package/dist/esm/impl/doge/doge.d.ts +35 -0
  598. package/dist/esm/impl/doge/doge.d.ts.map +1 -0
  599. package/dist/esm/impl/doge/doge.js +75 -0
  600. package/dist/esm/impl/doge/index.d.ts +3 -0
  601. package/dist/esm/impl/doge/index.d.ts.map +1 -0
  602. package/dist/esm/impl/doge/index.js +3 -0
  603. package/dist/esm/impl/doge/tdoge.d.ts +12 -0
  604. package/dist/esm/impl/doge/tdoge.d.ts.map +1 -0
  605. package/dist/esm/impl/doge/tdoge.js +11 -0
  606. package/dist/esm/impl/index.d.ts +10 -0
  607. package/dist/esm/impl/index.d.ts.map +1 -0
  608. package/dist/esm/impl/index.js +10 -0
  609. package/dist/esm/impl/ltc/index.d.ts +3 -0
  610. package/dist/esm/impl/ltc/index.d.ts.map +1 -0
  611. package/dist/esm/impl/ltc/index.js +3 -0
  612. package/dist/esm/impl/ltc/ltc.d.ts +8 -0
  613. package/dist/esm/impl/ltc/ltc.d.ts.map +1 -0
  614. package/dist/esm/impl/ltc/ltc.js +11 -0
  615. package/dist/esm/impl/ltc/tltc.d.ts +8 -0
  616. package/dist/esm/impl/ltc/tltc.d.ts.map +1 -0
  617. package/dist/esm/impl/ltc/tltc.js +11 -0
  618. package/dist/esm/impl/zec/index.d.ts +3 -0
  619. package/dist/esm/impl/zec/index.d.ts.map +1 -0
  620. package/dist/esm/impl/zec/index.js +3 -0
  621. package/dist/esm/impl/zec/tzec.d.ts +9 -0
  622. package/dist/esm/impl/zec/tzec.d.ts.map +1 -0
  623. package/dist/esm/impl/zec/tzec.js +11 -0
  624. package/dist/esm/impl/zec/zec.d.ts +12 -0
  625. package/dist/esm/impl/zec/zec.d.ts.map +1 -0
  626. package/dist/esm/impl/zec/zec.js +11 -0
  627. package/dist/esm/index.d.ts +23 -0
  628. package/dist/esm/index.d.ts.map +1 -0
  629. package/dist/esm/index.js +23 -0
  630. package/dist/esm/keychains.d.ts +56 -0
  631. package/dist/esm/keychains.d.ts.map +1 -0
  632. package/dist/esm/keychains.js +99 -0
  633. package/dist/esm/names.d.ts +36 -0
  634. package/dist/esm/names.d.ts.map +1 -0
  635. package/dist/esm/names.js +184 -0
  636. package/dist/esm/offlineVault/OfflineVaultHalfSigned.d.ts +9 -0
  637. package/dist/esm/offlineVault/OfflineVaultHalfSigned.d.ts.map +1 -0
  638. package/dist/esm/offlineVault/OfflineVaultHalfSigned.js +20 -0
  639. package/dist/esm/offlineVault/OfflineVaultSignable.d.ts +46 -0
  640. package/dist/esm/offlineVault/OfflineVaultSignable.d.ts.map +1 -0
  641. package/dist/esm/offlineVault/OfflineVaultSignable.js +18 -0
  642. package/dist/esm/offlineVault/TransactionExplanation.d.ts +16 -0
  643. package/dist/esm/offlineVault/TransactionExplanation.d.ts.map +1 -0
  644. package/dist/esm/offlineVault/TransactionExplanation.js +12 -0
  645. package/dist/esm/offlineVault/descriptor/index.d.ts +2 -0
  646. package/dist/esm/offlineVault/descriptor/index.d.ts.map +1 -0
  647. package/dist/esm/offlineVault/descriptor/index.js +2 -0
  648. package/dist/esm/offlineVault/descriptor/transaction.d.ts +39 -0
  649. package/dist/esm/offlineVault/descriptor/transaction.d.ts.map +1 -0
  650. package/dist/esm/offlineVault/descriptor/transaction.js +41 -0
  651. package/dist/esm/offlineVault/index.d.ts +6 -0
  652. package/dist/esm/offlineVault/index.d.ts.map +1 -0
  653. package/dist/esm/offlineVault/index.js +4 -0
  654. package/dist/esm/recovery/RecoveryProvider.d.ts +20 -0
  655. package/dist/esm/recovery/RecoveryProvider.d.ts.map +1 -0
  656. package/dist/esm/recovery/RecoveryProvider.js +19 -0
  657. package/dist/esm/recovery/backupKeyRecovery.d.ts +158 -0
  658. package/dist/esm/recovery/backupKeyRecovery.d.ts.map +1 -0
  659. package/dist/esm/recovery/backupKeyRecovery.js +400 -0
  660. package/dist/esm/recovery/baseApi.d.ts +24 -0
  661. package/dist/esm/recovery/baseApi.d.ts.map +1 -0
  662. package/dist/esm/recovery/baseApi.js +64 -0
  663. package/dist/esm/recovery/coingeckoApi.d.ts +6 -0
  664. package/dist/esm/recovery/coingeckoApi.d.ts.map +1 -0
  665. package/dist/esm/recovery/coingeckoApi.js +40 -0
  666. package/dist/esm/recovery/crossChainRecovery.d.ts +97 -0
  667. package/dist/esm/recovery/crossChainRecovery.d.ts.map +1 -0
  668. package/dist/esm/recovery/crossChainRecovery.js +292 -0
  669. package/dist/esm/recovery/index.d.ts +7 -0
  670. package/dist/{src → esm}/recovery/index.d.ts.map +1 -1
  671. package/dist/esm/recovery/index.js +7 -0
  672. package/dist/esm/recovery/mempoolApi.d.ts +7 -0
  673. package/dist/{src → esm}/recovery/mempoolApi.d.ts.map +1 -1
  674. package/dist/esm/recovery/mempoolApi.js +29 -0
  675. package/dist/esm/recovery/psbt.d.ts +62 -0
  676. package/dist/esm/recovery/psbt.d.ts.map +1 -0
  677. package/dist/esm/recovery/psbt.js +145 -0
  678. package/dist/esm/tnumber.d.ts +4 -0
  679. package/dist/esm/tnumber.d.ts.map +1 -0
  680. package/dist/esm/tnumber.js +9 -0
  681. package/dist/esm/transaction/bip322.d.ts +27 -0
  682. package/dist/esm/transaction/bip322.d.ts.map +1 -0
  683. package/dist/esm/transaction/bip322.js +100 -0
  684. package/dist/esm/transaction/common/verifyPayGoAmount.d.ts +1 -0
  685. package/dist/esm/transaction/common/verifyPayGoAmount.d.ts.map +1 -0
  686. package/dist/esm/transaction/common/verifyPayGoAmount.js +1 -0
  687. package/dist/esm/transaction/decode.d.ts +13 -0
  688. package/dist/esm/transaction/decode.d.ts.map +1 -0
  689. package/dist/esm/transaction/decode.js +49 -0
  690. package/dist/esm/transaction/descriptor/explainPsbt.d.ts +5 -0
  691. package/dist/esm/transaction/descriptor/explainPsbt.d.ts.map +1 -0
  692. package/dist/esm/transaction/descriptor/explainPsbt.js +42 -0
  693. package/dist/esm/transaction/descriptor/index.d.ts +7 -0
  694. package/dist/esm/transaction/descriptor/index.d.ts.map +1 -0
  695. package/dist/esm/transaction/descriptor/index.js +6 -0
  696. package/dist/esm/transaction/descriptor/parse.d.ts +19 -0
  697. package/dist/esm/transaction/descriptor/parse.d.ts.map +1 -0
  698. package/dist/esm/transaction/descriptor/parse.js +86 -0
  699. package/dist/esm/transaction/descriptor/parseToAmountType.d.ts +14 -0
  700. package/dist/esm/transaction/descriptor/parseToAmountType.d.ts.map +1 -0
  701. package/dist/esm/transaction/descriptor/parseToAmountType.js +55 -0
  702. package/dist/esm/transaction/descriptor/recipient.d.ts +5 -0
  703. package/dist/esm/transaction/descriptor/recipient.d.ts.map +1 -0
  704. package/dist/esm/transaction/descriptor/recipient.js +2 -0
  705. package/dist/esm/transaction/descriptor/signPsbt.d.ts +24 -0
  706. package/dist/esm/transaction/descriptor/signPsbt.d.ts.map +1 -0
  707. package/dist/esm/transaction/descriptor/signPsbt.js +39 -0
  708. package/dist/esm/transaction/descriptor/verifyTransaction.d.ts +37 -0
  709. package/dist/esm/transaction/descriptor/verifyTransaction.d.ts.map +1 -0
  710. package/dist/esm/transaction/descriptor/verifyTransaction.js +71 -0
  711. package/dist/esm/transaction/explainTransaction.d.ts +21 -0
  712. package/dist/esm/transaction/explainTransaction.d.ts.map +1 -0
  713. package/dist/esm/transaction/explainTransaction.js +54 -0
  714. package/dist/esm/transaction/fetchInputs.d.ts +27 -0
  715. package/dist/esm/transaction/fetchInputs.d.ts.map +1 -0
  716. package/dist/esm/transaction/fetchInputs.js +74 -0
  717. package/dist/esm/transaction/fixedScript/SigningError.d.ts +24 -0
  718. package/dist/esm/transaction/fixedScript/SigningError.d.ts.map +1 -0
  719. package/dist/esm/transaction/fixedScript/SigningError.js +26 -0
  720. package/dist/esm/transaction/fixedScript/explainPsbtWasm.d.ts +41 -0
  721. package/dist/esm/transaction/fixedScript/explainPsbtWasm.d.ts.map +1 -0
  722. package/dist/esm/transaction/fixedScript/explainPsbtWasm.js +115 -0
  723. package/dist/esm/transaction/fixedScript/explainTransaction.d.ts +80 -0
  724. package/dist/esm/transaction/fixedScript/explainTransaction.d.ts.map +1 -0
  725. package/dist/esm/transaction/fixedScript/explainTransaction.js +309 -0
  726. package/dist/esm/transaction/fixedScript/index.d.ts +10 -0
  727. package/dist/esm/transaction/fixedScript/index.d.ts.map +1 -0
  728. package/dist/esm/transaction/fixedScript/index.js +9 -0
  729. package/dist/esm/transaction/fixedScript/musig2.d.ts +4 -0
  730. package/dist/esm/transaction/fixedScript/musig2.d.ts.map +1 -0
  731. package/dist/esm/transaction/fixedScript/musig2.js +2 -0
  732. package/dist/esm/transaction/fixedScript/parseOutput.d.ts +28 -0
  733. package/dist/esm/transaction/fixedScript/parseOutput.d.ts.map +1 -0
  734. package/dist/esm/transaction/fixedScript/parseOutput.js +209 -0
  735. package/dist/esm/transaction/fixedScript/parseTransaction.d.ts +8 -0
  736. package/dist/esm/transaction/fixedScript/parseTransaction.d.ts.map +1 -0
  737. package/dist/esm/transaction/fixedScript/parseTransaction.js +221 -0
  738. package/dist/esm/transaction/fixedScript/replayProtection.d.ts +10 -0
  739. package/dist/esm/transaction/fixedScript/replayProtection.d.ts.map +1 -0
  740. package/dist/esm/transaction/fixedScript/replayProtection.js +38 -0
  741. package/dist/esm/transaction/fixedScript/signLegacyTransaction.d.ts +32 -0
  742. package/dist/esm/transaction/fixedScript/signLegacyTransaction.d.ts.map +1 -0
  743. package/dist/esm/transaction/fixedScript/signLegacyTransaction.js +116 -0
  744. package/dist/esm/transaction/fixedScript/signPsbtUtxolib.d.ts +20 -0
  745. package/dist/esm/transaction/fixedScript/signPsbtUtxolib.d.ts.map +1 -0
  746. package/dist/esm/transaction/fixedScript/signPsbtUtxolib.js +117 -0
  747. package/dist/esm/transaction/fixedScript/signPsbtWasm.d.ts +20 -0
  748. package/dist/esm/transaction/fixedScript/signPsbtWasm.d.ts.map +1 -0
  749. package/dist/esm/transaction/fixedScript/signPsbtWasm.js +109 -0
  750. package/dist/esm/transaction/fixedScript/signTransaction.d.ts +34 -0
  751. package/dist/esm/transaction/fixedScript/signTransaction.d.ts.map +1 -0
  752. package/dist/esm/transaction/fixedScript/signTransaction.js +71 -0
  753. package/dist/esm/transaction/fixedScript/verifyTransaction.d.ts +21 -0
  754. package/dist/esm/transaction/fixedScript/verifyTransaction.d.ts.map +1 -0
  755. package/dist/esm/transaction/fixedScript/verifyTransaction.js +160 -0
  756. package/dist/esm/transaction/getPayGoVerificationPubkey.d.ts +9 -0
  757. package/dist/esm/transaction/getPayGoVerificationPubkey.d.ts.map +1 -0
  758. package/dist/esm/transaction/getPayGoVerificationPubkey.js +17 -0
  759. package/dist/esm/transaction/index.d.ts +10 -0
  760. package/dist/esm/transaction/index.d.ts.map +1 -0
  761. package/dist/esm/transaction/index.js +10 -0
  762. package/dist/esm/transaction/outputDifference.d.ts +44 -0
  763. package/dist/esm/transaction/outputDifference.d.ts.map +1 -0
  764. package/dist/esm/transaction/outputDifference.js +45 -0
  765. package/dist/esm/transaction/parseTransaction.d.ts +4 -0
  766. package/dist/esm/transaction/parseTransaction.d.ts.map +1 -0
  767. package/dist/esm/transaction/parseTransaction.js +12 -0
  768. package/dist/esm/transaction/recipient.d.ts +34 -0
  769. package/dist/esm/transaction/recipient.d.ts.map +1 -0
  770. package/dist/esm/transaction/recipient.js +61 -0
  771. package/dist/esm/transaction/signTransaction.d.ts +6 -0
  772. package/dist/esm/transaction/signTransaction.d.ts.map +1 -0
  773. package/dist/esm/transaction/signTransaction.js +76 -0
  774. package/dist/esm/transaction/types.d.ts +50 -0
  775. package/dist/esm/transaction/types.d.ts.map +1 -0
  776. package/dist/esm/transaction/types.js +4 -0
  777. package/dist/esm/transaction/verifyTransaction.d.ts +4 -0
  778. package/dist/esm/transaction/verifyTransaction.d.ts.map +1 -0
  779. package/dist/esm/transaction/verifyTransaction.js +14 -0
  780. package/dist/esm/unspent.d.ts +55 -0
  781. package/dist/esm/unspent.d.ts.map +1 -0
  782. package/dist/esm/unspent.js +8 -0
  783. package/dist/esm/verifyKey.d.ts +21 -0
  784. package/dist/esm/verifyKey.d.ts.map +1 -0
  785. package/dist/esm/verifyKey.js +100 -0
  786. package/dist/esm/wallet.d.ts +15 -0
  787. package/dist/esm/wallet.d.ts.map +1 -0
  788. package/dist/esm/wallet.js +5 -0
  789. package/dist/esm/wasmUtil.d.ts +34 -0
  790. package/dist/esm/wasmUtil.d.ts.map +1 -0
  791. package/dist/esm/wasmUtil.js +54 -0
  792. package/package.json +47 -20
  793. package/.eslintignore +0 -5
  794. package/CHANGELOG.md +0 -235
  795. package/dist/src/abstractUtxoCoin.d.ts +0 -392
  796. package/dist/src/abstractUtxoCoin.d.ts.map +0 -1
  797. package/dist/src/abstractUtxoCoin.js +0 -931
  798. package/dist/src/config.js +0 -14
  799. package/dist/src/index.d.ts +0 -6
  800. package/dist/src/index.d.ts.map +0 -1
  801. package/dist/src/index.js +0 -18
  802. package/dist/src/parseOutput.d.ts +0 -22
  803. package/dist/src/parseOutput.d.ts.map +0 -1
  804. package/dist/src/parseOutput.js +0 -170
  805. package/dist/src/recovery/RecoveryProvider.d.ts.map +0 -1
  806. package/dist/src/recovery/RecoveryProvider.js +0 -24
  807. package/dist/src/recovery/backupKeyRecovery.d.ts +0 -62
  808. package/dist/src/recovery/backupKeyRecovery.d.ts.map +0 -1
  809. package/dist/src/recovery/backupKeyRecovery.js +0 -293
  810. package/dist/src/recovery/baseApi.d.ts.map +0 -1
  811. package/dist/src/recovery/baseApi.js +0 -73
  812. package/dist/src/recovery/coingeckoApi.d.ts.map +0 -1
  813. package/dist/src/recovery/coingeckoApi.js +0 -47
  814. package/dist/src/recovery/crossChainRecovery.d.ts.map +0 -1
  815. package/dist/src/recovery/crossChainRecovery.js +0 -294
  816. package/dist/src/recovery/mempoolApi.js +0 -33
  817. package/dist/src/recovery/smartbitApi.d.ts +0 -11
  818. package/dist/src/recovery/smartbitApi.d.ts.map +0 -1
  819. package/dist/src/recovery/smartbitApi.js +0 -36
  820. package/dist/src/replayProtection.d.ts +0 -4
  821. package/dist/src/replayProtection.d.ts.map +0 -1
  822. package/dist/src/replayProtection.js +0 -21
  823. package/dist/src/sign.d.ts +0 -31
  824. package/dist/src/sign.d.ts.map +0 -1
  825. package/dist/src/sign.js +0 -104
  826. package/dist/tsconfig.tsbuildinfo +0 -8017
  827. /package/dist/{src → cjs/src}/config.d.ts +0 -0
  828. /package/dist/{src → cjs/src}/recovery/mempoolApi.d.ts +0 -0
  829. /package/dist/{src → esm}/config.d.ts.map +0 -0
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const assert_1 = __importDefault(require("assert"));
40
+ const sinon = __importStar(require("sinon"));
41
+ const nock = require("nock");
42
+ const src_1 = require("../../../src");
43
+ const util_1 = require("../util");
44
+ const mock_1 = require("./mock");
45
+ nock.disableNetConnect();
46
+ const walletPassphrase = 'lol';
47
+ // Get default wasm wallet keys (xpubs, xprivs, and walletKeys)
48
+ const { walletKeys: wasmWalletKeys, xpubs, xprivs } = (0, util_1.getDefaultWasmWalletKeys)();
49
+ function getNamedKeys(keys, password) {
50
+ function encode(k) {
51
+ const base58 = k.toBase58();
52
+ // Check if it's a public key
53
+ const pubKeyMatch = util_1.keychainsBase58.find((kc) => kc.pub === base58);
54
+ if (pubKeyMatch) {
55
+ return base58;
56
+ }
57
+ // It's a private key - find and encrypt it
58
+ const keyBase58 = util_1.keychainsBase58.find((kc) => kc.prv === base58);
59
+ if (!keyBase58) {
60
+ throw new Error('Key not found in keychainsBase58');
61
+ }
62
+ return (0, util_1.encryptKeychain)(password, keyBase58);
63
+ }
64
+ return {
65
+ userKey: encode(keys[0]),
66
+ backupKey: encode(keys[1]),
67
+ bitgoKey: encode(keys[2]),
68
+ };
69
+ }
70
+ function getKeysForFullSignedRecovery(password) {
71
+ return getNamedKeys([xprivs[0], xprivs[1], xpubs[2]], password);
72
+ }
73
+ const keysFullSignedRecovery = getKeysForFullSignedRecovery(walletPassphrase);
74
+ /**
75
+ * Tests for unspent gathering via backupKeyRecovery with MockRecoveryProvider.
76
+ * This validates the address scanning and unspent collection logic separately
77
+ * from the transaction building logic tested in backupKeyRecovery.ts.
78
+ */
79
+ describe('Backup Key Recovery - Unspent Gathering', function () {
80
+ const defaultFeeRateSatB = 100;
81
+ (0, util_1.getMinUtxoCoins)().forEach((coin) => {
82
+ describe(`Unspent Gathering [${coin.getChain()}]`, function () {
83
+ const { walletKeys: externalWallet } = (0, util_1.createWasmWalletKeys)('external');
84
+ const recoveryDestination = (0, util_1.getWalletAddress)(coin.name, externalWallet);
85
+ before('mock', function () {
86
+ sinon.stub(src_1.CoingeckoApi.prototype, 'getUSDPrice').resolves(69420);
87
+ });
88
+ after(function () {
89
+ sinon.restore();
90
+ });
91
+ it('gathers unspents from recovery provider and builds transaction', async function () {
92
+ this.timeout(10000);
93
+ // Use p2sh for all coins (universal support)
94
+ const scriptTypes = ['p2sh'];
95
+ // Create test unspents with prevTx using wasm-utxo only (no utxolib dependency)
96
+ const testUnspents = scriptTypes.flatMap((scriptType, index) => [
97
+ (0, util_1.toUnspentWithPrevTx)({ scriptType, value: BigInt(1e8) }, index, coin.name, wasmWalletKeys),
98
+ (0, util_1.toUnspentWithPrevTx)({ scriptType, value: BigInt(2e8) }, index, coin.name, wasmWalletKeys),
99
+ ]);
100
+ // Convert to API format for BCH/BCHA if needed
101
+ const mockedApiUnspents = coin.getChain() === 'bch' || coin.getChain() === 'bcha'
102
+ ? testUnspents.map((u) => ({
103
+ ...u,
104
+ address: coin.canonicalAddress(u.address, 'cashaddr').split(':')[1],
105
+ }))
106
+ : testUnspents;
107
+ const mockProvider = new mock_1.MockRecoveryProvider(mockedApiUnspents);
108
+ // Verify mock provider works correctly
109
+ const fetchedUnspents = await mockProvider.getUnspentsForAddresses(mockedApiUnspents.map((u) => u.address));
110
+ assert_1.default.strictEqual(fetchedUnspents.length, mockedApiUnspents.length);
111
+ // Call backupKeyRecovery which should gather unspents via the mock provider
112
+ const recovery = await (0, src_1.backupKeyRecovery)(coin, util_1.defaultBitGo, {
113
+ walletPassphrase,
114
+ recoveryDestination,
115
+ scan: 5,
116
+ ignoreAddressTypes: [],
117
+ ...keysFullSignedRecovery,
118
+ recoveryProvider: mockProvider,
119
+ feeRate: defaultFeeRateSatB,
120
+ });
121
+ // Verify recovery succeeded (transaction hex indicates unspents were gathered)
122
+ const txHex = recovery.transactionHex ??
123
+ recovery.txHex;
124
+ assert_1.default.ok(txHex, 'should have transaction hex from gathered unspents');
125
+ });
126
+ it('handles empty unspents from recovery provider', async function () {
127
+ this.timeout(10000);
128
+ const mockProvider = new mock_1.MockRecoveryProvider([]);
129
+ await assert_1.default.rejects(async () => {
130
+ await (0, src_1.backupKeyRecovery)(coin, util_1.defaultBitGo, {
131
+ walletPassphrase,
132
+ recoveryDestination,
133
+ scan: 2,
134
+ ignoreAddressTypes: [],
135
+ ...keysFullSignedRecovery,
136
+ recoveryProvider: mockProvider,
137
+ feeRate: defaultFeeRateSatB,
138
+ });
139
+ }, /No input to recover/);
140
+ });
141
+ });
142
+ });
143
+ });
144
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja3VwS2V5UmVjb3ZlcnlVbnNwZW50R2F0aGVyaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L3JlY292ZXJ5L2JhY2t1cEtleVJlY292ZXJ5VW5zcGVudEdhdGhlcmluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUU1Qiw2Q0FBK0I7QUFDL0IsNkJBQThCO0FBSTlCLHNDQUtzQjtBQUV0QixrQ0FVaUI7QUFFakIsaUNBQThDO0FBSTlDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0FBRXpCLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO0FBUS9CLCtEQUErRDtBQUMvRCxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBQSwrQkFBd0IsR0FBRSxDQUFDO0FBRWpGLFNBQVMsWUFBWSxDQUFDLElBQW1CLEVBQUUsUUFBZ0I7SUFDekQsU0FBUyxNQUFNLENBQUMsQ0FBUTtRQUN0QixNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDNUIsNkJBQTZCO1FBQzdCLE1BQU0sV0FBVyxHQUFHLHNCQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLE1BQU0sQ0FBQyxDQUFDO1FBQ3BFLElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUNELDJDQUEyQztRQUMzQyxNQUFNLFNBQVMsR0FBRyxzQkFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxNQUFNLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDZixNQUFNLElB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LHVCQUFpQixFQUFDLElBQUksRUFBRSxtQkFBWSxFQUFFO3dCQUMxQyxnQkFBZ0I7d0JBQ2hCLG1CQUFtQjt3QkFDbkIsSUFBSSxFQUFFLENBQUM7d0JBQ1Asa0JBQWtCLEVBQUUsRUFBRTt3QkFDdEIsR0FBRyxzQkFBc0I7d0JBQ3pCLGdCQUFnQixFQUFFLFlBQVk7d0JBQzlCLE9BQU8sRUFBRSxrQkFBa0I7cUJBQzVCLENBQUMsQ0FBQztnQkFDTCxDQUFDLEVBQUUscUJBQXFCLENBQUMsQ0FBQztZQUM1QixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0ICogYXMgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0IG5vY2sgPSByZXF1aXJlKCdub2NrJyk7XG5pbXBvcnQgeyBCSVAzMiB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuaW1wb3J0IHsgVHJpcGxlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuXG5pbXBvcnQge1xuICBiYWNrdXBLZXlSZWNvdmVyeSxcbiAgQmFja3VwS2V5UmVjb3ZlcnlUcmFuc2Fuc2FjdGlvbixcbiAgQ29pbmdlY2tvQXBpLFxuICBGb3JtYXR0ZWRPZmZsaW5lVmF1bHRUeEluZm8sXG59IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgdHlwZSB7IFVuc3BlbnQgfSBmcm9tICcuLi8uLi8uLi9zcmMvdW5zcGVudCc7XG5pbXBvcnQge1xuICBjcmVhdGVXYXNtV2FsbGV0S2V5cyxcbiAgZGVmYXVsdEJpdEdvLFxuICBlbmNyeXB0S2V5Y2hhaW4sXG4gIGdldERlZmF1bHRXYXNtV2FsbGV0S2V5cyxcbiAgZ2V0TWluVXR4b0NvaW5zLFxuICBnZXRXYWxsZXRBZGRyZXNzLFxuICBrZXljaGFpbnNCYXNlNTgsXG4gIHRvVW5zcGVudFdpdGhQcmV2VHgsXG4gIFdhbGxldFVuc3BlbnRXaXRoUHJldlR4LFxufSBmcm9tICcuLi91dGlsJztcblxuaW1wb3J0IHsgTW9ja1JlY292ZXJ5UHJvdmlkZXIgfSBmcm9tICcuL21vY2snO1xuXG50eXBlIFNjcmlwdFR5cGUyT2YzID0gJ3Ayc2gnIHwgJ3Ayc2hQMndzaCcgfCAncDJ3c2gnIHwgJ3AydHInIHwgJ3AydHJNdXNpZzInO1xuXG5ub2NrLmRpc2FibGVOZXRDb25uZWN0KCk7XG5cbmNvbnN0IHdhbGxldFBhc3NwaHJhc2UgPSAnbG9sJztcblxudHlwZSBOYW1lZEtleXMgPSB7XG4gIHVzZXJLZXk6IHN0cmluZztcbiAgYmFja3VwS2V5OiBzdHJpbmc7XG4gIGJpdGdvS2V5OiBzdHJpbmc7XG59O1xuXG4vLyBHZXQgZGVmYXVsdCB3YXNtIHdhbGxldCBrZXlzICh4cHVicywgeHByaXZzLCBhbmQgd2FsbGV0S2V5cylcbmNvbnN0IHsgd2FsbGV0S2V5czogd2FzbVdhbGxldEtleXMsIHhwdWJzLCB4cHJpdnMgfSA9IGdldERlZmF1bHRXYXNtV2FsbGV0S2V5cygpO1xuXG5mdW5jdGlvbiBnZXROYW1lZEtleXMoa2V5czogVHJpcGxlPEJJUDMyPiwgcGFzc3dvcmQ6IHN0cmluZyk6IE5hbWVkS2V5cyB7XG4gIGZ1bmN0aW9uIGVuY29kZShrOiBCSVAzMik6IHN0cmluZyB7XG4gICAgY29uc3QgYmFzZTU4ID0gay50b0Jhc2U1OCgpO1xuICAgIC8vIENoZWNrIGlmIGl0J3MgYSBwdWJsaWMga2V5XG4gICAgY29uc3QgcHViS2V5TWF0Y2ggPSBrZXljaGFpbnNCYXNlNTguZmluZCgoa2MpID0+IGtjLnB1YiA9PT0gYmFzZTU4KTtcbiAgICBpZiAocHViS2V5TWF0Y2gpIHtcbiAgICAgIHJldHVybiBiYXNlNTg7XG4gICAgfVxuICAgIC8vIEl0J3MgYSBwcml2YXRlIGtleSAtIGZpbmQgYW5kIGVuY3J5cHQgaXRcbiAgICBjb25zdCBrZXlCYXNlNTggPSBrZXljaGFpbnNCYXNlNTguZmluZCgoa2MpID0+IGtjLnBydiA9PT0gYmFzZTU4KTtcbiAgICBpZiAoIWtleUJhc2U1OCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdLZXkgbm90IGZvdW5kIGluIGtleWNoYWluc0Jhc2U1OCcpO1xuICAgIH1cbiAgICByZXR1cm4gZW5jcnlwdEtleWNoYWluKHBhc3N3b3JkLCBrZXlCYXNlNTgpO1xuICB9XG4gIHJldHVybiB7XG4gICAgdXNlcktleTogZW5jb2RlKGtleXNbMF0pLFxuICAgIGJhY2t1cEtleTogZW5jb2RlKGtleXNbMV0pLFxuICAgIGJpdGdvS2V5OiBlbmNvZGUoa2V5c1syXSksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldEtleXNGb3JGdWxsU2lnbmVkUmVjb3ZlcnkocGFzc3dvcmQ6IHN0cmluZyk6IE5hbWVkS2V5cyB7XG4gIHJldHVybiBnZXROYW1lZEtleXMoW3hwcml2c1swXSwgeHByaXZzWzFdLCB4cHVic1syXV0sIHBhc3N3b3JkKTtcbn1cblxuY29uc3Qga2V5c0Z1bGxTaWduZWRSZWNvdmVyeSA9IGdldEtleXNGb3JGdWxsU2lnbmVkUmVjb3Zlcnkod2FsbGV0UGFzc3BocmFzZSk7XG5cbi8qKlxuICogVGVzdHMgZm9yIHVuc3BlbnQgZ2F0aGVyaW5nIHZpYSBiYWNrdXBLZXlSZWNvdmVyeSB3aXRoIE1vY2tSZWNvdmVyeVByb3ZpZGVyLlxuICogVGhpcyB2YWxpZGF0ZXMgdGhlIGFkZHJlc3Mgc2Nhbm5pbmcgYW5kIHVuc3BlbnQgY29sbGVjdGlvbiBsb2dpYyBzZXBhcmF0ZWx5XG4gKiBmcm9tIHRoZSB0cmFuc2FjdGlvbiBidWlsZGluZyBsb2dpYyB0ZXN0ZWQgaW4gYmFja3VwS2V5UmVjb3ZlcnkudHMuXG4gKi9cbmRlc2NyaWJlKCdCYWNrdXAgS2V5IFJlY292ZXJ5IC0gVW5zcGVudCBHYXRoZXJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGRlZmF1bHRGZWVSYXRlU2F0QiA9IDEwMDtcblxuICBnZXRNaW5VdHhvQ29pbnMoKS5mb3JFYWNoKChjb2luKSA9PiB7XG4gICAgZGVzY3JpYmUoYFVuc3BlbnQgR2F0aGVyaW5nIFske2NvaW4uZ2V0Q2hhaW4oKX1dYCwgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgeyB3YWxsZXRLZXlzOiBleHRlcm5hbFdhbGxldCB9ID0gY3JlYXRlV2FzbVdhbGxldEtleXMoJ2V4dGVybmFsJyk7XG4gICAgICBjb25zdCByZWNvdmVyeURlc3RpbmF0aW9uID0gZ2V0V2FsbGV0QWRkcmVzcyhjb2luLm5hbWUsIGV4dGVybmFsV2FsbGV0KTtcblxuICAgICAgYmVmb3JlKCdtb2NrJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBzaW5vbi5zdHViKENvaW5nZWNrb0FwaS5wcm90b3R5cGUsICdnZXRVU0RQcmljZScpLnJlc29sdmVzKDY5XzQyMCk7XG4gICAgICB9KTtcblxuICAgICAgYWZ0ZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICBzaW5vbi5yZXN0b3JlKCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2dhdGhlcnMgdW5zcGVudHMgZnJvbSByZWNvdmVyeSBwcm92aWRlciBhbmQgYnVpbGRzIHRyYW5zYWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnRpbWVvdXQoMTBfMDAwKTtcbiAgICAgICAgLy8gVXNlIHAyc2ggZm9yIGFsbCBjb2lucyAodW5pdmVyc2FsIHN1cHBvcnQpXG4gICAgICAgIGNvbnN0IHNjcmlwdFR5cGVzOiBTY3JpcHRUeXBlMk9mM1tdID0gWydwMnNoJ107XG5cbiAgICAgICAgLy8gQ3JlYXRlIHRlc3QgdW5zcGVudHMgd2l0aCBwcmV2VHggdXNpbmcgd2FzbS11dHhvIG9ubHkgKG5vIHV0eG9saWIgZGVwZW5kZW5jeSlcbiAgICAgICAgY29uc3QgdGVzdFVuc3BlbnRzOiBXYWxsZXRVbnNwZW50V2l0aFByZXZUeDxiaWdpbnQ+W10gPSBzY3JpcHRUeXBlcy5mbGF0TWFwKChzY3JpcHRUeXBlLCBpbmRleCkgPT4gW1xuICAgICAgICAgIHRvVW5zcGVudFdpdGhQcmV2VHgoeyBzY3JpcHRUeXBlLCB2YWx1ZTogQmlnSW50KDFlOCkgfSwgaW5kZXgsIGNvaW4ubmFtZSwgd2FzbVdhbGxldEtleXMpLFxuICAgICAgICAgIHRvVW5zcGVudFdpdGhQcmV2VHgoeyBzY3JpcHRUeXBlLCB2YWx1ZTogQmlnSW50KDJlOCkgfSwgaW5kZXgsIGNvaW4ubmFtZSwgd2FzbVdhbGxldEtleXMpLFxuICAgICAgICBdKTtcblxuICAgICAgICAvLyBDb252ZXJ0IHRvIEFQSSBmb3JtYXQgZm9yIEJDSC9CQ0hBIGlmIG5lZWRlZFxuICAgICAgICBjb25zdCBtb2NrZWRBcGlVbnNwZW50czogVW5zcGVudDxiaWdpbnQ+W10gPVxuICAgICAgICAgIGNvaW4uZ2V0Q2hhaW4oKSA9PT0gJ2JjaCcgfHwgY29pbi5nZXRDaGFpbigpID09PSAnYmNoYSdcbiAgICAgICAgICAgID8gdGVzdFVuc3BlbnRzLm1hcCgodSkgPT4gKHtcbiAgICAgICAgICAgICAgICAuLi51LFxuICAgICAgICAgICAgICAgIGFkZHJlc3M6IGNvaW4uY2Fub25pY2FsQWRkcmVzcyh1LmFkZHJlc3MsICdjYXNoYWRkcicpLnNwbGl0KCc6JylbMV0sXG4gICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgOiB0ZXN0VW5zcGVudHM7XG5cbiAgICAgICAgY29uc3QgbW9ja1Byb3ZpZGVyID0gbmV3IE1vY2tSZWNvdmVyeVByb3ZpZGVyKG1vY2tlZEFwaVVuc3BlbnRzKTtcblxuICAgICAgICAvLyBWZXJpZnkgbW9jayBwcm92aWRlciB3b3JrcyBjb3JyZWN0bHlcbiAgICAgICAgY29uc3QgZmV0Y2hlZFVuc3BlbnRzID0gYXdhaXQgbW9ja1Byb3ZpZGVyLmdldFVuc3BlbnRzRm9yQWRkcmVzc2VzKG1vY2tlZEFwaVVuc3BlbnRzLm1hcCgodSkgPT4gdS5hZGRyZXNzKSk7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChmZXRjaGVkVW5zcGVudHMubGVuZ3RoLCBtb2NrZWRBcGlVbnNwZW50cy5sZW5ndGgpO1xuXG4gICAgICAgIC8vIENhbGwgYmFja3VwS2V5UmVjb3Zlcnkgd2hpY2ggc2hvdWxkIGdhdGhlciB1bnNwZW50cyB2aWEgdGhlIG1vY2sgcHJvdmlkZXJcbiAgICAgICAgY29uc3QgcmVjb3ZlcnkgPSBhd2FpdCBiYWNrdXBLZXlSZWNvdmVyeShjb2luLCBkZWZhdWx0Qml0R28sIHtcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb24sXG4gICAgICAgICAgc2NhbjogNSxcbiAgICAgICAgICBpZ25vcmVBZGRyZXNzVHlwZXM6IFtdLFxuICAgICAgICAgIC4uLmtleXNGdWxsU2lnbmVkUmVjb3ZlcnksXG4gICAgICAgICAgcmVjb3ZlcnlQcm92aWRlcjogbW9ja1Byb3ZpZGVyLFxuICAgICAgICAgIGZlZVJhdGU6IGRlZmF1bHRGZWVSYXRlU2F0QixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gVmVyaWZ5IHJlY292ZXJ5IHN1Y2NlZWRlZCAodHJhbnNhY3Rpb24gaGV4IGluZGljYXRlcyB1bnNwZW50cyB3ZXJlIGdhdGhlcmVkKVxuICAgICAgICBjb25zdCB0eEhleCA9XG4gICAgICAgICAgKHJlY292ZXJ5IGFzIEJhY2t1cEtleVJlY292ZXJ5VHJhbnNhbnNhY3Rpb24pLnRyYW5zYWN0aW9uSGV4ID8/XG4gICAgICAgICAgKHJlY292ZXJ5IGFzIEZvcm1hdHRlZE9mZmxpbmVWYXVsdFR4SW5mbykudHhIZXg7XG4gICAgICAgIGFzc2VydC5vayh0eEhleCwgJ3Nob3VsZCBoYXZlIHRyYW5zYWN0aW9uIGhleCBmcm9tIGdhdGhlcmVkIHVuc3BlbnRzJyk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2hhbmRsZXMgZW1wdHkgdW5zcGVudHMgZnJvbSByZWNvdmVyeSBwcm92aWRlcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0KDEwXzAwMCk7XG5cbiAgICAgICAgY29uc3QgbW9ja1Byb3ZpZGVyID0gbmV3IE1vY2tSZWNvdmVyeVByb3ZpZGVyKFtdKTtcblxuICAgICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgYmFja3VwS2V5UmVjb3ZlcnkoY29pbiwgZGVmYXVsdEJpdEdvLCB7XG4gICAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbixcbiAgICAgICAgICAgIHNjYW46IDIsXG4gICAgICAgICAgICBpZ25vcmVBZGRyZXNzVHlwZXM6IFtdLFxuICAgICAgICAgICAgLi4ua2V5c0Z1bGxTaWduZWRSZWNvdmVyeSxcbiAgICAgICAgICAgIHJlY292ZXJ5UHJvdmlkZXI6IG1vY2tQcm92aWRlcixcbiAgICAgICAgICAgIGZlZVJhdGU6IGRlZmF1bHRGZWVSYXRlU2F0QixcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgL05vIGlucHV0IHRvIHJlY292ZXIvKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=crossChainRecovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crossChainRecovery.d.ts","sourceRoot":"","sources":["../../../../../test/unit/recovery/crossChainRecovery.ts"],"names":[],"mappings":""}
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Jvc3NDaGFpblJlY292ZXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L3JlY292ZXJ5L2Nyb3NzQ2hhaW5SZWNvdmVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUVqQyw2QkFBOEI7QUFFOUIsbURBQStDO0FBQy9DLGdEQUE2RTtBQUM3RSw2Q0FBK0I7QUFFL0Isc0NBUXNCO0FBQ3RCLDhDQUFrRTtBQUVsRSxrQ0FVaUI7QUFDakIsaURBQThDO0FBRTlDLGlDQUF3RDtBQUV4RCxTQUFTLFFBQVEsQ0FBQyxDQUFpQjtJQUNqQyxPQUFPLElBQUEsa0JBQU8sRUFBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxJQUFzQixFQUFFLFFBQWdCLEVBQUUsVUFBa0M7SUFDOUYsT0FBTztRQUNMLElBQUEscUJBQVMsR0FBRTthQUNSLEdBQUcsQ0FBQyxXQUFXLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxRQUFRLEVBQUUsQ0FBQzthQUNwRCxLQUFLLENBQUMsR0FBRyxFQUFFO1lBQ1YsRUFBRSxFQUFFLFFBQVE7WUFDWixJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNyQixLQUFLLEVBQUUsb0JBQW9CO1lBQzNCLElBQUksRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDekMsQ0FBQzthQUNELE9BQU8sRUFBRTtRQUNaLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ3RCLElBQUEscUJBQVMsR0FBRTthQUNSLEdBQUcsQ0FBQyxXQUFXLElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUNwRCxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQzthQUNiLE9BQU8sRUFBRSxDQUNiO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFRRCxTQUFTLGlCQUFpQixDQUFDLElBQXNCLEVBQUUsUUFBZ0IsRUFBRSxPQUFnQjtJQUNuRixPQUFPLElBQUEscUJBQVMsR0FBRTtTQUNmLEdBQUcsQ0FBQyxXQUFXLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxRQUFRLFlBQVksT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQy9FLEtBQUssQ0FBQyxHQUFHLEVBQUU7UUFDVixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87UUFDeEIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO1FBQ3BCLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztRQUNwQixJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRTtRQUNyQixNQUFNLEVBQUUsUUFBUTtLQUNqQixDQUFDO1NBQ0QsT0FBTyxFQUFFLENBQUM7QUFDZixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxrREFBa0Q7QUFDbEQsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBQSwrQkFBd0IsR0FBRSxDQUFDO0FBRTFFLFNBQVMsR0FBRyxDQUEyQyxVQUE0QixFQUFFLFlBQThCO0lBQ2pILFFBQVEsQ0FBQyxvQ0FBb0MsVUFBVSxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsWUFBWSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUU7UUFDN0csTUFBTSxnQkFBZ0IsR0FBRyxrQ0FBa0MsQ0FBQztRQUM1RCx5RkFBeUY7UUFDekYsTUFBTSxDQUFDLHdCQUF3QixFQUFFLDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZHLE9BQU8sRUFBRSxJQUFBLHFCQUFlLEVBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxzQkFBZSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ3ZGLEtBQUssRUFBRSxDQUFDO1lBQ1IsS0FBSyxFQUFFLENBQUM7U0FDVCxDQUFDLENBQUMsQ0FBQztRQUNKLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNoQixNQUFNLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDaEIsb0RBQW9EO1FBQ3BELE1BQU0sZUFBZSxHQUFHLElBQUEscUJBQWUsRUFBQyxVQUFVLENBQUMsSUFBSSxFQUFFO1lBQ3ZELFNBQVMsRUFBRSxzQkFBZTtZQUMxQixLQUFLO1lBQ0wsS0FBSztTQUNOLENBQUMsQ0FBQztRQUNILE1BQU0sS0FBSyxHQUFpQixFQUFFLENBQUM7UUFFL0Isa0VBQWtFO1FBQ2xFLFNBQVMsbUJBQW1CO1lBQzFCLE1BQU0sWUFBWSxHQUFHLENBQUMsVUFBVSxDQUFDLFVBQVUsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFZLENBQUM7WUFDekYsT0FBTztnQkFDTCxJQUFBLDhCQUF1QixFQUFVLHdCQUF3QixDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDO2FBQ2hILENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxDQUFDLGFBQWEsRUFBRTtZQUNwQixLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxzQkFBZSxDQUFDLENBQUMsQ0FBQztZQUMzRSxLQUFLLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDLENBQUM7UUFDNUYsQ0FBQyxDQUFDLENBQUM7UUFFSCxLQUFLLENBQUM7WUFDSixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQztRQUVILEtBQUssQ0FBQztZQUNKLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQztRQUVILFNBQVMsQ0FBQztZQUNSLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQztRQUVILEtBQUssVUFBVSxZQUFZLENBQ3pCLElBQVksRUFDWixRQUFpRjtZQUVqRixJQUFJLFdBQVcsR0FBNEIsRUFBRSxHQUFHLFFBQVEsRUFBRSxDQUFDO1lBQzNELElBQUksVUFBVSxDQUFDLFVBQVUsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDdkMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUNuQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRSxDQUFDO3dCQUMxQixPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDdEIsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLE9BQU8sQ0FBQyxDQUFDO29CQUNYLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQztZQUNKLENBQUM7WUFDRCxJQUFBLHNCQUFlLEVBQ2IsV0FBVyxFQUNYLE1BQU0sSUFBQSxpQkFBVSxFQUFDLFVBQVUsRUFBRSwrQkFBK0IsWUFBWSxDQUFDLFFBQVEsRUFBRSxJQUFJLElBQUksRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUM1RyxDQUFDO1FBQ0osQ0FBQztRQUVELFNBQVMsMEJBQTBCLENBQUMsT0FBZTtZQUNqRCxtREFBbUQ7WUFDbkQsTUFBTSxRQUFRLEdBQUcsNkJBQWlCLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckcsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLDhCQUE4QixDQUFDLGNBQWMsRUFBRSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNqSCxNQUFNLFFBQVEsR0FBRyxtQkFBbUIsRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzFELGlGQUFpRjtZQUNqRixNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDN0IsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzFELE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsK0JBQStCLENBQUMsQ0FBQztZQUNsRixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxFQUFFLENBQUMseUNBQXlDLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDdkQsTUFBTSxjQUFjLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoRCxxREFBcUQ7WUFDckQsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEQseUVBQXlFO1lBQ3pFLE1BQU0sWUFBWSxHQUFHLElBQUEscUJBQWUsRUFBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLHNCQUFlLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxRyxNQUFNLHVCQUF1QixHQUFHLEtBQUs7aUJBQ2xDLElBQUksQ0FBQyxzQkFBZ0IsQ0FBQyxTQUFTLEVBQUUscUJBQXFCLENBQUM7aUJBQ3ZELE9BQU8sQ0FBQyxJQUFJLHFDQUE4QixDQUFVLFVBQVUsRUFBRSxjQUFjLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEcsTUFBTSxNQUFNLEdBQUc7Z0JBQ2IsWUFBWTtnQkFDWixJQUFJLEVBQUUsV0FBVztnQkFDakIsZUFBZTtnQkFDZixNQUFNLEVBQUUsZ0JBQWdCO2FBQ3pCLENBQUM7WUFDRixNQUFNLGNBQWMsR0FBRyxDQUFDLE1BQU0sVUFBVSxDQUFDLHFCQUFxQixDQUFVO2dCQUN0RSxHQUFHLE1BQU07Z0JBQ1QsSUFBSSxFQUFFLHNCQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRzthQUM3QixDQUFDLENBQXNDLENBQUM7WUFDekMsTUFBTSxDQUFDLFdBQVcsQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFFekQsdUJBQXVCO1lBQ3ZCLE1BQU0sWUFBWSxDQUFDLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQztZQUU3QyxxREFBcUQ7WUFDckQsMEJBQTBCLENBQUMsY0FBYyxDQUFDLEtBQWUsQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDJDQUEyQyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3pELE1BQU0sY0FBYyxHQUFHLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEQscURBQXFEO1lBQ3JELE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BELHlFQUF5RTtZQUN6RSxNQUFNLFlBQVksR0FBRyxJQUFBLHFCQUFlLEVBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxzQkFBZSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDMUcsTUFBTSx1QkFBdUIsR0FBRyxLQUFLO2lCQUNsQyxJQUFJLENBQUMsc0JBQWdCLENBQUMsU0FBUyxFQUFFLHFCQUFxQixDQUFDO2lCQUN2RCxPQUFPLENBQUMsSUFBSSxxQ0FBOEIsQ0FBVSxVQUFVLEVBQUUsY0FBYyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BHLE1BQU0sTUFBTSxHQUFHO2dCQUNiLFlBQVk7Z0JBQ1osSUFBSSxFQUFFLFdBQVc7Z0JBQ2pCLGVBQWU7Z0JBQ2YsTUFBTSxFQUFFLGdCQUFnQjthQUN6QixDQUFDO1lBQ0YsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLE1BQU0sVUFBVSxDQUFDLHFCQUFxQixDQUFVO2dCQUN4RSxHQUFHLE1BQU07Z0JBQ1QsTUFBTSxFQUFFLEtBQUs7YUFDZCxDQUFDLENBQXdDLENBQUM7WUFDM0MsTUFBTSxDQUFDLFdBQVcsQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFFekQsdUJBQXVCO1lBQ3ZCLE1BQU0sWUFBWSxDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBRWpELHlDQUF5QztZQUN6QyxNQUFNLFFBQVEsR0FBRyxNQUFNLFVBQVUsQ0FBQyxlQUFlLENBQVU7Z0JBQ3pELFVBQVUsRUFBRSxnQkFBZ0I7Z0JBQzVCLEdBQUcsRUFBRSxzQkFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUc7Z0JBQzNCLElBQUksRUFBRSxzQkFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBbUI7YUFDMUQsQ0FBQyxDQUFDO1lBQ0gsMEJBQTBCLENBQUUsUUFBOEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsNkJBQTZCLENBQUMsVUFBNEIsRUFBRSxZQUE4QjtJQUNqRyxPQUFPLG1DQUE2QixDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztBQUNuRyxDQUFDO0FBRUQsZ0JBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtJQUN6QixnQkFBUztTQUNOLE1BQU0sQ0FDTCxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQ1osSUFBSSxLQUFLLFNBQVM7UUFDbEIsNkJBQTZCLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQztRQUM5QyxDQUFDLENBQUMsSUFBQSxxQkFBYSxFQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFBLHFCQUFhLEVBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzFELENBQUMsSUFBQSxxQkFBYSxFQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFBLHFCQUFhLEVBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FDakU7U0FDQSxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtRQUNyQixJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDakMsR0FBRyxDQUFTLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztRQUMvQixDQUFDO2FBQU0sQ0FBQztZQUNOLEdBQUcsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDdkIsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFDLENBQUM7QUFFSCxRQUFRLENBQUMsZ0NBQWdDLEVBQUUsS0FBSztJQUM5QyxNQUFNLEtBQUssR0FBRyxtQkFBWSxDQUFDO0lBQzNCLE1BQU0sWUFBWSxHQUFHLElBQUEsa0JBQVcsRUFBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxNQUFNLGdCQUFnQixHQUFHLGtDQUFrQyxDQUFDO0lBRTVELEVBQUUsQ0FBQyx1RUFBdUUsRUFBRSxLQUFLO1FBQy9FLE1BQU0sY0FBYyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRWxDLEtBQUssTUFBTSxLQUFLLElBQUksY0FBYyxFQUFFLENBQUM7WUFDbkMsTUFBTSxZQUFZLEdBQUcsSUFBQSxxQkFBUyxFQUFDLEtBQUssQ0FBQztpQkFDbEMsR0FBRyxDQUFDLFdBQVcsWUFBWSxDQUFDLFFBQVEsRUFBRSxXQUFXLGdCQUFnQixFQUFFLENBQUM7aUJBQ3BFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoQixNQUFNLFlBQVksR0FBRyxJQUFBLHFCQUFTLEVBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLGtCQUFrQixnQkFBZ0IsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdGLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FDbEIsR0FBRyxFQUFFLENBQUMsSUFBQSxlQUFTLEVBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQyxFQUN0RCxLQUFLLENBQUMsd0JBQXdCLGdCQUFnQixxQ0FBcUMsS0FBSyxFQUFFLENBQUMsQ0FDNUYsQ0FBQztZQUNGLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNwQixZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLG9FQUFvRSxFQUFFLEtBQUs7UUFDNUUsTUFBTSxjQUFjLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QixLQUFLLE1BQU0sS0FBSyxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ25DLE1BQU0sWUFBWSxHQUFHLElBQUEscUJBQVMsRUFBQyxLQUFLLENBQUM7aUJBQ2xDLEdBQUcsQ0FBQyxXQUFXLFlBQVksQ0FBQyxRQUFRLEVBQUUsV0FBVyxnQkFBZ0IsRUFBRSxDQUFDO2lCQUNwRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEIsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUEsZUFBUyxFQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLENBQUMsRUFBRTtnQkFDM0UsSUFBSSxFQUFFLGtCQUFrQjtnQkFDeEIsTUFBTSxFQUFFLEdBQUc7Z0JBQ1gsTUFBTSxFQUFFLEVBQUU7Z0JBQ1YsWUFBWSxFQUFFLEtBQUs7Z0JBQ25CLFFBQVEsRUFBRSxLQUFLO2FBQ2hCLENBQUMsQ0FBQztZQUNILFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUVILFFBQVEsQ0FBQyxpQ0FBaUMsRUFBRTtJQUMxQyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGdEQUFnRCxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzFGLEVBQUUsQ0FBQyx3REFBd0QsRUFBRTtRQUMzRCxpRUFBaUU7UUFDakUsMkVBQTJFO1FBQzNFLDJFQUEyRTtRQUMzRSwyREFBMkQ7UUFDM0QsTUFBTSxVQUFVLEdBQUcsbUJBQVcsQ0FBQyx3QkFBd0IsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDN0UsTUFBTSxXQUFXLEdBQUcsbUJBQVcsQ0FBQyx3QkFBd0IsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDL0UsTUFBTSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsb0NBQW9DLENBQUMsQ0FBQztRQUNyRSxNQUFNLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxvQ0FBb0MsQ0FBQyxDQUFDO1FBRXRFLE1BQU0sYUFBYSxHQUFHLElBQUEscUNBQStCLEVBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3pFLE1BQU0sd0JBQXdCLEdBQUcsb0NBQW9DLENBQUM7UUFDdEUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztRQUU1RCxNQUFNLHlCQUF5QixHQUFHLHFDQUFxQyxDQUFDO1FBQ3hFLE1BQU0saUJBQWlCLEdBQUcsSUFBQSxxQ0FBK0IsRUFBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDL0UsTUFBTSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO0lBQ25FLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLG9FQUFvRSxFQUFFO1FBQ3ZFLE1BQU0sT0FBTyxHQUFHLG9DQUFvQyxDQUFDO1FBQ3JELE1BQU0sYUFBYSxHQUFHLElBQUEscUNBQStCLEVBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXRFLGlEQUFpRDtRQUNqRCxNQUFNLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsNENBQTRDLGFBQWEsRUFBRSxDQUFDLENBQUM7SUFDeEcsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsb0NBQW9DLEVBQUU7UUFDdkMsTUFBTSxhQUFhLEdBQUcsNkNBQTZDLENBQUM7UUFDcEUsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQ0FBK0IsRUFBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDckUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDNUMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgbm9jayA9IHJlcXVpcmUoJ25vY2snKTtcbmltcG9ydCB7IFRyaXBsZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IGdldFNlZWQgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstdGVzdCc7XG5pbXBvcnQgeyBhZGRyZXNzIGFzIHdhc21BZGRyZXNzLCBmaXhlZFNjcmlwdFdhbGxldCB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuaW1wb3J0ICogYXMgc2lub24gZnJvbSAnc2lub24nO1xuXG5pbXBvcnQge1xuICBBYnN0cmFjdFV0eG9Db2luLFxuICBDcm9zc0NoYWluUmVjb3ZlcnlTaWduZWQsXG4gIENyb3NzQ2hhaW5SZWNvdmVyeVVuc2lnbmVkLFxuICBnZXRXYWxsZXQsXG4gIHN1cHBvcnRlZENyb3NzQ2hhaW5SZWNvdmVyaWVzLFxuICBnZW5lcmF0ZUFkZHJlc3MsXG4gIGNvbnZlcnRMdGNBZGRyZXNzVG9MZWdhY3lGb3JtYXQsXG59IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBpc01haW5uZXRDb2luLCBpc1Rlc3RuZXRDb2luIH0gZnJvbSAnLi4vLi4vLi4vc3JjL25hbWVzJztcbmltcG9ydCB0eXBlIHsgV2FsbGV0VW5zcGVudCB9IGZyb20gJy4uLy4uLy4uL3NyYy91bnNwZW50JztcbmltcG9ydCB7XG4gIGdldEZpeHR1cmUsXG4gIGtleWNoYWluc0Jhc2U1OCxcbiAgS2V5Y2hhaW5CYXNlNTgsXG4gIGFzc2VydEVxdWFsSlNPTixcbiAgdXR4b0NvaW5zLFxuICBnZXREZWZhdWx0V2FzbVdhbGxldEtleXMsXG4gIGRlZmF1bHRCaXRHbyxcbiAgZ2V0VXR4b0NvaW4sXG4gIGNyZWF0ZVdhc21XYWxsZXRVbnNwZW50LFxufSBmcm9tICcuLi91dGlsJztcbmltcG9ydCB7IG5vY2tCaXRHbyB9IGZyb20gJy4uL3V0aWwvbm9ja0JpdEdvJztcblxuaW1wb3J0IHsgV2FzbUNyb3NzQ2hhaW5SZWNvdmVyeVByb3ZpZGVyIH0gZnJvbSAnLi9tb2NrJztcblxuZnVuY3Rpb24gZ2V0S2V5SWQoazogS2V5Y2hhaW5CYXNlNTgpOiBzdHJpbmcge1xuICByZXR1cm4gZ2V0U2VlZChrLnB1YikudG9TdHJpbmcoJ2hleCcpO1xufVxuXG5mdW5jdGlvbiBub2NrV2FsbGV0KGNvaW46IEFic3RyYWN0VXR4b0NvaW4sIHdhbGxldElkOiBzdHJpbmcsIHdhbGxldEtleXM6IFRyaXBsZTxLZXljaGFpbkJhc2U1OD4pOiBub2NrLlNjb3BlW10ge1xuICByZXR1cm4gW1xuICAgIG5vY2tCaXRHbygpXG4gICAgICAuZ2V0KGAvYXBpL3YyLyR7Y29pbi5nZXRDaGFpbigpfS93YWxsZXQvJHt3YWxsZXRJZH1gKVxuICAgICAgLnJlcGx5KDIwMCwge1xuICAgICAgICBpZDogd2FsbGV0SWQsXG4gICAgICAgIGNvaW46IGNvaW4uZ2V0Q2hhaW4oKSxcbiAgICAgICAgbGFiZWw6ICdjcm9zc0NoYWluUmVjb3ZlcnknLFxuICAgICAgICBrZXlzOiB3YWxsZXRLZXlzLm1hcCgoaykgPT4gZ2V0S2V5SWQoaykpLFxuICAgICAgfSlcbiAgICAgIC5wZXJzaXN0KCksXG4gICAgLi4ud2FsbGV0S2V5cy5tYXAoKGspID0+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":""}