UNPKG

@email-service/email-service

Version:

email-service is a versatile npm package designed to simplify the integration and standardization of email communications across multiple Email Service Providers (ESPs).

55 lines (54 loc) 2.2 kB
import type { RateLimitConfig, ESPName } from '../types/emailServiceSelector.type.js'; /** * Défauts embarqués par ESP, exprimés en envois par seconde. * * - resend : 10/s (limite officielle Resend) * - brevo : 100/s (conservative, plan business) * - postmark : 10/s (safe default Postmark) * - nodemailer : 5/s (prudent SMTP, dépend fortement du fournisseur) * - emailserviceviewer / local : 1000/s (viewer de test — pas de vraie limite) * * Ces défauts s'appliquent UNIQUEMENT si `config.rateLimit` est absent. Dès * qu'une valeur `rateLimit` est fournie par le consommateur, elle remplace * complètement le défaut (pas de merge partiel). */ export declare const RATE_LIMIT_DEFAULTS: Record<ESPName, RateLimitConfig>; /** * Token bucket minimal, in-memory, **par instance**. Chaque instance * `EmailServiceSelector` créée par le consommateur a son propre bucket : * pas de synchronisation cross-process, pas de persistance. Au redémarrage, * le bucket repart plein. * * Algorithme : * - capacity tokens au démarrage (autorise un petit burst initial) * - refill continu à `rate` tokens/s (calcul paresseux à chaque acquire) * - acquire() attend le temps nécessaire si aucun token dispo, via setTimeout * (zéro CPU spin) * * Retourne le nombre de ms attendues — utile pour le logger. */ export declare class TokenBucket { private readonly rate; private readonly capacity; private tokens; private lastRefill; constructor(rate: number, capacity: number); private refill; acquire(): Promise<number>; } /** * Compose plusieurs token buckets — utile quand on veut cumuler * `perSecond` et `perMinute`. `acquire()` attend sur le bucket le plus * restrictif. */ export declare class CompositeBucket { private readonly buckets; constructor(buckets: TokenBucket[]); acquire(): Promise<number>; } /** * Construit un rate limiter à partir d'un `Config`. Retourne `null` si * aucun rate limit n'est applicable (ne devrait pas arriver avec les * défauts embarqués, sauf ESP inconnu). */ export declare function createRateLimiter(esp: ESPName, override?: RateLimitConfig): TokenBucket | CompositeBucket | null;