From 8f38e27eb090a5124375c92ef9d5342b21c51cd6 Mon Sep 17 00:00:00 2001 From: Boris Cherepanov Date: Mon, 23 Mar 2026 15:01:46 +0300 Subject: [PATCH] feat: addex type declaration --- furumi-node-player/client/src/furumiApi.ts | 31 ++++++++-------- furumi-node-player/client/src/types.ts | 42 ++++++++++++++++++++++ 2 files changed, 59 insertions(+), 14 deletions(-) create mode 100644 furumi-node-player/client/src/types.ts diff --git a/furumi-node-player/client/src/furumiApi.ts b/furumi-node-player/client/src/furumiApi.ts index 38abe12..e7518ec 100644 --- a/furumi-node-player/client/src/furumiApi.ts +++ b/furumi-node-player/client/src/furumiApi.ts @@ -1,42 +1,45 @@ import axios from 'axios' +import type { Album, Artist, SearchResult, Track, TrackDetail } from './types' const API_BASE = import.meta.env.VITE_API_BASE_URL ?? '' export const API_ROOT = `${API_BASE}/api` -const apiKey = import.meta.env.VITE_API_KEY +const API_KEY = import.meta.env.VITE_API_KEY export const furumiApi = axios.create({ baseURL: API_ROOT, - headers: apiKey ? { 'x-api-key': apiKey } : {}, + headers: API_KEY ? { 'x-api-key': API_KEY } : {}, }) -export async function getArtists() { - const res = await furumiApi.get('/artists').catch(() => null) +export async function getArtists(): Promise { + const res = await furumiApi.get('/artists').catch(() => null) return res?.data ?? null } -export async function getArtistAlbums(artistSlug: string) { - const res = await furumiApi.get(`/artists/${artistSlug}/albums`).catch(() => null) +export async function getArtistAlbums(artistSlug: string): Promise { + const res = await furumiApi.get(`/artists/${artistSlug}/albums`).catch(() => null) return res?.data ?? null } -export async function getAlbumTracks(albumSlug: string) { - const res = await furumiApi.get(`/albums/${albumSlug}`).catch(() => null) +export async function getAlbumTracks(albumSlug: string): Promise { + const res = await furumiApi.get(`/albums/${albumSlug}`).catch(() => null) return res?.data ?? null } -export async function getArtistTracks(artistSlug: string) { - const res = await furumiApi.get(`/artists/${artistSlug}/tracks`).catch(() => null) +export async function getArtistTracks(artistSlug: string): Promise { + const res = await furumiApi.get(`/artists/${artistSlug}/tracks`).catch(() => null) return res?.data ?? null } -export async function searchTracks(query: string) { - const res = await furumiApi.get(`/search?q=${encodeURIComponent(query)}`).catch(() => null) +export async function searchTracks(query: string): Promise { + const res = await furumiApi + .get(`/search?q=${encodeURIComponent(query)}`) + .catch(() => null) return res?.data ?? null } -export async function getTrackInfo(trackSlug: string) { - const res = await furumiApi.get(`/tracks/${trackSlug}`).catch(() => null) +export async function getTrackInfo(trackSlug: string): Promise { + const res = await furumiApi.get(`/tracks/${trackSlug}`).catch(() => null) return res?.data ?? null } diff --git a/furumi-node-player/client/src/types.ts b/furumi-node-player/client/src/types.ts new file mode 100644 index 0000000..654adc6 --- /dev/null +++ b/furumi-node-player/client/src/types.ts @@ -0,0 +1,42 @@ +// API entity types (see PLAYER-API.md) + +export interface Artist { + slug: string + name: string + album_count: number + track_count: number +} + +export interface Album { + slug: string + name: string + year: number | null + track_count: number + has_cover: boolean +} + +export interface Track { + slug: string + title: string + track_number: number | null + duration_secs: number + artist_name: string + album_name: string | null + album_slug: string | null + genre: string | null +} + +export interface TrackDetail extends Track { + storage_path: string + artist_slug: string + album_year: number | null +} + +export type SearchResultType = 'artist' | 'album' | 'track' + +export interface SearchResult { + result_type: SearchResultType + slug: string + name: string + detail: string | null +}