- Spotify playlist, library, album and artist browsing with in-app playback - Song, playlist and album downloads via spotdl with YouTube and Bandcamp fallbacks - Electron desktop app (castLabs Widevine) with a permanent sidebar layout - Linux and Windows packaging scripts
38 lines
874 B
TypeScript
38 lines
874 B
TypeScript
import superjson from "superjson";
|
|
|
|
export type SpotifyAlbumTrack = {
|
|
id: string;
|
|
name: string;
|
|
artist: string;
|
|
uri?: string;
|
|
durationMs: number;
|
|
trackNumber?: number;
|
|
discNumber?: number;
|
|
externalUrl?: string;
|
|
};
|
|
|
|
export type OutputType = {
|
|
album: {
|
|
id: string;
|
|
name: string;
|
|
artist: string;
|
|
releaseDate?: string;
|
|
totalTracks?: number;
|
|
imageUrl?: string;
|
|
externalUrl?: string;
|
|
};
|
|
tracks: SpotifyAlbumTrack[];
|
|
};
|
|
|
|
export async function getSpotifyAlbum(albumId: string): Promise<OutputType> {
|
|
const response = await fetch(
|
|
"/_api/spotify-album?albumId=" + encodeURIComponent(albumId),
|
|
{ cache: "no-store" },
|
|
);
|
|
if (!response.ok) {
|
|
const parsed = superjson.parse<{ error: string }>(await response.text());
|
|
throw new Error(parsed.error);
|
|
}
|
|
return superjson.parse<OutputType>(await response.text());
|
|
}
|