@atomiqlabs/sdk 7.0.11 → 8.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (364) hide show
  1. package/README.md +45 -29
  2. package/dist/SmartChainAssets.d.ts +11 -3
  3. package/dist/SmartChainAssets.js +7 -3
  4. package/dist/bitcoin/BitcoinRpcWithAddressIndex.d.ts +68 -0
  5. package/dist/bitcoin/BitcoinRpcWithAddressIndex.js +2 -0
  6. package/dist/bitcoin/LightningNetworkApi.d.ts +12 -0
  7. package/dist/bitcoin/LightningNetworkApi.js +2 -0
  8. package/dist/bitcoin/coinselect2/accumulative.d.ts +6 -0
  9. package/dist/bitcoin/coinselect2/accumulative.js +52 -0
  10. package/dist/bitcoin/coinselect2/blackjack.d.ts +6 -0
  11. package/dist/bitcoin/coinselect2/blackjack.js +38 -0
  12. package/dist/bitcoin/coinselect2/index.d.ts +19 -0
  13. package/dist/bitcoin/coinselect2/index.js +69 -0
  14. package/dist/bitcoin/coinselect2/utils.d.ts +71 -0
  15. package/dist/bitcoin/coinselect2/utils.js +123 -0
  16. package/dist/bitcoin/mempool/MempoolApi.d.ts +350 -0
  17. package/dist/bitcoin/mempool/MempoolApi.js +311 -0
  18. package/dist/bitcoin/mempool/MempoolBitcoinBlock.d.ts +44 -0
  19. package/dist/bitcoin/mempool/MempoolBitcoinBlock.js +48 -0
  20. package/dist/bitcoin/mempool/MempoolBitcoinRpc.d.ts +119 -0
  21. package/dist/bitcoin/mempool/MempoolBitcoinRpc.js +361 -0
  22. package/dist/bitcoin/mempool/synchronizer/MempoolBtcRelaySynchronizer.d.ts +22 -0
  23. package/dist/bitcoin/mempool/synchronizer/MempoolBtcRelaySynchronizer.js +105 -0
  24. package/dist/bitcoin/wallet/BitcoinWallet.d.ts +93 -0
  25. package/dist/bitcoin/wallet/BitcoinWallet.js +273 -0
  26. package/dist/bitcoin/wallet/IBitcoinWallet.d.ts +28 -0
  27. package/dist/bitcoin/wallet/IBitcoinWallet.js +20 -0
  28. package/dist/bitcoin/wallet/MinimalBitcoinWalletInterface.d.ts +21 -0
  29. package/dist/bitcoin/wallet/MinimalBitcoinWalletInterface.js +2 -0
  30. package/dist/bitcoin/wallet/MinimalLightningNetworkWalletInterface.d.ts +7 -0
  31. package/dist/bitcoin/wallet/MinimalLightningNetworkWalletInterface.js +2 -0
  32. package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.d.ts +40 -0
  33. package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.js +86 -0
  34. package/dist/enums/FeeType.d.ts +8 -0
  35. package/dist/enums/FeeType.js +12 -0
  36. package/dist/enums/SwapAmountType.d.ts +8 -0
  37. package/dist/enums/SwapAmountType.js +12 -0
  38. package/dist/enums/SwapDirection.d.ts +8 -0
  39. package/dist/enums/SwapDirection.js +12 -0
  40. package/dist/enums/SwapType.d.ts +14 -0
  41. package/dist/enums/SwapType.js +18 -0
  42. package/dist/errors/IntermediaryError.d.ts +9 -0
  43. package/dist/errors/IntermediaryError.js +26 -0
  44. package/dist/errors/PaymentAuthError.d.ts +11 -0
  45. package/dist/errors/PaymentAuthError.js +23 -0
  46. package/dist/errors/RequestError.d.ts +18 -0
  47. package/dist/errors/RequestError.js +46 -0
  48. package/dist/errors/UserError.d.ts +7 -0
  49. package/dist/errors/UserError.js +15 -0
  50. package/dist/events/UnifiedSwapEventListener.d.ts +23 -0
  51. package/dist/events/UnifiedSwapEventListener.js +130 -0
  52. package/dist/http/HttpUtils.d.ts +27 -0
  53. package/dist/http/HttpUtils.js +91 -0
  54. package/dist/http/paramcoders/IParamReader.d.ts +8 -0
  55. package/dist/http/paramcoders/IParamReader.js +2 -0
  56. package/dist/http/paramcoders/ParamDecoder.d.ts +44 -0
  57. package/dist/http/paramcoders/ParamDecoder.js +132 -0
  58. package/dist/http/paramcoders/ParamEncoder.d.ts +20 -0
  59. package/dist/http/paramcoders/ParamEncoder.js +31 -0
  60. package/dist/http/paramcoders/SchemaVerifier.d.ts +26 -0
  61. package/dist/http/paramcoders/SchemaVerifier.js +145 -0
  62. package/dist/http/paramcoders/client/ResponseParamDecoder.d.ts +11 -0
  63. package/dist/http/paramcoders/client/ResponseParamDecoder.js +57 -0
  64. package/dist/http/paramcoders/client/StreamParamEncoder.d.ts +13 -0
  65. package/dist/http/paramcoders/client/StreamParamEncoder.js +26 -0
  66. package/dist/http/paramcoders/client/StreamingFetchPromise.d.ts +16 -0
  67. package/dist/http/paramcoders/client/StreamingFetchPromise.js +174 -0
  68. package/dist/index.d.ts +82 -4
  69. package/dist/index.js +128 -4
  70. package/dist/intermediaries/Intermediary.d.ts +111 -0
  71. package/dist/intermediaries/Intermediary.js +115 -0
  72. package/dist/intermediaries/IntermediaryDiscovery.d.ts +166 -0
  73. package/dist/intermediaries/IntermediaryDiscovery.js +390 -0
  74. package/dist/intermediaries/apis/IntermediaryAPI.d.ts +436 -0
  75. package/dist/intermediaries/apis/IntermediaryAPI.js +600 -0
  76. package/dist/intermediaries/apis/TrustedIntermediaryAPI.d.ts +154 -0
  77. package/dist/intermediaries/apis/TrustedIntermediaryAPI.js +136 -0
  78. package/dist/lnurl/LNURL.d.ts +102 -0
  79. package/dist/lnurl/LNURL.js +321 -0
  80. package/dist/prices/RedundantSwapPrice.d.ts +89 -0
  81. package/dist/prices/RedundantSwapPrice.js +202 -0
  82. package/dist/prices/SingleSwapPrice.d.ts +31 -0
  83. package/dist/prices/SingleSwapPrice.js +41 -0
  84. package/dist/prices/SwapPriceWithChain.d.ts +70 -0
  85. package/dist/prices/SwapPriceWithChain.js +91 -0
  86. package/dist/prices/abstract/ICachedSwapPrice.d.ts +28 -0
  87. package/dist/prices/abstract/ICachedSwapPrice.js +62 -0
  88. package/dist/prices/abstract/IPriceProvider.d.ts +81 -0
  89. package/dist/prices/abstract/IPriceProvider.js +74 -0
  90. package/dist/prices/abstract/ISwapPrice.d.ts +117 -0
  91. package/dist/prices/abstract/ISwapPrice.js +219 -0
  92. package/dist/prices/providers/BinancePriceProvider.d.ts +16 -0
  93. package/dist/prices/providers/BinancePriceProvider.js +23 -0
  94. package/dist/prices/providers/CoinGeckoPriceProvider.d.ts +17 -0
  95. package/dist/prices/providers/CoinGeckoPriceProvider.js +23 -0
  96. package/dist/prices/providers/CoinPaprikaPriceProvider.d.ts +19 -0
  97. package/dist/prices/providers/CoinPaprikaPriceProvider.js +23 -0
  98. package/dist/prices/providers/CustomPriceProvider.d.ts +13 -0
  99. package/dist/prices/providers/CustomPriceProvider.js +24 -0
  100. package/dist/prices/providers/KrakenPriceProvider.d.ts +29 -0
  101. package/dist/prices/providers/KrakenPriceProvider.js +36 -0
  102. package/dist/prices/providers/OKXPriceProvider.d.ts +28 -0
  103. package/dist/prices/providers/OKXPriceProvider.js +23 -0
  104. package/dist/prices/providers/abstract/ExchangePriceProvider.d.ts +14 -0
  105. package/dist/prices/providers/abstract/ExchangePriceProvider.js +18 -0
  106. package/dist/prices/providers/abstract/HttpPriceProvider.d.ts +7 -0
  107. package/dist/prices/providers/abstract/HttpPriceProvider.js +12 -0
  108. package/dist/storage/IUnifiedStorage.d.ts +73 -0
  109. package/dist/storage/IUnifiedStorage.js +2 -0
  110. package/dist/storage/UnifiedSwapStorage.d.ts +82 -0
  111. package/dist/storage/UnifiedSwapStorage.js +83 -0
  112. package/dist/storage-browser/IndexedDBUnifiedStorage.d.ts +39 -0
  113. package/dist/storage-browser/IndexedDBUnifiedStorage.js +275 -0
  114. package/dist/{storage → storage-browser}/LocalStorageManager.d.ts +1 -0
  115. package/dist/{storage → storage-browser}/LocalStorageManager.js +2 -1
  116. package/dist/swapper/Swapper.d.ts +533 -0
  117. package/dist/swapper/Swapper.js +1566 -0
  118. package/dist/swapper/SwapperFactory.d.ts +87 -0
  119. package/dist/{SwapperFactory.js → swapper/SwapperFactory.js} +40 -22
  120. package/dist/swapper/SwapperUtils.d.ts +153 -0
  121. package/dist/swapper/SwapperUtils.js +420 -0
  122. package/dist/swapper/SwapperWithChain.d.ts +214 -0
  123. package/dist/swapper/SwapperWithChain.js +315 -0
  124. package/dist/swapper/SwapperWithSigner.d.ts +178 -0
  125. package/dist/swapper/SwapperWithSigner.js +172 -0
  126. package/dist/swaps/IAddressSwap.d.ts +13 -0
  127. package/dist/swaps/IAddressSwap.js +13 -0
  128. package/dist/swaps/IBTCWalletSwap.d.ts +55 -0
  129. package/dist/swaps/IBTCWalletSwap.js +17 -0
  130. package/dist/swaps/IClaimableSwap.d.ts +17 -0
  131. package/dist/swaps/IClaimableSwap.js +14 -0
  132. package/dist/swaps/IClaimableSwapWrapper.d.ts +5 -0
  133. package/dist/swaps/IClaimableSwapWrapper.js +2 -0
  134. package/dist/swaps/IRefundableSwap.d.ts +17 -0
  135. package/dist/swaps/IRefundableSwap.js +13 -0
  136. package/dist/swaps/ISwap.d.ts +207 -0
  137. package/dist/swaps/ISwap.js +264 -0
  138. package/dist/swaps/ISwapWithGasDrop.d.ts +15 -0
  139. package/dist/swaps/ISwapWithGasDrop.js +11 -0
  140. package/dist/swaps/ISwapWrapper.d.ts +153 -0
  141. package/dist/swaps/ISwapWrapper.js +227 -0
  142. package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.d.ts +53 -0
  143. package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.js +116 -0
  144. package/dist/swaps/escrow_swaps/IEscrowSwap.d.ts +70 -0
  145. package/dist/swaps/escrow_swaps/IEscrowSwap.js +132 -0
  146. package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.d.ts +85 -0
  147. package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.js +122 -0
  148. package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.d.ts +86 -0
  149. package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.js +115 -0
  150. package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.d.ts +93 -0
  151. package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.js +121 -0
  152. package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.d.ts +45 -0
  153. package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.js +65 -0
  154. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.d.ts +263 -0
  155. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.js +933 -0
  156. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.d.ts +110 -0
  157. package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.js +307 -0
  158. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.d.ts +236 -0
  159. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.js +898 -0
  160. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.d.ts +125 -0
  161. package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.js +393 -0
  162. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.d.ts +245 -0
  163. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.js +841 -0
  164. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.d.ts +120 -0
  165. package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.js +294 -0
  166. package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.d.ts +228 -0
  167. package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.js +721 -0
  168. package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.d.ts +37 -0
  169. package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.js +93 -0
  170. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.d.ts +86 -0
  171. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.js +213 -0
  172. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.d.ts +170 -0
  173. package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.js +520 -0
  174. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.d.ts +50 -0
  175. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.js +109 -0
  176. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.d.ts +93 -0
  177. package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.js +217 -0
  178. package/dist/swaps/spv_swaps/SpvFromBTCSwap.d.ts +315 -0
  179. package/dist/swaps/spv_swaps/SpvFromBTCSwap.js +1098 -0
  180. package/dist/swaps/spv_swaps/SpvFromBTCWrapper.d.ts +125 -0
  181. package/dist/swaps/spv_swaps/SpvFromBTCWrapper.js +631 -0
  182. package/dist/swaps/trusted/ln/LnForGasSwap.d.ts +107 -0
  183. package/dist/swaps/trusted/ln/LnForGasSwap.js +343 -0
  184. package/dist/swaps/trusted/ln/LnForGasWrapper.d.ts +21 -0
  185. package/dist/swaps/trusted/ln/LnForGasWrapper.js +62 -0
  186. package/dist/swaps/trusted/onchain/OnchainForGasSwap.d.ts +164 -0
  187. package/dist/swaps/trusted/onchain/OnchainForGasSwap.js +520 -0
  188. package/dist/swaps/trusted/onchain/OnchainForGasWrapper.d.ts +48 -0
  189. package/dist/swaps/trusted/onchain/OnchainForGasWrapper.js +74 -0
  190. package/dist/types/AmountData.d.ts +9 -0
  191. package/dist/types/AmountData.js +2 -0
  192. package/dist/types/CustomPriceFunction.d.ts +5 -0
  193. package/dist/types/CustomPriceFunction.js +2 -0
  194. package/dist/types/PriceInfoType.d.ts +28 -0
  195. package/dist/types/PriceInfoType.js +57 -0
  196. package/dist/types/SwapExecutionAction.d.ts +7 -0
  197. package/dist/types/SwapExecutionAction.js +2 -0
  198. package/dist/types/SwapWithSigner.d.ts +14 -0
  199. package/dist/types/SwapWithSigner.js +40 -0
  200. package/dist/types/Token.d.ts +53 -0
  201. package/dist/types/Token.js +58 -0
  202. package/dist/types/TokenAmount.d.ts +57 -0
  203. package/dist/types/TokenAmount.js +47 -0
  204. package/dist/types/fees/Fee.d.ts +49 -0
  205. package/dist/types/fees/Fee.js +2 -0
  206. package/dist/types/fees/FeeBreakdown.d.ts +10 -0
  207. package/dist/types/fees/FeeBreakdown.js +2 -0
  208. package/dist/types/fees/PercentagePPM.d.ts +15 -0
  209. package/dist/types/fees/PercentagePPM.js +17 -0
  210. package/dist/types/lnurl/LNURLPay.d.ts +54 -0
  211. package/dist/types/lnurl/LNURLPay.js +28 -0
  212. package/dist/types/lnurl/LNURLWithdraw.d.ts +42 -0
  213. package/dist/types/lnurl/LNURLWithdraw.js +24 -0
  214. package/dist/utils/AutomaticClockDriftCorrection.d.ts +1 -0
  215. package/dist/utils/AutomaticClockDriftCorrection.js +70 -0
  216. package/dist/utils/BitcoinUtils.d.ts +13 -0
  217. package/dist/utils/BitcoinUtils.js +98 -0
  218. package/dist/utils/BitcoinWalletUtils.d.ts +7 -0
  219. package/dist/utils/BitcoinWalletUtils.js +14 -0
  220. package/dist/utils/Logger.d.ts +7 -0
  221. package/dist/utils/Logger.js +12 -0
  222. package/dist/utils/RetryUtils.d.ts +21 -0
  223. package/dist/utils/RetryUtils.js +66 -0
  224. package/dist/utils/SwapUtils.d.ts +31 -0
  225. package/dist/utils/SwapUtils.js +18 -0
  226. package/dist/{Utils.d.ts → utils/TimeoutUtils.d.ts} +9 -3
  227. package/dist/utils/TimeoutUtils.js +55 -0
  228. package/dist/utils/TokenUtils.d.ts +11 -0
  229. package/dist/utils/TokenUtils.js +29 -0
  230. package/dist/utils/TypeUtils.d.ts +7 -0
  231. package/dist/utils/TypeUtils.js +2 -0
  232. package/dist/utils/Utils.d.ts +57 -0
  233. package/dist/utils/Utils.js +178 -0
  234. package/package.json +14 -6
  235. package/src/SmartChainAssets.ts +11 -3
  236. package/src/bitcoin/BitcoinRpcWithAddressIndex.ts +87 -0
  237. package/src/bitcoin/LightningNetworkApi.ts +16 -0
  238. package/src/bitcoin/coinselect2/accumulative.ts +68 -0
  239. package/src/bitcoin/coinselect2/blackjack.ts +49 -0
  240. package/src/bitcoin/coinselect2/index.ts +92 -0
  241. package/src/bitcoin/coinselect2/utils.ts +189 -0
  242. package/src/bitcoin/mempool/MempoolApi.ts +554 -0
  243. package/src/bitcoin/mempool/MempoolBitcoinBlock.ts +88 -0
  244. package/src/bitcoin/mempool/MempoolBitcoinRpc.ts +437 -0
  245. package/src/bitcoin/mempool/synchronizer/MempoolBtcRelaySynchronizer.ts +134 -0
  246. package/src/bitcoin/wallet/BitcoinWallet.ts +375 -0
  247. package/src/bitcoin/wallet/IBitcoinWallet.ts +44 -0
  248. package/src/bitcoin/wallet/MinimalBitcoinWalletInterface.ts +19 -0
  249. package/src/bitcoin/wallet/MinimalLightningNetworkWalletInterface.ts +7 -0
  250. package/src/bitcoin/wallet/SingleAddressBitcoinWallet.ts +108 -0
  251. package/src/enums/FeeType.ts +9 -0
  252. package/src/enums/SwapAmountType.ts +9 -0
  253. package/src/enums/SwapDirection.ts +9 -0
  254. package/src/enums/SwapType.ts +15 -0
  255. package/src/errors/IntermediaryError.ts +24 -0
  256. package/src/errors/PaymentAuthError.ts +26 -0
  257. package/src/errors/RequestError.ts +51 -0
  258. package/src/errors/UserError.ts +14 -0
  259. package/src/events/UnifiedSwapEventListener.ts +171 -0
  260. package/src/http/HttpUtils.ts +92 -0
  261. package/src/http/paramcoders/IParamReader.ts +10 -0
  262. package/src/http/paramcoders/ParamDecoder.ts +142 -0
  263. package/src/http/paramcoders/ParamEncoder.ts +37 -0
  264. package/src/http/paramcoders/SchemaVerifier.ts +153 -0
  265. package/src/http/paramcoders/client/ResponseParamDecoder.ts +58 -0
  266. package/src/http/paramcoders/client/StreamParamEncoder.ts +29 -0
  267. package/src/http/paramcoders/client/StreamingFetchPromise.ts +193 -0
  268. package/src/index.ts +102 -4
  269. package/src/intermediaries/Intermediary.ts +204 -0
  270. package/src/intermediaries/IntermediaryDiscovery.ts +485 -0
  271. package/src/intermediaries/apis/IntermediaryAPI.ts +940 -0
  272. package/src/intermediaries/apis/TrustedIntermediaryAPI.ts +257 -0
  273. package/src/lnurl/LNURL.ts +403 -0
  274. package/src/prices/RedundantSwapPrice.ts +245 -0
  275. package/src/prices/SingleSwapPrice.ts +47 -0
  276. package/src/prices/SwapPriceWithChain.ts +157 -0
  277. package/src/prices/abstract/ICachedSwapPrice.ts +86 -0
  278. package/src/prices/abstract/IPriceProvider.ts +128 -0
  279. package/src/prices/abstract/ISwapPrice.ts +328 -0
  280. package/src/prices/providers/BinancePriceProvider.ts +41 -0
  281. package/src/prices/providers/CoinGeckoPriceProvider.ts +40 -0
  282. package/src/prices/providers/CoinPaprikaPriceProvider.ts +44 -0
  283. package/src/prices/providers/CustomPriceProvider.ts +29 -0
  284. package/src/prices/providers/KrakenPriceProvider.ts +74 -0
  285. package/src/prices/providers/OKXPriceProvider.ts +53 -0
  286. package/src/prices/providers/abstract/ExchangePriceProvider.ts +29 -0
  287. package/src/prices/providers/abstract/HttpPriceProvider.ts +15 -0
  288. package/src/storage/IUnifiedStorage.ts +83 -0
  289. package/src/storage/UnifiedSwapStorage.ts +104 -0
  290. package/src/storage-browser/IndexedDBUnifiedStorage.ts +328 -0
  291. package/src/{storage → storage-browser}/LocalStorageManager.ts +2 -1
  292. package/src/swapper/Swapper.ts +2107 -0
  293. package/src/{SwapperFactory.ts → swapper/SwapperFactory.ts} +116 -75
  294. package/src/swapper/SwapperUtils.ts +510 -0
  295. package/src/swapper/SwapperWithChain.ts +464 -0
  296. package/src/swapper/SwapperWithSigner.ts +300 -0
  297. package/src/swaps/IAddressSwap.ts +20 -0
  298. package/src/swaps/IBTCWalletSwap.ts +77 -0
  299. package/src/swaps/IClaimableSwap.ts +30 -0
  300. package/src/swaps/IClaimableSwapWrapper.ts +9 -0
  301. package/src/swaps/IRefundableSwap.ts +29 -0
  302. package/src/swaps/ISwap.ts +490 -0
  303. package/src/swaps/ISwapWithGasDrop.ts +19 -0
  304. package/src/swaps/ISwapWrapper.ts +344 -0
  305. package/src/swaps/escrow_swaps/IEscrowSelfInitSwap.ts +168 -0
  306. package/src/swaps/escrow_swaps/IEscrowSwap.ts +197 -0
  307. package/src/swaps/escrow_swaps/IEscrowSwapWrapper.ts +210 -0
  308. package/src/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.ts +150 -0
  309. package/src/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.ts +219 -0
  310. package/src/swaps/escrow_swaps/frombtc/IFromBTCWrapper.ts +84 -0
  311. package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.ts +1082 -0
  312. package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.ts +429 -0
  313. package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.ts +1078 -0
  314. package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.ts +549 -0
  315. package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.ts +974 -0
  316. package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.ts +443 -0
  317. package/src/swaps/escrow_swaps/tobtc/IToBTCSwap.ts +860 -0
  318. package/src/swaps/escrow_swaps/tobtc/IToBTCWrapper.ts +104 -0
  319. package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.ts +256 -0
  320. package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.ts +716 -0
  321. package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.ts +151 -0
  322. package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.ts +299 -0
  323. package/src/swaps/spv_swaps/SpvFromBTCSwap.ts +1394 -0
  324. package/src/swaps/spv_swaps/SpvFromBTCWrapper.ts +796 -0
  325. package/src/swaps/trusted/ln/LnForGasSwap.ts +402 -0
  326. package/src/swaps/trusted/ln/LnForGasWrapper.ts +70 -0
  327. package/src/swaps/trusted/onchain/OnchainForGasSwap.ts +633 -0
  328. package/src/swaps/trusted/onchain/OnchainForGasWrapper.ts +110 -0
  329. package/src/types/AmountData.ts +9 -0
  330. package/src/types/CustomPriceFunction.ts +5 -0
  331. package/src/types/PriceInfoType.ts +67 -0
  332. package/src/types/SwapExecutionAction.ts +8 -0
  333. package/src/types/SwapWithSigner.ts +57 -0
  334. package/src/types/Token.ts +90 -0
  335. package/src/types/TokenAmount.ts +110 -0
  336. package/src/types/fees/Fee.ts +55 -0
  337. package/src/types/fees/FeeBreakdown.ts +11 -0
  338. package/src/types/fees/PercentagePPM.ts +24 -0
  339. package/src/types/lnurl/LNURLPay.ts +72 -0
  340. package/src/types/lnurl/LNURLWithdraw.ts +55 -0
  341. package/src/utils/AutomaticClockDriftCorrection.ts +71 -0
  342. package/src/utils/BitcoinUtils.ts +86 -0
  343. package/src/utils/BitcoinWalletUtils.ts +16 -0
  344. package/src/utils/Logger.ts +15 -0
  345. package/src/utils/RetryUtils.ts +71 -0
  346. package/src/utils/SwapUtils.ts +38 -0
  347. package/src/utils/TimeoutUtils.ts +50 -0
  348. package/src/utils/TokenUtils.ts +25 -0
  349. package/src/utils/TypeUtils.ts +9 -0
  350. package/src/utils/Utils.ts +182 -0
  351. package/dist/SwapperFactory.d.ts +0 -52
  352. package/dist/Utils.js +0 -37
  353. package/dist/fs-storage/FileSystemStorageManager.d.ts +0 -15
  354. package/dist/fs-storage/FileSystemStorageManager.js +0 -60
  355. package/dist/fs-storage/index.d.ts +0 -1
  356. package/dist/fs-storage/index.js +0 -17
  357. package/src/SmartChainAssets.js +0 -75
  358. package/src/SwapperFactory.js +0 -120
  359. package/src/Utils.js +0 -37
  360. package/src/Utils.ts +0 -31
  361. package/src/fs-storage/FileSystemStorageManager.ts +0 -71
  362. package/src/fs-storage/index.ts +0 -1
  363. package/src/index.js +0 -21
  364. package/src/storage/LocalStorageManager.js +0 -72
@@ -0,0 +1,110 @@
1
+ import {ISwapWrapper, ISwapWrapperOptions, SwapTypeDefinition, WrapperCtorTokens} from "../../ISwapWrapper";
2
+ import {TrustedIntermediaryAPI} from "../../../intermediaries/apis/TrustedIntermediaryAPI";
3
+ import {IntermediaryError} from "../../../errors/IntermediaryError";
4
+ import {ChainType} from "@atomiqlabs/base";
5
+ import {OnchainForGasSwap, OnchainForGasSwapInit, OnchainForGasSwapState} from "./OnchainForGasSwap";
6
+ import {BitcoinRpcWithAddressIndex} from "../../../bitcoin/BitcoinRpcWithAddressIndex";
7
+ import {ISwapPrice} from "../../../prices/abstract/ISwapPrice";
8
+ import {EventEmitter} from "events";
9
+ import {Intermediary} from "../../../intermediaries/Intermediary";
10
+ import {SwapType} from "../../../enums/SwapType";
11
+ import {UnifiedSwapEventListener} from "../../../events/UnifiedSwapEventListener";
12
+ import {UnifiedSwapStorage} from "../../../storage/UnifiedSwapStorage";
13
+ import {ISwap} from "../../ISwap";
14
+ import {BTC_NETWORK} from "@scure/btc-signer/utils";
15
+
16
+ export type OnchainForGasWrapperOptions = ISwapWrapperOptions & {
17
+ bitcoinNetwork: BTC_NETWORK
18
+ };
19
+
20
+ export type OnchainForGasSwapTypeDefinition<T extends ChainType> = SwapTypeDefinition<T, OnchainForGasWrapper<T>, OnchainForGasSwap<T>>;
21
+
22
+ export class OnchainForGasWrapper<T extends ChainType> extends ISwapWrapper<T, OnchainForGasSwapTypeDefinition<T>, OnchainForGasWrapperOptions> {
23
+ public readonly TYPE = SwapType.TRUSTED_FROM_BTC;
24
+ public readonly swapDeserializer = OnchainForGasSwap;
25
+
26
+ readonly btcRpc: BitcoinRpcWithAddressIndex<any>;
27
+
28
+ /**
29
+ * @param chainIdentifier
30
+ * @param unifiedStorage Storage interface for the current environment
31
+ * @param unifiedChainEvents On-chain event listener
32
+ * @param chain
33
+ * @param prices Pricing to use
34
+ * @param tokens
35
+ * @param btcRpc Bitcoin RPC which also supports getting transactions by txoHash
36
+ * @param options
37
+ * @param events Instance to use for emitting events
38
+ */
39
+ constructor(
40
+ chainIdentifier: string,
41
+ unifiedStorage: UnifiedSwapStorage<T>,
42
+ unifiedChainEvents: UnifiedSwapEventListener<T>,
43
+ chain: T["ChainInterface"],
44
+ prices: ISwapPrice,
45
+ tokens: WrapperCtorTokens,
46
+ btcRpc: BitcoinRpcWithAddressIndex<any>,
47
+ options: OnchainForGasWrapperOptions,
48
+ events?: EventEmitter<{swapState: [ISwap]}>
49
+ ) {
50
+ super(chainIdentifier, unifiedStorage, unifiedChainEvents, chain, prices, tokens, options, events);
51
+ this.btcRpc = btcRpc;
52
+ }
53
+
54
+ /**
55
+ * Returns a newly created swap, receiving 'amount' base units of gas token
56
+ *
57
+ * @param signer
58
+ * @param amount Amount you wish to receive in base units
59
+ * @param lpOrUrl Intermediary/Counterparty swap service Intermediary object or raw url
60
+ * @param refundAddress Bitcoin address to receive refund on in case the counterparty cannot execute the swap
61
+ */
62
+ async create(signer: string, amount: bigint, lpOrUrl: Intermediary | string, refundAddress?: string): Promise<OnchainForGasSwap<T>> {
63
+ if(!this.isInitialized) throw new Error("Not initialized, call init() first!");
64
+
65
+ const lpUrl = typeof(lpOrUrl)==="string" ? lpOrUrl : lpOrUrl.url;
66
+
67
+ const token = this.chain.getNativeCurrencyAddress();
68
+
69
+ const resp = await TrustedIntermediaryAPI.initTrustedFromBTC(this.chainIdentifier, lpUrl, {
70
+ address: signer,
71
+ amount,
72
+ refundAddress,
73
+ token
74
+ }, this.options.getRequestTimeout);
75
+
76
+ if(resp.total !== amount) throw new IntermediaryError("Invalid total returned");
77
+
78
+ const pricingInfo = await this.verifyReturnedPrice(
79
+ typeof(lpOrUrl)==="string" || lpOrUrl.services[SwapType.TRUSTED_FROM_BTC]==null ?
80
+ {swapFeePPM: 10000, swapBaseFee: 10} :
81
+ lpOrUrl.services[SwapType.TRUSTED_FROM_BTC],
82
+ false, resp.amountSats,
83
+ amount, this.chain.getNativeCurrencyAddress(), {}
84
+ );
85
+
86
+ const quote = new OnchainForGasSwap(this, {
87
+ paymentHash: resp.paymentHash,
88
+ sequence: resp.sequence,
89
+ address: resp.btcAddress,
90
+ inputAmount: resp.amountSats,
91
+ outputAmount: resp.total,
92
+ recipient: signer,
93
+ refundAddress,
94
+ pricingInfo,
95
+ url: lpUrl,
96
+ expiry: resp.expiresAt,
97
+ swapFee: resp.swapFee,
98
+ swapFeeBtc: resp.swapFeeSats,
99
+ exactIn: false,
100
+ token
101
+ } as OnchainForGasSwapInit);
102
+ await quote._save();
103
+ return quote;
104
+ }
105
+
106
+ public readonly pendingSwapStates = [OnchainForGasSwapState.PR_CREATED];
107
+ public readonly tickSwapState = undefined;
108
+ protected processEvent = undefined;
109
+
110
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Simple amount definition for swap operations
3
+ * @category Tokens
4
+ */
5
+ export type AmountData = {
6
+ amount: bigint,
7
+ token: string,
8
+ exactIn: boolean
9
+ }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Custom pricing callback function type
3
+ * @category Pricing and LPs
4
+ */
5
+ export type CustomPriceFunction = (tickers: string[], abortSignal?: AbortSignal) => Promise<number[]>;
@@ -0,0 +1,67 @@
1
+ import {toBigInt} from "../utils/Utils";
2
+
3
+ /**
4
+ * Pricing information for swap validation
5
+ * @category Pricing and LPs
6
+ */
7
+ export type PriceInfoType = {
8
+ isValid: boolean,
9
+ differencePPM: bigint,
10
+ satsBaseFee: bigint,
11
+ feePPM: bigint,
12
+ realPriceUSatPerToken?: bigint,
13
+ realPriceUsdPerBitcoin?: number,
14
+ swapPriceUSatPerToken: bigint
15
+ };
16
+
17
+ /**
18
+ * Type guard for PriceInfoType
19
+ * @category Pricing and LPs
20
+ */
21
+ export function isPriceInfoType(obj: any): obj is PriceInfoType {
22
+ return obj != null &&
23
+ typeof (obj.isValid) === "boolean" &&
24
+ typeof (obj.differencePPM) === "bigint" &&
25
+ typeof (obj.satsBaseFee) === "bigint" &&
26
+ typeof (obj.feePPM) === "bigint" &&
27
+ (obj.realPriceUSatPerToken == null || typeof (obj.realPriceUSatPerToken) === "bigint") &&
28
+ (obj.realPriceUsdPerBitcoin == null || typeof (obj.realPriceUsdPerBitcoin) === "number") &&
29
+ typeof (obj.swapPriceUSatPerToken) === "bigint";
30
+ }
31
+
32
+ /**
33
+ * Serializes PriceInfoType for storage
34
+ * @category Pricing and LPs
35
+ */
36
+ export function serializePriceInfoType(obj: PriceInfoType | undefined): any {
37
+ if (obj == null) return null;
38
+ return {
39
+ isValid: obj.isValid,
40
+ differencePPM: obj.differencePPM == null ? null : obj.differencePPM.toString(10),
41
+ satsBaseFee: obj.satsBaseFee == null ? null : obj.satsBaseFee.toString(10),
42
+ feePPM: obj.feePPM == null ? null : obj.feePPM.toString(10),
43
+ realPriceUSatPerToken: obj.realPriceUSatPerToken == null ? null : obj.realPriceUSatPerToken.toString(10),
44
+ realPriceUsdPerBitcoin: obj.realPriceUsdPerBitcoin,
45
+ swapPriceUSatPerToken: obj.swapPriceUSatPerToken == null ? null : obj.swapPriceUSatPerToken.toString(10),
46
+ }
47
+ }
48
+
49
+ /**
50
+ * Deserializes PriceInfoType from storage
51
+ * @category Pricing and LPs
52
+ */
53
+ export function deserializePriceInfoType(obj: any): PriceInfoType | undefined {
54
+ if (obj == null) return;
55
+ if (
56
+ obj.isValid != null && obj.differencePPM != null && obj.satsBaseFee != null &&
57
+ obj.feePPM != null && obj.swapPriceUSatPerToken != null
58
+ ) return {
59
+ isValid: obj.isValid,
60
+ differencePPM: toBigInt(obj.differencePPM),
61
+ satsBaseFee: toBigInt(obj.satsBaseFee),
62
+ feePPM: toBigInt(obj.feePPM),
63
+ realPriceUSatPerToken: toBigInt(obj.realPriceUSatPerToken),
64
+ realPriceUsdPerBitcoin: obj.realPriceUsdPerBitcoin,
65
+ swapPriceUSatPerToken: toBigInt(obj.swapPriceUSatPerToken),
66
+ }
67
+ }
@@ -0,0 +1,8 @@
1
+ import {ChainType} from "@atomiqlabs/base";
2
+
3
+ export type SwapExecutionAction<T extends ChainType> = {
4
+ name: "Payment" | "Commit" | "Claim",
5
+ description: string,
6
+ chain: "LIGHTNING" | "BITCOIN" | T["ChainId"],
7
+ txs: any[]
8
+ };
@@ -0,0 +1,57 @@
1
+ import {ISwap} from "../swaps/ISwap";
2
+ import {ChainType} from "@atomiqlabs/base";
3
+ import {IToBTCSwap} from "../swaps/escrow_swaps/tobtc/IToBTCSwap";
4
+ import {IFromBTCSelfInitSwap} from "../swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap";
5
+ import {FromBTCLNSwap} from "../swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap";
6
+
7
+ /**
8
+ * Proxy type that auto-injects signer into swap methods
9
+ * @category Swaps
10
+ */
11
+ export type SwapWithSigner<T extends ISwap> = {
12
+ [K in keyof T]:
13
+ K extends "commit" ? (abortSignal?: AbortSignal, skipChecks?: boolean) => Promise<string> :
14
+ K extends "refund" ? (abortSignal?: AbortSignal) => Promise<string> :
15
+ K extends "claim" ? (abortSignal?: AbortSignal) => Promise<string> :
16
+ K extends "commitAndClaim" ? (abortSignal?: AbortSignal, skipChecks?: boolean) => Promise<string> :
17
+ T[K];
18
+ };
19
+
20
+ /**
21
+ * Wraps a swap with automatic signer injection for methods like commit, refund, and claim
22
+ * @category Swaps
23
+ */
24
+ export function wrapSwapWithSigner<C extends ChainType, T extends ISwap<C>>(swap: T, signer: C["Signer"]): SwapWithSigner<T> {
25
+ return new Proxy(swap, {
26
+ get: (target, prop, receiver) => {
27
+ // Override the "sayGoodbye" method
28
+ if (prop === "commit") {
29
+ if(swap instanceof IToBTCSwap || swap instanceof IFromBTCSelfInitSwap) {
30
+ return (abortSignal?: AbortSignal, skipChecks?: boolean) =>
31
+ swap.commit(signer, abortSignal, skipChecks);
32
+ }
33
+ }
34
+ if (prop === "refund") {
35
+ if(swap instanceof IToBTCSwap) {
36
+ return (abortSignal?: AbortSignal) =>
37
+ swap.refund(signer, abortSignal);
38
+ }
39
+ }
40
+ if (prop === "claim") {
41
+ if(swap instanceof IFromBTCSelfInitSwap) {
42
+ return (abortSignal?: AbortSignal) =>
43
+ swap.claim(signer, abortSignal);
44
+ }
45
+ }
46
+ if (prop === "commitAndClaim") {
47
+ if(swap instanceof FromBTCLNSwap) {
48
+ return (abortSignal?: AbortSignal, skipChecks?: boolean) =>
49
+ swap.commitAndClaim(signer, abortSignal, skipChecks);
50
+ }
51
+ }
52
+
53
+ // Delegate other properties and methods to the original instance
54
+ return Reflect.get(target, prop, receiver);
55
+ }
56
+ }) as SwapWithSigner<T>;
57
+ }
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Bitcoin token type (on-chain or lightning)
3
+ * @category Tokens
4
+ */
5
+ export type BtcToken<L = boolean> = {
6
+ chain: "BTC",
7
+ lightning: L,
8
+ ticker: "BTC",
9
+ decimals: 8,
10
+ name: L extends true ? "Bitcoin (lightning L2)" : "Bitcoin (on-chain L1)",
11
+ displayDecimals?: number
12
+ };
13
+
14
+ /**
15
+ * Type guard for BtcToken
16
+ * @category Tokens
17
+ */
18
+ export function isBtcToken(obj: any): obj is BtcToken {
19
+ return typeof (obj) === "object" &&
20
+ obj.chain === "BTC" &&
21
+ typeof (obj.lightning) === "boolean" &&
22
+ typeof (obj.ticker) === "string" &&
23
+ typeof (obj.decimals) === "number" &&
24
+ typeof (obj.name) === "string";
25
+ }
26
+
27
+ /**
28
+ * Predefined Bitcoin token constants
29
+ * @category Tokens
30
+ */
31
+ export const BitcoinTokens: {
32
+ BTC: BtcToken<false>,
33
+ BTCLN: BtcToken<true>
34
+ } = {
35
+ BTC: {
36
+ chain: "BTC",
37
+ lightning: false,
38
+ ticker: "BTC",
39
+ decimals: 8,
40
+ name: "Bitcoin (on-chain L1)"
41
+ },
42
+ BTCLN: {
43
+ chain: "BTC",
44
+ lightning: true,
45
+ ticker: "BTC",
46
+ decimals: 8,
47
+ name: "Bitcoin (lightning L2)"
48
+ }
49
+ };
50
+ /**
51
+ * Smart Chain token type
52
+ * @category Tokens
53
+ */
54
+ export type SCToken<ChainIdentifier extends string = string> = {
55
+ chain: "SC",
56
+ chainId: ChainIdentifier,
57
+ address: string,
58
+ ticker: string,
59
+ decimals: number,
60
+ displayDecimals?: number,
61
+ name: string
62
+ }
63
+
64
+ /**
65
+ * Type guard for SCToken
66
+ * @category Tokens
67
+ */
68
+ export function isSCToken(obj: any): obj is SCToken {
69
+ return typeof (obj) === "object" &&
70
+ obj.chain === "SC" &&
71
+ typeof (obj.chainId) === "string" &&
72
+ typeof (obj.address) === "string" &&
73
+ typeof (obj.ticker) === "string" &&
74
+ typeof (obj.decimals) === "number" &&
75
+ typeof (obj.name) === "string";
76
+ }
77
+
78
+ /**
79
+ * Union type for all token types (BTC or smart chain)
80
+ * @category Tokens
81
+ */
82
+ export type Token<ChainIdentifier extends string = string> = BtcToken | SCToken<ChainIdentifier>;
83
+
84
+ /**
85
+ * Type guard for Token
86
+ * @category Tokens
87
+ */
88
+ export function isToken(obj: any): obj is Token {
89
+ return isBtcToken(obj) || isSCToken(obj);
90
+ }
@@ -0,0 +1,110 @@
1
+ import {ISwapPrice} from "../prices/abstract/ISwapPrice";
2
+ import {Token} from "./Token";
3
+ import {PriceInfoType} from "./PriceInfoType";
4
+ import {toDecimal} from "../utils/Utils";
5
+
6
+ /**
7
+ * Represents a token amount along with its formatted values and USD valuation helpers
8
+ * @category Tokens
9
+ */
10
+ export type TokenAmount<
11
+ ChainIdentifier extends string = string,
12
+ T extends Token<ChainIdentifier> = Token<ChainIdentifier>
13
+ > = {
14
+ /**
15
+ * Raw amount in base units represented as bigint
16
+ */
17
+ rawAmount: bigint,
18
+ /**
19
+ * Human readable amount with decimal places
20
+ */
21
+ amount: string,
22
+ /**
23
+ * Number representation of the decimal token amount (can lose precision!)
24
+ */
25
+ _amount: number,
26
+ /**
27
+ * Token associated with this amount
28
+ */
29
+ token: T,
30
+ /**
31
+ * Fetches the current USD value of the amount
32
+ *
33
+ * @param abortSignal
34
+ * @param preFetchedUsdPrice You can supply a pre-fetched usd price to the pricing function
35
+ * @returns A promise resolving to the current USD value of the token amount
36
+ */
37
+ currentUsdValue: (abortSignal?: AbortSignal, preFetchedUsdPrice?: number) => Promise<number>,
38
+ /**
39
+ * Gets USD value of the amount, if this amount was returned from a swap it uses the USD value
40
+ * when the swap was created, otherwise fetches the usd value on-demand
41
+ *
42
+ * @param abortSignal
43
+ * @param preFetchedUsdPrice You can supply a pre-fetched usd price to the pricing function
44
+ * @returns A promise resolving to the current USD value of the token amount
45
+ */
46
+ usdValue: (abortSignal?: AbortSignal, preFetchedUsdPrice?: number) => Promise<number>,
47
+ /**
48
+ * USD value of the amount when swap was created - only present for token amounts obtained
49
+ * from swaps, left for convenience only, use usdValue() instead, which automatically
50
+ * recognizes which pricing to use (either past value if available or fetches it on-demand)
51
+ */
52
+ pastUsdValue?: number,
53
+ /**
54
+ * Returns the string representation of the amount along with the token ticker in format: {amount} {ticker}
55
+ */
56
+ toString: () => string
57
+ };
58
+
59
+ /**
60
+ * Factory function to create a TokenAmount
61
+ * @category Tokens
62
+ */
63
+ export function toTokenAmount<
64
+ ChainIdentifier extends string = string,
65
+ T extends Token<ChainIdentifier> = Token<ChainIdentifier>
66
+ >(
67
+ amount: bigint,
68
+ token: T,
69
+ prices: ISwapPrice,
70
+ pricingInfo?: PriceInfoType
71
+ ): TokenAmount<ChainIdentifier, T> {
72
+ if (amount == null) return null!; //Shouldn't happen
73
+ const amountStr = toDecimal(amount, token.decimals, undefined, token.displayDecimals);
74
+ const _amount = parseFloat(amountStr);
75
+
76
+ let usdValue: number | undefined = undefined;
77
+ if (pricingInfo != null) {
78
+ if (token.chain === "BTC" && token.ticker === "BTC") {
79
+ if (pricingInfo.realPriceUsdPerBitcoin != null) {
80
+ usdValue = Number(amount) * pricingInfo.realPriceUsdPerBitcoin;
81
+ }
82
+ } else {
83
+ if (pricingInfo.realPriceUsdPerBitcoin != null && pricingInfo.realPriceUSatPerToken != null) {
84
+ usdValue = _amount
85
+ * pricingInfo.realPriceUsdPerBitcoin
86
+ * Number(pricingInfo.realPriceUSatPerToken)
87
+ / 1_000_000;
88
+ }
89
+ }
90
+ }
91
+
92
+ const currentUsdValue = (abortSignal?: AbortSignal, preFetchedUsdPrice?: number) =>
93
+ prices.getUsdValue(amount, token, abortSignal, preFetchedUsdPrice);
94
+
95
+ return {
96
+ rawAmount: amount,
97
+ amount: amountStr,
98
+ _amount,
99
+ token,
100
+ currentUsdValue,
101
+ pastUsdValue: usdValue,
102
+ usdValue: async (abortSignal?: AbortSignal, preFetchedUsdPrice?: number) => {
103
+ if (usdValue == null) {
104
+ usdValue = await currentUsdValue(abortSignal, preFetchedUsdPrice);
105
+ }
106
+ return usdValue;
107
+ },
108
+ toString: () => amountStr + " " + token.ticker
109
+ };
110
+ }
@@ -0,0 +1,55 @@
1
+ import {PercentagePPM} from "./PercentagePPM";
2
+ import {TokenAmount} from "../TokenAmount";
3
+ import {Token} from "../Token";
4
+
5
+ /**
6
+ * Represents a fee in both source and destination tokens, as well as providing USD valuation helpers and
7
+ * fee composition
8
+ * @category Pricing and LPs
9
+ */
10
+ export type Fee<
11
+ ChainIdentifier extends string = string,
12
+ TSrc extends Token<ChainIdentifier> = Token<ChainIdentifier>,
13
+ TDst extends Token<ChainIdentifier> = Token<ChainIdentifier>
14
+ > = {
15
+ /**
16
+ * Fee value equivalent in source token
17
+ */
18
+ amountInSrcToken: TokenAmount<ChainIdentifier, TSrc>,
19
+ /**
20
+ * Fee value equivalent in destination token
21
+ */
22
+ amountInDstToken: TokenAmount<ChainIdentifier, TDst>,
23
+ /**
24
+ * Fetches the current USD value of the fee
25
+ *
26
+ * @param abortSignal
27
+ * @param preFetchedUsdPrice You can supply a pre-fetched usd price to the pricing function
28
+ * @returns A promise resolving to the current USD value of the token amount
29
+ */
30
+ currentUsdValue: (abortSignal?: AbortSignal, preFetchedUsdPrice?: number) => Promise<number>,
31
+ /**
32
+ * Gets USD value of the fee, if the USD value when the swap was created is known (newer swaps) it returns this value,
33
+ * otherwise fetches the usd value on-demand
34
+ *
35
+ * @param abortSignal
36
+ * @param preFetchedUsdPrice You can supply a pre-fetched usd price to the pricing function
37
+ * @returns A promise resolving to the current USD value of the fee
38
+ */
39
+ usdValue: (abortSignal?: AbortSignal, preFetchedUsdPrice?: number) => Promise<number>,
40
+ /**
41
+ * USD value of the fee when swap was created - only present for newer swaps where the USD value at create
42
+ * time is known. Left for convenience only, use usdValue() instead, which automatically
43
+ * recognizes which pricing to use (either past value if available or fetches it on-demand)
44
+ */
45
+ pastUsdValue?: number,
46
+ /**
47
+ * Returns the composition of the fee (base fee + percentage fee) if known, the total fee is calculated as:
48
+ * base_fee + amount * percentage_fee
49
+ */
50
+ composition?: {
51
+ base: TokenAmount<ChainIdentifier>,
52
+ percentage: PercentagePPM
53
+ }
54
+ }
55
+
@@ -0,0 +1,11 @@
1
+ import {FeeType} from "../../enums/FeeType";
2
+ import {Fee} from "./Fee";
3
+
4
+ /**
5
+ * Breakdown of fees by type (swap fee vs network fee)
6
+ * @category Pricing and LPs
7
+ */
8
+ export type FeeBreakdown<ChainIdentifier extends string = string> = {
9
+ type: FeeType,
10
+ fee: Fee<ChainIdentifier>
11
+ }[];
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Parts-per-million fee representation with conversion helpers
3
+ * @category Pricing and LPs
4
+ */
5
+ export type PercentagePPM = {
6
+ ppm: bigint,
7
+ decimal: number,
8
+ percentage: number,
9
+ toString: (decimal?: number) => string
10
+ };
11
+
12
+ /**
13
+ * Converts parts-per-million to percentage representation
14
+ * @category Pricing and LPs
15
+ */
16
+ export function ppmToPercentage(ppm: bigint): PercentagePPM {
17
+ const percentage = Number(ppm) / 10_000;
18
+ return {
19
+ ppm,
20
+ decimal: Number(ppm) / 1_000_000,
21
+ percentage: percentage,
22
+ toString: (decimals?: number) => (decimals != null ? percentage.toFixed(decimals) : percentage) + "%"
23
+ }
24
+ }
@@ -0,0 +1,72 @@
1
+ /**
2
+ * LNURL-pay request parameters
3
+ * @category Bitcoin
4
+ */
5
+ export type LNURLPayParams = {
6
+ tag: "payRequest";
7
+ callback: string;
8
+ domain: string;
9
+ minSendable: number;
10
+ maxSendable: number;
11
+ metadata: string;
12
+ decodedMetadata: string[][];
13
+ commentAllowed: number;
14
+ }
15
+
16
+ /**
17
+ * LNURL-pay parameters with URL
18
+ * @category Bitcoin
19
+ */
20
+ export type LNURLPayParamsWithUrl = LNURLPayParams & { url: string };
21
+
22
+ /**
23
+ * LNURL-pay specification
24
+ * @category Bitcoin
25
+ */
26
+ export type LNURLPay = {
27
+ type: "pay",
28
+ min: bigint,
29
+ max: bigint,
30
+ commentMaxLength: number,
31
+ shortDescription?: string,
32
+ longDescription?: string,
33
+ icon?: string,
34
+ params: LNURLPayParamsWithUrl
35
+ }
36
+
37
+ /**
38
+ * Type guard for LNURL-pay parameters
39
+ * @category Bitcoin
40
+ */
41
+ export function isLNURLPayParams(obj: any): obj is LNURLPayParams {
42
+ return obj.tag === "payRequest";
43
+ }
44
+
45
+ /**
46
+ * Type guard for LNURL-pay
47
+ * @category Bitcoin
48
+ */
49
+ export function isLNURLPay(value: any): value is LNURLPay {
50
+ return (
51
+ typeof value === "object" &&
52
+ value != null &&
53
+ value.type === "pay" &&
54
+ typeof (value.min) === "bigint" &&
55
+ typeof (value.max) === "bigint" &&
56
+ typeof value.commentMaxLength === "number" &&
57
+ (value.shortDescription === undefined || typeof value.shortDescription === "string") &&
58
+ (value.longDescription === undefined || typeof value.longDescription === "string") &&
59
+ (value.icon === undefined || typeof value.icon === "string") &&
60
+ isLNURLPayParams(value.params)
61
+ );
62
+ }
63
+
64
+ /**
65
+ * Decoded LNURL-pay success action
66
+ * @category Bitcoin
67
+ */
68
+ export type LNURLDecodedSuccessAction = {
69
+ description: string,
70
+ text?: string,
71
+ url?: string
72
+ };
@@ -0,0 +1,55 @@
1
+ /**
2
+ * LNURL-withdraw request parameters
3
+ * @category Bitcoin
4
+ */
5
+ export type LNURLWithdrawParams = {
6
+ tag: "withdrawRequest";
7
+ k1: string;
8
+ callback: string;
9
+ domain: string;
10
+ minWithdrawable: number;
11
+ maxWithdrawable: number;
12
+ defaultDescription: string;
13
+ balanceCheck?: string;
14
+ payLink?: string;
15
+ }
16
+
17
+ /**
18
+ * LNURL-withdraw parameters with URL
19
+ * @category Bitcoin
20
+ */
21
+ export type LNURLWithdrawParamsWithUrl = LNURLWithdrawParams & { url: string };
22
+
23
+ /**
24
+ * LNURL-withdraw specification
25
+ * @category Bitcoin
26
+ */
27
+ export type LNURLWithdraw = {
28
+ type: "withdraw",
29
+ min: bigint,
30
+ max: bigint,
31
+ params: LNURLWithdrawParamsWithUrl
32
+ }
33
+
34
+ /**
35
+ * Type guard for LNURL-withdraw
36
+ * @category Bitcoin
37
+ */
38
+ export function isLNURLWithdraw(value: any): value is LNURLWithdraw {
39
+ return (
40
+ typeof value === "object" &&
41
+ value != null &&
42
+ value.type === "withdraw" &&
43
+ typeof (value.min) === "bigint" &&
44
+ typeof (value.max) === "bigint" &&
45
+ isLNURLWithdrawParams(value.params)
46
+ );
47
+ }
48
+
49
+ /**
50
+ * Type guard for LNURL-withdraw parameters
51
+ * @category Bitcoin
52
+ */
53
+ export function isLNURLWithdrawParams(obj: any): obj is LNURLWithdrawParams {
54
+ return obj.tag === "withdrawRequest";
55
+ }