Skip to content

A04 · Cliente de API tipado, autenticação e tratamento de erros #51

Closed

Description

@tecrodrigocastro

Contexto

Um único jeito de falar com a API, com tipos gerados do contrato OpenAPI do Scramble.

Escopo

  • Gerar tipos e cliente a partir do OpenAPI (openapi-typescript ou equivalente) com script pnpm api:gen
  • Camada de serviços por módulo, sem chamadas diretas de componentes
  • Interceptor que injeta o token Bearer, renova ou desloga em 401 e propaga X-Request-Id
  • Tradução do envelope de erro da API em mensagens de campo e avisos
  • Armazenamento do token em cookie httpOnly via rota do servidor Nuxt, não em localStorage
  • Composable useEdition() com a edição atual

Critérios de aceite

  • Mudança no contrato da API quebra o typecheck do front
  • Token nunca fica acessível a JavaScript do navegador
  • Erros de validação aparecem ao lado do campo correto

Notas técnicas

  • Se o token precisar estar no cliente, justificar em ADR

Depende de

Definição de pronto

  • Testes passando na CI
  • Lint e análise estática sem erros
  • Documentação atualizada (OpenAPI via Scramble no backend, ou README do módulo no front)
  • Revisado por pelo menos uma pessoa

Activity

  1. moved this from Todo to In Progress in PHPeste Platformon Nov 4, 2026
  2. moved this from In Progress to Todo in PHPeste Platformon Nov 4, 2026
  3. moved this from Todo to In Progress in PHPeste Platformon Nov 5, 2026
  4. moved this from In Progress to Done in PHPeste Platformon Nov 5, 2026
  5. tecrodrigocastro commented on Nov 5, 2026

    @tecrodrigocastro
    MemberAuthor

    Fechada no PR #88 (merged):

    • npm run api:gen gera app/infrastructure/http/api-types.d.ts a partir do OpenAPI do Scramble, commitado
    • HttpClientError com code/requestId (envelope do B04 + fallback X-Request-Id)
    • 401 em requisição autenticada desloga e redireciona pro /login via httpClient.setUnauthorizedHandler()
    • useEdition() + editionStore

    Desvio consciente do escopo original, documentado em docs/adr/0005-token-bearer-no-client.md: token continua Bearer no client (authStore), não cookie httpOnly — o app mobile consome a mesma API com o mesmo token, e cookie só existe no navegador.

    npm run lint, typecheck, test (135 testes) e build passam. Marcando como Done.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Type

No type

Projects

Relationships

None yet

Development

No branches or pull requests

Issue actions