UNPKG

954 BPlain TextView Raw
1
2import fetch from 'node-fetch'
3import ECBBackend from './ecb'
4import { fromPairs } from 'lodash'
5
6const COINMARKETCAP_API = 'https://api.coinmarketcap.com/v1/ticker/'
7const ROUNDING_FACTOR = 100000000
8
9export default class ECBAndCoinMarketCapBackend extends ECBBackend {
10 async connect () {
11 await super.connect()
12 const ccRates = await this._getCCRates(this.rates.USD)
13 Object.assign(this.rates, ccRates)
14 this.currencies = this.currencies.concat(Object.keys(ccRates))
15 this.currencies.sort()
16 }
17
18 private async _getCCRates (usdRate: number) {
19 const rateRes = await fetch(COINMARKETCAP_API)
20 if (rateRes.status !== 200) {
21 throw new Error('Unexpected status from coinmarketcap.com: ' + rateRes.status)
22 }
23 const body = await rateRes.json()
24 return fromPairs(body.map((rateInfo: any) => {
25 return [rateInfo.symbol, Math.floor(ROUNDING_FACTOR / (rateInfo.price_usd * usdRate)) / ROUNDING_FACTOR]
26 }))
27 }
28}