Pular para o conteúdo principal

Middleware — proxy.ts

O middleware vive em apps/web/proxy.ts e intercepta todas as requisições antes de chegarem às rotas. Ele encadeia i18n, headers seguros, autenticação e roteamento de padrões de URL.

Fluxo de execução

Request

▼ 1. next-intl middleware (i18n routing)
▼ 2. createResponseWithSecureHeaders (CSP headers, se ENABLE_STRICT_CSP=true)
▼ 3. setRequestId (x-correlation-id header)
▼ 4. matchUrlPattern → handler específico por rota
▼ 5. isServerAction → adiciona x-action-path nos server actions

▼ Response

Matcher — paths excluídos

O middleware não roda nos seguintes paths (configurado em config.matcher):

'/((?!_next/static|_next/image|images|Video|locales|assets|sitemap.xml|robots.txt|api/*).*)'
ExclusãoMotivo
_next/staticArquivos estáticos do Next.js
_next/imageOtimização de imagens do Next.js
imagesAssets públicos de imagem
VideoArquivos de vídeo públicos (adicionado no TEC-17 para /Video/abracaf/)
localesArquivos de tradução i18n
assetsAssets genéricos
sitemap.xml / robots.txtSEO
api/*Route Handlers — têm sua própria autenticação

Adicionar uma nova exclusão de path

Para servir novos diretórios de assets sem passar pelo middleware, adicione o nome ao padrão no início da expressão negativa:

// de:
'/((?!_next/static|_next/image|images|Video|locales|...).*)'

// para:
'/((?!_next/static|_next/image|images|Video|NovaPasta|locales|...).*)'

Handlers por padrão de URL

PadrãoHandlerO que faz
/admin/*adminMiddlewareVerifica se o usuário é super admin; redireciona para /404 se não for
/auth/*handler inlineSe usuário já autenticado, redireciona para /home (exceto /auth/verify-mfa)
/home/*handler inlineSe usuário não autenticado, redireciona para /auth/sign-in?next=<path>; verifica MFA

Adicionar um novo handler

Em getPatterns(), adicionar uma entrada ao array:

{
pattern: new URLPattern({ pathname: '/minha-rota/*?' }),
handler: async (req: NextRequest, res: NextResponse) => {
// lógica de guarda
// retornar undefined para continuar o fluxo normal
// retornar NextResponse para interromper e responder
},
},

Headers adicionados em toda requisição

HeaderValorQuando
x-correlation-idUUID aleatórioSempre
x-action-pathrequest.nextUrl.pathnameSomente em Server Actions

CSP (Content Security Policy)

Desativado por padrão. Para ativar:

ENABLE_STRICT_CSP=true

Quando ativo, importa ./lib/create-csp-response e aplica os headers CSP sobre a resposta do i18n middleware.