fix(cnpj): limita consultas e sinaliza indisponibilidade do provedor by lucianopf · Pull Request #923 · BrasilAPI/BrasilAPI · GitHub
Skip to content

fix(cnpj): limita consultas e sinaliza indisponibilidade do provedor - #923

Merged
lucianopf merged 1 commit into
mainfrom
fix/cnpj-upstream-unavailable
Oct 15, 2026
Merged

lucianopf merged 1 commit into
mainfrom
fix/cnpj-upstream-unavailable

Conversation

@lucianopf

Copy link
Copy Markdown
Member

Contexto

A consulta de CNPJ depende da API pública Minha Receita. Atualmente, falhas HTTP 5xx e falhas de transporte do provedor resultam em 500 genérico; a chamada também não tem limite de tempo explícito.

Esta alteração melhora o tratamento da indisponibilidade. Não restaura a disponibilidade da Minha Receita nem adiciona uma fonte alternativa.

Alterações

  • Limita a chamada ao provedor a 5 segundos, incluindo o estabelecimento da conexão, com AbortController e timeout do Axios. O limite fica abaixo dos 10 segundos configurados para as funções na Vercel.
  • Converte respostas HTTP 5xx e falhas de transporte identificadas pelo Axios em erro tipado 503 ServiceUnavailableError, sem expor detalhes da requisição externa.
  • Define Cache-Control: no-store para estas respostas transitórias, sem alterar o middleware global de cache.
  • Preserva o status e todos os dados da resposta de sucesso, as mensagens/contratos 400 e 404 e o CORS existente.
  • Mantém erros inesperados e erros de configuração fora da classificação 503.
  • Documenta a resposta 503 no OpenAPI.

Compatibilidade

Há uma mudança deliberada de status para falhas do provedor: esses casos passam de 500 para 503. Consumidores que distinguem esses códigos devem considerar ambos como falhas transitórias. URLs, formato da resposta de sucesso e contratos 400/404 não mudam. Não há retries, dependências novas, chaves, serviços pagos ou mudanças globais de logger/cache.

Validação

23 testes determinísticos aprovados em tests/cnpj-contract.test.js. Os testes exercitam o handler real e os middlewares de app/cache/CORS/errorHandler em servidor HTTP local de porta efêmera; apenas a consulta Axios ao provedor é simulada. Incluem sucesso, 400/404, 5xx, DNS/rede/timeouts, deadline via relógio simulado, limpeza de timers, preflight e erro inesperado 500.

Não foram executados testes de carga ou consultas externas de CNPJ. A suíte E2E completa, dependente dos demais provedores, e o build completo não foram executados nesta validação.

Observações de validação local

  • Base: 4b552e7.
  • Os testes foram executados com configuração temporária externa para evitar o setup global que exige servidor Next em localhost:3000. O novo teste continua compatível com a configuração normal do repositório.
  • ESLint dos quatro arquivos JS passa. A instalação local compartilhada contém duas cópias conflitantes de eslint-plugin-import; foi usado um resolver temporário externo apenas para o lint, sem alteração de dependências ou arquivos do PR.
  • git diff --check passa.

@vercel

vercel Bot commented Oct 15, 2026 •

Copy link
Copy Markdown

@sonarqubecloud

Copy link
Copy Markdown

@lucianopf
lucianopf marked this pull request as ready for review October 15, 2026 16:01
@lucianopf
lucianopf merged commit 0c229b4 into main Oct 15, 2026
4 checks passed

This branch was successfully deployed

1 active deployment
Preview — 040b8085 Deployed Oct 15, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant