@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,328 @@
1
+ import {ChainIds, MultiChain} from "../../swapper/Swapper";
2
+ import {Token} from "../../types/Token";
3
+ import {PriceInfoType} from "../../types/PriceInfoType";
4
+
5
+ /**
6
+ * Abstract base class for swap pricing implementations
7
+ * @category Pricing and LPs
8
+ */
9
+ export abstract class ISwapPrice<T extends MultiChain = MultiChain> {
10
+
11
+ maxAllowedFeeDifferencePPM: bigint;
12
+
13
+ protected constructor(maxAllowedFeeDifferencePPM: bigint) {
14
+ this.maxAllowedFeeDifferencePPM = maxAllowedFeeDifferencePPM;
15
+ }
16
+
17
+ /**
18
+ * Gets the decimal places for a given token, returns -1 if token should be ignored & null if token is not found
19
+ * @param chainIdentifier
20
+ * @param token
21
+ * @protected
22
+ */
23
+ protected abstract getDecimals<C extends ChainIds<T>>(chainIdentifier: C, token: string): number | null;
24
+
25
+ /**
26
+ * Returns the price of the token in BTC uSats (microSats)
27
+ *
28
+ * @param chainIdentifier
29
+ * @param token
30
+ * @param abortSignal
31
+ * @protected
32
+ */
33
+ protected abstract getPrice<C extends ChainIds<T>>(chainIdentifier: C, token: string, abortSignal?: AbortSignal): Promise<bigint>;
34
+
35
+ /**
36
+ * Returns the price of bitcoin in USD, (sats/USD)
37
+ *
38
+ * @param abortSignal
39
+ * @protected
40
+ */
41
+ protected abstract getUsdPrice(abortSignal?: AbortSignal): Promise<number>;
42
+
43
+ protected getDecimalsThrowing<C extends ChainIds<T>>(chainIdentifier: C, token: string): number {
44
+ const decimals = this.getDecimals(chainIdentifier, token);
45
+ if(decimals==null) throw new Error(`Cannot get decimal count for token ${chainIdentifier}:${token}!`);
46
+ return decimals;
47
+ }
48
+
49
+ /**
50
+ * Recomputes pricing info without fetching the current price
51
+ *
52
+ * @param chainIdentifier
53
+ * @param amountSats
54
+ * @param satsBaseFee
55
+ * @param feePPM
56
+ * @param paidToken
57
+ * @param token
58
+ */
59
+ public recomputePriceInfoSend<C extends ChainIds<T>>(
60
+ chainIdentifier: C,
61
+ amountSats: bigint,
62
+ satsBaseFee: bigint,
63
+ feePPM: bigint,
64
+ paidToken: bigint,
65
+ token: string
66
+ ): PriceInfoType {
67
+ const totalSats = (amountSats * (1000000n + feePPM) / 1000000n)
68
+ + satsBaseFee;
69
+ const totalUSats = totalSats * 1000000n;
70
+ const swapPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, token))) / paidToken;
71
+
72
+ return {
73
+ isValid: true,
74
+ differencePPM: 0n,
75
+ satsBaseFee,
76
+ feePPM,
77
+ realPriceUSatPerToken: this.shouldIgnore(chainIdentifier, token) ? undefined : swapPriceUSatPerToken,
78
+ swapPriceUSatPerToken
79
+ };
80
+ }
81
+
82
+ /**
83
+ * Checks whether the swap amounts are valid given the current market rate for a given pair
84
+ *
85
+ * @param chainIdentifier
86
+ * @param amountSats Amount of sats (BTC) to be received from the swap
87
+ * @param satsBaseFee Base fee in sats (BTC) as reported by the intermediary
88
+ * @param feePPM PPM fee rate as reported by the intermediary
89
+ * @param paidToken Amount of token to be paid to the swap
90
+ * @param token
91
+ * @param abortSignal
92
+ * @param preFetchedPrice Already pre-fetched price
93
+ */
94
+ public async isValidAmountSend<C extends ChainIds<T>>(
95
+ chainIdentifier: C,
96
+ amountSats: bigint,
97
+ satsBaseFee: bigint,
98
+ feePPM: bigint,
99
+ paidToken: bigint,
100
+ token: string,
101
+ abortSignal?: AbortSignal,
102
+ preFetchedPrice?: bigint | null
103
+ ): Promise<PriceInfoType> {
104
+ const totalSats = (amountSats * (1000000n + feePPM) / 1000000n)
105
+ + satsBaseFee;
106
+ const totalUSats = totalSats * 1000000n;
107
+ const swapPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, token))) / paidToken;
108
+
109
+ if(this.shouldIgnore(chainIdentifier, token)) return {
110
+ isValid: true,
111
+ differencePPM: 0n,
112
+ satsBaseFee,
113
+ feePPM,
114
+ realPriceUSatPerToken: undefined,
115
+ swapPriceUSatPerToken
116
+ };
117
+
118
+ const calculatedAmtInToken = await this.getFromBtcSwapAmount(chainIdentifier, totalSats, token, abortSignal, preFetchedPrice);
119
+ const realPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, token))) / calculatedAmtInToken;
120
+
121
+ const difference = paidToken - calculatedAmtInToken; //Will be >0 if we need to pay more than we should've
122
+ const differencePPM = difference * 1000000n / calculatedAmtInToken;
123
+
124
+ return {
125
+ isValid: differencePPM <= this.maxAllowedFeeDifferencePPM,
126
+ differencePPM,
127
+ satsBaseFee,
128
+ feePPM,
129
+ realPriceUSatPerToken,
130
+ swapPriceUSatPerToken
131
+ };
132
+ }
133
+
134
+ /**
135
+ * Recomputes pricing info without fetching the current price
136
+ *
137
+ * @param chainIdentifier
138
+ * @param amountSats
139
+ * @param satsBaseFee
140
+ * @param feePPM
141
+ * @param receiveToken
142
+ * @param token
143
+ */
144
+ public recomputePriceInfoReceive<C extends ChainIds<T>>(
145
+ chainIdentifier: C,
146
+ amountSats: bigint,
147
+ satsBaseFee: bigint,
148
+ feePPM: bigint,
149
+ receiveToken: bigint,
150
+ token: string,
151
+ ): PriceInfoType {
152
+ const totalSats = (amountSats * (1000000n - feePPM) / 1000000n)
153
+ - satsBaseFee;
154
+ const totalUSats = totalSats * 1000000n;
155
+ const swapPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, token))) / receiveToken;
156
+
157
+ return {
158
+ isValid: true,
159
+ differencePPM: 0n,
160
+ satsBaseFee,
161
+ feePPM,
162
+ realPriceUSatPerToken: this.shouldIgnore(chainIdentifier, token) ? undefined : swapPriceUSatPerToken,
163
+ swapPriceUSatPerToken
164
+ };
165
+ }
166
+
167
+ /**
168
+ * Checks whether the swap amounts are valid given the current market rate for a given pair
169
+ *
170
+ * @param chainIdentifier
171
+ * @param amountSats Amount of sats (BTC) to be paid to the swap
172
+ * @param satsBaseFee Base fee in sats (BTC) as reported by the intermediary
173
+ * @param feePPM PPM fee rate as reported by the intermediary
174
+ * @param receiveToken Amount of token to be received from the swap
175
+ * @param token
176
+ * @param abortSignal
177
+ * @param preFetchedPrice Already pre-fetched price
178
+ */
179
+ public async isValidAmountReceive<C extends ChainIds<T>>(
180
+ chainIdentifier: C,
181
+ amountSats: bigint,
182
+ satsBaseFee: bigint,
183
+ feePPM: bigint,
184
+ receiveToken: bigint,
185
+ token: string,
186
+ abortSignal?: AbortSignal,
187
+ preFetchedPrice?: bigint | null
188
+ ): Promise<PriceInfoType> {
189
+ const totalSats = (amountSats * (1000000n - feePPM) / 1000000n)
190
+ - satsBaseFee;
191
+ const totalUSats = totalSats * 1000000n;
192
+ const swapPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, token))) / receiveToken;
193
+
194
+ if(this.shouldIgnore(chainIdentifier, token)) return {
195
+ isValid: true,
196
+ differencePPM: 0n,
197
+ satsBaseFee,
198
+ feePPM,
199
+ realPriceUSatPerToken: undefined,
200
+ swapPriceUSatPerToken
201
+ };
202
+
203
+ const calculatedAmtInToken = await this.getFromBtcSwapAmount(chainIdentifier, totalSats, token, abortSignal, preFetchedPrice);
204
+ const realPriceUSatPerToken = totalUSats * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, token))) / calculatedAmtInToken;
205
+
206
+ const difference = calculatedAmtInToken - receiveToken; //Will be >0 if we receive less than we should've
207
+ const differencePPM = difference * 100000n / calculatedAmtInToken;
208
+
209
+ return {
210
+ isValid: differencePPM <= this.maxAllowedFeeDifferencePPM,
211
+ differencePPM,
212
+ satsBaseFee,
213
+ feePPM,
214
+ realPriceUSatPerToken,
215
+ swapPriceUSatPerToken
216
+ };
217
+ }
218
+
219
+ public preFetchPrice<C extends ChainIds<T>>(chainIdentifier: C, token: string, abortSignal?: AbortSignal): Promise<bigint> {
220
+ return this.getPrice(chainIdentifier, token, abortSignal);
221
+ }
222
+
223
+ public preFetchUsdPrice(abortSignal?: AbortSignal): Promise<number> {
224
+ return this.getUsdPrice(abortSignal);
225
+ }
226
+
227
+ /**
228
+ * Returns amount of {toToken} that are equivalent to {fromAmount} satoshis
229
+ *
230
+ * @param chainIdentifier
231
+ * @param fromAmount Amount of satoshis
232
+ * @param toToken Token
233
+ * @param abortSignal
234
+ * @param preFetchedPrice
235
+ * @throws {Error} when token is not found
236
+ */
237
+ public async getFromBtcSwapAmount<C extends ChainIds<T>>(
238
+ chainIdentifier: C,
239
+ fromAmount: bigint,
240
+ toToken: string,
241
+ abortSignal?: AbortSignal,
242
+ preFetchedPrice?: bigint | null
243
+ ): Promise<bigint> {
244
+ if(this.getDecimals(chainIdentifier, toToken.toString())==null) throw new Error("Token not found!");
245
+
246
+ const price = preFetchedPrice || await this.getPrice(chainIdentifier, toToken, abortSignal);
247
+
248
+ return fromAmount
249
+ * (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, toToken.toString())))
250
+ * (1000000n) //To usat
251
+ / (price);
252
+ }
253
+
254
+ /**
255
+ * Returns amount of satoshis that are equivalent to {fromAmount} of {fromToken}
256
+ *
257
+ * @param chainIdentifier
258
+ * @param fromAmount Amount of the token
259
+ * @param fromToken Token
260
+ * @param abortSignal
261
+ * @param preFetchedPrice Pre-fetched swap price if available
262
+ * @throws {Error} when token is not found
263
+ */
264
+ public async getToBtcSwapAmount<C extends ChainIds<T>>(
265
+ chainIdentifier: C,
266
+ fromAmount: bigint,
267
+ fromToken: string,
268
+ abortSignal?: AbortSignal,
269
+ preFetchedPrice?: bigint
270
+ ): Promise<bigint> {
271
+ if(this.getDecimals(chainIdentifier, fromToken.toString())==null) throw new Error("Token not found");
272
+
273
+ const price = preFetchedPrice || await this.getPrice(chainIdentifier, fromToken, abortSignal);
274
+
275
+ return fromAmount
276
+ * price
277
+ / 1000000n
278
+ / (10n ** BigInt(this.getDecimalsThrowing(chainIdentifier, fromToken.toString())));
279
+ }
280
+
281
+ /**
282
+ * Returns whether the token should be ignored and pricing for it not calculated
283
+ * @param chainIdentifier
284
+ * @param tokenAddress
285
+ * @throws {Error} if token is not found
286
+ */
287
+ public shouldIgnore<C extends ChainIds<T>>(chainIdentifier: C, tokenAddress: string): boolean {
288
+ const coin = this.getDecimals(chainIdentifier, tokenAddress.toString());
289
+ if(coin==null) throw new Error("Token not found");
290
+ return coin===-1;
291
+ }
292
+
293
+ public async getBtcUsdValue(
294
+ btcSats: bigint,
295
+ abortSignal?: AbortSignal,
296
+ preFetchedPrice?: number
297
+ ): Promise<number> {
298
+ return Number(btcSats)*(preFetchedPrice || await this.getUsdPrice(abortSignal));
299
+ }
300
+
301
+ public async getTokenUsdValue<C extends ChainIds<T>>(
302
+ chainId: C,
303
+ tokenAmount: bigint,
304
+ token: string,
305
+ abortSignal?: AbortSignal,
306
+ preFetchedPrice?: number
307
+ ): Promise<number> {
308
+ const [btcAmount, usdPrice] = await Promise.all([
309
+ this.getToBtcSwapAmount(chainId, tokenAmount, token, abortSignal),
310
+ preFetchedPrice==null ? this.preFetchUsdPrice(abortSignal) : Promise.resolve(preFetchedPrice)
311
+ ]);
312
+ return Number(btcAmount)*usdPrice;
313
+ }
314
+
315
+ public getUsdValue<C extends ChainIds<T>>(
316
+ amount: bigint,
317
+ token: Token<C>,
318
+ abortSignal?: AbortSignal,
319
+ preFetchedUsdPrice?: number
320
+ ): Promise<number> {
321
+ if(token.chain==="BTC") {
322
+ return this.getBtcUsdValue(amount, abortSignal, preFetchedUsdPrice);
323
+ } else {
324
+ return this.getTokenUsdValue(token.chainId, amount, token.address, abortSignal, preFetchedUsdPrice);
325
+ }
326
+ }
327
+
328
+ }
@@ -0,0 +1,41 @@
1
+ import {CtorCoinTypes} from "../abstract/IPriceProvider";
2
+ import {ExchangePriceProvider} from "./abstract/ExchangePriceProvider";
3
+ import {MultiChain} from "../../swapper/Swapper";
4
+ import {httpGet} from "../../http/HttpUtils";
5
+
6
+ export type BinanceResponse = {
7
+ symbol: string;
8
+ price: string;
9
+ };
10
+
11
+ /**
12
+ * Price provider using Binance exchange API
13
+ * @category Pricing and LPs
14
+ */
15
+ export class BinancePriceProvider<T extends MultiChain> extends ExchangePriceProvider<T> {
16
+
17
+ constructor(coinsMap: CtorCoinTypes<T>, url: string = "https://api.binance.com/api/v3", httpRequestTimeout?: number) {
18
+ super(coinsMap, url, httpRequestTimeout);
19
+ }
20
+
21
+ protected async fetchPair(pair: string, abortSignal?: AbortSignal) {
22
+ const response = await httpGet<BinanceResponse>(
23
+ this.url+"/ticker/price?symbol="+pair,
24
+ this.httpRequestTimeout,
25
+ abortSignal
26
+ );
27
+
28
+ return parseFloat(response.price);
29
+ }
30
+
31
+ protected async fetchUsdPrice(abortSignal?: AbortSignal): Promise<number> {
32
+ const response = await httpGet<BinanceResponse>(
33
+ this.url+"/ticker/price?symbol=BTCUSDC",
34
+ this.httpRequestTimeout,
35
+ abortSignal
36
+ );
37
+
38
+ return parseFloat(response.price)/100000000;
39
+ }
40
+
41
+ }
@@ -0,0 +1,40 @@
1
+ import {CoinType, CtorCoinTypes} from "../abstract/IPriceProvider";
2
+ import {HttpPriceProvider} from "./abstract/HttpPriceProvider";
3
+ import {MultiChain} from "../../swapper/Swapper";
4
+ import {httpGet} from "../../http/HttpUtils";
5
+
6
+ export type CoinGeckoResponse<Currency extends string> = {
7
+ [coinId: string]: {[c in Currency]: number}
8
+ };
9
+
10
+ /**
11
+ * Price provider using CoinGecko API
12
+ * @category Pricing and LPs
13
+ */
14
+ export class CoinGeckoPriceProvider<T extends MultiChain> extends HttpPriceProvider<T> {
15
+
16
+ constructor(coinsMap: CtorCoinTypes<T>, url: string = "https://api.coingecko.com/api/v3", httpRequestTimeout?: number) {
17
+ super(coinsMap, url, httpRequestTimeout);
18
+ }
19
+
20
+ protected async fetchPrice(token: CoinType, abortSignal?: AbortSignal): Promise<bigint> {
21
+ let response = await httpGet<CoinGeckoResponse<"sats">>(
22
+ this.url+"/simple/price?ids="+token.coinId+"&vs_currencies=sats&precision=6",
23
+ this.httpRequestTimeout,
24
+ abortSignal
25
+ );
26
+
27
+ return BigInt(response[token.coinId].sats*1000000);
28
+ }
29
+
30
+ protected async fetchUsdPrice(abortSignal?: AbortSignal): Promise<number> {
31
+ let response = await httpGet<CoinGeckoResponse<"usd">>(
32
+ this.url+"/simple/price?ids=bitcoin&vs_currencies=usd&precision=9",
33
+ this.httpRequestTimeout,
34
+ abortSignal
35
+ );
36
+
37
+ return response["bitcoin"].usd/100000000;
38
+ }
39
+
40
+ }
@@ -0,0 +1,44 @@
1
+ import {CoinType, CtorCoinTypes} from "../abstract/IPriceProvider";
2
+ import {HttpPriceProvider} from "./abstract/HttpPriceProvider";
3
+ import {MultiChain} from "../../swapper/Swapper";
4
+ import {httpGet} from "../../http/HttpUtils";
5
+
6
+ export type CoinPaprikaResponse<Currency extends string> = {
7
+ quotes: {
8
+ [curr in Currency]: {
9
+ price: number
10
+ }
11
+ }
12
+ };
13
+
14
+ /**
15
+ * Price provider using CoinPaprika API
16
+ * @category Pricing and LPs
17
+ */
18
+ export class CoinPaprikaPriceProvider<T extends MultiChain> extends HttpPriceProvider<T> {
19
+
20
+ constructor(coinsMap: CtorCoinTypes<T>, url: string = "https://api.coinpaprika.com/v1", httpRequestTimeout?: number) {
21
+ super(coinsMap, url, httpRequestTimeout);
22
+ }
23
+
24
+ async fetchPrice(token: CoinType, abortSignal?: AbortSignal) {
25
+ const response = await httpGet<CoinPaprikaResponse<"BTC">>(
26
+ this.url+"/tickers/"+token.coinId+"?quotes=BTC",
27
+ this.httpRequestTimeout,
28
+ abortSignal
29
+ );
30
+
31
+ return BigInt(Math.floor(response.quotes.BTC.price*100000000000000));
32
+ }
33
+
34
+ protected async fetchUsdPrice(abortSignal?: AbortSignal): Promise<number> {
35
+ const response = await httpGet<CoinPaprikaResponse<"USD">>(
36
+ this.url+"/tickers/btc-bitcoin?quotes=USD",
37
+ this.httpRequestTimeout,
38
+ abortSignal
39
+ );
40
+
41
+ return response.quotes.USD.price/100000000;
42
+ }
43
+
44
+ }
@@ -0,0 +1,29 @@
1
+ import {CoinType, CtorCoinTypes, IPriceProvider} from "../abstract/IPriceProvider";
2
+ import {MultiChain} from "../../swapper/Swapper";
3
+ import {CustomPriceFunction} from "../../types/CustomPriceFunction";
4
+
5
+ /**
6
+ * Price provider using custom pricing function
7
+ * @category Pricing and LPs
8
+ */
9
+ export class CustomPriceProvider<T extends MultiChain> extends IPriceProvider<T> {
10
+
11
+ readonly getUsdPriceFn: CustomPriceFunction;
12
+
13
+ constructor(coinsMap: CtorCoinTypes<T>, getUsdPriceFn: CustomPriceFunction) {
14
+ super(coinsMap);
15
+ this.getUsdPriceFn = getUsdPriceFn;
16
+ }
17
+
18
+ protected async fetchPrice(token: CoinType, abortSignal?: AbortSignal): Promise<bigint> {
19
+ const [btcPrice, tokenPrice] = await this.getUsdPriceFn(["BTC",token.coinId], abortSignal);
20
+ const priceInBtc = tokenPrice / btcPrice;
21
+ return BigInt(Math.floor(priceInBtc*100_000_000*1_000_000));
22
+ }
23
+
24
+ protected async fetchUsdPrice(abortSignal?: AbortSignal): Promise<number> {
25
+ const [btcPrice] = await this.getUsdPriceFn(["BTC"], abortSignal);
26
+ return btcPrice / 100_000_000;
27
+ }
28
+
29
+ }
@@ -0,0 +1,74 @@
1
+ import {CoinType, CtorCoinTypes} from "../abstract/IPriceProvider";
2
+ import {ExchangePriceProvider} from "./abstract/ExchangePriceProvider";
3
+ import {MultiChain} from "../../swapper/Swapper";
4
+ import {httpGet} from "../../http/HttpUtils";
5
+
6
+ export type KrakenResponse = {
7
+ error: string[];
8
+ result: {
9
+ [ticker: string]: {
10
+ a: [string, string, string],
11
+ b: [string, string, string],
12
+ c: [string, string],
13
+ v: [string, string],
14
+ p: [string, string],
15
+ t: [number, number],
16
+ l: [string, string],
17
+ h: [string, string],
18
+ o: string
19
+ }
20
+ }
21
+ };
22
+
23
+ /**
24
+ * Price provider using Kraken exchange API
25
+ * @category Pricing and LPs
26
+ */
27
+ export class KrakenPriceProvider<T extends MultiChain> extends ExchangePriceProvider<T> {
28
+
29
+ constructor(coinsMap: CtorCoinTypes<T>, url: string = "https://api.kraken.com/0", httpRequestTimeout?: number) {
30
+ super(coinsMap, url, httpRequestTimeout);
31
+ }
32
+
33
+ protected async fetchPair(pair: string, abortSignal?: AbortSignal) {
34
+ const response = await httpGet<KrakenResponse>(
35
+ this.url+"/public/Ticker?pair="+pair,
36
+ this.httpRequestTimeout,
37
+ abortSignal
38
+ );
39
+
40
+ return parseFloat(response.result[pair].c[0]);
41
+ }
42
+
43
+ protected async fetchUsdPrice(abortSignal?: AbortSignal): Promise<number> {
44
+ const response = await httpGet<KrakenResponse>(
45
+ this.url+"/public/Ticker?pair=XBTUSDC",
46
+ this.httpRequestTimeout,
47
+ abortSignal
48
+ );
49
+
50
+ return parseFloat(response.result["XBTUSDC"].c[0])/100000000;
51
+ }
52
+
53
+ protected async fetchPrice(token: CoinType, abortSignal?: AbortSignal): Promise<bigint> {
54
+ const pairs: string[] = token.coinId.split(";");
55
+
56
+ const response = await httpGet<KrakenResponse>(
57
+ this.url+"/public/Ticker?pair="+pairs.map(val => val.startsWith("!") ? val.substring(1) : val).join(","),
58
+ this.httpRequestTimeout,
59
+ abortSignal
60
+ );
61
+
62
+ const prices: number[] = pairs.map(pair => {
63
+ let invert = pair.startsWith("!");
64
+ if(invert) pair = pair.substring(1);
65
+ const value = parseFloat(response.result[pair].c[0]);
66
+ return invert ? 1/value : value;
67
+ });
68
+
69
+ const price = prices.reduce((previousValue, currentValue) => previousValue * currentValue, 1);
70
+
71
+ return BigInt(Math.floor(price*100000000000000));
72
+ }
73
+
74
+ }
@@ -0,0 +1,53 @@
1
+ import {CtorCoinTypes} from "../abstract/IPriceProvider";
2
+ import {ExchangePriceProvider} from "./abstract/ExchangePriceProvider";
3
+ import {MultiChain} from "../../swapper/Swapper";
4
+ import {httpGet} from "../../http/HttpUtils";
5
+
6
+ export type OKXResponse = {
7
+ code: string;
8
+ msg: string;
9
+ data: [
10
+ {
11
+ instId: string;
12
+ idxPx: string;
13
+ high24h: string;
14
+ sodUtc0: string;
15
+ open24h: string;
16
+ low24h: string;
17
+ sodUtc8: string;
18
+ ts: string;
19
+ }
20
+ ]
21
+ };
22
+
23
+ /**
24
+ * Price provider using OKX exchange API
25
+ * @category Pricing and LPs
26
+ */
27
+ export class OKXPriceProvider<T extends MultiChain> extends ExchangePriceProvider<T> {
28
+
29
+ constructor(coinsMap: CtorCoinTypes<T>, url: string = "https://www.okx.com/api/v5", httpRequestTimeout?: number) {
30
+ super(coinsMap, url, httpRequestTimeout);
31
+ }
32
+
33
+ async fetchPair(pair: string, abortSignal?: AbortSignal) {
34
+ const response = await httpGet<OKXResponse>(
35
+ this.url+"/market/index-tickers?instId="+pair,
36
+ this.httpRequestTimeout,
37
+ abortSignal
38
+ );
39
+
40
+ return parseFloat(response.data[0].idxPx);
41
+ }
42
+
43
+ protected async fetchUsdPrice(abortSignal?: AbortSignal): Promise<number> {
44
+ const response = await httpGet<OKXResponse>(
45
+ this.url+"/market/index-tickers?instId=BTC-USD",
46
+ this.httpRequestTimeout,
47
+ abortSignal
48
+ );
49
+
50
+ return parseFloat(response.data[0].idxPx)/100000000;
51
+ }
52
+
53
+ }
@@ -0,0 +1,29 @@
1
+ import {HttpPriceProvider} from "./HttpPriceProvider";
2
+ import {CoinType} from "../../abstract/IPriceProvider";
3
+ import {MultiChain} from "../../../swapper/Swapper";
4
+
5
+ export abstract class ExchangePriceProvider<T extends MultiChain> extends HttpPriceProvider<T> {
6
+
7
+ /**
8
+ * Fetches the price on the specific exchange pair
9
+ *
10
+ * @param pair
11
+ * @param abortSignal
12
+ * @protected
13
+ */
14
+ protected abstract fetchPair(pair: string, abortSignal?: AbortSignal): Promise<number>;
15
+
16
+ protected async fetchPrice(token: CoinType, abortSignal?: AbortSignal): Promise<bigint> {
17
+ const pairs: string[] = token.coinId.split(";");
18
+ const prices: number[] = await Promise.all(pairs.map(pair => {
19
+ let invert = pair.startsWith("!");
20
+ if(invert) pair = pair.substring(1);
21
+ return this.fetchPair(pair, abortSignal).then(value => invert ? 1/value : value);
22
+ }));
23
+
24
+ const price = prices.reduce((previousValue, currentValue) => previousValue * currentValue, 1);
25
+
26
+ return BigInt(Math.floor(price*100000000000000));
27
+ }
28
+
29
+ }
@@ -0,0 +1,15 @@
1
+ import {CtorCoinTypes, IPriceProvider} from "../../abstract/IPriceProvider";
2
+ import {MultiChain} from "../../../swapper/Swapper";
3
+
4
+ export abstract class HttpPriceProvider<T extends MultiChain> extends IPriceProvider<T> {
5
+
6
+ url: string;
7
+ httpRequestTimeout?: number;
8
+
9
+ protected constructor(coinsMap: CtorCoinTypes<T>, url: string, httpRequestTimeout?: number) {
10
+ super(coinsMap);
11
+ this.url = url;
12
+ this.httpRequestTimeout = httpRequestTimeout;
13
+ }
14
+
15
+ }