
Security News
Deno 2.2 Improves Dependency Management and Expands Node.js Compatibility
Deno 2.2 enhances Node.js compatibility, improves dependency management, adds OpenTelemetry support, and expands linting and task automation for developers.
@ekwoka/spotify-api
Advanced tools
Composable Wrapper for the Spotify Web Api and Spotify Web Playback SDK
Born from my own difficulties using other wrapper libraries for Spotify, this library seeks to be the best possible API wrapper.
NOTE: This library is still very much a work in progress and will be subject to breaking changes and regular updates until this note is removed.
Simply install with your favourite flavour of Package Manager
npm add @ekwoka/spotify-api
pnpm add @ekwoka/spotify-api
bun install @ekwoka/spotify-api
yarn add @ekwoka/spotify-api
To get started, you'll need to import the core client from the package, and initialize it.
import { SpotifyApi } from '@ekwoka/spotify-api';
export const client = SpotifyApi('tokenhere'); // client requires an initial token to initialize. Initialize client after recieving token from Spotify.
This will create the core client structure with which you'll manage and run requests to the Spotify Apis.
To update the token during ongoing usage simply, import and use the setToken
composable with your client.
import { SpotifyApi, setToken } from '@ekwoka/spotify-api';
const client = SpotifyApi('initial_token'); // original token
// after some event, update the token
client(setToken('my_new_token')); // updated token
As you'll notice, this is not a method on the client object like many other libraries. This is a composable function. The goal is for all interactions with the client and APIs to be composable functions. This will enable very aggressive tree-shaking to keep minimal clients from shipping lots of unused code, as well as enable code-splitting for larger applications. This should be reflected in a much more modest bundle size for the majority of use cases.
Includes in this package are some additional helper functions for interacting with Spotify's authentication API. These should only be used on a server, as they require client secrets.
These helpers are:
getTokenFromCode
: Accepts a code from the Spotify authentication flow and returns a suite of tokens (access and refresh).refreshToken
: Accepts a refresh token and returns a new access token.These currently depend on you setting up and exposing certain environment variables for the functions to access:
SPOTIFY_CLIENT
: Client id from Spotify Developer Dashboard.SPOTIFY_SECRET
: Client secret.If these are not defined, the function will throw.
import { getTokenFromCode, refreshToken } from '@ekwoka/spotify-api';
const codeHandler = async (req, res) => {
try {
const { code } = JSON.parse(req.body);
const { access_token, refresh_token } = await getTokenFromCode(code);
res.cookie('refresh_token', refresh_token);
res.status(200).json({ access_token });
} catch (err) {
res.status(500).json({ error: err.message });
}
};
const refreshHandler = async (req, res) => {
try {
const { refresh_token } = req.cookies;
const { access_token } = await refreshToken(refresh_token);
res.status(200).json({ access_token });
} catch (err) {
res.status(500).json({ error: err.message });
}
};
Endpoints are importable both from @ekwoka/spotify-api
or @ekwoka/spotify-api/endpoints
for convenience.
NOTE: The following documentation uses the same structure as the Official Spotify Docs for organization
Currently Available methods in the Users category include:
getCurrentUser
- Retrieves data related to the actively logged in user (as defined by access token)Gets details of the currently logged in user (identified by token)
const user = client(getCurrentUser());
console.log(user); // should log user
cache key: 'user'
Gets the users top tracks or artists
const topTracks = await client(
getTopItems('tracks', { limit: 50, time_range: 'long_term' })
);
const topArtists = await client(
getTopItems('artists', { offset: 20, limit: 10 })
);
Options:
limit
: The number of items to return. Default: 20
. Maximum: 50
.offset
: The index of the first item to return. Default: 0
.time_range
: Over what time frame the data is retrieved. Options: short_term
, medium_term
, long_term
. Default: medium_term
.Get's another user's profile by ID
const thekwoka = await client(getUserProfile('thekwoka'));
As noted, a major benefit of this API wrapper is the intelligent use of caches. However, caches may not always be accurate, or may introduce other issues in certain contexts. As such, there is a special utility for cache busting.
import { resetCache } from '@ekwoka/spotify-api';
// clears entire cache
client(resetCache());
// clears specific cached value
client(resetCache('user')); // should clear user cache only
Where caches are utilized, the documentation for those endpoints will include information about the cache key(s) used.
FAQs
Composable Wrapper for the Spotify Web Api and Spotify Web Playback SDK
The npm package @ekwoka/spotify-api receives a total of 10 weekly downloads. As such, @ekwoka/spotify-api popularity was classified as not popular.
We found that @ekwoka/spotify-api demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Deno 2.2 enhances Node.js compatibility, improves dependency management, adds OpenTelemetry support, and expands linting and task automation for developers.
Security News
React's CRA deprecation announcement sparked community criticism over framework recommendations, leading to quick updates acknowledging build tools like Vite as valid alternatives.
Security News
Ransomware payment rates hit an all-time low in 2024 as law enforcement crackdowns, stronger defenses, and shifting policies make attacks riskier and less profitable.