import { Server } from '@prisma/client'; import axios from 'axios'; import { NDAlbumListResponse, NDGenreListResponse, NDAlbumListParams, NDGenreListParams, NDSongListParams, NDSongListResponse, NDArtistListResponse, NDAuthenticate, } from './navidrome.types'; const api = axios.create(); const authenticate = async (options: { password: string; url: string; username: string; }) => { const { password, url, username } = options; const cleanServerUrl = url.replace(/\/$/, ''); const { data } = await api.post( `${cleanServerUrl}/auth/login`, { password, username } ); return data; }; const getGenres = async (server: Server, params?: NDGenreListParams) => { const { data } = await api.get( `${server.url}/api/genre`, { headers: { 'x-nd-authorization': `Bearer ${server.token}` }, params, } ); return data; }; const getArtists = async (server: Server, params?: NDGenreListParams) => { const { data } = await api.get( `${server.url}/api/artist`, { headers: { 'x-nd-authorization': `Bearer ${server.token}` }, params, } ); return data; }; const getAlbums = async (server: Server, params?: NDAlbumListParams) => { const { data } = await api.get( `${server.url}/api/album`, { headers: { 'x-nd-authorization': `Bearer ${server.token}` }, params, } ); return data; }; const getSongs = async (server: Server, params?: NDSongListParams) => { const { data } = await api.get(`${server.url}/api/song`, { headers: { 'x-nd-authorization': `Bearer ${server.token}` }, params, }); return data; }; export const navidromeApi = { authenticate, getAlbums, getArtists, getGenres, getSongs, };