From 0e980693afaa24268b9a8658ad70496f2eeae8d9 Mon Sep 17 00:00:00 2001 From: siiky Date: Fri, 24 Nov 2023 18:26:46 +0000 Subject: [PATCH] feat: fallback to BitPay ticker --- lib/ticker.js | 42 ++++++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/lib/ticker.js b/lib/ticker.js index 86d77e6d..3fe9a7ad 100644 --- a/lib/ticker.js +++ b/lib/ticker.js @@ -14,26 +14,32 @@ const FETCH_INTERVAL = 58000 const PEGGED_FIAT_CURRENCIES = { NAD: 'ZAR' } -function _getRates (settings, fiatCode, cryptoCode) { - return Promise.resolve() - .then(() => { - const config = settings.config - const tickerName = configManager.getWalletSettings(cryptoCode, config).ticker - const market = [cryptoCode, fiatCode].join('-') +const FALLBACK_TICKER = 'bitpay' - return buildTicker(fiatCode, cryptoCode, tickerName) - .then(r => { - return lastRate[market] = { - rates: r.rates, - timestamp: Date.now() - } - }) - .catch(err => { - logger.error(err) - return lastRate[market] - }) +const hasRatesOrReject = r => _.get(['rates'], r) ? + r : + Promise.reject(new Error("Failed to get ticker rates")) + +const get1 = (market, fiatCode, cryptoCode, ticker) => + buildTicker(fiatCode, cryptoCode, ticker) + .then(hasRatesOrReject) + .then(({ rates }) => { + return lastRate[market] = { rates, timestamp: Date.now() } }) -} + +const _getRates = (settings, fiatCode, cryptoCode) => Promise.resolve() + .then(() => { + const ticker = configManager.getWalletSettings(cryptoCode, settings.config).ticker + const market = [cryptoCode, fiatCode].join('-') + return get1(market, fiatCode, cryptoCode, ticker) + .catch(err => { + logger.error(err) + return ticker === FALLBACK_TICKER ? + lastRate[market] : + get1(market, fiatCode, cryptoCode, FALLBACK_TICKER) + }) + .then(hasRatesOrReject) + }) function buildTicker (fiatCode, cryptoCode, tickerName) { fiatCode = _.defaultTo(fiatCode, _.get([fiatCode], PEGGED_FIAT_CURRENCIES))