Browse Source

feat(coingecko.service): Add API key support

Add an environment variable to inject an API key for Coingecko datasource.
pull/2827/head
Tanguy Herbron 2 years ago
committed by Thomas Kaul
parent
commit
67d9baa846
  1. 1
      apps/api/src/services/configuration/configuration.service.ts
  2. 17
      apps/api/src/services/data-provider/coingecko/coingecko.service.ts
  3. 1
      apps/api/src/services/interfaces/environment.interface.ts

1
apps/api/src/services/configuration/configuration.service.ts

@ -15,6 +15,7 @@ export class ConfigurationService {
BETTER_UPTIME_API_KEY: str({ default: '' }),
CACHE_QUOTES_TTL: num({ default: 1 }),
CACHE_TTL: num({ default: 1 }),
COINGECKO_API_KEY: str({ default: '' }),
DATA_SOURCE_EXCHANGE_RATES: str({ default: DataSource.YAHOO }),
DATA_SOURCE_IMPORT: str({ default: DataSource.YAHOO }),
DATA_SOURCES: json({

17
apps/api/src/services/data-provider/coingecko/coingecko.service.ts

@ -21,11 +21,14 @@ import got from 'got';
@Injectable()
export class CoinGeckoService implements DataProviderInterface {
private apiKey: string;
private readonly URL = 'https://api.coingecko.com/api/v3';
public constructor(
private readonly configurationService: ConfigurationService
) {}
) {
this.apiKey = this.configurationService.get('COINGECKO_API_KEY');
}
public canHandle(symbol: string) {
return true;
@ -49,7 +52,8 @@ export class CoinGeckoService implements DataProviderInterface {
abortController.abort();
}, this.configurationService.get('REQUEST_TIMEOUT'));
const { name } = await got(`${this.URL}/coins/${aSymbol}`, {
const { name } = await got(`${this.URL}/coins/${aSymbol
}?x_cg_demo_api_key=${this.apiKey}`, {
// @ts-ignore
signal: abortController.signal
}).json<any>();
@ -104,7 +108,8 @@ export class CoinGeckoService implements DataProviderInterface {
this.URL
}/coins/${aSymbol}/market_chart/range?vs_currency=${DEFAULT_CURRENCY.toLowerCase()}&from=${getUnixTime(
from
)}&to=${getUnixTime(to)}`,
)}&to=${getUnixTime(to)
}?x_cg_demo_api_key=${this.apiKey}`,
{
// @ts-ignore
signal: abortController.signal
@ -165,7 +170,8 @@ export class CoinGeckoService implements DataProviderInterface {
const quotes = await got(
`${this.URL}/simple/price?ids=${symbols.join(
','
)}&vs_currencies=${DEFAULT_CURRENCY.toLowerCase()}`,
)}&vs_currencies=${DEFAULT_CURRENCY.toLowerCase()
}?x_cg_demo_api_key=${this.apiKey}`,
{
// @ts-ignore
signal: abortController.signal
@ -216,7 +222,8 @@ export class CoinGeckoService implements DataProviderInterface {
abortController.abort();
}, this.configurationService.get('REQUEST_TIMEOUT'));
const { coins } = await got(`${this.URL}/search?query=${query}`, {
const { coins } = await got(`${this.URL}/search?query=${query
}?x_cg_demo_api_key=${this.apiKey}`, {
// @ts-ignore
signal: abortController.signal
}).json<any>();

1
apps/api/src/services/interfaces/environment.interface.ts

@ -6,6 +6,7 @@ export interface Environment extends CleanedEnvAccessors {
BETTER_UPTIME_API_KEY: string;
CACHE_QUOTES_TTL: number;
CACHE_TTL: number;
COINGECKO_API_KEY: string;
DATA_SOURCE_EXCHANGE_RATES: string;
DATA_SOURCE_IMPORT: string;
DATA_SOURCES: string[];

Loading…
Cancel
Save