- MediaStorageService com interface upload/getUrl/delete
- LocalDiskAdapter salva em /uploads/media/ com UUID + extensão por mimetype
- Cria o diretório automaticamente no boot
- BASE_URL adicionado ao .env.example
- MediaStorageService e LocalDiskAdapter registrados no WhatsappModule
- Adicionado JwtAuthGuard global para validar tokens nas rotas privadas
- Adicionados decorators Public e Roles para separar rotas públicas e permissões
- Adicionado RolesGuard para proteger rotas administrativas por perfil
- Rotas privadas passam a exigir Authorization Bearer Token
- WebSocket do WhatsApp passa a exigir JWT no handshake
- Adicionado rate limit global com @nestjs/throttler
- Adicionado LoginDto e ValidationPipe para validar payload de login
- Extraído SQL de acesso do usuário para UserAccessRepository
- Melhorados logs de login LDAP/Microsoft sem expor dados sensíveis
* Bootstrap da aplicação com NestJS + TypeScript
* Migração de Node.js puro + JavaScript para NestJS como framework
* Estrutura base: AppModule, AppController, health check em /health
* loadEnv com busca hierárquica de .env por ambiente
* Módulo auth completo com arquitetura em camadas:
- AuthController: rotas HTTP de autenticação
- AuthService: fachada de negócio
- AuthConfigService: leitura centralizada de variáveis de ambiente
- AuthTokenService: emissão de JWT próprio da aplicação
* Autenticação via LDAP/Active Directory com ldapts
* Autenticação via Microsoft OAuth 2.0 (Entra ID)
* Proteção CSRF no fluxo OAuth com HMAC state assinado
* Endpoint /auth/config para o frontend descobrir provedores ativos
* Documentação do módulo em docs/auth.md