@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.
- package/README.md +45 -29
- package/dist/SmartChainAssets.d.ts +11 -3
- package/dist/SmartChainAssets.js +7 -3
- package/dist/bitcoin/BitcoinRpcWithAddressIndex.d.ts +68 -0
- package/dist/bitcoin/BitcoinRpcWithAddressIndex.js +2 -0
- package/dist/bitcoin/LightningNetworkApi.d.ts +12 -0
- package/dist/bitcoin/LightningNetworkApi.js +2 -0
- package/dist/bitcoin/coinselect2/accumulative.d.ts +6 -0
- package/dist/bitcoin/coinselect2/accumulative.js +52 -0
- package/dist/bitcoin/coinselect2/blackjack.d.ts +6 -0
- package/dist/bitcoin/coinselect2/blackjack.js +38 -0
- package/dist/bitcoin/coinselect2/index.d.ts +19 -0
- package/dist/bitcoin/coinselect2/index.js +69 -0
- package/dist/bitcoin/coinselect2/utils.d.ts +71 -0
- package/dist/bitcoin/coinselect2/utils.js +123 -0
- package/dist/bitcoin/mempool/MempoolApi.d.ts +350 -0
- package/dist/bitcoin/mempool/MempoolApi.js +311 -0
- package/dist/bitcoin/mempool/MempoolBitcoinBlock.d.ts +44 -0
- package/dist/bitcoin/mempool/MempoolBitcoinBlock.js +48 -0
- package/dist/bitcoin/mempool/MempoolBitcoinRpc.d.ts +119 -0
- package/dist/bitcoin/mempool/MempoolBitcoinRpc.js +361 -0
- package/dist/bitcoin/mempool/synchronizer/MempoolBtcRelaySynchronizer.d.ts +22 -0
- package/dist/bitcoin/mempool/synchronizer/MempoolBtcRelaySynchronizer.js +105 -0
- package/dist/bitcoin/wallet/BitcoinWallet.d.ts +93 -0
- package/dist/bitcoin/wallet/BitcoinWallet.js +273 -0
- package/dist/bitcoin/wallet/IBitcoinWallet.d.ts +28 -0
- package/dist/bitcoin/wallet/IBitcoinWallet.js +20 -0
- package/dist/bitcoin/wallet/MinimalBitcoinWalletInterface.d.ts +21 -0
- package/dist/bitcoin/wallet/MinimalBitcoinWalletInterface.js +2 -0
- package/dist/bitcoin/wallet/MinimalLightningNetworkWalletInterface.d.ts +7 -0
- package/dist/bitcoin/wallet/MinimalLightningNetworkWalletInterface.js +2 -0
- package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.d.ts +40 -0
- package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.js +86 -0
- package/dist/enums/FeeType.d.ts +8 -0
- package/dist/enums/FeeType.js +12 -0
- package/dist/enums/SwapAmountType.d.ts +8 -0
- package/dist/enums/SwapAmountType.js +12 -0
- package/dist/enums/SwapDirection.d.ts +8 -0
- package/dist/enums/SwapDirection.js +12 -0
- package/dist/enums/SwapType.d.ts +14 -0
- package/dist/enums/SwapType.js +18 -0
- package/dist/errors/IntermediaryError.d.ts +9 -0
- package/dist/errors/IntermediaryError.js +26 -0
- package/dist/errors/PaymentAuthError.d.ts +11 -0
- package/dist/errors/PaymentAuthError.js +23 -0
- package/dist/errors/RequestError.d.ts +18 -0
- package/dist/errors/RequestError.js +46 -0
- package/dist/errors/UserError.d.ts +7 -0
- package/dist/errors/UserError.js +15 -0
- package/dist/events/UnifiedSwapEventListener.d.ts +23 -0
- package/dist/events/UnifiedSwapEventListener.js +130 -0
- package/dist/http/HttpUtils.d.ts +27 -0
- package/dist/http/HttpUtils.js +91 -0
- package/dist/http/paramcoders/IParamReader.d.ts +8 -0
- package/dist/http/paramcoders/IParamReader.js +2 -0
- package/dist/http/paramcoders/ParamDecoder.d.ts +44 -0
- package/dist/http/paramcoders/ParamDecoder.js +132 -0
- package/dist/http/paramcoders/ParamEncoder.d.ts +20 -0
- package/dist/http/paramcoders/ParamEncoder.js +31 -0
- package/dist/http/paramcoders/SchemaVerifier.d.ts +26 -0
- package/dist/http/paramcoders/SchemaVerifier.js +145 -0
- package/dist/http/paramcoders/client/ResponseParamDecoder.d.ts +11 -0
- package/dist/http/paramcoders/client/ResponseParamDecoder.js +57 -0
- package/dist/http/paramcoders/client/StreamParamEncoder.d.ts +13 -0
- package/dist/http/paramcoders/client/StreamParamEncoder.js +26 -0
- package/dist/http/paramcoders/client/StreamingFetchPromise.d.ts +16 -0
- package/dist/http/paramcoders/client/StreamingFetchPromise.js +174 -0
- package/dist/index.d.ts +82 -4
- package/dist/index.js +128 -4
- package/dist/intermediaries/Intermediary.d.ts +111 -0
- package/dist/intermediaries/Intermediary.js +115 -0
- package/dist/intermediaries/IntermediaryDiscovery.d.ts +166 -0
- package/dist/intermediaries/IntermediaryDiscovery.js +390 -0
- package/dist/intermediaries/apis/IntermediaryAPI.d.ts +436 -0
- package/dist/intermediaries/apis/IntermediaryAPI.js +600 -0
- package/dist/intermediaries/apis/TrustedIntermediaryAPI.d.ts +154 -0
- package/dist/intermediaries/apis/TrustedIntermediaryAPI.js +136 -0
- package/dist/lnurl/LNURL.d.ts +102 -0
- package/dist/lnurl/LNURL.js +321 -0
- package/dist/prices/RedundantSwapPrice.d.ts +89 -0
- package/dist/prices/RedundantSwapPrice.js +202 -0
- package/dist/prices/SingleSwapPrice.d.ts +31 -0
- package/dist/prices/SingleSwapPrice.js +41 -0
- package/dist/prices/SwapPriceWithChain.d.ts +70 -0
- package/dist/prices/SwapPriceWithChain.js +91 -0
- package/dist/prices/abstract/ICachedSwapPrice.d.ts +28 -0
- package/dist/prices/abstract/ICachedSwapPrice.js +62 -0
- package/dist/prices/abstract/IPriceProvider.d.ts +81 -0
- package/dist/prices/abstract/IPriceProvider.js +74 -0
- package/dist/prices/abstract/ISwapPrice.d.ts +117 -0
- package/dist/prices/abstract/ISwapPrice.js +219 -0
- package/dist/prices/providers/BinancePriceProvider.d.ts +16 -0
- package/dist/prices/providers/BinancePriceProvider.js +23 -0
- package/dist/prices/providers/CoinGeckoPriceProvider.d.ts +17 -0
- package/dist/prices/providers/CoinGeckoPriceProvider.js +23 -0
- package/dist/prices/providers/CoinPaprikaPriceProvider.d.ts +19 -0
- package/dist/prices/providers/CoinPaprikaPriceProvider.js +23 -0
- package/dist/prices/providers/CustomPriceProvider.d.ts +13 -0
- package/dist/prices/providers/CustomPriceProvider.js +24 -0
- package/dist/prices/providers/KrakenPriceProvider.d.ts +29 -0
- package/dist/prices/providers/KrakenPriceProvider.js +36 -0
- package/dist/prices/providers/OKXPriceProvider.d.ts +28 -0
- package/dist/prices/providers/OKXPriceProvider.js +23 -0
- package/dist/prices/providers/abstract/ExchangePriceProvider.d.ts +14 -0
- package/dist/prices/providers/abstract/ExchangePriceProvider.js +18 -0
- package/dist/prices/providers/abstract/HttpPriceProvider.d.ts +7 -0
- package/dist/prices/providers/abstract/HttpPriceProvider.js +12 -0
- package/dist/storage/IUnifiedStorage.d.ts +73 -0
- package/dist/storage/IUnifiedStorage.js +2 -0
- package/dist/storage/UnifiedSwapStorage.d.ts +82 -0
- package/dist/storage/UnifiedSwapStorage.js +83 -0
- package/dist/storage-browser/IndexedDBUnifiedStorage.d.ts +39 -0
- package/dist/storage-browser/IndexedDBUnifiedStorage.js +275 -0
- package/dist/{storage → storage-browser}/LocalStorageManager.d.ts +1 -0
- package/dist/{storage → storage-browser}/LocalStorageManager.js +2 -1
- package/dist/swapper/Swapper.d.ts +533 -0
- package/dist/swapper/Swapper.js +1566 -0
- package/dist/swapper/SwapperFactory.d.ts +87 -0
- package/dist/{SwapperFactory.js → swapper/SwapperFactory.js} +37 -19
- package/dist/swapper/SwapperUtils.d.ts +153 -0
- package/dist/swapper/SwapperUtils.js +420 -0
- package/dist/swapper/SwapperWithChain.d.ts +214 -0
- package/dist/swapper/SwapperWithChain.js +315 -0
- package/dist/swapper/SwapperWithSigner.d.ts +178 -0
- package/dist/swapper/SwapperWithSigner.js +172 -0
- package/dist/swaps/IAddressSwap.d.ts +13 -0
- package/dist/swaps/IAddressSwap.js +13 -0
- package/dist/swaps/IBTCWalletSwap.d.ts +55 -0
- package/dist/swaps/IBTCWalletSwap.js +17 -0
- package/dist/swaps/IClaimableSwap.d.ts +17 -0
- package/dist/swaps/IClaimableSwap.js +14 -0
- package/dist/swaps/IClaimableSwapWrapper.d.ts +5 -0
- package/dist/swaps/IClaimableSwapWrapper.js +2 -0
- package/dist/swaps/IRefundableSwap.d.ts +17 -0
- package/dist/swaps/IRefundableSwap.js +13 -0
- package/dist/swaps/ISwap.d.ts +207 -0
- package/dist/swaps/ISwap.js +264 -0
- package/dist/swaps/ISwapWithGasDrop.d.ts +15 -0
- package/dist/swaps/ISwapWithGasDrop.js +11 -0
- package/dist/swaps/ISwapWrapper.d.ts +153 -0
- package/dist/swaps/ISwapWrapper.js +227 -0
- package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.d.ts +53 -0
- package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.js +116 -0
- package/dist/swaps/escrow_swaps/IEscrowSwap.d.ts +70 -0
- package/dist/swaps/escrow_swaps/IEscrowSwap.js +132 -0
- package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.d.ts +85 -0
- package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.js +122 -0
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.d.ts +86 -0
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.js +115 -0
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.d.ts +93 -0
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.js +121 -0
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.d.ts +45 -0
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.js +65 -0
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.d.ts +263 -0
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.js +933 -0
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.d.ts +110 -0
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.js +307 -0
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.d.ts +236 -0
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.js +898 -0
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.d.ts +125 -0
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.js +393 -0
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.d.ts +245 -0
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.js +841 -0
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.d.ts +120 -0
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.js +294 -0
- package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.d.ts +228 -0
- package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.js +721 -0
- package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.d.ts +37 -0
- package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.js +93 -0
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.d.ts +86 -0
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.js +213 -0
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.d.ts +170 -0
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.js +520 -0
- package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.d.ts +50 -0
- package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.js +109 -0
- package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.d.ts +93 -0
- package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.js +217 -0
- package/dist/swaps/spv_swaps/SpvFromBTCSwap.d.ts +315 -0
- package/dist/swaps/spv_swaps/SpvFromBTCSwap.js +1098 -0
- package/dist/swaps/spv_swaps/SpvFromBTCWrapper.d.ts +125 -0
- package/dist/swaps/spv_swaps/SpvFromBTCWrapper.js +631 -0
- package/dist/swaps/trusted/ln/LnForGasSwap.d.ts +107 -0
- package/dist/swaps/trusted/ln/LnForGasSwap.js +343 -0
- package/dist/swaps/trusted/ln/LnForGasWrapper.d.ts +21 -0
- package/dist/swaps/trusted/ln/LnForGasWrapper.js +62 -0
- package/dist/swaps/trusted/onchain/OnchainForGasSwap.d.ts +164 -0
- package/dist/swaps/trusted/onchain/OnchainForGasSwap.js +520 -0
- package/dist/swaps/trusted/onchain/OnchainForGasWrapper.d.ts +48 -0
- package/dist/swaps/trusted/onchain/OnchainForGasWrapper.js +74 -0
- package/dist/types/AmountData.d.ts +9 -0
- package/dist/types/AmountData.js +2 -0
- package/dist/types/CustomPriceFunction.d.ts +5 -0
- package/dist/types/CustomPriceFunction.js +2 -0
- package/dist/types/PriceInfoType.d.ts +28 -0
- package/dist/types/PriceInfoType.js +57 -0
- package/dist/types/SwapExecutionAction.d.ts +7 -0
- package/dist/types/SwapExecutionAction.js +2 -0
- package/dist/types/SwapWithSigner.d.ts +14 -0
- package/dist/types/SwapWithSigner.js +40 -0
- package/dist/types/Token.d.ts +53 -0
- package/dist/types/Token.js +58 -0
- package/dist/types/TokenAmount.d.ts +57 -0
- package/dist/types/TokenAmount.js +47 -0
- package/dist/types/fees/Fee.d.ts +49 -0
- package/dist/types/fees/Fee.js +2 -0
- package/dist/types/fees/FeeBreakdown.d.ts +10 -0
- package/dist/types/fees/FeeBreakdown.js +2 -0
- package/dist/types/fees/PercentagePPM.d.ts +15 -0
- package/dist/types/fees/PercentagePPM.js +17 -0
- package/dist/types/lnurl/LNURLPay.d.ts +54 -0
- package/dist/types/lnurl/LNURLPay.js +28 -0
- package/dist/types/lnurl/LNURLWithdraw.d.ts +42 -0
- package/dist/types/lnurl/LNURLWithdraw.js +24 -0
- package/dist/utils/AutomaticClockDriftCorrection.d.ts +1 -0
- package/dist/utils/AutomaticClockDriftCorrection.js +70 -0
- package/dist/utils/BitcoinUtils.d.ts +13 -0
- package/dist/utils/BitcoinUtils.js +98 -0
- package/dist/utils/BitcoinWalletUtils.d.ts +7 -0
- package/dist/utils/BitcoinWalletUtils.js +14 -0
- package/dist/utils/Logger.d.ts +7 -0
- package/dist/utils/Logger.js +12 -0
- package/dist/utils/RetryUtils.d.ts +21 -0
- package/dist/utils/RetryUtils.js +66 -0
- package/dist/utils/SwapUtils.d.ts +31 -0
- package/dist/utils/SwapUtils.js +18 -0
- package/dist/{Utils.d.ts → utils/TimeoutUtils.d.ts} +9 -3
- package/dist/utils/TimeoutUtils.js +55 -0
- package/dist/utils/TokenUtils.d.ts +11 -0
- package/dist/utils/TokenUtils.js +29 -0
- package/dist/utils/TypeUtils.d.ts +7 -0
- package/dist/utils/TypeUtils.js +2 -0
- package/dist/utils/Utils.d.ts +57 -0
- package/dist/utils/Utils.js +178 -0
- package/package.json +14 -6
- package/src/SmartChainAssets.ts +11 -3
- package/src/bitcoin/BitcoinRpcWithAddressIndex.ts +87 -0
- package/src/bitcoin/LightningNetworkApi.ts +16 -0
- package/src/bitcoin/coinselect2/accumulative.ts +68 -0
- package/src/bitcoin/coinselect2/blackjack.ts +49 -0
- package/src/bitcoin/coinselect2/index.ts +92 -0
- package/src/bitcoin/coinselect2/utils.ts +189 -0
- package/src/bitcoin/mempool/MempoolApi.ts +554 -0
- package/src/bitcoin/mempool/MempoolBitcoinBlock.ts +88 -0
- package/src/bitcoin/mempool/MempoolBitcoinRpc.ts +437 -0
- package/src/bitcoin/mempool/synchronizer/MempoolBtcRelaySynchronizer.ts +134 -0
- package/src/bitcoin/wallet/BitcoinWallet.ts +375 -0
- package/src/bitcoin/wallet/IBitcoinWallet.ts +44 -0
- package/src/bitcoin/wallet/MinimalBitcoinWalletInterface.ts +19 -0
- package/src/bitcoin/wallet/MinimalLightningNetworkWalletInterface.ts +7 -0
- package/src/bitcoin/wallet/SingleAddressBitcoinWallet.ts +108 -0
- package/src/enums/FeeType.ts +9 -0
- package/src/enums/SwapAmountType.ts +9 -0
- package/src/enums/SwapDirection.ts +9 -0
- package/src/enums/SwapType.ts +15 -0
- package/src/errors/IntermediaryError.ts +24 -0
- package/src/errors/PaymentAuthError.ts +26 -0
- package/src/errors/RequestError.ts +51 -0
- package/src/errors/UserError.ts +14 -0
- package/src/events/UnifiedSwapEventListener.ts +171 -0
- package/src/http/HttpUtils.ts +92 -0
- package/src/http/paramcoders/IParamReader.ts +10 -0
- package/src/http/paramcoders/ParamDecoder.ts +142 -0
- package/src/http/paramcoders/ParamEncoder.ts +37 -0
- package/src/http/paramcoders/SchemaVerifier.ts +153 -0
- package/src/http/paramcoders/client/ResponseParamDecoder.ts +58 -0
- package/src/http/paramcoders/client/StreamParamEncoder.ts +29 -0
- package/src/http/paramcoders/client/StreamingFetchPromise.ts +193 -0
- package/src/index.ts +102 -4
- package/src/intermediaries/Intermediary.ts +204 -0
- package/src/intermediaries/IntermediaryDiscovery.ts +485 -0
- package/src/intermediaries/apis/IntermediaryAPI.ts +940 -0
- package/src/intermediaries/apis/TrustedIntermediaryAPI.ts +257 -0
- package/src/lnurl/LNURL.ts +403 -0
- package/src/prices/RedundantSwapPrice.ts +245 -0
- package/src/prices/SingleSwapPrice.ts +47 -0
- package/src/prices/SwapPriceWithChain.ts +157 -0
- package/src/prices/abstract/ICachedSwapPrice.ts +86 -0
- package/src/prices/abstract/IPriceProvider.ts +128 -0
- package/src/prices/abstract/ISwapPrice.ts +328 -0
- package/src/prices/providers/BinancePriceProvider.ts +41 -0
- package/src/prices/providers/CoinGeckoPriceProvider.ts +40 -0
- package/src/prices/providers/CoinPaprikaPriceProvider.ts +44 -0
- package/src/prices/providers/CustomPriceProvider.ts +29 -0
- package/src/prices/providers/KrakenPriceProvider.ts +74 -0
- package/src/prices/providers/OKXPriceProvider.ts +53 -0
- package/src/prices/providers/abstract/ExchangePriceProvider.ts +29 -0
- package/src/prices/providers/abstract/HttpPriceProvider.ts +15 -0
- package/src/storage/IUnifiedStorage.ts +83 -0
- package/src/storage/UnifiedSwapStorage.ts +104 -0
- package/src/storage-browser/IndexedDBUnifiedStorage.ts +328 -0
- package/src/{storage → storage-browser}/LocalStorageManager.ts +2 -1
- package/src/swapper/Swapper.ts +2107 -0
- package/src/{SwapperFactory.ts → swapper/SwapperFactory.ts} +113 -72
- package/src/swapper/SwapperUtils.ts +510 -0
- package/src/swapper/SwapperWithChain.ts +464 -0
- package/src/swapper/SwapperWithSigner.ts +300 -0
- package/src/swaps/IAddressSwap.ts +20 -0
- package/src/swaps/IBTCWalletSwap.ts +77 -0
- package/src/swaps/IClaimableSwap.ts +30 -0
- package/src/swaps/IClaimableSwapWrapper.ts +9 -0
- package/src/swaps/IRefundableSwap.ts +29 -0
- package/src/swaps/ISwap.ts +490 -0
- package/src/swaps/ISwapWithGasDrop.ts +19 -0
- package/src/swaps/ISwapWrapper.ts +344 -0
- package/src/swaps/escrow_swaps/IEscrowSelfInitSwap.ts +168 -0
- package/src/swaps/escrow_swaps/IEscrowSwap.ts +197 -0
- package/src/swaps/escrow_swaps/IEscrowSwapWrapper.ts +210 -0
- package/src/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.ts +150 -0
- package/src/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.ts +219 -0
- package/src/swaps/escrow_swaps/frombtc/IFromBTCWrapper.ts +84 -0
- package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.ts +1082 -0
- package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.ts +429 -0
- package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.ts +1078 -0
- package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.ts +549 -0
- package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.ts +974 -0
- package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.ts +443 -0
- package/src/swaps/escrow_swaps/tobtc/IToBTCSwap.ts +860 -0
- package/src/swaps/escrow_swaps/tobtc/IToBTCWrapper.ts +104 -0
- package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.ts +256 -0
- package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.ts +716 -0
- package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.ts +151 -0
- package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.ts +299 -0
- package/src/swaps/spv_swaps/SpvFromBTCSwap.ts +1394 -0
- package/src/swaps/spv_swaps/SpvFromBTCWrapper.ts +796 -0
- package/src/swaps/trusted/ln/LnForGasSwap.ts +402 -0
- package/src/swaps/trusted/ln/LnForGasWrapper.ts +70 -0
- package/src/swaps/trusted/onchain/OnchainForGasSwap.ts +633 -0
- package/src/swaps/trusted/onchain/OnchainForGasWrapper.ts +110 -0
- package/src/types/AmountData.ts +9 -0
- package/src/types/CustomPriceFunction.ts +5 -0
- package/src/types/PriceInfoType.ts +67 -0
- package/src/types/SwapExecutionAction.ts +8 -0
- package/src/types/SwapWithSigner.ts +57 -0
- package/src/types/Token.ts +90 -0
- package/src/types/TokenAmount.ts +110 -0
- package/src/types/fees/Fee.ts +55 -0
- package/src/types/fees/FeeBreakdown.ts +11 -0
- package/src/types/fees/PercentagePPM.ts +24 -0
- package/src/types/lnurl/LNURLPay.ts +72 -0
- package/src/types/lnurl/LNURLWithdraw.ts +55 -0
- package/src/utils/AutomaticClockDriftCorrection.ts +71 -0
- package/src/utils/BitcoinUtils.ts +86 -0
- package/src/utils/BitcoinWalletUtils.ts +16 -0
- package/src/utils/Logger.ts +15 -0
- package/src/utils/RetryUtils.ts +71 -0
- package/src/utils/SwapUtils.ts +38 -0
- package/src/utils/TimeoutUtils.ts +50 -0
- package/src/utils/TokenUtils.ts +25 -0
- package/src/utils/TypeUtils.ts +9 -0
- package/src/utils/Utils.ts +182 -0
- package/dist/SwapperFactory.d.ts +0 -52
- package/dist/Utils.js +0 -37
- package/dist/fs-storage/FileSystemStorageManager.d.ts +0 -15
- package/dist/fs-storage/FileSystemStorageManager.js +0 -60
- package/dist/fs-storage/index.d.ts +0 -1
- package/dist/fs-storage/index.js +0 -17
- package/src/SmartChainAssets.js +0 -75
- package/src/SwapperFactory.js +0 -120
- package/src/Utils.js +0 -37
- package/src/Utils.ts +0 -31
- package/src/fs-storage/FileSystemStorageManager.ts +0 -71
- package/src/fs-storage/index.ts +0 -1
- package/src/index.js +0 -21
- 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,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,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;
|