mempool/backend/src/tasks/price-feeds/free-currency-api.ts

101 lines
2.3 KiB
TypeScript
Raw Normal View History

2024-04-12 15:59:33 +09:00
import config from '../../config';
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,
ZAR: -1,
};
2024-04-12 15:59:33 +09:00
type PaidCurrencyData = {
[key: string]: {
code: string;
value: number;
}
};
type FreeCurrencyData = {
[key: string]: number;
};
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-04-12 15:59:33 +09:00
constructor() { }
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}`);
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}`);
if (response && response['data']) {
2024-04-12 15:59:33 +09:00
if (this.PAID) {
response['data'] = this.convertData(response['data']);
}
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'];
}
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;
}
}
export default FreeCurrencyApi;