diff --git a/public/data/appConfig.json b/public/data/appConfig.json index 08460609..ecce7034 100644 --- a/public/data/appConfig.json +++ b/public/data/appConfig.json @@ -59,11 +59,11 @@ "fiatValueTickers": [ { "network": "eth", - "url": "https://api.coinmarketcap.com/v1/ticker/ethereum/" + "url": "https://api.coingecko.com/api/v3/coins/ethereum" }, { "network": "etc", - "url": "https://api.coinmarketcap.com/v1/ticker/ethereum-classic/" + "url": "https://api.coingecko.com/api/v3/coins/ethereum-classic" } ], diff --git a/src/flowtype/index.js b/src/flowtype/index.js index f262aa49..e3eef1b7 100644 --- a/src/flowtype/index.js +++ b/src/flowtype/index.js @@ -31,7 +31,7 @@ import type { TokenAction } from 'actions/TokenActions'; import type { TrezorConnectAction } from 'actions/TrezorConnectActions'; import type { WalletAction } from 'actions/WalletActions'; import type { Web3Action } from 'actions/Web3Actions'; -import type { FiatRateAction } from 'services/CoinmarketcapService'; // this service has no action file, all is written inside one file +import type { FiatRateAction } from 'services/TickerService'; // this service has no action file, all is written inside one file import type { Device, diff --git a/src/reducers/FiatRateReducer.js b/src/reducers/FiatRateReducer.js index af190d11..2f63a69d 100644 --- a/src/reducers/FiatRateReducer.js +++ b/src/reducers/FiatRateReducer.js @@ -1,9 +1,9 @@ /* @flow */ -import { RATE_UPDATE } from 'services/CoinmarketcapService'; +import { RATE_UPDATE } from 'services/TickerService'; import type { Action } from 'flowtype'; -import type { FiatRateAction } from 'services/CoinmarketcapService'; +import type { FiatRateAction } from 'services/TickerService'; export type Fiat = { +network: string; @@ -14,15 +14,11 @@ export const initialState: Array = []; const update = (state: Array, action: FiatRateAction): Array => { const newState: Array = [...state]; - const exists: ?Fiat = newState.find(f => f.network === action.network); - if (exists) { - exists.value = action.rate.price_usd; - } else { - newState.push({ - network: action.network, - value: action.rate.price_usd, - }); - } + newState.push({ + network: action.network, + value: action.rate.current_price.usd, + }); + console.log('newState', newState); return newState; }; diff --git a/src/services/CoinmarketcapService.js b/src/services/CoinmarketcapService.js index d6c0e9ea..a35b50b7 100644 --- a/src/services/CoinmarketcapService.js +++ b/src/services/CoinmarketcapService.js @@ -30,6 +30,7 @@ const loadRateAction = (): AsyncAction => async (dispatch: Dispatch, getState: G config.fiatValueTickers.forEach(async (ticker) => { // const rate: ?Array = await JSONRequest(`${ticker.url}?convert=USD`, 'json'); const rate: ?Array = await httpRequest(`${ticker.url}?convert=USD`, 'json'); + console.log('rate'); if (rate) { dispatch({ type: RATE_UPDATE, diff --git a/src/services/TickerService.js b/src/services/TickerService.js new file mode 100644 index 00000000..42a71dd7 --- /dev/null +++ b/src/services/TickerService.js @@ -0,0 +1,60 @@ +/* @flow */ + +import { httpRequest } from 'utils/networkUtils'; +import { resolveAfter } from 'utils/promiseUtils'; +import { READY } from 'actions/constants/localStorage'; + +import type { + Middleware, + MiddlewareAPI, + MiddlewareDispatch, + Dispatch, + Action, + AsyncAction, + GetState, +} from 'flowtype'; + +export const RATE_UPDATE: 'rate__update' = 'rate__update'; + +export type FiatRateAction = { + type: typeof RATE_UPDATE; + network: string; + rate: any; +} + +const loadRateAction = (): AsyncAction => async (dispatch: Dispatch, getState: GetState): Promise => { + const { config } = getState().localStorage; + if (!config) return; + + try { + config.fiatValueTickers.forEach(async (ticker) => { + const response: ?Array = await httpRequest(`${ticker.url}?tickers=false&market_data=true&community_data=false&developer_data=false&sparkline=false`, 'json'); + if (response) { + console.log({ + type: RATE_UPDATE, + network: response.symbol, + rate: response.market_data, + }); + } + }); + } catch (error) { + // ignore error + } + + await resolveAfter(50000); +}; + +/** + * Middleware + */ +const TickerService: Middleware = (api: MiddlewareAPI) => (next: MiddlewareDispatch) => (action: Action): Action => { + next(action); + + if (action.type === READY) { + api.dispatch(loadRateAction()); + } + + return action; +}; + +export default TickerService; \ No newline at end of file diff --git a/src/services/index.js b/src/services/index.js index b2ed5a5b..c7b51c8f 100644 --- a/src/services/index.js +++ b/src/services/index.js @@ -2,7 +2,7 @@ import WalletService from './WalletService'; import LogService from './LogService'; import RouterService from './RouterService'; import LocalStorageService from './LocalStorageService'; -import CoinmarketcapService from './CoinmarketcapService'; +import TickerService from './TickerService'; import TrezorConnectService from './TrezorConnectService'; export default [ @@ -11,5 +11,5 @@ export default [ RouterService, LocalStorageService, TrezorConnectService, - CoinmarketcapService, + TickerService, ]; \ No newline at end of file