aboutsummaryrefslogtreecommitdiffstats
path: root/app/scripts/controllers
diff options
context:
space:
mode:
authorPaul Bouchon <mail@bitpshr.net>2019-06-01 06:14:22 +0800
committerGitHub <noreply@github.com>2019-06-01 06:14:22 +0800
commit47024fd9a530c1554cfa74c8e74f6221e00c6135 (patch)
tree4abdaecc6c3de3f6ab6ff83268bf8b93cdee5e8d /app/scripts/controllers
parent44616befc71bc561887569ae7b523831ab470487 (diff)
downloadtangerine-wallet-browser-47024fd9a530c1554cfa74c8e74f6221e00c6135.tar
tangerine-wallet-browser-47024fd9a530c1554cfa74c8e74f6221e00c6135.tar.gz
tangerine-wallet-browser-47024fd9a530c1554cfa74c8e74f6221e00c6135.tar.bz2
tangerine-wallet-browser-47024fd9a530c1554cfa74c8e74f6221e00c6135.tar.lz
tangerine-wallet-browser-47024fd9a530c1554cfa74c8e74f6221e00c6135.tar.xz
tangerine-wallet-browser-47024fd9a530c1554cfa74c8e74f6221e00c6135.tar.zst
tangerine-wallet-browser-47024fd9a530c1554cfa74c8e74f6221e00c6135.zip
feature: integrate gaba/CurrencyRateController (#6570)
Diffstat (limited to 'app/scripts/controllers')
-rw-r--r--app/scripts/controllers/currency.js205
-rw-r--r--app/scripts/controllers/token-rates.js2
2 files changed, 1 insertions, 206 deletions
diff --git a/app/scripts/controllers/currency.js b/app/scripts/controllers/currency.js
deleted file mode 100644
index fce65fd9c..000000000
--- a/app/scripts/controllers/currency.js
+++ /dev/null
@@ -1,205 +0,0 @@
-const ObservableStore = require('obs-store')
-const extend = require('xtend')
-const log = require('loglevel')
-
-// every ten minutes
-const POLLING_INTERVAL = 600000
-
-class CurrencyController {
-
- /**
- * Controller responsible for managing data associated with the currently selected currency.
- *
- * @typedef {Object} CurrencyController
- * @param {object} opts Overrides the defaults for the initial state of this.store
- * @property {array} opts.initState initializes the the state of the CurrencyController. Can contain an
- * currentCurrency, conversionRate and conversionDate properties
- * @property {string} currentCurrency A 2-4 character shorthand that describes a specific currency, currently
- * selected by the user
- * @property {number} conversionRate The conversion rate from ETH to the selected currency.
- * @property {string} conversionDate The date at which the conversion rate was set. Expressed in in milliseconds
- * since midnight of January 1, 1970
- * @property {number} conversionInterval The id of the interval created by the scheduleConversionInterval method.
- * Used to clear an existing interval on subsequent calls of that method.
- * @property {string} nativeCurrency The ticker/symbol of the native chain currency
- *
- */
- constructor (opts = {}) {
- const initState = extend({
- currentCurrency: 'usd',
- conversionRate: 0,
- conversionDate: 'N/A',
- nativeCurrency: 'ETH',
- }, opts.initState)
- this.store = new ObservableStore(initState)
- }
-
- //
- // PUBLIC METHODS
- //
-
- /**
- * A getter for the nativeCurrency property
- *
- * @returns {string} A 2-4 character shorthand that describes the specific currency
- *
- */
- getNativeCurrency () {
- return this.store.getState().nativeCurrency
- }
-
- /**
- * A setter for the nativeCurrency property
- *
- * @param {string} nativeCurrency The new currency to set as the nativeCurrency in the store
- *
- */
- setNativeCurrency (nativeCurrency) {
- this.store.updateState({
- nativeCurrency,
- ticker: nativeCurrency,
- })
- }
-
- /**
- * A getter for the currentCurrency property
- *
- * @returns {string} A 2-4 character shorthand that describes a specific currency, currently selected by the user
- *
- */
- getCurrentCurrency () {
- return this.store.getState().currentCurrency
- }
-
- /**
- * A setter for the currentCurrency property
- *
- * @param {string} currentCurrency The new currency to set as the currentCurrency in the store
- *
- */
- setCurrentCurrency (currentCurrency) {
- this.store.updateState({ currentCurrency })
- }
-
- /**
- * A getter for the conversionRate property
- *
- * @returns {string} The conversion rate from ETH to the selected currency.
- *
- */
- getConversionRate () {
- return this.store.getState().conversionRate
- }
-
- /**
- * A setter for the conversionRate property
- *
- * @param {number} conversionRate The new rate to set as the conversionRate in the store
- *
- */
- setConversionRate (conversionRate) {
- this.store.updateState({ conversionRate })
- }
-
- /**
- * A getter for the conversionDate property
- *
- * @returns {string} The date at which the conversion rate was set. Expressed in milliseconds since midnight of
- * January 1, 1970
- *
- */
- getConversionDate () {
- return this.store.getState().conversionDate
- }
-
- /**
- * A setter for the conversionDate property
- *
- * @param {number} conversionDate The date, expressed in milliseconds since midnight of January 1, 1970, that the
- * conversionRate was set
- *
- */
- setConversionDate (conversionDate) {
- this.store.updateState({ conversionDate })
- }
-
- /**
- * Updates the conversionRate and conversionDate properties associated with the currentCurrency. Updated info is
- * fetched from an external API
- *
- */
- async updateConversionRate () {
- let currentCurrency, nativeCurrency
- try {
- currentCurrency = this.getCurrentCurrency()
- nativeCurrency = this.getNativeCurrency()
- // select api
- let apiUrl
- if (nativeCurrency === 'ETH') {
- // ETH
- apiUrl = `https://api.infura.io/v1/ticker/eth${currentCurrency.toLowerCase()}`
- } else {
- // ETC
- apiUrl = `https://min-api.cryptocompare.com/data/price?fsym=${nativeCurrency.toUpperCase()}&tsyms=${currentCurrency.toUpperCase()}`
- }
- // attempt request
- let response
- try {
- response = await fetch(apiUrl)
- } catch (err) {
- log.error(new Error(`CurrencyController - Failed to request currency from Infura:\n${err.stack}`))
- return
- }
- // parse response
- let rawResponse
- let parsedResponse
- try {
- rawResponse = await response.text()
- parsedResponse = JSON.parse(rawResponse)
- } catch (err) {
- log.error(new Error(`CurrencyController - Failed to parse response "${rawResponse}"`))
- return
- }
- // set conversion rate
- if (nativeCurrency === 'ETH') {
- // ETH
- this.setConversionRate(Number(parsedResponse.bid))
- this.setConversionDate(Number(parsedResponse.timestamp))
- } else {
- // ETC
- if (parsedResponse[currentCurrency.toUpperCase()]) {
- this.setConversionRate(Number(parsedResponse[currentCurrency.toUpperCase()]))
- this.setConversionDate(parseInt((new Date()).getTime() / 1000))
- } else {
- this.setConversionRate(0)
- this.setConversionDate('N/A')
- }
- }
- } catch (err) {
- // reset current conversion rate
- log.warn(`MetaMask - Failed to query currency conversion:`, nativeCurrency, currentCurrency, err)
- this.setConversionRate(0)
- this.setConversionDate('N/A')
- // throw error
- log.error(new Error(`CurrencyController - Failed to query rate for currency "${currentCurrency}":\n${err.stack}`))
- return
- }
- }
-
- /**
- * Creates a new poll, using setInterval, to periodically call updateConversionRate. The id of the interval is
- * stored at the controller's conversionInterval property. If it is called and such an id already exists, the
- * previous interval is clear and a new one is created.
- *
- */
- scheduleConversionInterval () {
- if (this.conversionInterval) {
- clearInterval(this.conversionInterval)
- }
- this.conversionInterval = setInterval(() => {
- this.updateConversionRate()
- }, POLLING_INTERVAL)
- }
-}
-
-module.exports = CurrencyController
diff --git a/app/scripts/controllers/token-rates.js b/app/scripts/controllers/token-rates.js
index 6b6265dba..9b86a9ebf 100644
--- a/app/scripts/controllers/token-rates.js
+++ b/app/scripts/controllers/token-rates.js
@@ -30,7 +30,7 @@ class TokenRatesController {
async updateExchangeRates () {
if (!this.isActive) { return }
const contractExchangeRates = {}
- const nativeCurrency = this.currency ? this.currency.getState().nativeCurrency.toLowerCase() : 'eth'
+ const nativeCurrency = this.currency ? this.currency.state.nativeCurrency.toLowerCase() : 'eth'
const pairs = this._tokens.map(token => token.address).join(',')
const query = `contract_addresses=${pairs}&vs_currencies=${nativeCurrency}`
if (this._tokens.length > 0) {