Skip to content

Samuelf27/node-api-starter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Ā 

History

3 Commits
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 

Repository files navigation

šŸ” node-api-starter

Boilerplate de API REST em produção com TypeScript — autenticação JWT (access + refresh), RBAC, validação, Swagger, testes e Docker.


šŸ“Œ Sobre

Um ponto de partida pronto para produção para APIs Node.js — resolvendo as partes que toda empresa precisa e ninguĆ©m quer reescrever: autenticação, autorização por papĆ©is, validação de entrada, documentação e testes. Arquitetura em camadas e repositório plugĆ”vel (troque memória → PostgreSQL sem mexer nos serviƧos).

✨ O que vem pronto

  • šŸ”‘ Autenticação JWT com access + refresh token e rotação + revogação (logout)
  • šŸ›”ļø RBAC — autorização por papĆ©is (ADMIN, USER)
  • šŸ”’ Senhas com bcrypt
  • šŸŖ– Helmet (headers de seguranƧa) + CORS por origem configurĆ”vel
  • 🚦 Rate limiting nas rotas de autenticação (express-rate-limit)
  • āœ… Validação de entrada com Zod (erros 400 estruturados)
  • šŸ“š Swagger UI em /docs (OpenAPI 3)
  • 🧪 20 testes de integração (Vitest + Supertest)
  • 🐳 Docker + docker-compose (com PostgreSQL)
  • āš™ļø CI no GitHub Actions (typecheck + testes + build)
  • 🧱 Arquitetura modular (config, lib, middleware, modules)

šŸ”— Endpoints

Método Rota Auth Descrição
POST /api/auth/register — Cria conta (retorna tokens)
POST /api/auth/login — Login (retorna tokens)
POST /api/auth/refresh — Renova e rotaciona os tokens
POST /api/auth/logout — Revoga o refresh token informado
GET /api/auth/me Bearer Dados do usuƔrio logado
GET /api/users ADMIN Lista usuƔrios
GET /api/users/:id ADMIN Detalhe
PATCH /api/users/:id ADMIN Atualiza
DELETE /api/users/:id ADMIN Remove
GET /health Ā· /docs — Status Ā· Documentação

šŸš€ Como rodar

npm install
cp .env.example .env   # gere segredos JWT fortes: openssl rand -hex 32
npm run dev        # http://localhost:3000  (docs em /docs)
npm test           # 20 testes de integração
npm run build      # bundle de produção (tsup)

āš ļø Segredos JWT sĆ£o obrigatórios. Em production a aplicação falha ao iniciar se JWT_ACCESS_SECRET/JWT_REFRESH_SECRET estiverem ausentes, com menos de 32 caracteres ou usando placeholders conhecidos. Em dev/test, um segredo efĆŖmero Ć© gerado automaticamente (com aviso) e os tokens sĆ£o invalidados a cada reinĆ­cio.

šŸ”‘ Admin (seed opcional)

Não hÔ admin pré-cadastrado por padrão. Para semear um, defina no .env:

SEED_ADMIN=true
SEED_ADMIN_EMAIL=admin@example.com
SEED_ADMIN_PASSWORD=uma-senha-forte

O seed é ignorado quando SEED_ADMIN não é true, e as credenciais nunca são impressas em produção.

šŸ” Refresh tokens (rotação + revogação)

/api/auth/refresh valida o refresh token, invalida o token usado e emite um novo par (rotação). Reutilizar um refresh token jĆ” rotacionado retorna 401. /api/auth/logout revoga o refresh token informado. Os jti vĆ”lidos ficam num store em memória que, como o repositório de usuĆ”rios, Ć© reiniciado a cada restart do processo — troque por Redis/banco numa implementação real.

Com Docker

docker compose up --build   # ajuste os segredos JWT no docker-compose.yml antes

Exemplo

# login (use as credenciais do seu seed, se habilitado)
curl -X POST localhost:3000/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email":"admin@example.com","password":"uma-senha-forte"}'

# usar o token
curl localhost:3000/api/auth/me -H "Authorization: Bearer <accessToken>"

šŸ—„ļø Banco de dados real (PostgreSQL + Prisma)

O projeto usa um repositório em memória por padrão (zero setup). Para produção, hÔ um prisma/schema.prisma pronto:

  1. npm i @prisma/client && npm i -D prisma
  2. Configure DATABASE_URL no .env
  3. npx prisma migrate dev
  4. Implemente UserRepository (src/db/repository.ts) usando o Prisma Client

A interface UserRepository garante que nenhum serviƧo precisa mudar.

🧱 Estrutura

src/
ā”œā”€ā”€ env.ts                 # variĆ”veis validadas com Zod
ā”œā”€ā”€ app.ts / server.ts     # app Express + bootstrap
ā”œā”€ā”€ lib/                   # jwt, password, errors
ā”œā”€ā”€ db/repository.ts       # camada de dados (plugĆ”vel)
ā”œā”€ā”€ middleware/            # auth, authorize (RBAC), validate, errors
ā”œā”€ā”€ modules/auth/          # register, login, refresh, me
ā”œā”€ā”€ modules/users/         # CRUD com RBAC
└── docs/openapi.ts        # spec OpenAPI

šŸ“„ LicenƧa

MIT Ā© Samuel Ferreira


GitHub Ā· LinkedIn

About

šŸ” Boilerplate de API REST de produção: TypeScript, JWT (access+refresh), RBAC, Zod, Swagger, testes e Docker.

Topics

Resources

License

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors