import '../domain/domain.dart'; abstract interface class UserRepository { Future findByEmail(String email); Future findById(String id); Future insert(UserAccount user); Future updatePasswordHash({ required String userId, required String passwordHash, required DateTime updatedAt, }); } abstract interface class AuthSessionRepository { Future insert(AuthSession session); Future findByTokenHash(String tokenHash); Future revoke({required String sessionId, required DateTime revokedAt}); } abstract interface class PasswordHasher { Future hash(String password); Future verify({required String password, required String passwordHash}); } abstract interface class OpaqueTokenService { String generateToken(); String hashToken(String token); } abstract interface class Clock { DateTime now(); } abstract interface class IdGenerator { String newId(); }