UNPKG

@wayota/redata-api-client

Version:

TypeScript client for the REData (Red Eléctrica de España) public API. Provides convenient methods to fetch Spanish electricity data widgets, supporting category, widget, date range, and geographic filters. The client is based on a custom OpenAPI specific

61 lines (50 loc) 1.98 kB
import { Category } from "./enums/Category"; import { GeoLimit } from "./enums/GeoLimit"; import { GeoTrunc } from "./enums/GeoTrunc"; import { Lang } from "./enums/Lang"; import { TimeTrunc } from "./enums/TimeTrunc"; import { Widget } from "./enums/Widget"; export type ClientConfig = { baseUrl?: string; } export type GetByCategoryByWidgetParams = { lang?: Lang; category: Category; widget: Widget; query: { startDate: string; // ISO 8601 format endDate: string; // ISO 8601 format timeTrunc: TimeTrunc; geotrunc?: GeoTrunc; geoLimit?: GeoLimit; geoIds?: string; } } export class Client { private lang: Lang = Lang.es; constructor(private readonly config: ClientConfig = { baseUrl: 'https://apidatos.ree.es' }) { } private buildUrl({ category, widget, lang }: { category: Category, widget: Widget, lang: Lang}) { return new URL(`${this.config.baseUrl}/${lang}/datos/${category}/${widget}`); } async getByCategoryByWidget(params: GetByCategoryByWidgetParams) { const { lang = this.lang, category, widget, query } = params; const url = this.buildUrl({ category, widget, lang }); url.searchParams.set('start_date', query.startDate); url.searchParams.set('end_date', query.endDate); url.searchParams.set('time_trunc', query.timeTrunc); if (query.geotrunc) { url.searchParams.set('geo_trunc', query.geotrunc); } if (query.geoLimit) { url.searchParams.set('geo_limit', query.geoLimit); } if (query.geoIds) { url.searchParams.set('geo_ids', query.geoIds); } const response = await fetch(url.toString()); if (!response.ok) { throw new Error(`Error fetching data: ${response.statusText}`); } return response.json(); } }