Hasher (HasherService)
Puerto de dominio para hashear y verificar secretos (p. ej. passwords). La aplicación depende del puerto; la infraestructura aporta el adapter bcrypt.
Piezas base
| Pieza | Rol |
|---|---|
HasherService | Puerto: generateSalt(), hash(...), verify(...) |
HASHER_SERVICE_TOKEN | Token Nest para inyectar el puerto |
HasherBcrypt | Adapter con bcrypt |
Password / Salt / HashedString | VOs de dominio para credenciales |
Email | VO compartido de email con validación de formato |
UseCase<T, U> | Contrato genérico de casos de uso |
Hoy HasherBcrypt se registra como provider en UsersModule (cuando hay database). Cuando haya más consumidores, conviene extraer un HasherModule compartido (mismo patrón que EventBusModule).
Uso típico en un use case
text
UserCreator
│ @Inject(HASHER_SERVICE_TOKEN) hasher
│ salt = await hasher.generateSalt()
│ hashed = await hasher.hash(password, salt)
│ User.createNew(..., hashed, salt)
▼
UserRepository.save(user)El dominio trabaja con VOs (Password, Salt, HashedString); el adapter bcrypt no debe filtrarse a capas superiores.