@qso-soft/shared
Version:
Shared library for QSO-soft
87 lines • 2.81 kB
JavaScript
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