src/endpoints/ArtistsEndpoints.ts (49 lines of code) (raw):

import type { Artist, Artists, Market, MaxInt, Page, SimplifiedAlbum, TopTracksResult, } from "../types.js"; import EndpointsBase from "./EndpointsBase.js"; export default class ArtistsEndpoints extends EndpointsBase { public async get(id: string): Promise<Artist>; public async get(ids: string[]): Promise<Artist[]>; public async get(idOrIds: string | string[]) { if (typeof idOrIds === "string") { const artist = this.getRequest<Artist>(`artists/${idOrIds}`); return artist; } const params = this.paramsFor({ ids: idOrIds }); const response = await this.getRequest<Artists>(`artists${params}`); return response.artists; } public albums( id: string, includeGroups?: string, market?: Market, limit?: MaxInt<50>, offset?: number ) { const params = this.paramsFor({ include_groups: includeGroups, market, limit, offset, }); return this.getRequest<Page<SimplifiedAlbum>>( `artists/${id}/albums${params}` ); } public topTracks(id: string, market: Market) { // BUG: market is flagged as optional in the docs, but it's actually required for this endpoint // otherwise you get a 400 const params = this.paramsFor({ market }); return this.getRequest<TopTracksResult>( `artists/${id}/top-tracks${params}` ); } public relatedArtists(id: string) { return this.getRequest<Artists>(`artists/${id}/related-artists`); } }