From e3f79ba20fb533ebb8b76bd75ce40306b1b8ad22 Mon Sep 17 00:00:00 2001 From: phisch Date: Wed, 15 Jul 2026 20:21:14 +0200 Subject: [PATCH 1/2] Frankfurter v1->v2 --- .../api/services/currencyRateService.ts | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/server/api/services/currencyRateService.ts b/src/server/api/services/currencyRateService.ts index 0b119742..247f278e 100644 --- a/src/server/api/services/currencyRateService.ts +++ b/src/server/api/services/currencyRateService.ts @@ -122,18 +122,26 @@ class FrankfurterProvider extends CurrencyRateProvider { providerName = 'frankfurter'; async fetchRates(from: CurrencyCode, to: CurrencyCode, date?: Date): Promise { - const key = !date || isToday(date) ? 'latest' : format(date, 'yyyy-MM-dd'); + const url = new URL(`https://api.frankfurter.dev/v2/rate/${from}/${to}`); - const response = await fetch( - `https://api.frankfurter.dev/v1/${key}?base=${from}&symbols=${to}`, - ); - const data: RateResponse = await response.json(); + if (date && !isToday(date)) { + url.searchParams.append('date', format(date, 'yyyy-MM-dd')); + } - if (response.ok) { - return data; + const response = await fetch(url.toString()); + + if (!response.ok) { + const errorData = await response.json().catch(() => ({})); + const message = errorData.message || response.statusText || 'Failed to fetch exchange rates'; + throw new Error(message); } - throw new Error(response.statusText || 'Failed to fetch exchange rates'); + const data: { date: string; base: string; quote: string; rate: number } = await response.json(); + + return { + base: data.base, + rates: { [data.quote]: data.rate }, + }; } } From 25430730588817d5bd78f6a36c0171f6d7740d8d Mon Sep 17 00:00:00 2001 From: phisch Date: Wed, 15 Jul 2026 20:59:01 +0200 Subject: [PATCH 2/2] Shortened frankfurter v2 --- src/server/api/services/currencyRateService.ts | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/src/server/api/services/currencyRateService.ts b/src/server/api/services/currencyRateService.ts index 247f278e..8c2449cd 100644 --- a/src/server/api/services/currencyRateService.ts +++ b/src/server/api/services/currencyRateService.ts @@ -123,25 +123,18 @@ class FrankfurterProvider extends CurrencyRateProvider { async fetchRates(from: CurrencyCode, to: CurrencyCode, date?: Date): Promise { const url = new URL(`https://api.frankfurter.dev/v2/rate/${from}/${to}`); - if (date && !isToday(date)) { url.searchParams.append('date', format(date, 'yyyy-MM-dd')); } const response = await fetch(url.toString()); + const { base, quote, rate } = await response.json(); - if (!response.ok) { - const errorData = await response.json().catch(() => ({})); - const message = errorData.message || response.statusText || 'Failed to fetch exchange rates'; - throw new Error(message); + if (response.ok) { + return { base, rates: { [quote]: rate } }; } - const data: { date: string; base: string; quote: string; rate: number } = await response.json(); - - return { - base: data.base, - rates: { [data.quote]: data.rate }, - }; + throw new Error(response.statusText || 'Failed to fetch exchange rates'); } }