import { createServerClient } from "@supabase/ssr"; import { NextResponse, type NextRequest } from "next/server"; const PROTECTED_PATHS = [ "/leaderboard", "/profile", "/admin", "/journal", "/calendrier", "/icare", "/char", "/mur", ]; // /signup n'est PAS dans AUTH_PATHS : un compte fraîchement invité a déjà une // session (établie par le lien d'invitation) mais doit pouvoir rester sur // /signup pour finaliser mot de passe/pseudo/photo sans être renvoyé au // leaderboard par ce redirect avant d'avoir terminé. const AUTH_PATHS = ["/login"]; export async function updateSession(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 { pathname } = request.nextUrl; const isProtected = PROTECTED_PATHS.some((path) => pathname.startsWith(path)); const isAuthPath = AUTH_PATHS.some((path) => pathname.startsWith(path)); if (!user && isProtected) { const url = request.nextUrl.clone(); url.pathname = "/login"; return NextResponse.redirect(url); } if (user && isAuthPath) { const url = request.nextUrl.clone(); url.pathname = "/leaderboard"; return NextResponse.redirect(url); } return response; }