From cd135c95e393394957dc197d5802d48d5c5da1f7 Mon Sep 17 00:00:00 2001 From: Ivan Vershigora Date: Tue, 6 Jul 2021 16:07:47 +0300 Subject: [PATCH] ADD: IRR currency --- ios/Widgets/Shared/WidgetAPI.swift | 9 ++++++++- models/fiatUnit.js | 19 +++++++++++++++++++ models/fiatUnit.json | 6 ++++++ tests/integration/Currency.test.js | 8 +++++++- 4 files changed, 40 insertions(+), 2 deletions(-) diff --git a/ios/Widgets/Shared/WidgetAPI.swift b/ios/Widgets/Shared/WidgetAPI.swift index fc2e2655b..5719142a1 100644 --- a/ios/Widgets/Shared/WidgetAPI.swift +++ b/ios/Widgets/Shared/WidgetAPI.swift @@ -31,6 +31,8 @@ class WidgetAPI { urlString = "https://api.yadio.io/json/\(endPointKey)" case "BitcoinduLiban": urlString = "https://bitcoinduliban.org/api.php?key=lbpusd" + case "Exir": + urlString = "https://api.exir.io/v1/ticker?symbol=btc-irt" default: urlString = "https://api.coindesk.com/v1/bpi/currentprice/\(endPointKey).json" } @@ -59,7 +61,12 @@ class WidgetAPI { latestRateDataStore = WidgetDataStore(rate: String(rateDouble), lastUpdate: lastUpdatedString, rateDouble: rateDouble) case "BitcoinduLiban": guard let rateString = json["BTC/LBP"] as? String else { break } - guard let rateDouble = Double(rateString) else {return} + guard let rateDouble = Double(rateString) else { break } + let lastUpdatedString = ISO8601DateFormatter().string(from: Date()) + latestRateDataStore = WidgetDataStore(rate: rateString, lastUpdate: lastUpdatedString, rateDouble: rateDouble) + case "Exir": + guard let rateDouble = json["last"] as? Double else { break } + let rateString = String(rateDouble) let lastUpdatedString = ISO8601DateFormatter().string(from: Date()) latestRateDataStore = WidgetDataStore(rate: rateString, lastUpdate: lastUpdatedString, rateDouble: rateDouble) default: diff --git a/models/fiatUnit.js b/models/fiatUnit.js index 3595e7b8f..9526c3823 100644 --- a/models/fiatUnit.js +++ b/models/fiatUnit.js @@ -4,6 +4,7 @@ export const FiatUnitSource = Object.freeze({ CoinDesk: 'CoinDesk', Yadio: 'Yadio', BitcoinduLiban: 'BitcoinduLiban', + Exir: 'Exir', }); const RateExtractors = Object.freeze({ @@ -57,6 +58,24 @@ const RateExtractors = Object.freeze({ let rate = json?.[`BTC/${ticker}`]; if (!rate) throw new Error(`Could not update rate for ${ticker}: data is wrong`); + rate = Number(rate); + if (!(rate >= 0)) throw new Error(`Could not update rate for ${ticker}: data is wrong`); + return rate; + }, + Exir: async ticker => { + const api = new Frisbee({ baseURI: 'https://api.exir.io' }); + const res = await api.get('/v1/ticker?symbol=btc-irt'); + if (res.err) throw new Error(`Could not update rate for ${ticker}: ${res.err}`); + + let json; + try { + json = typeof res.body === 'string' ? JSON.parse(res.body) : res.body; + } catch (e) { + throw new Error(`Could not update rate for ${ticker}: ${e.message}`); + } + let rate = json?.last; + if (!rate) throw new Error(`Could not update rate for ${ticker}: data is wrong`); + rate = Number(rate); if (!(rate >= 0)) throw new Error(`Could not update rate for ${ticker}: data is wrong`); return rate; diff --git a/models/fiatUnit.json b/models/fiatUnit.json index d9b828b72..617bed235 100644 --- a/models/fiatUnit.json +++ b/models/fiatUnit.json @@ -113,6 +113,12 @@ "locale": "hi-HN", "source": "CoinDesk" }, + "IRR": { + "endPointKey": "IRR", + "symbol": "﷼", + "locale": "fa-IR", + "source": "Exir" + }, "JPY": { "endPointKey": "JPY", "symbol": "¥", diff --git a/tests/integration/Currency.test.js b/tests/integration/Currency.test.js index a23e0644d..971de5556 100644 --- a/tests/integration/Currency.test.js +++ b/tests/integration/Currency.test.js @@ -38,7 +38,13 @@ describe('currency', () => { // disabled, because it throws "Service Temporarily Unavailable" on circleci // await currency.setPrefferedCurrency(FiatUnit.LBP); // await currency.startUpdater(); - // cur = JSON.parse(await AsyncStorage.getItem(AppStorage.EXCHANGE_RATES)); + // cur = JSON.parse(await AsyncStorage.getItem(currency.EXCHANGE_RATES)); // assert.ok(cur.BTC_LBP > 0); + + // test Exir rate source + await currency.setPrefferedCurrency(FiatUnit.IRR); + await currency.startUpdater(); + cur = JSON.parse(await AsyncStorage.getItem(currency.EXCHANGE_RATES)); + assert.ok(cur.BTC_IRR > 0); }); });