UNPKG

@qso-soft/shared

Version:

Shared library for QSO-soft

87 lines 2.81 kB
import axios from 'axios'; import { CRYPTO_COMPARE_URL, GECKO_REQ_URL } from '../../constants/urls'; import { sleep } from '../utils'; const SLEEP_BETWEEN_FAIL = 10; export var CoingeckoCoins; (function (CoingeckoCoins) { CoingeckoCoins["ETH"] = "ethereum"; CoingeckoCoins["AVAX"] = "avalanche-2"; CoingeckoCoins["MATIC"] = "matic-network"; })(CoingeckoCoins || (CoingeckoCoins = {})); var Coins; (function (Coins) { Coins["ETH"] = "ETH"; Coins["AVAX"] = "AVAX"; Coins["MATIC"] = "MATIC"; })(Coins || (Coins = {})); export const getCoinsPriceCoingecko = async (props) => { const { coins, logger } = props; const coinPrices = { AVAX: 0, MATIC: 0, ETH: 0, }; try { const response = await axios.get(GECKO_REQ_URL, { params: { ids: coins.join(), vs_currencies: 'usd', }, }); for (const key in response.data) { const coin = key; const USD = response.data[coin].usd; switch (coin) { case CoingeckoCoins.AVAX: coinPrices.AVAX = USD; break; case CoingeckoCoins.ETH: coinPrices.ETH = USD; break; case CoingeckoCoins.MATIC: coinPrices.MATIC = USD; break; default: break; } } } catch (err) { const errorMsg = err.message; console.error(errorMsg); logger.error(`Unable to get ${coins} price`, { action: 'getCoinPrice', status: 'failed' }); await sleep(SLEEP_BETWEEN_FAIL); await getCoinsPriceCoingecko(props); } return coinPrices; }; export const getCoinPriceCryptoCompare = async (props) => { const { coin, logger } = props; let coinPrice = null; while (!coinPrice) { try { const response = await axios.get(`${CRYPTO_COMPARE_URL}`, { params: { fsym: coin, tsyms: 'USD', }, }); if (response.data.Response === 'Error') { throw new Error(response.data.Message); } coinPrice = response.data.USD; } catch (err) { const errorMsg = err.message; console.error(errorMsg); logger.error(`Unable to get ${coin} price`, { action: 'getCoinPrice', status: 'failed' }); await sleep(SLEEP_BETWEEN_FAIL); } } return coinPrice; }; export const getEthPrice = async (logger) => { const response = await getCoinsPriceCoingecko({ logger, coins: [CoingeckoCoins.ETH] }); return response.ETH; }; //# sourceMappingURL=coin-price.js.map