import { NextResponse } from 'next/server'; import type { NextRequest } from 'next/server'; export function middleware(request: NextRequest) { const token = request.cookies.get('casera-token')?.value; const { pathname } = request.nextUrl; // Public paths that don't require auth const publicPaths = ['/', '/login', '/register', '/forgot-password', '/reset-password', '/verify-email', '/demo']; const isPublicPath = publicPaths.some(p => pathname === p || pathname.startsWith(p + '/')); const isApiPath = pathname.startsWith('/api/'); const isStaticPath = pathname.startsWith('/_next/') || pathname.startsWith('/favicon') || pathname.match(/\.(png|jpg|jpeg|gif|svg|ico|webp|woff2?|ttf|css|js)$/); // Skip middleware for API routes and static files if (isApiPath || isStaticPath) return NextResponse.next(); // No token + protected path → redirect to login if (!token && !isPublicPath) { return NextResponse.redirect(new URL('/login', request.url)); } // Has token + auth page → redirect to app if (token && (pathname === '/login' || pathname === '/register')) { return NextResponse.redirect(new URL('/app', request.url)); } return NextResponse.next(); } export const config = { matcher: ['/((?!_next/static|_next/image|favicon.ico).*)'], };