@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,83 @@
1
+
2
+ /**
3
+ * Query parameters for storage operations
4
+ * @category Storage
5
+ */
6
+ export type QueryParams = {
7
+ key: string,
8
+ value: any | any[]
9
+ };
10
+
11
+ /**
12
+ * Base type for stored objects
13
+ * @category Storage
14
+ */
15
+ export type UnifiedStoredObject = {id: string} & any;
16
+
17
+ /**
18
+ * Defines simple indexes (for queries that use a single key)
19
+ * @category Storage
20
+ */
21
+ export type UnifiedStorageIndexes = readonly {
22
+ key: string,
23
+ type: "number" | "string" | "boolean",
24
+ unique: boolean,
25
+ nullable: boolean
26
+ }[];
27
+
28
+ /**
29
+ * Defines composite indexes (for queries that use multiple keys)
30
+ * @category Storage
31
+ */
32
+ export type UnifiedStorageCompositeIndexes = readonly {
33
+ keys: readonly string[],
34
+ unique: boolean
35
+ }[];
36
+
37
+ /**
38
+ * Interface for unified storage implementations
39
+ * @category Storage
40
+ */
41
+ export interface IUnifiedStorage<I extends UnifiedStorageIndexes, C extends UnifiedStorageCompositeIndexes> {
42
+
43
+ /**
44
+ * Initializes the storage with given indexes and composite indexes
45
+ * @param indexes
46
+ * @param compositeIndexes
47
+ */
48
+ init(indexes: I, compositeIndexes: C): Promise<void>;
49
+
50
+ /**
51
+ * Params are specified in the following way:
52
+ * - [[condition1, condition2]] - returns all rows where condition1 AND condition2 is met
53
+ * - [[condition1], [condition2]] - returns all rows where condition1 OR condition2 is met
54
+ * - [[condition1, condition2], [condition3]] - returns all rows where (condition1 AND condition2) OR condition3 is met
55
+ * @param params
56
+ */
57
+ query(params: Array<Array<QueryParams>>): Promise<Array<UnifiedStoredObject>>;
58
+
59
+ /**
60
+ * Saves an object to storage, updating indexes as needed
61
+ * @param value - Object to save (must have an id property)
62
+ */
63
+ save(value: UnifiedStoredObject): Promise<void>;
64
+
65
+ /**
66
+ * Saves multiple objects to storage in a batch operation
67
+ * @param value - Array of objects to save
68
+ */
69
+ saveAll(value: UnifiedStoredObject[]): Promise<void>;
70
+
71
+ /**
72
+ * Removes an object from storage
73
+ * @param value - Object to remove (must have an id property)
74
+ */
75
+ remove(value: UnifiedStoredObject): Promise<void>;
76
+
77
+ /**
78
+ * Removes multiple objects from storage in a batch operation
79
+ * @param value - Array of objects to remove
80
+ */
81
+ removeAll(value: UnifiedStoredObject[]): Promise<void>;
82
+
83
+ }
@@ -0,0 +1,104 @@
1
+ import {ChainType} from "@atomiqlabs/base";
2
+ import {IUnifiedStorage, QueryParams} from "./IUnifiedStorage";
3
+ import {ISwap} from "../swaps/ISwap";
4
+
5
+ import {getLogger} from "../utils/Logger";
6
+
7
+ const logger = getLogger("UnifiedSwapStorage: ");
8
+
9
+ const indexes = [
10
+ {key: "id", type: "string", unique: true, nullable: false},
11
+ {key: "escrowHash", type: "string", unique: true, nullable: true},
12
+ {key: "type", type: "number", unique: false, nullable: false},
13
+ {key: "initiator", type: "string", unique: false, nullable: false},
14
+ {key: "state", type: "number", unique: false, nullable: false},
15
+ {key: "paymentHash", type: "string", unique: false, nullable: true},
16
+ ] as const;
17
+ /**
18
+ * Index types for swap storage
19
+ * @category Storage
20
+ */
21
+ export type UnifiedSwapStorageIndexes = typeof indexes;
22
+
23
+ const compositeIndexes = [
24
+ {keys: ["initiator", "id"], unique: false},
25
+ {keys: ["type", "state"], unique: false},
26
+ {keys: ["type", "paymentHash"], unique: false},
27
+ {keys: ["type", "initiator", "state"], unique: false}
28
+ ] as const;
29
+ /**
30
+ * Composite index types for swap storage
31
+ * @category Storage
32
+ */
33
+ export type UnifiedSwapStorageCompositeIndexes = typeof compositeIndexes;
34
+
35
+ /**
36
+ * Unified swap persistence layer with caching
37
+ * @category Storage
38
+ */
39
+ export class UnifiedSwapStorage<T extends ChainType> {
40
+
41
+ readonly storage: IUnifiedStorage<UnifiedSwapStorageIndexes, UnifiedSwapStorageCompositeIndexes>;
42
+ readonly weakRefCache: Map<string, WeakRef<ISwap<T>>> = new Map();
43
+ readonly noWeakRefMap?: boolean;
44
+
45
+ constructor(storage: IUnifiedStorage<UnifiedSwapStorageIndexes, UnifiedSwapStorageCompositeIndexes>, noWeakRefMap?: boolean) {
46
+ this.storage = storage;
47
+ this.noWeakRefMap = noWeakRefMap;
48
+ }
49
+
50
+ init(): Promise<void> {
51
+ return this.storage.init(indexes, compositeIndexes);
52
+ }
53
+
54
+ /**
55
+ * Params are specified in the following way:
56
+ * - [[condition1, condition2]] - returns all rows where condition1 AND condition2 is met
57
+ * - [[condition1], [condition2]] - returns all rows where condition1 OR condition2 is met
58
+ * - [[condition1, condition2], [condition3]] - returns all rows where (condition1 AND condition2) OR condition3 is met
59
+ * @param params
60
+ * @param reviver
61
+ */
62
+ async query<S extends ISwap<T>>(params: Array<Array<QueryParams>>, reviver: (obj: any) => S | null | undefined): Promise<Array<S>> {
63
+ const rawSwaps = await this.storage.query(params);
64
+
65
+ const result: Array<S> = [];
66
+ rawSwaps.forEach(rawObj => {
67
+ if(!this.noWeakRefMap) {
68
+ const savedRef = this.weakRefCache.get(rawObj.id)?.deref();
69
+ if(savedRef!=null) {
70
+ result.push(savedRef as S);
71
+ return;
72
+ }
73
+ logger.debug("query(): Reviving new swap instance: "+rawObj.id);
74
+ }
75
+ const value = reviver(rawObj);
76
+ if(value==null) return;
77
+ if(!this.noWeakRefMap) this.weakRefCache.set(rawObj.id, new WeakRef<ISwap<T>>(value));
78
+ result.push(value);
79
+ });
80
+
81
+ return result;
82
+ }
83
+
84
+ save<S extends ISwap<T>>(value: S): Promise<void> {
85
+ if(!this.noWeakRefMap) this.weakRefCache.set(value.getId(), new WeakRef<ISwap<T>>(value));
86
+ return this.storage.save(value.serialize());
87
+ }
88
+
89
+ saveAll<S extends ISwap<T>>(values: S[]): Promise<void> {
90
+ if(!this.noWeakRefMap) values.forEach(value => this.weakRefCache.set(value.getId(), new WeakRef<ISwap<T>>(value)));
91
+ return this.storage.saveAll(values.map(obj => obj.serialize()));
92
+ }
93
+
94
+ remove<S extends ISwap<T>>(value: S): Promise<void> {
95
+ if(!this.noWeakRefMap) this.weakRefCache.delete(value.getId());
96
+ return this.storage.remove(value.serialize());
97
+ }
98
+
99
+ removeAll<S extends ISwap<T>>(values: S[]): Promise<void> {
100
+ if(!this.noWeakRefMap) values.forEach(value => this.weakRefCache.delete(value.getId()));
101
+ return this.storage.removeAll(values.map(obj => obj.serialize()));
102
+ }
103
+
104
+ }
@@ -0,0 +1,328 @@
1
+ import {
2
+ IUnifiedStorage,
3
+ QueryParams,
4
+ UnifiedStorageCompositeIndexes,
5
+ UnifiedStoredObject
6
+ } from "../storage/IUnifiedStorage";
7
+ import {ISwap} from "../swaps/ISwap";
8
+ import {SwapType} from "../enums/SwapType";
9
+ import {UnifiedSwapStorageIndexes} from "../storage/UnifiedSwapStorage";
10
+ import {getLogger, LoggerType} from "../utils/Logger";
11
+
12
+ export type QuerySetCondition = {
13
+ key: string,
14
+ values: Set<any>
15
+ }
16
+
17
+ function toCompositeIndex(values: Array<any[]>): Array<any[]> {
18
+ if(values.length===0) return [];
19
+ if(values.length===1) {
20
+ return values[0];
21
+ } else {
22
+ const compositeArray = [];
23
+ const firstValues = values.shift()!;
24
+ const restValues = toCompositeIndex(values);
25
+ for(let value of firstValues) {
26
+ for(let restValue of restValues) {
27
+ compositeArray.push([value].concat(restValue));
28
+ }
29
+ }
30
+ return compositeArray;
31
+ }
32
+ }
33
+
34
+ function matches(conditions: Array<QuerySetCondition>, obj: any): boolean {
35
+ for(let condition of conditions) {
36
+ let value = obj[condition.key];
37
+ if(!condition.values.has(value)) return false;
38
+ }
39
+ return true;
40
+ }
41
+
42
+ function toSetConditions(input: Array<QueryParams>): Array<QuerySetCondition> {
43
+ return input.map(val => {
44
+ return {
45
+ key: val.key,
46
+ values: Array.isArray(val.value) ? new Set(val.value) : new Set([val.value])
47
+ };
48
+ })
49
+ }
50
+
51
+ const indexes: Record<string, {key: string | string[], unique: boolean}> = {
52
+ "escrowHash": { key: "escrowHash", unique: true},
53
+ "type": {key: "type", unique: false},
54
+ "initiator": {key: "initiator", unique: false},
55
+ "initiator, id": {key: ["initiator", "id"], unique: false},
56
+ "type, state": {key: ["type", "state"], unique: false},
57
+ "type, paymentHash": {key: ["type", "paymentHash"], unique: false},
58
+ "type, initiator, state": {key: ["type", "initiator", "state"], unique: false}
59
+ }
60
+
61
+ /**
62
+ * Browser IndexedDB storage implementation
63
+ * @category Storage
64
+ */
65
+ export class IndexedDBUnifiedStorage implements IUnifiedStorage<UnifiedSwapStorageIndexes, UnifiedStorageCompositeIndexes> {
66
+
67
+ protected readonly logger: LoggerType;
68
+
69
+ storageKey: string;
70
+ db?: IDBDatabase;
71
+
72
+ constructor(storageKey: string) {
73
+ this.storageKey = storageKey;
74
+ this.logger = getLogger("IndexedDBUnifiedStorage("+this.storageKey+"): ");
75
+ }
76
+
77
+ //Reviver also needs to update the swap to the latest version
78
+ private async tryMigrateLocalStorage(storageKey: string, swapType: SwapType, reviver: (obj: any) => ISwap): Promise<boolean> {
79
+ const txt = window.localStorage.getItem(storageKey);
80
+ if(txt==null) return false;
81
+
82
+ let data: {[key: string]: any};
83
+ try {
84
+ data = JSON.parse(txt);
85
+ } catch (e) {
86
+ this.logger.warn("tryMigrate("+storageKey+"): Tried to migrate the database, but cannot parse old local storage!");
87
+ return false;
88
+ }
89
+
90
+ let swaps: ISwap[] = Object.keys(data).map(id => {
91
+ let swapData = data[id];
92
+ swapData.type = swapType;
93
+ return reviver(swapData);
94
+ });
95
+ await this.saveAll(swaps.map(swap => swap.serialize()));
96
+
97
+ window.localStorage.removeItem(storageKey);
98
+
99
+ this.logger.info("tryMigrate("+storageKey+"): Database successfully migrated from localStorage to unifiedIndexedDB!");
100
+
101
+ return true;
102
+ }
103
+
104
+ //Reviver also needs to update the swap to the latest version
105
+ private async tryMigrateOldIndexedDB(storageKey: string, swapType: SwapType, reviver: (obj: any) => ISwap): Promise<boolean> {
106
+ const databases = await window.indexedDB.databases();
107
+ if(databases.find(val => val.name===storageKey)==null) {
108
+ this.logger.info("tryMigrateOldIndexedDB("+storageKey+"): Old database not found!");
109
+ return false;
110
+ }
111
+
112
+ this.logger.debug("tryMigrateOldIndexedDB("+storageKey+"): Old database found!");
113
+
114
+ let db: IDBDatabase;
115
+ try {
116
+ db = await new Promise<IDBDatabase>((resolve, reject) => {
117
+ const request = window.indexedDB.open(storageKey, 1);
118
+ request.onerror = (e) => reject(e);
119
+ request.onsuccess = (e: any) => resolve(e.target.result);
120
+ });
121
+ } catch (e) {
122
+ this.logger.warn("tryMigrateOldIndexedDB("+storageKey+"): Error opening old IndexedDB!", e);
123
+ return false;
124
+ }
125
+
126
+ this.logger.debug("tryMigrateOldIndexedDB("+storageKey+"): Connection opened!");
127
+
128
+ try {
129
+ const data = await new Promise<{ id: string, data: any }[]>((resolve, reject) => {
130
+ const tx = db.transaction("swaps", "readonly", {durability: "strict"});
131
+ const store = tx.objectStore("swaps");
132
+ const req = store.getAll();
133
+ req.onsuccess = (event: any) => resolve(event.target.result);
134
+ req.onerror = (event) => reject(event);
135
+ });
136
+
137
+ this.logger.debug("tryMigrateOldIndexedDB("+storageKey+"): Data retrieved!");
138
+
139
+ let swaps: ISwap[] = data.map(({id, data}) => {
140
+ data.type = swapType;
141
+ return reviver(data);
142
+ });
143
+
144
+ this.logger.debug("tryMigrateOldIndexedDB("+storageKey+"): Data revived!");
145
+
146
+ await this.saveAll(swaps.map(swap => swap.serialize()));
147
+
148
+ this.logger.debug("tryMigrateOldIndexedDB("+storageKey+"): Data saved!");
149
+
150
+ //Remove the old database
151
+ db.close();
152
+
153
+ this.logger.debug("tryMigrateOldIndexedDB("+storageKey+"): DB connection closed!");
154
+
155
+ await new Promise<void>((resolve, reject) => {
156
+ const res = window.indexedDB.deleteDatabase(storageKey);
157
+ res.onsuccess = () => resolve();
158
+ res.onerror = (e) => reject(e);
159
+ });
160
+
161
+ this.logger.info("tryMigrateOldIndexedDB("+storageKey+"): Database successfully migrated from oldIndexedDB to unifiedIndexedDB!");
162
+ return true;
163
+ } catch (e) {
164
+ this.logger.warn("tryMigrateOldIndexedDB("+storageKey+"): Tried to migrate the database, but cannot parse oldIndexedDB!", e);
165
+ return false;
166
+ }
167
+ }
168
+
169
+ //NOTE: Reviver also needs to update the swap to the latest version
170
+ public async tryMigrate(storageKeys: [string, SwapType][], reviver: (obj: any) => ISwap): Promise<boolean> {
171
+ let someMigrated = false;
172
+ for(let storageKey of storageKeys) {
173
+ this.logger.info("tryMigrate(): Trying to migrate...", storageKey);
174
+ if(await this.tryMigrateLocalStorage(storageKey[0], storageKey[1], reviver)) someMigrated = true;
175
+ if(await this.tryMigrateOldIndexedDB(storageKey[0], storageKey[1], reviver)) someMigrated = true;
176
+ }
177
+ return someMigrated;
178
+ }
179
+
180
+ private executeTransaction<T>(cbk: (tx: IDBObjectStore) => IDBRequest<T>, readonly: boolean): Promise<T> {
181
+ return new Promise<T>((resolve, reject) => {
182
+ if(this.db==null) {
183
+ reject(new Error("Not initiated, call init() first!"));
184
+ return;
185
+ }
186
+ const tx = this.db.transaction("swaps", readonly ? "readonly" : "readwrite", {durability: "strict"});
187
+ const req = cbk(tx.objectStore("swaps"));
188
+ req.onsuccess = (event: any) => resolve(event.target.result);
189
+ req.onerror = (event) => reject(event);
190
+ });
191
+ }
192
+
193
+ private executeTransactionArr<T>(cbk: (tx: IDBObjectStore) => IDBRequest<T>[], readonly: boolean): Promise<T[]> {
194
+ if(this.db==null) throw new Error("Not initiated, call init() first!");
195
+ const tx = this.db.transaction("swaps", readonly ? "readonly" : "readwrite", {durability: "strict"});
196
+ const reqs = cbk(tx.objectStore("swaps"));
197
+ return Promise.all(reqs.map(req => new Promise<T>((resolve, reject) => {
198
+ req.onsuccess = (event: any) => resolve(event.target.result);
199
+ req.onerror = (event) => reject(event);
200
+ })));
201
+ }
202
+
203
+ private async executeTransactionWithCursor<T>(
204
+ cbk: (tx: IDBObjectStore) => IDBRequest<IDBCursorWithValue | null>[],
205
+ valueCbk: (value: T) => boolean
206
+ ): Promise<T[]> {
207
+ if(this.db==null) throw new Error("Not initiated, call init() first!");
208
+ const tx = this.db.transaction("swaps", "readonly", {durability: "strict"});
209
+ const cursorRequests = cbk(tx.objectStore("swaps"));
210
+
211
+ const promises = cursorRequests.map(
212
+ cursorRequest => new Promise<T[]>(
213
+ (resolve, reject) => {
214
+ const resultObjects: T[] = [];
215
+ cursorRequest.onsuccess = (event: any) => {
216
+ const cursor = event.target.result;
217
+ if(cursor!=null) {
218
+ const value = cursor.value;
219
+ if(valueCbk(value)) resultObjects.push(value);
220
+ cursor.continue();
221
+ } else {
222
+ resolve(resultObjects);
223
+ }
224
+ }
225
+ cursorRequest.onerror = (event) => reject(event);
226
+ }
227
+ )
228
+ );
229
+
230
+ const result = await Promise.all(promises);
231
+ return result.flat();
232
+ }
233
+
234
+ async init(): Promise<void> {
235
+ if(this.db==null) {
236
+ this.db = await new Promise<IDBDatabase>((resolve, reject) => {
237
+ const request = window.indexedDB.open(this.storageKey, 1);
238
+ request.onupgradeneeded = (event: any) => {
239
+ const db: IDBDatabase = event.target.result;
240
+ const objectStore = db.createObjectStore("swaps", { keyPath: "id" });
241
+
242
+ Object.keys(indexes).forEach(name => {
243
+ const index = indexes[name];
244
+ objectStore.createIndex(name, index.key, {unique: index.unique});
245
+ })
246
+ };
247
+ request.onerror = (e) => reject(e);
248
+ request.onsuccess = (e: any) => resolve(e.target.result);
249
+ });
250
+ }
251
+ }
252
+
253
+ /**
254
+ * Params are specified in the following way:
255
+ * - [[condition1, condition2]] - returns all rows where condition1 AND condition2 is met
256
+ * - [[condition1], [condition2]] - returns all rows where condition1 OR condition2 is met
257
+ * - [[condition1, condition2], [condition3]] - returns all rows where (condition1 AND condition2) OR condition3 is met
258
+ * @param params
259
+ */
260
+ async query(params: Array<Array<QueryParams>>): Promise<Array<UnifiedStoredObject>> {
261
+ if(params.length===0) return await this.querySingle([]);
262
+ const results = await Promise.all(params.map(singleParam => this.querySingle(singleParam)));
263
+ const resultSet = new Set(results.flat()); //Deduplicate
264
+ return Array.from(resultSet);
265
+ }
266
+
267
+ async querySingle(params: Array<QueryParams>): Promise<Array<UnifiedStoredObject>> {
268
+ if(params.length===0) {
269
+ return await this.executeTransaction((objectStore) => objectStore.getAll(), true);
270
+ }
271
+
272
+ const queryKeys = params.map(param => param.key);
273
+ const requiredIndex = queryKeys.join(", ");
274
+
275
+ if(requiredIndex==="id") {
276
+ //ID is the index
277
+ const values: any[] = Array.isArray(params[0].value) ? params[0].value : [params[0].value];
278
+ const res = await this.executeTransactionArr((objectStore) => {
279
+ return values.map(val => objectStore.getAll(val));
280
+ }, true);
281
+ return res.flat();
282
+ } else if(indexes[requiredIndex]!=null) {
283
+ //Index exists
284
+ const values: Array<any[]> = params.map(param => Array.isArray(param.value) ? param.value : [param.value]);
285
+ const compositeIndexQueries = toCompositeIndex(values);
286
+
287
+ const resp = await this.executeTransactionArr(objectStore => {
288
+ const index = objectStore.index(requiredIndex);
289
+ return compositeIndexQueries.map(indexQuery => index.getAll(indexQuery));
290
+ }, true);
291
+
292
+ return resp.flat();
293
+ } else {
294
+ //Need to go over all values
295
+ this.logger.warn("query(): Index cannot be used for query, required index: "+requiredIndex+" query params: ", params);
296
+
297
+ const setConditions = toSetConditions(params);
298
+ return await this.executeTransactionWithCursor(
299
+ objectStore => [objectStore.openCursor()],
300
+ (val: any) => matches(setConditions, val)
301
+ );
302
+ }
303
+ }
304
+
305
+ async remove(object: UnifiedStoredObject): Promise<void> {
306
+ await this.executeTransaction<undefined>(store => store.delete(object.id), false)
307
+ .catch(() => null);
308
+ }
309
+
310
+ async removeAll(arr: UnifiedStoredObject[]): Promise<void> {
311
+ if(arr.length===0) return;
312
+ await this.executeTransactionArr<undefined>(store => arr.map(object => {
313
+ return store.delete(object.id);
314
+ }), false);
315
+ }
316
+
317
+ async save(object: UnifiedStoredObject): Promise<void> {
318
+ await this.executeTransaction<IDBValidKey>(store => store.put(object), false);
319
+ }
320
+
321
+ async saveAll(arr: UnifiedStoredObject[]): Promise<void> {
322
+ if(arr.length===0) return;
323
+ await this.executeTransactionArr<IDBValidKey>(store => arr.map(object => {
324
+ return store.put(object);
325
+ }), false);
326
+ }
327
+
328
+ }
@@ -2,6 +2,7 @@ import {IStorageManager, StorageObject} from "@atomiqlabs/base";
2
2
 
3
3
  /**
4
4
  * StorageManager using browser's local storage API
5
+ * @category Storage
5
6
  */
6
7
  export class LocalStorageManager<T extends StorageObject> implements IStorageManager<T> {
7
8
 
@@ -9,7 +10,7 @@ export class LocalStorageManager<T extends StorageObject> implements IStorageMan
9
10
 
10
11
  rawData: {
11
12
  [hash: string]: any
12
- } = null;
13
+ } = {};
13
14
  data: {
14
15
  [hash: string]: T
15
16
  } = {};