@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
TypeScript
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;