import { NextResponse } from 'next/server'; import type { NextRequest } from 'next/server'; export async function middleware(request: NextRequest) { const hostname = request.headers.get('host') || ''; const url = request.nextUrl; const apiBase = process.env.API_INTERNAL_URL || 'http://backend:8080'; // Extrair subdomĂ­nio const subdomain = hostname.split('.')[0]; // Se for dash.localhost - rotas administrativas (SUPERADMIN) if (subdomain === 'dash') { // Permitir acesso a /superadmin, /cadastro, /login return NextResponse.next(); } // Se for agĂȘncia ({subdomain}.localhost) - validar se existe if (hostname.includes('.')) { try { const res = await fetch(`${apiBase}/api/tenant/check?subdomain=${subdomain}`); if (!res.ok) { const baseHost = hostname.split('.').slice(1).join('.') || hostname; const redirectUrl = new URL(url.toString()); redirectUrl.hostname = baseHost; redirectUrl.pathname = '/'; return NextResponse.redirect(redirectUrl); } } catch (err) { const baseHost = hostname.split('.').slice(1).join('.') || hostname; const redirectUrl = new URL(url.toString()); redirectUrl.hostname = baseHost; redirectUrl.pathname = '/'; return NextResponse.redirect(redirectUrl); } } // Permitir /dashboard, /login, /clientes, etc. return NextResponse.next(); } export const config = { matcher: [ /* * Match all request paths except for the ones starting with: * - api (API routes) * - _next/static (static files) * - _next/image (image optimization files) * - favicon.ico (favicon file) */ '/((?!api|_next/static|_next/image|favicon.ico).*)', ], };