@bitgo/abstract-utxo 10.6.0 → 10.8.0

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 (785) hide show
  1. package/dist/{src → cjs/src}/abstractUtxoCoin.d.ts +18 -75
  2. package/dist/cjs/src/abstractUtxoCoin.d.ts.map +1 -0
  3. package/dist/cjs/src/abstractUtxoCoin.js +630 -0
  4. package/dist/{src → cjs/src}/address/fixedScript.d.ts +2 -4
  5. package/dist/cjs/src/address/fixedScript.d.ts.map +1 -0
  6. package/dist/cjs/src/address/fixedScript.js +155 -0
  7. package/dist/cjs/src/address/index.d.ts.map +1 -0
  8. package/dist/{src → cjs/src}/address/index.js +1 -1
  9. package/dist/cjs/src/config.d.ts.map +1 -0
  10. package/dist/cjs/src/config.js +14 -0
  11. package/dist/cjs/src/descriptor/NamedDescriptor.d.ts.map +1 -0
  12. package/dist/cjs/src/descriptor/NamedDescriptor.js +79 -0
  13. package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.d.ts.map +1 -0
  14. package/dist/cjs/src/descriptor/assertDescriptorWalletAddress.js +66 -0
  15. package/dist/cjs/src/descriptor/builder/builder.d.ts.map +1 -0
  16. package/dist/cjs/src/descriptor/builder/builder.js +37 -0
  17. package/dist/cjs/src/descriptor/builder/index.d.ts.map +1 -0
  18. package/dist/{src → cjs/src}/descriptor/builder/index.js +1 -1
  19. package/dist/cjs/src/descriptor/builder/parse.d.ts.map +1 -0
  20. package/dist/cjs/src/descriptor/builder/parse.js +116 -0
  21. package/dist/cjs/src/descriptor/createWallet/createDescriptorWallet.d.ts.map +1 -0
  22. package/dist/cjs/src/descriptor/createWallet/createDescriptorWallet.js +41 -0
  23. package/dist/cjs/src/descriptor/createWallet/createDescriptors.d.ts.map +1 -0
  24. package/dist/cjs/src/descriptor/createWallet/createDescriptors.js +33 -0
  25. package/dist/cjs/src/descriptor/createWallet/index.d.ts.map +1 -0
  26. package/dist/{src → cjs/src}/descriptor/createWallet/index.js +1 -1
  27. package/dist/cjs/src/descriptor/descriptorWallet.d.ts.map +1 -0
  28. package/dist/cjs/src/descriptor/descriptorWallet.js +54 -0
  29. package/dist/cjs/src/descriptor/index.d.ts.map +1 -0
  30. package/dist/{src → cjs/src}/descriptor/index.js +1 -1
  31. package/dist/cjs/src/descriptor/validatePolicy.d.ts.map +1 -0
  32. package/dist/cjs/src/descriptor/validatePolicy.js +92 -0
  33. package/dist/cjs/src/impl/bch/bch.d.ts.map +1 -0
  34. package/dist/cjs/src/impl/bch/bch.js +74 -0
  35. package/dist/cjs/src/impl/bch/index.d.ts.map +1 -0
  36. package/dist/{src → cjs/src}/impl/bch/index.js +1 -1
  37. package/dist/cjs/src/impl/bch/tbch.d.ts.map +1 -0
  38. package/dist/{src → cjs/src}/impl/bch/tbch.js +1 -1
  39. package/dist/{src → cjs/src}/impl/bcha/bcha.d.ts +0 -1
  40. package/dist/cjs/src/impl/bcha/bcha.d.ts.map +1 -0
  41. package/dist/cjs/src/impl/bcha/bcha.js +48 -0
  42. package/dist/cjs/src/impl/bcha/index.d.ts.map +1 -0
  43. package/dist/{src → cjs/src}/impl/bcha/index.js +1 -1
  44. package/dist/cjs/src/impl/bcha/tbcha.d.ts.map +1 -0
  45. package/dist/{src → cjs/src}/impl/bcha/tbcha.js +1 -1
  46. package/dist/cjs/src/impl/bsv/bsv.d.ts.map +1 -0
  47. package/dist/{src → cjs/src}/impl/bsv/bsv.js +1 -1
  48. package/dist/cjs/src/impl/bsv/index.d.ts.map +1 -0
  49. package/dist/{src → cjs/src}/impl/bsv/index.js +1 -1
  50. package/dist/cjs/src/impl/bsv/tbsv.d.ts.map +1 -0
  51. package/dist/{src → cjs/src}/impl/bsv/tbsv.js +1 -1
  52. package/dist/cjs/src/impl/btc/btc.d.ts.map +1 -0
  53. package/dist/{src → cjs/src}/impl/btc/btc.js +1 -1
  54. package/dist/cjs/src/impl/btc/index.d.ts.map +1 -0
  55. package/dist/{src → cjs/src}/impl/btc/index.js +1 -1
  56. package/dist/cjs/src/impl/btc/inscriptionBuilder.d.ts.map +1 -0
  57. package/dist/cjs/src/impl/btc/inscriptionBuilder.js +183 -0
  58. package/dist/cjs/src/impl/btc/tbtc.d.ts.map +1 -0
  59. package/dist/{src → cjs/src}/impl/btc/tbtc.js +1 -1
  60. package/dist/cjs/src/impl/btc/tbtc4.d.ts.map +1 -0
  61. package/dist/{src → cjs/src}/impl/btc/tbtc4.js +1 -1
  62. package/dist/cjs/src/impl/btc/tbtcbgsig.d.ts.map +1 -0
  63. package/dist/{src → cjs/src}/impl/btc/tbtcbgsig.js +1 -1
  64. package/dist/cjs/src/impl/btc/tbtcsig.d.ts.map +1 -0
  65. package/dist/{src → cjs/src}/impl/btc/tbtcsig.js +1 -1
  66. package/dist/cjs/src/impl/btg/btg.d.ts.map +1 -0
  67. package/dist/{src → cjs/src}/impl/btg/btg.js +1 -1
  68. package/dist/cjs/src/impl/btg/index.d.ts.map +1 -0
  69. package/dist/{src → cjs/src}/impl/btg/index.js +1 -1
  70. package/dist/cjs/src/impl/dash/dash.d.ts.map +1 -0
  71. package/dist/{src → cjs/src}/impl/dash/dash.js +1 -1
  72. package/dist/cjs/src/impl/dash/index.d.ts.map +1 -0
  73. package/dist/{src → cjs/src}/impl/dash/index.js +1 -1
  74. package/dist/cjs/src/impl/dash/tdash.d.ts.map +1 -0
  75. package/dist/{src → cjs/src}/impl/dash/tdash.js +1 -1
  76. package/dist/{src → cjs/src}/impl/doge/doge.d.ts +4 -2
  77. package/dist/cjs/src/impl/doge/doge.d.ts.map +1 -0
  78. package/dist/cjs/src/impl/doge/doge.js +79 -0
  79. package/dist/cjs/src/impl/doge/index.d.ts.map +1 -0
  80. package/dist/{src → cjs/src}/impl/doge/index.js +1 -1
  81. package/dist/cjs/src/impl/doge/tdoge.d.ts.map +1 -0
  82. package/dist/{src → cjs/src}/impl/doge/tdoge.js +1 -1
  83. package/dist/cjs/src/impl/index.d.ts.map +1 -0
  84. package/dist/{src → cjs/src}/impl/index.js +1 -1
  85. package/dist/cjs/src/impl/ltc/index.d.ts.map +1 -0
  86. package/dist/{src → cjs/src}/impl/ltc/index.js +1 -1
  87. package/dist/cjs/src/impl/ltc/ltc.d.ts.map +1 -0
  88. package/dist/{src → cjs/src}/impl/ltc/ltc.js +1 -1
  89. package/dist/cjs/src/impl/ltc/tltc.d.ts.map +1 -0
  90. package/dist/{src → cjs/src}/impl/ltc/tltc.js +1 -1
  91. package/dist/cjs/src/impl/zec/index.d.ts.map +1 -0
  92. package/dist/{src → cjs/src}/impl/zec/index.js +1 -1
  93. package/dist/cjs/src/impl/zec/tzec.d.ts.map +1 -0
  94. package/dist/{src → cjs/src}/impl/zec/tzec.js +1 -1
  95. package/dist/cjs/src/impl/zec/zec.d.ts.map +1 -0
  96. package/dist/{src → cjs/src}/impl/zec/zec.js +1 -1
  97. package/dist/cjs/src/index.d.ts.map +1 -0
  98. package/dist/{src → cjs/src}/index.js +1 -1
  99. package/dist/{src → cjs/src}/keychains.d.ts +6 -2
  100. package/dist/cjs/src/keychains.d.ts.map +1 -0
  101. package/dist/cjs/src/keychains.js +136 -0
  102. package/dist/cjs/src/names.d.ts.map +1 -0
  103. package/dist/cjs/src/names.js +214 -0
  104. package/dist/cjs/src/offlineVault/OfflineVaultHalfSigned.d.ts.map +1 -0
  105. package/dist/cjs/src/offlineVault/OfflineVaultHalfSigned.js +26 -0
  106. package/dist/cjs/src/offlineVault/OfflineVaultSignable.d.ts.map +1 -0
  107. package/dist/cjs/src/offlineVault/OfflineVaultSignable.js +55 -0
  108. package/dist/cjs/src/offlineVault/TransactionExplanation.d.ts.map +1 -0
  109. package/dist/cjs/src/offlineVault/TransactionExplanation.js +16 -0
  110. package/dist/cjs/src/offlineVault/descriptor/index.d.ts.map +1 -0
  111. package/dist/{src → cjs/src}/offlineVault/descriptor/index.js +1 -1
  112. package/dist/cjs/src/offlineVault/descriptor/transaction.d.ts.map +1 -0
  113. package/dist/cjs/src/offlineVault/descriptor/transaction.js +80 -0
  114. package/dist/cjs/src/offlineVault/index.d.ts.map +1 -0
  115. package/dist/{src → cjs/src}/offlineVault/index.js +1 -1
  116. package/dist/cjs/src/recovery/RecoveryProvider.d.ts.map +1 -0
  117. package/dist/cjs/src/recovery/RecoveryProvider.js +22 -0
  118. package/dist/cjs/src/recovery/backupKeyRecovery.d.ts.map +1 -0
  119. package/dist/cjs/src/recovery/backupKeyRecovery.js +377 -0
  120. package/dist/cjs/src/recovery/baseApi.d.ts.map +1 -0
  121. package/dist/cjs/src/recovery/baseApi.js +73 -0
  122. package/dist/cjs/src/recovery/coingeckoApi.d.ts.map +1 -0
  123. package/dist/cjs/src/recovery/coingeckoApi.js +44 -0
  124. package/dist/cjs/src/recovery/crossChainRecovery.d.ts.map +1 -0
  125. package/dist/cjs/src/recovery/crossChainRecovery.js +364 -0
  126. package/dist/cjs/src/recovery/index.d.ts.map +1 -0
  127. package/dist/{src → cjs/src}/recovery/index.js +1 -1
  128. package/dist/cjs/src/recovery/mempoolApi.d.ts.map +1 -0
  129. package/dist/cjs/src/recovery/mempoolApi.js +36 -0
  130. package/dist/{src → cjs/src}/replayProtection.d.ts +1 -0
  131. package/dist/cjs/src/replayProtection.d.ts.map +1 -0
  132. package/dist/cjs/src/replayProtection.js +58 -0
  133. package/dist/cjs/src/sign.d.ts.map +1 -0
  134. package/dist/cjs/src/sign.js +205 -0
  135. package/dist/cjs/src/transaction/bip322.d.ts.map +1 -0
  136. package/dist/cjs/src/transaction/bip322.js +125 -0
  137. package/dist/cjs/src/transaction/common/verifyPayGoAmount.d.ts.map +1 -0
  138. package/dist/cjs/src/transaction/common/verifyPayGoAmount.js +3 -0
  139. package/dist/{src → cjs/src}/transaction/descriptor/explainPsbt.d.ts +2 -2
  140. package/dist/cjs/src/transaction/descriptor/explainPsbt.d.ts.map +1 -0
  141. package/dist/cjs/src/transaction/descriptor/explainPsbt.js +80 -0
  142. package/dist/cjs/src/transaction/descriptor/index.d.ts.map +1 -0
  143. package/dist/{src → cjs/src}/transaction/descriptor/index.js +1 -1
  144. package/dist/{src → cjs/src}/transaction/descriptor/parse.d.ts +2 -1
  145. package/dist/cjs/src/transaction/descriptor/parse.d.ts.map +1 -0
  146. package/dist/cjs/src/transaction/descriptor/parse.js +116 -0
  147. package/dist/{src → cjs/src}/transaction/descriptor/parseToAmountType.d.ts +2 -1
  148. package/dist/cjs/src/transaction/descriptor/parseToAmountType.d.ts.map +1 -0
  149. package/dist/cjs/src/transaction/descriptor/parseToAmountType.js +60 -0
  150. package/dist/cjs/src/transaction/descriptor/recipient.d.ts.map +1 -0
  151. package/dist/cjs/src/transaction/descriptor/recipient.js +3 -0
  152. package/dist/cjs/src/transaction/descriptor/signPsbt.d.ts.map +1 -0
  153. package/dist/cjs/src/transaction/descriptor/signPsbt.js +43 -0
  154. package/dist/{src → cjs/src}/transaction/descriptor/verifyTransaction.d.ts +2 -1
  155. package/dist/cjs/src/transaction/descriptor/verifyTransaction.d.ts.map +1 -0
  156. package/dist/cjs/src/transaction/descriptor/verifyTransaction.js +108 -0
  157. package/dist/{src → cjs/src}/transaction/explainTransaction.d.ts +4 -3
  158. package/dist/cjs/src/transaction/explainTransaction.d.ts.map +1 -0
  159. package/dist/cjs/src/transaction/explainTransaction.js +88 -0
  160. package/dist/cjs/src/transaction/fetchInputs.d.ts.map +1 -0
  161. package/dist/cjs/src/transaction/fetchInputs.js +109 -0
  162. package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.d.ts +11 -0
  163. package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.d.ts.map +1 -0
  164. package/dist/cjs/src/transaction/fixedScript/explainPsbtWasm.js +67 -0
  165. package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts +73 -0
  166. package/dist/cjs/src/transaction/fixedScript/explainTransaction.d.ts.map +1 -0
  167. package/dist/cjs/src/transaction/fixedScript/explainTransaction.js +344 -0
  168. package/dist/{src → cjs/src}/transaction/fixedScript/index.d.ts +1 -0
  169. package/dist/cjs/src/transaction/fixedScript/index.d.ts.map +1 -0
  170. package/dist/{src → cjs/src}/transaction/fixedScript/index.js +4 -2
  171. package/dist/{src → cjs/src}/transaction/fixedScript/parseOutput.d.ts +3 -1
  172. package/dist/cjs/src/transaction/fixedScript/parseOutput.d.ts.map +1 -0
  173. package/dist/cjs/src/transaction/fixedScript/parseOutput.js +220 -0
  174. package/dist/{src → cjs/src}/transaction/fixedScript/parseTransaction.d.ts +2 -1
  175. package/dist/cjs/src/transaction/fixedScript/parseTransaction.d.ts.map +1 -0
  176. package/dist/cjs/src/transaction/fixedScript/parseTransaction.js +215 -0
  177. package/dist/cjs/src/transaction/fixedScript/signTransaction.d.ts.map +1 -0
  178. package/dist/cjs/src/transaction/fixedScript/signTransaction.js +101 -0
  179. package/dist/cjs/src/transaction/fixedScript/verifyTransaction.d.ts.map +1 -0
  180. package/dist/cjs/src/transaction/fixedScript/verifyTransaction.js +198 -0
  181. package/dist/cjs/src/transaction/getPayGoVerificationPubkey.d.ts.map +1 -0
  182. package/dist/{src → cjs/src}/transaction/getPayGoVerificationPubkey.js +1 -1
  183. package/dist/{src → cjs/src}/transaction/index.d.ts +1 -0
  184. package/dist/cjs/src/transaction/index.d.ts.map +1 -0
  185. package/dist/{src → cjs/src}/transaction/index.js +2 -1
  186. package/dist/cjs/src/transaction/outputDifference.d.ts.map +1 -0
  187. package/dist/cjs/src/transaction/outputDifference.js +47 -0
  188. package/dist/{src → cjs/src}/transaction/parseTransaction.d.ts +2 -1
  189. package/dist/cjs/src/transaction/parseTransaction.d.ts.map +1 -0
  190. package/dist/{src → cjs/src}/transaction/parseTransaction.js +1 -1
  191. package/dist/cjs/src/transaction/recipient.d.ts.map +1 -0
  192. package/dist/cjs/src/transaction/recipient.js +88 -0
  193. package/dist/cjs/src/transaction/signTransaction.d.ts.map +1 -0
  194. package/dist/cjs/src/transaction/signTransaction.js +102 -0
  195. package/dist/cjs/src/transaction/types.d.ts +44 -0
  196. package/dist/cjs/src/transaction/types.d.ts.map +1 -0
  197. package/dist/cjs/src/transaction/types.js +3 -0
  198. package/dist/cjs/src/transaction/verifyTransaction.d.ts.map +1 -0
  199. package/dist/{src → cjs/src}/transaction/verifyTransaction.js +1 -1
  200. package/dist/{src → cjs/src}/verifyKey.d.ts +2 -1
  201. package/dist/cjs/src/verifyKey.d.ts.map +1 -0
  202. package/dist/cjs/src/verifyKey.js +164 -0
  203. package/dist/cjs/src/wallet.d.ts.map +1 -0
  204. package/dist/cjs/src/wallet.js +8 -0
  205. package/dist/cjs/test/integration/impl/bch/bch.d.ts +2 -0
  206. package/dist/cjs/test/integration/impl/bch/bch.d.ts.map +1 -0
  207. package/dist/cjs/test/integration/impl/bch/bch.js +74 -0
  208. package/dist/cjs/test/unit/address.d.ts +2 -0
  209. package/dist/cjs/test/unit/address.d.ts.map +1 -0
  210. package/dist/cjs/test/unit/address.js +182 -0
  211. package/dist/cjs/test/unit/bip322.d.ts +2 -0
  212. package/dist/cjs/test/unit/bip322.d.ts.map +1 -0
  213. package/dist/cjs/test/unit/bip322.js +45 -0
  214. package/dist/cjs/test/unit/coins.d.ts +2 -0
  215. package/dist/cjs/test/unit/coins.d.ts.map +1 -0
  216. package/dist/cjs/test/unit/coins.js +97 -0
  217. package/dist/cjs/test/unit/customChangeWallet.d.ts +2 -0
  218. package/dist/cjs/test/unit/customChangeWallet.d.ts.map +1 -0
  219. package/dist/cjs/test/unit/customChangeWallet.js +154 -0
  220. package/dist/cjs/test/unit/customSigner.d.ts +3 -0
  221. package/dist/cjs/test/unit/customSigner.d.ts.map +1 -0
  222. package/dist/cjs/test/unit/customSigner.js +108 -0
  223. package/dist/cjs/test/unit/descriptor/NamedDescriptor.d.ts +2 -0
  224. package/dist/cjs/test/unit/descriptor/NamedDescriptor.d.ts.map +1 -0
  225. package/dist/cjs/test/unit/descriptor/NamedDescriptor.js +18 -0
  226. package/dist/cjs/test/unit/descriptor/builder.d.ts +2 -0
  227. package/dist/cjs/test/unit/descriptor/builder.d.ts.map +1 -0
  228. package/dist/cjs/test/unit/descriptor/builder.js +72 -0
  229. package/dist/cjs/test/unit/descriptor/createWallet/createDescriptors.d.ts +2 -0
  230. package/dist/cjs/test/unit/descriptor/createWallet/createDescriptors.d.ts.map +1 -0
  231. package/dist/cjs/test/unit/descriptor/createWallet/createDescriptors.js +20 -0
  232. package/dist/cjs/test/unit/descriptor/descriptorWallet.d.ts +2 -0
  233. package/dist/cjs/test/unit/descriptor/descriptorWallet.d.ts.map +1 -0
  234. package/dist/cjs/test/unit/descriptor/descriptorWallet.js +28 -0
  235. package/dist/cjs/test/unit/descriptorAddress.d.ts +3 -0
  236. package/dist/cjs/test/unit/descriptorAddress.d.ts.map +1 -0
  237. package/dist/cjs/test/unit/descriptorAddress.js +102 -0
  238. package/dist/cjs/test/unit/explainTransaction.d.ts +2 -0
  239. package/dist/cjs/test/unit/explainTransaction.d.ts.map +1 -0
  240. package/dist/cjs/test/unit/explainTransaction.js +74 -0
  241. package/dist/cjs/test/unit/fixtures/bip322/fixtures.d.ts +15 -0
  242. package/dist/cjs/test/unit/fixtures/bip322/fixtures.d.ts.map +1 -0
  243. package/dist/cjs/test/unit/fixtures/bip322/fixtures.js +51 -0
  244. package/dist/cjs/test/unit/fixtures/psbtHexProof.d.ts +4 -0
  245. package/dist/cjs/test/unit/fixtures/psbtHexProof.d.ts.map +1 -0
  246. package/dist/cjs/test/unit/fixtures/psbtHexProof.js +9 -0
  247. package/dist/cjs/test/unit/impl/bch/unit/bch.d.ts +2 -0
  248. package/dist/cjs/test/unit/impl/bch/unit/bch.d.ts.map +1 -0
  249. package/dist/cjs/test/unit/impl/bch/unit/bch.js +138 -0
  250. package/dist/cjs/test/unit/impl/bcha/unit/index.d.ts +2 -0
  251. package/dist/cjs/test/unit/impl/bcha/unit/index.d.ts.map +1 -0
  252. package/dist/cjs/test/unit/impl/bcha/unit/index.js +47 -0
  253. package/dist/cjs/test/unit/impl/bsv/unit/index.d.ts +2 -0
  254. package/dist/cjs/test/unit/impl/bsv/unit/index.d.ts.map +1 -0
  255. package/dist/cjs/test/unit/impl/bsv/unit/index.js +32 -0
  256. package/dist/cjs/test/unit/impl/btc/unit/btc.d.ts +2 -0
  257. package/dist/cjs/test/unit/impl/btc/unit/btc.d.ts.map +1 -0
  258. package/dist/cjs/test/unit/impl/btc/unit/btc.js +220 -0
  259. package/dist/cjs/test/unit/impl/btc/unit/fixtures/btcBackupKey.d.ts +4 -0
  260. package/dist/cjs/test/unit/impl/btc/unit/fixtures/btcBackupKey.d.ts.map +1 -0
  261. package/dist/cjs/test/unit/impl/btc/unit/fixtures/btcBackupKey.js +10 -0
  262. package/dist/cjs/test/unit/impl/btc/unit/fixtures/index.d.ts +2 -0
  263. package/dist/cjs/test/unit/impl/btc/unit/fixtures/index.d.ts.map +1 -0
  264. package/dist/cjs/test/unit/impl/btc/unit/fixtures/index.js +18 -0
  265. package/dist/cjs/test/unit/impl/btg/unit/index.d.ts +2 -0
  266. package/dist/cjs/test/unit/impl/btg/unit/index.d.ts.map +1 -0
  267. package/dist/cjs/test/unit/impl/btg/unit/index.js +29 -0
  268. package/dist/cjs/test/unit/impl/dash/unit/index.d.ts +2 -0
  269. package/dist/cjs/test/unit/impl/dash/unit/index.d.ts.map +1 -0
  270. package/dist/cjs/test/unit/impl/dash/unit/index.js +32 -0
  271. package/dist/cjs/test/unit/impl/doge/unit/index.d.ts +2 -0
  272. package/dist/cjs/test/unit/impl/doge/unit/index.d.ts.map +1 -0
  273. package/dist/cjs/test/unit/impl/doge/unit/index.js +32 -0
  274. package/dist/cjs/test/unit/impl/ltc/unit/index.d.ts +2 -0
  275. package/dist/cjs/test/unit/impl/ltc/unit/index.d.ts.map +1 -0
  276. package/dist/cjs/test/unit/impl/ltc/unit/index.js +39 -0
  277. package/dist/cjs/test/unit/impl/zec/unit/index.d.ts +2 -0
  278. package/dist/cjs/test/unit/impl/zec/unit/index.d.ts.map +1 -0
  279. package/dist/cjs/test/unit/impl/zec/unit/index.js +29 -0
  280. package/dist/cjs/test/unit/keySignatures.d.ts +2 -0
  281. package/dist/cjs/test/unit/keySignatures.d.ts.map +1 -0
  282. package/dist/cjs/test/unit/keySignatures.js +54 -0
  283. package/dist/cjs/test/unit/keychains.d.ts +2 -0
  284. package/dist/cjs/test/unit/keychains.d.ts.map +1 -0
  285. package/dist/cjs/test/unit/keychains.js +49 -0
  286. package/dist/cjs/test/unit/offlineVault/halfSigned.d.ts +2 -0
  287. package/dist/cjs/test/unit/offlineVault/halfSigned.d.ts.map +1 -0
  288. package/dist/cjs/test/unit/offlineVault/halfSigned.js +124 -0
  289. package/dist/cjs/test/unit/parseTransaction.d.ts +2 -0
  290. package/dist/cjs/test/unit/parseTransaction.d.ts.map +1 -0
  291. package/dist/cjs/test/unit/parseTransaction.js +125 -0
  292. package/dist/cjs/test/unit/prebuildAndSign.d.ts +6 -0
  293. package/dist/cjs/test/unit/prebuildAndSign.d.ts.map +1 -0
  294. package/dist/cjs/test/unit/prebuildAndSign.js +270 -0
  295. package/dist/cjs/test/unit/recovery/backupKeyRecovery.d.ts +2 -0
  296. package/dist/cjs/test/unit/recovery/backupKeyRecovery.d.ts.map +1 -0
  297. package/dist/cjs/test/unit/recovery/backupKeyRecovery.js +286 -0
  298. package/dist/cjs/test/unit/recovery/crossChainRecovery.d.ts +2 -0
  299. package/dist/cjs/test/unit/recovery/crossChainRecovery.d.ts.map +1 -0
  300. package/dist/cjs/test/unit/recovery/crossChainRecovery.js +283 -0
  301. package/dist/cjs/test/unit/recovery/mock.d.ts +30 -0
  302. package/dist/cjs/test/unit/recovery/mock.d.ts.map +1 -0
  303. package/dist/cjs/test/unit/recovery/mock.js +138 -0
  304. package/dist/cjs/test/unit/transaction/descriptor/explainPsbt.d.ts +2 -0
  305. package/dist/cjs/test/unit/transaction/descriptor/explainPsbt.d.ts.map +1 -0
  306. package/dist/cjs/test/unit/transaction/descriptor/explainPsbt.js +30 -0
  307. package/dist/cjs/test/unit/transaction/descriptor/fixtures.utils.d.ts +6 -0
  308. package/dist/cjs/test/unit/transaction/descriptor/fixtures.utils.d.ts.map +1 -0
  309. package/dist/cjs/test/unit/transaction/descriptor/fixtures.utils.js +17 -0
  310. package/dist/cjs/test/unit/transaction/descriptor/outputDifference.d.ts +2 -0
  311. package/dist/cjs/test/unit/transaction/descriptor/outputDifference.d.ts.map +1 -0
  312. package/dist/cjs/test/unit/transaction/descriptor/outputDifference.js +76 -0
  313. package/dist/cjs/test/unit/transaction/descriptor/parse.d.ts +2 -0
  314. package/dist/cjs/test/unit/transaction/descriptor/parse.d.ts.map +1 -0
  315. package/dist/cjs/test/unit/transaction/descriptor/parse.js +135 -0
  316. package/dist/cjs/test/unit/transaction/descriptor/sign.d.ts +2 -0
  317. package/dist/cjs/test/unit/transaction/descriptor/sign.d.ts.map +1 -0
  318. package/dist/cjs/test/unit/transaction/descriptor/sign.js +32 -0
  319. package/dist/cjs/test/unit/transaction/descriptor/validatePolicy.d.ts +2 -0
  320. package/dist/cjs/test/unit/transaction/descriptor/validatePolicy.d.ts.map +1 -0
  321. package/dist/cjs/test/unit/transaction/descriptor/validatePolicy.js +48 -0
  322. package/dist/cjs/test/unit/transaction/fixedScript/explainPsbt.d.ts +2 -0
  323. package/dist/cjs/test/unit/transaction/fixedScript/explainPsbt.d.ts.map +1 -0
  324. package/dist/cjs/test/unit/transaction/fixedScript/explainPsbt.js +132 -0
  325. package/dist/cjs/test/unit/transaction/fixedScript/parsePsbt.d.ts +2 -0
  326. package/dist/cjs/test/unit/transaction/fixedScript/parsePsbt.d.ts.map +1 -0
  327. package/dist/cjs/test/unit/transaction/fixedScript/parsePsbt.js +288 -0
  328. package/dist/cjs/test/unit/transaction/fixedScript/util.d.ts +3 -0
  329. package/dist/cjs/test/unit/transaction/fixedScript/util.d.ts.map +1 -0
  330. package/dist/cjs/test/unit/transaction/fixedScript/util.js +46 -0
  331. package/dist/cjs/test/unit/transaction.d.ts +2 -0
  332. package/dist/cjs/test/unit/transaction.d.ts.map +1 -0
  333. package/dist/cjs/test/unit/transaction.js +501 -0
  334. package/dist/cjs/test/unit/txFormat.d.ts +30 -0
  335. package/dist/cjs/test/unit/txFormat.d.ts.map +1 -0
  336. package/dist/cjs/test/unit/txFormat.js +174 -0
  337. package/dist/cjs/test/unit/util/fixtures.d.ts +14 -0
  338. package/dist/cjs/test/unit/util/fixtures.d.ts.map +1 -0
  339. package/dist/cjs/test/unit/util/fixtures.js +102 -0
  340. package/dist/cjs/test/unit/util/index.d.ts +7 -0
  341. package/dist/cjs/test/unit/util/index.d.ts.map +1 -0
  342. package/dist/cjs/test/unit/util/index.js +23 -0
  343. package/dist/cjs/test/unit/util/keychains.d.ts +26 -0
  344. package/dist/cjs/test/unit/util/keychains.d.ts.map +1 -0
  345. package/dist/cjs/test/unit/util/keychains.js +72 -0
  346. package/dist/cjs/test/unit/util/nockBitGo.d.ts +3 -0
  347. package/dist/cjs/test/unit/util/nockBitGo.d.ts.map +1 -0
  348. package/dist/cjs/test/unit/util/nockBitGo.js +11 -0
  349. package/dist/cjs/test/unit/util/nockIndexerAPI.d.ts +8 -0
  350. package/dist/cjs/test/unit/util/nockIndexerAPI.d.ts.map +1 -0
  351. package/dist/cjs/test/unit/util/nockIndexerAPI.js +56 -0
  352. package/dist/cjs/test/unit/util/transaction.d.ts +24 -0
  353. package/dist/cjs/test/unit/util/transaction.d.ts.map +1 -0
  354. package/dist/cjs/test/unit/util/transaction.js +107 -0
  355. package/dist/cjs/test/unit/util/unspents.d.ts +13 -0
  356. package/dist/cjs/test/unit/util/unspents.d.ts.map +1 -0
  357. package/dist/cjs/test/unit/util/unspents.js +106 -0
  358. package/dist/cjs/test/unit/util/utxoCoins.d.ts +8 -0
  359. package/dist/cjs/test/unit/util/utxoCoins.d.ts.map +1 -0
  360. package/dist/cjs/test/unit/util/utxoCoins.js +95 -0
  361. package/dist/cjs/test/unit/util/wallet.d.ts +4 -0
  362. package/dist/cjs/test/unit/util/wallet.d.ts.map +1 -0
  363. package/dist/cjs/test/unit/util/wallet.js +9 -0
  364. package/dist/cjs/test/unit/verifyTransaction.d.ts +2 -0
  365. package/dist/cjs/test/unit/verifyTransaction.d.ts.map +1 -0
  366. package/dist/cjs/test/unit/verifyTransaction.js +327 -0
  367. package/dist/cjs/test/unit/wallet.d.ts +2 -0
  368. package/dist/cjs/test/unit/wallet.d.ts.map +1 -0
  369. package/dist/cjs/test/unit/wallet.js +248 -0
  370. package/dist/cjs/tsconfig.tsbuildinfo +1 -0
  371. package/dist/esm/abstractUtxoCoin.d.ts +418 -0
  372. package/dist/esm/abstractUtxoCoin.d.ts.map +1 -0
  373. package/dist/esm/abstractUtxoCoin.js +589 -0
  374. package/dist/esm/address/fixedScript.d.ts +49 -0
  375. package/dist/esm/address/fixedScript.d.ts.map +1 -0
  376. package/dist/esm/address/fixedScript.js +114 -0
  377. package/dist/esm/address/index.d.ts +2 -0
  378. package/dist/esm/address/index.js +2 -0
  379. package/dist/esm/config.d.ts +9 -0
  380. package/dist/esm/config.js +11 -0
  381. package/dist/esm/descriptor/NamedDescriptor.d.ts +20 -0
  382. package/dist/esm/descriptor/NamedDescriptor.js +39 -0
  383. package/dist/esm/descriptor/assertDescriptorWalletAddress.d.ts +5 -0
  384. package/dist/esm/descriptor/assertDescriptorWalletAddress.js +27 -0
  385. package/dist/esm/descriptor/builder/builder.d.ts +13 -0
  386. package/dist/esm/descriptor/builder/builder.js +34 -0
  387. package/dist/esm/descriptor/builder/index.d.ts +3 -0
  388. package/dist/esm/descriptor/builder/index.js +3 -0
  389. package/dist/esm/descriptor/builder/parse.d.ts +5 -0
  390. package/dist/esm/descriptor/builder/parse.js +112 -0
  391. package/dist/esm/descriptor/createWallet/createDescriptorWallet.d.ts +20 -0
  392. package/dist/esm/descriptor/createWallet/createDescriptorWallet.js +37 -0
  393. package/dist/esm/descriptor/createWallet/createDescriptors.d.ts +12 -0
  394. package/dist/esm/descriptor/createWallet/createDescriptors.js +29 -0
  395. package/dist/esm/descriptor/createWallet/index.d.ts +3 -0
  396. package/dist/esm/descriptor/createWallet/index.js +3 -0
  397. package/dist/esm/descriptor/descriptorWallet.d.ts +19 -0
  398. package/dist/esm/descriptor/descriptorWallet.js +16 -0
  399. package/dist/esm/descriptor/index.d.ts +8 -0
  400. package/dist/esm/descriptor/index.js +7 -0
  401. package/dist/esm/descriptor/validatePolicy.d.ts +22 -0
  402. package/dist/esm/descriptor/validatePolicy.js +80 -0
  403. package/dist/esm/impl/bch/bch.d.ts +20 -0
  404. package/dist/{src → esm}/impl/bch/bch.d.ts.map +1 -1
  405. package/dist/esm/impl/bch/bch.js +37 -0
  406. package/dist/esm/impl/bch/index.d.ts +3 -0
  407. package/dist/esm/impl/bch/index.js +3 -0
  408. package/dist/esm/impl/bch/tbch.d.ts +10 -0
  409. package/dist/esm/impl/bch/tbch.js +11 -0
  410. package/dist/esm/impl/bcha/bcha.d.ts +8 -0
  411. package/dist/{src → esm}/impl/bcha/bcha.d.ts.map +1 -1
  412. package/dist/esm/impl/bcha/bcha.js +11 -0
  413. package/dist/esm/impl/bcha/index.d.ts +3 -0
  414. package/dist/esm/impl/bcha/index.js +3 -0
  415. package/dist/esm/impl/bcha/tbcha.d.ts +10 -0
  416. package/dist/esm/impl/bcha/tbcha.js +11 -0
  417. package/dist/esm/impl/bsv/bsv.d.ts +8 -0
  418. package/dist/esm/impl/bsv/bsv.js +11 -0
  419. package/dist/esm/impl/bsv/index.d.ts +3 -0
  420. package/dist/esm/impl/bsv/index.js +3 -0
  421. package/dist/esm/impl/bsv/tbsv.d.ts +10 -0
  422. package/dist/esm/impl/bsv/tbsv.js +11 -0
  423. package/dist/esm/impl/btc/btc.d.ts +13 -0
  424. package/dist/esm/impl/btc/btc.js +18 -0
  425. package/dist/esm/impl/btc/index.d.ts +7 -0
  426. package/dist/esm/impl/btc/index.js +7 -0
  427. package/dist/esm/impl/btc/inscriptionBuilder.d.ts +51 -0
  428. package/dist/esm/impl/btc/inscriptionBuilder.js +143 -0
  429. package/dist/esm/impl/btc/tbtc.d.ts +10 -0
  430. package/dist/esm/impl/btc/tbtc.js +11 -0
  431. package/dist/esm/impl/btc/tbtc4.d.ts +10 -0
  432. package/dist/esm/impl/btc/tbtc4.js +11 -0
  433. package/dist/esm/impl/btc/tbtcbgsig.d.ts +10 -0
  434. package/dist/esm/impl/btc/tbtcbgsig.js +11 -0
  435. package/dist/esm/impl/btc/tbtcsig.d.ts +10 -0
  436. package/dist/esm/impl/btc/tbtcsig.js +11 -0
  437. package/dist/esm/impl/btg/btg.d.ts +7 -0
  438. package/dist/esm/impl/btg/btg.js +11 -0
  439. package/dist/esm/impl/btg/index.d.ts +2 -0
  440. package/dist/esm/impl/btg/index.js +2 -0
  441. package/dist/esm/impl/dash/dash.d.ts +7 -0
  442. package/dist/esm/impl/dash/dash.js +11 -0
  443. package/dist/esm/impl/dash/index.d.ts +3 -0
  444. package/dist/esm/impl/dash/index.js +3 -0
  445. package/dist/esm/impl/dash/tdash.d.ts +10 -0
  446. package/dist/esm/impl/dash/tdash.js +11 -0
  447. package/dist/esm/impl/doge/doge.d.ts +32 -0
  448. package/dist/esm/impl/doge/doge.d.ts.map +1 -0
  449. package/dist/esm/impl/doge/doge.js +75 -0
  450. package/dist/esm/impl/doge/index.d.ts +3 -0
  451. package/dist/esm/impl/doge/index.js +3 -0
  452. package/dist/esm/impl/doge/tdoge.d.ts +10 -0
  453. package/dist/esm/impl/doge/tdoge.js +11 -0
  454. package/dist/esm/impl/index.d.ts +10 -0
  455. package/dist/esm/impl/index.js +10 -0
  456. package/dist/esm/impl/ltc/index.d.ts +3 -0
  457. package/dist/esm/impl/ltc/index.js +3 -0
  458. package/dist/esm/impl/ltc/ltc.d.ts +7 -0
  459. package/dist/esm/impl/ltc/ltc.js +15 -0
  460. package/dist/esm/impl/ltc/tltc.d.ts +7 -0
  461. package/dist/esm/impl/ltc/tltc.js +14 -0
  462. package/dist/esm/impl/zec/index.d.ts +3 -0
  463. package/dist/esm/impl/zec/index.js +3 -0
  464. package/dist/esm/impl/zec/tzec.d.ts +7 -0
  465. package/dist/esm/impl/zec/tzec.js +11 -0
  466. package/dist/esm/impl/zec/zec.d.ts +10 -0
  467. package/dist/esm/impl/zec/zec.js +11 -0
  468. package/dist/esm/index.d.ts +21 -0
  469. package/dist/esm/index.js +21 -0
  470. package/dist/esm/keychains.d.ts +52 -0
  471. package/dist/esm/keychains.d.ts.map +1 -0
  472. package/dist/esm/keychains.js +92 -0
  473. package/dist/esm/names.d.ts +26 -0
  474. package/dist/esm/names.js +171 -0
  475. package/dist/esm/offlineVault/OfflineVaultHalfSigned.d.ts +8 -0
  476. package/dist/esm/offlineVault/OfflineVaultHalfSigned.js +23 -0
  477. package/dist/esm/offlineVault/OfflineVaultSignable.d.ts +46 -0
  478. package/dist/esm/offlineVault/OfflineVaultSignable.js +18 -0
  479. package/dist/esm/offlineVault/TransactionExplanation.d.ts +15 -0
  480. package/dist/esm/offlineVault/TransactionExplanation.js +13 -0
  481. package/dist/esm/offlineVault/descriptor/index.d.ts +2 -0
  482. package/dist/esm/offlineVault/descriptor/index.js +2 -0
  483. package/dist/esm/offlineVault/descriptor/transaction.d.ts +38 -0
  484. package/dist/esm/offlineVault/descriptor/transaction.js +41 -0
  485. package/dist/esm/offlineVault/index.d.ts +6 -0
  486. package/dist/esm/offlineVault/index.js +4 -0
  487. package/dist/esm/recovery/RecoveryProvider.d.ts +22 -0
  488. package/dist/{src → esm}/recovery/RecoveryProvider.js +6 -9
  489. package/dist/esm/recovery/backupKeyRecovery.d.ts +88 -0
  490. package/dist/esm/recovery/backupKeyRecovery.d.ts.map +1 -0
  491. package/dist/esm/recovery/backupKeyRecovery.js +336 -0
  492. package/dist/esm/recovery/baseApi.d.ts +24 -0
  493. package/dist/esm/recovery/baseApi.js +64 -0
  494. package/dist/esm/recovery/coingeckoApi.d.ts +6 -0
  495. package/dist/esm/recovery/coingeckoApi.js +40 -0
  496. package/dist/esm/recovery/crossChainRecovery.d.ts +86 -0
  497. package/dist/esm/recovery/crossChainRecovery.js +325 -0
  498. package/dist/esm/recovery/index.d.ts +7 -0
  499. package/dist/esm/recovery/index.js +7 -0
  500. package/dist/esm/recovery/mempoolApi.d.ts +7 -0
  501. package/dist/esm/recovery/mempoolApi.js +29 -0
  502. package/dist/esm/replayProtection.d.ts +5 -0
  503. package/dist/esm/replayProtection.d.ts.map +1 -0
  504. package/dist/esm/replayProtection.js +20 -0
  505. package/dist/esm/sign.d.ts +54 -0
  506. package/dist/esm/sign.js +162 -0
  507. package/dist/esm/transaction/bip322.d.ts +27 -0
  508. package/dist/esm/transaction/bip322.js +86 -0
  509. package/dist/esm/transaction/common/verifyPayGoAmount.d.ts +1 -0
  510. package/dist/{src → esm}/transaction/common/verifyPayGoAmount.js +0 -2
  511. package/dist/esm/transaction/descriptor/explainPsbt.d.ts +5 -0
  512. package/dist/esm/transaction/descriptor/explainPsbt.d.ts.map +1 -0
  513. package/dist/esm/transaction/descriptor/explainPsbt.js +44 -0
  514. package/dist/esm/transaction/descriptor/index.d.ts +7 -0
  515. package/dist/esm/transaction/descriptor/index.js +6 -0
  516. package/dist/esm/transaction/descriptor/parse.d.ts +16 -0
  517. package/dist/esm/transaction/descriptor/parse.d.ts.map +1 -0
  518. package/dist/esm/transaction/descriptor/parse.js +79 -0
  519. package/dist/esm/transaction/descriptor/parseToAmountType.d.ts +14 -0
  520. package/dist/esm/transaction/descriptor/parseToAmountType.d.ts.map +1 -0
  521. package/dist/esm/transaction/descriptor/parseToAmountType.js +55 -0
  522. package/dist/esm/transaction/descriptor/recipient.d.ts +5 -0
  523. package/dist/{src → esm}/transaction/descriptor/recipient.js +1 -2
  524. package/dist/esm/transaction/descriptor/signPsbt.d.ts +25 -0
  525. package/dist/esm/transaction/descriptor/signPsbt.js +38 -0
  526. package/dist/esm/transaction/descriptor/verifyTransaction.d.ts +36 -0
  527. package/dist/esm/transaction/descriptor/verifyTransaction.d.ts.map +1 -0
  528. package/dist/esm/transaction/descriptor/verifyTransaction.js +65 -0
  529. package/dist/esm/transaction/explainTransaction.d.ts +18 -0
  530. package/dist/esm/transaction/explainTransaction.d.ts.map +1 -0
  531. package/dist/esm/transaction/explainTransaction.js +52 -0
  532. package/dist/esm/transaction/fetchInputs.d.ts +26 -0
  533. package/dist/esm/transaction/fetchInputs.js +72 -0
  534. package/dist/esm/transaction/fixedScript/explainPsbtWasm.d.ts +11 -0
  535. package/dist/esm/transaction/fixedScript/explainPsbtWasm.d.ts.map +1 -0
  536. package/dist/esm/transaction/fixedScript/explainPsbtWasm.js +64 -0
  537. package/dist/esm/transaction/fixedScript/explainTransaction.d.ts +73 -0
  538. package/dist/esm/transaction/fixedScript/explainTransaction.d.ts.map +1 -0
  539. package/dist/esm/transaction/fixedScript/explainTransaction.js +307 -0
  540. package/dist/esm/transaction/fixedScript/index.d.ts +7 -0
  541. package/dist/esm/transaction/fixedScript/index.d.ts.map +1 -0
  542. package/dist/esm/transaction/fixedScript/index.js +6 -0
  543. package/dist/esm/transaction/fixedScript/parseOutput.d.ts +28 -0
  544. package/dist/esm/transaction/fixedScript/parseOutput.d.ts.map +1 -0
  545. package/dist/esm/transaction/fixedScript/parseOutput.js +213 -0
  546. package/dist/esm/transaction/fixedScript/parseTransaction.d.ts +8 -0
  547. package/dist/esm/transaction/fixedScript/parseTransaction.d.ts.map +1 -0
  548. package/dist/esm/transaction/fixedScript/parseTransaction.js +176 -0
  549. package/dist/esm/transaction/fixedScript/signTransaction.d.ts +18 -0
  550. package/dist/esm/transaction/fixedScript/signTransaction.js +95 -0
  551. package/dist/esm/transaction/fixedScript/verifyTransaction.d.ts +21 -0
  552. package/dist/esm/transaction/fixedScript/verifyTransaction.d.ts.map +1 -0
  553. package/dist/esm/transaction/fixedScript/verifyTransaction.js +159 -0
  554. package/dist/esm/transaction/getPayGoVerificationPubkey.d.ts +9 -0
  555. package/dist/esm/transaction/getPayGoVerificationPubkey.js +17 -0
  556. package/dist/esm/transaction/index.d.ts +8 -0
  557. package/dist/esm/transaction/index.d.ts.map +1 -0
  558. package/dist/esm/transaction/index.js +8 -0
  559. package/dist/esm/transaction/outputDifference.d.ts +40 -0
  560. package/dist/esm/transaction/outputDifference.js +42 -0
  561. package/dist/esm/transaction/parseTransaction.d.ts +4 -0
  562. package/dist/esm/transaction/parseTransaction.d.ts.map +1 -0
  563. package/dist/esm/transaction/parseTransaction.js +12 -0
  564. package/dist/esm/transaction/recipient.d.ts +29 -0
  565. package/dist/{src → esm}/transaction/recipient.d.ts.map +1 -1
  566. package/dist/esm/transaction/recipient.js +48 -0
  567. package/dist/esm/transaction/signTransaction.d.ts +6 -0
  568. package/dist/esm/transaction/signTransaction.js +63 -0
  569. package/dist/esm/transaction/types.d.ts +44 -0
  570. package/dist/esm/transaction/types.d.ts.map +1 -0
  571. package/dist/esm/transaction/types.js +2 -0
  572. package/dist/esm/transaction/verifyTransaction.d.ts +4 -0
  573. package/dist/esm/transaction/verifyTransaction.js +14 -0
  574. package/dist/esm/verifyKey.d.ts +29 -0
  575. package/dist/esm/verifyKey.d.ts.map +1 -0
  576. package/dist/esm/verifyKey.js +123 -0
  577. package/dist/esm/wallet.d.ts +15 -0
  578. package/dist/esm/wallet.js +5 -0
  579. package/package.json +32 -15
  580. package/dist/src/abstractUtxoCoin.d.ts.map +0 -1
  581. package/dist/src/abstractUtxoCoin.js +0 -634
  582. package/dist/src/address/fixedScript.d.ts.map +0 -1
  583. package/dist/src/address/fixedScript.js +0 -150
  584. package/dist/src/config.js +0 -14
  585. package/dist/src/descriptor/NamedDescriptor.js +0 -79
  586. package/dist/src/descriptor/assertDescriptorWalletAddress.js +0 -66
  587. package/dist/src/descriptor/builder/builder.js +0 -37
  588. package/dist/src/descriptor/builder/parse.js +0 -116
  589. package/dist/src/descriptor/createWallet/createDescriptorWallet.js +0 -41
  590. package/dist/src/descriptor/createWallet/createDescriptors.js +0 -33
  591. package/dist/src/descriptor/descriptorWallet.js +0 -54
  592. package/dist/src/descriptor/validatePolicy.js +0 -92
  593. package/dist/src/impl/bch/bch.js +0 -70
  594. package/dist/src/impl/bcha/bcha.js +0 -58
  595. package/dist/src/impl/btc/inscriptionBuilder.js +0 -183
  596. package/dist/src/impl/doge/doge.d.ts.map +0 -1
  597. package/dist/src/impl/doge/doge.js +0 -79
  598. package/dist/src/keychains.d.ts.map +0 -1
  599. package/dist/src/keychains.js +0 -104
  600. package/dist/src/names.js +0 -214
  601. package/dist/src/offlineVault/OfflineVaultHalfSigned.js +0 -26
  602. package/dist/src/offlineVault/OfflineVaultSignable.js +0 -55
  603. package/dist/src/offlineVault/TransactionExplanation.js +0 -16
  604. package/dist/src/offlineVault/descriptor/transaction.js +0 -80
  605. package/dist/src/recovery/backupKeyRecovery.d.ts.map +0 -1
  606. package/dist/src/recovery/backupKeyRecovery.js +0 -370
  607. package/dist/src/recovery/baseApi.js +0 -73
  608. package/dist/src/recovery/coingeckoApi.js +0 -44
  609. package/dist/src/recovery/crossChainRecovery.js +0 -364
  610. package/dist/src/recovery/mempoolApi.js +0 -36
  611. package/dist/src/replayProtection.d.ts.map +0 -1
  612. package/dist/src/replayProtection.js +0 -53
  613. package/dist/src/sign.js +0 -205
  614. package/dist/src/transaction/bip322.js +0 -125
  615. package/dist/src/transaction/descriptor/explainPsbt.d.ts.map +0 -1
  616. package/dist/src/transaction/descriptor/explainPsbt.js +0 -80
  617. package/dist/src/transaction/descriptor/parse.d.ts.map +0 -1
  618. package/dist/src/transaction/descriptor/parse.js +0 -116
  619. package/dist/src/transaction/descriptor/parseToAmountType.d.ts.map +0 -1
  620. package/dist/src/transaction/descriptor/parseToAmountType.js +0 -60
  621. package/dist/src/transaction/descriptor/signPsbt.js +0 -43
  622. package/dist/src/transaction/descriptor/verifyTransaction.d.ts.map +0 -1
  623. package/dist/src/transaction/descriptor/verifyTransaction.js +0 -108
  624. package/dist/src/transaction/explainTransaction.d.ts.map +0 -1
  625. package/dist/src/transaction/explainTransaction.js +0 -67
  626. package/dist/src/transaction/fetchInputs.js +0 -109
  627. package/dist/src/transaction/fixedScript/explainTransaction.d.ts +0 -29
  628. package/dist/src/transaction/fixedScript/explainTransaction.d.ts.map +0 -1
  629. package/dist/src/transaction/fixedScript/explainTransaction.js +0 -321
  630. package/dist/src/transaction/fixedScript/index.d.ts.map +0 -1
  631. package/dist/src/transaction/fixedScript/parseOutput.d.ts.map +0 -1
  632. package/dist/src/transaction/fixedScript/parseOutput.js +0 -213
  633. package/dist/src/transaction/fixedScript/parseTransaction.d.ts.map +0 -1
  634. package/dist/src/transaction/fixedScript/parseTransaction.js +0 -203
  635. package/dist/src/transaction/fixedScript/signTransaction.js +0 -101
  636. package/dist/src/transaction/fixedScript/verifyTransaction.d.ts.map +0 -1
  637. package/dist/src/transaction/fixedScript/verifyTransaction.js +0 -198
  638. package/dist/src/transaction/index.d.ts.map +0 -1
  639. package/dist/src/transaction/outputDifference.js +0 -47
  640. package/dist/src/transaction/parseTransaction.d.ts.map +0 -1
  641. package/dist/src/transaction/recipient.js +0 -88
  642. package/dist/src/transaction/signTransaction.js +0 -102
  643. package/dist/src/verifyKey.d.ts.map +0 -1
  644. package/dist/src/verifyKey.js +0 -164
  645. package/dist/src/wallet.js +0 -8
  646. /package/dist/{src → cjs/src}/address/index.d.ts +0 -0
  647. /package/dist/{src → cjs/src}/config.d.ts +0 -0
  648. /package/dist/{src → cjs/src}/descriptor/NamedDescriptor.d.ts +0 -0
  649. /package/dist/{src → cjs/src}/descriptor/assertDescriptorWalletAddress.d.ts +0 -0
  650. /package/dist/{src → cjs/src}/descriptor/builder/builder.d.ts +0 -0
  651. /package/dist/{src → cjs/src}/descriptor/builder/index.d.ts +0 -0
  652. /package/dist/{src → cjs/src}/descriptor/builder/parse.d.ts +0 -0
  653. /package/dist/{src → cjs/src}/descriptor/createWallet/createDescriptorWallet.d.ts +0 -0
  654. /package/dist/{src → cjs/src}/descriptor/createWallet/createDescriptors.d.ts +0 -0
  655. /package/dist/{src → cjs/src}/descriptor/createWallet/index.d.ts +0 -0
  656. /package/dist/{src → cjs/src}/descriptor/descriptorWallet.d.ts +0 -0
  657. /package/dist/{src → cjs/src}/descriptor/index.d.ts +0 -0
  658. /package/dist/{src → cjs/src}/descriptor/validatePolicy.d.ts +0 -0
  659. /package/dist/{src → cjs/src}/impl/bch/bch.d.ts +0 -0
  660. /package/dist/{src → cjs/src}/impl/bch/index.d.ts +0 -0
  661. /package/dist/{src → cjs/src}/impl/bch/tbch.d.ts +0 -0
  662. /package/dist/{src → cjs/src}/impl/bcha/index.d.ts +0 -0
  663. /package/dist/{src → cjs/src}/impl/bcha/tbcha.d.ts +0 -0
  664. /package/dist/{src → cjs/src}/impl/bsv/bsv.d.ts +0 -0
  665. /package/dist/{src → cjs/src}/impl/bsv/index.d.ts +0 -0
  666. /package/dist/{src → cjs/src}/impl/bsv/tbsv.d.ts +0 -0
  667. /package/dist/{src → cjs/src}/impl/btc/btc.d.ts +0 -0
  668. /package/dist/{src → cjs/src}/impl/btc/index.d.ts +0 -0
  669. /package/dist/{src → cjs/src}/impl/btc/inscriptionBuilder.d.ts +0 -0
  670. /package/dist/{src → cjs/src}/impl/btc/tbtc.d.ts +0 -0
  671. /package/dist/{src → cjs/src}/impl/btc/tbtc4.d.ts +0 -0
  672. /package/dist/{src → cjs/src}/impl/btc/tbtcbgsig.d.ts +0 -0
  673. /package/dist/{src → cjs/src}/impl/btc/tbtcsig.d.ts +0 -0
  674. /package/dist/{src → cjs/src}/impl/btg/btg.d.ts +0 -0
  675. /package/dist/{src → cjs/src}/impl/btg/index.d.ts +0 -0
  676. /package/dist/{src → cjs/src}/impl/dash/dash.d.ts +0 -0
  677. /package/dist/{src → cjs/src}/impl/dash/index.d.ts +0 -0
  678. /package/dist/{src → cjs/src}/impl/dash/tdash.d.ts +0 -0
  679. /package/dist/{src → cjs/src}/impl/doge/index.d.ts +0 -0
  680. /package/dist/{src → cjs/src}/impl/doge/tdoge.d.ts +0 -0
  681. /package/dist/{src → cjs/src}/impl/index.d.ts +0 -0
  682. /package/dist/{src → cjs/src}/impl/ltc/index.d.ts +0 -0
  683. /package/dist/{src → cjs/src}/impl/ltc/ltc.d.ts +0 -0
  684. /package/dist/{src → cjs/src}/impl/ltc/tltc.d.ts +0 -0
  685. /package/dist/{src → cjs/src}/impl/zec/index.d.ts +0 -0
  686. /package/dist/{src → cjs/src}/impl/zec/tzec.d.ts +0 -0
  687. /package/dist/{src → cjs/src}/impl/zec/zec.d.ts +0 -0
  688. /package/dist/{src → cjs/src}/index.d.ts +0 -0
  689. /package/dist/{src → cjs/src}/names.d.ts +0 -0
  690. /package/dist/{src → cjs/src}/offlineVault/OfflineVaultHalfSigned.d.ts +0 -0
  691. /package/dist/{src → cjs/src}/offlineVault/OfflineVaultSignable.d.ts +0 -0
  692. /package/dist/{src → cjs/src}/offlineVault/TransactionExplanation.d.ts +0 -0
  693. /package/dist/{src → cjs/src}/offlineVault/descriptor/index.d.ts +0 -0
  694. /package/dist/{src → cjs/src}/offlineVault/descriptor/transaction.d.ts +0 -0
  695. /package/dist/{src → cjs/src}/offlineVault/index.d.ts +0 -0
  696. /package/dist/{src → cjs/src}/recovery/RecoveryProvider.d.ts +0 -0
  697. /package/dist/{src → cjs/src}/recovery/backupKeyRecovery.d.ts +0 -0
  698. /package/dist/{src → cjs/src}/recovery/baseApi.d.ts +0 -0
  699. /package/dist/{src → cjs/src}/recovery/coingeckoApi.d.ts +0 -0
  700. /package/dist/{src → cjs/src}/recovery/crossChainRecovery.d.ts +0 -0
  701. /package/dist/{src → cjs/src}/recovery/index.d.ts +0 -0
  702. /package/dist/{src → cjs/src}/recovery/mempoolApi.d.ts +0 -0
  703. /package/dist/{src → cjs/src}/sign.d.ts +0 -0
  704. /package/dist/{src → cjs/src}/transaction/bip322.d.ts +0 -0
  705. /package/dist/{src → cjs/src}/transaction/common/verifyPayGoAmount.d.ts +0 -0
  706. /package/dist/{src → cjs/src}/transaction/descriptor/index.d.ts +0 -0
  707. /package/dist/{src → cjs/src}/transaction/descriptor/recipient.d.ts +0 -0
  708. /package/dist/{src → cjs/src}/transaction/descriptor/signPsbt.d.ts +0 -0
  709. /package/dist/{src → cjs/src}/transaction/fetchInputs.d.ts +0 -0
  710. /package/dist/{src → cjs/src}/transaction/fixedScript/signTransaction.d.ts +0 -0
  711. /package/dist/{src → cjs/src}/transaction/fixedScript/verifyTransaction.d.ts +0 -0
  712. /package/dist/{src → cjs/src}/transaction/getPayGoVerificationPubkey.d.ts +0 -0
  713. /package/dist/{src → cjs/src}/transaction/outputDifference.d.ts +0 -0
  714. /package/dist/{src → cjs/src}/transaction/recipient.d.ts +0 -0
  715. /package/dist/{src → cjs/src}/transaction/signTransaction.d.ts +0 -0
  716. /package/dist/{src → cjs/src}/transaction/verifyTransaction.d.ts +0 -0
  717. /package/dist/{src → cjs/src}/wallet.d.ts +0 -0
  718. /package/dist/{src → esm}/address/index.d.ts.map +0 -0
  719. /package/dist/{src → esm}/config.d.ts.map +0 -0
  720. /package/dist/{src → esm}/descriptor/NamedDescriptor.d.ts.map +0 -0
  721. /package/dist/{src → esm}/descriptor/assertDescriptorWalletAddress.d.ts.map +0 -0
  722. /package/dist/{src → esm}/descriptor/builder/builder.d.ts.map +0 -0
  723. /package/dist/{src → esm}/descriptor/builder/index.d.ts.map +0 -0
  724. /package/dist/{src → esm}/descriptor/builder/parse.d.ts.map +0 -0
  725. /package/dist/{src → esm}/descriptor/createWallet/createDescriptorWallet.d.ts.map +0 -0
  726. /package/dist/{src → esm}/descriptor/createWallet/createDescriptors.d.ts.map +0 -0
  727. /package/dist/{src → esm}/descriptor/createWallet/index.d.ts.map +0 -0
  728. /package/dist/{src → esm}/descriptor/descriptorWallet.d.ts.map +0 -0
  729. /package/dist/{src → esm}/descriptor/index.d.ts.map +0 -0
  730. /package/dist/{src → esm}/descriptor/validatePolicy.d.ts.map +0 -0
  731. /package/dist/{src → esm}/impl/bch/index.d.ts.map +0 -0
  732. /package/dist/{src → esm}/impl/bch/tbch.d.ts.map +0 -0
  733. /package/dist/{src → esm}/impl/bcha/index.d.ts.map +0 -0
  734. /package/dist/{src → esm}/impl/bcha/tbcha.d.ts.map +0 -0
  735. /package/dist/{src → esm}/impl/bsv/bsv.d.ts.map +0 -0
  736. /package/dist/{src → esm}/impl/bsv/index.d.ts.map +0 -0
  737. /package/dist/{src → esm}/impl/bsv/tbsv.d.ts.map +0 -0
  738. /package/dist/{src → esm}/impl/btc/btc.d.ts.map +0 -0
  739. /package/dist/{src → esm}/impl/btc/index.d.ts.map +0 -0
  740. /package/dist/{src → esm}/impl/btc/inscriptionBuilder.d.ts.map +0 -0
  741. /package/dist/{src → esm}/impl/btc/tbtc.d.ts.map +0 -0
  742. /package/dist/{src → esm}/impl/btc/tbtc4.d.ts.map +0 -0
  743. /package/dist/{src → esm}/impl/btc/tbtcbgsig.d.ts.map +0 -0
  744. /package/dist/{src → esm}/impl/btc/tbtcsig.d.ts.map +0 -0
  745. /package/dist/{src → esm}/impl/btg/btg.d.ts.map +0 -0
  746. /package/dist/{src → esm}/impl/btg/index.d.ts.map +0 -0
  747. /package/dist/{src → esm}/impl/dash/dash.d.ts.map +0 -0
  748. /package/dist/{src → esm}/impl/dash/index.d.ts.map +0 -0
  749. /package/dist/{src → esm}/impl/dash/tdash.d.ts.map +0 -0
  750. /package/dist/{src → esm}/impl/doge/index.d.ts.map +0 -0
  751. /package/dist/{src → esm}/impl/doge/tdoge.d.ts.map +0 -0
  752. /package/dist/{src → esm}/impl/index.d.ts.map +0 -0
  753. /package/dist/{src → esm}/impl/ltc/index.d.ts.map +0 -0
  754. /package/dist/{src → esm}/impl/ltc/ltc.d.ts.map +0 -0
  755. /package/dist/{src → esm}/impl/ltc/tltc.d.ts.map +0 -0
  756. /package/dist/{src → esm}/impl/zec/index.d.ts.map +0 -0
  757. /package/dist/{src → esm}/impl/zec/tzec.d.ts.map +0 -0
  758. /package/dist/{src → esm}/impl/zec/zec.d.ts.map +0 -0
  759. /package/dist/{src → esm}/index.d.ts.map +0 -0
  760. /package/dist/{src → esm}/names.d.ts.map +0 -0
  761. /package/dist/{src → esm}/offlineVault/OfflineVaultHalfSigned.d.ts.map +0 -0
  762. /package/dist/{src → esm}/offlineVault/OfflineVaultSignable.d.ts.map +0 -0
  763. /package/dist/{src → esm}/offlineVault/TransactionExplanation.d.ts.map +0 -0
  764. /package/dist/{src → esm}/offlineVault/descriptor/index.d.ts.map +0 -0
  765. /package/dist/{src → esm}/offlineVault/descriptor/transaction.d.ts.map +0 -0
  766. /package/dist/{src → esm}/offlineVault/index.d.ts.map +0 -0
  767. /package/dist/{src → esm}/recovery/RecoveryProvider.d.ts.map +0 -0
  768. /package/dist/{src → esm}/recovery/baseApi.d.ts.map +0 -0
  769. /package/dist/{src → esm}/recovery/coingeckoApi.d.ts.map +0 -0
  770. /package/dist/{src → esm}/recovery/crossChainRecovery.d.ts.map +0 -0
  771. /package/dist/{src → esm}/recovery/index.d.ts.map +0 -0
  772. /package/dist/{src → esm}/recovery/mempoolApi.d.ts.map +0 -0
  773. /package/dist/{src → esm}/sign.d.ts.map +0 -0
  774. /package/dist/{src → esm}/transaction/bip322.d.ts.map +0 -0
  775. /package/dist/{src → esm}/transaction/common/verifyPayGoAmount.d.ts.map +0 -0
  776. /package/dist/{src → esm}/transaction/descriptor/index.d.ts.map +0 -0
  777. /package/dist/{src → esm}/transaction/descriptor/recipient.d.ts.map +0 -0
  778. /package/dist/{src → esm}/transaction/descriptor/signPsbt.d.ts.map +0 -0
  779. /package/dist/{src → esm}/transaction/fetchInputs.d.ts.map +0 -0
  780. /package/dist/{src → esm}/transaction/fixedScript/signTransaction.d.ts.map +0 -0
  781. /package/dist/{src → esm}/transaction/getPayGoVerificationPubkey.d.ts.map +0 -0
  782. /package/dist/{src → esm}/transaction/outputDifference.d.ts.map +0 -0
  783. /package/dist/{src → esm}/transaction/signTransaction.d.ts.map +0 -0
  784. /package/dist/{src → esm}/transaction/verifyTransaction.d.ts.map +0 -0
  785. /package/dist/{src → esm}/wallet.d.ts.map +0 -0
@@ -0,0 +1,336 @@
1
+ import assert from 'assert';
2
+ import _ from 'lodash';
3
+ import * as utxolib from '@bitgo/utxo-lib';
4
+ import { Dimensions } from '@bitgo/unspents';
5
+ import { ErrorNoInputToRecover, getKrsProvider, getBip32Keys, getIsKrsRecovery, getIsUnsignedSweep, isTriple, krsProviders, } from '@bitgo/sdk-core';
6
+ import { getMainnet, networks } from '@bitgo/utxo-lib';
7
+ import { signAndVerifyPsbt } from '../sign';
8
+ import { generateAddressWithChainAndIndex } from '../address';
9
+ import { forCoin } from './RecoveryProvider';
10
+ import { MempoolApi } from './mempoolApi';
11
+ import { CoingeckoApi } from './coingeckoApi';
12
+ const { getInternalChainCode, scriptTypeForChain, outputScripts, getExternalChainCode } = utxolib.bitgo;
13
+ /**
14
+ * This transforms the txInfo from recover into the format that offline-signing-tool expects
15
+ * @param coinName
16
+ * @param txInfo
17
+ * @param txHex
18
+ * @returns {{txHex: *, txInfo: {unspents: *}, feeInfo: {}, coin: void}}
19
+ */
20
+ function formatForOfflineVault(coinName, txInfo, txHex) {
21
+ return {
22
+ txHex,
23
+ txInfo: {
24
+ unspents: txInfo.inputs.map((input) => {
25
+ assert(input.valueString);
26
+ return { ...input, valueString: input.valueString };
27
+ }),
28
+ },
29
+ feeInfo: {},
30
+ coin: coinName,
31
+ };
32
+ }
33
+ /**
34
+ * Get the current market price from a third party to be used for recovery
35
+ * This function is only intended for non-bitgo recovery transactions, when it is necessary
36
+ * to calculate the rough fee needed to pay to Keyternal. We are okay with approximating,
37
+ * because the resulting price of this function only has less than 1 dollar influence on the
38
+ * fee that needs to be paid to Keyternal.
39
+ *
40
+ * See calculateFeeAmount function: return Math.round(feeAmountUsd / currentPrice * self.getBaseFactor());
41
+ *
42
+ * This end function should not be used as an accurate endpoint, since some coins' prices are missing from the provider
43
+ */
44
+ async function getRecoveryMarketPrice(coin) {
45
+ return await new CoingeckoApi().getUSDPrice(coin.getFamily());
46
+ }
47
+ /**
48
+ * Calculates the amount (in base units) to pay a KRS provider when building a recovery transaction
49
+ * @param coin
50
+ * @param params
51
+ * @param params.provider {String} the KRS provider that holds the backup key
52
+ * @returns {*}
53
+ */
54
+ async function calculateFeeAmount(coin, params) {
55
+ const krsProvider = krsProviders[params.provider];
56
+ if (krsProvider === undefined) {
57
+ throw new Error(`no fee structure specified for provider ${params.provider}`);
58
+ }
59
+ if (krsProvider.feeType === 'flatUsd') {
60
+ const feeAmountUsd = krsProvider.feeAmount;
61
+ const currentPrice = await getRecoveryMarketPrice(coin);
62
+ return Math.round((feeAmountUsd / currentPrice) * coin.getBaseFactor());
63
+ }
64
+ else {
65
+ // we can add more fee structures here as needed for different providers, such as percentage of recovery amount
66
+ throw new Error('Fee structure not implemented');
67
+ }
68
+ }
69
+ /**
70
+ * Generate an address and format it for API queries
71
+ * @param coin - The coin instance
72
+ * @param network - The network to use
73
+ * @param walletKeys - The wallet keys
74
+ * @param chain - The chain code
75
+ * @param addrIndex - The address index
76
+ * @returns The formatted address (with cashaddr prefix stripped for BCH/BCHA)
77
+ */
78
+ function getFormattedAddress(coin, network, walletKeys, chain, addrIndex) {
79
+ const format = coin.getChain() === 'bch' || coin.getChain() === 'bcha' ? 'cashaddr' : undefined;
80
+ const address = generateAddressWithChainAndIndex(network, walletKeys, chain, addrIndex, format);
81
+ // Blockchair uses cashaddr format when querying the API for address information. Strip the prefix for BCH/BCHA.
82
+ return format === 'cashaddr' ? address.split(':')[1] : address;
83
+ }
84
+ async function queryBlockchainUnspentsPath(coin, params, walletKeys, chain) {
85
+ const scriptType = scriptTypeForChain(chain);
86
+ const fetchPrevTx = !utxolib.bitgo.outputScripts.hasWitnessData(scriptType) && getMainnet(coin.network) !== networks.zcash;
87
+ const recoveryProvider = params.recoveryProvider ?? forCoin(coin.getChain(), params.apiKey);
88
+ const MAX_SEQUENTIAL_ADDRESSES_WITHOUT_TXS = params.scan || 20;
89
+ let numSequentialAddressesWithoutTxs = 0;
90
+ const prevTxCache = new Map();
91
+ async function getPrevTx(txid) {
92
+ let prevTxHex = prevTxCache.get(txid);
93
+ if (!prevTxHex) {
94
+ prevTxHex = await recoveryProvider.getTransactionHex(txid);
95
+ prevTxCache.set(txid, prevTxHex);
96
+ }
97
+ return prevTxHex;
98
+ }
99
+ async function gatherUnspents(addrIndex) {
100
+ const formattedAddress = getFormattedAddress(coin, coin.network, walletKeys, chain, addrIndex);
101
+ const addrInfo = await recoveryProvider.getAddressInfo(formattedAddress);
102
+ // we use txCount here because it implies usage - having tx'es means the addr was generated and used
103
+ if (addrInfo.txCount === 0) {
104
+ numSequentialAddressesWithoutTxs++;
105
+ }
106
+ else {
107
+ numSequentialAddressesWithoutTxs = 0;
108
+ if (addrInfo.balance > 0) {
109
+ console.log(`Found an address with balance: ${formattedAddress} with balance ${addrInfo.balance}`);
110
+ const addressUnspents = await recoveryProvider.getUnspentsForAddresses([formattedAddress]);
111
+ const processedUnspents = await Promise.all(addressUnspents.map(async (u) => {
112
+ const { txid, vout } = utxolib.bitgo.parseOutputId(u.id);
113
+ let val = BigInt(u.value);
114
+ if (coin.amountType === 'bigint') {
115
+ // blockchair returns the number with the correct precision, but in number format
116
+ // json parse won't parse it correctly, so we requery the txid for the tx hex to decode here
117
+ if (!Number.isSafeInteger(u.value)) {
118
+ const txHex = await getPrevTx(txid);
119
+ const tx = coin.createTransactionFromHex(txHex);
120
+ val = tx.outs[vout].value;
121
+ }
122
+ }
123
+ // the api may return cashaddr's instead of legacy for BCH and BCHA
124
+ // downstream processes's only expect legacy addresses
125
+ u = { ...u, address: coin.canonicalAddress(u.address) };
126
+ return {
127
+ ...u,
128
+ value: val,
129
+ chain: chain,
130
+ index: addrIndex,
131
+ prevTx: fetchPrevTx ? Buffer.from(await getPrevTx(txid), 'hex') : undefined,
132
+ };
133
+ }));
134
+ walletUnspents.push(...processedUnspents);
135
+ }
136
+ }
137
+ if (numSequentialAddressesWithoutTxs >= MAX_SEQUENTIAL_ADDRESSES_WITHOUT_TXS) {
138
+ // stop searching for addresses with unspents in them, we've found ${MAX_SEQUENTIAL_ADDRESSES_WITHOUT_TXS} in a row with none
139
+ // we are done
140
+ return;
141
+ }
142
+ return gatherUnspents(addrIndex + 1);
143
+ }
144
+ // get unspents for these addresses
145
+ const walletUnspents = [];
146
+ // This will populate walletAddresses
147
+ await gatherUnspents(0);
148
+ if (walletUnspents.length === 0) {
149
+ // Couldn't find any addresses with funds
150
+ return [];
151
+ }
152
+ return walletUnspents;
153
+ }
154
+ async function getRecoveryFeePerBytes(coin, { defaultValue }) {
155
+ if (coin.getFamily() === 'doge') {
156
+ // https://github.com/dogecoin/dogecoin/blob/master/doc/fee-recommendation.md
157
+ // 0.01 DOGE per KB
158
+ return 1000;
159
+ }
160
+ try {
161
+ return await MempoolApi.forCoin(coin.getChain()).getRecoveryFeePerBytes();
162
+ }
163
+ catch (e) {
164
+ console.dir(e);
165
+ return defaultValue;
166
+ }
167
+ }
168
+ /**
169
+ * Builds a funds recovery transaction without BitGo.
170
+ *
171
+ * Returns transaction hex in legacy format for unsigned sweep transaction, half signed backup recovery transaction with KRS provider (only keyternal),
172
+ * fully signed backup recovery transaction without a KRS provider.
173
+ *
174
+ * Returns PSBT hex for half signed backup recovery transaction with KRS provider (excluding keyternal)
175
+ * For PSBT hex cases, Unspents are not required in response.
176
+ *
177
+ * @param coin
178
+ * @param bitgo
179
+ * @param params
180
+ * - userKey: [encrypted] xprv, or xpub
181
+ * - backupKey: [encrypted] xprv, or xpub if the xprv is held by a KRS provider
182
+ * - walletPassphrase: necessary if one of the xprvs is encrypted
183
+ * - bitgoKey: xpub
184
+ * - krsProvider: necessary if backup key is held by KRS
185
+ * - recoveryDestination: target address to send recovered funds to
186
+ * - scan: the amount of consecutive addresses without unspents to scan through before stopping
187
+ * - ignoreAddressTypes: (optional) scripts to ignore
188
+ * for example: ['p2shP2wsh', 'p2wsh'] will prevent code from checking for wrapped-segwit and native-segwit chains on the public block explorers
189
+ */
190
+ export async function backupKeyRecovery(coin, bitgo, params) {
191
+ if (_.isUndefined(params.userKey)) {
192
+ throw new Error('missing userKey');
193
+ }
194
+ if (_.isUndefined(params.backupKey)) {
195
+ throw new Error('missing backupKey');
196
+ }
197
+ if (_.isUndefined(params.recoveryDestination) ||
198
+ !coin.isValidAddress(params.recoveryDestination, { anyFormat: true })) {
199
+ throw new Error('invalid recoveryDestination');
200
+ }
201
+ if (!_.isUndefined(params.scan) && (!_.isInteger(params.scan) || params.scan < 0)) {
202
+ throw new Error('scan must be a positive integer');
203
+ }
204
+ if (params.feeRate !== undefined && (!Number.isFinite(params.feeRate) || params.feeRate <= 0)) {
205
+ throw new Error('feeRate must be a positive number');
206
+ }
207
+ const isKrsRecovery = getIsKrsRecovery(params);
208
+ const isUnsignedSweep = getIsUnsignedSweep(params);
209
+ const responseTxFormat = isUnsignedSweep || !isKrsRecovery || params.krsProvider === 'keyternal' ? 'legacy' : 'psbt';
210
+ const krsProvider = isKrsRecovery ? getKrsProvider(coin, params.krsProvider) : undefined;
211
+ // check whether key material and password authenticate the users and return parent keys of all three keys of the wallet
212
+ const keys = getBip32Keys(bitgo, params, { requireBitGoXpub: true });
213
+ if (!isTriple(keys)) {
214
+ throw new Error(`expected key triple`);
215
+ }
216
+ const walletKeys = new utxolib.bitgo.RootWalletKeys(keys, [
217
+ params.userKeyPath || utxolib.bitgo.RootWalletKeys.defaultPrefix,
218
+ utxolib.bitgo.RootWalletKeys.defaultPrefix,
219
+ utxolib.bitgo.RootWalletKeys.defaultPrefix,
220
+ ]);
221
+ const unspents = (await Promise.all(outputScripts.scriptTypes2Of3
222
+ .filter((addressType) => coin.supportsAddressType(addressType) && !params.ignoreAddressTypes?.includes(addressType))
223
+ .reduce((queries, addressType) => [
224
+ ...queries,
225
+ queryBlockchainUnspentsPath(coin, params, walletKeys, getExternalChainCode(addressType)),
226
+ queryBlockchainUnspentsPath(coin, params, walletKeys, getInternalChainCode(addressType)),
227
+ ], []))).flat();
228
+ // Execute the queries and gather the unspents
229
+ const totalInputAmount = utxolib.bitgo.unspentSum(unspents, 'bigint');
230
+ if (totalInputAmount <= BigInt(0)) {
231
+ throw new ErrorNoInputToRecover();
232
+ }
233
+ // Build the psbt
234
+ const psbt = utxolib.bitgo.createPsbtForNetwork({ network: coin.network });
235
+ // xpubs can become handy for many things.
236
+ utxolib.bitgo.addXpubsToPsbt(psbt, walletKeys);
237
+ const txInfo = {};
238
+ const feePerByte = params.feeRate !== undefined ? params.feeRate : await getRecoveryFeePerBytes(coin, { defaultValue: 50 });
239
+ // KRS recovery transactions have a 2nd output to pay the recovery fee, like paygo fees.
240
+ const dimensions = Dimensions.fromPsbt(psbt).plus(isKrsRecovery ? Dimensions.SingleOutput.p2wsh : Dimensions.ZERO);
241
+ const approximateFee = BigInt(dimensions.getVSize() * feePerByte);
242
+ txInfo.inputs =
243
+ responseTxFormat === 'legacy'
244
+ ? unspents.map((u) => ({ ...u, value: Number(u.value), valueString: u.value.toString(), prevTx: undefined }))
245
+ : undefined;
246
+ unspents.forEach((unspent) => {
247
+ utxolib.bitgo.addWalletUnspentToPsbt(psbt, unspent, walletKeys, 'user', 'backup');
248
+ });
249
+ let krsFee = BigInt(0);
250
+ if (isKrsRecovery && params.krsProvider) {
251
+ try {
252
+ krsFee = BigInt(await calculateFeeAmount(coin, { provider: params.krsProvider }));
253
+ }
254
+ catch (err) {
255
+ // Don't let this error block the recovery -
256
+ console.dir(err);
257
+ }
258
+ }
259
+ const recoveryAmount = totalInputAmount - approximateFee - krsFee;
260
+ if (recoveryAmount < BigInt(0)) {
261
+ throw new Error(`this wallet\'s balance is too low to pay the fees specified by the KRS provider.
262
+ Existing balance on wallet: ${totalInputAmount.toString()}. Estimated network fee for the recovery transaction
263
+ : ${approximateFee.toString()}, KRS fee to pay: ${krsFee.toString()}. After deducting fees, your total
264
+ recoverable balance is ${recoveryAmount.toString()}`);
265
+ }
266
+ const recoveryOutputScript = utxolib.address.toOutputScript(params.recoveryDestination, coin.network);
267
+ psbt.addOutput({ script: recoveryOutputScript, value: recoveryAmount });
268
+ if (krsProvider && krsFee > BigInt(0)) {
269
+ if (!krsProvider.feeAddresses) {
270
+ throw new Error(`keyProvider must define feeAddresses`);
271
+ }
272
+ const krsFeeAddress = krsProvider.feeAddresses[coin.getChain()];
273
+ if (!krsFeeAddress) {
274
+ throw new Error('this KRS provider has not configured their fee structure yet - recovery cannot be completed');
275
+ }
276
+ const krsFeeOutputScript = utxolib.address.toOutputScript(krsFeeAddress, coin.network);
277
+ psbt.addOutput({ script: krsFeeOutputScript, value: krsFee });
278
+ }
279
+ if (isUnsignedSweep) {
280
+ // TODO BTC-317 - When ready to PSBTify OVC, send psbt hex and skip unspents in response.
281
+ const txHex = psbt.getUnsignedTx().toBuffer().toString('hex');
282
+ return formatForOfflineVault(coin.getChain(), txInfo, txHex);
283
+ }
284
+ else {
285
+ signAndVerifyPsbt(psbt, walletKeys.user, { isLastSignature: false });
286
+ if (isKrsRecovery) {
287
+ // The KRS provider keyternal solely supports P2SH, P2WSH, and P2SH-P2WSH input script types.
288
+ // It currently uses an outdated BitGoJS SDK, which relies on a legacy transaction builder for cosigning.
289
+ // Unfortunately, upgrading the keyternal code presents challenges,
290
+ // which hinders the integration of the latest BitGoJS SDK with PSBT signing support.
291
+ txInfo.transactionHex =
292
+ params.krsProvider === 'keyternal'
293
+ ? utxolib.bitgo.extractP2msOnlyHalfSignedTx(psbt).toBuffer().toString('hex')
294
+ : psbt.toHex();
295
+ }
296
+ else {
297
+ const tx = signAndVerifyPsbt(psbt, walletKeys.backup, { isLastSignature: true });
298
+ txInfo.transactionHex = tx.toBuffer().toString('hex');
299
+ }
300
+ }
301
+ if (isKrsRecovery) {
302
+ txInfo.coin = coin.getChain();
303
+ txInfo.backupKey = params.backupKey;
304
+ txInfo.recoveryAmount = Number(recoveryAmount);
305
+ txInfo.recoveryAmountString = recoveryAmount.toString();
306
+ }
307
+ return txInfo;
308
+ }
309
+ export async function v1BackupKeyRecovery(coin, bitgo, params) {
310
+ if (_.isUndefined(params.recoveryDestination) ||
311
+ !coin.isValidAddress(params.recoveryDestination, { anyFormat: true })) {
312
+ throw new Error('invalid recoveryDestination');
313
+ }
314
+ const recoveryFeePerByte = await getRecoveryFeePerBytes(coin, { defaultValue: 50 });
315
+ const v1wallet = await bitgo.wallets().get({ id: params.walletId });
316
+ return await v1wallet.recover({
317
+ ...params,
318
+ feeRate: recoveryFeePerByte,
319
+ });
320
+ }
321
+ export async function v1Sweep(coin, bitgo, params) {
322
+ if (_.isUndefined(params.recoveryDestination) ||
323
+ !coin.isValidAddress(params.recoveryDestination, { anyFormat: true })) {
324
+ throw new Error('invalid recoveryDestination');
325
+ }
326
+ let recoveryFeePerByte = 100;
327
+ if (bitgo.env === 'prod') {
328
+ recoveryFeePerByte = await getRecoveryFeePerBytes(coin, { defaultValue: 100 });
329
+ }
330
+ const v1wallet = await bitgo.wallets().get({ id: params.walletId });
331
+ return await v1wallet.sweep({
332
+ ...params,
333
+ feeRate: recoveryFeePerByte,
334
+ });
335
+ }
336
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja3VwS2V5UmVjb3ZlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmVjb3ZlcnkvYmFja3VwS2V5UmVjb3ZlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRTVCLE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUN2QixPQUFPLEtBQUssT0FBTyxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBRUwscUJBQXFCLEVBQ3JCLGNBQWMsRUFDZCxZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUNsQixRQUFRLEVBQ1IsWUFBWSxHQUNiLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUd2RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDNUMsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRTlELE9BQU8sRUFBRSxPQUFPLEVBQW9CLE1BQU0sb0JBQW9CLENBQUM7QUFDL0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFVOUMsTUFBTSxFQUFFLG9CQUFvQixFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxvQkFBb0IsRUFBRSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFleEc7Ozs7OztHQU1HO0FBQ0gsU0FBUyxxQkFBcUIsQ0FDNUIsUUFBZ0IsRUFDaEIsTUFBMEIsRUFDMUIsS0FBYTtJQUViLE9BQU87UUFDTCxLQUFLO1FBQ0wsTUFBTSxFQUFFO1lBQ04sUUFBUSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMs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LFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUNyRSxDQUFDO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxJQUFJLGtCQUFrQixHQUFHLEdBQUcsQ0FBQztJQUM3QixJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDekIsa0JBQWtCLEdBQUcsTUFBTSxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBRUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3BFLE9BQU8sTUFBTSxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQzFCLEdBQUcsTUFBTTtRQUNULE9BQU8sRUFBRSxrQkFBa0I7S0FDNUIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcbmltcG9ydCB7IERpbWVuc2lvbnMgfSBmcm9tICdAYml0Z28vdW5zcGVudHMnO1xuaW1wb3J0IHtcbiAgQml0R29CYXNlLFxuICBFcnJvck5vSW5wdXRUb1JlY292ZXIsXG4gIGdldEtyc1Byb3ZpZGVyLFxuICBnZXRCaXAzMktleXMsXG4gIGdldElzS3JzUmVjb3ZlcnksXG4gIGdldElzVW5zaWduZWRTd2VlcCxcbiAgaXNUcmlwbGUsXG4gIGtyc1Byb3ZpZGVycyxcbn0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IGdldE1haW5uZXQsIG5ldHdvcmtzIH0gZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcblxuaW1wb3J0IHsgQWJzdHJhY3RVdHhvQ29pbiB9IGZyb20gJy4uL2Fic3RyYWN0VXR4b0NvaW4nO1xuaW1wb3J0IHsgc2lnbkFuZFZlcmlmeVBzYnQgfSBmcm9tICcuLi9zaWduJztcbmltcG9ydCB7IGdlbmVyYXRlQWRkcmVzc1dpdGhDaGFpbkFuZEluZGV4IH0gZnJvbSAnLi4vYWRkcmVzcyc7XG5cbmltcG9ydCB7IGZvckNvaW4sIFJlY292ZXJ5UHJvdmlkZXIgfSBmcm9tICcuL1JlY292ZXJ5UHJvdmlkZXInO1xuaW1wb3J0IHsgTWVtcG9vbEFwaSB9IGZyb20gJy4vbWVtcG9vbEFwaSc7XG5pbXBvcnQgeyBDb2luZ2Vja29BcGkgfSBmcm9tICcuL2NvaW5nZWNrb0FwaSc7XG5cbnR5cGUgU2NyaXB0VHlwZTJPZjMgPSB1dHhvbGliLmJpdGdvLm91dHB1dFNjcmlwdHMuU2NyaXB0VHlwZTJPZjM7XG50eXBlIENoYWluQ29kZSA9IHV0eG9saWIuYml0Z28uQ2hhaW5Db2RlO1xudHlwZSBSb290V2FsbGV0S2V5cyA9IHV0eG9saWIuYml0Z28uUm9vdFdhbGxldEtleXM7XG50eXBlIFdhbGxldFVuc3BlbnQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4gPSB1dHhvbGliLmJpdGdvLldhbGxldFVuc3BlbnQ8VE51bWJlcj47XG50eXBlIFdhbGxldFVuc3BlbnRKU09OID0gdXR4b2xpYi5iaXRnby5XYWxsZXRVbnNwZW50ICYge1xuICB2YWx1ZVN0cmluZzogc3RyaW5nO1xufTtcblxuY29uc3QgeyBnZXRJbnRlcm5hbENoYWluQ29kZSwgc2NyaXB0VHlwZUZvckNoYWluLCBvdXRwdXRTY3JpcHRzLCBnZXRFeHRlcm5hbENoYWluQ29kZSB9ID0gdXR4b2xpYi5iaXRnbztcblxuZXhwb3J0IGludGVyZmFjZSBPZmZsaW5lVmF1bHRUeEluZm8ge1xuICBpbnB1dHM6IFdhbGxldFVuc3BlbnRKU09OW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybWF0dGVkT2ZmbGluZVZhdWx0VHhJbmZvIHtcbiAgdHhJbmZvOiB7XG4gICAgdW5zcGVudHM6IFdhbGxldFVuc3BlbnRKU09OW107XG4gIH07XG4gIHR4SGV4OiBzdHJpbmc7XG4gIGZlZUluZm86IFJlY29yZDxzdHJpbmcsIG5ldmVyPjtcbiAgY29pbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoaXMgdHJhbnNmb3JtcyB0aGUgdHhJbmZvIGZyb20gcmVjb3ZlciBpbnRvIHRoZSBmb3JtYXQgdGhhdCBvZmZsaW5lLXNpZ25pbmctdG9vbCBleHBlY3RzXG4gKiBAcGFyYW0gY29pbk5hbWVcbiAqIEBwYXJhbSB0eEluZm9cbiAqIEBwYXJhbSB0eEhleFxuICogQHJldHVybnMge3t0eEhleDogKiwgdHhJbmZvOiB7dW5zcGVudHM6ICp9LCBmZWVJbmZvOiB7fSwgY29pbjogdm9pZH19XG4gKi9cbmZ1bmN0aW9uIGZvcm1hdEZvck9mZmxpbmVWYXVsdChcbiAgY29pbk5hbWU6IHN0cmluZyxcbiAgdHhJbmZvOiBPZmZsaW5lVmF1bHRUeEluZm8sXG4gIHR4SGV4OiBzdHJpbmdcbik6IEZvcm1hdHRlZE9mZmxpbmVWYXVsdFR4SW5mbyB7XG4gIHJldHVybiB7XG4gICAgdHhIZXgsXG4gICAgdHhJbmZvOiB7XG4gICAgICB1bnNwZW50czogdHhJbmZvLmlucHV0cy5tYXAoKGlucHV0KSA9PiB7XG4gICAgICAgIGFzc2VydChpbnB1dC52YWx1ZVN0cmluZyk7XG4gICAgICAgIHJldHVybiB7IC4uLmlucHV0LCB2YWx1ZVN0cmluZzogaW5wdXQudmFsdWVTdHJpbmcgfTtcbiAgICAgIH0pLFxuICAgIH0sXG4gICAgZmVlSW5mbzoge30sXG4gICAgY29pbjogY29pbk5hbWUsXG4gIH07XG59XG5cbi8qKlxuICogR2V0IHRoZSBjdXJyZW50IG1hcmtldCBwcmljZSBmcm9tIGEgdGhpcmQgcGFydHkgdG8gYmUgdXNlZCBmb3IgcmVjb3ZlcnlcbiAqIFRoaXMgZnVuY3Rpb24gaXMgb25seSBpbnRlbmRlZCBmb3Igbm9uLWJpdGdvIHJlY292ZXJ5IHRyYW5zYWN0aW9ucywgd2hlbiBpdCBpcyBuZWNlc3NhcnlcbiAqIHRvIGNhbGN1bGF0ZSB0aGUgcm91Z2ggZmVlIG5lZWRlZCB0byBwYXkgdG8gS2V5dGVybmFsLiBXZSBhcmUgb2theSB3aXRoIGFwcHJveGltYXRpbmcsXG4gKiBiZWNhdXNlIHRoZSByZXN1bHRpbmcgcHJpY2Ugb2YgdGhpcyBmdW5jdGlvbiBvbmx5IGhhcyBsZXNzIHRoYW4gMSBkb2xsYXIgaW5mbHVlbmNlIG9uIHRoZVxuICogZmVlIHRoYXQgbmVlZHMgdG8gYmUgcGFpZCB0byBLZXl0ZXJuYWwuXG4gKlxuICogU2VlIGNhbGN1bGF0ZUZlZUFtb3VudCBmdW5jdGlvbjogIHJldHVybiBNYXRoLnJvdW5kKGZlZUFtb3VudFVzZCAvIGN1cnJlbnRQcmljZSAqIHNlbGYuZ2V0QmFzZUZhY3RvcigpKTtcbiAqXG4gKiBUaGlzIGVuZCBmdW5jdGlvbiBzaG91bGQgbm90IGJlIHVzZWQgYXMgYW4gYWNjdXJhdGUgZW5kcG9pbnQsIHNpbmNlIHNvbWUgY29pbnMnIHByaWNlcyBhcmUgbWlzc2luZyBmcm9tIHRoZSBwcm92aWRlclxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRSZWNvdmVyeU1hcmtldFByaWNlKGNvaW46IEFic3RyYWN0VXR4b0NvaW4pOiBQcm9taXNlPG51bWJlcj4ge1xuICByZXR1cm4gYXdhaXQgbmV3IENvaW5nZWNrb0FwaSgpLmdldFVTRFByaWNlKGNvaW4uZ2V0RmFtaWx5KCkpO1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGFtb3VudCAoaW4gYmFzZSB1bml0cykgdG8gcGF5IGEgS1JTIHByb3ZpZGVyIHdoZW4gYnVpbGRpbmcgYSByZWNvdmVyeSB0cmFuc2FjdGlvblxuICogQHBhcmFtIGNvaW5cbiAqIEBwYXJhbSBwYXJhbXNcbiAqIEBwYXJhbSBwYXJhbXMucHJvdmlkZXIge1N0cmluZ30gdGhlIEtSUyBwcm92aWRlciB0aGF0IGhvbGRzIHRoZSBiYWNrdXAga2V5XG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY2FsY3VsYXRlRmVlQW1vdW50KGNvaW46IEFic3RyYWN0VXR4b0NvaW4sIHBhcmFtczogeyBwcm92aWRlcjogc3RyaW5nIH0pOiBQcm9taXNlPG51bWJlcj4ge1xuICBjb25zdCBrcnNQcm92aWRlciA9IGtyc1Byb3ZpZGVyc1twYXJhbXMucHJvdmlkZXJdO1xuXG4gIGlmIChrcnNQcm92aWRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBubyBmZWUgc3RydWN0dXJlIHNwZWNpZmllZCBmb3IgcHJvdmlkZXIgJHtwYXJhbXMucHJvdmlkZXJ9YCk7XG4gIH1cblxuICBpZiAoa3JzUHJvdmlkZXIuZmVlVHlwZSA9PT0gJ2ZsYXRVc2QnKSB7XG4gICAgY29uc3QgZmVlQW1vdW50VXNkID0ga3JzUHJvdmlkZXIuZmVlQW1vdW50O1xuICAgIGNvbnN0IGN1cnJlbnRQcmljZTogbnVtYmVyID0gYXdhaXQgZ2V0UmVjb3ZlcnlNYXJrZXRQcmljZShjb2luKTtcblxuICAgIHJldHVybiBNYXRoLnJvdW5kKChmZWVBbW91bnRVc2QgLyBjdXJyZW50UHJpY2UpICogY29pbi5nZXRCYXNlRmFjdG9yKCkpO1xuICB9IGVsc2Uge1xuICAgIC8vIHdlIGNhbiBhZGQgbW9yZSBmZWUgc3RydWN0dXJlcyBoZXJlIGFzIG5lZWRlZCBmb3IgZGlmZmVyZW50IHByb3ZpZGVycywgc3VjaCBhcyBwZXJjZW50YWdlIG9mIHJlY292ZXJ5IGFtb3VudFxuICAgIHRocm93IG5ldyBFcnJvcignRmVlIHN0cnVjdHVyZSBub3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlY292ZXJQYXJhbXMge1xuICBzY2FuPzogbnVtYmVyO1xuICB1c2VyS2V5OiBzdHJpbmc7XG4gIGJhY2t1cEtleTogc3RyaW5nO1xuICBiaXRnb0tleTogc3RyaW5nO1xuICByZWNvdmVyeURlc3RpbmF0aW9uOiBzdHJpbmc7XG4gIGtyc1Byb3ZpZGVyPzogc3RyaW5nO1xuICBpZ25vcmVBZGRyZXNzVHlwZXM6IFNjcmlwdFR5cGUyT2YzW107XG4gIHdhbGxldFBhc3NwaHJhc2U/OiBzdHJpbmc7XG4gIGFwaUtleT86IHN0cmluZztcbiAgdXNlcktleVBhdGg/OiBzdHJpbmc7XG4gIHJlY292ZXJ5UHJvdmlkZXI/OiBSZWNvdmVyeVByb3ZpZGVyO1xuICBmZWVSYXRlPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIGFuIGFkZHJlc3MgYW5kIGZvcm1hdCBpdCBmb3IgQVBJIHF1ZXJpZXNcbiAqIEBwYXJhbSBjb2luIC0gVGhlIGNvaW4gaW5zdGFuY2VcbiAqIEBwYXJhbSBuZXR3b3JrIC0gVGhlIG5ldHdvcmsgdG8gdXNlXG4gKiBAcGFyYW0gd2FsbGV0S2V5cyAtIFRoZSB3YWxsZXQga2V5c1xuICogQHBhcmFtIGNoYWluIC0gVGhlIGNoYWluIGNvZGVcbiAqIEBwYXJhbSBhZGRySW5kZXggLSBUaGUgYWRkcmVzcyBpbmRleFxuICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCBhZGRyZXNzICh3aXRoIGNhc2hhZGRyIHByZWZpeCBzdHJpcHBlZCBmb3IgQkNIL0JDSEEpXG4gKi9cbmZ1bmN0aW9uIGdldEZvcm1hdHRlZEFkZHJlc3MoXG4gIGNvaW46IEFic3RyYWN0VXR4b0NvaW4sXG4gIG5ldHdvcms6IHV0eG9saWIuTmV0d29yayxcbiAgd2FsbGV0S2V5czogUm9vdFdhbGxldEtleXMsXG4gIGNoYWluOiBDaGFpbkNvZGUsXG4gIGFkZHJJbmRleDogbnVtYmVyXG4pOiBzdHJpbmcge1xuICBjb25zdCBmb3JtYXQgPSBjb2luLmdldENoYWluKCkgPT09ICdiY2gnIHx8IGNvaW4uZ2V0Q2hhaW4oKSA9PT0gJ2JjaGEnID8gJ2Nhc2hhZGRyJyA6IHVuZGVmaW5lZDtcbiAgY29uc3QgYWRkcmVzcyA9IGdlbmVyYXRlQWRkcmVzc1dpdGhDaGFpbkFuZEluZGV4KG5ldHdvcmssIHdhbGxldEtleXMsIGNoYWluLCBhZGRySW5kZXgsIGZvcm1hdCk7XG5cbiAgLy8gQmxvY2tjaGFpciB1c2VzIGNhc2hhZGRyIGZvcm1hdCB3aGVuIHF1ZXJ5aW5nIHRoZSBBUEkgZm9yIGFkZHJlc3MgaW5mb3JtYXRpb24uIFN0cmlwIHRoZSBwcmVmaXggZm9yIEJDSC9CQ0hBLlxuICByZXR1cm4gZm9ybWF0ID09PSAnY2FzaGFkZHInID8gYWRkcmVzcy5zcGxpdCgnOicpWzFdIDogYWRkcmVzcztcbn1cblxuYXN5bmMgZnVuY3Rpb24gcXVlcnlCbG9ja2NoYWluVW5zcGVudHNQYXRoKFxuICBjb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICBwYXJhbXM6IFJlY292ZXJQYXJhbXMsXG4gIHdhbGxldEtleXM6IFJvb3RXYWxsZXRLZXlzLFxuICBjaGFpbjogQ2hhaW5Db2RlXG4pOiBQcm9taXNlPFdhbGxldFVuc3BlbnQ8YmlnaW50PltdPiB7XG4gIGNvbnN0IHNjcmlwdFR5cGUgPSBzY3JpcHRUeXBlRm9yQ2hhaW4oY2hhaW4pO1xuICBjb25zdCBmZXRjaFByZXZUeCA9XG4gICAgIXV0eG9saWIuYml0Z28ub3V0cHV0U2NyaXB0cy5oYXNXaXRuZXNzRGF0YShzY3JpcHRUeXBlKSAmJiBnZXRNYWlubmV0KGNvaW4ubmV0d29yaykgIT09IG5ldHdvcmtzLnpjYXNoO1xuICBjb25zdCByZWNvdmVyeVByb3ZpZGVyID0gcGFyYW1zLnJlY292ZXJ5UHJvdmlkZXIgPz8gZm9yQ29pbihjb2luLmdldENoYWluKCksIHBhcmFtcy5hcGlLZXkpO1xuICBjb25zdCBNQVhfU0VRVUVOVElBTF9BRERSRVNTRVNfV0lUSE9VVF9UWFMgPSBwYXJhbXMuc2NhbiB8fCAyMDtcbiAgbGV0IG51bVNlcXVlbnRpYWxBZGRyZXNzZXNXaXRob3V0VHhzID0gMDtcbiAgY29uc3QgcHJldlR4Q2FjaGUgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIGdldFByZXZUeCh0eGlkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGxldCBwcmV2VHhIZXggPSBwcmV2VHhDYWNoZS5nZXQodHhpZCk7XG4gICAgaWYgKCFwcmV2VHhIZXgpIHtcbiAgICAgIHByZXZUeEhleCA9IGF3YWl0IHJlY292ZXJ5UHJvdmlkZXIuZ2V0VHJhbnNhY3Rpb25IZXgodHhpZCk7XG4gICAgICBwcmV2VHhDYWNoZS5zZXQodHhpZCwgcHJldlR4SGV4KTtcbiAgICB9XG4gICAgcmV0dXJuIHByZXZUeEhleDtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGdhdGhlclVuc3BlbnRzKGFkZHJJbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgZm9ybWF0dGVkQWRkcmVzcyA9IGdldEZvcm1hdHRlZEFkZHJlc3MoY29pbiwgY29pbi5uZXR3b3JrLCB3YWxsZXRLZXlzLCBjaGFpbiwgYWRkckluZGV4KTtcbiAgICBjb25zdCBhZGRySW5mbyA9IGF3YWl0IHJlY292ZXJ5UHJvdmlkZXIuZ2V0QWRkcmVzc0luZm8oZm9ybWF0dGVkQWRkcmVzcyk7XG4gICAgLy8gd2UgdXNlIHR4Q291bnQgaGVyZSBiZWNhdXNlIGl0IGltcGxpZXMgdXNhZ2UgLSBoYXZpbmcgdHgnZXMgbWVhbnMgdGhlIGFkZHIgd2FzIGdlbmVyYXRlZCBhbmQgdXNlZFxuICAgIGlmIChhZGRySW5mby50eENvdW50ID09PSAwKSB7XG4gICAgICBudW1TZXF1ZW50aWFsQWRkcmVzc2VzV2l0aG91dFR4cysrO1xuICAgIH0gZWxzZSB7XG4gICAgICBudW1TZXF1ZW50aWFsQWRkcmVzc2VzV2l0aG91dFR4cyA9IDA7XG5cbiAgICAgIGlmIChhZGRySW5mby5iYWxhbmNlID4gMCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgRm91bmQgYW4gYWRkcmVzcyB3aXRoIGJhbGFuY2U6ICR7Zm9ybWF0dGVkQWRkcmVzc30gd2l0aCBiYWxhbmNlICR7YWRkckluZm8uYmFsYW5jZX1gKTtcbiAgICAgICAgY29uc3QgYWRkcmVzc1Vuc3BlbnRzID0gYXdhaXQgcmVjb3ZlcnlQcm92aWRlci5nZXRVbnNwZW50c0ZvckFkZHJlc3NlcyhbZm9ybWF0dGVkQWRkcmVzc10pO1xuICAgICAgICBjb25zdCBwcm9jZXNzZWRVbnNwZW50cyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgIGFkZHJlc3NVbnNwZW50cy5tYXAoYXN5bmMgKHUpOiBQcm9taXNlPFdhbGxldFVuc3BlbnQ8YmlnaW50Pj4gPT4ge1xuICAgICAgICAgICAgY29uc3QgeyB0eGlkLCB2b3V0IH0gPSB1dHhvbGliLmJpdGdvLnBhcnNlT3V0cHV0SWQodS5pZCk7XG4gICAgICAgICAgICBsZXQgdmFsID0gQmlnSW50KHUudmFsdWUpO1xuICAgICAgICAgICAgaWYgKGNvaW4uYW1vdW50VHlwZSA9PT0gJ2JpZ2ludCcpIHtcbiAgICAgICAgICAgICAgLy8gYmxvY2tjaGFpciByZXR1cm5zIHRoZSBudW1iZXIgd2l0aCB0aGUgY29ycmVjdCBwcmVjaXNpb24sIGJ1dCBpbiBudW1iZXIgZm9ybWF0XG4gICAgICAgICAgICAgIC8vIGpzb24gcGFyc2Ugd29uJ3QgcGFyc2UgaXQgY29ycmVjdGx5LCBzbyB3ZSByZXF1ZXJ5IHRoZSB0eGlkIGZvciB0aGUgdHggaGV4IHRvIGRlY29kZSBoZXJlXG4gICAgICAgICAgICAgIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIodS52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0eEhleCA9IGF3YWl0IGdldFByZXZUeCh0eGlkKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0eCA9IGNvaW4uY3JlYXRlVHJhbnNhY3Rpb25Gcm9tSGV4PGJpZ2ludD4odHhIZXgpO1xuICAgICAgICAgICAgICAgIHZhbCA9IHR4Lm91dHNbdm91dF0udmFsdWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRoZSBhcGkgbWF5IHJldHVybiBjYXNoYWRkcidzIGluc3RlYWQgb2YgbGVnYWN5IGZvciBCQ0ggYW5kIEJDSEFcbiAgICAgICAgICAgIC8vIGRvd25zdHJlYW0gcHJvY2Vzc2VzJ3Mgb25seSBleHBlY3QgbGVnYWN5IGFkZHJlc3Nlc1xuICAgICAgICAgICAgdSA9IHsgLi4udSwgYWRkcmVzczogY29pbi5jYW5vbmljYWxBZGRyZXNzKHUuYWRkcmVzcykgfTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLnUsXG4gICAgICAgICAgICAgIHZhbHVlOiB2YWwsXG4gICAgICAgICAgICAgIGNoYWluOiBjaGFpbixcbiAgICAgICAgICAgICAgaW5kZXg6IGFkZHJJbmRleCxcbiAgICAgICAgICAgICAgcHJldlR4OiBmZXRjaFByZXZUeCA/IEJ1ZmZlci5mcm9tKGF3YWl0IGdldFByZXZUeCh0eGlkKSwgJ2hleCcpIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfSBhcyBXYWxsZXRVbnNwZW50PGJpZ2ludD47XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICB3YWxsZXRVbnNwZW50cy5wdXNoKC4uLnByb2Nlc3NlZFVuc3BlbnRzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobnVtU2VxdWVudGlhbEFkZHJlc3Nlc1dpdGhvdXRUeHMgPj0gTUFYX1NFUVVFTlRJQUxfQUREUkVTU0VTX1dJVEhPVVRfVFhTKSB7XG4gICAgICAvLyBzdG9wIHNlYXJjaGluZyBmb3IgYWRkcmVzc2VzIHdpdGggdW5zcGVudHMgaW4gdGhlbSwgd2UndmUgZm91bmQgJHtNQVhfU0VRVUVOVElBTF9BRERSRVNTRVNfV0lUSE9VVF9UWFN9IGluIGEgcm93IHdpdGggbm9uZVxuICAgICAgLy8gd2UgYXJlIGRvbmVcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gZ2F0aGVyVW5zcGVudHMoYWRkckluZGV4ICsgMSk7XG4gIH1cblxuICAvLyBnZXQgdW5zcGVudHMgZm9yIHRoZXNlIGFkZHJlc3Nlc1xuXG4gIGNvbnN0IHdhbGxldFVuc3BlbnRzOiBXYWxsZXRVbnNwZW50PGJpZ2ludD5bXSA9IFtdO1xuICAvLyBUaGlzIHdpbGwgcG9wdWxhdGUgd2FsbGV0QWRkcmVzc2VzXG4gIGF3YWl0IGdhdGhlclVuc3BlbnRzKDApO1xuXG4gIGlmICh3YWxsZXRVbnNwZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAvLyBDb3VsZG4ndCBmaW5kIGFueSBhZGRyZXNzZXMgd2l0aCBmdW5kc1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHJldHVybiB3YWxsZXRVbnNwZW50cztcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0UmVjb3ZlcnlGZWVQZXJCeXRlcyhcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgeyBkZWZhdWx0VmFsdWUgfTogeyBkZWZhdWx0VmFsdWU6IG51bWJlciB9XG4pOiBQcm9taXNlPG51bWJlcj4ge1xuICBpZiAoY29pbi5nZXRGYW1pbHkoKSA9PT0gJ2RvZ2UnKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2RvZ2Vjb2luL2RvZ2Vjb2luL2Jsb2IvbWFzdGVyL2RvYy9mZWUtcmVjb21tZW5kYXRpb24ubWRcbiAgICAvLyAwLjAxIERPR0UgcGVyIEtCXG4gICAgcmV0dXJuIDEwMDA7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBNZW1wb29sQXBpLmZvckNvaW4oY29pbi5nZXRDaGFpbigpKS5nZXRSZWNvdmVyeUZlZVBlckJ5dGVzKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zb2xlLmRpcihlKTtcbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIEJhY2t1cEtleVJlY292ZXJ5VHJhbnNhbnNhY3Rpb24gPSB7XG4gIGlucHV0cz86IFdhbGxldFVuc3BlbnRKU09OW107XG4gIHRyYW5zYWN0aW9uSGV4OiBzdHJpbmc7XG4gIGNvaW46IHN0cmluZztcbiAgYmFja3VwS2V5OiBzdHJpbmc7XG4gIHJlY292ZXJ5QW1vdW50OiBudW1iZXI7XG4gIHJlY292ZXJ5QW1vdW50U3RyaW5nOiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIEJ1aWxkcyBhIGZ1bmRzIHJlY292ZXJ5IHRyYW5zYWN0aW9uIHdpdGhvdXQgQml0R28uXG4gKlxuICogUmV0dXJucyB0cmFuc2FjdGlvbiBoZXggaW4gbGVnYWN5IGZvcm1hdCBmb3IgdW5zaWduZWQgc3dlZXAgdHJhbnNhY3Rpb24sIGhhbGYgc2lnbmVkIGJhY2t1cCByZWNvdmVyeSB0cmFuc2FjdGlvbiB3aXRoIEtSUyBwcm92aWRlciAob25seSBrZXl0ZXJuYWwpLFxuICogZnVsbHkgc2lnbmVkIGJhY2t1cCByZWNvdmVyeSB0cmFuc2FjdGlvbiB3aXRob3V0IGEgS1JTIHByb3ZpZGVyLlxuICpcbiAqIFJldHVybnMgUFNCVCBoZXggZm9yIGhhbGYgc2lnbmVkIGJhY2t1cCByZWNvdmVyeSB0cmFuc2FjdGlvbiB3aXRoIEtSUyBwcm92aWRlciAoZXhjbHVkaW5nIGtleXRlcm5hbClcbiAqIEZvciBQU0JUIGhleCBjYXNlcywgVW5zcGVudHMgYXJlIG5vdCByZXF1aXJlZCBpbiByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0gY29pblxuICogQHBhcmFtIGJpdGdvXG4gKiBAcGFyYW0gcGFyYW1zXG4gKiAtIHVzZXJLZXk6IFtlbmNyeXB0ZWRdIHhwcnYsIG9yIHhwdWJcbiAqIC0gYmFja3VwS2V5OiBbZW5jcnlwdGVkXSB4cHJ2LCBvciB4cHViIGlmIHRoZSB4cHJ2IGlzIGhlbGQgYnkgYSBLUlMgcHJvdmlkZXJcbiAqIC0gd2FsbGV0UGFzc3BocmFzZTogbmVjZXNzYXJ5IGlmIG9uZSBvZiB0aGUgeHBydnMgaXMgZW5jcnlwdGVkXG4gKiAtIGJpdGdvS2V5OiB4cHViXG4gKiAtIGtyc1Byb3ZpZGVyOiBuZWNlc3NhcnkgaWYgYmFja3VwIGtleSBpcyBoZWxkIGJ5IEtSU1xuICogLSByZWNvdmVyeURlc3RpbmF0aW9uOiB0YXJnZXQgYWRkcmVzcyB0byBzZW5kIHJlY292ZXJlZCBmdW5kcyB0b1xuICogLSBzY2FuOiB0aGUgYW1vdW50IG9mIGNvbnNlY3V0aXZlIGFkZHJlc3NlcyB3aXRob3V0IHVuc3BlbnRzIHRvIHNjYW4gdGhyb3VnaCBiZWZvcmUgc3RvcHBpbmdcbiAqIC0gaWdub3JlQWRkcmVzc1R5cGVzOiAob3B0aW9uYWwpIHNjcmlwdHMgdG8gaWdub3JlXG4gKiAgICAgICAgZm9yIGV4YW1wbGU6IFsncDJzaFAyd3NoJywgJ3Ayd3NoJ10gd2lsbCBwcmV2ZW50IGNvZGUgZnJvbSBjaGVja2luZyBmb3Igd3JhcHBlZC1zZWd3aXQgYW5kIG5hdGl2ZS1zZWd3aXQgY2hhaW5zIG9uIHRoZSBwdWJsaWMgYmxvY2sgZXhwbG9yZXJzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBiYWNrdXBLZXlSZWNvdmVyeShcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgYml0Z286IEJpdEdvQmFzZSxcbiAgcGFyYW1zOiBSZWNvdmVyUGFyYW1zXG4pOiBQcm9taXNlPEJhY2t1cEtleVJlY292ZXJ5VHJhbnNhbnNhY3Rpb24gfCBGb3JtYXR0ZWRPZmZsaW5lVmF1bHRUeEluZm8+IHtcbiAgaWYgKF8uaXNVbmRlZmluZWQocGFyYW1zLnVzZXJLZXkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHVzZXJLZXknKTtcbiAgfVxuXG4gIGlmIChfLmlzVW5kZWZpbmVkKHBhcmFtcy5iYWNrdXBLZXkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIGJhY2t1cEtleScpO1xuICB9XG5cbiAgaWYgKFxuICAgIF8uaXNVbmRlZmluZWQocGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24pIHx8XG4gICAgIWNvaW4uaXNWYWxpZEFkZHJlc3MocGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24sIHsgYW55Rm9ybWF0OiB0cnVlIH0pXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCByZWNvdmVyeURlc3RpbmF0aW9uJyk7XG4gIH1cblxuICBpZiAoIV8uaXNVbmRlZmluZWQocGFyYW1zLnNjYW4pICYmICghXy5pc0ludGVnZXIocGFyYW1zLnNjYW4pIHx8IHBhcmFtcy5zY2FuIDwgMCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NjYW4gbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXInKTtcbiAgfVxuXG4gIGlmIChwYXJhbXMuZmVlUmF0ZSAhPT0gdW5kZWZpbmVkICYmICghTnVtYmVyLmlzRmluaXRlKHBhcmFtcy5mZWVSYXRlKSB8fCBwYXJhbXMuZmVlUmF0ZSA8PSAwKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignZmVlUmF0ZSBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJyk7XG4gIH1cblxuICBjb25zdCBpc0tyc1JlY292ZXJ5ID0gZ2V0SXNLcnNSZWNvdmVyeShwYXJhbXMpO1xuICBjb25zdCBpc1Vuc2lnbmVkU3dlZXAgPSBnZXRJc1Vuc2lnbmVkU3dlZXAocGFyYW1zKTtcbiAgY29uc3QgcmVzcG9uc2VUeEZvcm1hdCA9IGlzVW5zaWduZWRTd2VlcCB8fCAhaXNLcnNSZWNvdmVyeSB8fCBwYXJhbXMua3JzUHJvdmlkZXIgPT09ICdrZXl0ZXJuYWwnID8gJ2xlZ2FjeScgOiAncHNidCc7XG5cbiAgY29uc3Qga3JzUHJvdmlkZXIgPSBpc0tyc1JlY292ZXJ5ID8gZ2V0S3JzUHJvdmlkZXIoY29pbiwgcGFyYW1zLmtyc1Byb3ZpZGVyKSA6IHVuZGVmaW5lZDtcblxuICAvLyBjaGVjayB3aGV0aGVyIGtleSBtYXRlcmlhbCBhbmQgcGFzc3dvcmQgYXV0aGVudGljYXRlIHRoZSB1c2VycyBhbmQgcmV0dXJuIHBhcmVudCBrZXlzIG9mIGFsbCB0aHJlZSBrZXlzIG9mIHRoZSB3YWxsZXRcbiAgY29uc3Qga2V5cyA9IGdldEJpcDMyS2V5cyhiaXRnbywgcGFyYW1zLCB7IHJlcXVpcmVCaXRHb1hwdWI6IHRydWUgfSk7XG4gIGlmICghaXNUcmlwbGUoa2V5cykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGV4cGVjdGVkIGtleSB0cmlwbGVgKTtcbiAgfVxuICBjb25zdCB3YWxsZXRLZXlzID0gbmV3IHV0eG9saWIuYml0Z28uUm9vdFdhbGxldEtleXMoa2V5cywgW1xuICAgIHBhcmFtcy51c2VyS2V5UGF0aCB8fCB1dHhvbGliLmJpdGdvLlJvb3RXYWxsZXRLZXlzLmRlZmF1bHRQcmVmaXgsXG4gICAgdXR4b2xpYi5iaXRnby5Sb290V2FsbGV0S2V5cy5kZWZhdWx0UHJlZml4LFxuICAgIHV0eG9saWIuYml0Z28uUm9vdFdhbGxldEtleXMuZGVmYXVsdFByZWZpeCxcbiAgXSk7XG5cbiAgY29uc3QgdW5zcGVudHM6IFdhbGxldFVuc3BlbnQ8YmlnaW50PltdID0gKFxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgb3V0cHV0U2NyaXB0cy5zY3JpcHRUeXBlczJPZjNcbiAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAoYWRkcmVzc1R5cGUpID0+IGNvaW4uc3VwcG9ydHNBZGRyZXNzVHlwZShhZGRyZXNzVHlwZSkgJiYgIXBhcmFtcy5pZ25vcmVBZGRyZXNzVHlwZXM/LmluY2x1ZGVzKGFkZHJlc3NUeXBlKVxuICAgICAgICApXG4gICAgICAgIC5yZWR1Y2UoXG4gICAgICAgICAgKHF1ZXJpZXMsIGFkZHJlc3NUeXBlKSA9PiBbXG4gICAgICAgICAgICAuLi5xdWVyaWVzLFxuICAgICAgICAgICAgcXVlcnlCbG9ja2NoYWluVW5zcGVudHNQYXRoKGNvaW4sIHBhcmFtcywgd2FsbGV0S2V5cywgZ2V0RXh0ZXJuYWxDaGFpbkNvZGUoYWRkcmVzc1R5cGUpKSxcbiAgICAgICAgICAgIHF1ZXJ5QmxvY2tjaGFpblVuc3BlbnRzUGF0aChjb2luLCBwYXJhbXMsIHdhbGxldEtleXMsIGdldEludGVybmFsQ2hhaW5Db2RlKGFkZHJlc3NUeXBlKSksXG4gICAgICAgICAgXSxcbiAgICAgICAgICBbXSBhcyBQcm9taXNlPFdhbGxldFVuc3BlbnQ8YmlnaW50PltdPltdXG4gICAgICAgIClcbiAgICApXG4gICkuZmxhdCgpO1xuXG4gIC8vIEV4ZWN1dGUgdGhlIHF1ZXJpZXMgYW5kIGdhdGhlciB0aGUgdW5zcGVudHNcbiAgY29uc3QgdG90YWxJbnB1dEFtb3VudCA9IHV0eG9saWIuYml0Z28udW5zcGVudFN1bSh1bnNwZW50cywgJ2JpZ2ludCcpO1xuICBpZiAodG90YWxJbnB1dEFtb3VudCA8PSBCaWdJbnQoMCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3JOb0lucHV0VG9SZWNvdmVyKCk7XG4gIH1cblxuICAvLyBCdWlsZCB0aGUgcHNidFxuICBjb25zdCBwc2J0ID0gdXR4b2xpYi5iaXRnby5jcmVhdGVQc2J0Rm9yTmV0d29yayh7IG5ldHdvcms6IGNvaW4ubmV0d29yayB9KTtcbiAgLy8geHB1YnMgY2FuIGJlY29tZSBoYW5keSBmb3IgbWFueSB0aGluZ3MuXG4gIHV0eG9saWIuYml0Z28uYWRkWHB1YnNUb1BzYnQocHNidCwgd2FsbGV0S2V5cyk7XG4gIGNvbnN0IHR4SW5mbyA9IHt9IGFzIEJhY2t1cEtleVJlY292ZXJ5VHJhbnNhbnNhY3Rpb247XG4gIGNvbnN0IGZlZVBlckJ5dGU6IG51bWJlciA9XG4gICAgcGFyYW1zLmZlZVJhdGUgIT09IHVuZGVmaW5lZCA/IHBhcmFtcy5mZWVSYXRlIDogYXdhaXQgZ2V0UmVjb3ZlcnlGZWVQZXJCeXRlcyhjb2luLCB7IGRlZmF1bHRWYWx1ZTogNTAgfSk7XG5cbiAgLy8gS1JTIHJlY292ZXJ5IHRyYW5zYWN0aW9ucyBoYXZlIGEgMm5kIG91dHB1dCB0byBwYXkgdGhlIHJlY292ZXJ5IGZlZSwgbGlrZSBwYXlnbyBmZWVzLlxuICBjb25zdCBkaW1lbnNpb25zID0gRGltZW5zaW9ucy5mcm9tUHNidChwc2J0KS5wbHVzKGlzS3JzUmVjb3ZlcnkgPyBEaW1lbnNpb25zLlNpbmdsZU91dHB1dC5wMndzaCA6IERpbWVuc2lvbnMuWkVSTyk7XG4gIGNvbnN0IGFwcHJveGltYXRlRmVlID0gQmlnSW50KGRpbWVuc2lvbnMuZ2V0VlNpemUoKSAqIGZlZVBlckJ5dGUpO1xuXG4gIHR4SW5mby5pbnB1dHMgPVxuICAgIHJlc3BvbnNlVHhGb3JtYXQgPT09ICdsZWdhY3knXG4gICAgICA/IHVuc3BlbnRzLm1hcCgodSkgPT4gKHsgLi4udSwgdmFsdWU6IE51bWJlcih1LnZhbHVlKSwgdmFsdWVTdHJpbmc6IHUudmFsdWUudG9TdHJpbmcoKSwgcHJldlR4OiB1bmRlZmluZWQgfSkpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICB1bnNwZW50cy5mb3JFYWNoKCh1bnNwZW50KSA9PiB7XG4gICAgdXR4b2xpYi5iaXRnby5hZGRXYWxsZXRVbnNwZW50VG9Qc2J0KHBzYnQsIHVuc3BlbnQsIHdhbGxldEtleXMsICd1c2VyJywgJ2JhY2t1cCcpO1xuICB9KTtcblxuICBsZXQga3JzRmVlID0gQmlnSW50KDApO1xuICBpZiAoaXNLcnNSZWNvdmVyeSAmJiBwYXJhbXMua3JzUHJvdmlkZXIpIHtcbiAgICB0cnkge1xuICAgICAga3JzRmVlID0gQmlnSW50KGF3YWl0IGNhbGN1bGF0ZUZlZUFtb3VudChjb2luLCB7IHByb3ZpZGVyOiBwYXJhbXMua3JzUHJvdmlkZXIgfSkpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gRG9uJ3QgbGV0IHRoaXMgZXJyb3IgYmxvY2sgdGhlIHJlY292ZXJ5IC1cbiAgICAgIGNvbnNvbGUuZGlyKGVycik7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmVjb3ZlcnlBbW91bnQgPSB0b3RhbElucHV0QW1vdW50IC0gYXBwcm94aW1hdGVGZWUgLSBrcnNGZWU7XG5cbiAgaWYgKHJlY292ZXJ5QW1vdW50IDwgQmlnSW50KDApKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB0aGlzIHdhbGxldFxcJ3MgYmFsYW5jZSBpcyB0b28gbG93IHRvIHBheSB0aGUgZmVlcyBzcGVjaWZpZWQgYnkgdGhlIEtSUyBwcm92aWRlci5cbiAgICAgICAgICBFeGlzdGluZyBiYWxhbmNlIG9uIHdhbGxldDogJHt0b3RhbElucHV0QW1vdW50LnRvU3RyaW5nKCl9LiBFc3RpbWF0ZWQgbmV0d29yayBmZWUgZm9yIHRoZSByZWNvdmVyeSB0cmFuc2FjdGlvblxuICAgICAgICAgIDogJHthcHByb3hpbWF0ZUZlZS50b1N0cmluZygpfSwgS1JTIGZlZSB0byBwYXk6ICR7a3JzRmVlLnRvU3RyaW5nKCl9LiBBZnRlciBkZWR1Y3RpbmcgZmVlcywgeW91ciB0b3RhbFxuICAgICAgICAgIHJlY292ZXJhYmxlIGJhbGFuY2UgaXMgJHtyZWNvdmVyeUFtb3VudC50b1N0cmluZygpfWApO1xuICB9XG5cbiAgY29uc3QgcmVjb3ZlcnlPdXRwdXRTY3JpcHQgPSB1dHhvbGliLmFkZHJlc3MudG9PdXRwdXRTY3JpcHQocGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24sIGNvaW4ubmV0d29yayk7XG4gIHBzYnQuYWRkT3V0cHV0KHsgc2NyaXB0OiByZWNvdmVyeU91dHB1dFNjcmlwdCwgdmFsdWU6IHJlY292ZXJ5QW1vdW50IH0pO1xuXG4gIGlmIChrcnNQcm92aWRlciAmJiBrcnNGZWUgPiBCaWdJbnQoMCkpIHtcbiAgICBpZiAoIWtyc1Byb3ZpZGVyLmZlZUFkZHJlc3Nlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBrZXlQcm92aWRlciBtdXN0IGRlZmluZSBmZWVBZGRyZXNzZXNgKTtcbiAgICB9XG5cbiAgICBjb25zdCBrcnNGZWVBZGRyZXNzID0ga3JzUHJvdmlkZXIuZmVlQWRkcmVzc2VzW2NvaW4uZ2V0Q2hhaW4oKV07XG5cbiAgICBpZiAoIWtyc0ZlZUFkZHJlc3MpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndGhpcyBLUlMgcHJvdmlkZXIgaGFzIG5vdCBjb25maWd1cmVkIHRoZWlyIGZlZSBzdHJ1Y3R1cmUgeWV0IC0gcmVjb3ZlcnkgY2Fubm90IGJlIGNvbXBsZXRlZCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGtyc0ZlZU91dHB1dFNjcmlwdCA9IHV0eG9saWIuYWRkcmVzcy50b091dHB1dFNjcmlwdChrcnNGZWVBZGRyZXNzLCBjb2luLm5ldHdvcmspO1xuICAgIHBzYnQuYWRkT3V0cHV0KHsgc2NyaXB0OiBrcnNGZWVPdXRwdXRTY3JpcHQsIHZhbHVlOiBrcnNGZWUgfSk7XG4gIH1cblxuICBpZiAoaXNVbnNpZ25lZFN3ZWVwKSB7XG4gICAgLy8gVE9ETyBCVEMtMzE3IC0gV2hlbiByZWFkeSB0byBQU0JUaWZ5IE9WQywgc2VuZCBwc2J0IGhleCBhbmQgc2tpcCB1bnNwZW50cyBpbiByZXNwb25zZS5cbiAgICBjb25zdCB0eEhleCA9IHBzYnQuZ2V0VW5zaWduZWRUeCgpLnRvQnVmZmVyKCkudG9TdHJpbmcoJ2hleCcpO1xuICAgIHJldHVybiBmb3JtYXRGb3JPZmZsaW5lVmF1bHQoY29pbi5nZXRDaGFpbigpLCB0eEluZm8gYXMgT2ZmbGluZVZhdWx0VHhJbmZvLCB0eEhleCk7XG4gIH0gZWxzZSB7XG4gICAgc2lnbkFuZFZlcmlmeVBzYnQocHNidCwgd2FsbGV0S2V5cy51c2VyLCB7IGlzTGFzdFNpZ25hdHVyZTogZmFsc2UgfSk7XG4gICAgaWYgKGlzS3JzUmVjb3ZlcnkpIHtcbiAgICAgIC8vIFRoZSBLUlMgcHJvdmlkZXIga2V5dGVybmFsIHNvbGVseSBzdXBwb3J0cyBQMlNILCBQMldTSCwgYW5kIFAyU0gtUDJXU0ggaW5wdXQgc2NyaXB0IHR5cGVzLlxuICAgICAgLy8gSXQgY3VycmVudGx5IHVzZXMgYW4gb3V0ZGF0ZWQgQml0R29KUyBTREssIHdoaWNoIHJlbGllcyBvbiBhIGxlZ2FjeSB0cmFuc2FjdGlvbiBidWlsZGVyIGZvciBjb3NpZ25pbmcuXG4gICAgICAvLyBVbmZvcnR1bmF0ZWx5LCB1cGdyYWRpbmcgdGhlIGtleXRlcm5hbCBjb2RlIHByZXNlbnRzIGNoYWxsZW5nZXMsXG4gICAgICAvLyB3aGljaCBoaW5kZXJzIHRoZSBpbnRlZ3JhdGlvbiBvZiB0aGUgbGF0ZXN0IEJpdEdvSlMgU0RLIHdpdGggUFNCVCBzaWduaW5nIHN1cHBvcnQuXG4gICAgICB0eEluZm8udHJhbnNhY3Rpb25IZXggPVxuICAgICAgICBwYXJhbXMua3JzUHJvdmlkZXIgPT09ICdrZXl0ZXJuYWwnXG4gICAgICAgICAgPyB1dHhvbGliLmJpdGdvLmV4dHJhY3RQMm1zT25seUhhbGZTaWduZWRUeChwc2J0KS50b0J1ZmZlcigpLnRvU3RyaW5nKCdoZXgnKVxuICAgICAgICAgIDogcHNidC50b0hleCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0eCA9IHNpZ25BbmRWZXJpZnlQc2J0KHBzYnQsIHdhbGxldEtleXMuYmFja3VwLCB7IGlzTGFzdFNpZ25hdHVyZTogdHJ1ZSB9KTtcbiAgICAgIHR4SW5mby50cmFuc2FjdGlvbkhleCA9IHR4LnRvQnVmZmVyKCkudG9TdHJpbmcoJ2hleCcpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpc0tyc1JlY292ZXJ5KSB7XG4gICAgdHhJbmZvLmNvaW4gPSBjb2luLmdldENoYWluKCk7XG4gICAgdHhJbmZvLmJhY2t1cEtleSA9IHBhcmFtcy5iYWNrdXBLZXk7XG4gICAgdHhJbmZvLnJlY292ZXJ5QW1vdW50ID0gTnVtYmVyKHJlY292ZXJ5QW1vdW50KTtcbiAgICB0eEluZm8ucmVjb3ZlcnlBbW91bnRTdHJpbmcgPSByZWNvdmVyeUFtb3VudC50b1N0cmluZygpO1xuICB9XG5cbiAgcmV0dXJuIHR4SW5mbztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCaXRHb1YxVW5zcGVudCB7XG4gIHR4X2hhc2g6IHN0cmluZztcbiAgdHhfb3V0cHV0X246IG51bWJlcjtcbiAgdmFsdWU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWMVN3ZWVwUGFyYW1zIHtcbiAgd2FsbGV0SWQ6IHN0cmluZztcbiAgd2FsbGV0UGFzc3BocmFzZTogc3RyaW5nO1xuICB1bnNwZW50czogQml0R29WMVVuc3BlbnRbXTtcbiAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogc3RyaW5nO1xuICB1c2VyS2V5OiBzdHJpbmc7XG4gIG90cDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFYxUmVjb3ZlclBhcmFtcyBleHRlbmRzIE9taXQ8VjFTd2VlcFBhcmFtcywgJ290cCc+IHtcbiAgYmFja3VwS2V5OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2MUJhY2t1cEtleVJlY292ZXJ5KFxuICBjb2luOiBBYnN0cmFjdFV0eG9Db2luLFxuICBiaXRnbzogQml0R29CYXNlLFxuICBwYXJhbXM6IFYxUmVjb3ZlclBhcmFtc1xuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgaWYgKFxuICAgIF8uaXNVbmRlZmluZWQocGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24pIHx8XG4gICAgIWNvaW4uaXNWYWxpZEFkZHJlc3MocGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24sIHsgYW55Rm9ybWF0OiB0cnVlIH0pXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCByZWNvdmVyeURlc3RpbmF0aW9uJyk7XG4gIH1cblxuICBjb25zdCByZWNvdmVyeUZlZVBlckJ5dGUgPSBhd2FpdCBnZXRSZWNvdmVyeUZlZVBlckJ5dGVzKGNvaW4sIHsgZGVmYXVsdFZhbHVlOiA1MCB9KTtcbiAgY29uc3QgdjF3YWxsZXQgPSBhd2FpdCBiaXRnby53YWxsZXRzKCkuZ2V0KHsgaWQ6IHBhcmFtcy53YWxsZXRJZCB9KTtcbiAgcmV0dXJuIGF3YWl0IHYxd2FsbGV0LnJlY292ZXIoe1xuICAgIC4uLnBhcmFtcyxcbiAgICBmZWVSYXRlOiByZWNvdmVyeUZlZVBlckJ5dGUsXG4gIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdjFTd2VlcChcbiAgY29pbjogQWJzdHJhY3RVdHhvQ29pbixcbiAgYml0Z286IEJpdEdvQmFzZSxcbiAgcGFyYW1zOiBWMVN3ZWVwUGFyYW1zXG4pOiBQcm9taXNlPHtcbiAgdHg6IHN0cmluZztcbiAgaGFzaDogc3RyaW5nO1xuICBzdGF0dXM6IHN0cmluZztcbn0+IHtcbiAgaWYgKFxuICAgIF8uaXNVbmRlZmluZWQocGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24pIHx8XG4gICAgIWNvaW4uaXNWYWxpZEFkZHJlc3MocGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24sIHsgYW55Rm9ybWF0OiB0cnVlIH0pXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCByZWNvdmVyeURlc3RpbmF0aW9uJyk7XG4gIH1cblxuICBsZXQgcmVjb3ZlcnlGZWVQZXJCeXRlID0gMTAwO1xuICBpZiAoYml0Z28uZW52ID09PSAncHJvZCcpIHtcbiAgICByZWNvdmVyeUZlZVBlckJ5dGUgPSBhd2FpdCBnZXRSZWNvdmVyeUZlZVBlckJ5dGVzKGNvaW4sIHsgZGVmYXVsdFZhbHVlOiAxMDAgfSk7XG4gIH1cblxuICBjb25zdCB2MXdhbGxldCA9IGF3YWl0IGJpdGdvLndhbGxldHMoKS5nZXQoeyBpZDogcGFyYW1zLndhbGxldElkIH0pO1xuICByZXR1cm4gYXdhaXQgdjF3YWxsZXQuc3dlZXAoe1xuICAgIC4uLnBhcmFtcyxcbiAgICBmZWVSYXRlOiByZWNvdmVyeUZlZVBlckJ5dGUsXG4gIH0pO1xufVxuIl19
@@ -0,0 +1,24 @@
1
+ import superagent from 'superagent';
2
+ import { BitGoJsError } from '@bitgo/sdk-core';
3
+ export declare class ApiNotImplementedError extends BitGoJsError {
4
+ constructor(coinName: string);
5
+ }
6
+ export declare class ApiRequestError extends BitGoJsError {
7
+ constructor(url: string, reason: Error | string);
8
+ static forRequest(req: superagent.Request, reason: Error | string): ApiRequestError;
9
+ static forResponse(res: superagent.Response, reason: Error | string): ApiRequestError;
10
+ }
11
+ export type RequestOptions = {
12
+ retry?: number;
13
+ };
14
+ export type Response<T> = {
15
+ map<V>(f: (body: T) => V): V;
16
+ };
17
+ export declare class BaseApi {
18
+ baseUrl: string;
19
+ constructor(baseUrl: string);
20
+ request<T>(method: string, path: string, requestBody: unknown | undefined, params?: RequestOptions): Promise<Response<T>>;
21
+ get<T>(path: string, params?: RequestOptions): Promise<Response<T>>;
22
+ post<T>(path: string, body: unknown, params?: RequestOptions): Promise<Response<T>>;
23
+ }
24
+ //# sourceMappingURL=baseApi.d.ts.map
@@ -0,0 +1,64 @@
1
+ import superagent from 'superagent';
2
+ import { BitGoJsError } from '@bitgo/sdk-core';
3
+ export class ApiNotImplementedError extends BitGoJsError {
4
+ constructor(coinName) {
5
+ super(`api not implemented for coin ${coinName}`);
6
+ }
7
+ }
8
+ export class ApiRequestError extends BitGoJsError {
9
+ constructor(url, reason) {
10
+ super(`error in API request: ${url}: ${reason}`);
11
+ }
12
+ static forRequest(req, reason) {
13
+ return new ApiRequestError(req.toString(), reason);
14
+ }
15
+ static forResponse(res, reason) {
16
+ return new ApiRequestError(res.header, reason);
17
+ }
18
+ }
19
+ export class BaseApi {
20
+ constructor(baseUrl) {
21
+ this.baseUrl = baseUrl;
22
+ if (!baseUrl.startsWith('https://')) {
23
+ throw new Error(`baseUrl must start with https://`);
24
+ }
25
+ if (baseUrl.endsWith(`/`)) {
26
+ throw new Error(`baseUrl must not end with slash (/)`);
27
+ }
28
+ }
29
+ async request(method, path, requestBody, params = {}) {
30
+ if (!path.startsWith(path)) {
31
+ throw new Error(`path must start with '/' character`);
32
+ }
33
+ const url = this.baseUrl + path;
34
+ let response;
35
+ try {
36
+ response = await superagent(method, url)
37
+ .retry(params.retry)
38
+ .send(requestBody);
39
+ }
40
+ catch (e) {
41
+ throw new ApiRequestError(url, e);
42
+ }
43
+ if (!response.ok) {
44
+ throw new ApiRequestError(url, `status code ${response.statusCode}`);
45
+ }
46
+ return {
47
+ map(f) {
48
+ try {
49
+ return f(response.body);
50
+ }
51
+ catch (e) {
52
+ throw new ApiRequestError(url, e);
53
+ }
54
+ },
55
+ };
56
+ }
57
+ get(path, params) {
58
+ return this.request('get', path, undefined, params);
59
+ }
60
+ post(path, body, params) {
61
+ return this.request('post', path, body, params);
62
+ }
63
+ }
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZUFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZWNvdmVyeS9iYXNlQXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sVUFBVSxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsTUFBTSxPQUFPLHNCQUF1QixTQUFRLFlBQVk7SUFDdEQsWUFBWSxRQUFnQjtRQUMxQixLQUFLLENBQUMsZ0NBQWdDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLGVBQWdCLFNBQVEsWUFBWTtJQUMvQyxZQUFZLEdBQVcsRUFBRSxNQUFzQjtRQUM3QyxLQUFLLENBQUMseUJBQXlCLEdBQUcsS0FBSyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQXVCLEVBQUUsTUFBc0I7UUFDL0QsT0FBTyxJQUFJLGVBQWUsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBd0IsRUFBRSxNQUFzQjtRQUNqRSxPQUFPLElBQUksZUFBZSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDakQsQ0FBQztDQUNGO0FBVUQsTUFBTSxPQUFPLE9BQU87SUFDbEIsWUFBbUIsT0FBZTtRQUFmLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUNwQyxNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUNELElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQztRQUN6RCxDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPLENBQ1gsTUFBYyxFQUNkLElBQVksRUFDWixXQUFnQyxFQUNoQyxTQUF5QixFQUFFO1FBRTNCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFDRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNoQyxJQUFJLFFBQVEsQ0FBQztRQUNiLElBQUksQ0FBQztZQUNILFFBQVEsR0FBRyxNQUFNLFVBQVUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDO2lCQUNyQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztpQkFDbkIsSUFBSSxDQUFDLFdBQXNDLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE1BQU0sSUFBSSxlQUFlLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLENBQUM7UUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxlQUFlLENBQUMsR0FBRyxFQUFFLGVBQWUsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDdkUsQ0FBQztRQUVELE9BQU87WUFDTCxHQUFHLENBQUksQ0FBaUI7Z0JBQ3RCLElBQUksQ0FBQztvQkFDSCxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzFCLENBQUM7Z0JBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDWCxNQUFNLElBQUksZUFBZSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDcEMsQ0FBQztZQUNILENBQUM7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELEdBQUcsQ0FBSSxJQUFZLEVBQUUsTUFBdUI7UUFDMUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxJQUFJLENBQUksSUFBWSxFQUFFLElBQWEsRUFBRSxNQUF1QjtRQUMxRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbEQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHN1cGVyYWdlbnQgZnJvbSAnc3VwZXJhZ2VudCc7XG5pbXBvcnQgeyBCaXRHb0pzRXJyb3IgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuXG5leHBvcnQgY2xhc3MgQXBpTm90SW1wbGVtZW50ZWRFcnJvciBleHRlbmRzIEJpdEdvSnNFcnJvciB7XG4gIGNvbnN0cnVjdG9yKGNvaW5OYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihgYXBpIG5vdCBpbXBsZW1lbnRlZCBmb3IgY29pbiAke2NvaW5OYW1lfWApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBcGlSZXF1ZXN0RXJyb3IgZXh0ZW5kcyBCaXRHb0pzRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih1cmw6IHN0cmluZywgcmVhc29uOiBFcnJvciB8IHN0cmluZykge1xuICAgIHN1cGVyKGBlcnJvciBpbiBBUEkgcmVxdWVzdDogJHt1cmx9OiAke3JlYXNvbn1gKTtcbiAgfVxuXG4gIHN0YXRpYyBmb3JSZXF1ZXN0KHJlcTogc3VwZXJhZ2VudC5SZXF1ZXN0LCByZWFzb246IEVycm9yIHwgc3RyaW5nKTogQXBpUmVxdWVzdEVycm9yIHtcbiAgICByZXR1cm4gbmV3IEFwaVJlcXVlc3RFcnJvcihyZXEudG9TdHJpbmcoKSwgcmVhc29uKTtcbiAgfVxuXG4gIHN0YXRpYyBmb3JSZXNwb25zZShyZXM6IHN1cGVyYWdlbnQuUmVzcG9uc2UsIHJlYXNvbjogRXJyb3IgfCBzdHJpbmcpOiBBcGlSZXF1ZXN0RXJyb3Ige1xuICAgIHJldHVybiBuZXcgQXBpUmVxdWVzdEVycm9yKHJlcy5oZWFkZXIsIHJlYXNvbik7XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgUmVxdWVzdE9wdGlvbnMgPSB7XG4gIHJldHJ5PzogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgUmVzcG9uc2U8VD4gPSB7XG4gIG1hcDxWPihmOiAoYm9keTogVCkgPT4gVik6IFY7XG59O1xuXG5leHBvcnQgY2xhc3MgQmFzZUFwaSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBiYXNlVXJsOiBzdHJpbmcpIHtcbiAgICBpZiAoIWJhc2VVcmwuc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBiYXNlVXJsIG11c3Qgc3RhcnQgd2l0aCBodHRwczovL2ApO1xuICAgIH1cbiAgICBpZiAoYmFzZVVybC5lbmRzV2l0aChgL2ApKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGJhc2VVcmwgbXVzdCBub3QgZW5kIHdpdGggc2xhc2ggKC8pYCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmVxdWVzdDxUPihcbiAgICBtZXRob2Q6IHN0cmluZyxcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgcmVxdWVzdEJvZHk6IHVua25vd24gfCB1bmRlZmluZWQsXG4gICAgcGFyYW1zOiBSZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8UmVzcG9uc2U8VD4+IHtcbiAgICBpZiAoIXBhdGguc3RhcnRzV2l0aChwYXRoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBwYXRoIG11c3Qgc3RhcnQgd2l0aCAnLycgY2hhcmFjdGVyYCk7XG4gICAgfVxuICAgIGNvbnN0IHVybCA9IHRoaXMuYmFzZVVybCArIHBhdGg7XG4gICAgbGV0IHJlc3BvbnNlO1xuICAgIHRyeSB7XG4gICAgICByZXNwb25zZSA9IGF3YWl0IHN1cGVyYWdlbnQobWV0aG9kLCB1cmwpXG4gICAgICAgIC5yZXRyeShwYXJhbXMucmV0cnkpXG4gICAgICAgIC5zZW5kKHJlcXVlc3RCb2R5IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgQXBpUmVxdWVzdEVycm9yKHVybCwgZSk7XG4gICAgfVxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIHRocm93IG5ldyBBcGlSZXF1ZXN0RXJyb3IodXJsLCBgc3RhdHVzIGNvZGUgJHtyZXNwb25zZS5zdGF0dXNDb2RlfWApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBtYXA8Vj4oZjogKGJvZHk6IFQpID0+IFYpOiBWIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gZihyZXNwb25zZS5ib2R5KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHRocm93IG5ldyBBcGlSZXF1ZXN0RXJyb3IodXJsLCBlKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgZ2V0PFQ+KHBhdGg6IHN0cmluZywgcGFyYW1zPzogUmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPFJlc3BvbnNlPFQ+PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdCgnZ2V0JywgcGF0aCwgdW5kZWZpbmVkLCBwYXJhbXMpO1xuICB9XG5cbiAgcG9zdDxUPihwYXRoOiBzdHJpbmcsIGJvZHk6IHVua25vd24sIHBhcmFtcz86IFJlcXVlc3RPcHRpb25zKTogUHJvbWlzZTxSZXNwb25zZTxUPj4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ3Bvc3QnLCBwYXRoLCBib2R5LCBwYXJhbXMpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,6 @@
1
+ import { BaseApi } from './baseApi';
2
+ export declare class CoingeckoApi extends BaseApi {
3
+ constructor();
4
+ getUSDPrice(coinFamily: string): Promise<number>;
5
+ }
6
+ //# sourceMappingURL=coingeckoApi.d.ts.map
@@ -0,0 +1,40 @@
1
+ import { BaseApi } from './baseApi';
2
+ const familyNamesToCoinGeckoIds = new Map()
3
+ .set('BTC', 'bitcoin')
4
+ .set('LTC', 'litecoin')
5
+ .set('BCH', 'bitcoin-cash')
6
+ .set('ZEC', 'zcash')
7
+ .set('DASH', 'dash')
8
+ // note: we don't have a source for price data of BCHA and BSV, but we will use BCH as a proxy. We will substitute
9
+ // it out for a better source when it becomes available. TODO BG-26359.
10
+ .set('BCHA', 'bitcoin-cash')
11
+ .set('BSV', 'bitcoin-cash');
12
+ export class CoingeckoApi extends BaseApi {
13
+ constructor() {
14
+ super('https://api.coingecko.com/api/v3');
15
+ }
16
+ async getUSDPrice(coinFamily) {
17
+ const coinGeckoId = familyNamesToCoinGeckoIds.get(coinFamily.toUpperCase());
18
+ if (!coinGeckoId) {
19
+ throw new Error(`There is no CoinGecko id for family name ${coinFamily.toUpperCase()}.`);
20
+ }
21
+ const coinGeckoUrl = `/simple/price?ids=${coinGeckoId}&vs_currencies=USD`;
22
+ const res = await this.get(coinGeckoUrl, { retry: 2 });
23
+ return res.map((body) => {
24
+ // An example of response
25
+ // {
26
+ // "ethereum": {
27
+ // "usd": 220.64
28
+ // }
29
+ // }
30
+ if (!body) {
31
+ throw new Error('Unable to reach Coin Gecko API for price data');
32
+ }
33
+ if (!body[coinGeckoId]['usd'] || typeof body[coinGeckoId]['usd'] !== 'number') {
34
+ throw new Error('Unexpected response from Coin Gecko API for price data');
35
+ }
36
+ return body[coinGeckoId]['usd'];
37
+ });
38
+ }
39
+ }
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29pbmdlY2tvQXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JlY292ZXJ5L2NvaW5nZWNrb0FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXBDLE1BQU0seUJBQXlCLEdBQUcsSUFBSSxHQUFHLEVBQUU7S0FDeEMsR0FBRyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUM7S0FDckIsR0FBRyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUM7S0FDdEIsR0FBRyxDQUFDLEtBQUssRUFBRSxjQUFjLENBQUM7S0FDMUIsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUM7S0FDbkIsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFDcEIsa0hBQWtIO0lBQ2xILHdFQUF3RTtLQUN2RSxHQUFHLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQztLQUMzQixHQUFHLENBQUMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBRTlCLE1BQU0sT0FBTyxZQUFhLFNBQVEsT0FBTztJQUN2QztRQUNFLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLFVBQWtCO1FBQ2xDLE1BQU0sV0FBVyxHQUFHLHlCQUF5QixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyw0Q0FBNEMsVUFBVSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMzRixDQUFDO1FBQ0QsTUFBTSxZQUFZLEdBQUcscUJBQXFCLFdBQVcsb0JBQW9CLENBQUM7UUFDMUUsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFNLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVELE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3RCLHlCQUF5QjtZQUN6QixJQUFJO1lBQ0osa0JBQWtCO1lBQ2xCLG9CQUFvQjtZQUNwQixNQUFNO1lBQ04sSUFBSTtZQUNKLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDVixNQUFNLElBQUksS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUM7WUFDbkUsQ0FBQztZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQzlFLE1BQU0sSUFBSSxLQUFLLENBQUMsd0RBQXdELENBQUMsQ0FBQztZQUM1RSxDQUFDO1lBRUQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQXBpIH0gZnJvbSAnLi9iYXNlQXBpJztcblxuY29uc3QgZmFtaWx5TmFtZXNUb0NvaW5HZWNrb0lkcyA9IG5ldyBNYXAoKVxuICAuc2V0KCdCVEMnLCAnYml0Y29pbicpXG4gIC5zZXQoJ0xUQycsICdsaXRlY29pbicpXG4gIC5zZXQoJ0JDSCcsICdiaXRjb2luLWNhc2gnKVxuICAuc2V0KCdaRUMnLCAnemNhc2gnKVxuICAuc2V0KCdEQVNIJywgJ2Rhc2gnKVxuICAvLyBub3RlOiB3ZSBkb24ndCBoYXZlIGEgc291cmNlIGZvciBwcmljZSBkYXRhIG9mIEJDSEEgYW5kIEJTViwgYnV0IHdlIHdpbGwgdXNlIEJDSCBhcyBhIHByb3h5LiBXZSB3aWxsIHN1YnN0aXR1dGVcbiAgLy8gaXQgb3V0IGZvciBhIGJldHRlciBzb3VyY2Ugd2hlbiBpdCBiZWNvbWVzIGF2YWlsYWJsZS4gIFRPRE8gQkctMjYzNTkuXG4gIC5zZXQoJ0JDSEEnLCAnYml0Y29pbi1jYXNoJylcbiAgLnNldCgnQlNWJywgJ2JpdGNvaW4tY2FzaCcpO1xuXG5leHBvcnQgY2xhc3MgQ29pbmdlY2tvQXBpIGV4dGVuZHMgQmFzZUFwaSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCdodHRwczovL2FwaS5jb2luZ2Vja28uY29tL2FwaS92MycpO1xuICB9XG5cbiAgYXN5bmMgZ2V0VVNEUHJpY2UoY29pbkZhbWlseTogc3RyaW5nKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCBjb2luR2Vja29JZCA9IGZhbWlseU5hbWVzVG9Db2luR2Vja29JZHMuZ2V0KGNvaW5GYW1pbHkudG9VcHBlckNhc2UoKSk7XG4gICAgaWYgKCFjb2luR2Vja29JZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGVyZSBpcyBubyBDb2luR2Vja28gaWQgZm9yIGZhbWlseSBuYW1lICR7Y29pbkZhbWlseS50b1VwcGVyQ2FzZSgpfS5gKTtcbiAgICB9XG4gICAgY29uc3QgY29pbkdlY2tvVXJsID0gYC9zaW1wbGUvcHJpY2U/aWRzPSR7Y29pbkdlY2tvSWR9JnZzX2N1cnJlbmNpZXM9VVNEYDtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmdldDxhbnk+KGNvaW5HZWNrb1VybCwgeyByZXRyeTogMiB9KTtcbiAgICByZXR1cm4gcmVzLm1hcCgoYm9keSkgPT4ge1xuICAgICAgLy8gQW4gZXhhbXBsZSBvZiByZXNwb25zZVxuICAgICAgLy8ge1xuICAgICAgLy8gICBcImV0aGVyZXVtXCI6IHtcbiAgICAgIC8vICAgICBcInVzZFwiOiAyMjAuNjRcbiAgICAgIC8vICAgfVxuICAgICAgLy8gfVxuICAgICAgaWYgKCFib2R5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIHJlYWNoIENvaW4gR2Vja28gQVBJIGZvciBwcmljZSBkYXRhJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWJvZHlbY29pbkdlY2tvSWRdWyd1c2QnXSB8fCB0eXBlb2YgYm9keVtjb2luR2Vja29JZF1bJ3VzZCddICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgcmVzcG9uc2UgZnJvbSBDb2luIEdlY2tvIEFQSSBmb3IgcHJpY2UgZGF0YScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYm9keVtjb2luR2Vja29JZF1bJ3VzZCddO1xuICAgIH0pO1xuICB9XG59XG4iXX0=