When your server calls fetch, it's a brand new request from your server to itself. No browser, so no cookies. That's why it works from the browser and not from the page.
Don't fetch your own API routes from Server Components. Move the logic into a function and call it directly:
// lib/stats.ts
export async function getStats(supabase) { ... }
// page.tsx
const supabase = await createClient()
const stats = await getStats(supabase)Faster too, you skip an HTTP round trip.