API de autenticação e gestão de sessão construída com foco em padrões de engenharia de software para produção: arquitetura em camadas, rastreabilidade de requisições, documentação OpenAPI, testes automatizados e CI com banco/redis reais.
Este repositório foi evoluído como base de estudo e portfólio técnico para demonstrar decisões de backend além do CRUD.
Escopo principal:
- autenticação com
accessToken+refreshTokencom rotação; - revogação de sessão por token e por usuário;
- validação e tratamento de erros consistentes;
- observabilidade mínima para operação real;
- qualidade contínua com lint, cobertura e CI.
16/16suítes passando104/104testes passando- cobertura global:
99.2%(branches99.2%) src/configesrc/middlewarescom100%de branch coverage- CI do GitHub Actions estável em
main
- Node.js 20 LTS
- Express 5
- TypeScript 5.9
- Prisma 7 + PostgreSQL
- Redis (ioredis)
- JWT (
jsonwebtoken) +bcryptjs - Zod para validação de payload
- Pino para logging estruturado
- Vitest + Jest + Supertest
- Biome (lint/format)
- Swagger UI + swagger-jsdoc
Padrão em camadas:
routes: contrato HTTP e composição de middlewarescontrollers: orquestração de entrada/saídaservices: regras de negóciorepositories: persistência e consultas
Middlewares críticos:
requestId: correlação de requisiçãologger: log estruturado com contextovalidate: validação de entrada com ZodauthMiddleware: proteção de rotas com JWTrateLimiter: proteção anti-abuso com Redis + fallback memóriaerrorHandler: resposta de erro unificada
POST /auth/registercria usuário com senha hasheada.POST /auth/loginvalida credenciais e retornaaccessToken+refreshToken.POST /auth/refreshvalida refresh token, revoga o antigo e emite novo par.POST /auth/logoutrevoga refresh token atual.POST /auth/logout-sessionePOST /auth/logout-allencerram sessões específicas ou todas.
- refresh token persistido com hash (
tokenHash) no banco - rotação por
jticom revogação explícita - validação de segredo JWT no startup (fail fast)
- tratamento centralizado de erro com
AppError - rate limit em endpoints sensíveis
- logs de aplicação ajustados para reduzir ruído em ambiente de teste
- encerramento adequado de conexões de teste para evitar open handles
Últimas entregas relevantes em main:
- #14 estabilidade de runtime de testes (teardown Prisma)
- #15 aumento de branch coverage em fluxos de auth/rate limiter
- #16 redução de ruído de logs em execução de teste
- #18 cobertura completa de branches em
src/config/prisma.ts - #19 cobertura completa de branches em
src/logger.ts - #20 cobertura completa de branches em
validate.tseerrorHandler.ts
As próximas tasks técnicas estão em to-do.txt, separando entregas concluídas de próximos incrementos de engenharia.
Pré-requisitos:
- Docker + Docker Compose
- Node.js 20 LTS
- npm
Subir infraestrutura e aplicação:
docker-compose up -d postgres redis
npm install
npx prisma migrate deploy
npx prisma generate
npm run devArquivo .env:
DATABASE_URL="postgresql://auth_user:auth_password@localhost:5432/auth_api"
JWT_SECRET="<gere-um-segredo-forte-com-no-minimo-32-caracteres>"
PORT=3000
REDIS_URL="redis://localhost:6379"
RATE_LIMIT_WINDOW_MS=60000
RATE_LIMIT_MAX_REQUESTS=100Para testes, usar tests/.env.test.
npm run dev: desenvolvimento com watchnpm run start: execução da APInpm run lint: lint com Biomenpm run format: valida formataçãonpm test: suíte principal (Vitest)npm run test:coverage:jest: cobertura com Jestnpm run typecheck: verificação de tipos
npm run lint
npm run test:coverage:jest
npx jest --config jest.config.cjs --runInBand --detectOpenHandles --openHandlesTimeout=5000POST /auth/registerPOST /auth/loginPOST /auth/refreshPOST /auth/logoutGET /auth/profileGET /users/meGET /auth/sessionsPOST /auth/logout-sessionPOST /auth/logout-allGET /healthGET /readyGET /docsGET /docs.json
- ampliar testes de falhas de infraestrutura (Redis/DB indisponível)
- consolidar decisão final Vitest x Jest para cobertura
- expandir regras de sessão por dispositivo (metadata mais rica)
- endurecimento de segurança (revisão de dependências e policy de segredo)
- maior observabilidade (métricas e tracing)
- preparo para cenário multi-instância com limites distribuídos avançados
src/
- app.ts
- server.ts
- logger.ts
- config/
- controllers/
- docs/
- errors/
- middlewares/
- repositories/
- routes/
- services/
- validators/
prisma/
- schema.prisma
- migrations/
tests/
- auth.e2e.test.ts
- health.e2e.test.ts
- middleware/
- config/
- repositories/
- services/
- setup.js
- jest.env.js
- jest.globals.js
- vitest.setup.mjs