@atomiqlabs/sdk 7.0.11 → 8.0.7

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} +40 -22
  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} +116 -75
  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,37 @@
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 { IEscrowSwapWrapper } from "../IEscrowSwapWrapper";
6
+ import { AmountData } from "../../../types/AmountData";
7
+ export type IToBTCDefinition<T extends ChainType, W extends IToBTCWrapper<T, any>, S extends IToBTCSwap<T>> = SwapTypeDefinition<T, W, S>;
8
+ export declare abstract class IToBTCWrapper<T extends ChainType, D extends IToBTCDefinition<T, IToBTCWrapper<T, D>, IToBTCSwap<T, D>>, O extends ISwapWrapperOptions = ISwapWrapperOptions> extends IEscrowSwapWrapper<T, D, O> {
9
+ /**
10
+ * Pre-fetches intermediary's reputation, doesn't throw, instead aborts via abortController and returns null
11
+ *
12
+ * @param amountData
13
+ * @param lp Intermediary
14
+ * @param abortController
15
+ * @protected
16
+ * @returns Intermediary's reputation or null if failed
17
+ * @throws {IntermediaryError} If the intermediary vault doesn't exist
18
+ */
19
+ protected preFetchIntermediaryReputation(amountData: Omit<AmountData, "amount">, lp: Intermediary, abortController: AbortController): Promise<SingleChainReputationType | undefined>;
20
+ /**
21
+ * Pre-fetches feeRate for a given swap
22
+ *
23
+ * @param signer Address of the swap initiator
24
+ * @param amountData
25
+ * @param claimHash optional hash of the swap or null
26
+ * @param abortController
27
+ * @protected
28
+ * @returns Fee rate
29
+ */
30
+ protected preFetchFeeRate(signer: string, amountData: Omit<AmountData, "amount">, claimHash: string | undefined, abortController: AbortController): Promise<string | undefined>;
31
+ readonly pendingSwapStates: ToBTCSwapState[];
32
+ readonly tickSwapState: ToBTCSwapState[];
33
+ readonly refundableSwapStates: ToBTCSwapState[];
34
+ protected processEventInitialize(swap: D["Swap"], event: InitializeEvent<T["Data"]>): Promise<boolean>;
35
+ protected processEventClaim(swap: D["Swap"], event: ClaimEvent<T["Data"]>): Promise<boolean>;
36
+ protected processEventRefund(swap: D["Swap"], event: RefundEvent<T["Data"]>): Promise<boolean>;
37
+ }
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IToBTCWrapper = void 0;
4
+ const IToBTCSwap_1 = require("./IToBTCSwap");
5
+ const IntermediaryError_1 = require("../../../errors/IntermediaryError");
6
+ const IEscrowSwapWrapper_1 = require("../IEscrowSwapWrapper");
7
+ class IToBTCWrapper extends IEscrowSwapWrapper_1.IEscrowSwapWrapper {
8
+ constructor() {
9
+ super(...arguments);
10
+ this.pendingSwapStates = [
11
+ IToBTCSwap_1.ToBTCSwapState.CREATED,
12
+ IToBTCSwap_1.ToBTCSwapState.QUOTE_SOFT_EXPIRED,
13
+ IToBTCSwap_1.ToBTCSwapState.COMMITED,
14
+ IToBTCSwap_1.ToBTCSwapState.SOFT_CLAIMED,
15
+ IToBTCSwap_1.ToBTCSwapState.REFUNDABLE
16
+ ];
17
+ this.tickSwapState = [IToBTCSwap_1.ToBTCSwapState.CREATED, IToBTCSwap_1.ToBTCSwapState.COMMITED, IToBTCSwap_1.ToBTCSwapState.SOFT_CLAIMED];
18
+ this.refundableSwapStates = [IToBTCSwap_1.ToBTCSwapState.REFUNDABLE];
19
+ }
20
+ /**
21
+ * Pre-fetches intermediary's reputation, doesn't throw, instead aborts via abortController and returns null
22
+ *
23
+ * @param amountData
24
+ * @param lp Intermediary
25
+ * @param abortController
26
+ * @protected
27
+ * @returns Intermediary's reputation or null if failed
28
+ * @throws {IntermediaryError} If the intermediary vault doesn't exist
29
+ */
30
+ preFetchIntermediaryReputation(amountData, lp, abortController) {
31
+ return lp.getReputation(this.chainIdentifier, this.contract, [amountData.token.toString()], abortController.signal).then(res => {
32
+ if (res == null)
33
+ throw new IntermediaryError_1.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
+ * Pre-fetches feeRate for a given swap
43
+ *
44
+ * @param signer Address of the swap initiator
45
+ * @param amountData
46
+ * @param claimHash optional hash of the swap or null
47
+ * @param abortController
48
+ * @protected
49
+ * @returns Fee rate
50
+ */
51
+ preFetchFeeRate(signer, amountData, claimHash, abortController) {
52
+ return this.contract.getInitPayInFeeRate(signer, this.chain.randomAddress(), amountData.token, claimHash)
53
+ .catch(e => {
54
+ this.logger.warn("preFetchFeeRate(): Error: ", e);
55
+ abortController.abort(e);
56
+ return undefined;
57
+ });
58
+ }
59
+ async processEventInitialize(swap, event) {
60
+ if (swap.state === IToBTCSwap_1.ToBTCSwapState.CREATED || swap.state === IToBTCSwap_1.ToBTCSwapState.QUOTE_SOFT_EXPIRED) {
61
+ swap.state = IToBTCSwap_1.ToBTCSwapState.COMMITED;
62
+ if (swap.commitTxId == null)
63
+ swap.commitTxId = event.meta?.txId;
64
+ return true;
65
+ }
66
+ return false;
67
+ }
68
+ async processEventClaim(swap, event) {
69
+ if (swap.state !== IToBTCSwap_1.ToBTCSwapState.REFUNDED && swap.state !== IToBTCSwap_1.ToBTCSwapState.CLAIMED) {
70
+ await swap._setPaymentResult({
71
+ secret: event.result,
72
+ txId: Buffer.from(event.result, "hex").reverse().toString("hex")
73
+ }).catch(e => {
74
+ this.logger.warn(`processEventClaim(): Failed to set payment result ${event.result}: `, e);
75
+ });
76
+ swap.state = IToBTCSwap_1.ToBTCSwapState.CLAIMED;
77
+ if (swap.claimTxId == null)
78
+ swap.claimTxId = event.meta?.txId;
79
+ return true;
80
+ }
81
+ return false;
82
+ }
83
+ processEventRefund(swap, event) {
84
+ if (swap.state !== IToBTCSwap_1.ToBTCSwapState.CLAIMED && swap.state !== IToBTCSwap_1.ToBTCSwapState.REFUNDED) {
85
+ swap.state = IToBTCSwap_1.ToBTCSwapState.REFUNDED;
86
+ if (swap.refundTxId == null)
87
+ swap.refundTxId = event.meta?.txId;
88
+ return Promise.resolve(true);
89
+ }
90
+ return Promise.resolve(false);
91
+ }
92
+ }
93
+ exports.IToBTCWrapper = IToBTCWrapper;
@@ -0,0 +1,86 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ import { ToBTCLNDefinition, ToBTCLNWrapper } from "./ToBTCLNWrapper";
4
+ import { IToBTCSwap, IToBTCSwapInit } from "../IToBTCSwap";
5
+ import { SwapType } from "../../../../enums/SwapType";
6
+ import { ChainType, SwapData } from "@atomiqlabs/base";
7
+ import { Buffer } from "buffer";
8
+ import { LNURLPaySuccessAction } from "../../../../lnurl/LNURL";
9
+ import { TokenAmount } from "../../../../types/TokenAmount";
10
+ import { BtcToken } from "../../../../types/Token";
11
+ import { LoggerType } from "../../../../utils/Logger";
12
+ import { LNURLDecodedSuccessAction } from "../../../../types/lnurl/LNURLPay";
13
+ export type ToBTCLNSwapInit<T extends SwapData> = IToBTCSwapInit<T> & {
14
+ confidence: number;
15
+ pr?: string;
16
+ lnurl?: string;
17
+ successAction?: LNURLPaySuccessAction;
18
+ };
19
+ export declare function isToBTCLNSwapInit<T extends SwapData>(obj: any): obj is ToBTCLNSwapInit<T>;
20
+ /**
21
+ * Smart Chain to Lightning Network BTC swap
22
+ * @category Swaps
23
+ */
24
+ export declare class ToBTCLNSwap<T extends ChainType = ChainType> extends IToBTCSwap<T, ToBTCLNDefinition<T>> {
25
+ private readonly usesClaimHashAsId;
26
+ protected outputToken: BtcToken<true>;
27
+ protected readonly TYPE = SwapType.TO_BTCLN;
28
+ protected readonly logger: LoggerType;
29
+ private readonly confidence;
30
+ private readonly pr?;
31
+ readonly paymentHash?: string;
32
+ lnurl?: string;
33
+ successAction?: LNURLPaySuccessAction;
34
+ private secret?;
35
+ constructor(wrapper: ToBTCLNWrapper<T>, init: ToBTCLNSwapInit<T["Data"]>);
36
+ constructor(wrapper: ToBTCLNWrapper<T>, obj: any);
37
+ _setPaymentResult(result: {
38
+ secret?: string;
39
+ txId?: string;
40
+ }, check?: boolean): Promise<boolean>;
41
+ getOutputToken(): BtcToken<true>;
42
+ getOutput(): TokenAmount<T["ChainId"], BtcToken<true>> | null;
43
+ getOutputTxId(): string | null;
44
+ /**
45
+ * Returns the lightning BOLT11 invoice where the BTC will be sent to
46
+ */
47
+ getOutputAddress(): string | null;
48
+ /**
49
+ * Returns payment secret (pre-image) as a proof of payment
50
+ */
51
+ getSecret(): string | null;
52
+ /**
53
+ * Returns the confidence of the intermediary that this payment will succeed
54
+ * Value between 0 and 1, where 0 is not likely and 1 is very likely
55
+ */
56
+ getConfidence(): number;
57
+ /**
58
+ * Checks whether a swap is likely to fail, based on the confidence as reported by the LP
59
+ */
60
+ willLikelyFail(): boolean;
61
+ /**
62
+ * Tries to detect if the target lightning invoice is a non-custodial mobile wallet, care must be taken
63
+ * for such a wallet to be online when attempting to make a swap
64
+ */
65
+ isPayingToNonCustodialWallet(): boolean;
66
+ getIdentifierHash(): Buffer;
67
+ getPaymentHash(): Buffer | null;
68
+ protected getLpIdentifier(): string;
69
+ /**
70
+ * Is this an LNURL-pay swap?
71
+ */
72
+ isLNURL(): boolean;
73
+ /**
74
+ * Gets the used LNURL or null if this is not an LNURL-pay swap
75
+ */
76
+ getLNURL(): string | null;
77
+ /**
78
+ * Checks whether this LNURL payment contains a success message
79
+ */
80
+ hasSuccessAction(): boolean;
81
+ /**
82
+ * Returns the success action after a successful payment, else null
83
+ */
84
+ getSuccessAction(): LNURLDecodedSuccessAction | null;
85
+ serialize(): any;
86
+ }
@@ -0,0 +1,213 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ToBTCLNSwap = exports.isToBTCLNSwapInit = void 0;
4
+ const bolt11_1 = require("@atomiqlabs/bolt11");
5
+ const IToBTCSwap_1 = require("../IToBTCSwap");
6
+ const SwapType_1 = require("../../../../enums/SwapType");
7
+ const buffer_1 = require("buffer");
8
+ const sha2_1 = require("@noble/hashes/sha2");
9
+ const IntermediaryError_1 = require("../../../../errors/IntermediaryError");
10
+ const LNURL_1 = require("../../../../lnurl/LNURL");
11
+ const TokenAmount_1 = require("../../../../types/TokenAmount");
12
+ const Token_1 = require("../../../../types/Token");
13
+ const Logger_1 = require("../../../../utils/Logger");
14
+ function isToBTCLNSwapInit(obj) {
15
+ return typeof (obj.confidence) === "number" &&
16
+ (obj.pr == null || typeof (obj.pr) === "string") &&
17
+ (obj.lnurl == null || typeof (obj.lnurl) === "string") &&
18
+ (obj.successAction == null || (0, LNURL_1.isLNURLPaySuccessAction)(obj.successAction)) &&
19
+ (0, IToBTCSwap_1.isIToBTCSwapInit)(obj);
20
+ }
21
+ exports.isToBTCLNSwapInit = isToBTCLNSwapInit;
22
+ //Set of nodes which disallow probing, resulting in 0 confidence reported by the LP
23
+ const SNOWFLAKE_LIST = new Set([
24
+ "038f8f113c580048d847d6949371726653e02b928196bad310e3eda39ff61723f6",
25
+ "03a6ce61fcaacd38d31d4e3ce2d506602818e3856b4b44faff1dde9642ba705976"
26
+ ]);
27
+ /**
28
+ * Smart Chain to Lightning Network BTC swap
29
+ * @category Swaps
30
+ */
31
+ class ToBTCLNSwap extends IToBTCSwap_1.IToBTCSwap {
32
+ constructor(wrapper, initOrObj) {
33
+ if (isToBTCLNSwapInit(initOrObj) && initOrObj.url != null)
34
+ initOrObj.url += "/tobtcln";
35
+ super(wrapper, initOrObj);
36
+ this.outputToken = Token_1.BitcoinTokens.BTCLN;
37
+ this.TYPE = SwapType_1.SwapType.TO_BTCLN;
38
+ if (isToBTCLNSwapInit(initOrObj)) {
39
+ this.confidence = initOrObj.confidence;
40
+ this.pr = initOrObj.pr;
41
+ this.lnurl = initOrObj.lnurl;
42
+ this.successAction = initOrObj.successAction;
43
+ this.usesClaimHashAsId = true;
44
+ }
45
+ else {
46
+ this.confidence = initOrObj.confidence;
47
+ this.pr = initOrObj.pr;
48
+ this.lnurl = initOrObj.lnurl;
49
+ this.successAction = initOrObj.successAction;
50
+ this.secret = initOrObj.secret;
51
+ this.usesClaimHashAsId = initOrObj.usesClaimHashAsId ?? false;
52
+ }
53
+ const paymentHash = this.getPaymentHash();
54
+ if (paymentHash != null)
55
+ this.paymentHash = paymentHash.toString("hex");
56
+ this.logger = (0, Logger_1.getLogger)("ToBTCLN(" + this.getIdentifierHashString() + "): ");
57
+ this.tryRecomputeSwapPrice();
58
+ }
59
+ _setPaymentResult(result, check = false) {
60
+ if (result == null)
61
+ return Promise.resolve(false);
62
+ if (result.secret == null)
63
+ throw new IntermediaryError_1.IntermediaryError("No payment secret returned!");
64
+ if (check) {
65
+ const secretBuffer = buffer_1.Buffer.from(result.secret, "hex");
66
+ const hash = buffer_1.Buffer.from((0, sha2_1.sha256)(secretBuffer));
67
+ const claimHash = this.wrapper.contract.getHashForHtlc(hash);
68
+ const expectedClaimHash = buffer_1.Buffer.from(this.getClaimHash(), "hex");
69
+ if (!claimHash.equals(expectedClaimHash))
70
+ throw new IntermediaryError_1.IntermediaryError("Invalid payment secret returned");
71
+ }
72
+ this.secret = result.secret;
73
+ return Promise.resolve(true);
74
+ }
75
+ //////////////////////////////
76
+ //// Amounts & fees
77
+ getOutputToken() {
78
+ return Token_1.BitcoinTokens.BTCLN;
79
+ }
80
+ getOutput() {
81
+ if (this.pr == null || !this.pr.startsWith("ln"))
82
+ return null;
83
+ const parsedPR = (0, bolt11_1.decode)(this.pr);
84
+ if (parsedPR.millisatoshis == null)
85
+ throw new Error("Swap invoice has no msat amount field!");
86
+ const amount = (BigInt(parsedPR.millisatoshis) + 999n) / 1000n;
87
+ return (0, TokenAmount_1.toTokenAmount)(amount, this.outputToken, this.wrapper.prices, this.pricingInfo);
88
+ }
89
+ //////////////////////////////
90
+ //// Getters & utils
91
+ getOutputTxId() {
92
+ return this.getLpIdentifier();
93
+ }
94
+ /**
95
+ * Returns the lightning BOLT11 invoice where the BTC will be sent to
96
+ */
97
+ getOutputAddress() {
98
+ return this.lnurl ?? this.pr ?? null;
99
+ }
100
+ /**
101
+ * Returns payment secret (pre-image) as a proof of payment
102
+ */
103
+ getSecret() {
104
+ return this.secret ?? null;
105
+ }
106
+ /**
107
+ * Returns the confidence of the intermediary that this payment will succeed
108
+ * Value between 0 and 1, where 0 is not likely and 1 is very likely
109
+ */
110
+ getConfidence() {
111
+ return this.confidence;
112
+ }
113
+ /**
114
+ * Checks whether a swap is likely to fail, based on the confidence as reported by the LP
115
+ */
116
+ willLikelyFail() {
117
+ if (this.pr == null || !this.pr.startsWith("ln"))
118
+ return false;
119
+ const parsedRequest = (0, bolt11_1.decode)(this.pr);
120
+ if (parsedRequest.tagsObject.routing_info != null) {
121
+ for (let route of parsedRequest.tagsObject.routing_info) {
122
+ if (SNOWFLAKE_LIST.has(route.pubkey)) {
123
+ return false;
124
+ }
125
+ }
126
+ }
127
+ return this.confidence === 0;
128
+ }
129
+ /**
130
+ * Tries to detect if the target lightning invoice is a non-custodial mobile wallet, care must be taken
131
+ * for such a wallet to be online when attempting to make a swap
132
+ */
133
+ isPayingToNonCustodialWallet() {
134
+ if (this.pr == null || !this.pr.startsWith("ln"))
135
+ return false;
136
+ const parsedRequest = (0, bolt11_1.decode)(this.pr);
137
+ if (parsedRequest.tagsObject.routing_info != null) {
138
+ return parsedRequest.tagsObject.routing_info.length > 0;
139
+ }
140
+ return false;
141
+ }
142
+ getIdentifierHash() {
143
+ const idBuffer = this.usesClaimHashAsId
144
+ ? buffer_1.Buffer.from(this.getClaimHash(), "hex")
145
+ : this.getPaymentHash();
146
+ if (this.randomNonce == null)
147
+ return idBuffer;
148
+ return buffer_1.Buffer.concat([idBuffer, buffer_1.Buffer.from(this.randomNonce, "hex")]);
149
+ }
150
+ getPaymentHash() {
151
+ if (this.pr == null)
152
+ return null;
153
+ if (this.pr.startsWith("ln")) {
154
+ const parsed = (0, bolt11_1.decode)(this.pr);
155
+ if (parsed.tagsObject.payment_hash == null)
156
+ throw new Error("Swap invoice has no payment hash field!");
157
+ return buffer_1.Buffer.from(parsed.tagsObject.payment_hash, "hex");
158
+ }
159
+ return buffer_1.Buffer.from(this.pr, "hex");
160
+ }
161
+ getLpIdentifier() {
162
+ if (this.pr == null)
163
+ return this.data.getEscrowHash();
164
+ if (this.pr.startsWith("ln")) {
165
+ const parsed = (0, bolt11_1.decode)(this.pr);
166
+ if (parsed.tagsObject.payment_hash == null)
167
+ throw new Error("Swap invoice has no payment hash field!");
168
+ return parsed.tagsObject.payment_hash;
169
+ }
170
+ return this.pr;
171
+ }
172
+ //////////////////////////////
173
+ //// LNURL-pay
174
+ /**
175
+ * Is this an LNURL-pay swap?
176
+ */
177
+ isLNURL() {
178
+ return this.lnurl != null;
179
+ }
180
+ /**
181
+ * Gets the used LNURL or null if this is not an LNURL-pay swap
182
+ */
183
+ getLNURL() {
184
+ return this.lnurl ?? null;
185
+ }
186
+ /**
187
+ * Checks whether this LNURL payment contains a success message
188
+ */
189
+ hasSuccessAction() {
190
+ return this.successAction != null;
191
+ }
192
+ /**
193
+ * Returns the success action after a successful payment, else null
194
+ */
195
+ getSuccessAction() {
196
+ return LNURL_1.LNURL.decodeSuccessAction(this.successAction, this.secret);
197
+ }
198
+ //////////////////////////////
199
+ //// Storage
200
+ serialize() {
201
+ return {
202
+ ...super.serialize(),
203
+ paymentHash: this.getPaymentHash()?.toString("hex"),
204
+ pr: this.pr,
205
+ confidence: this.confidence,
206
+ secret: this.secret,
207
+ lnurl: this.lnurl,
208
+ successAction: this.successAction,
209
+ usesClaimHashAsId: this.usesClaimHashAsId
210
+ };
211
+ }
212
+ }
213
+ exports.ToBTCLNSwap = ToBTCLNSwap;
@@ -0,0 +1,170 @@
1
+ /// <reference types="node" />
2
+ import { ToBTCLNSwap } from "./ToBTCLNSwap";
3
+ import { IToBTCDefinition, IToBTCWrapper } from "../IToBTCWrapper";
4
+ import { ChainType, SwapCommitState } from "@atomiqlabs/base";
5
+ import { Intermediary } from "../../../../intermediaries/Intermediary";
6
+ import { ISwapWrapperOptions, WrapperCtorTokens } from "../../../ISwapWrapper";
7
+ import { ISwapPrice } from "../../../../prices/abstract/ISwapPrice";
8
+ import { EventEmitter } from "events";
9
+ import { SwapType } from "../../../../enums/SwapType";
10
+ import { UnifiedSwapEventListener } from "../../../../events/UnifiedSwapEventListener";
11
+ import { UnifiedSwapStorage } from "../../../../storage/UnifiedSwapStorage";
12
+ import { ISwap } from "../../../ISwap";
13
+ import { AmountData } from "../../../../types/AmountData";
14
+ import { LNURLPayParamsWithUrl } from "../../../../types/lnurl/LNURLPay";
15
+ import { AllOptional } from "../../../../utils/TypeUtils";
16
+ export type LightningWalletCallback = (valueSats: number, abortSignal?: AbortSignal) => Promise<string>;
17
+ export type InvoiceCreateService = {
18
+ getInvoice: LightningWalletCallback;
19
+ minMsats?: bigint;
20
+ maxMSats?: bigint;
21
+ };
22
+ export declare function isInvoiceCreateService(obj: any): obj is InvoiceCreateService;
23
+ export type ToBTCLNOptions = {
24
+ expirySeconds?: number;
25
+ maxFee?: bigint | Promise<bigint>;
26
+ expiryTimestamp?: bigint;
27
+ maxRoutingPPM?: bigint;
28
+ maxRoutingBaseFee?: bigint;
29
+ };
30
+ export type ToBTCLNWrapperOptions = ISwapWrapperOptions & {
31
+ lightningBaseFee: number;
32
+ lightningFeePPM: number;
33
+ paymentTimeoutSeconds: number;
34
+ };
35
+ export type ToBTCLNDefinition<T extends ChainType> = IToBTCDefinition<T, ToBTCLNWrapper<T>, ToBTCLNSwap<T>>;
36
+ export declare class ToBTCLNWrapper<T extends ChainType> extends IToBTCWrapper<T, ToBTCLNDefinition<T>, ToBTCLNWrapperOptions> {
37
+ readonly TYPE = SwapType.TO_BTCLN;
38
+ readonly swapDeserializer: typeof ToBTCLNSwap;
39
+ constructor(chainIdentifier: string, unifiedStorage: UnifiedSwapStorage<T>, unifiedChainEvents: UnifiedSwapEventListener<T>, chain: T["ChainInterface"], contract: T["Contract"], prices: ISwapPrice, tokens: WrapperCtorTokens, swapDataDeserializer: new (data: any) => T["Data"], options?: AllOptional<ToBTCLNWrapperOptions>, events?: EventEmitter<{
40
+ swapState: [ISwap];
41
+ }>);
42
+ private toRequiredSwapOptions;
43
+ private checkPaymentHashWasPaid;
44
+ /**
45
+ * Calculates maximum lightning network routing fee based on amount
46
+ *
47
+ * @param amount BTC amount of the swap in satoshis
48
+ * @param overrideBaseFee Override wrapper's default base fee
49
+ * @param overrideFeePPM Override wrapper's default PPM
50
+ * @private
51
+ * @returns Maximum lightning routing fee in sats
52
+ */
53
+ private calculateFeeForAmount;
54
+ /**
55
+ * Verifies returned LP data
56
+ *
57
+ * @param signer
58
+ * @param resp Response as returned by the LP
59
+ * @param parsedPr Parsed bolt11 lightning invoice
60
+ * @param token Smart chain token to be used in the swap
61
+ * @param lp
62
+ * @param options Swap options as passed to the swap create function
63
+ * @param data Parsed swap data returned by the LP
64
+ * @param requiredTotal Required total to be paid on the input (for exactIn swaps)
65
+ * @private
66
+ * @throws {IntermediaryError} In case the response is not valid
67
+ */
68
+ private verifyReturnedData;
69
+ /**
70
+ * Returns the quote/swap from a given intermediary
71
+ *
72
+ * @param signer Smartchain signer initiating the swap
73
+ * @param amountData
74
+ * @param lp Intermediary
75
+ * @param pr bolt11 lightning network invoice
76
+ * @param parsedPr Parsed bolt11 lightning network invoice
77
+ * @param options Options as passed to the swap create function
78
+ * @param preFetches
79
+ * @param abort Abort signal or controller, if AbortController is passed it is used as-is, when AbortSignal is passed
80
+ * it is extended with extendAbortController and then used
81
+ * @param additionalParams Additional params that should be sent to the LP
82
+ * @private
83
+ */
84
+ private getIntermediaryQuote;
85
+ /**
86
+ * Returns a newly created swap, paying for 'bolt11PayRequest' - a bitcoin LN invoice
87
+ *
88
+ * @param signer Smartchain signer's address initiating the swap
89
+ * @param bolt11PayRequest BOLT11 payment request (bitcoin lightning invoice) you wish to pay
90
+ * @param amountData Amount of token & amount to swap
91
+ * @param lps LPs (liquidity providers) to get the quotes from
92
+ * @param options Quote options
93
+ * @param additionalParams Additional parameters sent to the LP when creating the swap
94
+ * @param abortSignal Abort signal for aborting the process
95
+ * @param preFetches Existing pre-fetches for the swap (only used internally for LNURL swaps)
96
+ */
97
+ create(signer: string, bolt11PayRequest: string, amountData: Omit<AmountData, "amount">, lps: Intermediary[], options?: ToBTCLNOptions, additionalParams?: Record<string, any>, abortSignal?: AbortSignal, preFetches?: {
98
+ feeRatePromise: Promise<string | undefined>;
99
+ pricePreFetchPromise: Promise<bigint | undefined>;
100
+ usdPricePrefetchPromise: Promise<number | undefined>;
101
+ signDataPrefetchPromise?: Promise<T["PreFetchVerification"] | undefined>;
102
+ }): Promise<{
103
+ quote: Promise<ToBTCLNSwap<T>>;
104
+ intermediary: Intermediary;
105
+ }[]>;
106
+ /**
107
+ * Parses and fetches lnurl pay params from the specified lnurl
108
+ *
109
+ * @param lnurl LNURL to be parsed and fetched
110
+ * @param abortSignal
111
+ * @private
112
+ * @throws {UserError} if the LNURL is invalid or if it's not a LNURL-pay
113
+ */
114
+ private getLNURLPay;
115
+ /**
116
+ * Returns the quote/swap from the given LP
117
+ *
118
+ * @param signer Smartchain signer's address initiating the swap
119
+ * @param amountData
120
+ * @param invoiceCreateService Service for creating fixed amount invoices
121
+ * @param lp Intermediary
122
+ * @param dummyPr Dummy minimum value bolt11 lightning invoice returned from the LNURL-pay
123
+ * @param options Options as passed to the swap create function
124
+ * @param preFetches
125
+ * @param abortSignal
126
+ * @param additionalParams Additional params to be sent to the intermediary
127
+ * @private
128
+ */
129
+ private getIntermediaryQuoteExactIn;
130
+ /**
131
+ * Returns a newly created swap, allowing exactIn swaps with invoice creation service
132
+ *
133
+ * @param signer Smartchain signer's address initiating the swap
134
+ * @param invoiceCreateServicePromise
135
+ * @param amountData Amount of token & amount to swap
136
+ * @param lps LPs (liquidity providers/intermediaries) to get the quotes from
137
+ * @param options Quote options
138
+ * @param additionalParams Additional parameters sent to the intermediary when creating the swap
139
+ * @param abortSignal Abort signal for aborting the process
140
+ */
141
+ createViaInvoiceCreateService(signer: string, invoiceCreateServicePromise: Promise<InvoiceCreateService>, amountData: AmountData, lps: Intermediary[], options?: ToBTCLNOptions, additionalParams?: Record<string, any>, abortSignal?: AbortSignal): Promise<{
142
+ quote: Promise<ToBTCLNSwap<T>>;
143
+ intermediary: Intermediary;
144
+ }[]>;
145
+ /**
146
+ * Returns a newly created swap, paying for 'lnurl' - a lightning LNURL-pay
147
+ *
148
+ * @param signer Smartchain signer's address initiating the swap
149
+ * @param lnurl LMURL-pay you wish to pay
150
+ * @param amountData Amount of token & amount to swap
151
+ * @param lps LPs (liquidity providers/intermediaries) to get the quotes from
152
+ * @param options Quote options
153
+ * @param additionalParams Additional parameters sent to the intermediary when creating the swap
154
+ * @param abortSignal Abort signal for aborting the process
155
+ */
156
+ createViaLNURL(signer: string, lnurl: string | LNURLPayParamsWithUrl, amountData: AmountData, lps: Intermediary[], options?: ToBTCLNOptions & {
157
+ comment?: string;
158
+ }, additionalParams?: Record<string, any>, abortSignal?: AbortSignal): Promise<{
159
+ quote: Promise<ToBTCLNSwap<T>>;
160
+ intermediary: Intermediary;
161
+ }[]>;
162
+ recoverFromSwapDataAndState(init: {
163
+ data: T["Data"];
164
+ getInitTxId: () => Promise<string>;
165
+ getTxBlock: () => Promise<{
166
+ blockTime: number;
167
+ blockHeight: number;
168
+ }>;
169
+ }, state: SwapCommitState, lp?: Intermediary): Promise<ToBTCLNSwap<T> | null>;
170
+ }