Spotify library in typescript without using the Spotify Web API.
- No authentication required.
- Super fast like the Web API.
- Lightweight with zero dependencies.
- Strongly typed API functions.
- Personalized fetching and automation using cookies.
- Automatic internal token refreshing.
...along with a Musixmatch API module. Works without any authentication too.
-
node.js (>=17.5.0)
,bun
ordeno
runtime. -
npm i spotifly
orbun i spotifly
-
import { Spotifly } from "spotifly"; const sp = new Spotifly(); const track = await sp.getTrack("abcdefghijk"); console.log(track);
Functions marked with an asterisk (*) require your spotify cookies to work. How to get your Spotify cookies ?
Spotifly
modulegetHomepage
getTrack
getTrackCredits
getRelatedTrackArtists
getArtist
getAlbum
getPlaylist
getPlaylistMetadata
getPlaylistContents
getUser
getSection
getPodcast
getPodcastEpisodes
getEpisode
searchAll
searchTracks
searchAlbums
searchPlaylists
searchArtists
searchUsers
searchPodcasts
getTrackLyrics
extractImageColors
- *
getMyProfile
- *
getMyLibrary
- *
getMyProductState
- *
getMyLikedSongs
- *
addToLikedSongs
- *
removeFromLikedSongs
- *
getTrackColorLyrics
- *
SpotiflyPlaylist
module Musixmatch
moduleParse
module- How to get your Spotify cookies ?
The main module containing all the Spotify API functions.
-
getHomepage()
:Promise<SpotifyHome>
Fetch the Spotify homepage data.
-
getTrack(id: string)
:Promise<SpotifyTrack>
Fetch the details of the provided track id.
-
getTrackCredits(id: string)
:Promise<SpotifyTrackCredits>
Fetch the credits of the provided track id.
-
getRelatedTrackArtists(id: string)
:Promise<SpotifyRelatedTrackArtists>
Fetch the related artists of the artist of the provided track id.
-
getArtist(id: string)
:Promise<SpotifyArtist>
Fetch the details of the provided artist id.
-
getAlbum(id: string, limit?: number)
:Promise<SpotifyAlbum>
Fetch the details of the provided album id, with optional limit for amount of tracks to fetch.
-
getPlaylist(id: string, limit?: number)
:Promise<SpotifyPlaylist>
Fetch all the details of the provided playlist id, with optional limit for amount of tracks to fetch.
-
getPlaylistMetadata(id: string, limit?: number)
:Promise<SpotifyPlaylistMetadata>
Fetch the metadata only of the provided playlist id, with optional limit for amount of tracks to fetch.
-
getPlaylistContents(id: string, limit?: number)
:Promise<SpotifyPlaylistContents>
Fetch the contents of the provided playlist id, with optional limit for amount of tracks to fetch.
-
getUser(id: string, config?: { playlistLimit?: number, artistLimit?: number, episodeLimit?: number })
:Promise<SpotifyUser>
Fetch the details of the provided user id, with optional limit for amount of tracks to fetch.
-
getSection(id: string)
:Promise<SpotifySection>
Fetch the details of the provided section id.
-
getPodcast(id: string)
:Promise<SpotifyPodcast>
Fetch the details of the provided show id.
-
getPodcastEpisodes(id: string, limit?: number)
:Promise<SpotifyPodcastEpisodes>
Fetch the episodes of the provided show id, with optional limit for amount of episodes to fetch.
-
getEpisode(id: string)
:Promise<SpotifyEpisode>
Fetch the details of the provided episode id.
-
searchAll(terms: string, limit?: number)
:Promise<SpotifySearchAll>
Search the Spotify library with the terms provided, for all types of content, with optional limit for amount of search results to fetch.
-
searchTracks(terms: string, limit?: number)
:Promise<SpotifySearchTracks>
Search the Spotify library with the terms provided, for tracks, with optional limit for amount of search results to fetch.
-
searchAlbums(terms: string, limit?: number)
:Promise<SpotifySearchAlbums>
Search the Spotify library with the terms provided, for albums, with optional limit for amount of search results to fetch.
-
searchPlaylists(terms: string, limit?: number)
:Promise<SpotifySearchPlaylists>
Search the Spotify library with the terms provided, for playlists, with optional limit for amount of search results to fetch.
-
searchArtists(terms: string, limit?: number)
:Promise<SpotifySearchArtists>
Search the Spotify library with the terms provided, for artists, with optional limit for amount of search results to fetch.
-
searchUsers(terms: string, limit?: number)
:Promise<SpotifySearchUsers>
Search the Spotify library with the terms provided, for users, with optional limit for amount of search results to fetch.
-
searchPodcasts(terms: string, limit?: number)
:Promise<SpotifySearchPodcasts>
Search the Spotify library with the terms provided, for podcasts and shows, with optional limit for amount of search results to fetch.
-
Fetch the lyrics of the provided track id through the
Musixmatch
module.If you want to fetch lyrics directly from Spotify, see
getTrackColorLyrics
. -
extractImageColors(...urls: string[])
:Promise<SpotifyExtractedColors>
Extract raw, dark and light colors from the provided urls of images using Spotify API.
The following functions require cookies to work. How to get your Spotify cookies ?
-
getMyProfile()
:Promise<SpotifyMyProfile>
Fetch the details of your Spotify profile.
-
getMyLibrary(config?)
:Promise<SpotifyMyLibrary>
Fetch your Spotify library.
- config.filter?:
[] | ["Playlists"] | ["Playlists", "By you"] | ["Artists"]
- config.order?:
"Recents" | "Recently Added" | "Alphabetical" | "Creator" | "Custom Order"
- config.textFilter?:
string
- config.limit?:
number
- config.filter?:
-
getMyProductState()
:Promise<SpotifyProductState>
Fetch the details of your Spotify product state like premium plan, etc.
-
getMyLikedSongs()
:Promise<SpotifyLikedSongs>
Fetch the songs you have liked from your Spotify library.
-
addToLikedSongs(...trackUris: string[])
:Promise<SpotifyLikedSongsAdd>
Add the tracks to your liked songs library.
-
removeFromLikedSongs(...trackUris: string[])
:Promise<SpotifyLikedSongsRemove>
Remove the tracks from your liked songs library.
-
getTrackColorLyrics(id: string, imgUrl?: string)
:Promise<SpotifyColorLyrics>
Fetch the track lyrics directly from Spotify's internal Musixmatch API with an optional image url to fetch the colors of that image.
The module containing all the functions to interact with playlists in your Spotify library using the cookies provided. How to get your Spotify cookies ?
-
Property to get or set the playlist id with whom the following functions will be interacting.
-
Create a new empty playlist with the provided name in your Spotify library and sets the
id
with the newly created one. -
Change the name of the playlist with the new name provided.
-
Change the description of the playlist with the new description provided.
-
Fetch the metadata of the playlist.
-
Fetch the contents of the playlist.
-
Add tracks to the playlist from the provided track uris.
-
Remove tracks from the playlist from the provided track uris.
-
Create a new playlist in your Spotify library by cloning from another playlist with optional config to change the data of the created playlist and sets the
id
with the newly created one. -
Delete the playlist from your Spotify library.
The Musixmatch API module containing functions to search and fetch lyrics. No authentication needed.
-
search(terms: string)
:Promise<MusixmatchSearch[]>
Search the Musixmatch library with the terms provided.
-
Fetch the lyrics from a Musixmatch lyrics url (i.e.
musixmatch.com/lyrics/abc/xyz
). -
Fetch the lyrics of the top result after searching for the terms. Combination of the above two functions but faster.
The parsing module containing few utility functions.
-
Extract the id from an
open.spotify.com
url. -
Extract the id from a Spotify uri (i.e.
spotify:track:abcdefghijk
). -
Convert an
open.spotify.com
url to a Spotify uri (i.e.spotify:track:abcdefghijk
). -
Convert a Spotify uri (i.e.
spotify:track:abcdefghijk
) to anopen.spotify.com
url.
- Login to your Spotify account in your browser.
- Open Developer Tools of your browser and switch to Network tab.
- Go to https://open.spotify.com/.
- Find the request with the name
open.spotify.com
and open it. - From the Headers tab, scroll to Request Headers section.
- Copy the contents of the
Cookie
header value.
The copied value is your Spotify cookies.
This repository uses MIT License. See LICENSE for full license text.