import type { EmailDriver } from "../types.mjs"; /** Sliding-window rate limiter — queues calls until they fit in the * per-second budget. Intentionally simple: single-process only, no * cross-instance coordination. For distributed limits, plug a driver * that delegates to Redis/QStash. */ export interface RateLimitOptions { /** Maximum calls per `windowMs`. */ perSecond?: number; /** Alternative window in milliseconds — defaults to 1000. */ windowMs?: number; /** Hard cap on queued sends before rejecting fast. Default: 1000. */ maxQueue?: number; /** When true, the limiter also honours `Retry-After` from 429 * responses by delaying the next attempt by that long. */ respectRetryAfter?: boolean; /** Injected for tests. */ now?: () => number; sleep?: (ms: number) => Promise; } /** Provider-aware preset limits. Numbers are conservative — override * when your tier is higher. */ export declare const rateLimitPresets: { sendgrid: () => RateLimitOptions; mailgun: () => RateLimitOptions; resend: () => RateLimitOptions; postmark: () => RateLimitOptions; ses: () => RateLimitOptions; brevo: () => RateLimitOptions; }; /** Wrap a driver so `send()` respects a rate limit. */ export declare function withRateLimit(driver: EmailDriver, options: RateLimitOptions): EmailDriver;