Merge pull request #1618 from siiky/feat/lam-961/fallback-ticker
LAM-961 [8.6] feat: add ticker fallback
This commit is contained in:
commit
49d6760ae7
3 changed files with 39 additions and 28 deletions
|
|
@ -57,8 +57,8 @@ function postProcess (txVector, justAuthorized, pi) {
|
|||
|
||||
if ((newTx.dispense && !oldTx.dispense) || (newTx.redeem && !oldTx.redeem)) {
|
||||
return pi.buildAvailableUnits(newTx.id)
|
||||
.then(_units => {
|
||||
const units = _.concat(_units.cassettes, _units.recyclers)
|
||||
.then(units => {
|
||||
units = _.concat(units.cassettes, units.recyclers)
|
||||
logger.silly('Computing bills to dispense:', {
|
||||
txId: newTx.id,
|
||||
units: units,
|
||||
|
|
|
|||
|
|
@ -274,12 +274,16 @@ function plugins (settings, deviceId) {
|
|||
}
|
||||
}
|
||||
|
||||
function getTickerRates (fiatCode, cryptoCode) {
|
||||
return ticker.getRates(settings, fiatCode, cryptoCode)
|
||||
}
|
||||
|
||||
function pollQueries () {
|
||||
const localeConfig = configManager.getLocale(deviceId, settings.config)
|
||||
const fiatCode = localeConfig.fiatCurrency
|
||||
const cryptoCodes = localeConfig.cryptoCurrencies
|
||||
|
||||
const tickerPromises = cryptoCodes.map(c => ticker.getRates(settings, fiatCode, c))
|
||||
const tickerPromises = cryptoCodes.map(c => getTickerRates(fiatCode, c))
|
||||
const balancePromises = cryptoCodes.map(c => fiatBalance(fiatCode, c))
|
||||
const networkPromises = cryptoCodes.map(c => wallet.cryptoNetwork(settings, c))
|
||||
const supportsBatchingPromise = cryptoCodes.map(c => wallet.supportsBatching(settings, c))
|
||||
|
|
@ -394,7 +398,7 @@ function plugins (settings, deviceId) {
|
|||
function fiatBalance (fiatCode, cryptoCode) {
|
||||
const commissions = configManager.getCommissions(cryptoCode, deviceId, settings.config)
|
||||
return Promise.all([
|
||||
ticker.getRates(settings, fiatCode, cryptoCode),
|
||||
getTickerRates(fiatCode, cryptoCode),
|
||||
wallet.balance(settings, cryptoCode)
|
||||
])
|
||||
.then(([rates, balanceRec]) => {
|
||||
|
|
@ -965,7 +969,7 @@ function plugins (settings, deviceId) {
|
|||
const fiatCode = localeConfig.fiatCurrency
|
||||
|
||||
const cryptoCodes = configManager.getAllCryptoCurrencies(settings.config)
|
||||
const tickerPromises = cryptoCodes.map(c => ticker.getRates(settings, fiatCode, c))
|
||||
const tickerPromises = cryptoCodes.map(c => getTickerRates(fiatCode, c))
|
||||
|
||||
return Promise.all(tickerPromises)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,33 +14,40 @@ 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 getFallbackTicker = ticker =>
|
||||
_.difference(['bitpay', 'kraken', 'bitstamp'], [ticker])[0]
|
||||
|
||||
return buildTicker(fiatCode, cryptoCode, tickerName)
|
||||
.then(r => ({
|
||||
rates: r.rates,
|
||||
timestamp: Date.now()
|
||||
}))
|
||||
.then(r => {
|
||||
lastRate[market] = r
|
||||
return r
|
||||
})
|
||||
.catch(err => {
|
||||
logger.error(err)
|
||||
return lastRate[market]
|
||||
})
|
||||
const hasRatesOrReject = emsg => r => _.get(['rates'], r) ?
|
||||
r :
|
||||
Promise.reject(new Error(emsg))
|
||||
|
||||
const get1 = (market, fiatCode, cryptoCode, ticker, emsg) =>
|
||||
buildTicker(fiatCode, cryptoCode, ticker)
|
||||
.then(hasRatesOrReject(emsg))
|
||||
.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('-')
|
||||
const fallbackTicker = getFallbackTicker(ticker)
|
||||
const emsg = fallbackTicker ?
|
||||
"Failed to get rates with configured ticker, trying fallback" :
|
||||
"Failed to get ticker rates"
|
||||
return get1(market, fiatCode, cryptoCode, ticker, emsg)
|
||||
.catch(err => {
|
||||
logger.error(err)
|
||||
return fallbackTicker ?
|
||||
get1(market, fiatCode, cryptoCode, fallbackTicker, "Failed to get rates with fallback ticker") :
|
||||
lastRate[market]
|
||||
})
|
||||
.then(hasRatesOrReject("Failed to get ticker rates"))
|
||||
})
|
||||
|
||||
function buildTicker (fiatCode, cryptoCode, tickerName) {
|
||||
fiatCode = _.includes(fiatCode, _.keys(PEGGED_FIAT_CURRENCIES))
|
||||
? PEGGED_FIAT_CURRENCIES[fiatCode]
|
||||
: fiatCode
|
||||
fiatCode = _.defaultTo(fiatCode, _.get([fiatCode], PEGGED_FIAT_CURRENCIES))
|
||||
cryptoCode = coinUtils.getEquivalentCode(cryptoCode)
|
||||
|
||||
if (tickerName === 'bitpay') return bitpay.ticker(fiatCode, cryptoCode)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue