From afc2e34478e3e185c73de2afbf489c11c422044d Mon Sep 17 00:00:00 2001 From: Tanguy Herbron Date: Fri, 5 Jan 2024 20:47:50 +0100 Subject: [PATCH] refactor(coingecko.service): Move API authentication to headers and specify demo key --- .../configuration/configuration.service.ts | 2 +- .../coingecko/coingecko.service.ts | 26 +++++++++---------- .../interfaces/environment.interface.ts | 2 +- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/apps/api/src/services/configuration/configuration.service.ts b/apps/api/src/services/configuration/configuration.service.ts index 69a043fc4..984ed2c95 100644 --- a/apps/api/src/services/configuration/configuration.service.ts +++ b/apps/api/src/services/configuration/configuration.service.ts @@ -15,7 +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: '' }), + COINGECKO_API_KEY_DEMO: str({ default: '' }), DATA_SOURCE_EXCHANGE_RATES: str({ default: DataSource.YAHOO }), DATA_SOURCE_IMPORT: str({ default: DataSource.YAHOO }), DATA_SOURCES: json({ diff --git a/apps/api/src/services/data-provider/coingecko/coingecko.service.ts b/apps/api/src/services/data-provider/coingecko/coingecko.service.ts index 9046f87b9..76003ba85 100644 --- a/apps/api/src/services/data-provider/coingecko/coingecko.service.ts +++ b/apps/api/src/services/data-provider/coingecko/coingecko.service.ts @@ -17,17 +17,19 @@ import { SymbolProfile } from '@prisma/client'; import { format, fromUnixTime, getUnixTime } from 'date-fns'; -import got from 'got'; +import got, { Headers } from 'got'; @Injectable() export class CoinGeckoService implements DataProviderInterface { - private apiKey: string; + private headers: Headers = {}; private readonly URL = 'https://api.coingecko.com/api/v3'; public constructor( private readonly configurationService: ConfigurationService ) { - this.apiKey = this.configurationService.get('COINGECKO_API_KEY'); + if (this.configurationService.get('COINGECKO_API_KEY_DEMO')) { + this.headers['x-cg-demo-api-key'] = this.configurationService.get('COINGECKO_API_KEY_DEMO'); + } } public canHandle(symbol: string) { @@ -52,10 +54,10 @@ export class CoinGeckoService implements DataProviderInterface { abortController.abort(); }, this.configurationService.get('REQUEST_TIMEOUT')); - const { name } = await got(`${this.URL}/coins/${aSymbol - }?x_cg_demo_api_key=${this.apiKey}`, { + const { name } = await got(`${this.URL}/coins/${aSymbol}`, { // @ts-ignore - signal: abortController.signal + signal: abortController.signal, + headers: this.headers }).json(); response.name = name; @@ -108,11 +110,11 @@ export class CoinGeckoService implements DataProviderInterface { this.URL }/coins/${aSymbol}/market_chart/range?vs_currency=${DEFAULT_CURRENCY.toLowerCase()}&from=${getUnixTime( from - )}&to=${getUnixTime(to) - }?x_cg_demo_api_key=${this.apiKey}`, + )}&to=${getUnixTime(to)}`, { // @ts-ignore - signal: abortController.signal + signal: abortController.signal, + headers: this.headers } ).json(); @@ -170,8 +172,7 @@ export class CoinGeckoService implements DataProviderInterface { const quotes = await got( `${this.URL}/simple/price?ids=${symbols.join( ',' - )}&vs_currencies=${DEFAULT_CURRENCY.toLowerCase() - }?x_cg_demo_api_key=${this.apiKey}`, + )}&vs_currencies=${DEFAULT_CURRENCY.toLowerCase()}`, { // @ts-ignore signal: abortController.signal @@ -222,8 +223,7 @@ export class CoinGeckoService implements DataProviderInterface { abortController.abort(); }, this.configurationService.get('REQUEST_TIMEOUT')); - const { coins } = await got(`${this.URL}/search?query=${query - }?x_cg_demo_api_key=${this.apiKey}`, { + const { coins } = await got(`${this.URL}/search?query=${query}`, { // @ts-ignore signal: abortController.signal }).json(); diff --git a/apps/api/src/services/interfaces/environment.interface.ts b/apps/api/src/services/interfaces/environment.interface.ts index f8829a24f..018c881ec 100644 --- a/apps/api/src/services/interfaces/environment.interface.ts +++ b/apps/api/src/services/interfaces/environment.interface.ts @@ -6,7 +6,7 @@ export interface Environment extends CleanedEnvAccessors { BETTER_UPTIME_API_KEY: string; CACHE_QUOTES_TTL: number; CACHE_TTL: number; - COINGECKO_API_KEY: string; + COINGECKO_API_KEY_DEMO: string; DATA_SOURCE_EXCHANGE_RATES: string; DATA_SOURCE_IMPORT: string; DATA_SOURCES: string[];