@atomiqlabs/sdk 8.9.1 → 8.9.3
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/LICENSE +201 -201
- package/README.md +1760 -1760
- package/api/index.d.ts +1 -1
- package/api/index.js +3 -3
- package/dist/ApiList.d.ts +37 -37
- package/dist/ApiList.js +30 -30
- package/dist/SmartChainAssets.d.ts +181 -181
- package/dist/SmartChainAssets.js +181 -181
- package/dist/api/ApiEndpoints.d.ts +393 -393
- package/dist/api/ApiEndpoints.js +2 -2
- package/dist/api/ApiParser.d.ts +10 -10
- package/dist/api/ApiParser.js +134 -134
- package/dist/api/ApiTypes.d.ts +157 -157
- package/dist/api/ApiTypes.js +75 -75
- package/dist/api/SerializedAction.d.ts +40 -40
- package/dist/api/SerializedAction.js +59 -59
- package/dist/api/SwapperApi.d.ts +50 -50
- package/dist/api/SwapperApi.js +431 -431
- package/dist/api/index.d.ts +5 -5
- package/dist/api/index.js +24 -24
- package/dist/bitcoin/coinselect2/accumulative.d.ts +7 -7
- package/dist/bitcoin/coinselect2/accumulative.js +52 -52
- package/dist/bitcoin/coinselect2/blackjack.d.ts +7 -7
- package/dist/bitcoin/coinselect2/blackjack.js +38 -38
- package/dist/bitcoin/coinselect2/index.d.ts +20 -20
- package/dist/bitcoin/coinselect2/index.js +69 -69
- package/dist/bitcoin/coinselect2/utils.d.ts +82 -82
- package/dist/bitcoin/coinselect2/utils.js +158 -158
- package/dist/bitcoin/wallet/BitcoinWallet.d.ts +113 -113
- package/dist/bitcoin/wallet/BitcoinWallet.js +335 -335
- package/dist/bitcoin/wallet/IBitcoinWallet.d.ts +116 -116
- package/dist/bitcoin/wallet/IBitcoinWallet.js +21 -21
- package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.d.ts +106 -106
- package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.js +196 -196
- package/dist/enums/FeeType.d.ts +15 -15
- package/dist/enums/FeeType.js +19 -19
- package/dist/enums/SwapAmountType.d.ts +15 -15
- package/dist/enums/SwapAmountType.js +19 -19
- package/dist/enums/SwapDirection.d.ts +15 -15
- package/dist/enums/SwapDirection.js +19 -19
- package/dist/enums/SwapSide.d.ts +15 -15
- package/dist/enums/SwapSide.js +19 -19
- package/dist/enums/SwapType.d.ts +75 -75
- package/dist/enums/SwapType.js +79 -79
- package/dist/errors/IntermediaryError.d.ts +13 -13
- package/dist/errors/IntermediaryError.js +27 -27
- package/dist/errors/RequestError.d.ts +32 -32
- package/dist/errors/RequestError.js +54 -54
- package/dist/errors/UserError.d.ts +8 -8
- package/dist/errors/UserError.js +16 -16
- package/dist/events/UnifiedSwapEventListener.d.ts +24 -24
- package/dist/events/UnifiedSwapEventListener.js +138 -138
- package/dist/http/HttpUtils.d.ts +29 -29
- package/dist/http/HttpUtils.js +97 -97
- package/dist/http/paramcoders/IParamReader.d.ts +8 -8
- package/dist/http/paramcoders/IParamReader.js +2 -2
- package/dist/http/paramcoders/ParamDecoder.d.ts +44 -44
- package/dist/http/paramcoders/ParamDecoder.js +137 -137
- package/dist/http/paramcoders/ParamEncoder.d.ts +20 -20
- package/dist/http/paramcoders/ParamEncoder.js +36 -36
- package/dist/http/paramcoders/SchemaVerifier.d.ts +26 -26
- package/dist/http/paramcoders/SchemaVerifier.js +145 -145
- package/dist/http/paramcoders/client/ResponseParamDecoder.d.ts +11 -11
- package/dist/http/paramcoders/client/ResponseParamDecoder.js +57 -57
- package/dist/http/paramcoders/client/StreamParamEncoder.d.ts +13 -13
- package/dist/http/paramcoders/client/StreamParamEncoder.js +26 -26
- package/dist/http/paramcoders/client/StreamingFetchPromise.d.ts +17 -17
- package/dist/http/paramcoders/client/StreamingFetchPromise.js +175 -175
- package/dist/index.d.ts +86 -86
- package/dist/index.js +159 -159
- package/dist/intermediaries/Intermediary.d.ts +178 -178
- package/dist/intermediaries/Intermediary.js +166 -166
- package/dist/intermediaries/IntermediaryDiscovery.d.ts +216 -216
- package/dist/intermediaries/IntermediaryDiscovery.js +424 -424
- package/dist/intermediaries/apis/IntermediaryAPI.d.ts +607 -607
- package/dist/intermediaries/apis/IntermediaryAPI.js +764 -764
- package/dist/intermediaries/apis/TrustedIntermediaryAPI.d.ts +155 -155
- package/dist/intermediaries/apis/TrustedIntermediaryAPI.js +137 -137
- package/dist/intermediaries/auth/SignedKeyBasedAuth.d.ts +14 -14
- package/dist/intermediaries/auth/SignedKeyBasedAuth.js +68 -68
- package/dist/lnurl/LNURL.d.ts +102 -102
- package/dist/lnurl/LNURL.js +321 -321
- package/dist/prices/RedundantSwapPrice.d.ts +110 -110
- package/dist/prices/RedundantSwapPrice.js +222 -222
- package/dist/prices/SingleSwapPrice.d.ts +34 -34
- package/dist/prices/SingleSwapPrice.js +44 -44
- package/dist/prices/SwapPriceWithChain.d.ts +107 -107
- package/dist/prices/SwapPriceWithChain.js +128 -128
- package/dist/prices/abstract/ICachedSwapPrice.d.ts +28 -28
- package/dist/prices/abstract/ICachedSwapPrice.js +62 -62
- package/dist/prices/abstract/IPriceProvider.d.ts +81 -81
- package/dist/prices/abstract/IPriceProvider.js +74 -74
- package/dist/prices/abstract/ISwapPrice.d.ts +168 -168
- package/dist/prices/abstract/ISwapPrice.js +279 -279
- package/dist/prices/providers/BinancePriceProvider.d.ts +23 -23
- package/dist/prices/providers/BinancePriceProvider.js +30 -30
- package/dist/prices/providers/CoinGeckoPriceProvider.d.ts +23 -23
- package/dist/prices/providers/CoinGeckoPriceProvider.js +29 -29
- package/dist/prices/providers/CoinPaprikaPriceProvider.d.ts +25 -25
- package/dist/prices/providers/CoinPaprikaPriceProvider.js +29 -29
- package/dist/prices/providers/CustomPriceProvider.d.ts +24 -24
- package/dist/prices/providers/CustomPriceProvider.js +35 -35
- package/dist/prices/providers/KrakenPriceProvider.d.ts +38 -38
- package/dist/prices/providers/KrakenPriceProvider.js +45 -45
- package/dist/prices/providers/OKXPriceProvider.d.ts +34 -34
- package/dist/prices/providers/OKXPriceProvider.js +29 -29
- package/dist/prices/providers/abstract/ExchangePriceProvider.d.ts +17 -17
- package/dist/prices/providers/abstract/ExchangePriceProvider.js +21 -21
- package/dist/prices/providers/abstract/HttpPriceProvider.d.ts +7 -7
- package/dist/prices/providers/abstract/HttpPriceProvider.js +12 -12
- package/dist/storage/IUnifiedStorage.d.ts +127 -127
- package/dist/storage/IUnifiedStorage.js +2 -2
- package/dist/storage/UnifiedSwapStorage.d.ts +120 -120
- package/dist/storage/UnifiedSwapStorage.js +154 -154
- package/dist/storage-browser/IndexedDBUnifiedStorage.d.ts +63 -63
- package/dist/storage-browser/IndexedDBUnifiedStorage.js +298 -298
- package/dist/storage-browser/LocalStorageManager.d.ts +49 -49
- package/dist/storage-browser/LocalStorageManager.js +93 -93
- package/dist/swapper/Swapper.d.ts +770 -770
- package/dist/swapper/Swapper.js +1758 -1758
- package/dist/swapper/SwapperFactory.d.ts +135 -135
- package/dist/swapper/SwapperFactory.js +162 -162
- package/dist/swapper/SwapperUtils.d.ts +222 -222
- package/dist/swapper/SwapperUtils.js +519 -519
- package/dist/swapper/SwapperWithChain.d.ts +404 -404
- package/dist/swapper/SwapperWithChain.js +469 -469
- package/dist/swapper/SwapperWithSigner.d.ts +322 -322
- package/dist/swapper/SwapperWithSigner.js +318 -318
- package/dist/swaps/IAddressSwap.d.ts +22 -22
- package/dist/swaps/IAddressSwap.js +14 -14
- package/dist/swaps/IBTCWalletSwap.d.ts +73 -73
- package/dist/swaps/IBTCWalletSwap.js +18 -18
- package/dist/swaps/IClaimableSwap.d.ts +49 -49
- package/dist/swaps/IClaimableSwap.js +15 -15
- package/dist/swaps/IClaimableSwapWrapper.d.ts +15 -15
- package/dist/swaps/IClaimableSwapWrapper.js +2 -2
- package/dist/swaps/IRefundableSwap.d.ts +43 -43
- package/dist/swaps/IRefundableSwap.js +14 -14
- package/dist/swaps/ISwap.d.ts +453 -453
- package/dist/swaps/ISwap.js +371 -371
- package/dist/swaps/ISwapWithGasDrop.d.ts +21 -21
- package/dist/swaps/ISwapWithGasDrop.js +12 -12
- package/dist/swaps/ISwapWrapper.d.ts +295 -295
- package/dist/swaps/ISwapWrapper.js +373 -373
- package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.d.ts +98 -98
- package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.js +126 -126
- package/dist/swaps/escrow_swaps/IEscrowSwap.d.ts +139 -139
- package/dist/swaps/escrow_swaps/IEscrowSwap.js +172 -172
- package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.d.ts +129 -129
- package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.js +167 -167
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.d.ts +107 -107
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.js +130 -130
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.d.ts +162 -162
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.js +190 -190
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.d.ts +64 -64
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.js +82 -82
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.d.ts +547 -547
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.js +1419 -1419
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.d.ts +192 -192
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.js +432 -432
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.d.ts +650 -650
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.js +1577 -1577
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.d.ts +237 -237
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.js +525 -525
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.d.ts +491 -491
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.js +1463 -1463
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.d.ts +204 -204
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.js +406 -406
- package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.d.ts +446 -446
- package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.js +1097 -1097
- package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.d.ts +68 -68
- package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.js +117 -117
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.d.ts +127 -127
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.js +256 -256
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.d.ts +252 -252
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.js +535 -535
- package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.d.ts +73 -73
- package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.js +155 -155
- package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.d.ts +134 -134
- package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.js +286 -286
- package/dist/swaps/spv_swaps/SpvFromBTCSwap.d.ts +694 -694
- package/dist/swaps/spv_swaps/SpvFromBTCSwap.js +1687 -1687
- package/dist/swaps/spv_swaps/SpvFromBTCWrapper.d.ts +259 -259
- package/dist/swaps/spv_swaps/SpvFromBTCWrapper.js +947 -947
- package/dist/swaps/trusted/ln/LnForGasSwap.d.ts +302 -302
- package/dist/swaps/trusted/ln/LnForGasSwap.js +625 -625
- package/dist/swaps/trusted/ln/LnForGasWrapper.d.ts +40 -40
- package/dist/swaps/trusted/ln/LnForGasWrapper.js +82 -82
- package/dist/swaps/trusted/onchain/OnchainForGasSwap.d.ts +343 -343
- package/dist/swaps/trusted/onchain/OnchainForGasSwap.js +698 -698
- package/dist/swaps/trusted/onchain/OnchainForGasWrapper.d.ts +71 -71
- package/dist/swaps/trusted/onchain/OnchainForGasWrapper.js +93 -93
- package/dist/types/AmountData.d.ts +10 -10
- package/dist/types/AmountData.js +2 -2
- package/dist/types/CustomPriceFunction.d.ts +11 -11
- package/dist/types/CustomPriceFunction.js +2 -2
- package/dist/types/PriceInfoType.d.ts +28 -28
- package/dist/types/PriceInfoType.js +57 -57
- package/dist/types/SwapExecutionAction.d.ts +195 -195
- package/dist/types/SwapExecutionAction.js +106 -106
- package/dist/types/SwapExecutionStep.d.ts +144 -144
- package/dist/types/SwapExecutionStep.js +87 -87
- package/dist/types/SwapStateInfo.d.ts +5 -5
- package/dist/types/SwapStateInfo.js +2 -2
- package/dist/types/SwapWithSigner.d.ts +17 -17
- package/dist/types/SwapWithSigner.js +43 -43
- package/dist/types/Token.d.ts +99 -99
- package/dist/types/Token.js +76 -76
- package/dist/types/TokenAmount.d.ts +75 -75
- package/dist/types/TokenAmount.js +85 -85
- package/dist/types/fees/Fee.d.ts +50 -50
- package/dist/types/fees/Fee.js +2 -2
- package/dist/types/fees/FeeBreakdown.d.ts +11 -11
- package/dist/types/fees/FeeBreakdown.js +2 -2
- package/dist/types/fees/PercentagePPM.d.ts +17 -17
- package/dist/types/fees/PercentagePPM.js +18 -18
- package/dist/types/lnurl/LNURLPay.d.ts +61 -61
- package/dist/types/lnurl/LNURLPay.js +31 -31
- package/dist/types/lnurl/LNURLWithdraw.d.ts +48 -48
- package/dist/types/lnurl/LNURLWithdraw.js +27 -27
- package/dist/types/wallets/LightningInvoiceCreateService.d.ts +24 -24
- package/dist/types/wallets/LightningInvoiceCreateService.js +15 -15
- package/dist/types/wallets/MinimalBitcoinWalletInterface.d.ts +23 -23
- package/dist/types/wallets/MinimalBitcoinWalletInterface.js +2 -2
- package/dist/types/wallets/MinimalLightningNetworkWalletInterface.d.ts +9 -9
- package/dist/types/wallets/MinimalLightningNetworkWalletInterface.js +2 -2
- package/dist/utils/AutomaticClockDriftCorrection.d.ts +1 -1
- package/dist/utils/AutomaticClockDriftCorrection.js +70 -70
- package/dist/utils/BitcoinUtils.d.ts +18 -18
- package/dist/utils/BitcoinUtils.js +174 -174
- package/dist/utils/BitcoinWalletUtils.d.ts +7 -7
- package/dist/utils/BitcoinWalletUtils.js +14 -14
- package/dist/utils/Logger.d.ts +7 -7
- package/dist/utils/Logger.js +12 -12
- package/dist/utils/RetryUtils.d.ts +22 -22
- package/dist/utils/RetryUtils.js +67 -67
- package/dist/utils/SwapUtils.d.ts +88 -88
- package/dist/utils/SwapUtils.js +72 -72
- package/dist/utils/TimeoutUtils.d.ts +17 -17
- package/dist/utils/TimeoutUtils.js +55 -55
- package/dist/utils/TokenUtils.d.ts +19 -19
- package/dist/utils/TokenUtils.js +37 -37
- package/dist/utils/TypeUtils.d.ts +7 -7
- package/dist/utils/TypeUtils.js +2 -2
- package/dist/utils/Utils.d.ts +69 -69
- package/dist/utils/Utils.js +214 -214
- package/package.json +46 -46
- package/src/SmartChainAssets.ts +186 -186
- package/src/api/ApiEndpoints.ts +427 -427
- package/src/api/ApiParser.ts +138 -138
- package/src/api/ApiTypes.ts +229 -229
- package/src/api/SerializedAction.ts +97 -97
- package/src/api/SwapperApi.ts +545 -545
- package/src/api/index.ts +5 -5
- package/src/bitcoin/coinselect2/accumulative.ts +69 -69
- package/src/bitcoin/coinselect2/blackjack.ts +50 -50
- package/src/bitcoin/coinselect2/index.ts +93 -93
- package/src/bitcoin/coinselect2/utils.ts +236 -236
- package/src/bitcoin/wallet/BitcoinWallet.ts +439 -439
- package/src/bitcoin/wallet/IBitcoinWallet.ts +140 -140
- package/src/bitcoin/wallet/SingleAddressBitcoinWallet.ts +225 -225
- package/src/enums/FeeType.ts +15 -15
- package/src/enums/SwapAmountType.ts +16 -16
- package/src/enums/SwapDirection.ts +15 -15
- package/src/enums/SwapSide.ts +16 -16
- package/src/enums/SwapType.ts +75 -75
- package/src/errors/IntermediaryError.ts +28 -28
- package/src/errors/RequestError.ts +64 -64
- package/src/errors/UserError.ts +15 -15
- package/src/events/UnifiedSwapEventListener.ts +181 -181
- package/src/http/HttpUtils.ts +97 -97
- package/src/http/paramcoders/IParamReader.ts +9 -9
- package/src/http/paramcoders/ParamDecoder.ts +145 -145
- package/src/http/paramcoders/ParamEncoder.ts +40 -40
- package/src/http/paramcoders/SchemaVerifier.ts +153 -153
- package/src/http/paramcoders/client/ResponseParamDecoder.ts +57 -57
- package/src/http/paramcoders/client/StreamParamEncoder.ts +28 -28
- package/src/http/paramcoders/client/StreamingFetchPromise.ts +194 -194
- package/src/index.ts +141 -141
- package/src/intermediaries/Intermediary.ts +280 -280
- package/src/intermediaries/IntermediaryDiscovery.ts +548 -548
- package/src/intermediaries/apis/IntermediaryAPI.ts +1247 -1247
- package/src/intermediaries/auth/SignedKeyBasedAuth.ts +69 -69
- package/src/lnurl/LNURL.ts +402 -402
- package/src/prices/RedundantSwapPrice.ts +264 -264
- package/src/prices/SingleSwapPrice.ts +50 -50
- package/src/prices/SwapPriceWithChain.ts +194 -194
- package/src/prices/abstract/ICachedSwapPrice.ts +85 -85
- package/src/prices/abstract/IPriceProvider.ts +127 -127
- package/src/prices/abstract/ISwapPrice.ts +390 -390
- package/src/prices/providers/BinancePriceProvider.ts +48 -48
- package/src/prices/providers/CoinGeckoPriceProvider.ts +46 -46
- package/src/prices/providers/CoinPaprikaPriceProvider.ts +49 -49
- package/src/prices/providers/CustomPriceProvider.ts +40 -40
- package/src/prices/providers/KrakenPriceProvider.ts +83 -83
- package/src/prices/providers/OKXPriceProvider.ts +59 -59
- package/src/prices/providers/abstract/ExchangePriceProvider.ts +31 -31
- package/src/prices/providers/abstract/HttpPriceProvider.ts +14 -14
- package/src/storage/IUnifiedStorage.ts +136 -136
- package/src/storage/UnifiedSwapStorage.ts +175 -175
- package/src/storage-browser/IndexedDBUnifiedStorage.ts +350 -350
- package/src/storage-browser/LocalStorageManager.ts +106 -106
- package/src/swapper/Swapper.ts +2570 -2570
- package/src/swapper/SwapperFactory.ts +307 -307
- package/src/swapper/SwapperUtils.ts +610 -610
- package/src/swapper/SwapperWithChain.ts +707 -707
- package/src/swapper/SwapperWithSigner.ts +511 -511
- package/src/swaps/IAddressSwap.ts +30 -30
- package/src/swaps/IBTCWalletSwap.ts +92 -92
- package/src/swaps/IClaimableSwap.ts +65 -65
- package/src/swaps/IClaimableSwapWrapper.ts +17 -17
- package/src/swaps/IRefundableSwap.ts +58 -58
- package/src/swaps/ISwap.ts +775 -775
- package/src/swaps/ISwapWithGasDrop.ts +25 -25
- package/src/swaps/ISwapWrapper.ts +564 -564
- package/src/swaps/escrow_swaps/IEscrowSelfInitSwap.ts +217 -217
- package/src/swaps/escrow_swaps/IEscrowSwap.ts +271 -271
- package/src/swaps/escrow_swaps/IEscrowSwapWrapper.ts +284 -284
- package/src/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.ts +172 -172
- package/src/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.ts +300 -300
- package/src/swaps/escrow_swaps/frombtc/IFromBTCWrapper.ts +107 -107
- package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.ts +1670 -1671
- package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.ts +603 -603
- package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.ts +1883 -1883
- package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.ts +752 -752
- package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.ts +1753 -1753
- package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.ts +612 -612
- package/src/swaps/escrow_swaps/tobtc/IToBTCSwap.ts +1327 -1327
- package/src/swaps/escrow_swaps/tobtc/IToBTCWrapper.ts +138 -138
- package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.ts +304 -304
- package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.ts +787 -787
- package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.ts +206 -206
- package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.ts +403 -403
- package/src/swaps/spv_swaps/SpvFromBTCSwap.ts +2148 -2148
- package/src/swaps/spv_swaps/SpvFromBTCWrapper.ts +1238 -1238
- package/src/swaps/trusted/ln/LnForGasSwap.ts +753 -753
- package/src/swaps/trusted/ln/LnForGasWrapper.ts +90 -90
- package/src/swaps/trusted/onchain/OnchainForGasSwap.ts +843 -843
- package/src/swaps/trusted/onchain/OnchainForGasWrapper.ts +133 -133
- package/src/types/AmountData.ts +9 -9
- package/src/types/CustomPriceFunction.ts +11 -11
- package/src/types/PriceInfoType.ts +66 -66
- package/src/types/SwapExecutionAction.ts +323 -323
- package/src/types/SwapExecutionStep.ts +224 -224
- package/src/types/SwapStateInfo.ts +6 -6
- package/src/types/SwapWithSigner.ts +61 -61
- package/src/types/Token.ts +163 -163
- package/src/types/TokenAmount.ts +167 -167
- package/src/types/fees/Fee.ts +56 -56
- package/src/types/fees/FeeBreakdown.ts +11 -11
- package/src/types/fees/PercentagePPM.ts +26 -26
- package/src/types/lnurl/LNURLPay.ts +79 -79
- package/src/types/lnurl/LNURLWithdraw.ts +61 -61
- package/src/types/wallets/LightningInvoiceCreateService.ts +30 -30
- package/src/types/wallets/MinimalBitcoinWalletInterface.ts +21 -21
- package/src/types/wallets/MinimalLightningNetworkWalletInterface.ts +9 -9
- package/src/utils/AutomaticClockDriftCorrection.ts +71 -71
- package/src/utils/BitcoinUtils.ts +164 -164
- package/src/utils/BitcoinWalletUtils.ts +15 -15
- package/src/utils/Logger.ts +14 -14
- package/src/utils/RetryUtils.ts +78 -78
- package/src/utils/SwapUtils.ts +99 -99
- package/src/utils/TimeoutUtils.ts +49 -49
- package/src/utils/TokenUtils.ts +33 -33
- package/src/utils/TypeUtils.ts +8 -8
- package/src/utils/Utils.ts +221 -221
package/src/types/Token.ts
CHANGED
|
@@ -1,163 +1,163 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Type for all token types (BTC or smart chain)
|
|
3
|
-
*
|
|
4
|
-
* @category Tokens
|
|
5
|
-
*/
|
|
6
|
-
export type Token<ChainIdentifier extends string = string> = {
|
|
7
|
-
/**
|
|
8
|
-
* Chain identifier for the token's chain
|
|
9
|
-
*/
|
|
10
|
-
chainId: ChainIdentifier | "BITCOIN" | "LIGHTNING",
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Ticker of the token
|
|
14
|
-
*/
|
|
15
|
-
ticker: string,
|
|
16
|
-
/**
|
|
17
|
-
* Full name of the token
|
|
18
|
-
*/
|
|
19
|
-
name: string,
|
|
20
|
-
/**
|
|
21
|
-
* Actual decimal places of the tokens
|
|
22
|
-
*/
|
|
23
|
-
decimals: number,
|
|
24
|
-
/**
|
|
25
|
-
* The decimal places that should be rendered and displayed to the user
|
|
26
|
-
*/
|
|
27
|
-
displayDecimals?: number,
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Address of the token contract, or `""` for Bitcoin
|
|
31
|
-
*/
|
|
32
|
-
address: string,
|
|
33
|
-
|
|
34
|
-
// legacy compatibility
|
|
35
|
-
/**
|
|
36
|
-
* Legacy chain identifier distinguishing between Smart Chain and Bitcoin tokens
|
|
37
|
-
*/
|
|
38
|
-
chain: "SC" | "BTC",
|
|
39
|
-
/**
|
|
40
|
-
* Legacy lightning flag, determines whether a Bitcoin token is an Lightning or on-chain one
|
|
41
|
-
*/
|
|
42
|
-
lightning?: boolean,
|
|
43
|
-
|
|
44
|
-
// helpers
|
|
45
|
-
/**
|
|
46
|
-
* Equality check between tokens
|
|
47
|
-
*/
|
|
48
|
-
equals: (other: Token) => boolean,
|
|
49
|
-
/**
|
|
50
|
-
* Returns the
|
|
51
|
-
*/
|
|
52
|
-
toString: () => string
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* Type guard for a {@link Token} type, encompassing all tokens (BTC or smart chain)
|
|
57
|
-
*
|
|
58
|
-
* @category Tokens
|
|
59
|
-
*/
|
|
60
|
-
export function isToken(obj: any): obj is Token {
|
|
61
|
-
return typeof (obj) === "object" &&
|
|
62
|
-
(obj.chain === "SC" || obj.chain === "BTC") &&
|
|
63
|
-
typeof (obj.ticker) === "string" &&
|
|
64
|
-
typeof (obj.decimals) === "number" &&
|
|
65
|
-
typeof (obj.name) === "string";
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Bitcoin token type (BTC on on-chain or lightning)
|
|
70
|
-
*
|
|
71
|
-
* @category Tokens
|
|
72
|
-
*/
|
|
73
|
-
export type BtcToken<L = boolean> = Token & {
|
|
74
|
-
chainId: L extends true ? "LIGHTNING" : "BITCOIN",
|
|
75
|
-
ticker: "BTC",
|
|
76
|
-
name: L extends true ? "Bitcoin (lightning L2)" : "Bitcoin (on-chain L1)",
|
|
77
|
-
decimals: 8,
|
|
78
|
-
displayDecimals: 8,
|
|
79
|
-
|
|
80
|
-
address: "",
|
|
81
|
-
|
|
82
|
-
// legacy compatibility
|
|
83
|
-
chain: "BTC",
|
|
84
|
-
lightning: L,
|
|
85
|
-
|
|
86
|
-
toString: () => L extends true ? "BTC-LN" : "BTC"
|
|
87
|
-
};
|
|
88
|
-
|
|
89
|
-
/**
|
|
90
|
-
* Type guard for {@link BtcToken} (token on the bitcoin network - lightning or on-chain)
|
|
91
|
-
*
|
|
92
|
-
* @category Tokens
|
|
93
|
-
*/
|
|
94
|
-
export function isBtcToken(obj: any): obj is BtcToken {
|
|
95
|
-
return typeof (obj) === "object" &&
|
|
96
|
-
obj.chain === "BTC" &&
|
|
97
|
-
typeof (obj.lightning) === "boolean" &&
|
|
98
|
-
typeof (obj.ticker) === "string" &&
|
|
99
|
-
typeof (obj.decimals) === "number" &&
|
|
100
|
-
typeof (obj.name) === "string";
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* Predefined Bitcoin token constants
|
|
105
|
-
*
|
|
106
|
-
* @category Tokens
|
|
107
|
-
*/
|
|
108
|
-
export const BitcoinTokens: {
|
|
109
|
-
BTC: BtcToken<false>,
|
|
110
|
-
BTCLN: BtcToken<true>
|
|
111
|
-
} = {
|
|
112
|
-
BTC: {
|
|
113
|
-
chain: "BTC",
|
|
114
|
-
chainId: "BITCOIN",
|
|
115
|
-
lightning: false,
|
|
116
|
-
ticker: "BTC",
|
|
117
|
-
decimals: 8,
|
|
118
|
-
displayDecimals: 8,
|
|
119
|
-
name: "Bitcoin (on-chain L1)",
|
|
120
|
-
address: "",
|
|
121
|
-
equals: (other: Token) => other.chainId==="BITCOIN" && other.ticker==="BTC",
|
|
122
|
-
toString: () => "BTC"
|
|
123
|
-
},
|
|
124
|
-
BTCLN: {
|
|
125
|
-
chain: "BTC",
|
|
126
|
-
chainId: "LIGHTNING",
|
|
127
|
-
lightning: true,
|
|
128
|
-
ticker: "BTC",
|
|
129
|
-
decimals: 8,
|
|
130
|
-
displayDecimals: 8,
|
|
131
|
-
name: "Bitcoin (lightning L2)",
|
|
132
|
-
address: "",
|
|
133
|
-
equals: (other: Token) => other.chainId==="LIGHTNING" && other.ticker==="BTC",
|
|
134
|
-
toString: () => "BTC-LN"
|
|
135
|
-
}
|
|
136
|
-
};
|
|
137
|
-
|
|
138
|
-
/**
|
|
139
|
-
* Token on the smart chain
|
|
140
|
-
*
|
|
141
|
-
* @category Tokens
|
|
142
|
-
*/
|
|
143
|
-
export type SCToken<ChainIdentifier extends string = string> = Token<ChainIdentifier> & {
|
|
144
|
-
chainId: ChainIdentifier,
|
|
145
|
-
chain: "SC"
|
|
146
|
-
|
|
147
|
-
toString: () => `${ChainIdentifier}-${string}`
|
|
148
|
-
};
|
|
149
|
-
|
|
150
|
-
/**
|
|
151
|
-
* Type guard for {@link SCToken} (token on the smart chain)
|
|
152
|
-
* @category Tokens
|
|
153
|
-
*/
|
|
154
|
-
export function isSCToken<ChainIdentifier extends string = string>(obj: any, chainIdentifier?: ChainIdentifier[]): obj is SCToken<ChainIdentifier> {
|
|
155
|
-
return typeof (obj) === "object" &&
|
|
156
|
-
obj.chain === "SC" &&
|
|
157
|
-
typeof (obj.chainId) === "string" &&
|
|
158
|
-
(chainIdentifier==null || chainIdentifier.includes(obj.chainId)) &&
|
|
159
|
-
typeof (obj.address) === "string" &&
|
|
160
|
-
typeof (obj.ticker) === "string" &&
|
|
161
|
-
typeof (obj.decimals) === "number" &&
|
|
162
|
-
typeof (obj.name) === "string";
|
|
163
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Type for all token types (BTC or smart chain)
|
|
3
|
+
*
|
|
4
|
+
* @category Tokens
|
|
5
|
+
*/
|
|
6
|
+
export type Token<ChainIdentifier extends string = string> = {
|
|
7
|
+
/**
|
|
8
|
+
* Chain identifier for the token's chain
|
|
9
|
+
*/
|
|
10
|
+
chainId: ChainIdentifier | "BITCOIN" | "LIGHTNING",
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Ticker of the token
|
|
14
|
+
*/
|
|
15
|
+
ticker: string,
|
|
16
|
+
/**
|
|
17
|
+
* Full name of the token
|
|
18
|
+
*/
|
|
19
|
+
name: string,
|
|
20
|
+
/**
|
|
21
|
+
* Actual decimal places of the tokens
|
|
22
|
+
*/
|
|
23
|
+
decimals: number,
|
|
24
|
+
/**
|
|
25
|
+
* The decimal places that should be rendered and displayed to the user
|
|
26
|
+
*/
|
|
27
|
+
displayDecimals?: number,
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Address of the token contract, or `""` for Bitcoin
|
|
31
|
+
*/
|
|
32
|
+
address: string,
|
|
33
|
+
|
|
34
|
+
// legacy compatibility
|
|
35
|
+
/**
|
|
36
|
+
* Legacy chain identifier distinguishing between Smart Chain and Bitcoin tokens
|
|
37
|
+
*/
|
|
38
|
+
chain: "SC" | "BTC",
|
|
39
|
+
/**
|
|
40
|
+
* Legacy lightning flag, determines whether a Bitcoin token is an Lightning or on-chain one
|
|
41
|
+
*/
|
|
42
|
+
lightning?: boolean,
|
|
43
|
+
|
|
44
|
+
// helpers
|
|
45
|
+
/**
|
|
46
|
+
* Equality check between tokens
|
|
47
|
+
*/
|
|
48
|
+
equals: (other: Token) => boolean,
|
|
49
|
+
/**
|
|
50
|
+
* Returns the
|
|
51
|
+
*/
|
|
52
|
+
toString: () => string
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Type guard for a {@link Token} type, encompassing all tokens (BTC or smart chain)
|
|
57
|
+
*
|
|
58
|
+
* @category Tokens
|
|
59
|
+
*/
|
|
60
|
+
export function isToken(obj: any): obj is Token {
|
|
61
|
+
return typeof (obj) === "object" &&
|
|
62
|
+
(obj.chain === "SC" || obj.chain === "BTC") &&
|
|
63
|
+
typeof (obj.ticker) === "string" &&
|
|
64
|
+
typeof (obj.decimals) === "number" &&
|
|
65
|
+
typeof (obj.name) === "string";
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Bitcoin token type (BTC on on-chain or lightning)
|
|
70
|
+
*
|
|
71
|
+
* @category Tokens
|
|
72
|
+
*/
|
|
73
|
+
export type BtcToken<L = boolean> = Token & {
|
|
74
|
+
chainId: L extends true ? "LIGHTNING" : "BITCOIN",
|
|
75
|
+
ticker: "BTC",
|
|
76
|
+
name: L extends true ? "Bitcoin (lightning L2)" : "Bitcoin (on-chain L1)",
|
|
77
|
+
decimals: 8,
|
|
78
|
+
displayDecimals: 8,
|
|
79
|
+
|
|
80
|
+
address: "",
|
|
81
|
+
|
|
82
|
+
// legacy compatibility
|
|
83
|
+
chain: "BTC",
|
|
84
|
+
lightning: L,
|
|
85
|
+
|
|
86
|
+
toString: () => L extends true ? "BTC-LN" : "BTC"
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Type guard for {@link BtcToken} (token on the bitcoin network - lightning or on-chain)
|
|
91
|
+
*
|
|
92
|
+
* @category Tokens
|
|
93
|
+
*/
|
|
94
|
+
export function isBtcToken(obj: any): obj is BtcToken {
|
|
95
|
+
return typeof (obj) === "object" &&
|
|
96
|
+
obj.chain === "BTC" &&
|
|
97
|
+
typeof (obj.lightning) === "boolean" &&
|
|
98
|
+
typeof (obj.ticker) === "string" &&
|
|
99
|
+
typeof (obj.decimals) === "number" &&
|
|
100
|
+
typeof (obj.name) === "string";
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Predefined Bitcoin token constants
|
|
105
|
+
*
|
|
106
|
+
* @category Tokens
|
|
107
|
+
*/
|
|
108
|
+
export const BitcoinTokens: {
|
|
109
|
+
BTC: BtcToken<false>,
|
|
110
|
+
BTCLN: BtcToken<true>
|
|
111
|
+
} = {
|
|
112
|
+
BTC: {
|
|
113
|
+
chain: "BTC",
|
|
114
|
+
chainId: "BITCOIN",
|
|
115
|
+
lightning: false,
|
|
116
|
+
ticker: "BTC",
|
|
117
|
+
decimals: 8,
|
|
118
|
+
displayDecimals: 8,
|
|
119
|
+
name: "Bitcoin (on-chain L1)",
|
|
120
|
+
address: "",
|
|
121
|
+
equals: (other: Token) => other.chainId==="BITCOIN" && other.ticker==="BTC",
|
|
122
|
+
toString: () => "BTC"
|
|
123
|
+
},
|
|
124
|
+
BTCLN: {
|
|
125
|
+
chain: "BTC",
|
|
126
|
+
chainId: "LIGHTNING",
|
|
127
|
+
lightning: true,
|
|
128
|
+
ticker: "BTC",
|
|
129
|
+
decimals: 8,
|
|
130
|
+
displayDecimals: 8,
|
|
131
|
+
name: "Bitcoin (lightning L2)",
|
|
132
|
+
address: "",
|
|
133
|
+
equals: (other: Token) => other.chainId==="LIGHTNING" && other.ticker==="BTC",
|
|
134
|
+
toString: () => "BTC-LN"
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Token on the smart chain
|
|
140
|
+
*
|
|
141
|
+
* @category Tokens
|
|
142
|
+
*/
|
|
143
|
+
export type SCToken<ChainIdentifier extends string = string> = Token<ChainIdentifier> & {
|
|
144
|
+
chainId: ChainIdentifier,
|
|
145
|
+
chain: "SC"
|
|
146
|
+
|
|
147
|
+
toString: () => `${ChainIdentifier}-${string}`
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Type guard for {@link SCToken} (token on the smart chain)
|
|
152
|
+
* @category Tokens
|
|
153
|
+
*/
|
|
154
|
+
export function isSCToken<ChainIdentifier extends string = string>(obj: any, chainIdentifier?: ChainIdentifier[]): obj is SCToken<ChainIdentifier> {
|
|
155
|
+
return typeof (obj) === "object" &&
|
|
156
|
+
obj.chain === "SC" &&
|
|
157
|
+
typeof (obj.chainId) === "string" &&
|
|
158
|
+
(chainIdentifier==null || chainIdentifier.includes(obj.chainId)) &&
|
|
159
|
+
typeof (obj.address) === "string" &&
|
|
160
|
+
typeof (obj.ticker) === "string" &&
|
|
161
|
+
typeof (obj.decimals) === "number" &&
|
|
162
|
+
typeof (obj.name) === "string";
|
|
163
|
+
}
|
package/src/types/TokenAmount.ts
CHANGED
|
@@ -1,167 +1,167 @@
|
|
|
1
|
-
import {ISwapPrice} from "../prices/abstract/ISwapPrice";
|
|
2
|
-
import {isToken, Token} from "./Token";
|
|
3
|
-
import {PriceInfoType} from "./PriceInfoType";
|
|
4
|
-
import {toDecimal} from "../utils/Utils";
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Represents a token amount along with its formatted values and USD valuation helpers
|
|
8
|
-
*
|
|
9
|
-
* @category Tokens
|
|
10
|
-
*/
|
|
11
|
-
export type TokenAmount<
|
|
12
|
-
T extends Token = Token,
|
|
13
|
-
Known extends boolean = boolean
|
|
14
|
-
> = {
|
|
15
|
-
/**
|
|
16
|
-
* Raw amount in base units represented as bigint, might be `undefined` when the amount is unknown
|
|
17
|
-
*/
|
|
18
|
-
rawAmount: Known extends true ? bigint : undefined,
|
|
19
|
-
/**
|
|
20
|
-
* Human readable amount with decimal places, might be empty string `""` when the amount is unknown
|
|
21
|
-
*/
|
|
22
|
-
amount: string,
|
|
23
|
-
/**
|
|
24
|
-
* Number representation of the decimal token amount (can lose precision!), might be `NaN` when
|
|
25
|
-
* the amount is unknown
|
|
26
|
-
*/
|
|
27
|
-
_amount: number,
|
|
28
|
-
/**
|
|
29
|
-
* Token associated with this amount
|
|
30
|
-
*/
|
|
31
|
-
token: T,
|
|
32
|
-
/**
|
|
33
|
-
* Fetches the current USD value of the amount, might return `NaN` when the amount is unknown
|
|
34
|
-
*
|
|
35
|
-
* @param abortSignal
|
|
36
|
-
* @param preFetchedUsdPrice You can supply a pre-fetched usd price to the pricing function
|
|
37
|
-
* @returns A promise resolving to the current USD value of the token amount
|
|
38
|
-
*/
|
|
39
|
-
currentUsdValue: (abortSignal?: AbortSignal, preFetchedUsdPrice?: number) => Promise<number>,
|
|
40
|
-
/**
|
|
41
|
-
* Gets USD value of the amount, if this amount was returned from a swap it uses the USD value
|
|
42
|
-
* when the swap was created, otherwise fetches the usd value on-demand, might return `NaN`
|
|
43
|
-
* when the amount is unknown
|
|
44
|
-
*
|
|
45
|
-
* @param abortSignal
|
|
46
|
-
* @param preFetchedUsdPrice You can supply a pre-fetched usd price to the pricing function
|
|
47
|
-
* @returns A promise resolving to the current USD value of the token amount
|
|
48
|
-
*/
|
|
49
|
-
usdValue: (abortSignal?: AbortSignal, preFetchedUsdPrice?: number) => Promise<number>,
|
|
50
|
-
/**
|
|
51
|
-
* USD value of the amount when swap was created - only present for token amounts obtained
|
|
52
|
-
* from swaps, left for convenience only, use usdValue() instead, which automatically
|
|
53
|
-
* recognizes which pricing to use (either past value if available or fetches it on-demand),
|
|
54
|
-
* might be `NaN` when the amount is unknown
|
|
55
|
-
*/
|
|
56
|
-
pastUsdValue?: number,
|
|
57
|
-
/**
|
|
58
|
-
* Returns the string representation of the amount along with the token ticker in format: `"{amount} {ticker}"`,
|
|
59
|
-
* in case the anmount is unknown returns `"??? {ticker}"`
|
|
60
|
-
*/
|
|
61
|
-
toString: () => string,
|
|
62
|
-
/**
|
|
63
|
-
* Whether the token amount contains an unknown or undefined amount, in this case numeric values are `NaN`,
|
|
64
|
-
* raw amount is `undefined`, string representation is `""` and `toString()` returns `"??? {ticker}"`
|
|
65
|
-
*/
|
|
66
|
-
isUnknown: Known extends true ? false : true
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* Type guard for {@link TokenAmount}
|
|
71
|
-
*
|
|
72
|
-
* @category Tokens
|
|
73
|
-
*/
|
|
74
|
-
export function isTokenAmount<
|
|
75
|
-
T extends Token = Token,
|
|
76
|
-
Known extends boolean = boolean
|
|
77
|
-
>(
|
|
78
|
-
obj: any,
|
|
79
|
-
token?: T,
|
|
80
|
-
known?: Known
|
|
81
|
-
): obj is TokenAmount<T, Known> {
|
|
82
|
-
const hasExpectedKnownState = known == null
|
|
83
|
-
? (
|
|
84
|
-
(typeof(obj?.rawAmount) === "bigint" && obj?.isUnknown === false) ||
|
|
85
|
-
(obj?.rawAmount === undefined && obj?.isUnknown === true)
|
|
86
|
-
)
|
|
87
|
-
: known
|
|
88
|
-
? typeof(obj?.rawAmount) === "bigint" && obj?.isUnknown === false
|
|
89
|
-
: obj?.rawAmount === undefined && obj?.isUnknown === true;
|
|
90
|
-
|
|
91
|
-
return obj != null &&
|
|
92
|
-
typeof(obj) === "object" &&
|
|
93
|
-
typeof(obj.amount) === "string" &&
|
|
94
|
-
typeof(obj._amount) === "number" &&
|
|
95
|
-
(token == null ? isToken(obj.token) : token.equals(obj.token)) &&
|
|
96
|
-
typeof(obj.currentUsdValue) === "function" &&
|
|
97
|
-
typeof(obj.usdValue) === "function" &&
|
|
98
|
-
(obj.pastUsdValue == null || typeof(obj.pastUsdValue) === "number") &&
|
|
99
|
-
typeof(obj.toString) === "function" &&
|
|
100
|
-
hasExpectedKnownState;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* Factory function to create a TokenAmount
|
|
105
|
-
*
|
|
106
|
-
* @category Tokens
|
|
107
|
-
* @internal
|
|
108
|
-
*/
|
|
109
|
-
export function toTokenAmount<
|
|
110
|
-
T extends Token = Token,
|
|
111
|
-
Known extends boolean = boolean
|
|
112
|
-
>(
|
|
113
|
-
amount: Known extends true ? bigint : null,
|
|
114
|
-
token: T,
|
|
115
|
-
prices: ISwapPrice,
|
|
116
|
-
pricingInfo?: PriceInfoType
|
|
117
|
-
): TokenAmount<T, Known> {
|
|
118
|
-
if (amount == null) return {
|
|
119
|
-
rawAmount: undefined,
|
|
120
|
-
amount: "",
|
|
121
|
-
_amount: NaN,
|
|
122
|
-
token,
|
|
123
|
-
currentUsdValue: () => Promise.resolve(NaN),
|
|
124
|
-
pastUsdValue: NaN,
|
|
125
|
-
usdValue: () => Promise.resolve(NaN),
|
|
126
|
-
toString: () => "??? " + token.ticker,
|
|
127
|
-
isUnknown: true
|
|
128
|
-
} as TokenAmount<T>;
|
|
129
|
-
const amountStr = toDecimal(amount, token.decimals, undefined, token.displayDecimals);
|
|
130
|
-
const _amount = parseFloat(amountStr);
|
|
131
|
-
|
|
132
|
-
let usdValue: number | undefined = undefined;
|
|
133
|
-
if (pricingInfo != null) {
|
|
134
|
-
if (token.chain === "BTC" && token.ticker === "BTC") {
|
|
135
|
-
if (pricingInfo.realPriceUsdPerBitcoin != null) {
|
|
136
|
-
usdValue = Number(amount) * pricingInfo.realPriceUsdPerBitcoin;
|
|
137
|
-
}
|
|
138
|
-
} else {
|
|
139
|
-
if (pricingInfo.realPriceUsdPerBitcoin != null && pricingInfo.realPriceUSatPerToken != null) {
|
|
140
|
-
usdValue = _amount
|
|
141
|
-
* pricingInfo.realPriceUsdPerBitcoin
|
|
142
|
-
* Number(pricingInfo.realPriceUSatPerToken)
|
|
143
|
-
/ 1_000_000;
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
const currentUsdValue = (abortSignal?: AbortSignal, preFetchedUsdPrice?: number) =>
|
|
149
|
-
prices.getUsdValue(amount, token, abortSignal, preFetchedUsdPrice);
|
|
150
|
-
|
|
151
|
-
return {
|
|
152
|
-
rawAmount: amount,
|
|
153
|
-
amount: amountStr,
|
|
154
|
-
_amount,
|
|
155
|
-
token,
|
|
156
|
-
currentUsdValue,
|
|
157
|
-
pastUsdValue: usdValue,
|
|
158
|
-
usdValue: async (abortSignal?: AbortSignal, preFetchedUsdPrice?: number) => {
|
|
159
|
-
if (usdValue == null) {
|
|
160
|
-
usdValue = await currentUsdValue(abortSignal, preFetchedUsdPrice);
|
|
161
|
-
}
|
|
162
|
-
return usdValue;
|
|
163
|
-
},
|
|
164
|
-
toString: () => amountStr + " " + token.ticker,
|
|
165
|
-
isUnknown: false
|
|
166
|
-
} as TokenAmount<T>;
|
|
167
|
-
}
|
|
1
|
+
import {ISwapPrice} from "../prices/abstract/ISwapPrice";
|
|
2
|
+
import {isToken, Token} from "./Token";
|
|
3
|
+
import {PriceInfoType} from "./PriceInfoType";
|
|
4
|
+
import {toDecimal} from "../utils/Utils";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Represents a token amount along with its formatted values and USD valuation helpers
|
|
8
|
+
*
|
|
9
|
+
* @category Tokens
|
|
10
|
+
*/
|
|
11
|
+
export type TokenAmount<
|
|
12
|
+
T extends Token = Token,
|
|
13
|
+
Known extends boolean = boolean
|
|
14
|
+
> = {
|
|
15
|
+
/**
|
|
16
|
+
* Raw amount in base units represented as bigint, might be `undefined` when the amount is unknown
|
|
17
|
+
*/
|
|
18
|
+
rawAmount: Known extends true ? bigint : undefined,
|
|
19
|
+
/**
|
|
20
|
+
* Human readable amount with decimal places, might be empty string `""` when the amount is unknown
|
|
21
|
+
*/
|
|
22
|
+
amount: string,
|
|
23
|
+
/**
|
|
24
|
+
* Number representation of the decimal token amount (can lose precision!), might be `NaN` when
|
|
25
|
+
* the amount is unknown
|
|
26
|
+
*/
|
|
27
|
+
_amount: number,
|
|
28
|
+
/**
|
|
29
|
+
* Token associated with this amount
|
|
30
|
+
*/
|
|
31
|
+
token: T,
|
|
32
|
+
/**
|
|
33
|
+
* Fetches the current USD value of the amount, might return `NaN` when the amount is unknown
|
|
34
|
+
*
|
|
35
|
+
* @param abortSignal
|
|
36
|
+
* @param preFetchedUsdPrice You can supply a pre-fetched usd price to the pricing function
|
|
37
|
+
* @returns A promise resolving to the current USD value of the token amount
|
|
38
|
+
*/
|
|
39
|
+
currentUsdValue: (abortSignal?: AbortSignal, preFetchedUsdPrice?: number) => Promise<number>,
|
|
40
|
+
/**
|
|
41
|
+
* Gets USD value of the amount, if this amount was returned from a swap it uses the USD value
|
|
42
|
+
* when the swap was created, otherwise fetches the usd value on-demand, might return `NaN`
|
|
43
|
+
* when the amount is unknown
|
|
44
|
+
*
|
|
45
|
+
* @param abortSignal
|
|
46
|
+
* @param preFetchedUsdPrice You can supply a pre-fetched usd price to the pricing function
|
|
47
|
+
* @returns A promise resolving to the current USD value of the token amount
|
|
48
|
+
*/
|
|
49
|
+
usdValue: (abortSignal?: AbortSignal, preFetchedUsdPrice?: number) => Promise<number>,
|
|
50
|
+
/**
|
|
51
|
+
* USD value of the amount when swap was created - only present for token amounts obtained
|
|
52
|
+
* from swaps, left for convenience only, use usdValue() instead, which automatically
|
|
53
|
+
* recognizes which pricing to use (either past value if available or fetches it on-demand),
|
|
54
|
+
* might be `NaN` when the amount is unknown
|
|
55
|
+
*/
|
|
56
|
+
pastUsdValue?: number,
|
|
57
|
+
/**
|
|
58
|
+
* Returns the string representation of the amount along with the token ticker in format: `"{amount} {ticker}"`,
|
|
59
|
+
* in case the anmount is unknown returns `"??? {ticker}"`
|
|
60
|
+
*/
|
|
61
|
+
toString: () => string,
|
|
62
|
+
/**
|
|
63
|
+
* Whether the token amount contains an unknown or undefined amount, in this case numeric values are `NaN`,
|
|
64
|
+
* raw amount is `undefined`, string representation is `""` and `toString()` returns `"??? {ticker}"`
|
|
65
|
+
*/
|
|
66
|
+
isUnknown: Known extends true ? false : true
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Type guard for {@link TokenAmount}
|
|
71
|
+
*
|
|
72
|
+
* @category Tokens
|
|
73
|
+
*/
|
|
74
|
+
export function isTokenAmount<
|
|
75
|
+
T extends Token = Token,
|
|
76
|
+
Known extends boolean = boolean
|
|
77
|
+
>(
|
|
78
|
+
obj: any,
|
|
79
|
+
token?: T,
|
|
80
|
+
known?: Known
|
|
81
|
+
): obj is TokenAmount<T, Known> {
|
|
82
|
+
const hasExpectedKnownState = known == null
|
|
83
|
+
? (
|
|
84
|
+
(typeof(obj?.rawAmount) === "bigint" && obj?.isUnknown === false) ||
|
|
85
|
+
(obj?.rawAmount === undefined && obj?.isUnknown === true)
|
|
86
|
+
)
|
|
87
|
+
: known
|
|
88
|
+
? typeof(obj?.rawAmount) === "bigint" && obj?.isUnknown === false
|
|
89
|
+
: obj?.rawAmount === undefined && obj?.isUnknown === true;
|
|
90
|
+
|
|
91
|
+
return obj != null &&
|
|
92
|
+
typeof(obj) === "object" &&
|
|
93
|
+
typeof(obj.amount) === "string" &&
|
|
94
|
+
typeof(obj._amount) === "number" &&
|
|
95
|
+
(token == null ? isToken(obj.token) : token.equals(obj.token)) &&
|
|
96
|
+
typeof(obj.currentUsdValue) === "function" &&
|
|
97
|
+
typeof(obj.usdValue) === "function" &&
|
|
98
|
+
(obj.pastUsdValue == null || typeof(obj.pastUsdValue) === "number") &&
|
|
99
|
+
typeof(obj.toString) === "function" &&
|
|
100
|
+
hasExpectedKnownState;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Factory function to create a TokenAmount
|
|
105
|
+
*
|
|
106
|
+
* @category Tokens
|
|
107
|
+
* @internal
|
|
108
|
+
*/
|
|
109
|
+
export function toTokenAmount<
|
|
110
|
+
T extends Token = Token,
|
|
111
|
+
Known extends boolean = boolean
|
|
112
|
+
>(
|
|
113
|
+
amount: Known extends true ? bigint : null,
|
|
114
|
+
token: T,
|
|
115
|
+
prices: ISwapPrice,
|
|
116
|
+
pricingInfo?: PriceInfoType
|
|
117
|
+
): TokenAmount<T, Known> {
|
|
118
|
+
if (amount == null) return {
|
|
119
|
+
rawAmount: undefined,
|
|
120
|
+
amount: "",
|
|
121
|
+
_amount: NaN,
|
|
122
|
+
token,
|
|
123
|
+
currentUsdValue: () => Promise.resolve(NaN),
|
|
124
|
+
pastUsdValue: NaN,
|
|
125
|
+
usdValue: () => Promise.resolve(NaN),
|
|
126
|
+
toString: () => "??? " + token.ticker,
|
|
127
|
+
isUnknown: true
|
|
128
|
+
} as TokenAmount<T>;
|
|
129
|
+
const amountStr = toDecimal(amount, token.decimals, undefined, token.displayDecimals);
|
|
130
|
+
const _amount = parseFloat(amountStr);
|
|
131
|
+
|
|
132
|
+
let usdValue: number | undefined = undefined;
|
|
133
|
+
if (pricingInfo != null) {
|
|
134
|
+
if (token.chain === "BTC" && token.ticker === "BTC") {
|
|
135
|
+
if (pricingInfo.realPriceUsdPerBitcoin != null) {
|
|
136
|
+
usdValue = Number(amount) * pricingInfo.realPriceUsdPerBitcoin;
|
|
137
|
+
}
|
|
138
|
+
} else {
|
|
139
|
+
if (pricingInfo.realPriceUsdPerBitcoin != null && pricingInfo.realPriceUSatPerToken != null) {
|
|
140
|
+
usdValue = _amount
|
|
141
|
+
* pricingInfo.realPriceUsdPerBitcoin
|
|
142
|
+
* Number(pricingInfo.realPriceUSatPerToken)
|
|
143
|
+
/ 1_000_000;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
const currentUsdValue = (abortSignal?: AbortSignal, preFetchedUsdPrice?: number) =>
|
|
149
|
+
prices.getUsdValue(amount, token, abortSignal, preFetchedUsdPrice);
|
|
150
|
+
|
|
151
|
+
return {
|
|
152
|
+
rawAmount: amount,
|
|
153
|
+
amount: amountStr,
|
|
154
|
+
_amount,
|
|
155
|
+
token,
|
|
156
|
+
currentUsdValue,
|
|
157
|
+
pastUsdValue: usdValue,
|
|
158
|
+
usdValue: async (abortSignal?: AbortSignal, preFetchedUsdPrice?: number) => {
|
|
159
|
+
if (usdValue == null) {
|
|
160
|
+
usdValue = await currentUsdValue(abortSignal, preFetchedUsdPrice);
|
|
161
|
+
}
|
|
162
|
+
return usdValue;
|
|
163
|
+
},
|
|
164
|
+
toString: () => amountStr + " " + token.ticker,
|
|
165
|
+
isUnknown: false
|
|
166
|
+
} as TokenAmount<T>;
|
|
167
|
+
}
|