@atomiqlabs/sdk 7.0.12 → 8.0.8

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 (364) hide show
  1. package/README.md +45 -29
  2. package/dist/SmartChainAssets.d.ts +11 -3
  3. package/dist/SmartChainAssets.js +7 -3
  4. package/dist/bitcoin/BitcoinRpcWithAddressIndex.d.ts +68 -0
  5. package/dist/bitcoin/BitcoinRpcWithAddressIndex.js +2 -0
  6. package/dist/bitcoin/LightningNetworkApi.d.ts +12 -0
  7. package/dist/bitcoin/LightningNetworkApi.js +2 -0
  8. package/dist/bitcoin/coinselect2/accumulative.d.ts +6 -0
  9. package/dist/bitcoin/coinselect2/accumulative.js +52 -0
  10. package/dist/bitcoin/coinselect2/blackjack.d.ts +6 -0
  11. package/dist/bitcoin/coinselect2/blackjack.js +38 -0
  12. package/dist/bitcoin/coinselect2/index.d.ts +19 -0
  13. package/dist/bitcoin/coinselect2/index.js +69 -0
  14. package/dist/bitcoin/coinselect2/utils.d.ts +71 -0
  15. package/dist/bitcoin/coinselect2/utils.js +123 -0
  16. package/dist/bitcoin/mempool/MempoolApi.d.ts +350 -0
  17. package/dist/bitcoin/mempool/MempoolApi.js +311 -0
  18. package/dist/bitcoin/mempool/MempoolBitcoinBlock.d.ts +44 -0
  19. package/dist/bitcoin/mempool/MempoolBitcoinBlock.js +48 -0
  20. package/dist/bitcoin/mempool/MempoolBitcoinRpc.d.ts +119 -0
  21. package/dist/bitcoin/mempool/MempoolBitcoinRpc.js +361 -0
  22. package/dist/bitcoin/mempool/synchronizer/MempoolBtcRelaySynchronizer.d.ts +22 -0
  23. package/dist/bitcoin/mempool/synchronizer/MempoolBtcRelaySynchronizer.js +105 -0
  24. package/dist/bitcoin/wallet/BitcoinWallet.d.ts +93 -0
  25. package/dist/bitcoin/wallet/BitcoinWallet.js +273 -0
  26. package/dist/bitcoin/wallet/IBitcoinWallet.d.ts +28 -0
  27. package/dist/bitcoin/wallet/IBitcoinWallet.js +20 -0
  28. package/dist/bitcoin/wallet/MinimalBitcoinWalletInterface.d.ts +21 -0
  29. package/dist/bitcoin/wallet/MinimalBitcoinWalletInterface.js +2 -0
  30. package/dist/bitcoin/wallet/MinimalLightningNetworkWalletInterface.d.ts +7 -0
  31. package/dist/bitcoin/wallet/MinimalLightningNetworkWalletInterface.js +2 -0
  32. package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.d.ts +40 -0
  33. package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.js +86 -0
  34. package/dist/enums/FeeType.d.ts +8 -0
  35. package/dist/enums/FeeType.js +12 -0
  36. package/dist/enums/SwapAmountType.d.ts +8 -0
  37. package/dist/enums/SwapAmountType.js +12 -0
  38. package/dist/enums/SwapDirection.d.ts +8 -0
  39. package/dist/enums/SwapDirection.js +12 -0
  40. package/dist/enums/SwapType.d.ts +14 -0
  41. package/dist/enums/SwapType.js +18 -0
  42. package/dist/errors/IntermediaryError.d.ts +9 -0
  43. package/dist/errors/IntermediaryError.js +26 -0
  44. package/dist/errors/PaymentAuthError.d.ts +11 -0
  45. package/dist/errors/PaymentAuthError.js +23 -0
  46. package/dist/errors/RequestError.d.ts +18 -0
  47. package/dist/errors/RequestError.js +46 -0
  48. package/dist/errors/UserError.d.ts +7 -0
  49. package/dist/errors/UserError.js +15 -0
  50. package/dist/events/UnifiedSwapEventListener.d.ts +23 -0
  51. package/dist/events/UnifiedSwapEventListener.js +130 -0
  52. package/dist/http/HttpUtils.d.ts +27 -0
  53. package/dist/http/HttpUtils.js +91 -0
  54. package/dist/http/paramcoders/IParamReader.d.ts +8 -0
  55. package/dist/http/paramcoders/IParamReader.js +2 -0
  56. package/dist/http/paramcoders/ParamDecoder.d.ts +44 -0
  57. package/dist/http/paramcoders/ParamDecoder.js +132 -0
  58. package/dist/http/paramcoders/ParamEncoder.d.ts +20 -0
  59. package/dist/http/paramcoders/ParamEncoder.js +31 -0
  60. package/dist/http/paramcoders/SchemaVerifier.d.ts +26 -0
  61. package/dist/http/paramcoders/SchemaVerifier.js +145 -0
  62. package/dist/http/paramcoders/client/ResponseParamDecoder.d.ts +11 -0
  63. package/dist/http/paramcoders/client/ResponseParamDecoder.js +57 -0
  64. package/dist/http/paramcoders/client/StreamParamEncoder.d.ts +13 -0
  65. package/dist/http/paramcoders/client/StreamParamEncoder.js +26 -0
  66. package/dist/http/paramcoders/client/StreamingFetchPromise.d.ts +16 -0
  67. package/dist/http/paramcoders/client/StreamingFetchPromise.js +174 -0
  68. package/dist/index.d.ts +82 -4
  69. package/dist/index.js +128 -4
  70. package/dist/intermediaries/Intermediary.d.ts +111 -0
  71. package/dist/intermediaries/Intermediary.js +115 -0
  72. package/dist/intermediaries/IntermediaryDiscovery.d.ts +166 -0
  73. package/dist/intermediaries/IntermediaryDiscovery.js +390 -0
  74. package/dist/intermediaries/apis/IntermediaryAPI.d.ts +436 -0
  75. package/dist/intermediaries/apis/IntermediaryAPI.js +600 -0
  76. package/dist/intermediaries/apis/TrustedIntermediaryAPI.d.ts +154 -0
  77. package/dist/intermediaries/apis/TrustedIntermediaryAPI.js +136 -0
  78. package/dist/lnurl/LNURL.d.ts +102 -0
  79. package/dist/lnurl/LNURL.js +321 -0
  80. package/dist/prices/RedundantSwapPrice.d.ts +89 -0
  81. package/dist/prices/RedundantSwapPrice.js +202 -0
  82. package/dist/prices/SingleSwapPrice.d.ts +31 -0
  83. package/dist/prices/SingleSwapPrice.js +41 -0
  84. package/dist/prices/SwapPriceWithChain.d.ts +70 -0
  85. package/dist/prices/SwapPriceWithChain.js +91 -0
  86. package/dist/prices/abstract/ICachedSwapPrice.d.ts +28 -0
  87. package/dist/prices/abstract/ICachedSwapPrice.js +62 -0
  88. package/dist/prices/abstract/IPriceProvider.d.ts +81 -0
  89. package/dist/prices/abstract/IPriceProvider.js +74 -0
  90. package/dist/prices/abstract/ISwapPrice.d.ts +117 -0
  91. package/dist/prices/abstract/ISwapPrice.js +219 -0
  92. package/dist/prices/providers/BinancePriceProvider.d.ts +16 -0
  93. package/dist/prices/providers/BinancePriceProvider.js +23 -0
  94. package/dist/prices/providers/CoinGeckoPriceProvider.d.ts +17 -0
  95. package/dist/prices/providers/CoinGeckoPriceProvider.js +23 -0
  96. package/dist/prices/providers/CoinPaprikaPriceProvider.d.ts +19 -0
  97. package/dist/prices/providers/CoinPaprikaPriceProvider.js +23 -0
  98. package/dist/prices/providers/CustomPriceProvider.d.ts +13 -0
  99. package/dist/prices/providers/CustomPriceProvider.js +24 -0
  100. package/dist/prices/providers/KrakenPriceProvider.d.ts +29 -0
  101. package/dist/prices/providers/KrakenPriceProvider.js +36 -0
  102. package/dist/prices/providers/OKXPriceProvider.d.ts +28 -0
  103. package/dist/prices/providers/OKXPriceProvider.js +23 -0
  104. package/dist/prices/providers/abstract/ExchangePriceProvider.d.ts +14 -0
  105. package/dist/prices/providers/abstract/ExchangePriceProvider.js +18 -0
  106. package/dist/prices/providers/abstract/HttpPriceProvider.d.ts +7 -0
  107. package/dist/prices/providers/abstract/HttpPriceProvider.js +12 -0
  108. package/dist/storage/IUnifiedStorage.d.ts +73 -0
  109. package/dist/storage/IUnifiedStorage.js +2 -0
  110. package/dist/storage/UnifiedSwapStorage.d.ts +82 -0
  111. package/dist/storage/UnifiedSwapStorage.js +83 -0
  112. package/dist/storage-browser/IndexedDBUnifiedStorage.d.ts +39 -0
  113. package/dist/storage-browser/IndexedDBUnifiedStorage.js +275 -0
  114. package/dist/{storage → storage-browser}/LocalStorageManager.d.ts +1 -0
  115. package/dist/{storage → storage-browser}/LocalStorageManager.js +2 -1
  116. package/dist/swapper/Swapper.d.ts +533 -0
  117. package/dist/swapper/Swapper.js +1566 -0
  118. package/dist/swapper/SwapperFactory.d.ts +87 -0
  119. package/dist/{SwapperFactory.js → swapper/SwapperFactory.js} +37 -19
  120. package/dist/swapper/SwapperUtils.d.ts +153 -0
  121. package/dist/swapper/SwapperUtils.js +420 -0
  122. package/dist/swapper/SwapperWithChain.d.ts +214 -0
  123. package/dist/swapper/SwapperWithChain.js +315 -0
  124. package/dist/swapper/SwapperWithSigner.d.ts +178 -0
  125. package/dist/swapper/SwapperWithSigner.js +172 -0
  126. package/dist/swaps/IAddressSwap.d.ts +13 -0
  127. package/dist/swaps/IAddressSwap.js +13 -0
  128. package/dist/swaps/IBTCWalletSwap.d.ts +55 -0
  129. package/dist/swaps/IBTCWalletSwap.js +17 -0
  130. package/dist/swaps/IClaimableSwap.d.ts +17 -0
  131. package/dist/swaps/IClaimableSwap.js +14 -0
  132. package/dist/swaps/IClaimableSwapWrapper.d.ts +5 -0
  133. package/dist/swaps/IClaimableSwapWrapper.js +2 -0
  134. package/dist/swaps/IRefundableSwap.d.ts +17 -0
  135. package/dist/swaps/IRefundableSwap.js +13 -0
  136. package/dist/swaps/ISwap.d.ts +207 -0
  137. package/dist/swaps/ISwap.js +264 -0
  138. package/dist/swaps/ISwapWithGasDrop.d.ts +15 -0
  139. package/dist/swaps/ISwapWithGasDrop.js +11 -0
  140. package/dist/swaps/ISwapWrapper.d.ts +153 -0
  141. package/dist/swaps/ISwapWrapper.js +227 -0
  142. package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.d.ts +53 -0
  143. package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.js +116 -0
  144. package/dist/swaps/escrow_swaps/IEscrowSwap.d.ts +70 -0
  145. package/dist/swaps/escrow_swaps/IEscrowSwap.js +132 -0
  146. package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.d.ts +85 -0
  147. package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.js +122 -0
  148. package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.d.ts +86 -0
  149. package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.js +115 -0
  150. package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.d.ts +93 -0
  151. package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.js +121 -0
  152. package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.d.ts +45 -0
  153. package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.js +65 -0
  154. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.d.ts +263 -0
  155. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.js +933 -0
  156. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.d.ts +110 -0
  157. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.js +307 -0
  158. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.d.ts +236 -0
  159. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.js +898 -0
  160. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.d.ts +125 -0
  161. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.js +393 -0
  162. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.d.ts +245 -0
  163. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.js +841 -0
  164. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.d.ts +120 -0
  165. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.js +294 -0
  166. package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.d.ts +228 -0
  167. package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.js +721 -0
  168. package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.d.ts +37 -0
  169. package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.js +93 -0
  170. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.d.ts +86 -0
  171. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.js +213 -0
  172. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.d.ts +170 -0
  173. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.js +520 -0
  174. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.d.ts +50 -0
  175. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.js +109 -0
  176. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.d.ts +93 -0
  177. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.js +217 -0
  178. package/dist/swaps/spv_swaps/SpvFromBTCSwap.d.ts +315 -0
  179. package/dist/swaps/spv_swaps/SpvFromBTCSwap.js +1098 -0
  180. package/dist/swaps/spv_swaps/SpvFromBTCWrapper.d.ts +125 -0
  181. package/dist/swaps/spv_swaps/SpvFromBTCWrapper.js +631 -0
  182. package/dist/swaps/trusted/ln/LnForGasSwap.d.ts +107 -0
  183. package/dist/swaps/trusted/ln/LnForGasSwap.js +343 -0
  184. package/dist/swaps/trusted/ln/LnForGasWrapper.d.ts +21 -0
  185. package/dist/swaps/trusted/ln/LnForGasWrapper.js +62 -0
  186. package/dist/swaps/trusted/onchain/OnchainForGasSwap.d.ts +164 -0
  187. package/dist/swaps/trusted/onchain/OnchainForGasSwap.js +520 -0
  188. package/dist/swaps/trusted/onchain/OnchainForGasWrapper.d.ts +48 -0
  189. package/dist/swaps/trusted/onchain/OnchainForGasWrapper.js +74 -0
  190. package/dist/types/AmountData.d.ts +9 -0
  191. package/dist/types/AmountData.js +2 -0
  192. package/dist/types/CustomPriceFunction.d.ts +5 -0
  193. package/dist/types/CustomPriceFunction.js +2 -0
  194. package/dist/types/PriceInfoType.d.ts +28 -0
  195. package/dist/types/PriceInfoType.js +57 -0
  196. package/dist/types/SwapExecutionAction.d.ts +7 -0
  197. package/dist/types/SwapExecutionAction.js +2 -0
  198. package/dist/types/SwapWithSigner.d.ts +14 -0
  199. package/dist/types/SwapWithSigner.js +40 -0
  200. package/dist/types/Token.d.ts +53 -0
  201. package/dist/types/Token.js +58 -0
  202. package/dist/types/TokenAmount.d.ts +57 -0
  203. package/dist/types/TokenAmount.js +47 -0
  204. package/dist/types/fees/Fee.d.ts +49 -0
  205. package/dist/types/fees/Fee.js +2 -0
  206. package/dist/types/fees/FeeBreakdown.d.ts +10 -0
  207. package/dist/types/fees/FeeBreakdown.js +2 -0
  208. package/dist/types/fees/PercentagePPM.d.ts +15 -0
  209. package/dist/types/fees/PercentagePPM.js +17 -0
  210. package/dist/types/lnurl/LNURLPay.d.ts +54 -0
  211. package/dist/types/lnurl/LNURLPay.js +28 -0
  212. package/dist/types/lnurl/LNURLWithdraw.d.ts +42 -0
  213. package/dist/types/lnurl/LNURLWithdraw.js +24 -0
  214. package/dist/utils/AutomaticClockDriftCorrection.d.ts +1 -0
  215. package/dist/utils/AutomaticClockDriftCorrection.js +70 -0
  216. package/dist/utils/BitcoinUtils.d.ts +13 -0
  217. package/dist/utils/BitcoinUtils.js +98 -0
  218. package/dist/utils/BitcoinWalletUtils.d.ts +7 -0
  219. package/dist/utils/BitcoinWalletUtils.js +14 -0
  220. package/dist/utils/Logger.d.ts +7 -0
  221. package/dist/utils/Logger.js +12 -0
  222. package/dist/utils/RetryUtils.d.ts +21 -0
  223. package/dist/utils/RetryUtils.js +66 -0
  224. package/dist/utils/SwapUtils.d.ts +31 -0
  225. package/dist/utils/SwapUtils.js +18 -0
  226. package/dist/{Utils.d.ts → utils/TimeoutUtils.d.ts} +9 -3
  227. package/dist/utils/TimeoutUtils.js +55 -0
  228. package/dist/utils/TokenUtils.d.ts +11 -0
  229. package/dist/utils/TokenUtils.js +29 -0
  230. package/dist/utils/TypeUtils.d.ts +7 -0
  231. package/dist/utils/TypeUtils.js +2 -0
  232. package/dist/utils/Utils.d.ts +57 -0
  233. package/dist/utils/Utils.js +178 -0
  234. package/package.json +14 -6
  235. package/src/SmartChainAssets.ts +11 -3
  236. package/src/bitcoin/BitcoinRpcWithAddressIndex.ts +87 -0
  237. package/src/bitcoin/LightningNetworkApi.ts +16 -0
  238. package/src/bitcoin/coinselect2/accumulative.ts +68 -0
  239. package/src/bitcoin/coinselect2/blackjack.ts +49 -0
  240. package/src/bitcoin/coinselect2/index.ts +92 -0
  241. package/src/bitcoin/coinselect2/utils.ts +189 -0
  242. package/src/bitcoin/mempool/MempoolApi.ts +554 -0
  243. package/src/bitcoin/mempool/MempoolBitcoinBlock.ts +88 -0
  244. package/src/bitcoin/mempool/MempoolBitcoinRpc.ts +437 -0
  245. package/src/bitcoin/mempool/synchronizer/MempoolBtcRelaySynchronizer.ts +134 -0
  246. package/src/bitcoin/wallet/BitcoinWallet.ts +375 -0
  247. package/src/bitcoin/wallet/IBitcoinWallet.ts +44 -0
  248. package/src/bitcoin/wallet/MinimalBitcoinWalletInterface.ts +19 -0
  249. package/src/bitcoin/wallet/MinimalLightningNetworkWalletInterface.ts +7 -0
  250. package/src/bitcoin/wallet/SingleAddressBitcoinWallet.ts +108 -0
  251. package/src/enums/FeeType.ts +9 -0
  252. package/src/enums/SwapAmountType.ts +9 -0
  253. package/src/enums/SwapDirection.ts +9 -0
  254. package/src/enums/SwapType.ts +15 -0
  255. package/src/errors/IntermediaryError.ts +24 -0
  256. package/src/errors/PaymentAuthError.ts +26 -0
  257. package/src/errors/RequestError.ts +51 -0
  258. package/src/errors/UserError.ts +14 -0
  259. package/src/events/UnifiedSwapEventListener.ts +171 -0
  260. package/src/http/HttpUtils.ts +92 -0
  261. package/src/http/paramcoders/IParamReader.ts +10 -0
  262. package/src/http/paramcoders/ParamDecoder.ts +142 -0
  263. package/src/http/paramcoders/ParamEncoder.ts +37 -0
  264. package/src/http/paramcoders/SchemaVerifier.ts +153 -0
  265. package/src/http/paramcoders/client/ResponseParamDecoder.ts +58 -0
  266. package/src/http/paramcoders/client/StreamParamEncoder.ts +29 -0
  267. package/src/http/paramcoders/client/StreamingFetchPromise.ts +193 -0
  268. package/src/index.ts +102 -4
  269. package/src/intermediaries/Intermediary.ts +204 -0
  270. package/src/intermediaries/IntermediaryDiscovery.ts +485 -0
  271. package/src/intermediaries/apis/IntermediaryAPI.ts +940 -0
  272. package/src/intermediaries/apis/TrustedIntermediaryAPI.ts +257 -0
  273. package/src/lnurl/LNURL.ts +403 -0
  274. package/src/prices/RedundantSwapPrice.ts +245 -0
  275. package/src/prices/SingleSwapPrice.ts +47 -0
  276. package/src/prices/SwapPriceWithChain.ts +157 -0
  277. package/src/prices/abstract/ICachedSwapPrice.ts +86 -0
  278. package/src/prices/abstract/IPriceProvider.ts +128 -0
  279. package/src/prices/abstract/ISwapPrice.ts +328 -0
  280. package/src/prices/providers/BinancePriceProvider.ts +41 -0
  281. package/src/prices/providers/CoinGeckoPriceProvider.ts +40 -0
  282. package/src/prices/providers/CoinPaprikaPriceProvider.ts +44 -0
  283. package/src/prices/providers/CustomPriceProvider.ts +29 -0
  284. package/src/prices/providers/KrakenPriceProvider.ts +74 -0
  285. package/src/prices/providers/OKXPriceProvider.ts +53 -0
  286. package/src/prices/providers/abstract/ExchangePriceProvider.ts +29 -0
  287. package/src/prices/providers/abstract/HttpPriceProvider.ts +15 -0
  288. package/src/storage/IUnifiedStorage.ts +83 -0
  289. package/src/storage/UnifiedSwapStorage.ts +104 -0
  290. package/src/storage-browser/IndexedDBUnifiedStorage.ts +328 -0
  291. package/src/{storage → storage-browser}/LocalStorageManager.ts +2 -1
  292. package/src/swapper/Swapper.ts +2107 -0
  293. package/src/{SwapperFactory.ts → swapper/SwapperFactory.ts} +113 -72
  294. package/src/swapper/SwapperUtils.ts +510 -0
  295. package/src/swapper/SwapperWithChain.ts +464 -0
  296. package/src/swapper/SwapperWithSigner.ts +300 -0
  297. package/src/swaps/IAddressSwap.ts +20 -0
  298. package/src/swaps/IBTCWalletSwap.ts +77 -0
  299. package/src/swaps/IClaimableSwap.ts +30 -0
  300. package/src/swaps/IClaimableSwapWrapper.ts +9 -0
  301. package/src/swaps/IRefundableSwap.ts +29 -0
  302. package/src/swaps/ISwap.ts +490 -0
  303. package/src/swaps/ISwapWithGasDrop.ts +19 -0
  304. package/src/swaps/ISwapWrapper.ts +344 -0
  305. package/src/swaps/escrow_swaps/IEscrowSelfInitSwap.ts +168 -0
  306. package/src/swaps/escrow_swaps/IEscrowSwap.ts +197 -0
  307. package/src/swaps/escrow_swaps/IEscrowSwapWrapper.ts +210 -0
  308. package/src/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.ts +150 -0
  309. package/src/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.ts +219 -0
  310. package/src/swaps/escrow_swaps/frombtc/IFromBTCWrapper.ts +84 -0
  311. package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.ts +1082 -0
  312. package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.ts +429 -0
  313. package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.ts +1078 -0
  314. package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.ts +549 -0
  315. package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.ts +974 -0
  316. package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.ts +443 -0
  317. package/src/swaps/escrow_swaps/tobtc/IToBTCSwap.ts +860 -0
  318. package/src/swaps/escrow_swaps/tobtc/IToBTCWrapper.ts +104 -0
  319. package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.ts +256 -0
  320. package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.ts +716 -0
  321. package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.ts +151 -0
  322. package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.ts +299 -0
  323. package/src/swaps/spv_swaps/SpvFromBTCSwap.ts +1394 -0
  324. package/src/swaps/spv_swaps/SpvFromBTCWrapper.ts +796 -0
  325. package/src/swaps/trusted/ln/LnForGasSwap.ts +402 -0
  326. package/src/swaps/trusted/ln/LnForGasWrapper.ts +70 -0
  327. package/src/swaps/trusted/onchain/OnchainForGasSwap.ts +633 -0
  328. package/src/swaps/trusted/onchain/OnchainForGasWrapper.ts +110 -0
  329. package/src/types/AmountData.ts +9 -0
  330. package/src/types/CustomPriceFunction.ts +5 -0
  331. package/src/types/PriceInfoType.ts +67 -0
  332. package/src/types/SwapExecutionAction.ts +8 -0
  333. package/src/types/SwapWithSigner.ts +57 -0
  334. package/src/types/Token.ts +90 -0
  335. package/src/types/TokenAmount.ts +110 -0
  336. package/src/types/fees/Fee.ts +55 -0
  337. package/src/types/fees/FeeBreakdown.ts +11 -0
  338. package/src/types/fees/PercentagePPM.ts +24 -0
  339. package/src/types/lnurl/LNURLPay.ts +72 -0
  340. package/src/types/lnurl/LNURLWithdraw.ts +55 -0
  341. package/src/utils/AutomaticClockDriftCorrection.ts +71 -0
  342. package/src/utils/BitcoinUtils.ts +86 -0
  343. package/src/utils/BitcoinWalletUtils.ts +16 -0
  344. package/src/utils/Logger.ts +15 -0
  345. package/src/utils/RetryUtils.ts +71 -0
  346. package/src/utils/SwapUtils.ts +38 -0
  347. package/src/utils/TimeoutUtils.ts +50 -0
  348. package/src/utils/TokenUtils.ts +25 -0
  349. package/src/utils/TypeUtils.ts +9 -0
  350. package/src/utils/Utils.ts +182 -0
  351. package/dist/SwapperFactory.d.ts +0 -52
  352. package/dist/Utils.js +0 -37
  353. package/dist/fs-storage/FileSystemStorageManager.d.ts +0 -15
  354. package/dist/fs-storage/FileSystemStorageManager.js +0 -60
  355. package/dist/fs-storage/index.d.ts +0 -1
  356. package/dist/fs-storage/index.js +0 -17
  357. package/src/SmartChainAssets.js +0 -75
  358. package/src/SwapperFactory.js +0 -120
  359. package/src/Utils.js +0 -37
  360. package/src/Utils.ts +0 -31
  361. package/src/fs-storage/FileSystemStorageManager.ts +0 -71
  362. package/src/fs-storage/index.ts +0 -1
  363. package/src/index.js +0 -21
  364. package/src/storage/LocalStorageManager.js +0 -72
@@ -0,0 +1,104 @@
1
+ import {IToBTCSwap, ToBTCSwapState} from "./IToBTCSwap";
2
+ import {ChainType, ClaimEvent, InitializeEvent, RefundEvent} from "@atomiqlabs/base";
3
+ import {ISwapWrapperOptions, SwapTypeDefinition} from "../../ISwapWrapper";
4
+ import {Intermediary, SingleChainReputationType} from "../../../intermediaries/Intermediary";
5
+ import {IntermediaryError} from "../../../errors/IntermediaryError";
6
+ import {IEscrowSwapWrapper} from "../IEscrowSwapWrapper";
7
+ import {AmountData} from "../../../types/AmountData";
8
+
9
+ export type IToBTCDefinition<T extends ChainType, W extends IToBTCWrapper<T, any>, S extends IToBTCSwap<T>> = SwapTypeDefinition<T, W, S>;
10
+
11
+ export abstract class IToBTCWrapper<
12
+ T extends ChainType,
13
+ D extends IToBTCDefinition<T, IToBTCWrapper<T, D>, IToBTCSwap<T, D>>,
14
+ O extends ISwapWrapperOptions = ISwapWrapperOptions
15
+ > extends IEscrowSwapWrapper<T, D, O> {
16
+
17
+ /**
18
+ * Pre-fetches intermediary's reputation, doesn't throw, instead aborts via abortController and returns null
19
+ *
20
+ * @param amountData
21
+ * @param lp Intermediary
22
+ * @param abortController
23
+ * @protected
24
+ * @returns Intermediary's reputation or null if failed
25
+ * @throws {IntermediaryError} If the intermediary vault doesn't exist
26
+ */
27
+ protected preFetchIntermediaryReputation(
28
+ amountData: Omit<AmountData, "amount">,
29
+ lp: Intermediary,
30
+ abortController: AbortController
31
+ ): Promise<SingleChainReputationType | undefined> {
32
+ return lp.getReputation(this.chainIdentifier, this.contract, [amountData.token.toString()], abortController.signal).then(res => {
33
+ if(res==null) throw new IntermediaryError("Invalid data returned - invalid LP vault");
34
+ return res;
35
+ }).catch(e => {
36
+ this.logger.warn("preFetchIntermediaryReputation(): Error: ", e);
37
+ abortController.abort(e);
38
+ return undefined;
39
+ });
40
+ }
41
+
42
+ /**
43
+ * Pre-fetches feeRate for a given swap
44
+ *
45
+ * @param signer Address of the swap initiator
46
+ * @param amountData
47
+ * @param claimHash optional hash of the swap or null
48
+ * @param abortController
49
+ * @protected
50
+ * @returns Fee rate
51
+ */
52
+ protected preFetchFeeRate(signer: string, amountData: Omit<AmountData, "amount">, claimHash: string | undefined, abortController: AbortController): Promise<string | undefined> {
53
+ return this.contract.getInitPayInFeeRate(signer, this.chain.randomAddress(), amountData.token, claimHash)
54
+ .catch(e => {
55
+ this.logger.warn("preFetchFeeRate(): Error: ", e);
56
+ abortController.abort(e);
57
+ return undefined;
58
+ });
59
+ }
60
+
61
+ public readonly pendingSwapStates = [
62
+ ToBTCSwapState.CREATED,
63
+ ToBTCSwapState.QUOTE_SOFT_EXPIRED,
64
+ ToBTCSwapState.COMMITED,
65
+ ToBTCSwapState.SOFT_CLAIMED,
66
+ ToBTCSwapState.REFUNDABLE
67
+ ];
68
+ public readonly tickSwapState = [ToBTCSwapState.CREATED, ToBTCSwapState.COMMITED, ToBTCSwapState.SOFT_CLAIMED];
69
+ public readonly refundableSwapStates = [ToBTCSwapState.REFUNDABLE];
70
+
71
+ protected async processEventInitialize(swap: D["Swap"], event: InitializeEvent<T["Data"]>): Promise<boolean> {
72
+ if(swap.state===ToBTCSwapState.CREATED || swap.state===ToBTCSwapState.QUOTE_SOFT_EXPIRED) {
73
+ swap.state = ToBTCSwapState.COMMITED;
74
+ if(swap.commitTxId==null) swap.commitTxId = event.meta?.txId;
75
+ return true;
76
+ }
77
+ return false;
78
+ }
79
+
80
+ protected async processEventClaim(swap: D["Swap"], event: ClaimEvent<T["Data"]>): Promise<boolean> {
81
+ if(swap.state!==ToBTCSwapState.REFUNDED && swap.state!==ToBTCSwapState.CLAIMED) {
82
+ await swap._setPaymentResult({
83
+ secret: event.result,
84
+ txId: Buffer.from(event.result, "hex").reverse().toString("hex")
85
+ }).catch(e => {
86
+ this.logger.warn(`processEventClaim(): Failed to set payment result ${event.result}: `, e);
87
+ });
88
+ swap.state = ToBTCSwapState.CLAIMED;
89
+ if(swap.claimTxId==null) swap.claimTxId = event.meta?.txId;
90
+ return true;
91
+ }
92
+ return false;
93
+ }
94
+
95
+ protected processEventRefund(swap: D["Swap"], event: RefundEvent<T["Data"]>): Promise<boolean> {
96
+ if(swap.state!==ToBTCSwapState.CLAIMED && swap.state!==ToBTCSwapState.REFUNDED) {
97
+ swap.state = ToBTCSwapState.REFUNDED;
98
+ if(swap.refundTxId==null) swap.refundTxId = event.meta?.txId;
99
+ return Promise.resolve(true);
100
+ }
101
+ return Promise.resolve(false);
102
+ }
103
+
104
+ }
@@ -0,0 +1,256 @@
1
+ import {decode as bolt11Decode} from "@atomiqlabs/bolt11";
2
+ import {ToBTCLNDefinition, ToBTCLNWrapper} from "./ToBTCLNWrapper";
3
+ import {isIToBTCSwapInit, IToBTCSwap, IToBTCSwapInit} from "../IToBTCSwap";
4
+ import {SwapType} from "../../../../enums/SwapType";
5
+ import {ChainType, SwapData} from "@atomiqlabs/base";
6
+ import {Buffer} from "buffer";
7
+ import {sha256} from "@noble/hashes/sha2";
8
+ import {IntermediaryError} from "../../../../errors/IntermediaryError";
9
+ import {isLNURLPaySuccessAction, LNURL, LNURLPaySuccessAction} from "../../../../lnurl/LNURL";
10
+ import {TokenAmount, toTokenAmount} from "../../../../types/TokenAmount";
11
+ import {BitcoinTokens, BtcToken} from "../../../../types/Token";
12
+ import {getLogger, LoggerType} from "../../../../utils/Logger";
13
+ import {LNURLDecodedSuccessAction} from "../../../../types/lnurl/LNURLPay";
14
+
15
+ export type ToBTCLNSwapInit<T extends SwapData> = IToBTCSwapInit<T> & {
16
+ confidence: number;
17
+ pr?: string;
18
+ lnurl?: string;
19
+ successAction?: LNURLPaySuccessAction;
20
+ };
21
+
22
+ export function isToBTCLNSwapInit<T extends SwapData>(obj: any): obj is ToBTCLNSwapInit<T> {
23
+ return typeof (obj.confidence) === "number" &&
24
+ (obj.pr==null || typeof (obj.pr) === "string") &&
25
+ (obj.lnurl == null || typeof (obj.lnurl) === "string") &&
26
+ (obj.successAction == null || isLNURLPaySuccessAction(obj.successAction)) &&
27
+ isIToBTCSwapInit<T>(obj);
28
+ }
29
+
30
+ //Set of nodes which disallow probing, resulting in 0 confidence reported by the LP
31
+ const SNOWFLAKE_LIST: Set<string> = new Set([
32
+ "038f8f113c580048d847d6949371726653e02b928196bad310e3eda39ff61723f6",
33
+ "03a6ce61fcaacd38d31d4e3ce2d506602818e3856b4b44faff1dde9642ba705976"
34
+ ]);
35
+
36
+ /**
37
+ * Smart Chain to Lightning Network BTC swap
38
+ * @category Swaps
39
+ */
40
+ export class ToBTCLNSwap<T extends ChainType = ChainType> extends IToBTCSwap<T, ToBTCLNDefinition<T>> {
41
+ private readonly usesClaimHashAsId: boolean;
42
+
43
+ protected outputToken: BtcToken<true> = BitcoinTokens.BTCLN;
44
+ protected readonly TYPE = SwapType.TO_BTCLN;
45
+ protected readonly logger: LoggerType;
46
+
47
+ private readonly confidence: number;
48
+ private readonly pr?: string;
49
+
50
+ readonly paymentHash?: string;
51
+
52
+ lnurl?: string;
53
+ successAction?: LNURLPaySuccessAction;
54
+
55
+ private secret?: string;
56
+
57
+ constructor(wrapper: ToBTCLNWrapper<T>, init: ToBTCLNSwapInit<T["Data"]>);
58
+ constructor(wrapper: ToBTCLNWrapper<T>, obj: any);
59
+
60
+ constructor(wrapper: ToBTCLNWrapper<T>, initOrObj: ToBTCLNSwapInit<T["Data"]> | any) {
61
+ if(isToBTCLNSwapInit(initOrObj) && initOrObj.url!=null) initOrObj.url += "/tobtcln";
62
+ super(wrapper, initOrObj);
63
+ if(isToBTCLNSwapInit(initOrObj)) {
64
+ this.confidence = initOrObj.confidence;
65
+ this.pr = initOrObj.pr;
66
+ this.lnurl = initOrObj.lnurl;
67
+ this.successAction = initOrObj.successAction;
68
+ this.usesClaimHashAsId = true;
69
+ } else {
70
+ this.confidence = initOrObj.confidence;
71
+ this.pr = initOrObj.pr;
72
+ this.lnurl = initOrObj.lnurl;
73
+ this.successAction = initOrObj.successAction;
74
+ this.secret = initOrObj.secret;
75
+ this.usesClaimHashAsId = initOrObj.usesClaimHashAsId ?? false;
76
+ }
77
+
78
+ const paymentHash = this.getPaymentHash();
79
+ if(paymentHash!=null) this.paymentHash = paymentHash.toString("hex");
80
+ this.logger = getLogger("ToBTCLN("+this.getIdentifierHashString()+"): ");
81
+ this.tryRecomputeSwapPrice();
82
+ }
83
+
84
+ _setPaymentResult(result: { secret?: string; txId?: string }, check: boolean = false): Promise<boolean> {
85
+ if(result==null) return Promise.resolve(false);
86
+ if(result.secret==null) throw new IntermediaryError("No payment secret returned!");
87
+ if(check) {
88
+ const secretBuffer = Buffer.from(result.secret, "hex");
89
+ const hash = Buffer.from(sha256(secretBuffer));
90
+ const claimHash = this.wrapper.contract.getHashForHtlc(hash);
91
+
92
+ const expectedClaimHash = Buffer.from(this.getClaimHash(), "hex");
93
+ if(!claimHash.equals(expectedClaimHash)) throw new IntermediaryError("Invalid payment secret returned");
94
+ }
95
+ this.secret = result.secret;
96
+ return Promise.resolve(true);
97
+ }
98
+
99
+
100
+ //////////////////////////////
101
+ //// Amounts & fees
102
+
103
+ getOutputToken(): BtcToken<true> {
104
+ return BitcoinTokens.BTCLN;
105
+ }
106
+
107
+ getOutput(): TokenAmount<T["ChainId"], BtcToken<true>> | null {
108
+ if(this.pr==null || !this.pr.toLowerCase().startsWith("ln")) return null;
109
+ const parsedPR = bolt11Decode(this.pr);
110
+ if(parsedPR.millisatoshis==null) throw new Error("Swap invoice has no msat amount field!");
111
+ const amount = (BigInt(parsedPR.millisatoshis) + 999n) / 1000n;
112
+ return toTokenAmount(amount, this.outputToken, this.wrapper.prices, this.pricingInfo);
113
+ }
114
+
115
+
116
+ //////////////////////////////
117
+ //// Getters & utils
118
+
119
+ getOutputTxId(): string | null {
120
+ return this.getLpIdentifier();
121
+ }
122
+
123
+ /**
124
+ * Returns the lightning BOLT11 invoice where the BTC will be sent to
125
+ */
126
+ getOutputAddress(): string | null {
127
+ return this.lnurl ?? this.pr ?? null;
128
+ }
129
+
130
+ /**
131
+ * Returns payment secret (pre-image) as a proof of payment
132
+ */
133
+ getSecret(): string | null {
134
+ return this.secret ?? null;
135
+ }
136
+
137
+ /**
138
+ * Returns the confidence of the intermediary that this payment will succeed
139
+ * Value between 0 and 1, where 0 is not likely and 1 is very likely
140
+ */
141
+ getConfidence(): number {
142
+ return this.confidence;
143
+ }
144
+
145
+ /**
146
+ * Checks whether a swap is likely to fail, based on the confidence as reported by the LP
147
+ */
148
+ willLikelyFail(): boolean {
149
+ if(this.pr==null || !this.pr.toLowerCase().startsWith("ln")) return false;
150
+
151
+ const parsedRequest = bolt11Decode(this.pr);
152
+
153
+ if(parsedRequest.tagsObject.routing_info!=null) {
154
+ for (let route of parsedRequest.tagsObject.routing_info) {
155
+ if(SNOWFLAKE_LIST.has(route.pubkey)) {
156
+ return false;
157
+ }
158
+ }
159
+ }
160
+
161
+ return this.confidence===0;
162
+ }
163
+
164
+ /**
165
+ * Tries to detect if the target lightning invoice is a non-custodial mobile wallet, care must be taken
166
+ * for such a wallet to be online when attempting to make a swap
167
+ */
168
+ isPayingToNonCustodialWallet(): boolean {
169
+ if(this.pr==null || !this.pr.toLowerCase().startsWith("ln")) return false;
170
+
171
+ const parsedRequest = bolt11Decode(this.pr);
172
+
173
+ if(parsedRequest.tagsObject.routing_info!=null) {
174
+ return parsedRequest.tagsObject.routing_info.length>0;
175
+ }
176
+ return false;
177
+ }
178
+
179
+ getIdentifierHash(): Buffer {
180
+ const idBuffer: Buffer = this.usesClaimHashAsId
181
+ ? Buffer.from(this.getClaimHash(), "hex")
182
+ : this.getPaymentHash()!;
183
+ if(this.randomNonce==null) return idBuffer;
184
+ return Buffer.concat([idBuffer, Buffer.from(this.randomNonce, "hex")]);
185
+ }
186
+
187
+ getPaymentHash(): Buffer | null {
188
+ if(this.pr==null) return null;
189
+ if(this.pr.toLowerCase().startsWith("ln")) {
190
+ const parsed = bolt11Decode(this.pr);
191
+ if(parsed.tagsObject.payment_hash==null) throw new Error("Swap invoice has no payment hash field!");
192
+ return Buffer.from(parsed.tagsObject.payment_hash, "hex");
193
+ }
194
+ return Buffer.from(this.pr, "hex");
195
+ }
196
+
197
+ protected getLpIdentifier(): string {
198
+ if(this.pr==null) return this.data.getEscrowHash();
199
+ if(this.pr.toLowerCase().startsWith("ln")) {
200
+ const parsed = bolt11Decode(this.pr);
201
+ if(parsed.tagsObject.payment_hash==null) throw new Error("Swap invoice has no payment hash field!");
202
+ return parsed.tagsObject.payment_hash;
203
+ }
204
+ return this.pr;
205
+ }
206
+
207
+
208
+ //////////////////////////////
209
+ //// LNURL-pay
210
+
211
+ /**
212
+ * Is this an LNURL-pay swap?
213
+ */
214
+ isLNURL(): boolean {
215
+ return this.lnurl!=null;
216
+ }
217
+
218
+ /**
219
+ * Gets the used LNURL or null if this is not an LNURL-pay swap
220
+ */
221
+ getLNURL(): string | null {
222
+ return this.lnurl ?? null;
223
+ }
224
+
225
+ /**
226
+ * Checks whether this LNURL payment contains a success message
227
+ */
228
+ hasSuccessAction(): boolean {
229
+ return this.successAction!=null;
230
+ }
231
+
232
+ /**
233
+ * Returns the success action after a successful payment, else null
234
+ */
235
+ getSuccessAction(): LNURLDecodedSuccessAction | null {
236
+ return LNURL.decodeSuccessAction(this.successAction, this.secret);
237
+ }
238
+
239
+
240
+ //////////////////////////////
241
+ //// Storage
242
+
243
+ serialize(): any {
244
+ return {
245
+ ...super.serialize(),
246
+ paymentHash: this.getPaymentHash()?.toString("hex"),
247
+ pr: this.pr,
248
+ confidence: this.confidence,
249
+ secret: this.secret,
250
+ lnurl: this.lnurl,
251
+ successAction: this.successAction,
252
+ usesClaimHashAsId: this.usesClaimHashAsId
253
+ };
254
+ }
255
+
256
+ }