import { NextFetchEvent, NextRequest, NextResponse } from 'next/server' const PUBLIC_FILE = /.(.*)$/ export function middleware(req: NextRequest, event: NextFetchEvent) { const pathname = req.nextUrl.pathname const signedIn = req.cookies['drift-token'] const getURL = (pageName: string) => new URL(`/${pageName}`, req.url).href const isPageRequest = !PUBLIC_FILE.test(req.nextUrl.pathname) && !req.nextUrl.pathname.startsWith('/api') && // header added when next/link pre-fetches a route !req.headers.get('x-middleware-preflight') if (!req.headers.get('x-middleware-preflight') && pathname === '/signout') { // If you're signed in we remove the cookie and redirect to the home page // If you're not signed in we redirect to the home page if (signedIn) { const resp = NextResponse.redirect(getURL('')); resp.clearCookie('drift-token'); resp.clearCookie('drift-userid'); const signoutPromise = new Promise((resolve) => { fetch(`${process.env.API_URL}/auth/signout`, { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${signedIn}`, 'x-secret-key': process.env.SECRET_KEY || '', }, }) .then(() => { resolve(true) }) }) event.waitUntil(signoutPromise) return resp } } else if (isPageRequest) { if (signedIn) { if (pathname === '/' || pathname === '/signin' || pathname === '/signup') { return NextResponse.redirect(getURL('new')) } } else if (!signedIn) { if (pathname === '/new') { return NextResponse.redirect(getURL('signin')) } } } return NextResponse.next() }