import { createServerClient } from "@supabase/ssr"; import { NextResponse, type NextRequest } from "next/server"; // Next.js 16 renamed Middleware to Proxy (same mechanism, new filename/export). // This performs the optimistic auth check: redirect unauthenticated users to // /login, and signed-in users away from /login. Real authorization (hr_admin // vs manager) is enforced server-side via RLS, not here. export async function proxy(request: NextRequest) { let response = 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)); response = NextResponse.next({ request }); cookiesToSet.forEach(({ name, value, options }) => response.cookies.set(name, value, options)); }, }, } ); const { data: { user }, } = await supabase.auth.getUser(); const isLoginRoute = request.nextUrl.pathname.startsWith("/login"); if (!user && !isLoginRoute) { const url = request.nextUrl.clone(); url.pathname = "/login"; return NextResponse.redirect(url); } if (user && isLoginRoute) { const url = request.nextUrl.clone(); url.pathname = "/"; return NextResponse.redirect(url); } return response; } export const config = { matcher: ["/((?!_next/static|_next/image|favicon.ico).*)"], };