import { createServerClient } from "@supabase/ssr"; import { NextResponse } from "next/server"; const PUBLIC_PATHS = ["/login", "/auth", "/api/health", "/privacy", "/terms", "/cookies"]; export async function middleware(request) { const pathname = request.nextUrl.pathname; if (PUBLIC_PATHS.some((path) => pathname === path || pathname.startsWith(`${path}/`))) { return NextResponse.next(); } let response = NextResponse.next({ request }); const supabase = createServerClient( process.env.NEXT_PUBLIC_SUPABASE_URL, process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY, { cookies: { getAll: () => request.cookies.getAll(), setAll(cookiesToSet) { cookiesToSet.forEach(({ name, value, options }) => request.cookies.set(name, value)); response = NextResponse.next({ request }); cookiesToSet.forEach(({ name, value, options }) => response.cookies.set(name, value, options)); }, }, }, ); const { data: { user } } = await supabase.auth.getUser(); if (user) return response; if (pathname.startsWith("/api/")) return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); const loginUrl = request.nextUrl.clone(); loginUrl.pathname = "/login"; loginUrl.searchParams.set("next", pathname); return NextResponse.redirect(loginUrl); } export const config = { matcher: ["/((?!_next/static|_next/image|favicon.ico).*)"] };