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 === "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, artists (mbid, genre), `) .order('listened_at', { ascending: false }) .limit(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 ${ scrobbleData.artist_name }`, }), { headers }); }; export const config = { cache: "manual", path: "/api/now-playing" };