nifty-wallet/app/scripts/controllers/currency.js

71 lines
1.7 KiB
JavaScript
Raw Normal View History

const ObservableStore = require('obs-store')
const extend = require('xtend')
// every ten minutes
const POLLING_INTERVAL = 600000
class CurrencyController {
constructor (opts = {}) {
const initState = extend({
currentCurrency: 'usd',
conversionRate: 0,
conversionDate: 'N/A',
}, opts.initState)
this.store = new ObservableStore(initState)
}
//
// PUBLIC METHODS
//
getCurrentCurrency () {
return this.store.getState().currentCurrency
}
setCurrentCurrency (currentCurrency) {
this.store.updateState({ currentCurrency })
}
getConversionRate () {
return this.store.getState().conversionRate
}
setConversionRate (conversionRate) {
this.store.updateState({ conversionRate })
}
getConversionDate () {
return this.store.getState().conversionDate
}
setConversionDate (conversionDate) {
this.store.updateState({ conversionDate })
}
await updateConversionRate () {
try {
const currentCurrency = this.getCurrentCurrency()
const response = await fetch(`https://api.infura.io/v1/ticker/eth${currentCurrency.toLowerCase()}`)
const parsedResponse = await response.json()
2017-08-29 16:36:05 -07:00
this.setConversionRate(Number(parsedResponse.bid))
this.setConversionDate(Number(parsedResponse.timestamp))
} catch (err) {
console.warn(`MetaMask - Failed to query currency conversion:`, currentCurrency, err)
this.setConversionRate(0)
this.setConversionDate('N/A')
}
}
scheduleConversionInterval () {
if (this.conversionInterval) {
clearInterval(this.conversionInterval)
}
this.conversionInterval = setInterval(() => {
this.updateConversionRate()
}, POLLING_INTERVAL)
}
}
module.exports = CurrencyController