Feature - OTP (Geração e Validação)
Introdução ao documento
Este documento descreve o ciclo de geração e validação de OTP utilizado para autenticação de telefone. Evidência: src/routes/otp.ts:9 Evidência: src/routes/otp.ts:27
Versionamento
- Versão do documento:
2.0.0. - Última atualização:
2026-03-18. Evidência: codex-promts.md:16
Referencial teórico
- Persistência com model Sequelize
Otp. - Envio de OTP por template WhatsApp. Evidência: src/models/otp.ts:18 Evidência: src/features/api/whatsapp/sendOtpCode.ts:2
Visão geral
A feature cria OTP de 6 dígitos, com validade de 15 minutos, e valida posteriormente o par phone + code contra expiração.
Evidência: src/routes/otp.ts:11
Evidência: src/routes/otp.ts:12
Evidência: src/routes/otp.ts:31
Evidência: src/routes/otp.ts:37
Atores
- Serviço interno consumidor da API (com token de serviço).
- Usuário final que recebe o OTP via WhatsApp. Evidência: src/routes/otp.ts:9 Evidência: src/features/api/whatsapp/sendOtpCode.ts:12
Pré-condições
- Header
Authorizationválido para middlewareverifyServiceToken. SERVICE_TOKENconfigurado no ambiente.WHATSAPP_API_TOKENeWHATSAPP_PHONE_IDpara envio do template. Evidência: src/routes/otp.ts:9 Evidência: src/auth/serviceToken.ts:7 Evidência: src/features/api/whatsapp/sendOtpCode.ts:4 Evidência: src/features/api/whatsapp/sendOtpCode.ts:6
Fluxo principal
POST /otprecebephone.- Gera código aleatório de 6 dígitos.
- Define
validUntil(+15 minutos). - Persiste OTP.
- Envia template WhatsApp.
POST /otp/confirmationvalida código e prazo. Evidência: src/routes/otp.ts:10 Evidência: src/routes/otp.ts:11 Evidência: src/routes/otp.ts:12 Evidência: src/routes/otp.ts:17 Evidência: src/routes/otp.ts:18 Evidência: src/routes/otp.ts:27
Fluxos alternativos
401: token inválido.403: ausência de headerAuthorization.400: OTP inválido ou expirado na confirmação.500: falha de persistência/envio/consulta. Evidência: src/auth/serviceToken.ts:22 Evidência: src/auth/serviceToken.ts:30 Evidência: src/routes/otp.ts:34 Evidência: src/routes/otp.ts:38 Evidência: src/routes/otp.ts:22
Regras de negócio
- OTP sempre numérico e com 6 dígitos.
- Janela de validade fixa em 15 minutos.
- Só valida quando
phoneecodecoincidem com registro existente. - Expirado é rejeitado mesmo com código correto. Evidência: src/routes/otp.ts:11 Evidência: src/routes/otp.ts:12 Evidência: src/routes/otp.ts:31 Evidência: src/routes/otp.ts:37
Estados possíveis (quando houver)
- OTP gerado (
201). - OTP válido (
200). - OTP inválido (
400). - OTP expirado (
400). Evidência: src/routes/otp.ts:20 Evidência: src/routes/otp.ts:41 Evidência: src/routes/otp.ts:34 Evidência: src/routes/otp.ts:38
Endpoints envolvidos
POST /otpPOST /otp/confirmationEvidência: src/routes/otp.ts:9 Evidência: src/routes/otp.ts:27
Dados impactados
- Tabela/model
Otp(criação e leitura). - Referência de dados locais:
../data/model.md. Evidência: src/routes/otp.ts:17 Evidência: src/routes/otp.ts:31 Evidência: src/models/otp.ts:33
Pendências
- Definir política de limpeza de OTP expirado (não há rotina dedicada no repositório). Evidência: src/routes/otp.ts:37 Evidência: src/workers/groupLinkDispatchWorker.ts:171