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).

53 lines (52 loc) 1.98 kB
/** * Convertit une WebHookResponse normalisée (retournée par `webHookManagement`) * en entrée prête à persister dans une suppression list côté consommateur. * * Retourne `null` si l'event ne doit pas créer d'entrée (DELIVERED, OPENED, * CLICKED, SOFT_BOUNCE, erreur de parsing, etc.) — le consommateur peut * ignorer silencieusement. * * Mapping (aligné sur les WebHookStatus normalisés par la lib) : * - `HARD_BOUNCE` → `hard_bounce` * - `SPAM_COMPLAINT` / `SPAM` → `spam_complaint` * - `SUBSCRIPTION_CHANGE` → `unsubscribe_marketing` par défaut (conservative : * on préserve le canal transactionnel). Si `metaData.stream === 'transactional'` * est présent, on considère `unsubscribe_all` (le destinataire s'est * désinscrit d'une notif transactionnelle, c'est qu'il ne veut plus rien). * - autres (DELIVERED, OPENED, CLICKED, SOFT_BOUNCE, DELAYED, REJECTED, …) → null */ export function normalizeSuppressionFromWebhook(response) { if (!response.success) return null; const data = response.data; const email = data.to; if (!email) return null; const reason = mapWebHookTypeToReason(data.webHookType, data.metaData); if (!reason) return null; return { email, reason }; } function mapWebHookTypeToReason(type, metaData) { switch (type) { case 'HARD_BOUNCE': return 'hard_bounce'; case 'SPAM_COMPLAINT': case 'SPAM': return 'spam_complaint'; case 'SUBSCRIPTION_CHANGE': { const stream = readStream(metaData); if (stream === 'transactional') return 'unsubscribe_all'; return 'unsubscribe_marketing'; } default: return null; } } function readStream(metaData) { if (!metaData || typeof metaData !== 'object') return undefined; const value = metaData.stream; return typeof value === 'string' ? value : undefined; }