import { NextRequest, NextResponse } from 'next/server'; const actions = new Set(['login', 'register', 'refresh', 'logout', 'verify-email-request', 'verify-email', 'password-reset-request', 'password-reset']); export async function POST(request: NextRequest, context: { params: Promise<{ action: string }> }) { const { action } = await context.params; if (!actions.has(action)) return NextResponse.json({ detail: 'Unknown authentication action.' }, { status: 404 }); const baseUrl = process.env.MOTORSIGNAL_API_BASE_URL ?? 'https://api.motorsignal.app'; const endpoint = action === 'verify-email-request' ? 'verify-email/request' : action === 'password-reset-request' ? 'password-reset/request' : action; const upstream = await fetch(`${baseUrl}/api/v1/auth/${endpoint}`, { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify(await request.json()), cache: 'no-store', }); const body = await upstream.text(); const response = new NextResponse(body, { status: upstream.status, headers: { 'content-type': upstream.headers.get('content-type') ?? 'application/json' } }); if (action === 'logout') { response.cookies.delete('motorsignal_access_token'); response.cookies.delete('motorsignal_refresh_token'); } else if (upstream.ok) { let payload: { access_token?: string; refresh_token?: string } = {}; try { payload = JSON.parse(body) as { access_token?: string; refresh_token?: string }; } catch { return response; } const cookieOptions = { httpOnly: true, secure: true, sameSite: 'lax' as const, path: '/', maxAge: 60 * 60 * 24 * 30 }; if (payload.access_token) response.cookies.set('motorsignal_access_token', payload.access_token, cookieOptions); if (payload.refresh_token) response.cookies.set('motorsignal_refresh_token', payload.refresh_token, cookieOptions); } return response; }