2024-04-12 15:59:33 +09:00
|
|
|
import config from '../../config';
|
2024-03-07 10:48:32 +01:00
|
|
|
import { query } from '../../utils/axios-query';
|
|
|
|
import { ConversionFeed, ConversionRates } from '../price-updater';
|
|
|
|
|
|
|
|
const emptyRates = {
|
|
|
|
AUD: -1,
|
|
|
|
BGN: -1,
|
|
|
|
BRL: -1,
|
|
|
|
CAD: -1,
|
|
|
|
CHF: -1,
|
|
|
|
CNY: -1,
|
|
|
|
CZK: -1,
|
|
|
|
DKK: -1,
|
|
|
|
EUR: -1,
|
|
|
|
GBP: -1,
|
|
|
|
HKD: -1,
|
|
|
|
HRK: -1,
|
|
|
|
HUF: -1,
|
|
|
|
IDR: -1,
|
|
|
|
ILS: -1,
|
|
|
|
INR: -1,
|
|
|
|
ISK: -1,
|
|
|
|
JPY: -1,
|
|
|
|
KRW: -1,
|
|
|
|
MXN: -1,
|
|
|
|
MYR: -1,
|
|
|
|
NOK: -1,
|
|
|
|
NZD: -1,
|
|
|
|
PHP: -1,
|
|
|
|
PLN: -1,
|
|
|
|
RON: -1,
|
|
|
|
RUB: -1,
|
|
|
|
SEK: -1,
|
|
|
|
SGD: -1,
|
|
|
|
THB: -1,
|
|
|
|
TRY: -1,
|
2024-03-11 15:27:43 +01:00
|
|
|
USD: -1,
|
2024-03-07 10:48:32 +01:00
|
|
|
ZAR: -1,
|
|
|
|
};
|
|
|
|
|
2024-04-12 15:59:33 +09:00
|
|
|
type PaidCurrencyData = {
|
|
|
|
[key: string]: {
|
|
|
|
code: string;
|
|
|
|
value: number;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
type FreeCurrencyData = {
|
|
|
|
[key: string]: number;
|
|
|
|
};
|
|
|
|
|
2024-03-07 10:48:32 +01:00
|
|
|
class FreeCurrencyApi implements ConversionFeed {
|
2024-04-12 15:59:33 +09:00
|
|
|
private API_KEY = config.FIAT_PRICE.API_KEY;
|
|
|
|
private PAID = config.FIAT_PRICE.PAID;
|
|
|
|
private API_URL_PREFIX: string = this.PAID ? `https://api.currencyapi.com/v3/` : `https://api.freecurrencyapi.com/v1/`;
|
2024-03-07 10:48:32 +01:00
|
|
|
|
2024-04-12 15:59:33 +09:00
|
|
|
constructor() { }
|
2024-03-07 10:48:32 +01:00
|
|
|
|
|
|
|
public async $getQuota(): Promise<any> {
|
2024-04-12 15:59:33 +09:00
|
|
|
const response = await query(`${this.API_URL_PREFIX}status?apikey=${this.API_KEY}`);
|
2024-03-07 10:48:32 +01:00
|
|
|
if (response && response['quotas']) {
|
|
|
|
return response['quotas'];
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
public async $fetchLatestConversionRates(): Promise<ConversionRates> {
|
2024-04-12 15:59:33 +09:00
|
|
|
const response = await query(`${this.API_URL_PREFIX}latest?apikey=${this.API_KEY}`);
|
2024-03-07 10:48:32 +01:00
|
|
|
if (response && response['data']) {
|
2024-04-12 15:59:33 +09:00
|
|
|
if (this.PAID) {
|
|
|
|
response['data'] = this.convertData(response['data']);
|
|
|
|
}
|
2024-03-07 10:48:32 +01:00
|
|
|
return response['data'];
|
|
|
|
}
|
|
|
|
return emptyRates;
|
|
|
|
}
|
|
|
|
|
|
|
|
public async $fetchConversionRates(date: string): Promise<ConversionRates> {
|
2024-06-04 10:58:04 +02:00
|
|
|
const response = await query(`${this.API_URL_PREFIX}historical?date=${date}&apikey=${this.API_KEY}`, true);
|
2024-04-12 15:59:33 +09:00
|
|
|
if (response && response['data'] && (response['data'][date] || this.PAID)) {
|
|
|
|
if (this.PAID) {
|
|
|
|
response['data'] = this.convertData(response['data']);
|
|
|
|
response['data'][response['meta'].last_updated_at.substr(0, 10)] = response['data'];
|
|
|
|
}
|
2024-03-07 10:48:32 +01:00
|
|
|
return response['data'][date];
|
|
|
|
}
|
|
|
|
return emptyRates;
|
|
|
|
}
|
|
|
|
|
2024-04-12 15:59:33 +09:00
|
|
|
private convertData(data: PaidCurrencyData): FreeCurrencyData {
|
|
|
|
const simplifiedData: FreeCurrencyData = {};
|
|
|
|
for (const key in data) {
|
|
|
|
simplifiedData[key] = data[key].value;
|
|
|
|
}
|
|
|
|
return simplifiedData;
|
|
|
|
}
|
|
|
|
|
2024-03-07 10:48:32 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
export default FreeCurrencyApi;
|