Something went wrong. Try again.
version 2 of my website
Something went wrong. Try again.
1.3 kB · 40 lines
TypeScript
at main
1234567891011121314151617181920212223242526272829303132333435363738394041import type { RecentTracks, Track, TrackResponse } from "@/types/lastfm";import { ActionError, defineAction } from "astro:actions";import { subDays } from "date-fns";
export const server = { getRecentTrack: defineAction({ handler: async () => { const opts = { apiKey: import.meta.env.LAST_FM_API_KEY, baseUrl: import.meta.env.LAST_FM_BASE_URL, user: "dustycode", method: 'user.getrecenttracks', nowplaying: 'true', limit: 1, format: 'json', from: subDays(Date.now(), 1) }
const responseRaw = await fetch(`${opts.baseUrl}?method=${opts.method}&user=${opts.user}&api_key=${opts.apiKey}&limit=${opts.limit}&from=${opts.from}&nowplaying=${opts.nowplaying}&format=${opts.format}`) if (responseRaw.status !== 200) { throw new ActionError({ code: "INTERNAL_SERVER_ERROR", message: "Could not fetch track" }) }
const responseJson: RecentTracks = await responseRaw.json(); const track: Track = responseJson.recenttracks.track[0]; const response: TrackResponse = { name: track.name, artist: track.artist["#text"], nowplaying: track["@attr"]?.nowplaying ?? false, url: track.url, image: track.image[1]["#text"] } return response;
} })}