UNPKG

@musicorum/lastfm

Version:

Fully typed [Last.fm](https://last.fm) api client library written and made for Typescript!

74 lines (69 loc) 2.28 kB
import { LastClient } from '../LastClient.js' import { GetFormattedResponse, LastfmResponses } from '../types/responses.js' import { parseLastfmImages } from '../utils.js' import { LastfmTag } from '../types/packages/common.js' import { LastfmAlbumInfoParams, LastfmAlbumInfoTrack, LastfmOriginalAlbumInfoTrackResponse } from '../types/packages/album.js' const parseAlbumInfoTracks = ( tracks: LastfmOriginalAlbumInfoTrackResponse[] ): LastfmAlbumInfoTrack[] => { return tracks.map((track) => ({ name: track.name, duration: track.duration, artist: { name: track.artist.name, mbid: track.artist.mbid ?? undefined, url: track.artist.url }, url: track.url, rank: track['@attr']?.rank ?? undefined })) } export class Album { constructor(private client: LastClient) {} async getInfo( albumName: string, artistName: string, params?: LastfmAlbumInfoParams ): Promise< GetFormattedResponse<LastfmResponses['album.getInfo']> | undefined > { const original = await this.client.request('album.getInfo', { album: albumName, artist: artistName, mbid: params?.mbid, autocorrect: params?.autoCorrect === true ? '1' : '0', username: params?.username, lang: params?.biographyLanguage }) if (!original.album) return undefined return { artist: original.album.artist, images: original.album.image ? parseLastfmImages(original.album.image) : undefined, listeners: parseInt(original.album.listeners), mbid: original.album.mbid !== '' ? original.album.mbid : undefined, name: original.album.name, playCount: parseInt(original.album.playcount), tags: original.album.tags?.tag as LastfmTag[], tracks: original.album.tracks?.track ? parseAlbumInfoTracks(original.album.tracks?.track) : undefined, url: original.album.url, user: original.album.userplaycount ? { playCount: original.album.userplaycount } : undefined, wiki: original.album.wiki ? { published: new Date(original.album.wiki.published), summary: original.album.wiki.summary, content: original.album.wiki.content } : undefined } } }