{"path":"src/middleware.ts","size":2028,"locked":false,"binary":false,"truncated":false,"content":"import { createServerClient } from \"@supabase/ssr\";\nimport { type NextRequest, NextResponse } from \"next/server\";\n\nexport async function middleware(request: NextRequest) {\n  let supabaseResponse = NextResponse.next({ request });\n\n  // Only protect routes if Supabase environment variables are set\n  if (\n    process.env.NEXT_PUBLIC_SUPABASE_URL &&\n    process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY\n  ) {\n    const supabase = createServerClient(\n      process.env.NEXT_PUBLIC_SUPABASE_URL,\n      process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY,\n      {\n        cookies: {\n          getAll() {\n            return request.cookies.getAll();\n          },\n          setAll(\n            cookiesToSet: { name: string; value: string; options?: any }[]\n          ) {\n            cookiesToSet.forEach(({ name, value, options }) =>\n              request.cookies.set(name, value)\n            );\n            supabaseResponse = NextResponse.next({ request });\n            cookiesToSet.forEach(({ name, value, options }) =>\n              supabaseResponse.cookies.set(name, value, options)\n            );\n          },\n        },\n      }\n    );\n\n    const {\n      data: { user },\n    } = await supabase.auth.getUser();\n\n    // Protect admin routes\n    const isAdminRoute = request.nextUrl.pathname.startsWith(\"/admin\");\n    if (isAdminRoute && !user) {\n      const url = request.nextUrl.clone();\n      url.pathname = \"/login\";\n      url.searchParams.set(\"redirectTo\", request.nextUrl.pathname);\n      return NextResponse.redirect(url);\n    }\n\n    // Redirect authenticated users away from login/signup\n    const isAuthRoute =\n      request.nextUrl.pathname.startsWith(\"/login\") ||\n      request.nextUrl.pathname.startsWith(\"/signup\");\n    if (isAuthRoute && user) {\n      const url = request.nextUrl.clone();\n      url.pathname = \"/admin\";\n      return NextResponse.redirect(url);\n    }\n  }\n\n  return supabaseResponse;\n}\n\nexport const config = {\n  matcher: [\n    \"/((?!_next/static|_next/image|favicon.ico|.*\\\\.(?:svg|png|jpg|jpeg|gif|webp)$).*)\",\n  ],\n};\n"}