@zingersystems/parse-server-api-mail-adapter
Version:
Universal Mail Adapter for Parse Server, supports any email provider REST API, with localization and templates - both built-in and external.
121 lines (97 loc) • 3.16 kB
JavaScript
/**
* @class ApiPayloadConverter
* @description Converter of mail payload for various mail provider APIs.
*/
class ApiPayloadConverter {
/**
* @description Converts the mail payload for the official Mailgun client.
* @param {Object} originalPayload The original payload (provider agnostic).
* @returns {Object} The payload according to Mailgun client specification.
*/
static mailgun(originalPayload) {
// Clone payload
const payload = Object.assign({}, originalPayload);
// Transform reply-to
if (payload.replyTo) {
payload['h:Reply-To'] = payload.replyTo;
delete payload.replyTo;
}
return payload;
}
/**
* @description Converts the mail payload for the AWS Simple Mail Service (AWS JavaScript SDK v3).
* @param {Object} originalPayload The original payload (provider agnostic).
* @returns {Object} The payload according to AWS SDK specification.
*/
static awsSes(originalPayload) {
// Clone payload
const payload = Object.assign({}, originalPayload);
// Transform sender
payload.Source = [payload.from];
delete payload.from;
// Transform recipient
payload.Destination = {
ToAddresses: [payload.to]
};
delete payload.to;
// Transform reply-to
if (payload.replyTo) {
payload.ReplyToAddresses = [payload.replyTo];
delete payload.replyTo;
}
// If message has content
if (payload.subject || payload.text || payload.html) {
// Set default message
payload.Message = {};
// Transform subject
if (payload.subject) {
payload.Message.Subject = {
Data: payload.subject,
Charset: 'UTF-8',
};
delete payload.subject;
}
// If message has body
if (payload.text || payload.html) {
// Set default body
payload.Message.Body = {};
// Transform plain-text
if (payload.text) {
payload.Message.Body.Text = {
Charset: 'UTF-8',
Data: payload.text,
};
delete payload.text;
}
// Transform HTML
if (payload.html) {
payload.Message.Body.Html = {
Charset: 'UTF-8',
Data: payload.html,
};
delete payload.html;
}
}
}
return payload;
}
/**
* @description Converts the mail payload for the official Sendgrid client.
* This is just for a very basic use case and discouraged for use with this version.
* @param {Object} originalPayload The original payload (provider agnostic).
* @returns {Object} The payload according to Mailgun client specification.
*/
static sendgrid(originalPayload) {
const payload = {
to : originalPayload.to,
from: originalPayload.from, // Change to your verified sender
subject: originalPayload.subject,
text: originalPayload.text,
html: originalPayload.html,
templateId: originalPayload.templateName,
dynamicTemplateData: { ...originalPayload.extra, ...originalPayload.placeholders }
};
return payload;
}
}
module.exports = ApiPayloadConverter;