@atomiqlabs/sdk 7.0.12 → 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} +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,132 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IEscrowSwap = exports.isIEscrowSwapInit = void 0;
4
+ const ISwap_1 = require("../ISwap");
5
+ const base_1 = require("@atomiqlabs/base");
6
+ const buffer_1 = require("buffer");
7
+ const TimeoutUtils_1 = require("../../utils/TimeoutUtils");
8
+ function isIEscrowSwapInit(obj) {
9
+ return typeof obj === 'object' &&
10
+ (obj.data == null || typeof obj.data === 'object') &&
11
+ (0, ISwap_1.isISwapInit)(obj);
12
+ }
13
+ exports.isIEscrowSwapInit = isIEscrowSwapInit;
14
+ class IEscrowSwap extends ISwap_1.ISwap {
15
+ constructor(wrapper, swapInitOrObj) {
16
+ super(wrapper, swapInitOrObj);
17
+ if (isIEscrowSwapInit(swapInitOrObj)) {
18
+ this.data = swapInitOrObj.data;
19
+ }
20
+ else {
21
+ if (swapInitOrObj.data != null)
22
+ this.data = new wrapper.swapDataDeserializer(swapInitOrObj.data);
23
+ this.commitTxId = swapInitOrObj.commitTxId;
24
+ this.claimTxId = swapInitOrObj.claimTxId;
25
+ this.refundTxId = swapInitOrObj.refundTxId;
26
+ }
27
+ }
28
+ //////////////////////////////
29
+ //// Identifiers
30
+ /**
31
+ * Returns the identification hash of the swap, usually claim data hash, but can be overriden, e.g. for
32
+ * lightning swaps the identifier hash is used instead of claim data hash
33
+ */
34
+ getIdentifierHash() {
35
+ const claimHashBuffer = buffer_1.Buffer.from(this.getClaimHash(), "hex");
36
+ if (this.randomNonce == null)
37
+ return claimHashBuffer;
38
+ return buffer_1.Buffer.concat([claimHashBuffer, buffer_1.Buffer.from(this.randomNonce, "hex")]);
39
+ }
40
+ /**
41
+ * Returns the identification hash of the swap, usually claim data hash, but can be overriden, e.g. for
42
+ * lightning swaps the identifier hash is used instead of claim data hash
43
+ */
44
+ getIdentifierHashString() {
45
+ const identifierHash = this.getIdentifierHash();
46
+ return identifierHash.toString("hex");
47
+ }
48
+ _getEscrowHash() {
49
+ return this.data?.getEscrowHash() ?? null;
50
+ }
51
+ /**
52
+ * Returns the escrow hash - i.e. hash of the escrow data
53
+ */
54
+ getEscrowHash() {
55
+ return this._getEscrowHash();
56
+ }
57
+ /**
58
+ * Returns the claim data hash - i.e. hash passed to the claim handler
59
+ */
60
+ getClaimHash() {
61
+ return this.getSwapData().getClaimHash();
62
+ }
63
+ getId() {
64
+ return this.getIdentifierHashString();
65
+ }
66
+ //////////////////////////////
67
+ //// Watchdogs
68
+ /**
69
+ * Periodically checks the chain to see whether the swap is committed
70
+ *
71
+ * @param intervalSeconds How often to check (in seconds), default to 5s
72
+ * @param abortSignal
73
+ * @protected
74
+ */
75
+ async watchdogWaitTillCommited(intervalSeconds, abortSignal) {
76
+ if (this.data == null)
77
+ throw new Error("Tried to await commitment but data is null, invalid state?");
78
+ intervalSeconds ??= 5;
79
+ let status = { type: base_1.SwapCommitStateType.NOT_COMMITED };
80
+ while (status?.type === base_1.SwapCommitStateType.NOT_COMMITED) {
81
+ await (0, TimeoutUtils_1.timeoutPromise)(intervalSeconds * 1000, abortSignal);
82
+ try {
83
+ status = await this.wrapper.contract.getCommitStatus(this._getInitiator(), this.data);
84
+ if (status?.type === base_1.SwapCommitStateType.NOT_COMMITED &&
85
+ await this._verifyQuoteDefinitelyExpired())
86
+ return false;
87
+ }
88
+ catch (e) {
89
+ this.logger.error("watchdogWaitTillCommited(): Error when fetching commit status or signature expiry: ", e);
90
+ }
91
+ }
92
+ if (abortSignal != null)
93
+ abortSignal.throwIfAborted();
94
+ return status?.type !== base_1.SwapCommitStateType.EXPIRED;
95
+ }
96
+ /**
97
+ * Periodically checks the chain to see whether the swap was finished (claimed or refunded)
98
+ *
99
+ * @param intervalSeconds How often to check (in seconds), default to 5s
100
+ * @param abortSignal
101
+ * @protected
102
+ */
103
+ async watchdogWaitTillResult(intervalSeconds, abortSignal) {
104
+ if (this.data == null)
105
+ throw new Error("Tried to await result but data is null, invalid state?");
106
+ intervalSeconds ??= 5;
107
+ let status = { type: base_1.SwapCommitStateType.COMMITED };
108
+ while (status?.type === base_1.SwapCommitStateType.COMMITED || status?.type === base_1.SwapCommitStateType.REFUNDABLE) {
109
+ await (0, TimeoutUtils_1.timeoutPromise)(intervalSeconds * 1000, abortSignal);
110
+ try {
111
+ status = await this.wrapper.contract.getCommitStatus(this._getInitiator(), this.data);
112
+ }
113
+ catch (e) {
114
+ this.logger.error("watchdogWaitTillResult(): Error when fetching commit status: ", e);
115
+ }
116
+ }
117
+ if (abortSignal != null)
118
+ abortSignal.throwIfAborted();
119
+ return status;
120
+ }
121
+ serialize() {
122
+ return {
123
+ ...super.serialize(),
124
+ data: this.data != null ? this.data.serialize() : null,
125
+ commitTxId: this.commitTxId,
126
+ claimTxId: this.claimTxId,
127
+ refundTxId: this.refundTxId
128
+ };
129
+ }
130
+ ;
131
+ }
132
+ exports.IEscrowSwap = IEscrowSwap;
@@ -0,0 +1,85 @@
1
+ /// <reference types="node" />
2
+ import { ISwapWrapper, ISwapWrapperOptions, SwapTypeDefinition, WrapperCtorTokens } from "../ISwapWrapper";
3
+ import { ChainType, ClaimEvent, InitializeEvent, RefundEvent, SignatureData, SwapCommitState, SwapEvent } from "@atomiqlabs/base";
4
+ import { ISwap } from "../ISwap";
5
+ import { UnifiedSwapStorage } from "../../storage/UnifiedSwapStorage";
6
+ import { UnifiedSwapEventListener } from "../../events/UnifiedSwapEventListener";
7
+ import { ISwapPrice } from "../../prices/abstract/ISwapPrice";
8
+ import { EventEmitter } from "events";
9
+ import { SwapType } from "../../enums/SwapType";
10
+ import { IEscrowSwap } from "./IEscrowSwap";
11
+ import { Intermediary } from "../../intermediaries/Intermediary";
12
+ export type IEscrowSwapDefinition<T extends ChainType, W extends IEscrowSwapWrapper<T, any>, S extends IEscrowSwap<T>> = SwapTypeDefinition<T, W, S>;
13
+ export declare abstract class IEscrowSwapWrapper<T extends ChainType, D extends IEscrowSwapDefinition<T, IEscrowSwapWrapper<T, D>, IEscrowSwap<T, D>>, O extends ISwapWrapperOptions = ISwapWrapperOptions> extends ISwapWrapper<T, D, O> {
14
+ readonly abstract TYPE: SwapType;
15
+ readonly contract: T["Contract"];
16
+ readonly swapDataDeserializer: new (data: any) => T["Data"];
17
+ 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: O, events?: EventEmitter<{
18
+ swapState: [ISwap];
19
+ }>);
20
+ /**
21
+ * Pre-fetches signature verification data from the server's pre-sent promise, doesn't throw, instead returns null
22
+ *
23
+ * @param signDataPrefetch Promise that resolves when we receive "signDataPrefetch" from the LP in streaming mode
24
+ * @protected
25
+ * @returns Pre-fetched signature verification data or null if failed
26
+ */
27
+ protected preFetchSignData(signDataPrefetch: Promise<any | null>): Promise<T["PreFetchVerification"] | undefined>;
28
+ /**
29
+ * Verifies swap initialization signature returned by the intermediary
30
+ *
31
+ * @param initiator A smart chain account initiating the swap
32
+ * @param data Parsed swap data from the intermediary
33
+ * @param signature Response of the intermediary
34
+ * @param feeRatePromise Pre-fetched fee rate promise
35
+ * @param preFetchSignatureVerificationData Pre-fetched signature verification data
36
+ * @param abortSignal
37
+ * @protected
38
+ * @returns Swap initialization signature expiry
39
+ * @throws {SignatureVerificationError} when swap init signature is invalid
40
+ */
41
+ protected verifyReturnedSignature(initiator: string, data: T["Data"], signature: SignatureData, feeRatePromise: Promise<any>, preFetchSignatureVerificationData: Promise<any>, abortSignal?: AbortSignal): Promise<number>;
42
+ /**
43
+ * Processes InitializeEvent for a given swap
44
+ * @param swap
45
+ * @param event
46
+ * @protected
47
+ * @returns Whether the swap was updated/changed
48
+ */
49
+ protected abstract processEventInitialize(swap: D["Swap"], event: InitializeEvent<T["Data"]>): Promise<boolean>;
50
+ /**
51
+ * Processes ClaimEvent for a given swap
52
+ * @param swap
53
+ * @param event
54
+ * @protected
55
+ * @returns Whether the swap was updated/changed
56
+ */
57
+ protected abstract processEventClaim(swap: D["Swap"], event: ClaimEvent<T["Data"]>): Promise<boolean>;
58
+ /**
59
+ * Processes RefundEvent for a given swap
60
+ * @param swap
61
+ * @param event
62
+ * @protected
63
+ * @returns Whether the swap was updated/changed
64
+ */
65
+ protected abstract processEventRefund(swap: D["Swap"], event: RefundEvent<T["Data"]>): Promise<boolean>;
66
+ /**
67
+ * Processes a single SC on-chain event
68
+ * @private
69
+ * @param event
70
+ * @param swap
71
+ */
72
+ protected processEvent(event: SwapEvent<T["Data"]>, swap: D["Swap"]): Promise<void>;
73
+ protected _checkPastSwaps(pastSwaps: D["Swap"][]): Promise<{
74
+ changedSwaps: D["Swap"][];
75
+ removeSwaps: D["Swap"][];
76
+ }>;
77
+ recoverFromSwapDataAndState(init: {
78
+ data: T["Data"];
79
+ getInitTxId: () => Promise<string>;
80
+ getTxBlock: () => Promise<{
81
+ blockTime: number;
82
+ blockHeight: number;
83
+ }>;
84
+ }, state: SwapCommitState, lp?: Intermediary): Promise<D["Swap"] | null>;
85
+ }
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IEscrowSwapWrapper = void 0;
4
+ const ISwapWrapper_1 = require("../ISwapWrapper");
5
+ const base_1 = require("@atomiqlabs/base");
6
+ class IEscrowSwapWrapper extends ISwapWrapper_1.ISwapWrapper {
7
+ constructor(chainIdentifier, unifiedStorage, unifiedChainEvents, chain, contract, prices, tokens, swapDataDeserializer, options, events) {
8
+ super(chainIdentifier, unifiedStorage, unifiedChainEvents, chain, prices, tokens, options, events);
9
+ this.swapDataDeserializer = swapDataDeserializer;
10
+ this.contract = contract;
11
+ }
12
+ /**
13
+ * Pre-fetches signature verification data from the server's pre-sent promise, doesn't throw, instead returns null
14
+ *
15
+ * @param signDataPrefetch Promise that resolves when we receive "signDataPrefetch" from the LP in streaming mode
16
+ * @protected
17
+ * @returns Pre-fetched signature verification data or null if failed
18
+ */
19
+ preFetchSignData(signDataPrefetch) {
20
+ if (this.contract.preFetchForInitSignatureVerification == null)
21
+ return Promise.resolve(undefined);
22
+ return signDataPrefetch.then(obj => {
23
+ if (obj == null)
24
+ return undefined;
25
+ return this.contract.preFetchForInitSignatureVerification(obj);
26
+ }).catch(e => {
27
+ this.logger.error("preFetchSignData(): Error: ", e);
28
+ });
29
+ }
30
+ /**
31
+ * Verifies swap initialization signature returned by the intermediary
32
+ *
33
+ * @param initiator A smart chain account initiating the swap
34
+ * @param data Parsed swap data from the intermediary
35
+ * @param signature Response of the intermediary
36
+ * @param feeRatePromise Pre-fetched fee rate promise
37
+ * @param preFetchSignatureVerificationData Pre-fetched signature verification data
38
+ * @param abortSignal
39
+ * @protected
40
+ * @returns Swap initialization signature expiry
41
+ * @throws {SignatureVerificationError} when swap init signature is invalid
42
+ */
43
+ async verifyReturnedSignature(initiator, data, signature, feeRatePromise, preFetchSignatureVerificationData, abortSignal) {
44
+ const [feeRate, preFetchedSignatureData] = await Promise.all([feeRatePromise, preFetchSignatureVerificationData]);
45
+ await this.contract.isValidInitAuthorization(initiator, data, signature, feeRate, preFetchedSignatureData);
46
+ return await this.contract.getInitAuthorizationExpiry(data, signature, preFetchedSignatureData);
47
+ }
48
+ /**
49
+ * Processes a single SC on-chain event
50
+ * @private
51
+ * @param event
52
+ * @param swap
53
+ */
54
+ async processEvent(event, swap) {
55
+ if (swap == null)
56
+ return;
57
+ let swapChanged = false;
58
+ if (event instanceof base_1.InitializeEvent) {
59
+ swapChanged = await this.processEventInitialize(swap, event);
60
+ if (event.meta?.txId != null && swap.commitTxId !== event.meta.txId) {
61
+ swap.commitTxId = event.meta.txId;
62
+ swapChanged ||= true;
63
+ }
64
+ }
65
+ if (event instanceof base_1.ClaimEvent) {
66
+ swapChanged = await this.processEventClaim(swap, event);
67
+ if (event.meta?.txId != null && swap.claimTxId !== event.meta.txId) {
68
+ swap.claimTxId = event.meta.txId;
69
+ swapChanged ||= true;
70
+ }
71
+ }
72
+ if (event instanceof base_1.RefundEvent) {
73
+ swapChanged = await this.processEventRefund(swap, event);
74
+ if (event.meta?.txId != null && swap.refundTxId !== event.meta.txId) {
75
+ swap.refundTxId = event.meta.txId;
76
+ swapChanged ||= true;
77
+ }
78
+ }
79
+ this.logger.info("processEvents(): " + event.constructor.name + " processed for " + swap.getId() + " swap: ", swap);
80
+ if (swapChanged) {
81
+ await swap._saveAndEmit();
82
+ }
83
+ }
84
+ async _checkPastSwaps(pastSwaps) {
85
+ const changedSwaps = [];
86
+ const removeSwaps = [];
87
+ const swapExpiredStatus = {};
88
+ const checkStatusSwaps = [];
89
+ for (let pastSwap of pastSwaps) {
90
+ if (pastSwap._shouldFetchExpiryStatus()) {
91
+ //Check expiry
92
+ swapExpiredStatus[pastSwap.getId()] = await pastSwap._verifyQuoteDefinitelyExpired();
93
+ }
94
+ if (pastSwap._shouldFetchCommitStatus()) {
95
+ //Add to swaps for which status should be checked
96
+ if (pastSwap.data != null)
97
+ checkStatusSwaps.push(pastSwap);
98
+ }
99
+ }
100
+ const swapStatuses = await this.contract.getCommitStatuses(checkStatusSwaps.map(val => ({ signer: val._getInitiator(), swapData: val.data })));
101
+ for (let pastSwap of checkStatusSwaps) {
102
+ const escrowHash = pastSwap.getEscrowHash();
103
+ const shouldSave = await pastSwap._sync(false, swapExpiredStatus[pastSwap.getId()], escrowHash == null ? undefined : swapStatuses[escrowHash]);
104
+ if (shouldSave) {
105
+ if (pastSwap.isQuoteExpired()) {
106
+ removeSwaps.push(pastSwap);
107
+ }
108
+ else {
109
+ changedSwaps.push(pastSwap);
110
+ }
111
+ }
112
+ }
113
+ return {
114
+ changedSwaps,
115
+ removeSwaps
116
+ };
117
+ }
118
+ recoverFromSwapDataAndState(init, state, lp) {
119
+ return Promise.resolve(null);
120
+ }
121
+ }
122
+ exports.IEscrowSwapWrapper = IEscrowSwapWrapper;
@@ -0,0 +1,86 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ /// <reference types="node" />
4
+ import { ChainType, SwapData } from "@atomiqlabs/base";
5
+ import { IFromBTCDefinition, IFromBTCWrapper } from "./IFromBTCWrapper";
6
+ import { ISwapWrapperOptions, WrapperCtorTokens } from "../../ISwapWrapper";
7
+ import { LightningNetworkApi, LNNodeLiquidity } from "../../../bitcoin/LightningNetworkApi";
8
+ import { UnifiedSwapStorage } from "../../../storage/UnifiedSwapStorage";
9
+ import { UnifiedSwapEventListener } from "../../../events/UnifiedSwapEventListener";
10
+ import { ISwapPrice } from "../../../prices/abstract/ISwapPrice";
11
+ import { EventEmitter } from "events";
12
+ import { Buffer } from "buffer";
13
+ import { Intermediary } from "../../../intermediaries/Intermediary";
14
+ import { PaymentRequestObject, TagsObject } from "@atomiqlabs/bolt11";
15
+ import { IEscrowSwap } from "../IEscrowSwap";
16
+ import { LNURLWithdrawParamsWithUrl } from "../../../types/lnurl/LNURLWithdraw";
17
+ export type IFromBTCLNDefinition<T extends ChainType, W extends IFromBTCLNWrapper<T, any>, S extends IEscrowSwap<T>> = IFromBTCDefinition<T, W, S>;
18
+ export declare abstract class IFromBTCLNWrapper<T extends ChainType, D extends IFromBTCLNDefinition<T, IFromBTCLNWrapper<T, D>, IEscrowSwap<T, D>>, O extends ISwapWrapperOptions = ISwapWrapperOptions> extends IFromBTCWrapper<T, D, O> {
19
+ protected readonly lnApi: LightningNetworkApi;
20
+ /**
21
+ * @param chainIdentifier
22
+ * @param unifiedStorage Storage interface for the current environment
23
+ * @param unifiedChainEvents On-chain event listener
24
+ * @param chain
25
+ * @param contract Underlying contract handling the swaps
26
+ * @param prices Swap pricing handler
27
+ * @param tokens
28
+ * @param swapDataDeserializer Deserializer for SwapData
29
+ * @param lnApi
30
+ * @param options
31
+ * @param events Instance to use for emitting events
32
+ */
33
+ 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"], lnApi: LightningNetworkApi, options: O, events?: EventEmitter<{
34
+ swapState: [IEscrowSwap];
35
+ }>);
36
+ /**
37
+ * Returns the swap expiry, leaving enough time for the user to claim the HTLC
38
+ *
39
+ * @param data Parsed swap data
40
+ */
41
+ getHtlcTimeout(data: SwapData): bigint;
42
+ /**
43
+ * Generates a new 32-byte secret to be used as pre-image for lightning network invoice & HTLC swap\
44
+ *
45
+ * @private
46
+ * @returns Hash pre-image & payment hash
47
+ */
48
+ protected getSecretAndHash(): {
49
+ secret: Buffer;
50
+ paymentHash: Buffer;
51
+ };
52
+ /**
53
+ * Pre-fetches intermediary's LN node capacity, doesn't throw, instead returns null
54
+ *
55
+ * @param pubkeyPromise Promise that resolves when we receive "lnPublicKey" param from the intermediary thorugh
56
+ * streaming
57
+ * @private
58
+ * @returns LN Node liquidity
59
+ */
60
+ protected preFetchLnCapacity(pubkeyPromise: Promise<string | null>): Promise<LNNodeLiquidity | null>;
61
+ /**
62
+ * Verifies whether the intermediary's lightning node has enough inbound capacity to receive the LN payment
63
+ *
64
+ * @param lp Intermediary
65
+ * @param decodedPr Decoded bolt11 lightning network invoice
66
+ * @param amountIn Amount to be paid for the swap in sats
67
+ * @param lnCapacityPrefetchPromise Pre-fetch for LN node capacity, preFetchLnCapacity()
68
+ * @param abortSignal
69
+ * @private
70
+ * @throws {IntermediaryError} if the lightning network node doesn't have enough inbound liquidity
71
+ * @throws {Error} if the lightning network node's inbound liquidity might be enough, but the swap would
72
+ * deplete more than half of the liquidity
73
+ */
74
+ protected verifyLnNodeCapacity(lp: Intermediary, decodedPr: PaymentRequestObject & {
75
+ tagsObject: TagsObject;
76
+ }, lnCapacityPrefetchPromise?: Promise<LNNodeLiquidity | null>, abortSignal?: AbortSignal): Promise<void>;
77
+ /**
78
+ * Parses and fetches lnurl withdraw params from the specified lnurl
79
+ *
80
+ * @param lnurl LNURL to be parsed and fetched
81
+ * @param abortSignal
82
+ * @private
83
+ * @throws {UserError} if the LNURL is invalid or if it's not a LNURL-withdraw
84
+ */
85
+ protected getLNURLWithdraw(lnurl: string | LNURLWithdrawParamsWithUrl, abortSignal: AbortSignal): Promise<LNURLWithdrawParamsWithUrl>;
86
+ }
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IFromBTCLNWrapper = void 0;
4
+ const IFromBTCWrapper_1 = require("./IFromBTCWrapper");
5
+ const buffer_1 = require("buffer");
6
+ const Utils_1 = require("../../../utils/Utils");
7
+ const IntermediaryError_1 = require("../../../errors/IntermediaryError");
8
+ const LNURL_1 = require("../../../lnurl/LNURL");
9
+ const UserError_1 = require("../../../errors/UserError");
10
+ const sha256_1 = require("@noble/hashes/sha256");
11
+ class IFromBTCLNWrapper extends IFromBTCWrapper_1.IFromBTCWrapper {
12
+ /**
13
+ * @param chainIdentifier
14
+ * @param unifiedStorage Storage interface for the current environment
15
+ * @param unifiedChainEvents On-chain event listener
16
+ * @param chain
17
+ * @param contract Underlying contract handling the swaps
18
+ * @param prices Swap pricing handler
19
+ * @param tokens
20
+ * @param swapDataDeserializer Deserializer for SwapData
21
+ * @param lnApi
22
+ * @param options
23
+ * @param events Instance to use for emitting events
24
+ */
25
+ constructor(chainIdentifier, unifiedStorage, unifiedChainEvents, chain, contract, prices, tokens, swapDataDeserializer, lnApi, options, events) {
26
+ super(chainIdentifier, unifiedStorage, unifiedChainEvents, chain, contract, prices, tokens, swapDataDeserializer, options, events);
27
+ this.lnApi = lnApi;
28
+ }
29
+ /**
30
+ * Returns the swap expiry, leaving enough time for the user to claim the HTLC
31
+ *
32
+ * @param data Parsed swap data
33
+ */
34
+ getHtlcTimeout(data) {
35
+ return data.getExpiry() - 600n;
36
+ }
37
+ /**
38
+ * Generates a new 32-byte secret to be used as pre-image for lightning network invoice & HTLC swap\
39
+ *
40
+ * @private
41
+ * @returns Hash pre-image & payment hash
42
+ */
43
+ getSecretAndHash() {
44
+ const secret = (0, Utils_1.randomBytes)(32);
45
+ const paymentHash = buffer_1.Buffer.from((0, sha256_1.sha256)(secret));
46
+ return { secret, paymentHash };
47
+ }
48
+ /**
49
+ * Pre-fetches intermediary's LN node capacity, doesn't throw, instead returns null
50
+ *
51
+ * @param pubkeyPromise Promise that resolves when we receive "lnPublicKey" param from the intermediary thorugh
52
+ * streaming
53
+ * @private
54
+ * @returns LN Node liquidity
55
+ */
56
+ preFetchLnCapacity(pubkeyPromise) {
57
+ return pubkeyPromise.then(pubkey => {
58
+ if (pubkey == null)
59
+ return null;
60
+ return this.lnApi.getLNNodeLiquidity(pubkey);
61
+ }).catch(e => {
62
+ this.logger.warn("preFetchLnCapacity(): Error: ", e);
63
+ return null;
64
+ });
65
+ }
66
+ /**
67
+ * Verifies whether the intermediary's lightning node has enough inbound capacity to receive the LN payment
68
+ *
69
+ * @param lp Intermediary
70
+ * @param decodedPr Decoded bolt11 lightning network invoice
71
+ * @param amountIn Amount to be paid for the swap in sats
72
+ * @param lnCapacityPrefetchPromise Pre-fetch for LN node capacity, preFetchLnCapacity()
73
+ * @param abortSignal
74
+ * @private
75
+ * @throws {IntermediaryError} if the lightning network node doesn't have enough inbound liquidity
76
+ * @throws {Error} if the lightning network node's inbound liquidity might be enough, but the swap would
77
+ * deplete more than half of the liquidity
78
+ */
79
+ async verifyLnNodeCapacity(lp, decodedPr, lnCapacityPrefetchPromise, abortSignal) {
80
+ if (decodedPr.payeeNodeKey == null)
81
+ throw new Error("Unable to extract payee pubkey from the swap invoice!");
82
+ if (decodedPr.millisatoshis == null)
83
+ throw new Error("Swap invoice doesn't contains msat amount field!");
84
+ const _result = await lnCapacityPrefetchPromise ?? await this.lnApi.getLNNodeLiquidity(decodedPr.payeeNodeKey);
85
+ if (_result === null)
86
+ throw new IntermediaryError_1.IntermediaryError("LP's lightning node not found in the lightning network graph!");
87
+ lp.lnData = _result;
88
+ if (decodedPr.payeeNodeKey !== _result.publicKey)
89
+ throw new IntermediaryError_1.IntermediaryError("Invalid pr returned - payee pubkey");
90
+ const amountIn = (BigInt(decodedPr.millisatoshis) + 999n) / 1000n;
91
+ if (_result.capacity < amountIn)
92
+ throw new IntermediaryError_1.IntermediaryError("LP's lightning node doesn't have enough inbound capacity for the swap!");
93
+ if ((_result.capacity / 2n) < amountIn)
94
+ throw new Error("LP's lightning node probably doesn't have enough inbound capacity for the swap!");
95
+ }
96
+ /**
97
+ * Parses and fetches lnurl withdraw params from the specified lnurl
98
+ *
99
+ * @param lnurl LNURL to be parsed and fetched
100
+ * @param abortSignal
101
+ * @private
102
+ * @throws {UserError} if the LNURL is invalid or if it's not a LNURL-withdraw
103
+ */
104
+ async getLNURLWithdraw(lnurl, abortSignal) {
105
+ if (typeof (lnurl) !== "string")
106
+ return lnurl;
107
+ const res = await LNURL_1.LNURL.getLNURL(lnurl, true, this.options.getRequestTimeout, abortSignal);
108
+ if (res == null)
109
+ throw new UserError_1.UserError("Invalid LNURL");
110
+ if (res.tag !== "withdrawRequest")
111
+ throw new UserError_1.UserError("Not a LNURL-withdrawal");
112
+ return res;
113
+ }
114
+ }
115
+ exports.IFromBTCLNWrapper = IFromBTCLNWrapper;
@@ -0,0 +1,93 @@
1
+ import { IFromBTCWrapper } from "./IFromBTCWrapper";
2
+ import { ChainType } from "@atomiqlabs/base";
3
+ import { Fee } from "../../../types/fees/Fee";
4
+ import { IAddressSwap } from "../../IAddressSwap";
5
+ import { IEscrowSelfInitSwap, IEscrowSelfInitSwapDefinition, IEscrowSelfInitSwapInit } from "../IEscrowSelfInitSwap";
6
+ import { FeeType } from "../../../enums/FeeType";
7
+ import { TokenAmount } from "../../../types/TokenAmount";
8
+ import { BtcToken, SCToken } from "../../../types/Token";
9
+ export type IFromBTCSelfInitDefinition<T extends ChainType, W extends IFromBTCWrapper<T, any>, S extends IFromBTCSelfInitSwap<T>> = IEscrowSelfInitSwapDefinition<T, W, S>;
10
+ export declare abstract class IFromBTCSelfInitSwap<T extends ChainType = ChainType, D extends IFromBTCSelfInitDefinition<T, IFromBTCWrapper<T, D>, IFromBTCSelfInitSwap<T, D, S>> = IFromBTCSelfInitDefinition<T, IFromBTCWrapper<T, any>, IFromBTCSelfInitSwap<T, any, any>>, S extends number = number> extends IEscrowSelfInitSwap<T, D, S> implements IAddressSwap {
11
+ protected abstract readonly inputToken: BtcToken;
12
+ protected constructor(wrapper: D["Wrapper"], init: IEscrowSelfInitSwapInit<T["Data"]>);
13
+ protected constructor(wrapper: D["Wrapper"], obj: any);
14
+ /**
15
+ * In case swapFee in BTC is not supplied it recalculates it based on swap price
16
+ * @protected
17
+ */
18
+ protected tryRecomputeSwapPrice(): void;
19
+ /**
20
+ * Returns the bitcoin address or lightning invoice to be paid for the swap
21
+ */
22
+ abstract getAddress(): string;
23
+ /**
24
+ * Returns a string that can be displayed as QR code representation of the address or lightning invoice
25
+ * (with bitcoin: or lightning: prefix)
26
+ */
27
+ abstract getHyperlink(): string;
28
+ abstract isClaimable(): boolean;
29
+ /**
30
+ * Returns if the swap can be committed
31
+ */
32
+ protected abstract canCommit(): boolean;
33
+ _getInitiator(): string;
34
+ getOutputTxId(): string | null;
35
+ getOutputAddress(): string | null;
36
+ requiresAction(): boolean;
37
+ protected getOutAmountWithoutFee(): bigint;
38
+ protected getSwapFee(): Fee<T["ChainId"], BtcToken, SCToken<T["ChainId"]>>;
39
+ getFee(): Fee;
40
+ getFeeBreakdown(): [{
41
+ type: FeeType.SWAP;
42
+ fee: Fee<T["ChainId"], BtcToken, SCToken<T["ChainId"]>>;
43
+ }];
44
+ getOutputToken(): SCToken<T["ChainId"]>;
45
+ getOutput(): TokenAmount<T["ChainId"], SCToken<T["ChainId"]>>;
46
+ abstract getInput(): TokenAmount<T["ChainId"], BtcToken>;
47
+ getInputWithoutFee(): TokenAmount<T["ChainId"], BtcToken>;
48
+ getSecurityDeposit(): TokenAmount<T["ChainId"], SCToken<T["ChainId"]>>;
49
+ getTotalDeposit(): TokenAmount<T["ChainId"], SCToken<T["ChainId"]>>;
50
+ hasEnoughForTxFees(): Promise<{
51
+ enoughBalance: boolean;
52
+ balance: TokenAmount;
53
+ required: TokenAmount;
54
+ }>;
55
+ /**
56
+ * Returns the transactions required for committing the swap on-chain, locking the tokens from the intermediary
57
+ * in an HTLC or PTLC
58
+ *
59
+ * @param skipChecks Skip checks like making sure init signature is still valid and swap wasn't commited yet
60
+ * (this is handled when swap is created (quoted), if you commit right after quoting, you can use skipChecks=true)
61
+ * @throws {Error} When in invalid state to commit the swap
62
+ */
63
+ txsCommit(skipChecks?: boolean): Promise<T["TX"][]>;
64
+ /**
65
+ * Commits the swap on-chain, locking the tokens from the intermediary in an HTLC or PTLC
66
+ *
67
+ * @param signer Signer to sign the transactions with, must be the same as used in the initialization
68
+ * @param abortSignal Abort signal to stop waiting for the transaction confirmation and abort
69
+ * @param skipChecks Skip checks like making sure init signature is still valid and swap wasn't commited yet
70
+ * (this is handled when swap is created (quoted), if you commit right after quoting, you can use skipChecks=true)
71
+ * @throws {Error} If invalid signer is provided that doesn't match the swap data
72
+ */
73
+ abstract commit(signer: T["Signer"] | T["NativeSigner"], abortSignal?: AbortSignal, skipChecks?: boolean): Promise<string>;
74
+ abstract waitTillCommited(abortSignal?: AbortSignal): Promise<void>;
75
+ getClaimFee(): Promise<bigint>;
76
+ abstract txsClaim(signer?: T["Signer"]): Promise<T["TX"][]>;
77
+ /**
78
+ * Claims and finishes the swap
79
+ *
80
+ * @param signer Signer to sign the transactions with, can also be different to the initializer
81
+ * @param abortSignal Abort signal to stop waiting for transaction confirmation
82
+ */
83
+ abstract claim(signer: T["Signer"] | T["NativeSigner"], abortSignal?: AbortSignal): Promise<string>;
84
+ /**
85
+ * Waits till the swap is successfully claimed
86
+ *
87
+ * @param maxWaitTimeSeconds Maximum time in seconds to wait for the swap to be settled
88
+ * @param abortSignal AbortSignal
89
+ * @throws {Error} If swap is in invalid state (must be COMMIT)
90
+ * @returns {boolean} whether the swap was claimed in time or not
91
+ */
92
+ abstract waitTillClaimed(maxWaitTimeSeconds?: number, abortSignal?: AbortSignal): Promise<boolean>;
93
+ }