diff --git a/src/lib/server/clients/last-fm.ts b/src/lib/server/clients/last-fm.ts index b33505b..e9257a6 100644 --- a/src/lib/server/clients/last-fm.ts +++ b/src/lib/server/clients/last-fm.ts @@ -1,5 +1,15 @@ import { LASTFM_API_KEY, LASTFM_USER } from "$env/static/private"; + import { LastFMUser } from "lastfm-ts-api"; +import NodeCache from "node-cache"; + +/** + * API cache. + */ +const cache = new NodeCache({ + // NOTE: TTL is 1 minute + stdTTL: 60, +}); /** * Last.fm API client. @@ -36,11 +46,7 @@ export interface RecentTrack { url: string; } -/** - * Get the most recent track from a listening history. - * @returns Recent track. - */ -export async function getRecentTrack(): Promise { +async function _getRecentTrack(): Promise { // NOTE: fetch the recent tracks const { recenttracks: { @@ -62,3 +68,20 @@ export async function getRecentTrack(): Promise { url: track.url, }; } + +/** + * Get the most recent track from a listening history. + * @returns Recent track. + */ +export async function getRecentTrack(): Promise { + let result = cache.get("recentTrack"); + + if (result !== undefined) { + return result; + } + + result = await _getRecentTrack(); + cache.set("recentTrack", result); + + return result; +}