import MailDev, {Mail} from "maildev"; export const MAIL_SERVER = new MailDev({ ip: '127.0.0.1', }); export async function setupMailServer(): Promise<void> { await new Promise<void>((resolve, reject) => MAIL_SERVER.listen((err?: Error) => { if (err) reject(err); else resolve(); })); } export async function teardownMailServer(): Promise<void> { await new Promise<void>((resolve, reject) => MAIL_SERVER.close((err?: Error) => { if (err) reject(err); else resolve(); })); } export async function popEmail(): Promise<Record<string, unknown> | null> { return await new Promise<Record<string, unknown> | null>((resolve, reject) => { MAIL_SERVER.getAllEmail((err: Error | undefined, emails: Mail[]) => { if (err) return reject(err); if (emails.length === 0) return resolve(null); const email = emails[0]; expect(email).toBeDefined(); expect(email.id).toBeDefined(); return resolve(new Promise<Record<string, unknown>>((resolve, reject) => { MAIL_SERVER.deleteEmail(email.id as string, (err: Error | undefined) => { if (err) return reject(err); resolve(email as Record<string, unknown>); }); })); }); }); }