@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).
39 lines (38 loc) • 1.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.injectUnsubscribeHeader = injectUnsubscribeHeader;
/**
* Injecte les headers RFC 8058 de désinscription dans un EmailPayload.
*
* Pose :
* - `List-Unsubscribe: <https://...>` (et éventuellement `<mailto:...>`)
* - `List-Unsubscribe-Post: List-Unsubscribe=One-Click`
*
* Helper pur et immutable : retourne un nouveau payload sans muter l'entrée.
* Si des headers `List-Unsubscribe*` existaient déjà dans le payload, ils
* sont remplacés.
*
* Usage typique : envoi marketing unitaire (sendMail), pour lequel on veut
* le comportement compliance sans passer par sendBulk. Pour les campagnes
* sendBulk, l'injection est automatique dès que `stream: 'marketing'`.
*
* @param payload L'EmailPayload source (non muté).
* @param url L'URL de désinscription du destinataire.
* @param mailto Adresse mailto optionnelle (ex: unsubscribe@mon-domaine.com)
* — si fournie, ajoutée en premier dans `List-Unsubscribe`.
*/
function injectUnsubscribeHeader(payload, url, mailto) {
const existingHeaders = payload.headers ?? [];
// Retire tout header de désinscription pré-existant (override).
const filtered = existingHeaders.filter((h) => h.name !== 'List-Unsubscribe' &&
h.name !== 'List-Unsubscribe-Post');
const listUnsubValue = mailto
? `<mailto:${mailto}>, <${url}>`
: `<${url}>`;
const nextHeaders = [
...filtered,
{ name: 'List-Unsubscribe', value: listUnsubValue },
{ name: 'List-Unsubscribe-Post', value: 'List-Unsubscribe=One-Click' },
];
return { ...payload, headers: nextHeaders };
}