fix: erros do HubSpot distinguem 401 de 403, mostram escopos exigidos e vão pro log #89

Merged
jhony75 merged 2 commits from fix/hubspot-auth-error-detail into develop 2026-10-15 18:57:55 -03:00
Owner

O que é

O envio da validação ao HubSpot falhava com uma mensagem única ("Token inválido ou sem permissão") que não deixava saber se o problema era o token ou a falta de escopo. Esta PR mostra a causa de verdade e deixa rastro nos logs.

Mudanças

  • HubspotAuthError passa a carregar o status, o caminho chamado e a explicação do HubSpot (message, category, correlationId e, em 403, os escopos exigidos). Nunca o token.
  • Mensagem na tela: 401 → "o HubSpot não reconheceu o token" (confira HUBSPOT_ACCESS_TOKEN, formato pat-na1-..., sem aspas/espaço, Private App não revogado); 403 → "o token é válido, mas falta permissão" na chamada X, com os escopos exigidos quando o HubSpot os informa. Código antigo que levanta o erro sem detalhes continua com a mensagem anterior.
  • Log no backend (mesmo logger eeg_qa.api, uma linha JSON, vai pro docker logs): evento hubspot_request_rejected para toda recusa (401/403 e demais status de erro, que antes viravam um "indisponível" genérico) com status, caminho, categoria, mensagem, escopos e id de correlação; e technical_validation_hubspot_part_failed quando uma parte do envio da validação (tasks, pdf, stage) falha.
  • Console do navegador: a tela registra cada parte que falhou (console.warn) e o erro geral do envio (console.error).
  • Sem migration; docs (INTEGRATIONS.md, BACKLOG.md) atualizadas.

Verificação

  • Backend: 335 passed (testes novos: status/caminho/escopos no erro, log sem o token, outros status logados, mapeamento 401 x 403, log da parte que falhou). Frontend: tsc limpo, lint sem erros, 14 testes da tela (1 novo).

🤖 Generated with Claude Code

## O que é O envio da validação ao HubSpot falhava com uma mensagem única ("Token inválido ou sem permissão") que não deixava saber se o problema era o token ou a falta de escopo. Esta PR mostra a causa de verdade e deixa rastro nos logs. ## Mudanças - `HubspotAuthError` passa a carregar o status, o caminho chamado e a explicação do HubSpot (`message`, `category`, `correlationId` e, em 403, os escopos exigidos). Nunca o token. - Mensagem na tela: **401** → "o HubSpot não reconheceu o token" (confira `HUBSPOT_ACCESS_TOKEN`, formato `pat-na1-...`, sem aspas/espaço, Private App não revogado); **403** → "o token é válido, mas falta permissão" na chamada X, com os escopos exigidos quando o HubSpot os informa. Código antigo que levanta o erro sem detalhes continua com a mensagem anterior. - **Log no backend** (mesmo logger `eeg_qa.api`, uma linha JSON, vai pro `docker logs`): evento `hubspot_request_rejected` para toda recusa (401/403 e demais status de erro, que antes viravam um "indisponível" genérico) com status, caminho, categoria, mensagem, escopos e id de correlação; e `technical_validation_hubspot_part_failed` quando uma parte do envio da validação (tasks, pdf, stage) falha. - **Console do navegador:** a tela registra cada parte que falhou (`console.warn`) e o erro geral do envio (`console.error`). - Sem migration; docs (`INTEGRATIONS.md`, `BACKLOG.md`) atualizadas. ## Verificação - Backend: 335 passed (testes novos: status/caminho/escopos no erro, log sem o token, outros status logados, mapeamento 401 x 403, log da parte que falhou). Frontend: tsc limpo, lint sem erros, 14 testes da tela (1 novo). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
fix: erros do HubSpot distinguem 401 de 403, mostram escopos exigidos e vao pro log
Some checks failed
EEG QA CI / Detectar o que mudou (pull_request) Successful in 1m57s
EEG QA CI / Backend (pull_request) Successful in 8m45s
EEG QA CI / Frontend (pull_request) Failing after 14m1s
EEG QA CI / Build e publicação de imagens (pull_request) Has been skipped
EEG QA CI / Deploy production (pull_request) Has been skipped
EEG QA CI / Deploy development (pull_request) Has been skipped
7578bbefa7
A mensagem unica "invalido ou sem permissao" escondia a causa. Agora o erro guarda
status/caminho/explicacao do HubSpot (sem o token), a tela separa token nao
reconhecido de escopo faltando, e cada recusa vai pro log do backend e pro console.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
test: deixa os testes do frontend toleram o runner lento/carregado do CI
All checks were successful
EEG QA CI / Detectar o que mudou (pull_request) Successful in 50s
EEG QA CI / Backend (pull_request) Successful in 4m16s
EEG QA CI / Frontend (pull_request) Successful in 9m35s
EEG QA CI / Build e publicação de imagens (pull_request) Successful in 6m47s
EEG QA CI / Deploy production (pull_request) Has been skipped
EEG QA CI / Deploy development (pull_request) Has been skipped
8a76f06d2f
Os jobs de frontend das PRs #89 e #90 morreram na etapa de testes sem nenhuma mudanca de
codigo capaz de explicar (a #90 nao tem codigo de frontend). Defesas: timeouts maiores
(asyncUtilTimeout 10 s, testTimeout/hookTimeout 30 s) e, no CI, no maximo 2 workers do
vitest (um jsdom por nucleo derruba/atrasa workers com pouca RAM). Medido: com CI=true a
suite leva ~34 s, tanto quanto sem limite.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
jhony75 merged commit f379bd533d into develop 2026-10-15 18:57:55 -03:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
jhony75/eeg-qa!89
No description provided.