import { withAuth } from "next-auth/middleware"; import { featureEnabled } from "./app/lib/features"; import { NextResponse } from "next/server"; import { PROTECTED_PAGES } from "./app/lib/auth"; export const config = { matcher: [ "/((?!api|_next/static|_next/image|favicon.ico|sitemap.xml|robots.txt).*)", // must be a copy of LOGIN_REQUIRED_PAGES // cannot use anything dynamic (...LOGIN_REQUIRED_PAGES, or .concat(LOGIN_REQUIRED_PAGES)) // as per https://nextjs.org/docs/messages/invalid-page-config "/", "/transcripts(.*)", "/browse(.*)", "/rooms(.*)", ], }; export default withAuth( async function middleware(request) { const pathname = request.nextUrl.pathname; // feature-flags protected paths if ( (!featureEnabled("browse") && pathname.startsWith("/browse")) || (!featureEnabled("rooms") && pathname.startsWith("/rooms")) ) { return NextResponse.redirect(request.nextUrl.origin); } }, { callbacks: { async authorized({ req, token }) { if ( featureEnabled("requireLogin") && PROTECTED_PAGES.test(req.nextUrl.pathname) ) { return !!token; } return true; }, }, }, );