import 'package:halkyon_base_server/base.dart'; import 'package:serverpod/serverpod.dart'; /// Keeps every code and notice mailed, in place of a mail service. final class Mailbox implements CodeMailer { final codes = <({String to, String code, String language})>[]; final notices = < ({ String to, AccountResetKind kind, DateTime takesEffectAt, String language, }) >[]; /// Whether it takes no mail, as a mail service down. bool refusing = false; @override Future send( Session session, { required String to, required String code, required String language, }) async { if (refusing) { throw Exception('Connection refused'); } codes.add((to: to, code: code, language: language)); } @override Future sendResetNotice( Session session, { required String to, required AccountResetKind kind, required DateTime takesEffectAt, required String language, }) async { if (refusing) { throw Exception('Connection refused'); } notices.add(( to: to, kind: kind, takesEffectAt: takesEffectAt, language: language, )); } /// The last code mailed to [address]. String codeFor(String address) => codes.lastWhere((mail) => mail.to == address).code; }