@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,18 @@
1
+ /**
2
+ * An error returned by the intermediary in a http response
3
+ * @category Errors
4
+ */
5
+ export declare class RequestError extends Error {
6
+ httpCode: number;
7
+ constructor(msg: string, httpCode: number);
8
+ static parse(msg: string, httpCode: number): RequestError;
9
+ }
10
+ /**
11
+ * An error indicating out of bounds (amount too high or too low) on swap initialization
12
+ * @category Errors
13
+ */
14
+ export declare class OutOfBoundsError extends RequestError {
15
+ min: bigint;
16
+ max: bigint;
17
+ constructor(msg: string, httpCode: number, min: bigint, max: bigint);
18
+ }
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OutOfBoundsError = exports.RequestError = void 0;
4
+ /**
5
+ * An error returned by the intermediary in a http response
6
+ * @category Errors
7
+ */
8
+ class RequestError extends Error {
9
+ constructor(msg, httpCode) {
10
+ try {
11
+ const parsed = JSON.parse(msg);
12
+ if (parsed.msg != null)
13
+ msg = parsed.msg;
14
+ }
15
+ catch (e) { }
16
+ super(msg);
17
+ // Set the prototype explicitly.
18
+ Object.setPrototypeOf(this, RequestError.prototype);
19
+ this.httpCode = httpCode;
20
+ }
21
+ static parse(msg, httpCode) {
22
+ try {
23
+ const parsed = JSON.parse(msg);
24
+ msg = parsed.msg;
25
+ if (parsed.code === 20003 || parsed.code === 20004) {
26
+ return new OutOfBoundsError(parsed.msg, httpCode, BigInt(parsed.data.min), BigInt(parsed.data.max));
27
+ }
28
+ }
29
+ catch (e) { }
30
+ return new RequestError(msg, httpCode);
31
+ }
32
+ }
33
+ exports.RequestError = RequestError;
34
+ /**
35
+ * An error indicating out of bounds (amount too high or too low) on swap initialization
36
+ * @category Errors
37
+ */
38
+ class OutOfBoundsError extends RequestError {
39
+ constructor(msg, httpCode, min, max) {
40
+ super(msg, httpCode);
41
+ this.max = max;
42
+ this.min = min;
43
+ Object.setPrototypeOf(this, OutOfBoundsError.prototype);
44
+ }
45
+ }
46
+ exports.OutOfBoundsError = OutOfBoundsError;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * An error on the user side, such as invalid address provided
3
+ * @category Errors
4
+ */
5
+ export declare class UserError extends Error {
6
+ constructor(msg: string);
7
+ }
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UserError = void 0;
4
+ /**
5
+ * An error on the user side, such as invalid address provided
6
+ * @category Errors
7
+ */
8
+ class UserError extends Error {
9
+ constructor(msg) {
10
+ super(msg);
11
+ // Set the prototype explicitly.
12
+ Object.setPrototypeOf(this, UserError.prototype);
13
+ }
14
+ }
15
+ exports.UserError = UserError;
@@ -0,0 +1,23 @@
1
+ import { ChainEvent, ChainType } from "@atomiqlabs/base";
2
+ import { ISwap } from "../swaps/ISwap";
3
+ import { EventListener } from "@atomiqlabs/base/src/events/ChainEvents";
4
+ import { SwapType } from "../enums/SwapType";
5
+ import { UnifiedSwapStorage } from "../storage/UnifiedSwapStorage";
6
+ export type SwapEventListener<T extends ChainType, S extends ISwap<T>> = (event: ChainEvent<T["Data"]>, swap: S) => Promise<void>;
7
+ export declare class UnifiedSwapEventListener<T extends ChainType> {
8
+ readonly storage: UnifiedSwapStorage<T>;
9
+ readonly events: T["Events"];
10
+ readonly listeners: {
11
+ [key in SwapType]?: {
12
+ listener: SwapEventListener<T, any>;
13
+ reviver: new (obj: any) => ISwap<T>;
14
+ };
15
+ };
16
+ constructor(unifiedStorage: UnifiedSwapStorage<T>, events: T["Events"]);
17
+ processEvents(events: ChainEvent<T["Data"]>[]): Promise<void>;
18
+ listener?: EventListener<T["Data"]>;
19
+ start(): Promise<void>;
20
+ stop(): Promise<void>;
21
+ registerListener<S extends ISwap<T>>(type: SwapType, listener: SwapEventListener<T, S>, reviver: new (val: any) => S): void;
22
+ unregisterListener(type: SwapType): boolean;
23
+ }
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UnifiedSwapEventListener = void 0;
4
+ const base_1 = require("@atomiqlabs/base");
5
+ const Logger_1 = require("../utils/Logger");
6
+ function chainEventToEscrowHash(event) {
7
+ if (event instanceof base_1.SwapEvent)
8
+ return event.escrowHash;
9
+ if (event instanceof base_1.SpvVaultFrontEvent ||
10
+ event instanceof base_1.SpvVaultClaimEvent ||
11
+ event instanceof base_1.SpvVaultCloseEvent)
12
+ return event.btcTxId;
13
+ }
14
+ const logger = (0, Logger_1.getLogger)("UnifiedSwapEventListener: ");
15
+ class UnifiedSwapEventListener {
16
+ constructor(unifiedStorage, events) {
17
+ this.listeners = {};
18
+ this.storage = unifiedStorage;
19
+ this.events = events;
20
+ }
21
+ async processEvents(events) {
22
+ const escrowHashesDeduped = new Set();
23
+ events.forEach(event => {
24
+ const escrowHash = chainEventToEscrowHash(event);
25
+ if (escrowHash != null)
26
+ escrowHashesDeduped.add(escrowHash);
27
+ });
28
+ const escrowHashes = Array.from(escrowHashesDeduped);
29
+ logger.debug("processEvents(): Processing events with escrow hashes: ", escrowHashes);
30
+ const swaps = await this.storage.query([
31
+ [{ key: "escrowHash", value: escrowHashes }]
32
+ ], (val) => {
33
+ const obj = this.listeners?.[val.type];
34
+ if (obj == null)
35
+ return null;
36
+ return new obj.reviver(val);
37
+ });
38
+ const swapsByEscrowHash = {};
39
+ swaps.forEach(swap => {
40
+ const escrowHash = swap._getEscrowHash();
41
+ if (escrowHash != null)
42
+ swapsByEscrowHash[escrowHash] = swap;
43
+ });
44
+ //We need to do this because FromBTCLNAutoSwaps might not yet know its escrowHash
45
+ // hence we try to get the claimHash and try to query based on that, FromBTCLNAutoSwaps
46
+ // will use their claimHash as escrowHash before they know the real escrowHash
47
+ const htlcCheckInitializeEvents = {};
48
+ for (let event of events) {
49
+ const escrowHash = chainEventToEscrowHash(event);
50
+ if (escrowHash != null) {
51
+ const swap = swapsByEscrowHash[escrowHash];
52
+ if (swap != null) {
53
+ const obj = this.listeners[swap.getType()];
54
+ if (obj == null)
55
+ continue;
56
+ await obj.listener(event, swap);
57
+ continue;
58
+ }
59
+ }
60
+ if (event instanceof base_1.InitializeEvent) {
61
+ if (event.swapType === base_1.ChainSwapType.HTLC) {
62
+ const swapData = await event.swapData();
63
+ htlcCheckInitializeEvents[swapData.getClaimHash()] = event;
64
+ }
65
+ }
66
+ }
67
+ logger.debug("processEvents(): Additionally checking HTLC claim hashes: ", Object.keys(htlcCheckInitializeEvents));
68
+ if (Object.keys(htlcCheckInitializeEvents).length === 0)
69
+ return;
70
+ //Try to query based on claimData
71
+ const claimDataSwaps = await this.storage.query([
72
+ [{ key: "escrowHash", value: Object.keys(htlcCheckInitializeEvents) }]
73
+ ], (val) => {
74
+ const obj = this.listeners?.[val.type];
75
+ if (obj == null)
76
+ return null;
77
+ return new obj.reviver(val);
78
+ });
79
+ const swapsByClaimDataHash = {};
80
+ claimDataSwaps.forEach(swap => {
81
+ const escrowHash = swap._getEscrowHash();
82
+ if (escrowHash != null)
83
+ swapsByClaimDataHash[escrowHash] = swap;
84
+ });
85
+ logger.debug("processEvents(): Additional HTLC swaps founds: ", swapsByClaimDataHash);
86
+ for (let claimData in htlcCheckInitializeEvents) {
87
+ const event = htlcCheckInitializeEvents[claimData];
88
+ const swap = swapsByClaimDataHash[claimData];
89
+ if (swap != null) {
90
+ const obj = this.listeners[swap.getType()];
91
+ if (obj == null)
92
+ continue;
93
+ await obj.listener(event, swap);
94
+ }
95
+ }
96
+ }
97
+ async start() {
98
+ if (this.listener != null)
99
+ return;
100
+ logger.info("start(): Starting unified swap event listener");
101
+ await this.storage.init();
102
+ logger.debug("start(): Storage initialized");
103
+ await this.events.init();
104
+ logger.debug("start(): Events initialized");
105
+ this.events.registerListener(this.listener = async (events) => {
106
+ await this.processEvents(events);
107
+ return true;
108
+ });
109
+ logger.info("start(): Successfully initiated the unified swap event listener!");
110
+ }
111
+ stop() {
112
+ logger.info("stop(): Stopping unified swap event listener");
113
+ if (this.listener != null)
114
+ this.events.unregisterListener(this.listener);
115
+ return this.events.stop();
116
+ }
117
+ registerListener(type, listener, reviver) {
118
+ this.listeners[type] = {
119
+ listener,
120
+ reviver
121
+ };
122
+ }
123
+ unregisterListener(type) {
124
+ if (this.listeners[type])
125
+ return false;
126
+ delete this.listeners[type];
127
+ return true;
128
+ }
129
+ }
130
+ exports.UnifiedSwapEventListener = UnifiedSwapEventListener;
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Mimics fetch API byt adds a timeout to the request
3
+ *
4
+ * @param input
5
+ * @param init
6
+ */
7
+ export declare function fetchWithTimeout(input: RequestInfo | URL, init: RequestInit & {
8
+ timeout?: number;
9
+ }): Promise<Response>;
10
+ /**
11
+ * Sends an HTTP GET request through a fetch API, handles non 200 response codes as errors
12
+ * @param url Send request to this URL
13
+ * @param timeout Timeout (in milliseconds) for the request to conclude
14
+ * @param abortSignal
15
+ * @param allowNon200 Whether to allow non-200 status code HTTP responses
16
+ * @throws {RequestError} if non 200 response code was returned or body cannot be parsed
17
+ */
18
+ export declare function httpGet<T>(url: string, timeout?: number, abortSignal?: AbortSignal, allowNon200?: boolean): Promise<T>;
19
+ /**
20
+ * Sends an HTTP POST request through a fetch API, handles non 200 response codes as errors
21
+ * @param url Send request to this URL
22
+ * @param body A HTTP request body to send to the server
23
+ * @param timeout Timeout (in milliseconds) for the request to conclude
24
+ * @param abortSignal
25
+ * @throws {RequestError} if non 200 response code was returned
26
+ */
27
+ export declare function httpPost<T>(url: string, body: any, timeout?: number, abortSignal?: AbortSignal): Promise<T>;
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.httpPost = exports.httpGet = exports.fetchWithTimeout = void 0;
4
+ const RequestError_1 = require("../errors/RequestError");
5
+ const TimeoutUtils_1 = require("../utils/TimeoutUtils");
6
+ /**
7
+ * Mimics fetch API byt adds a timeout to the request
8
+ *
9
+ * @param input
10
+ * @param init
11
+ */
12
+ function fetchWithTimeout(input, init) {
13
+ if (init == null)
14
+ init = {};
15
+ if (init.timeout != null)
16
+ init.signal = (0, TimeoutUtils_1.timeoutSignal)(init.timeout, new Error("Network request timed out"), init.signal ?? undefined);
17
+ return fetch(input, init).catch(e => {
18
+ if (e.name === "AbortError" && init.signal != null) {
19
+ throw init.signal.reason;
20
+ }
21
+ else {
22
+ throw e;
23
+ }
24
+ });
25
+ }
26
+ exports.fetchWithTimeout = fetchWithTimeout;
27
+ /**
28
+ * Sends an HTTP GET request through a fetch API, handles non 200 response codes as errors
29
+ * @param url Send request to this URL
30
+ * @param timeout Timeout (in milliseconds) for the request to conclude
31
+ * @param abortSignal
32
+ * @param allowNon200 Whether to allow non-200 status code HTTP responses
33
+ * @throws {RequestError} if non 200 response code was returned or body cannot be parsed
34
+ */
35
+ async function httpGet(url, timeout, abortSignal, allowNon200 = false) {
36
+ const init = {
37
+ method: "GET",
38
+ timeout,
39
+ signal: abortSignal
40
+ };
41
+ const response = await fetchWithTimeout(url, init);
42
+ if (response.status !== 200) {
43
+ let resp;
44
+ try {
45
+ resp = await response.text();
46
+ }
47
+ catch (e) {
48
+ throw new RequestError_1.RequestError(response.statusText, response.status);
49
+ }
50
+ if (allowNon200) {
51
+ try {
52
+ return JSON.parse(resp);
53
+ }
54
+ catch (e) {
55
+ }
56
+ }
57
+ throw RequestError_1.RequestError.parse(resp, response.status);
58
+ }
59
+ return await response.json();
60
+ }
61
+ exports.httpGet = httpGet;
62
+ /**
63
+ * Sends an HTTP POST request through a fetch API, handles non 200 response codes as errors
64
+ * @param url Send request to this URL
65
+ * @param body A HTTP request body to send to the server
66
+ * @param timeout Timeout (in milliseconds) for the request to conclude
67
+ * @param abortSignal
68
+ * @throws {RequestError} if non 200 response code was returned
69
+ */
70
+ async function httpPost(url, body, timeout, abortSignal) {
71
+ const init = {
72
+ method: "POST",
73
+ timeout,
74
+ body: JSON.stringify(body),
75
+ headers: { 'Content-Type': 'application/json' },
76
+ signal: abortSignal
77
+ };
78
+ const response = timeout == null ? await fetch(url, init) : await fetchWithTimeout(url, init);
79
+ if (response.status !== 200) {
80
+ let resp;
81
+ try {
82
+ resp = await response.text();
83
+ }
84
+ catch (e) {
85
+ throw new RequestError_1.RequestError(response.statusText, response.status);
86
+ }
87
+ throw RequestError_1.RequestError.parse(resp, response.status);
88
+ }
89
+ return await response.json();
90
+ }
91
+ exports.httpPost = httpPost;
@@ -0,0 +1,8 @@
1
+ export interface IParamReader {
2
+ /**
3
+ * Returns a promise when the specific property with the name is read from the stream
4
+ *
5
+ * @param name Name of the property
6
+ */
7
+ getParam<T>(name: string): Promise<T>;
8
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,44 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ import { IParamReader } from "./IParamReader";
4
+ import { Buffer } from "buffer";
5
+ export declare class ParamDecoder implements IParamReader {
6
+ frameHeader?: Buffer;
7
+ frameData: Buffer[];
8
+ frameDataLength: number;
9
+ closed: boolean;
10
+ params: {
11
+ [key: string]: {
12
+ promise: Promise<any>;
13
+ resolve?: (data: any) => void;
14
+ reject?: (err: any) => void;
15
+ };
16
+ };
17
+ /**
18
+ * Called when a frame is fully ready such that it can be parsed
19
+ *
20
+ * @param data Frame data
21
+ * @private
22
+ */
23
+ private onFrameRead;
24
+ /**
25
+ * Called when data is read from the underlying source
26
+ *
27
+ * @param data Data that has been read from the underlying source
28
+ * @protected
29
+ */
30
+ protected onData(data: Buffer): void;
31
+ /**
32
+ * Called when the underlying source ends/closes/cancels
33
+ * @protected
34
+ */
35
+ protected onEnd(): void;
36
+ /**
37
+ * Called when an error happens with the underlying stream
38
+ *
39
+ * @param e Error
40
+ * @protected
41
+ */
42
+ protected onError(e: any): void;
43
+ getParam<T>(key: string): Promise<T>;
44
+ }
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ParamDecoder = void 0;
4
+ const buffer_1 = require("buffer");
5
+ class ParamDecoder {
6
+ constructor() {
7
+ this.frameData = [];
8
+ this.frameDataLength = 0;
9
+ this.closed = false;
10
+ this.params = {};
11
+ }
12
+ /**
13
+ * Called when a frame is fully ready such that it can be parsed
14
+ *
15
+ * @param data Frame data
16
+ * @private
17
+ */
18
+ onFrameRead(data) {
19
+ const obj = JSON.parse(data.toString());
20
+ for (let key in obj) {
21
+ if (this.params[key] == null) {
22
+ this.params[key] = {
23
+ promise: Promise.resolve(obj[key])
24
+ };
25
+ }
26
+ else {
27
+ const resolveFn = this.params[key].resolve;
28
+ if (resolveFn != null) {
29
+ resolveFn(obj[key]);
30
+ delete this.params[key].resolve;
31
+ delete this.params[key].reject;
32
+ }
33
+ }
34
+ }
35
+ }
36
+ /**
37
+ * Called when data is read from the underlying source
38
+ *
39
+ * @param data Data that has been read from the underlying source
40
+ * @protected
41
+ */
42
+ onData(data) {
43
+ let leavesBuffer = data;
44
+ while (leavesBuffer != null && leavesBuffer.length > 0) {
45
+ if (this.frameHeader == null) {
46
+ if (leavesBuffer.length <= 4) {
47
+ this.frameHeader = leavesBuffer;
48
+ leavesBuffer = null;
49
+ }
50
+ else {
51
+ this.frameHeader = leavesBuffer.subarray(0, 4);
52
+ leavesBuffer = leavesBuffer.subarray(4);
53
+ }
54
+ }
55
+ else if (this.frameHeader.length < 4) {
56
+ const requiredLen = 4 - this.frameHeader.length;
57
+ if (leavesBuffer.length <= requiredLen) {
58
+ this.frameHeader = buffer_1.Buffer.concat([this.frameHeader, leavesBuffer]);
59
+ leavesBuffer = null;
60
+ }
61
+ else {
62
+ this.frameHeader = buffer_1.Buffer.concat([this.frameHeader, leavesBuffer.subarray(0, requiredLen)]);
63
+ leavesBuffer = leavesBuffer.subarray(requiredLen);
64
+ }
65
+ }
66
+ if (leavesBuffer == null)
67
+ continue;
68
+ if (this.frameHeader == null || this.frameHeader.length < 4)
69
+ continue;
70
+ const frameLength = this.frameHeader.readUint32LE();
71
+ const requiredLen = frameLength - this.frameDataLength;
72
+ if (leavesBuffer.length <= requiredLen) {
73
+ this.frameData.push(leavesBuffer);
74
+ this.frameDataLength += leavesBuffer.length;
75
+ leavesBuffer = null;
76
+ }
77
+ else {
78
+ this.frameData.push(leavesBuffer.subarray(0, requiredLen));
79
+ this.frameDataLength += requiredLen;
80
+ leavesBuffer = leavesBuffer.subarray(requiredLen);
81
+ }
82
+ if (frameLength === this.frameDataLength) {
83
+ //Message read success
84
+ this.onFrameRead(buffer_1.Buffer.concat(this.frameData));
85
+ delete this.frameHeader;
86
+ this.frameData = [];
87
+ this.frameDataLength = 0;
88
+ }
89
+ }
90
+ }
91
+ /**
92
+ * Called when the underlying source ends/closes/cancels
93
+ * @protected
94
+ */
95
+ onEnd() {
96
+ for (let key in this.params) {
97
+ this.params[key].reject?.(new Error("EOF before field seen!"));
98
+ }
99
+ this.closed = true;
100
+ }
101
+ /**
102
+ * Called when an error happens with the underlying stream
103
+ *
104
+ * @param e Error
105
+ * @protected
106
+ */
107
+ onError(e) {
108
+ for (let key in this.params) {
109
+ this.params[key].reject?.(e);
110
+ }
111
+ this.closed = true;
112
+ }
113
+ getParam(key) {
114
+ if (this.params[key] == null) {
115
+ if (this.closed)
116
+ return Promise.reject(new Error("Stream already closed without param received!"));
117
+ let resolve;
118
+ let reject;
119
+ const promise = new Promise((_resolve, _reject) => {
120
+ resolve = _resolve;
121
+ reject = _reject;
122
+ });
123
+ this.params[key] = {
124
+ resolve: resolve,
125
+ reject: reject,
126
+ promise
127
+ };
128
+ }
129
+ return this.params[key].promise;
130
+ }
131
+ }
132
+ exports.ParamDecoder = ParamDecoder;
@@ -0,0 +1,20 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ import { Buffer } from "buffer";
4
+ export declare class ParamEncoder {
5
+ private readonly writeFN;
6
+ private readonly endFN;
7
+ constructor(write: (data: Buffer) => Promise<void>, end: () => Promise<void>);
8
+ /**
9
+ * Write a set of parameters to the underlying sink
10
+ *
11
+ * @param data
12
+ */
13
+ writeParams(data: {
14
+ [key: string]: any;
15
+ }): Promise<void>;
16
+ /**
17
+ * Cancels the underlying sink and encoder
18
+ */
19
+ end(): Promise<void>;
20
+ }
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ParamEncoder = void 0;
4
+ const buffer_1 = require("buffer");
5
+ class ParamEncoder {
6
+ constructor(write, end) {
7
+ this.writeFN = write;
8
+ this.endFN = end;
9
+ }
10
+ /**
11
+ * Write a set of parameters to the underlying sink
12
+ *
13
+ * @param data
14
+ */
15
+ writeParams(data) {
16
+ const serialized = buffer_1.Buffer.from(JSON.stringify(data));
17
+ const frameLengthBuffer = buffer_1.Buffer.alloc(4);
18
+ frameLengthBuffer.writeUint32LE(serialized.length);
19
+ return this.writeFN(buffer_1.Buffer.concat([
20
+ frameLengthBuffer,
21
+ serialized
22
+ ]));
23
+ }
24
+ /**
25
+ * Cancels the underlying sink and encoder
26
+ */
27
+ end() {
28
+ return this.endFN();
29
+ }
30
+ }
31
+ exports.ParamEncoder = ParamEncoder;
@@ -0,0 +1,26 @@
1
+ export declare function parseBigInt(str: string | number): bigint | null;
2
+ export declare enum FieldTypeEnum {
3
+ String = 0,
4
+ Boolean = 1,
5
+ Number = 2,
6
+ BigInt = 3,
7
+ Any = 4,
8
+ StringOptional = 100,
9
+ BooleanOptional = 101,
10
+ NumberOptional = 102,
11
+ BigIntOptional = 103,
12
+ AnyOptional = 104
13
+ }
14
+ export type FieldType<T extends FieldTypeEnum | RequestSchema | ((val: any) => (string | boolean | number | bigint | any))> = T extends FieldTypeEnum.String ? string : T extends FieldTypeEnum.Boolean ? boolean : T extends FieldTypeEnum.Number ? number : T extends FieldTypeEnum.BigInt ? bigint : T extends FieldTypeEnum.Any ? any : T extends FieldTypeEnum.StringOptional ? (string | null) : T extends FieldTypeEnum.BooleanOptional ? (boolean | null) : T extends FieldTypeEnum.NumberOptional ? (number | null) : T extends FieldTypeEnum.BigIntOptional ? (bigint | null) : T extends FieldTypeEnum.AnyOptional ? (any | null) : T extends RequestSchema ? RequestSchemaResult<T> : T extends ((val: any) => string) ? string : T extends ((val: any) => boolean) ? boolean : T extends ((val: any) => number) ? number : T extends ((val: any) => bigint) ? bigint : T extends ((val: any) => any) ? any : never;
15
+ export type RequestSchemaResult<T extends RequestSchema> = {
16
+ [key in keyof T]: FieldType<T[key]>;
17
+ };
18
+ export type RequestSchemaResultPromise<T extends RequestSchema> = {
19
+ [key in keyof T]: Promise<FieldType<T[key]>>;
20
+ };
21
+ export type RequestSchema = {
22
+ [fieldName: string]: FieldTypeEnum | RequestSchema | ((val: any) => any);
23
+ };
24
+ export declare function isOptionalField(type: FieldTypeEnum | RequestSchema | ((val: any) => (string | boolean | number | bigint | any))): boolean;
25
+ export declare function verifyField<T extends FieldTypeEnum | RequestSchema | ((val: any) => (string | boolean | number | bigint | any))>(fieldType: T, val: any): FieldType<T> | undefined;
26
+ export declare function verifySchema<T extends RequestSchema>(req: any, schema: T): RequestSchemaResult<T> | null;