import { createServerClient } from "@supabase/ssr"; import { NextResponse, type NextRequest } from "next/server"; export async function updateSession(request: NextRequest) { let supabaseResponse = NextResponse.next({ request, }); const supabase = createServerClient( process.env.NEXT_PUBLIC_SUPABASE_URL!, process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_DEFAULT_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 the session const { data: { user }, } = await supabase.auth.getUser(); // Protect admin routes (except login) const isAdminRoute = request.nextUrl.pathname.startsWith("/admin"); const isLoginPage = request.nextUrl.pathname === "/admin/login"; if (isAdminRoute && !isLoginPage) { if (!user) { const url = request.nextUrl.clone(); url.pathname = "/admin/login"; return NextResponse.redirect(url); } // Verify the user is in admin_users table const { data: adminUser } = await supabase .from("admin_users") .select("role") .eq("user_id", user.id) .single(); if (!adminUser) { const url = request.nextUrl.clone(); url.pathname = "/admin/login"; return NextResponse.redirect(url); } } // If logged-in admin visits login page, redirect to dashboard if (isLoginPage && user) { const { data: adminUser } = await supabase .from("admin_users") .select("role") .eq("user_id", user.id) .single(); if (adminUser) { const url = request.nextUrl.clone(); url.pathname = "/admin"; return NextResponse.redirect(url); } } return supabaseResponse; }