import { createClient } from '@supabase/supabase-js'; const SUPABASE_URL = process.env.SUPABASE_URL const SUPABASE_KEY = process.env.SUPABASE_KEY const supabase = createClient(SUPABASE_URL, SUPABASE_KEY); const emojiMap = (genre, artist) => { const DEFAULT = "๐ง" const normalizedArtist = artist?.toLowerCase() if (normalizedArtist === "afi") return "โต๏ธ๐ " if (normalizedArtist === "agalloch") return "๐๏ธ" if (normalizedArtist === "american football") return "๐ " if (normalizedArtist === "augury") return "โ๏ธ" if (normalizedArtist === "autopsy") return "๐ง" if (normalizedArtist === "balance and composure") return "๐ช" if (normalizedArtist === "bedsore") return "๐๏ธ" if (normalizedArtist === "birds in row") return "๐ฆ ๐ฆ๐ฆข" if (normalizedArtist === "black flag") return "๐ด" if (normalizedArtist === "blink-182") return "๐ต" if (normalizedArtist === "blood incantation") return "๐ฝ" if (normalizedArtist === "bolt thrower") return "โ๏ธ" if (normalizedArtist === "bruce springsteen") return "๐บ๐ธ" if (normalizedArtist === "carcass") return "๐ฅผ" if (normalizedArtist === "counting crows") return "๐ฆโโฌ" if (normalizedArtist === "david bowie") return "๐จ๐ปโ๐ค" if (normalizedArtist === "devoid of thought") return "๐ซ๐ญ" if (normalizedArtist === "deftones") return "๐ฆ" if (normalizedArtist === "drug church") return "๐โช๏ธ" if (normalizedArtist === "fleshwater") return "๐ค" if (normalizedArtist === "full of hell & nothing") return "๐ซจ๐ธ" if (normalizedArtist === "imperial triumphant") return "๐ญ" if (normalizedArtist === "mastodon") return "๐" if (normalizedArtist === "mineral") return "๐ชจ" if (normalizedArtist === "minor threat") return "๐จ๐ปโ๐ฆฒ" if (normalizedArtist === "nomeansno") return "๐ต๐ฎ๐ฌ" if (normalizedArtist === "nothing") return "๐ณ๏ธ" if (normalizedArtist === "panopticon") return "๐ช๐ชฆ" if (normalizedArtist === "plunger") return "๐ช " if (normalizedArtist === "radiohead") return "๐ป" if (normalizedArtist === "soccer mommy") return "โฝ๏ธ" if (normalizedArtist === "taylor swift") return "๐ธ๐ผ" if (normalizedArtist === "the mars volta") return "๐ก๐ฎ" if (normalizedArtist === "thrice") return "๐จโ๐จ๐" if (normalizedArtist === "tom waits") return "๐คน๐ป" if (normalizedArtist === "webbed wing") return "๐คก" // early return for bad input if (!genre) return DEFAULT if (genre.includes("death metal") || genre.includes("death-doom")) return "๐" if (genre.includes("black metal") || genre.includes("blackgaze")) return "๐ชฆ" if (genre.includes("metal")) return "๐ค" if (genre.includes("emo") || genre.includes("blues")) return "๐ข" if (genre.includes("grind") || genre.includes("powerviolence")) return "๐ซจ" if ( genre.includes("country") || genre.includes("americana") || genre.includes("bluegrass") || genre.includes("folk") || genre.includes("songwriter") ) return "๐ช" if (genre.includes("post-punk")) return "๐" if (genre.includes("dance-punk")) return "๐ชฉ" if (genre.includes("punk") || genre.includes("hardcore")) return "โ" if (genre.includes("hip hop")) return "๐ค" if (genre.includes("progressive") || genre.includes("experimental")) return "๐ค" if (genre.includes("jazz")) return "๐บ" if (genre.includes("psychedelic")) return "๐" if (genre.includes("dance") || genre.includes("electronic")) return "๐ป" if (genre.includes("ambient")) return "๐คซ" if ( genre.includes("alternative") || genre.includes("rock") || genre.includes("shoegaze") || genre.includes("screamo") || genre.includes("grunge") ) return "๐ธ" return DEFAULT } export default async () => { const { data, error } = await supabase .from('listens') .select(` track_name, artist_name, listened_at, artists (mbid, genre) `) .order('listened_at', { ascending: false }) .range(0, 1) const headers = { "Content-Type": "application/json", "Cache-Control": "public, s-maxage=360, stale-while-revalidate=1080", }; if (error) { console.error('Error fetching data:', error); return new Response(JSON.stringify({ error: "Failed to fetch the latest track" }), { headers }); } if (data.length === 0) { return new Response(JSON.stringify({ message: "No recent tracks found" }), { headers }); } const scrobbleData = data[0] return new Response(JSON.stringify({ content: `${emojiMap( scrobbleData.artists.genre, scrobbleData.artist_name )} ${scrobbleData.track_name} by <a href="http://musicbrainz.org/artist/${scrobbleData.artists.mbid}">${ scrobbleData.artist_name }</a>`, }), { headers }); }; export const config = { cache: "manual", path: "/api/now-playing" };