export interface EmailVerificationDeps { checkVerified: () => Promise; onVerified: () => Promise; } export function createEmailVerificationPoller( deps: EmailVerificationDeps, ): { checkAndAdvance: () => Promise } { let checking = false; return { async checkAndAdvance(): Promise { if (checking) return false; checking = true; try { const verified = await deps.checkVerified(); if (!verified) return false; await deps.onVerified(); return true; } catch { return false; } finally { checking = false; } }, }; }