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

78 lines
1.6 KiB
TypeScript
Raw Normal View History

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,
};
class FreeCurrencyApi implements ConversionFeed {
private API_KEY: string;
2024-04-12 14:06:12 +09:00
private apiUrlPrefix: string = `https://api.freecurrencyapi.com/v1/`;
2024-04-12 14:06:12 +09:00
constructor(apiKey: string, paid = false) {
this.API_KEY = apiKey;
2024-04-12 14:06:12 +09:00
if (paid) {
this.apiUrlPrefix = `https://api.currencyapi.com/v3/`;
}
}
public async $getQuota(): Promise<any> {
2024-04-12 14:06:12 +09:00
const response = await query(`${this.apiUrlPrefix}status?apikey=${this.API_KEY}`);
if (response && response['quotas']) {
return response['quotas'];
}
return null;
}
public async $fetchLatestConversionRates(): Promise<ConversionRates> {
2024-04-12 14:06:12 +09:00
const response = await query(`${this.apiUrlPrefix}latest?apikey=${this.API_KEY}`);
if (response && response['data']) {
return response['data'];
}
return emptyRates;
}
public async $fetchConversionRates(date: string): Promise<ConversionRates> {
2024-04-12 14:06:12 +09:00
const response = await query(`${this.apiUrlPrefix}historical?date=${date}&apikey=${this.API_KEY}`);
if (response && response['data'] && response['data'][date]) {
return response['data'][date];
}
return emptyRates;
}
}
export default FreeCurrencyApi;