mirror of
https://github.com/Such-Software/hash-wallet.git
synced 2026-10-26 06:08:40 +01:00
move FiatConversionService to newer charts api (#3544)
* move FiatConversionService to newer charts api * remove debug print * disable strict parsing on getLatestPrice * fix for lack of toDouble * ci
This commit is contained in:
@@ -1,48 +1,6 @@
|
||||
import 'package:cw_core/utils/print_verbose.dart';
|
||||
import 'package:cw_core/utils/proxy_wrapper.dart';
|
||||
import "package:cake_wallet/new-ui/model/charts/price_api_client.dart";
|
||||
import 'package:cw_core/crypto_currency.dart';
|
||||
import 'package:cake_wallet/entities/fiat_currency.dart';
|
||||
import 'dart:convert';
|
||||
import 'package:cake_wallet/.secrets.g.dart' as secrets;
|
||||
|
||||
const _fiatApiClearNetAuthority = 'prices.cakewallet.com';
|
||||
const _fiatApiOnionAuthority = '46wisoe2uwipcj2j4og6smiq7hbmj34fkkrquwlzbbsqtgat7bf3erid.onion';
|
||||
const _fiatApiPath = '/v2/rates';
|
||||
|
||||
Future<double> _fetchPrice(String crypto, String fiat, bool torOnly) async {
|
||||
final Map<String, String> queryParams = {
|
||||
'interval_count': '1',
|
||||
'base': crypto.split(".").first,
|
||||
'quote': fiat,
|
||||
};
|
||||
|
||||
num price = 0.0;
|
||||
|
||||
try {
|
||||
final onionUri = Uri.http(_fiatApiOnionAuthority, _fiatApiPath, queryParams);
|
||||
final clearnetUri = Uri.https(_fiatApiClearNetAuthority, _fiatApiPath, queryParams);
|
||||
|
||||
final response = await ProxyWrapper()
|
||||
.get(onionUri: onionUri, clearnetUri: torOnly ? onionUri : clearnetUri, headers: {
|
||||
"x-api-key": secrets.fiatApiKey,
|
||||
});
|
||||
|
||||
if (response.statusCode != 200) {
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
final responseJSON = json.decode(response.body) as Map<String, dynamic>;
|
||||
final results = responseJSON['results'] as Map<String, dynamic>;
|
||||
|
||||
if (results.isNotEmpty) {
|
||||
price = results.values.first as num;
|
||||
}
|
||||
|
||||
return price.toDouble();
|
||||
} catch (e) {
|
||||
return price.toDouble();
|
||||
}
|
||||
}
|
||||
|
||||
/// Override specific [CryptoCurrency] to fix its price to the price of another
|
||||
/// e.g. nDEPS should have the same price as DEPS, but only DEPS is tracked
|
||||
@@ -57,5 +15,14 @@ class FiatConversionService {
|
||||
required FiatCurrency fiat,
|
||||
required bool torOnly,
|
||||
}) async =>
|
||||
await _fetchPrice(_overrideCryptoCurrency(crypto).toString(), fiat.toString(), torOnly);
|
||||
double.parse((await PriceApiClient.getLatestPrice(
|
||||
LatestPriceRequest(
|
||||
from: _overrideCryptoCurrency(crypto),
|
||||
to: fiat,
|
||||
),
|
||||
torOnly: torOnly,
|
||||
))
|
||||
?.quote
|
||||
.toString() ??
|
||||
"0");
|
||||
}
|
||||
|
||||
@@ -9,6 +9,21 @@ import "package:cw_core/utils/print_verbose.dart";
|
||||
import "package:cw_core/utils/proxy_wrapper.dart";
|
||||
|
||||
const priceApiHost = "prices.cakewallet.com";
|
||||
const priceApiHostOnion = "46wisoe2uwipcj2j4og6smiq7hbmj34fkkrquwlzbbsqtgat7bf3erid.onion";
|
||||
|
||||
class LatestPriceRequest {
|
||||
LatestPriceRequest({required this.from, required this.to});
|
||||
|
||||
final Currency from;
|
||||
final Currency to;
|
||||
|
||||
Uri get uri => Uri.https(priceApiHost, "/v3/rates", {
|
||||
"base": from.apiString,
|
||||
"quote": to.apiString,
|
||||
});
|
||||
|
||||
Uri get onionUri => Uri.https(priceApiHostOnion, uri.path, uri.queryParameters);
|
||||
}
|
||||
|
||||
class PriceRequest {
|
||||
const PriceRequest({
|
||||
@@ -33,6 +48,8 @@ class PriceRequest {
|
||||
"quote": from.apiString,
|
||||
"base": to.apiString,
|
||||
});
|
||||
|
||||
Uri get onionUri => Uri.https(priceApiHostOnion, uri.path, uri.queryParameters);
|
||||
}
|
||||
|
||||
class PriceApiClient {
|
||||
@@ -51,10 +68,10 @@ class PriceApiClient {
|
||||
}
|
||||
}
|
||||
|
||||
static Future<List<PriceData>> getPrices(PriceRequest request) async {
|
||||
static Future<List<PriceData>> getPrices(PriceRequest request, {bool torOnly = false}) async {
|
||||
final List<PriceData> ret = [];
|
||||
printV(request.uri);
|
||||
final data = await _getJson(request.uri);
|
||||
final data = await _getJson(torOnly ? request.onionUri : request.uri);
|
||||
if (data == null) {
|
||||
return [];
|
||||
}
|
||||
@@ -75,4 +92,24 @@ class PriceApiClient {
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static Future<PriceData?> getLatestPrice(
|
||||
LatestPriceRequest request, {
|
||||
bool torOnly = false,
|
||||
}) async {
|
||||
final data = await _getJson(torOnly ? request.onionUri : request.uri);
|
||||
if (data == null) {
|
||||
return null;
|
||||
}
|
||||
final results = data["results"] as Map<String, dynamic>?;
|
||||
if (results == null) {
|
||||
return null;
|
||||
}
|
||||
final result = results[results.keys.first];
|
||||
return PriceData(
|
||||
time: DateTime.now(),
|
||||
base: request.from,
|
||||
quote: Money.parse((result as num).toString(), request.to, strictParsing: false),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user