@atomiqlabs/sdk 7.0.12 → 8.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (364) hide show
  1. package/README.md +45 -29
  2. package/dist/SmartChainAssets.d.ts +11 -3
  3. package/dist/SmartChainAssets.js +7 -3
  4. package/dist/bitcoin/BitcoinRpcWithAddressIndex.d.ts +68 -0
  5. package/dist/bitcoin/BitcoinRpcWithAddressIndex.js +2 -0
  6. package/dist/bitcoin/LightningNetworkApi.d.ts +12 -0
  7. package/dist/bitcoin/LightningNetworkApi.js +2 -0
  8. package/dist/bitcoin/coinselect2/accumulative.d.ts +6 -0
  9. package/dist/bitcoin/coinselect2/accumulative.js +52 -0
  10. package/dist/bitcoin/coinselect2/blackjack.d.ts +6 -0
  11. package/dist/bitcoin/coinselect2/blackjack.js +38 -0
  12. package/dist/bitcoin/coinselect2/index.d.ts +19 -0
  13. package/dist/bitcoin/coinselect2/index.js +69 -0
  14. package/dist/bitcoin/coinselect2/utils.d.ts +71 -0
  15. package/dist/bitcoin/coinselect2/utils.js +123 -0
  16. package/dist/bitcoin/mempool/MempoolApi.d.ts +350 -0
  17. package/dist/bitcoin/mempool/MempoolApi.js +311 -0
  18. package/dist/bitcoin/mempool/MempoolBitcoinBlock.d.ts +44 -0
  19. package/dist/bitcoin/mempool/MempoolBitcoinBlock.js +48 -0
  20. package/dist/bitcoin/mempool/MempoolBitcoinRpc.d.ts +119 -0
  21. package/dist/bitcoin/mempool/MempoolBitcoinRpc.js +361 -0
  22. package/dist/bitcoin/mempool/synchronizer/MempoolBtcRelaySynchronizer.d.ts +22 -0
  23. package/dist/bitcoin/mempool/synchronizer/MempoolBtcRelaySynchronizer.js +105 -0
  24. package/dist/bitcoin/wallet/BitcoinWallet.d.ts +93 -0
  25. package/dist/bitcoin/wallet/BitcoinWallet.js +273 -0
  26. package/dist/bitcoin/wallet/IBitcoinWallet.d.ts +28 -0
  27. package/dist/bitcoin/wallet/IBitcoinWallet.js +20 -0
  28. package/dist/bitcoin/wallet/MinimalBitcoinWalletInterface.d.ts +21 -0
  29. package/dist/bitcoin/wallet/MinimalBitcoinWalletInterface.js +2 -0
  30. package/dist/bitcoin/wallet/MinimalLightningNetworkWalletInterface.d.ts +7 -0
  31. package/dist/bitcoin/wallet/MinimalLightningNetworkWalletInterface.js +2 -0
  32. package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.d.ts +40 -0
  33. package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.js +86 -0
  34. package/dist/enums/FeeType.d.ts +8 -0
  35. package/dist/enums/FeeType.js +12 -0
  36. package/dist/enums/SwapAmountType.d.ts +8 -0
  37. package/dist/enums/SwapAmountType.js +12 -0
  38. package/dist/enums/SwapDirection.d.ts +8 -0
  39. package/dist/enums/SwapDirection.js +12 -0
  40. package/dist/enums/SwapType.d.ts +14 -0
  41. package/dist/enums/SwapType.js +18 -0
  42. package/dist/errors/IntermediaryError.d.ts +9 -0
  43. package/dist/errors/IntermediaryError.js +26 -0
  44. package/dist/errors/PaymentAuthError.d.ts +11 -0
  45. package/dist/errors/PaymentAuthError.js +23 -0
  46. package/dist/errors/RequestError.d.ts +18 -0
  47. package/dist/errors/RequestError.js +46 -0
  48. package/dist/errors/UserError.d.ts +7 -0
  49. package/dist/errors/UserError.js +15 -0
  50. package/dist/events/UnifiedSwapEventListener.d.ts +23 -0
  51. package/dist/events/UnifiedSwapEventListener.js +130 -0
  52. package/dist/http/HttpUtils.d.ts +27 -0
  53. package/dist/http/HttpUtils.js +91 -0
  54. package/dist/http/paramcoders/IParamReader.d.ts +8 -0
  55. package/dist/http/paramcoders/IParamReader.js +2 -0
  56. package/dist/http/paramcoders/ParamDecoder.d.ts +44 -0
  57. package/dist/http/paramcoders/ParamDecoder.js +132 -0
  58. package/dist/http/paramcoders/ParamEncoder.d.ts +20 -0
  59. package/dist/http/paramcoders/ParamEncoder.js +31 -0
  60. package/dist/http/paramcoders/SchemaVerifier.d.ts +26 -0
  61. package/dist/http/paramcoders/SchemaVerifier.js +145 -0
  62. package/dist/http/paramcoders/client/ResponseParamDecoder.d.ts +11 -0
  63. package/dist/http/paramcoders/client/ResponseParamDecoder.js +57 -0
  64. package/dist/http/paramcoders/client/StreamParamEncoder.d.ts +13 -0
  65. package/dist/http/paramcoders/client/StreamParamEncoder.js +26 -0
  66. package/dist/http/paramcoders/client/StreamingFetchPromise.d.ts +16 -0
  67. package/dist/http/paramcoders/client/StreamingFetchPromise.js +174 -0
  68. package/dist/index.d.ts +82 -4
  69. package/dist/index.js +128 -4
  70. package/dist/intermediaries/Intermediary.d.ts +111 -0
  71. package/dist/intermediaries/Intermediary.js +115 -0
  72. package/dist/intermediaries/IntermediaryDiscovery.d.ts +166 -0
  73. package/dist/intermediaries/IntermediaryDiscovery.js +390 -0
  74. package/dist/intermediaries/apis/IntermediaryAPI.d.ts +436 -0
  75. package/dist/intermediaries/apis/IntermediaryAPI.js +600 -0
  76. package/dist/intermediaries/apis/TrustedIntermediaryAPI.d.ts +154 -0
  77. package/dist/intermediaries/apis/TrustedIntermediaryAPI.js +136 -0
  78. package/dist/lnurl/LNURL.d.ts +102 -0
  79. package/dist/lnurl/LNURL.js +321 -0
  80. package/dist/prices/RedundantSwapPrice.d.ts +89 -0
  81. package/dist/prices/RedundantSwapPrice.js +202 -0
  82. package/dist/prices/SingleSwapPrice.d.ts +31 -0
  83. package/dist/prices/SingleSwapPrice.js +41 -0
  84. package/dist/prices/SwapPriceWithChain.d.ts +70 -0
  85. package/dist/prices/SwapPriceWithChain.js +91 -0
  86. package/dist/prices/abstract/ICachedSwapPrice.d.ts +28 -0
  87. package/dist/prices/abstract/ICachedSwapPrice.js +62 -0
  88. package/dist/prices/abstract/IPriceProvider.d.ts +81 -0
  89. package/dist/prices/abstract/IPriceProvider.js +74 -0
  90. package/dist/prices/abstract/ISwapPrice.d.ts +117 -0
  91. package/dist/prices/abstract/ISwapPrice.js +219 -0
  92. package/dist/prices/providers/BinancePriceProvider.d.ts +16 -0
  93. package/dist/prices/providers/BinancePriceProvider.js +23 -0
  94. package/dist/prices/providers/CoinGeckoPriceProvider.d.ts +17 -0
  95. package/dist/prices/providers/CoinGeckoPriceProvider.js +23 -0
  96. package/dist/prices/providers/CoinPaprikaPriceProvider.d.ts +19 -0
  97. package/dist/prices/providers/CoinPaprikaPriceProvider.js +23 -0
  98. package/dist/prices/providers/CustomPriceProvider.d.ts +13 -0
  99. package/dist/prices/providers/CustomPriceProvider.js +24 -0
  100. package/dist/prices/providers/KrakenPriceProvider.d.ts +29 -0
  101. package/dist/prices/providers/KrakenPriceProvider.js +36 -0
  102. package/dist/prices/providers/OKXPriceProvider.d.ts +28 -0
  103. package/dist/prices/providers/OKXPriceProvider.js +23 -0
  104. package/dist/prices/providers/abstract/ExchangePriceProvider.d.ts +14 -0
  105. package/dist/prices/providers/abstract/ExchangePriceProvider.js +18 -0
  106. package/dist/prices/providers/abstract/HttpPriceProvider.d.ts +7 -0
  107. package/dist/prices/providers/abstract/HttpPriceProvider.js +12 -0
  108. package/dist/storage/IUnifiedStorage.d.ts +73 -0
  109. package/dist/storage/IUnifiedStorage.js +2 -0
  110. package/dist/storage/UnifiedSwapStorage.d.ts +82 -0
  111. package/dist/storage/UnifiedSwapStorage.js +83 -0
  112. package/dist/storage-browser/IndexedDBUnifiedStorage.d.ts +39 -0
  113. package/dist/storage-browser/IndexedDBUnifiedStorage.js +275 -0
  114. package/dist/{storage → storage-browser}/LocalStorageManager.d.ts +1 -0
  115. package/dist/{storage → storage-browser}/LocalStorageManager.js +2 -1
  116. package/dist/swapper/Swapper.d.ts +533 -0
  117. package/dist/swapper/Swapper.js +1566 -0
  118. package/dist/swapper/SwapperFactory.d.ts +87 -0
  119. package/dist/{SwapperFactory.js → swapper/SwapperFactory.js} +37 -19
  120. package/dist/swapper/SwapperUtils.d.ts +153 -0
  121. package/dist/swapper/SwapperUtils.js +420 -0
  122. package/dist/swapper/SwapperWithChain.d.ts +214 -0
  123. package/dist/swapper/SwapperWithChain.js +315 -0
  124. package/dist/swapper/SwapperWithSigner.d.ts +178 -0
  125. package/dist/swapper/SwapperWithSigner.js +172 -0
  126. package/dist/swaps/IAddressSwap.d.ts +13 -0
  127. package/dist/swaps/IAddressSwap.js +13 -0
  128. package/dist/swaps/IBTCWalletSwap.d.ts +55 -0
  129. package/dist/swaps/IBTCWalletSwap.js +17 -0
  130. package/dist/swaps/IClaimableSwap.d.ts +17 -0
  131. package/dist/swaps/IClaimableSwap.js +14 -0
  132. package/dist/swaps/IClaimableSwapWrapper.d.ts +5 -0
  133. package/dist/swaps/IClaimableSwapWrapper.js +2 -0
  134. package/dist/swaps/IRefundableSwap.d.ts +17 -0
  135. package/dist/swaps/IRefundableSwap.js +13 -0
  136. package/dist/swaps/ISwap.d.ts +207 -0
  137. package/dist/swaps/ISwap.js +264 -0
  138. package/dist/swaps/ISwapWithGasDrop.d.ts +15 -0
  139. package/dist/swaps/ISwapWithGasDrop.js +11 -0
  140. package/dist/swaps/ISwapWrapper.d.ts +153 -0
  141. package/dist/swaps/ISwapWrapper.js +227 -0
  142. package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.d.ts +53 -0
  143. package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.js +116 -0
  144. package/dist/swaps/escrow_swaps/IEscrowSwap.d.ts +70 -0
  145. package/dist/swaps/escrow_swaps/IEscrowSwap.js +132 -0
  146. package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.d.ts +85 -0
  147. package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.js +122 -0
  148. package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.d.ts +86 -0
  149. package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.js +115 -0
  150. package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.d.ts +93 -0
  151. package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.js +121 -0
  152. package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.d.ts +45 -0
  153. package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.js +65 -0
  154. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.d.ts +263 -0
  155. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.js +933 -0
  156. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.d.ts +110 -0
  157. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.js +307 -0
  158. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.d.ts +236 -0
  159. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.js +898 -0
  160. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.d.ts +125 -0
  161. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.js +393 -0
  162. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.d.ts +245 -0
  163. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.js +841 -0
  164. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.d.ts +120 -0
  165. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.js +294 -0
  166. package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.d.ts +228 -0
  167. package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.js +721 -0
  168. package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.d.ts +37 -0
  169. package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.js +93 -0
  170. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.d.ts +86 -0
  171. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.js +213 -0
  172. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.d.ts +170 -0
  173. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.js +520 -0
  174. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.d.ts +50 -0
  175. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.js +109 -0
  176. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.d.ts +93 -0
  177. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.js +217 -0
  178. package/dist/swaps/spv_swaps/SpvFromBTCSwap.d.ts +315 -0
  179. package/dist/swaps/spv_swaps/SpvFromBTCSwap.js +1098 -0
  180. package/dist/swaps/spv_swaps/SpvFromBTCWrapper.d.ts +125 -0
  181. package/dist/swaps/spv_swaps/SpvFromBTCWrapper.js +631 -0
  182. package/dist/swaps/trusted/ln/LnForGasSwap.d.ts +107 -0
  183. package/dist/swaps/trusted/ln/LnForGasSwap.js +343 -0
  184. package/dist/swaps/trusted/ln/LnForGasWrapper.d.ts +21 -0
  185. package/dist/swaps/trusted/ln/LnForGasWrapper.js +62 -0
  186. package/dist/swaps/trusted/onchain/OnchainForGasSwap.d.ts +164 -0
  187. package/dist/swaps/trusted/onchain/OnchainForGasSwap.js +520 -0
  188. package/dist/swaps/trusted/onchain/OnchainForGasWrapper.d.ts +48 -0
  189. package/dist/swaps/trusted/onchain/OnchainForGasWrapper.js +74 -0
  190. package/dist/types/AmountData.d.ts +9 -0
  191. package/dist/types/AmountData.js +2 -0
  192. package/dist/types/CustomPriceFunction.d.ts +5 -0
  193. package/dist/types/CustomPriceFunction.js +2 -0
  194. package/dist/types/PriceInfoType.d.ts +28 -0
  195. package/dist/types/PriceInfoType.js +57 -0
  196. package/dist/types/SwapExecutionAction.d.ts +7 -0
  197. package/dist/types/SwapExecutionAction.js +2 -0
  198. package/dist/types/SwapWithSigner.d.ts +14 -0
  199. package/dist/types/SwapWithSigner.js +40 -0
  200. package/dist/types/Token.d.ts +53 -0
  201. package/dist/types/Token.js +58 -0
  202. package/dist/types/TokenAmount.d.ts +57 -0
  203. package/dist/types/TokenAmount.js +47 -0
  204. package/dist/types/fees/Fee.d.ts +49 -0
  205. package/dist/types/fees/Fee.js +2 -0
  206. package/dist/types/fees/FeeBreakdown.d.ts +10 -0
  207. package/dist/types/fees/FeeBreakdown.js +2 -0
  208. package/dist/types/fees/PercentagePPM.d.ts +15 -0
  209. package/dist/types/fees/PercentagePPM.js +17 -0
  210. package/dist/types/lnurl/LNURLPay.d.ts +54 -0
  211. package/dist/types/lnurl/LNURLPay.js +28 -0
  212. package/dist/types/lnurl/LNURLWithdraw.d.ts +42 -0
  213. package/dist/types/lnurl/LNURLWithdraw.js +24 -0
  214. package/dist/utils/AutomaticClockDriftCorrection.d.ts +1 -0
  215. package/dist/utils/AutomaticClockDriftCorrection.js +70 -0
  216. package/dist/utils/BitcoinUtils.d.ts +13 -0
  217. package/dist/utils/BitcoinUtils.js +98 -0
  218. package/dist/utils/BitcoinWalletUtils.d.ts +7 -0
  219. package/dist/utils/BitcoinWalletUtils.js +14 -0
  220. package/dist/utils/Logger.d.ts +7 -0
  221. package/dist/utils/Logger.js +12 -0
  222. package/dist/utils/RetryUtils.d.ts +21 -0
  223. package/dist/utils/RetryUtils.js +66 -0
  224. package/dist/utils/SwapUtils.d.ts +31 -0
  225. package/dist/utils/SwapUtils.js +18 -0
  226. package/dist/{Utils.d.ts → utils/TimeoutUtils.d.ts} +9 -3
  227. package/dist/utils/TimeoutUtils.js +55 -0
  228. package/dist/utils/TokenUtils.d.ts +11 -0
  229. package/dist/utils/TokenUtils.js +29 -0
  230. package/dist/utils/TypeUtils.d.ts +7 -0
  231. package/dist/utils/TypeUtils.js +2 -0
  232. package/dist/utils/Utils.d.ts +57 -0
  233. package/dist/utils/Utils.js +178 -0
  234. package/package.json +14 -6
  235. package/src/SmartChainAssets.ts +11 -3
  236. package/src/bitcoin/BitcoinRpcWithAddressIndex.ts +87 -0
  237. package/src/bitcoin/LightningNetworkApi.ts +16 -0
  238. package/src/bitcoin/coinselect2/accumulative.ts +68 -0
  239. package/src/bitcoin/coinselect2/blackjack.ts +49 -0
  240. package/src/bitcoin/coinselect2/index.ts +92 -0
  241. package/src/bitcoin/coinselect2/utils.ts +189 -0
  242. package/src/bitcoin/mempool/MempoolApi.ts +554 -0
  243. package/src/bitcoin/mempool/MempoolBitcoinBlock.ts +88 -0
  244. package/src/bitcoin/mempool/MempoolBitcoinRpc.ts +437 -0
  245. package/src/bitcoin/mempool/synchronizer/MempoolBtcRelaySynchronizer.ts +134 -0
  246. package/src/bitcoin/wallet/BitcoinWallet.ts +375 -0
  247. package/src/bitcoin/wallet/IBitcoinWallet.ts +44 -0
  248. package/src/bitcoin/wallet/MinimalBitcoinWalletInterface.ts +19 -0
  249. package/src/bitcoin/wallet/MinimalLightningNetworkWalletInterface.ts +7 -0
  250. package/src/bitcoin/wallet/SingleAddressBitcoinWallet.ts +108 -0
  251. package/src/enums/FeeType.ts +9 -0
  252. package/src/enums/SwapAmountType.ts +9 -0
  253. package/src/enums/SwapDirection.ts +9 -0
  254. package/src/enums/SwapType.ts +15 -0
  255. package/src/errors/IntermediaryError.ts +24 -0
  256. package/src/errors/PaymentAuthError.ts +26 -0
  257. package/src/errors/RequestError.ts +51 -0
  258. package/src/errors/UserError.ts +14 -0
  259. package/src/events/UnifiedSwapEventListener.ts +171 -0
  260. package/src/http/HttpUtils.ts +92 -0
  261. package/src/http/paramcoders/IParamReader.ts +10 -0
  262. package/src/http/paramcoders/ParamDecoder.ts +142 -0
  263. package/src/http/paramcoders/ParamEncoder.ts +37 -0
  264. package/src/http/paramcoders/SchemaVerifier.ts +153 -0
  265. package/src/http/paramcoders/client/ResponseParamDecoder.ts +58 -0
  266. package/src/http/paramcoders/client/StreamParamEncoder.ts +29 -0
  267. package/src/http/paramcoders/client/StreamingFetchPromise.ts +193 -0
  268. package/src/index.ts +102 -4
  269. package/src/intermediaries/Intermediary.ts +204 -0
  270. package/src/intermediaries/IntermediaryDiscovery.ts +485 -0
  271. package/src/intermediaries/apis/IntermediaryAPI.ts +940 -0
  272. package/src/intermediaries/apis/TrustedIntermediaryAPI.ts +257 -0
  273. package/src/lnurl/LNURL.ts +403 -0
  274. package/src/prices/RedundantSwapPrice.ts +245 -0
  275. package/src/prices/SingleSwapPrice.ts +47 -0
  276. package/src/prices/SwapPriceWithChain.ts +157 -0
  277. package/src/prices/abstract/ICachedSwapPrice.ts +86 -0
  278. package/src/prices/abstract/IPriceProvider.ts +128 -0
  279. package/src/prices/abstract/ISwapPrice.ts +328 -0
  280. package/src/prices/providers/BinancePriceProvider.ts +41 -0
  281. package/src/prices/providers/CoinGeckoPriceProvider.ts +40 -0
  282. package/src/prices/providers/CoinPaprikaPriceProvider.ts +44 -0
  283. package/src/prices/providers/CustomPriceProvider.ts +29 -0
  284. package/src/prices/providers/KrakenPriceProvider.ts +74 -0
  285. package/src/prices/providers/OKXPriceProvider.ts +53 -0
  286. package/src/prices/providers/abstract/ExchangePriceProvider.ts +29 -0
  287. package/src/prices/providers/abstract/HttpPriceProvider.ts +15 -0
  288. package/src/storage/IUnifiedStorage.ts +83 -0
  289. package/src/storage/UnifiedSwapStorage.ts +104 -0
  290. package/src/storage-browser/IndexedDBUnifiedStorage.ts +328 -0
  291. package/src/{storage → storage-browser}/LocalStorageManager.ts +2 -1
  292. package/src/swapper/Swapper.ts +2107 -0
  293. package/src/{SwapperFactory.ts → swapper/SwapperFactory.ts} +113 -72
  294. package/src/swapper/SwapperUtils.ts +510 -0
  295. package/src/swapper/SwapperWithChain.ts +464 -0
  296. package/src/swapper/SwapperWithSigner.ts +300 -0
  297. package/src/swaps/IAddressSwap.ts +20 -0
  298. package/src/swaps/IBTCWalletSwap.ts +77 -0
  299. package/src/swaps/IClaimableSwap.ts +30 -0
  300. package/src/swaps/IClaimableSwapWrapper.ts +9 -0
  301. package/src/swaps/IRefundableSwap.ts +29 -0
  302. package/src/swaps/ISwap.ts +490 -0
  303. package/src/swaps/ISwapWithGasDrop.ts +19 -0
  304. package/src/swaps/ISwapWrapper.ts +344 -0
  305. package/src/swaps/escrow_swaps/IEscrowSelfInitSwap.ts +168 -0
  306. package/src/swaps/escrow_swaps/IEscrowSwap.ts +197 -0
  307. package/src/swaps/escrow_swaps/IEscrowSwapWrapper.ts +210 -0
  308. package/src/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.ts +150 -0
  309. package/src/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.ts +219 -0
  310. package/src/swaps/escrow_swaps/frombtc/IFromBTCWrapper.ts +84 -0
  311. package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.ts +1082 -0
  312. package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.ts +429 -0
  313. package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.ts +1078 -0
  314. package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.ts +549 -0
  315. package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.ts +974 -0
  316. package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.ts +443 -0
  317. package/src/swaps/escrow_swaps/tobtc/IToBTCSwap.ts +860 -0
  318. package/src/swaps/escrow_swaps/tobtc/IToBTCWrapper.ts +104 -0
  319. package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.ts +256 -0
  320. package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.ts +716 -0
  321. package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.ts +151 -0
  322. package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.ts +299 -0
  323. package/src/swaps/spv_swaps/SpvFromBTCSwap.ts +1394 -0
  324. package/src/swaps/spv_swaps/SpvFromBTCWrapper.ts +796 -0
  325. package/src/swaps/trusted/ln/LnForGasSwap.ts +402 -0
  326. package/src/swaps/trusted/ln/LnForGasWrapper.ts +70 -0
  327. package/src/swaps/trusted/onchain/OnchainForGasSwap.ts +633 -0
  328. package/src/swaps/trusted/onchain/OnchainForGasWrapper.ts +110 -0
  329. package/src/types/AmountData.ts +9 -0
  330. package/src/types/CustomPriceFunction.ts +5 -0
  331. package/src/types/PriceInfoType.ts +67 -0
  332. package/src/types/SwapExecutionAction.ts +8 -0
  333. package/src/types/SwapWithSigner.ts +57 -0
  334. package/src/types/Token.ts +90 -0
  335. package/src/types/TokenAmount.ts +110 -0
  336. package/src/types/fees/Fee.ts +55 -0
  337. package/src/types/fees/FeeBreakdown.ts +11 -0
  338. package/src/types/fees/PercentagePPM.ts +24 -0
  339. package/src/types/lnurl/LNURLPay.ts +72 -0
  340. package/src/types/lnurl/LNURLWithdraw.ts +55 -0
  341. package/src/utils/AutomaticClockDriftCorrection.ts +71 -0
  342. package/src/utils/BitcoinUtils.ts +86 -0
  343. package/src/utils/BitcoinWalletUtils.ts +16 -0
  344. package/src/utils/Logger.ts +15 -0
  345. package/src/utils/RetryUtils.ts +71 -0
  346. package/src/utils/SwapUtils.ts +38 -0
  347. package/src/utils/TimeoutUtils.ts +50 -0
  348. package/src/utils/TokenUtils.ts +25 -0
  349. package/src/utils/TypeUtils.ts +9 -0
  350. package/src/utils/Utils.ts +182 -0
  351. package/dist/SwapperFactory.d.ts +0 -52
  352. package/dist/Utils.js +0 -37
  353. package/dist/fs-storage/FileSystemStorageManager.d.ts +0 -15
  354. package/dist/fs-storage/FileSystemStorageManager.js +0 -60
  355. package/dist/fs-storage/index.d.ts +0 -1
  356. package/dist/fs-storage/index.js +0 -17
  357. package/src/SmartChainAssets.js +0 -75
  358. package/src/SwapperFactory.js +0 -120
  359. package/src/Utils.js +0 -37
  360. package/src/Utils.ts +0 -31
  361. package/src/fs-storage/FileSystemStorageManager.ts +0 -71
  362. package/src/fs-storage/index.ts +0 -1
  363. package/src/index.js +0 -21
  364. package/src/storage/LocalStorageManager.js +0 -72
@@ -0,0 +1,107 @@
1
+ import { SwapType } from "../../../enums/SwapType";
2
+ import { ChainType } from "@atomiqlabs/base";
3
+ import { LnForGasSwapTypeDefinition, LnForGasWrapper } from "./LnForGasWrapper";
4
+ import { ISwap, ISwapInit } from "../../ISwap";
5
+ import { Fee } from "../../../types/fees/Fee";
6
+ import { IAddressSwap } from "../../IAddressSwap";
7
+ import { FeeType } from "../../../enums/FeeType";
8
+ import { TokenAmount } from "../../../types/TokenAmount";
9
+ import { BtcToken, SCToken } from "../../../types/Token";
10
+ import { LoggerType } from "../../../utils/Logger";
11
+ /**
12
+ * State enum for trusted Lightning gas swaps
13
+ * @category Swaps
14
+ */
15
+ export declare enum LnForGasSwapState {
16
+ EXPIRED = -2,
17
+ FAILED = -1,
18
+ PR_CREATED = 0,
19
+ PR_PAID = 1,
20
+ FINISHED = 2
21
+ }
22
+ export type LnForGasSwapInit = ISwapInit & {
23
+ pr: string;
24
+ outputAmount: bigint;
25
+ recipient: string;
26
+ token: string;
27
+ };
28
+ export declare function isLnForGasSwapInit(obj: any): obj is LnForGasSwapInit;
29
+ /**
30
+ * Trusted Lightning Network to gas token swap
31
+ * @category Swaps
32
+ */
33
+ export declare class LnForGasSwap<T extends ChainType = ChainType> extends ISwap<T, LnForGasSwapTypeDefinition<T>, LnForGasSwapState> implements IAddressSwap {
34
+ protected readonly currentVersion: number;
35
+ protected readonly TYPE: SwapType;
36
+ protected readonly logger: LoggerType;
37
+ private readonly pr;
38
+ private readonly outputAmount;
39
+ private readonly recipient;
40
+ private readonly token;
41
+ scTxId?: string;
42
+ constructor(wrapper: LnForGasWrapper<T>, init: LnForGasSwapInit);
43
+ constructor(wrapper: LnForGasWrapper<T>, obj: any);
44
+ protected upgradeVersion(): void;
45
+ /**
46
+ * In case swapFee in BTC is not supplied it recalculates it based on swap price
47
+ * @protected
48
+ */
49
+ protected tryRecomputeSwapPrice(): void;
50
+ _getEscrowHash(): string;
51
+ getOutputAddress(): string | null;
52
+ getInputAddress(): string | null;
53
+ getInputTxId(): string | null;
54
+ getOutputTxId(): string | null;
55
+ getId(): string;
56
+ /**
57
+ * Returns the lightning network BOLT11 invoice that needs to be paid as an input to the swap
58
+ */
59
+ getAddress(): string;
60
+ /**
61
+ * Returns a string that can be displayed as QR code representation of the lightning invoice (with lightning: prefix)
62
+ */
63
+ getHyperlink(): string;
64
+ requiresAction(): boolean;
65
+ isFinished(): boolean;
66
+ isQuoteExpired(): boolean;
67
+ isQuoteSoftExpired(): boolean;
68
+ isFailed(): boolean;
69
+ isSuccessful(): boolean;
70
+ verifyQuoteValid(): Promise<boolean>;
71
+ protected getOutAmountWithoutFee(): bigint;
72
+ getOutputToken(): SCToken<T["ChainId"]>;
73
+ getOutput(): TokenAmount<T["ChainId"], SCToken<T["ChainId"]>>;
74
+ getInputToken(): BtcToken<true>;
75
+ getInput(): TokenAmount<T["ChainId"], BtcToken<true>>;
76
+ getInputWithoutFee(): TokenAmount<T["ChainId"], BtcToken<true>>;
77
+ protected getSwapFee(): Fee<T["ChainId"], BtcToken<true>, SCToken<T["ChainId"]>>;
78
+ getFee(): Fee<T["ChainId"], BtcToken<true>, SCToken<T["ChainId"]>>;
79
+ getFeeBreakdown(): [{
80
+ type: FeeType.SWAP;
81
+ fee: Fee<T["ChainId"], BtcToken<true>, SCToken<T["ChainId"]>>;
82
+ }];
83
+ txsExecute(): Promise<{
84
+ name: "Payment";
85
+ description: string;
86
+ chain: string;
87
+ txs: {
88
+ address: string;
89
+ hyperlink: string;
90
+ }[];
91
+ }[]>;
92
+ protected checkInvoicePaid(save?: boolean): Promise<boolean | null>;
93
+ /**
94
+ * A blocking promise resolving when payment was received by the intermediary and client can continue
95
+ * rejecting in case of failure
96
+ *
97
+ * @param checkIntervalSeconds How often to poll the intermediary for answer (default 5 seconds)
98
+ * @param abortSignal Abort signal
99
+ * @throws {PaymentAuthError} If swap expired or failed
100
+ * @throws {Error} When in invalid state (not PR_CREATED)
101
+ */
102
+ waitForPayment(checkIntervalSeconds?: number, abortSignal?: AbortSignal): Promise<boolean>;
103
+ serialize(): any;
104
+ _getInitiator(): string;
105
+ _sync(save?: boolean): Promise<boolean>;
106
+ _tick(save?: boolean): Promise<boolean>;
107
+ }
@@ -0,0 +1,343 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LnForGasSwap = exports.isLnForGasSwapInit = exports.LnForGasSwapState = void 0;
4
+ const bolt11_1 = require("@atomiqlabs/bolt11");
5
+ const SwapType_1 = require("../../../enums/SwapType");
6
+ const PaymentAuthError_1 = require("../../../errors/PaymentAuthError");
7
+ const Utils_1 = require("../../../utils/Utils");
8
+ const ISwap_1 = require("../../ISwap");
9
+ const TrustedIntermediaryAPI_1 = require("../../../intermediaries/apis/TrustedIntermediaryAPI");
10
+ const FeeType_1 = require("../../../enums/FeeType");
11
+ const PercentagePPM_1 = require("../../../types/fees/PercentagePPM");
12
+ const TokenAmount_1 = require("../../../types/TokenAmount");
13
+ const Token_1 = require("../../../types/Token");
14
+ const Logger_1 = require("../../../utils/Logger");
15
+ const TimeoutUtils_1 = require("../../../utils/TimeoutUtils");
16
+ /**
17
+ * State enum for trusted Lightning gas swaps
18
+ * @category Swaps
19
+ */
20
+ var LnForGasSwapState;
21
+ (function (LnForGasSwapState) {
22
+ LnForGasSwapState[LnForGasSwapState["EXPIRED"] = -2] = "EXPIRED";
23
+ LnForGasSwapState[LnForGasSwapState["FAILED"] = -1] = "FAILED";
24
+ LnForGasSwapState[LnForGasSwapState["PR_CREATED"] = 0] = "PR_CREATED";
25
+ LnForGasSwapState[LnForGasSwapState["PR_PAID"] = 1] = "PR_PAID";
26
+ LnForGasSwapState[LnForGasSwapState["FINISHED"] = 2] = "FINISHED";
27
+ })(LnForGasSwapState = exports.LnForGasSwapState || (exports.LnForGasSwapState = {}));
28
+ function isLnForGasSwapInit(obj) {
29
+ return typeof (obj.pr) === "string" &&
30
+ typeof (obj.outputAmount) === "bigint" &&
31
+ typeof (obj.recipient) === "string" &&
32
+ typeof (obj.token) === "string" &&
33
+ (0, ISwap_1.isISwapInit)(obj);
34
+ }
35
+ exports.isLnForGasSwapInit = isLnForGasSwapInit;
36
+ /**
37
+ * Trusted Lightning Network to gas token swap
38
+ * @category Swaps
39
+ */
40
+ class LnForGasSwap extends ISwap_1.ISwap {
41
+ constructor(wrapper, initOrObj) {
42
+ if (isLnForGasSwapInit(initOrObj) && initOrObj.url != null)
43
+ initOrObj.url += "/lnforgas";
44
+ super(wrapper, initOrObj);
45
+ this.currentVersion = 2;
46
+ this.TYPE = SwapType_1.SwapType.TRUSTED_FROM_BTCLN;
47
+ if (isLnForGasSwapInit(initOrObj)) {
48
+ this.pr = initOrObj.pr;
49
+ this.outputAmount = initOrObj.outputAmount;
50
+ this.recipient = initOrObj.recipient;
51
+ this.token = initOrObj.token;
52
+ this.state = LnForGasSwapState.PR_CREATED;
53
+ }
54
+ else {
55
+ this.pr = initOrObj.pr;
56
+ this.outputAmount = (0, Utils_1.toBigInt)(initOrObj.outputAmount);
57
+ this.recipient = initOrObj.recipient;
58
+ this.token = initOrObj.token;
59
+ this.scTxId = initOrObj.scTxId;
60
+ }
61
+ this.tryRecomputeSwapPrice();
62
+ if (this.pr != null) {
63
+ const decoded = (0, bolt11_1.decode)(this.pr);
64
+ if (decoded.timeExpireDate != null)
65
+ this.expiry = decoded.timeExpireDate * 1000;
66
+ }
67
+ this.logger = (0, Logger_1.getLogger)("LnForGas(" + this.getId() + "): ");
68
+ }
69
+ upgradeVersion() {
70
+ if (this.version == 1) {
71
+ if (this.state === 1)
72
+ this.state = LnForGasSwapState.FINISHED;
73
+ this.version = 2;
74
+ }
75
+ if (this.version == null) {
76
+ //Noop
77
+ this.version = 1;
78
+ }
79
+ }
80
+ /**
81
+ * In case swapFee in BTC is not supplied it recalculates it based on swap price
82
+ * @protected
83
+ */
84
+ tryRecomputeSwapPrice() {
85
+ if (this.swapFeeBtc == null && this.swapFee != null) {
86
+ this.swapFeeBtc = this.swapFee * this.getInput().rawAmount / this.getOutAmountWithoutFee();
87
+ }
88
+ super.tryRecomputeSwapPrice();
89
+ }
90
+ //////////////////////////////
91
+ //// Getters & utils
92
+ _getEscrowHash() {
93
+ return this.getId();
94
+ }
95
+ getOutputAddress() {
96
+ return this.recipient;
97
+ }
98
+ getInputAddress() {
99
+ return this.pr;
100
+ }
101
+ getInputTxId() {
102
+ return this.getId();
103
+ }
104
+ getOutputTxId() {
105
+ return this.scTxId ?? null;
106
+ }
107
+ getId() {
108
+ if (this.pr == null)
109
+ throw new Error("No payment request assigned to this swap!");
110
+ const decodedPR = (0, bolt11_1.decode)(this.pr);
111
+ if (decodedPR.tagsObject.payment_hash == null)
112
+ throw new Error("Lightning invoice has no payment hash!");
113
+ return decodedPR.tagsObject.payment_hash;
114
+ }
115
+ /**
116
+ * Returns the lightning network BOLT11 invoice that needs to be paid as an input to the swap
117
+ */
118
+ getAddress() {
119
+ return this.pr;
120
+ }
121
+ /**
122
+ * Returns a string that can be displayed as QR code representation of the lightning invoice (with lightning: prefix)
123
+ */
124
+ getHyperlink() {
125
+ return "lightning:" + this.pr.toUpperCase();
126
+ }
127
+ requiresAction() {
128
+ return false;
129
+ }
130
+ isFinished() {
131
+ return this.state === LnForGasSwapState.FINISHED || this.state === LnForGasSwapState.FAILED || this.state === LnForGasSwapState.EXPIRED;
132
+ }
133
+ isQuoteExpired() {
134
+ return this.state === LnForGasSwapState.EXPIRED;
135
+ }
136
+ isQuoteSoftExpired() {
137
+ return this.expiry < Date.now();
138
+ }
139
+ isFailed() {
140
+ return this.state === LnForGasSwapState.FAILED;
141
+ }
142
+ isSuccessful() {
143
+ return this.state === LnForGasSwapState.FINISHED;
144
+ }
145
+ verifyQuoteValid() {
146
+ return Promise.resolve(this.expiry > Date.now());
147
+ }
148
+ //////////////////////////////
149
+ //// Amounts & fees
150
+ getOutAmountWithoutFee() {
151
+ return this.outputAmount + (this.swapFee ?? 0n);
152
+ }
153
+ getOutputToken() {
154
+ return this.wrapper.tokens[this.wrapper.chain.getNativeCurrencyAddress()];
155
+ }
156
+ getOutput() {
157
+ return (0, TokenAmount_1.toTokenAmount)(this.outputAmount, this.wrapper.tokens[this.wrapper.chain.getNativeCurrencyAddress()], this.wrapper.prices, this.pricingInfo);
158
+ }
159
+ getInputToken() {
160
+ return Token_1.BitcoinTokens.BTCLN;
161
+ }
162
+ getInput() {
163
+ const parsed = (0, bolt11_1.decode)(this.pr);
164
+ const msats = parsed.millisatoshis;
165
+ if (msats == null)
166
+ throw new Error("Swap lightning invoice has no msat amount field!");
167
+ const amount = (BigInt(msats) + 999n) / 1000n;
168
+ return (0, TokenAmount_1.toTokenAmount)(amount, Token_1.BitcoinTokens.BTCLN, this.wrapper.prices, this.pricingInfo);
169
+ }
170
+ getInputWithoutFee() {
171
+ const parsed = (0, bolt11_1.decode)(this.pr);
172
+ const msats = parsed.millisatoshis;
173
+ if (msats == null)
174
+ throw new Error("Swap lightning invoice has no msat amount field!");
175
+ const amount = (BigInt(msats) + 999n) / 1000n;
176
+ return (0, TokenAmount_1.toTokenAmount)(amount - (this.swapFeeBtc ?? 0n), Token_1.BitcoinTokens.BTCLN, this.wrapper.prices, this.pricingInfo);
177
+ }
178
+ getSwapFee() {
179
+ if (this.pricingInfo == null)
180
+ throw new Error("No pricing info known, cannot estimate swap fee!");
181
+ const feeWithoutBaseFee = this.swapFeeBtc == null ? 0n : this.swapFeeBtc - this.pricingInfo.satsBaseFee;
182
+ const swapFeePPM = feeWithoutBaseFee * 1000000n / this.getInputWithoutFee().rawAmount;
183
+ const amountInSrcToken = (0, TokenAmount_1.toTokenAmount)(this.swapFeeBtc ?? 0n, Token_1.BitcoinTokens.BTCLN, this.wrapper.prices, this.pricingInfo);
184
+ return {
185
+ amountInSrcToken,
186
+ amountInDstToken: (0, TokenAmount_1.toTokenAmount)(this.swapFee ?? 0n, this.wrapper.tokens[this.wrapper.chain.getNativeCurrencyAddress()], this.wrapper.prices, this.pricingInfo),
187
+ currentUsdValue: amountInSrcToken.currentUsdValue,
188
+ usdValue: amountInSrcToken.usdValue,
189
+ pastUsdValue: amountInSrcToken.pastUsdValue,
190
+ composition: {
191
+ base: (0, TokenAmount_1.toTokenAmount)(this.pricingInfo.satsBaseFee, Token_1.BitcoinTokens.BTCLN, this.wrapper.prices, this.pricingInfo),
192
+ percentage: (0, PercentagePPM_1.ppmToPercentage)(swapFeePPM)
193
+ }
194
+ };
195
+ }
196
+ getFee() {
197
+ return this.getSwapFee();
198
+ }
199
+ getFeeBreakdown() {
200
+ return [{
201
+ type: FeeType_1.FeeType.SWAP,
202
+ fee: this.getSwapFee()
203
+ }];
204
+ }
205
+ //////////////////////////////
206
+ //// Payment
207
+ async txsExecute() {
208
+ if (this.state === LnForGasSwapState.PR_CREATED) {
209
+ if (!await this.verifyQuoteValid())
210
+ throw new Error("Quote already expired or close to expiry!");
211
+ return [
212
+ {
213
+ name: "Payment",
214
+ description: "Initiates the swap by paying up the lightning network invoice",
215
+ chain: "LIGHTNING",
216
+ txs: [
217
+ {
218
+ address: this.pr,
219
+ hyperlink: this.getHyperlink()
220
+ }
221
+ ]
222
+ }
223
+ ];
224
+ }
225
+ throw new Error("Invalid swap state to obtain execution txns, required PR_CREATED");
226
+ }
227
+ async checkInvoicePaid(save = true) {
228
+ if (this.state === LnForGasSwapState.FAILED || this.state === LnForGasSwapState.EXPIRED)
229
+ return false;
230
+ if (this.state === LnForGasSwapState.FINISHED)
231
+ return true;
232
+ if (this.url == null)
233
+ return false;
234
+ const decodedPR = (0, bolt11_1.decode)(this.pr);
235
+ const paymentHash = decodedPR.tagsObject.payment_hash;
236
+ if (paymentHash == null)
237
+ throw new Error("Invalid swap invoice, payment hash not found!");
238
+ const response = await TrustedIntermediaryAPI_1.TrustedIntermediaryAPI.getInvoiceStatus(this.url, paymentHash, this.wrapper.options.getRequestTimeout);
239
+ this.logger.debug("checkInvoicePaid(): LP response: ", response);
240
+ switch (response.code) {
241
+ case TrustedIntermediaryAPI_1.InvoiceStatusResponseCodes.PAID:
242
+ this.scTxId = response.data.txId;
243
+ const txStatus = await this.wrapper.chain.getTxIdStatus(this.scTxId);
244
+ if (txStatus === "success") {
245
+ this.state = LnForGasSwapState.FINISHED;
246
+ if (save)
247
+ await this._saveAndEmit();
248
+ return true;
249
+ }
250
+ return null;
251
+ case TrustedIntermediaryAPI_1.InvoiceStatusResponseCodes.EXPIRED:
252
+ if (this.state === LnForGasSwapState.PR_CREATED) {
253
+ this.state = LnForGasSwapState.EXPIRED;
254
+ }
255
+ else {
256
+ this.state = LnForGasSwapState.FAILED;
257
+ }
258
+ if (save)
259
+ await this._saveAndEmit();
260
+ return false;
261
+ case TrustedIntermediaryAPI_1.InvoiceStatusResponseCodes.TX_SENT:
262
+ this.scTxId = response.data.txId;
263
+ if (this.state === LnForGasSwapState.PR_CREATED) {
264
+ this.state = LnForGasSwapState.PR_PAID;
265
+ if (save)
266
+ await this._saveAndEmit();
267
+ }
268
+ return null;
269
+ case TrustedIntermediaryAPI_1.InvoiceStatusResponseCodes.PENDING:
270
+ if (this.state === LnForGasSwapState.PR_CREATED) {
271
+ this.state = LnForGasSwapState.PR_PAID;
272
+ if (save)
273
+ await this._saveAndEmit();
274
+ }
275
+ return null;
276
+ case TrustedIntermediaryAPI_1.InvoiceStatusResponseCodes.AWAIT_PAYMENT:
277
+ return null;
278
+ default:
279
+ this.state = LnForGasSwapState.FAILED;
280
+ if (save)
281
+ await this._saveAndEmit();
282
+ return false;
283
+ }
284
+ }
285
+ /**
286
+ * A blocking promise resolving when payment was received by the intermediary and client can continue
287
+ * rejecting in case of failure
288
+ *
289
+ * @param checkIntervalSeconds How often to poll the intermediary for answer (default 5 seconds)
290
+ * @param abortSignal Abort signal
291
+ * @throws {PaymentAuthError} If swap expired or failed
292
+ * @throws {Error} When in invalid state (not PR_CREATED)
293
+ */
294
+ async waitForPayment(checkIntervalSeconds, abortSignal) {
295
+ if (this.state !== LnForGasSwapState.PR_CREATED)
296
+ throw new Error("Must be in PR_CREATED state!");
297
+ if (!this.initiated) {
298
+ this.initiated = true;
299
+ await this._saveAndEmit();
300
+ }
301
+ while (!abortSignal?.aborted && (this.state === LnForGasSwapState.PR_CREATED || this.state === LnForGasSwapState.PR_PAID)) {
302
+ await this.checkInvoicePaid(true);
303
+ if (this.state === LnForGasSwapState.PR_CREATED || this.state === LnForGasSwapState.PR_PAID)
304
+ await (0, TimeoutUtils_1.timeoutPromise)((checkIntervalSeconds ?? 5) * 1000, abortSignal);
305
+ }
306
+ if (this.isFailed())
307
+ throw new PaymentAuthError_1.PaymentAuthError("Swap failed");
308
+ return !this.isQuoteExpired();
309
+ }
310
+ //////////////////////////////
311
+ //// Storage
312
+ serialize() {
313
+ return {
314
+ ...super.serialize(),
315
+ pr: this.pr,
316
+ outputAmount: this.outputAmount == null ? null : this.outputAmount.toString(10),
317
+ recipient: this.recipient,
318
+ token: this.token,
319
+ scTxId: this.scTxId
320
+ };
321
+ }
322
+ _getInitiator() {
323
+ return this.recipient;
324
+ }
325
+ //////////////////////////////
326
+ //// Swap ticks & sync
327
+ async _sync(save) {
328
+ if (this.state === LnForGasSwapState.PR_CREATED) {
329
+ //Check if it's maybe already paid
330
+ const res = await this.checkInvoicePaid(false);
331
+ if (res !== null) {
332
+ if (save)
333
+ await this._saveAndEmit();
334
+ return true;
335
+ }
336
+ }
337
+ return false;
338
+ }
339
+ _tick(save) {
340
+ return Promise.resolve(false);
341
+ }
342
+ }
343
+ exports.LnForGasSwap = LnForGasSwap;
@@ -0,0 +1,21 @@
1
+ import { LnForGasSwap, LnForGasSwapState } from "./LnForGasSwap";
2
+ import { ISwapWrapper, SwapTypeDefinition } from "../../ISwapWrapper";
3
+ import { ChainType } from "@atomiqlabs/base";
4
+ import { Intermediary } from "../../../intermediaries/Intermediary";
5
+ import { SwapType } from "../../../enums/SwapType";
6
+ export type LnForGasSwapTypeDefinition<T extends ChainType> = SwapTypeDefinition<T, LnForGasWrapper<T>, LnForGasSwap<T>>;
7
+ export declare class LnForGasWrapper<T extends ChainType> extends ISwapWrapper<T, LnForGasSwapTypeDefinition<T>> {
8
+ TYPE: SwapType;
9
+ readonly swapDeserializer: typeof LnForGasSwap;
10
+ /**
11
+ * Returns a newly created swap, receiving 'amount' on lightning network
12
+ *
13
+ * @param signer
14
+ * @param amount Amount you wish to receive in base units (satoshis)
15
+ * @param lpOrUrl Intermediary/Counterparty swap service Intermediary object or raw url
16
+ */
17
+ create(signer: string, amount: bigint, lpOrUrl: Intermediary | string): Promise<LnForGasSwap<T>>;
18
+ readonly pendingSwapStates: LnForGasSwapState[];
19
+ readonly tickSwapState: undefined;
20
+ protected processEvent: undefined;
21
+ }
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LnForGasWrapper = void 0;
4
+ const LnForGasSwap_1 = require("./LnForGasSwap");
5
+ const ISwapWrapper_1 = require("../../ISwapWrapper");
6
+ const TrustedIntermediaryAPI_1 = require("../../../intermediaries/apis/TrustedIntermediaryAPI");
7
+ const bolt11_1 = require("@atomiqlabs/bolt11");
8
+ const IntermediaryError_1 = require("../../../errors/IntermediaryError");
9
+ const SwapType_1 = require("../../../enums/SwapType");
10
+ class LnForGasWrapper extends ISwapWrapper_1.ISwapWrapper {
11
+ constructor() {
12
+ super(...arguments);
13
+ this.TYPE = SwapType_1.SwapType.TRUSTED_FROM_BTCLN;
14
+ this.swapDeserializer = LnForGasSwap_1.LnForGasSwap;
15
+ this.pendingSwapStates = [LnForGasSwap_1.LnForGasSwapState.PR_CREATED];
16
+ this.tickSwapState = undefined;
17
+ this.processEvent = undefined;
18
+ }
19
+ /**
20
+ * Returns a newly created swap, receiving 'amount' on lightning network
21
+ *
22
+ * @param signer
23
+ * @param amount Amount you wish to receive in base units (satoshis)
24
+ * @param lpOrUrl Intermediary/Counterparty swap service Intermediary object or raw url
25
+ */
26
+ async create(signer, amount, lpOrUrl) {
27
+ if (!this.isInitialized)
28
+ throw new Error("Not initialized, call init() first!");
29
+ const lpUrl = typeof (lpOrUrl) === "string" ? lpOrUrl : lpOrUrl.url;
30
+ const token = this.chain.getNativeCurrencyAddress();
31
+ const resp = await TrustedIntermediaryAPI_1.TrustedIntermediaryAPI.initTrustedFromBTCLN(this.chainIdentifier, lpUrl, {
32
+ address: signer,
33
+ amount,
34
+ token
35
+ }, this.options.getRequestTimeout);
36
+ const decodedPr = (0, bolt11_1.decode)(resp.pr);
37
+ if (decodedPr.millisatoshis == null)
38
+ throw new Error("Invalid payment request returned, no msat amount value!");
39
+ if (decodedPr.timeExpireDate == null)
40
+ throw new Error("Invalid payment request returned, no time expire date!");
41
+ const amountIn = (BigInt(decodedPr.millisatoshis) + 999n) / 1000n;
42
+ if (resp.total !== amount)
43
+ throw new IntermediaryError_1.IntermediaryError("Invalid total returned");
44
+ const pricingInfo = await this.verifyReturnedPrice(typeof (lpOrUrl) === "string" || lpOrUrl.services[SwapType_1.SwapType.TRUSTED_FROM_BTCLN] == null ?
45
+ { swapFeePPM: 10000, swapBaseFee: 10 } :
46
+ lpOrUrl.services[SwapType_1.SwapType.TRUSTED_FROM_BTCLN], false, amountIn, amount, token, {});
47
+ const quote = new LnForGasSwap_1.LnForGasSwap(this, {
48
+ pr: resp.pr,
49
+ outputAmount: resp.total,
50
+ recipient: signer,
51
+ pricingInfo,
52
+ url: lpUrl,
53
+ expiry: decodedPr.timeExpireDate * 1000,
54
+ swapFee: resp.swapFee,
55
+ token,
56
+ exactIn: false
57
+ });
58
+ await quote._save();
59
+ return quote;
60
+ }
61
+ }
62
+ exports.LnForGasWrapper = LnForGasWrapper;