@atomiqlabs/sdk 8.6.4 → 8.6.6
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/dist/SmartChainAssets.d.ts +181 -181
- package/dist/SmartChainAssets.js +181 -181
- package/dist/bitcoin/coinselect2/accumulative.d.ts +6 -6
- package/dist/bitcoin/coinselect2/accumulative.js +51 -52
- package/dist/bitcoin/coinselect2/blackjack.d.ts +6 -6
- package/dist/bitcoin/coinselect2/blackjack.js +37 -38
- package/dist/bitcoin/coinselect2/index.d.ts +17 -19
- package/dist/bitcoin/coinselect2/index.js +69 -69
- package/dist/bitcoin/coinselect2/utils.d.ts +75 -77
- package/dist/bitcoin/coinselect2/utils.js +123 -123
- package/dist/bitcoin/wallet/BitcoinWallet.d.ts +128 -130
- package/dist/bitcoin/wallet/BitcoinWallet.js +322 -322
- package/dist/bitcoin/wallet/IBitcoinWallet.d.ts +78 -78
- package/dist/bitcoin/wallet/IBitcoinWallet.js +20 -21
- package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.d.ts +99 -101
- package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.js +176 -176
- 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 +23 -23
- package/dist/events/UnifiedSwapEventListener.js +130 -130
- package/dist/http/HttpUtils.d.ts +27 -27
- package/dist/http/HttpUtils.js +90 -91
- package/dist/http/paramcoders/IParamReader.d.ts +8 -8
- package/dist/http/paramcoders/IParamReader.js +2 -2
- package/dist/http/paramcoders/ParamDecoder.d.ts +42 -44
- package/dist/http/paramcoders/ParamDecoder.js +137 -137
- package/dist/http/paramcoders/ParamEncoder.d.ts +18 -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 +11 -13
- package/dist/http/paramcoders/client/StreamParamEncoder.js +26 -26
- package/dist/http/paramcoders/client/StreamingFetchPromise.d.ts +16 -16
- package/dist/http/paramcoders/client/StreamingFetchPromise.js +173 -174
- package/dist/index.d.ts +85 -85
- package/dist/index.js +158 -158
- package/dist/intermediaries/Intermediary.d.ts +157 -157
- package/dist/intermediaries/Intermediary.js +142 -142
- package/dist/intermediaries/IntermediaryDiscovery.d.ts +198 -199
- package/dist/intermediaries/IntermediaryDiscovery.js +406 -406
- package/dist/intermediaries/apis/IntermediaryAPI.d.ts +437 -438
- package/dist/intermediaries/apis/IntermediaryAPI.js +603 -602
- package/dist/intermediaries/apis/TrustedIntermediaryAPI.d.ts +155 -155
- package/dist/intermediaries/apis/TrustedIntermediaryAPI.js +137 -137
- 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 -166
- package/dist/prices/abstract/ISwapPrice.js +279 -267
- 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 +85 -85
- package/dist/storage/IUnifiedStorage.js +2 -2
- package/dist/storage/UnifiedSwapStorage.d.ts +114 -114
- package/dist/storage/UnifiedSwapStorage.js +116 -116
- 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 +686 -687
- package/dist/swapper/Swapper.js +1603 -1603
- package/dist/swapper/SwapperFactory.d.ts +135 -135
- package/dist/swapper/SwapperFactory.js +162 -162
- package/dist/swapper/SwapperUtils.d.ts +200 -200
- package/dist/swapper/SwapperUtils.js +467 -467
- 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 +13 -14
- package/dist/swaps/IBTCWalletSwap.d.ts +73 -73
- package/dist/swaps/IBTCWalletSwap.js +17 -18
- package/dist/swaps/IClaimableSwap.d.ts +49 -49
- package/dist/swaps/IClaimableSwap.js +14 -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 +13 -14
- package/dist/swaps/ISwap.d.ts +386 -387
- package/dist/swaps/ISwap.js +346 -341
- package/dist/swaps/ISwapWithGasDrop.d.ts +21 -21
- package/dist/swaps/ISwapWithGasDrop.js +11 -12
- package/dist/swaps/ISwapWrapper.d.ts +283 -284
- package/dist/swaps/ISwapWrapper.js +353 -353
- 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 +133 -135
- package/dist/swaps/escrow_swaps/IEscrowSwap.js +169 -169
- package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.d.ts +114 -115
- package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.js +134 -134
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.d.ts +98 -101
- 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 +58 -58
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.js +78 -78
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.d.ts +529 -531
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.js +1285 -1285
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.d.ts +181 -184
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.js +418 -417
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.d.ts +581 -583
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.js +1371 -1371
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.d.ts +225 -228
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.js +506 -506
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.d.ts +458 -458
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.js +1126 -1126
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.d.ts +190 -191
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.js +378 -377
- package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.d.ts +403 -403
- package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.js +924 -924
- package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.d.ts +62 -62
- package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.js +112 -112
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.d.ts +125 -127
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.js +256 -256
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.d.ts +241 -242
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.js +520 -520
- 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 +127 -128
- package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.js +278 -278
- package/dist/swaps/spv_swaps/SpvFromBTCSwap.d.ts +630 -630
- package/dist/swaps/spv_swaps/SpvFromBTCSwap.js +1443 -1443
- package/dist/swaps/spv_swaps/SpvFromBTCWrapper.d.ts +213 -207
- package/dist/swaps/spv_swaps/SpvFromBTCWrapper.js +756 -755
- package/dist/swaps/trusted/ln/LnForGasSwap.d.ts +261 -261
- package/dist/swaps/trusted/ln/LnForGasSwap.js +511 -511
- 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 +342 -342
- package/dist/swaps/trusted/onchain/OnchainForGasSwap.js +715 -715
- package/dist/swaps/trusted/onchain/OnchainForGasWrapper.d.ts +68 -69
- package/dist/swaps/trusted/onchain/OnchainForGasWrapper.js +92 -92
- 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 +56 -57
- package/dist/types/SwapExecutionAction.d.ts +88 -88
- package/dist/types/SwapExecutionAction.js +2 -2
- 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 +42 -43
- package/dist/types/Token.d.ts +99 -99
- package/dist/types/Token.js +76 -76
- package/dist/types/TokenAmount.d.ts +69 -69
- package/dist/types/TokenAmount.js +59 -60
- 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 +17 -18
- package/dist/types/lnurl/LNURLPay.d.ts +61 -61
- package/dist/types/lnurl/LNURLPay.js +30 -31
- package/dist/types/lnurl/LNURLWithdraw.d.ts +48 -48
- package/dist/types/lnurl/LNURLWithdraw.js +26 -27
- package/dist/types/wallets/LightningInvoiceCreateService.d.ts +24 -24
- package/dist/types/wallets/LightningInvoiceCreateService.js +14 -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 +69 -70
- package/dist/utils/BitcoinUtils.d.ts +12 -14
- package/dist/utils/BitcoinUtils.js +101 -102
- package/dist/utils/BitcoinWalletUtils.d.ts +7 -7
- package/dist/utils/BitcoinWalletUtils.js +13 -14
- package/dist/utils/Logger.d.ts +7 -7
- package/dist/utils/Logger.js +11 -12
- package/dist/utils/RetryUtils.d.ts +22 -22
- package/dist/utils/RetryUtils.js +66 -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 +54 -55
- package/dist/utils/TokenUtils.d.ts +19 -19
- package/dist/utils/TokenUtils.js +36 -37
- package/dist/utils/TypeUtils.d.ts +7 -7
- package/dist/utils/TypeUtils.js +2 -2
- package/dist/utils/Utils.d.ts +56 -58
- package/dist/utils/Utils.js +193 -194
- package/package.json +1 -1
- package/src/intermediaries/apis/IntermediaryAPI.ts +4 -2
- package/src/prices/abstract/ISwapPrice.ts +19 -6
- package/src/swaps/ISwap.ts +17 -6
- package/src/swaps/ISwapWrapper.ts +4 -3
- package/src/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.ts +4 -2
- package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.ts +4 -1
- package/src/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.ts +2 -2
- package/src/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.ts +4 -2
- package/src/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.ts +6 -6
- package/src/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.ts +5 -5
- package/src/swaps/spv_swaps/SpvFromBTCSwap.ts +4 -1
- package/src/swaps/spv_swaps/SpvFromBTCWrapper.ts +10 -2
- package/src/swaps/trusted/ln/LnForGasWrapper.ts +1 -1
- package/src/swaps/trusted/onchain/OnchainForGasWrapper.ts +1 -1
|
@@ -1,110 +1,110 @@
|
|
|
1
|
-
import { IPriceProvider } from "./abstract/IPriceProvider";
|
|
2
|
-
import { ICachedSwapPrice } from "./abstract/ICachedSwapPrice";
|
|
3
|
-
import { ChainIds, MultiChain } from "../swapper/Swapper";
|
|
4
|
-
/**
|
|
5
|
-
* Asset configuration for redundant swap pricing
|
|
6
|
-
*
|
|
7
|
-
* @category Pricing
|
|
8
|
-
*/
|
|
9
|
-
export type RedundantSwapPriceAssets<T extends MultiChain> = {
|
|
10
|
-
binancePair?: string;
|
|
11
|
-
okxPair?: string;
|
|
12
|
-
coinGeckoCoinId?: string;
|
|
13
|
-
coinPaprikaCoinId?: string;
|
|
14
|
-
krakenPair?: string;
|
|
15
|
-
chains: {
|
|
16
|
-
[chainIdentifier in keyof T]?: {
|
|
17
|
-
address: string;
|
|
18
|
-
decimals: number;
|
|
19
|
-
};
|
|
20
|
-
};
|
|
21
|
-
}[];
|
|
22
|
-
export type CtorCoinDecimals<T extends MultiChain> = {
|
|
23
|
-
chains: {
|
|
24
|
-
[chainIdentifier in keyof T]?: {
|
|
25
|
-
address: string;
|
|
26
|
-
decimals: number;
|
|
27
|
-
};
|
|
28
|
-
};
|
|
29
|
-
}[];
|
|
30
|
-
type CoinDecimals<T extends MultiChain> = {
|
|
31
|
-
[chainIdentifier in keyof T]?: {
|
|
32
|
-
[tokenAddress: string]: number;
|
|
33
|
-
};
|
|
34
|
-
};
|
|
35
|
-
/**
|
|
36
|
-
* Swap price API using multiple price sources, handles errors on the APIs and automatically switches between them, such
|
|
37
|
-
* that there always is a functional API
|
|
38
|
-
*
|
|
39
|
-
* @category Pricing
|
|
40
|
-
*/
|
|
41
|
-
export declare class RedundantSwapPrice<T extends MultiChain> extends ICachedSwapPrice<T> {
|
|
42
|
-
/**
|
|
43
|
-
* Creates a new {@link RedundantSwapPrice} instance from an asset list and other data, using all
|
|
44
|
-
* the available price providers: {@link BinancePriceProvider}, {@link OKXPriceProvider},
|
|
45
|
-
* {@link CoinGeckoPriceProvider}, {@link CoinPaprikaPriceProvider}, {@link KrakenPriceProvider}
|
|
46
|
-
*
|
|
47
|
-
* @param maxAllowedFeeDiffPPM Maximum allowed price difference between returned swap prices & market prices
|
|
48
|
-
* @param assets Specifications of the assets
|
|
49
|
-
* @param cacheTimeout Timeout of the internal cache holding prices
|
|
50
|
-
*/
|
|
51
|
-
static createFromTokenMap<T extends MultiChain>(maxAllowedFeeDiffPPM: bigint, assets: RedundantSwapPriceAssets<T>, cacheTimeout?: number): RedundantSwapPrice<T>;
|
|
52
|
-
protected coinsDecimals: CoinDecimals<T>;
|
|
53
|
-
protected priceApis: {
|
|
54
|
-
priceApi: IPriceProvider<T>;
|
|
55
|
-
operational?: boolean;
|
|
56
|
-
}[];
|
|
57
|
-
constructor(maxAllowedFeeDiffPPM: bigint, coinsDecimals: CtorCoinDecimals<T>, priceApis: IPriceProvider<T>[], cacheTimeout?: number);
|
|
58
|
-
/**
|
|
59
|
-
* Returns price api that should be operational
|
|
60
|
-
*
|
|
61
|
-
* @private
|
|
62
|
-
*/
|
|
63
|
-
private getOperationalPriceApi;
|
|
64
|
-
/**
|
|
65
|
-
* Returns price apis that are maybe operational, in case none is considered operational returns all of the price
|
|
66
|
-
* apis such that they can be tested again whether they are operational
|
|
67
|
-
*
|
|
68
|
-
* @private
|
|
69
|
-
*/
|
|
70
|
-
private getMaybeOperationalPriceApis;
|
|
71
|
-
/**
|
|
72
|
-
* Fetches price in parallel from multiple maybe operational price APIs
|
|
73
|
-
*
|
|
74
|
-
* @param chainIdentifier
|
|
75
|
-
* @param token
|
|
76
|
-
* @param abortSignal
|
|
77
|
-
* @private
|
|
78
|
-
*/
|
|
79
|
-
private fetchPriceFromMaybeOperationalPriceApis;
|
|
80
|
-
/**
|
|
81
|
-
* Fetches the prices, first tries to use the operational price API (if any) and if that fails it falls back
|
|
82
|
-
* to using maybe operational price APIs
|
|
83
|
-
*
|
|
84
|
-
* @param chainIdentifier
|
|
85
|
-
* @param token
|
|
86
|
-
* @param abortSignal
|
|
87
|
-
* @protected
|
|
88
|
-
*/
|
|
89
|
-
protected fetchPrice<C extends ChainIds<T>>(chainIdentifier: C, token: string, abortSignal?: AbortSignal): Promise<bigint>;
|
|
90
|
-
/**
|
|
91
|
-
* @inheritDoc
|
|
92
|
-
*/
|
|
93
|
-
protected getDecimals<C extends ChainIds<T>>(chainIdentifier: C, token: string): number | null;
|
|
94
|
-
/**
|
|
95
|
-
* Fetches BTC price in USD in parallel from multiple maybe operational price APIs
|
|
96
|
-
*
|
|
97
|
-
* @param abortSignal
|
|
98
|
-
* @private
|
|
99
|
-
*/
|
|
100
|
-
private fetchUsdPriceFromMaybeOperationalPriceApis;
|
|
101
|
-
/**
|
|
102
|
-
* Fetches the USD prices, first tries to use the operational price API (if any) and if that fails it falls back
|
|
103
|
-
* to using maybe operational price APIs
|
|
104
|
-
*
|
|
105
|
-
* @param abortSignal
|
|
106
|
-
* @protected
|
|
107
|
-
*/
|
|
108
|
-
protected fetchUsdPrice(abortSignal?: AbortSignal): Promise<number>;
|
|
109
|
-
}
|
|
110
|
-
export {};
|
|
1
|
+
import { IPriceProvider } from "./abstract/IPriceProvider";
|
|
2
|
+
import { ICachedSwapPrice } from "./abstract/ICachedSwapPrice";
|
|
3
|
+
import { ChainIds, MultiChain } from "../swapper/Swapper";
|
|
4
|
+
/**
|
|
5
|
+
* Asset configuration for redundant swap pricing
|
|
6
|
+
*
|
|
7
|
+
* @category Pricing
|
|
8
|
+
*/
|
|
9
|
+
export type RedundantSwapPriceAssets<T extends MultiChain> = {
|
|
10
|
+
binancePair?: string;
|
|
11
|
+
okxPair?: string;
|
|
12
|
+
coinGeckoCoinId?: string;
|
|
13
|
+
coinPaprikaCoinId?: string;
|
|
14
|
+
krakenPair?: string;
|
|
15
|
+
chains: {
|
|
16
|
+
[chainIdentifier in keyof T]?: {
|
|
17
|
+
address: string;
|
|
18
|
+
decimals: number;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
}[];
|
|
22
|
+
export type CtorCoinDecimals<T extends MultiChain> = {
|
|
23
|
+
chains: {
|
|
24
|
+
[chainIdentifier in keyof T]?: {
|
|
25
|
+
address: string;
|
|
26
|
+
decimals: number;
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
}[];
|
|
30
|
+
type CoinDecimals<T extends MultiChain> = {
|
|
31
|
+
[chainIdentifier in keyof T]?: {
|
|
32
|
+
[tokenAddress: string]: number;
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Swap price API using multiple price sources, handles errors on the APIs and automatically switches between them, such
|
|
37
|
+
* that there always is a functional API
|
|
38
|
+
*
|
|
39
|
+
* @category Pricing
|
|
40
|
+
*/
|
|
41
|
+
export declare class RedundantSwapPrice<T extends MultiChain> extends ICachedSwapPrice<T> {
|
|
42
|
+
/**
|
|
43
|
+
* Creates a new {@link RedundantSwapPrice} instance from an asset list and other data, using all
|
|
44
|
+
* the available price providers: {@link BinancePriceProvider}, {@link OKXPriceProvider},
|
|
45
|
+
* {@link CoinGeckoPriceProvider}, {@link CoinPaprikaPriceProvider}, {@link KrakenPriceProvider}
|
|
46
|
+
*
|
|
47
|
+
* @param maxAllowedFeeDiffPPM Maximum allowed price difference between returned swap prices & market prices
|
|
48
|
+
* @param assets Specifications of the assets
|
|
49
|
+
* @param cacheTimeout Timeout of the internal cache holding prices
|
|
50
|
+
*/
|
|
51
|
+
static createFromTokenMap<T extends MultiChain>(maxAllowedFeeDiffPPM: bigint, assets: RedundantSwapPriceAssets<T>, cacheTimeout?: number): RedundantSwapPrice<T>;
|
|
52
|
+
protected coinsDecimals: CoinDecimals<T>;
|
|
53
|
+
protected priceApis: {
|
|
54
|
+
priceApi: IPriceProvider<T>;
|
|
55
|
+
operational?: boolean;
|
|
56
|
+
}[];
|
|
57
|
+
constructor(maxAllowedFeeDiffPPM: bigint, coinsDecimals: CtorCoinDecimals<T>, priceApis: IPriceProvider<T>[], cacheTimeout?: number);
|
|
58
|
+
/**
|
|
59
|
+
* Returns price api that should be operational
|
|
60
|
+
*
|
|
61
|
+
* @private
|
|
62
|
+
*/
|
|
63
|
+
private getOperationalPriceApi;
|
|
64
|
+
/**
|
|
65
|
+
* Returns price apis that are maybe operational, in case none is considered operational returns all of the price
|
|
66
|
+
* apis such that they can be tested again whether they are operational
|
|
67
|
+
*
|
|
68
|
+
* @private
|
|
69
|
+
*/
|
|
70
|
+
private getMaybeOperationalPriceApis;
|
|
71
|
+
/**
|
|
72
|
+
* Fetches price in parallel from multiple maybe operational price APIs
|
|
73
|
+
*
|
|
74
|
+
* @param chainIdentifier
|
|
75
|
+
* @param token
|
|
76
|
+
* @param abortSignal
|
|
77
|
+
* @private
|
|
78
|
+
*/
|
|
79
|
+
private fetchPriceFromMaybeOperationalPriceApis;
|
|
80
|
+
/**
|
|
81
|
+
* Fetches the prices, first tries to use the operational price API (if any) and if that fails it falls back
|
|
82
|
+
* to using maybe operational price APIs
|
|
83
|
+
*
|
|
84
|
+
* @param chainIdentifier
|
|
85
|
+
* @param token
|
|
86
|
+
* @param abortSignal
|
|
87
|
+
* @protected
|
|
88
|
+
*/
|
|
89
|
+
protected fetchPrice<C extends ChainIds<T>>(chainIdentifier: C, token: string, abortSignal?: AbortSignal): Promise<bigint>;
|
|
90
|
+
/**
|
|
91
|
+
* @inheritDoc
|
|
92
|
+
*/
|
|
93
|
+
protected getDecimals<C extends ChainIds<T>>(chainIdentifier: C, token: string): number | null;
|
|
94
|
+
/**
|
|
95
|
+
* Fetches BTC price in USD in parallel from multiple maybe operational price APIs
|
|
96
|
+
*
|
|
97
|
+
* @param abortSignal
|
|
98
|
+
* @private
|
|
99
|
+
*/
|
|
100
|
+
private fetchUsdPriceFromMaybeOperationalPriceApis;
|
|
101
|
+
/**
|
|
102
|
+
* Fetches the USD prices, first tries to use the operational price API (if any) and if that fails it falls back
|
|
103
|
+
* to using maybe operational price APIs
|
|
104
|
+
*
|
|
105
|
+
* @param abortSignal
|
|
106
|
+
* @protected
|
|
107
|
+
*/
|
|
108
|
+
protected fetchUsdPrice(abortSignal?: AbortSignal): Promise<number>;
|
|
109
|
+
}
|
|
110
|
+
export {};
|
|
@@ -1,222 +1,222 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RedundantSwapPrice = void 0;
|
|
4
|
-
const BinancePriceProvider_1 = require("./providers/BinancePriceProvider");
|
|
5
|
-
const OKXPriceProvider_1 = require("./providers/OKXPriceProvider");
|
|
6
|
-
const CoinGeckoPriceProvider_1 = require("./providers/CoinGeckoPriceProvider");
|
|
7
|
-
const CoinPaprikaPriceProvider_1 = require("./providers/CoinPaprikaPriceProvider");
|
|
8
|
-
const Utils_1 = require("../utils/Utils");
|
|
9
|
-
const ICachedSwapPrice_1 = require("./abstract/ICachedSwapPrice");
|
|
10
|
-
const RequestError_1 = require("../errors/RequestError");
|
|
11
|
-
const KrakenPriceProvider_1 = require("./providers/KrakenPriceProvider");
|
|
12
|
-
const Logger_1 = require("../utils/Logger");
|
|
13
|
-
const RetryUtils_1 = require("../utils/RetryUtils");
|
|
14
|
-
const logger = (0, Logger_1.getLogger)("RedundantSwapPrice: ");
|
|
15
|
-
/**
|
|
16
|
-
* Swap price API using multiple price sources, handles errors on the APIs and automatically switches between them, such
|
|
17
|
-
* that there always is a functional API
|
|
18
|
-
*
|
|
19
|
-
* @category Pricing
|
|
20
|
-
*/
|
|
21
|
-
class RedundantSwapPrice extends ICachedSwapPrice_1.ICachedSwapPrice {
|
|
22
|
-
/**
|
|
23
|
-
* Creates a new {@link RedundantSwapPrice} instance from an asset list and other data, using all
|
|
24
|
-
* the available price providers: {@link BinancePriceProvider}, {@link OKXPriceProvider},
|
|
25
|
-
* {@link CoinGeckoPriceProvider}, {@link CoinPaprikaPriceProvider}, {@link KrakenPriceProvider}
|
|
26
|
-
*
|
|
27
|
-
* @param maxAllowedFeeDiffPPM Maximum allowed price difference between returned swap prices & market prices
|
|
28
|
-
* @param assets Specifications of the assets
|
|
29
|
-
* @param cacheTimeout Timeout of the internal cache holding prices
|
|
30
|
-
*/
|
|
31
|
-
static createFromTokenMap(maxAllowedFeeDiffPPM, assets, cacheTimeout) {
|
|
32
|
-
const priceApis = [
|
|
33
|
-
new BinancePriceProvider_1.BinancePriceProvider(assets.map(coinData => {
|
|
34
|
-
return {
|
|
35
|
-
coinId: coinData.binancePair,
|
|
36
|
-
chains: coinData.chains
|
|
37
|
-
};
|
|
38
|
-
})),
|
|
39
|
-
new OKXPriceProvider_1.OKXPriceProvider(assets.map(coinData => {
|
|
40
|
-
return {
|
|
41
|
-
coinId: coinData.okxPair,
|
|
42
|
-
chains: coinData.chains
|
|
43
|
-
};
|
|
44
|
-
})),
|
|
45
|
-
new CoinGeckoPriceProvider_1.CoinGeckoPriceProvider(assets.map(coinData => {
|
|
46
|
-
return {
|
|
47
|
-
coinId: coinData.coinGeckoCoinId,
|
|
48
|
-
chains: coinData.chains
|
|
49
|
-
};
|
|
50
|
-
})),
|
|
51
|
-
new CoinPaprikaPriceProvider_1.CoinPaprikaPriceProvider(assets.map(coinData => {
|
|
52
|
-
return {
|
|
53
|
-
coinId: coinData.coinPaprikaCoinId,
|
|
54
|
-
chains: coinData.chains
|
|
55
|
-
};
|
|
56
|
-
})),
|
|
57
|
-
new KrakenPriceProvider_1.KrakenPriceProvider(assets.map(coinData => {
|
|
58
|
-
return {
|
|
59
|
-
coinId: coinData.krakenPair,
|
|
60
|
-
chains: coinData.chains
|
|
61
|
-
};
|
|
62
|
-
}))
|
|
63
|
-
];
|
|
64
|
-
return new RedundantSwapPrice(maxAllowedFeeDiffPPM, assets, priceApis, cacheTimeout);
|
|
65
|
-
}
|
|
66
|
-
constructor(maxAllowedFeeDiffPPM, coinsDecimals, priceApis, cacheTimeout) {
|
|
67
|
-
super(maxAllowedFeeDiffPPM, cacheTimeout);
|
|
68
|
-
this.coinsDecimals = {};
|
|
69
|
-
for (let coinData of coinsDecimals) {
|
|
70
|
-
for (let chainId in coinData.chains) {
|
|
71
|
-
const { address, decimals } = coinData.chains[chainId];
|
|
72
|
-
this.coinsDecimals[chainId] ??= {};
|
|
73
|
-
this.coinsDecimals[chainId][address.toString()] = decimals;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
this.priceApis = priceApis.map(api => {
|
|
77
|
-
return {
|
|
78
|
-
priceApi: api
|
|
79
|
-
};
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Returns price api that should be operational
|
|
84
|
-
*
|
|
85
|
-
* @private
|
|
86
|
-
*/
|
|
87
|
-
getOperationalPriceApi() {
|
|
88
|
-
return this.priceApis.find(e => e.operational === true);
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Returns price apis that are maybe operational, in case none is considered operational returns all of the price
|
|
92
|
-
* apis such that they can be tested again whether they are operational
|
|
93
|
-
*
|
|
94
|
-
* @private
|
|
95
|
-
*/
|
|
96
|
-
getMaybeOperationalPriceApis() {
|
|
97
|
-
let operational = this.priceApis.filter(e => e.operational === true || e.operational === undefined);
|
|
98
|
-
if (operational.length === 0) {
|
|
99
|
-
this.priceApis.forEach(e => e.operational = undefined);
|
|
100
|
-
operational = this.priceApis;
|
|
101
|
-
}
|
|
102
|
-
return operational;
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* Fetches price in parallel from multiple maybe operational price APIs
|
|
106
|
-
*
|
|
107
|
-
* @param chainIdentifier
|
|
108
|
-
* @param token
|
|
109
|
-
* @param abortSignal
|
|
110
|
-
* @private
|
|
111
|
-
*/
|
|
112
|
-
async fetchPriceFromMaybeOperationalPriceApis(chainIdentifier, token, abortSignal) {
|
|
113
|
-
try {
|
|
114
|
-
return await (0, Utils_1.promiseAny)(this.getMaybeOperationalPriceApis().map(obj => (async () => {
|
|
115
|
-
try {
|
|
116
|
-
const price = await obj.priceApi.getPrice(chainIdentifier, token, abortSignal);
|
|
117
|
-
logger.debug("fetchPrice(): Price from " + obj.priceApi.constructor.name + ": ", price.toString(10));
|
|
118
|
-
obj.operational = true;
|
|
119
|
-
return price;
|
|
120
|
-
}
|
|
121
|
-
catch (e) {
|
|
122
|
-
if (abortSignal != null)
|
|
123
|
-
abortSignal.throwIfAborted();
|
|
124
|
-
obj.operational = false;
|
|
125
|
-
throw e;
|
|
126
|
-
}
|
|
127
|
-
})()));
|
|
128
|
-
}
|
|
129
|
-
catch (_e) {
|
|
130
|
-
const e = _e;
|
|
131
|
-
if (abortSignal != null)
|
|
132
|
-
abortSignal.throwIfAborted();
|
|
133
|
-
throw e.find(err => !(err instanceof RequestError_1.RequestError)) || e[0];
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
/**
|
|
137
|
-
* Fetches the prices, first tries to use the operational price API (if any) and if that fails it falls back
|
|
138
|
-
* to using maybe operational price APIs
|
|
139
|
-
*
|
|
140
|
-
* @param chainIdentifier
|
|
141
|
-
* @param token
|
|
142
|
-
* @param abortSignal
|
|
143
|
-
* @protected
|
|
144
|
-
*/
|
|
145
|
-
fetchPrice(chainIdentifier, token, abortSignal) {
|
|
146
|
-
return (0, RetryUtils_1.tryWithRetries)(async () => {
|
|
147
|
-
const operationalPriceApi = this.getOperationalPriceApi();
|
|
148
|
-
if (operationalPriceApi != null) {
|
|
149
|
-
try {
|
|
150
|
-
return await operationalPriceApi.priceApi.getPrice(chainIdentifier, token, abortSignal);
|
|
151
|
-
}
|
|
152
|
-
catch (err) {
|
|
153
|
-
if (abortSignal != null)
|
|
154
|
-
abortSignal.throwIfAborted();
|
|
155
|
-
operationalPriceApi.operational = false;
|
|
156
|
-
return await this.fetchPriceFromMaybeOperationalPriceApis(chainIdentifier, token, abortSignal);
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
return await this.fetchPriceFromMaybeOperationalPriceApis(chainIdentifier, token, abortSignal);
|
|
160
|
-
}, undefined, RequestError_1.RequestError, abortSignal);
|
|
161
|
-
}
|
|
162
|
-
/**
|
|
163
|
-
* @inheritDoc
|
|
164
|
-
*/
|
|
165
|
-
getDecimals(chainIdentifier, token) {
|
|
166
|
-
if (this.coinsDecimals[chainIdentifier] == null)
|
|
167
|
-
return null;
|
|
168
|
-
return this.coinsDecimals[chainIdentifier]?.[token.toString()] ?? null;
|
|
169
|
-
}
|
|
170
|
-
/**
|
|
171
|
-
* Fetches BTC price in USD in parallel from multiple maybe operational price APIs
|
|
172
|
-
*
|
|
173
|
-
* @param abortSignal
|
|
174
|
-
* @private
|
|
175
|
-
*/
|
|
176
|
-
async fetchUsdPriceFromMaybeOperationalPriceApis(abortSignal) {
|
|
177
|
-
try {
|
|
178
|
-
return await (0, Utils_1.promiseAny)(this.getMaybeOperationalPriceApis().map(obj => (async () => {
|
|
179
|
-
try {
|
|
180
|
-
const price = await obj.priceApi.getUsdPrice(abortSignal);
|
|
181
|
-
logger.debug("fetchPrice(): USD price from " + obj.priceApi.constructor.name + ": ", price.toString(10));
|
|
182
|
-
obj.operational = true;
|
|
183
|
-
return price;
|
|
184
|
-
}
|
|
185
|
-
catch (e) {
|
|
186
|
-
if (abortSignal != null)
|
|
187
|
-
abortSignal.throwIfAborted();
|
|
188
|
-
obj.operational = false;
|
|
189
|
-
throw e;
|
|
190
|
-
}
|
|
191
|
-
})()));
|
|
192
|
-
}
|
|
193
|
-
catch (_e) {
|
|
194
|
-
const e = _e;
|
|
195
|
-
if (abortSignal != null)
|
|
196
|
-
abortSignal.throwIfAborted();
|
|
197
|
-
throw e.find(err => !(err instanceof RequestError_1.RequestError)) || e[0];
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
/**
|
|
201
|
-
* Fetches the USD prices, first tries to use the operational price API (if any) and if that fails it falls back
|
|
202
|
-
* to using maybe operational price APIs
|
|
203
|
-
*
|
|
204
|
-
* @param abortSignal
|
|
205
|
-
* @protected
|
|
206
|
-
*/
|
|
207
|
-
fetchUsdPrice(abortSignal) {
|
|
208
|
-
return (0, RetryUtils_1.tryWithRetries)(() => {
|
|
209
|
-
const operationalPriceApi = this.getOperationalPriceApi();
|
|
210
|
-
if (operationalPriceApi != null) {
|
|
211
|
-
return operationalPriceApi.priceApi.getUsdPrice(abortSignal).catch(err => {
|
|
212
|
-
if (abortSignal != null)
|
|
213
|
-
abortSignal.throwIfAborted();
|
|
214
|
-
operationalPriceApi.operational = false;
|
|
215
|
-
return this.fetchUsdPriceFromMaybeOperationalPriceApis(abortSignal);
|
|
216
|
-
});
|
|
217
|
-
}
|
|
218
|
-
return this.fetchUsdPriceFromMaybeOperationalPriceApis(abortSignal);
|
|
219
|
-
}, undefined, RequestError_1.RequestError, abortSignal);
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
exports.RedundantSwapPrice = RedundantSwapPrice;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RedundantSwapPrice = void 0;
|
|
4
|
+
const BinancePriceProvider_1 = require("./providers/BinancePriceProvider");
|
|
5
|
+
const OKXPriceProvider_1 = require("./providers/OKXPriceProvider");
|
|
6
|
+
const CoinGeckoPriceProvider_1 = require("./providers/CoinGeckoPriceProvider");
|
|
7
|
+
const CoinPaprikaPriceProvider_1 = require("./providers/CoinPaprikaPriceProvider");
|
|
8
|
+
const Utils_1 = require("../utils/Utils");
|
|
9
|
+
const ICachedSwapPrice_1 = require("./abstract/ICachedSwapPrice");
|
|
10
|
+
const RequestError_1 = require("../errors/RequestError");
|
|
11
|
+
const KrakenPriceProvider_1 = require("./providers/KrakenPriceProvider");
|
|
12
|
+
const Logger_1 = require("../utils/Logger");
|
|
13
|
+
const RetryUtils_1 = require("../utils/RetryUtils");
|
|
14
|
+
const logger = (0, Logger_1.getLogger)("RedundantSwapPrice: ");
|
|
15
|
+
/**
|
|
16
|
+
* Swap price API using multiple price sources, handles errors on the APIs and automatically switches between them, such
|
|
17
|
+
* that there always is a functional API
|
|
18
|
+
*
|
|
19
|
+
* @category Pricing
|
|
20
|
+
*/
|
|
21
|
+
class RedundantSwapPrice extends ICachedSwapPrice_1.ICachedSwapPrice {
|
|
22
|
+
/**
|
|
23
|
+
* Creates a new {@link RedundantSwapPrice} instance from an asset list and other data, using all
|
|
24
|
+
* the available price providers: {@link BinancePriceProvider}, {@link OKXPriceProvider},
|
|
25
|
+
* {@link CoinGeckoPriceProvider}, {@link CoinPaprikaPriceProvider}, {@link KrakenPriceProvider}
|
|
26
|
+
*
|
|
27
|
+
* @param maxAllowedFeeDiffPPM Maximum allowed price difference between returned swap prices & market prices
|
|
28
|
+
* @param assets Specifications of the assets
|
|
29
|
+
* @param cacheTimeout Timeout of the internal cache holding prices
|
|
30
|
+
*/
|
|
31
|
+
static createFromTokenMap(maxAllowedFeeDiffPPM, assets, cacheTimeout) {
|
|
32
|
+
const priceApis = [
|
|
33
|
+
new BinancePriceProvider_1.BinancePriceProvider(assets.map(coinData => {
|
|
34
|
+
return {
|
|
35
|
+
coinId: coinData.binancePair,
|
|
36
|
+
chains: coinData.chains
|
|
37
|
+
};
|
|
38
|
+
})),
|
|
39
|
+
new OKXPriceProvider_1.OKXPriceProvider(assets.map(coinData => {
|
|
40
|
+
return {
|
|
41
|
+
coinId: coinData.okxPair,
|
|
42
|
+
chains: coinData.chains
|
|
43
|
+
};
|
|
44
|
+
})),
|
|
45
|
+
new CoinGeckoPriceProvider_1.CoinGeckoPriceProvider(assets.map(coinData => {
|
|
46
|
+
return {
|
|
47
|
+
coinId: coinData.coinGeckoCoinId,
|
|
48
|
+
chains: coinData.chains
|
|
49
|
+
};
|
|
50
|
+
})),
|
|
51
|
+
new CoinPaprikaPriceProvider_1.CoinPaprikaPriceProvider(assets.map(coinData => {
|
|
52
|
+
return {
|
|
53
|
+
coinId: coinData.coinPaprikaCoinId,
|
|
54
|
+
chains: coinData.chains
|
|
55
|
+
};
|
|
56
|
+
})),
|
|
57
|
+
new KrakenPriceProvider_1.KrakenPriceProvider(assets.map(coinData => {
|
|
58
|
+
return {
|
|
59
|
+
coinId: coinData.krakenPair,
|
|
60
|
+
chains: coinData.chains
|
|
61
|
+
};
|
|
62
|
+
}))
|
|
63
|
+
];
|
|
64
|
+
return new RedundantSwapPrice(maxAllowedFeeDiffPPM, assets, priceApis, cacheTimeout);
|
|
65
|
+
}
|
|
66
|
+
constructor(maxAllowedFeeDiffPPM, coinsDecimals, priceApis, cacheTimeout) {
|
|
67
|
+
super(maxAllowedFeeDiffPPM, cacheTimeout);
|
|
68
|
+
this.coinsDecimals = {};
|
|
69
|
+
for (let coinData of coinsDecimals) {
|
|
70
|
+
for (let chainId in coinData.chains) {
|
|
71
|
+
const { address, decimals } = coinData.chains[chainId];
|
|
72
|
+
this.coinsDecimals[chainId] ??= {};
|
|
73
|
+
this.coinsDecimals[chainId][address.toString()] = decimals;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
this.priceApis = priceApis.map(api => {
|
|
77
|
+
return {
|
|
78
|
+
priceApi: api
|
|
79
|
+
};
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Returns price api that should be operational
|
|
84
|
+
*
|
|
85
|
+
* @private
|
|
86
|
+
*/
|
|
87
|
+
getOperationalPriceApi() {
|
|
88
|
+
return this.priceApis.find(e => e.operational === true);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Returns price apis that are maybe operational, in case none is considered operational returns all of the price
|
|
92
|
+
* apis such that they can be tested again whether they are operational
|
|
93
|
+
*
|
|
94
|
+
* @private
|
|
95
|
+
*/
|
|
96
|
+
getMaybeOperationalPriceApis() {
|
|
97
|
+
let operational = this.priceApis.filter(e => e.operational === true || e.operational === undefined);
|
|
98
|
+
if (operational.length === 0) {
|
|
99
|
+
this.priceApis.forEach(e => e.operational = undefined);
|
|
100
|
+
operational = this.priceApis;
|
|
101
|
+
}
|
|
102
|
+
return operational;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Fetches price in parallel from multiple maybe operational price APIs
|
|
106
|
+
*
|
|
107
|
+
* @param chainIdentifier
|
|
108
|
+
* @param token
|
|
109
|
+
* @param abortSignal
|
|
110
|
+
* @private
|
|
111
|
+
*/
|
|
112
|
+
async fetchPriceFromMaybeOperationalPriceApis(chainIdentifier, token, abortSignal) {
|
|
113
|
+
try {
|
|
114
|
+
return await (0, Utils_1.promiseAny)(this.getMaybeOperationalPriceApis().map(obj => (async () => {
|
|
115
|
+
try {
|
|
116
|
+
const price = await obj.priceApi.getPrice(chainIdentifier, token, abortSignal);
|
|
117
|
+
logger.debug("fetchPrice(): Price from " + obj.priceApi.constructor.name + ": ", price.toString(10));
|
|
118
|
+
obj.operational = true;
|
|
119
|
+
return price;
|
|
120
|
+
}
|
|
121
|
+
catch (e) {
|
|
122
|
+
if (abortSignal != null)
|
|
123
|
+
abortSignal.throwIfAborted();
|
|
124
|
+
obj.operational = false;
|
|
125
|
+
throw e;
|
|
126
|
+
}
|
|
127
|
+
})()));
|
|
128
|
+
}
|
|
129
|
+
catch (_e) {
|
|
130
|
+
const e = _e;
|
|
131
|
+
if (abortSignal != null)
|
|
132
|
+
abortSignal.throwIfAborted();
|
|
133
|
+
throw e.find(err => !(err instanceof RequestError_1.RequestError)) || e[0];
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Fetches the prices, first tries to use the operational price API (if any) and if that fails it falls back
|
|
138
|
+
* to using maybe operational price APIs
|
|
139
|
+
*
|
|
140
|
+
* @param chainIdentifier
|
|
141
|
+
* @param token
|
|
142
|
+
* @param abortSignal
|
|
143
|
+
* @protected
|
|
144
|
+
*/
|
|
145
|
+
fetchPrice(chainIdentifier, token, abortSignal) {
|
|
146
|
+
return (0, RetryUtils_1.tryWithRetries)(async () => {
|
|
147
|
+
const operationalPriceApi = this.getOperationalPriceApi();
|
|
148
|
+
if (operationalPriceApi != null) {
|
|
149
|
+
try {
|
|
150
|
+
return await operationalPriceApi.priceApi.getPrice(chainIdentifier, token, abortSignal);
|
|
151
|
+
}
|
|
152
|
+
catch (err) {
|
|
153
|
+
if (abortSignal != null)
|
|
154
|
+
abortSignal.throwIfAborted();
|
|
155
|
+
operationalPriceApi.operational = false;
|
|
156
|
+
return await this.fetchPriceFromMaybeOperationalPriceApis(chainIdentifier, token, abortSignal);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return await this.fetchPriceFromMaybeOperationalPriceApis(chainIdentifier, token, abortSignal);
|
|
160
|
+
}, undefined, RequestError_1.RequestError, abortSignal);
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* @inheritDoc
|
|
164
|
+
*/
|
|
165
|
+
getDecimals(chainIdentifier, token) {
|
|
166
|
+
if (this.coinsDecimals[chainIdentifier] == null)
|
|
167
|
+
return null;
|
|
168
|
+
return this.coinsDecimals[chainIdentifier]?.[token.toString()] ?? null;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Fetches BTC price in USD in parallel from multiple maybe operational price APIs
|
|
172
|
+
*
|
|
173
|
+
* @param abortSignal
|
|
174
|
+
* @private
|
|
175
|
+
*/
|
|
176
|
+
async fetchUsdPriceFromMaybeOperationalPriceApis(abortSignal) {
|
|
177
|
+
try {
|
|
178
|
+
return await (0, Utils_1.promiseAny)(this.getMaybeOperationalPriceApis().map(obj => (async () => {
|
|
179
|
+
try {
|
|
180
|
+
const price = await obj.priceApi.getUsdPrice(abortSignal);
|
|
181
|
+
logger.debug("fetchPrice(): USD price from " + obj.priceApi.constructor.name + ": ", price.toString(10));
|
|
182
|
+
obj.operational = true;
|
|
183
|
+
return price;
|
|
184
|
+
}
|
|
185
|
+
catch (e) {
|
|
186
|
+
if (abortSignal != null)
|
|
187
|
+
abortSignal.throwIfAborted();
|
|
188
|
+
obj.operational = false;
|
|
189
|
+
throw e;
|
|
190
|
+
}
|
|
191
|
+
})()));
|
|
192
|
+
}
|
|
193
|
+
catch (_e) {
|
|
194
|
+
const e = _e;
|
|
195
|
+
if (abortSignal != null)
|
|
196
|
+
abortSignal.throwIfAborted();
|
|
197
|
+
throw e.find(err => !(err instanceof RequestError_1.RequestError)) || e[0];
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Fetches the USD prices, first tries to use the operational price API (if any) and if that fails it falls back
|
|
202
|
+
* to using maybe operational price APIs
|
|
203
|
+
*
|
|
204
|
+
* @param abortSignal
|
|
205
|
+
* @protected
|
|
206
|
+
*/
|
|
207
|
+
fetchUsdPrice(abortSignal) {
|
|
208
|
+
return (0, RetryUtils_1.tryWithRetries)(() => {
|
|
209
|
+
const operationalPriceApi = this.getOperationalPriceApi();
|
|
210
|
+
if (operationalPriceApi != null) {
|
|
211
|
+
return operationalPriceApi.priceApi.getUsdPrice(abortSignal).catch(err => {
|
|
212
|
+
if (abortSignal != null)
|
|
213
|
+
abortSignal.throwIfAborted();
|
|
214
|
+
operationalPriceApi.operational = false;
|
|
215
|
+
return this.fetchUsdPriceFromMaybeOperationalPriceApis(abortSignal);
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
return this.fetchUsdPriceFromMaybeOperationalPriceApis(abortSignal);
|
|
219
|
+
}, undefined, RequestError_1.RequestError, abortSignal);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
exports.RedundantSwapPrice = RedundantSwapPrice;
|