@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).
56 lines (55 loc) • 2.76 kB
TypeScript
import { EmailPayload, FromInput, IEmailService, Recipient, RecipientInput, StandardResponse, WebHookResponse } from "../types/email.type.js";
import type { Config } from "../types/emailServiceSelector.type.js";
import type { BulkPayload, BulkReport, EmailServiceHooks } from "../types/bulk.type.js";
import { TokenBucket, CompositeBucket } from "../utils/rateLimit.js";
export type ESPOptions = {
/**
* Hooks optionnels branchés sur l'instance. Utilisés exclusivement par
* `sendBulk` pour la suppression list + observabilité campagne. Si
* absents, `sendBulk` fonctionne quand même (aucun check, aucun callback).
*/
hooks?: EmailServiceHooks;
};
export declare class ESP<T extends Config> implements IEmailService {
mailMultiple?: boolean;
transporter: T;
/**
* Rate limiter scopé par instance. Acquis avant chaque `sendMail`
* pour éviter que le consommateur déclenche des 429 côté ESP.
* `null` uniquement pour un ESP inconnu (ne devrait pas arriver).
*/
protected rateLimiter: TokenBucket | CompositeBucket | null;
/**
* Hooks fournis à l'instanciation. Consommés par `sendBulk`. `sendMail`
* unitaire ne les utilise pas — c'est une décision : les hooks sont liés
* au contexte campagne, pas aux appels transactionnels unitaires.
*/
protected hooks?: EmailServiceHooks;
constructor(service: T, opts?: ESPOptions);
checkRecipients(to: RecipientInput): Recipient[];
checkFrom(from: FromInput): Recipient | undefined;
/**
* Envoi public : applique le rate limit puis délègue à `doSendMail`
* implémenté par chaque ESP concret (template method). Les ESP
* concrets ne doivent PAS override `sendMail` directement, sinon
* ils contourneraient le throttle.
*/
sendMail(options: EmailPayload): Promise<StandardResponse>;
/**
* Envoi en lot avec suppression list, stream (transactional|marketing),
* templating par destinataire et hooks de persistance.
*
* Implémentation unique sur la classe de base — réutilise `sendMail()`
* pour chaque destinataire, ce qui fait bénéficier chaque envoi du
* rate limit automatiquement.
*
* Les règles de blocage (transactional vs marketing) sont appliquées
* par `runBulk` en interne — le consommateur implémente juste un
* `checkSuppression` qui retourne la reason brute.
*/
sendBulk(payload: BulkPayload): Promise<BulkReport>;
/** À implémenter par chaque ESP concret. */
protected doSendMail(options: EmailPayload): Promise<StandardResponse>;
webHookManagement(req: any): Promise<WebHookResponse>;
sendMailMultiple(options: EmailPayload[]): Promise<StandardResponse[]>;
}