import { createServerClient } from "@supabase/ssr" import { NextResponse } from "next/server" import type { NextRequest } from "next/server" // Routes that require an authenticated session const PROTECTED = ["/dashboard", "/profile", "/settings"] // Auth pages — redirect away if already logged in const AUTH_PAGES = ["/login", "/register", "/forgot-password", "/reset-password"] export async function proxy(request: NextRequest) { let supabaseResponse = NextResponse.next({ request }) const supabase = createServerClient( process.env.NEXT_PUBLIC_SUPABASE_URL!, process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!, { cookies: { getAll() { return request.cookies.getAll() }, setAll(cookiesToSet) { cookiesToSet.forEach(({ name, value }) => request.cookies.set(name, value) ) supabaseResponse = NextResponse.next({ request }) cookiesToSet.forEach(({ name, value, options }) => supabaseResponse.cookies.set(name, value, options) ) }, }, } ) // Refresh session — must be called before any redirect logic const { data: { user } } = await supabase.auth.getUser() const { pathname } = request.nextUrl // Redirect unauthenticated users away from protected routes if (PROTECTED.some(p => pathname.startsWith(p)) && !user) { const url = request.nextUrl.clone() url.pathname = "/login" url.searchParams.set("next", pathname) return NextResponse.redirect(url) } // Redirect authenticated users away from auth pages if (AUTH_PAGES.some(p => pathname.startsWith(p)) && user) { const url = request.nextUrl.clone() url.pathname = "/" return NextResponse.redirect(url) } return supabaseResponse } export const config = { matcher: [ "/((?!_next/static|_next/image|favicon\\.ico|.*\\.(?:svg|png|jpg|jpeg|gif|webp)$).*)", ], }