nodemailer-mandrill-template-transport
Version:
Mandrill transport for Nodemailer
169 lines (120 loc) • 4.84 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function (_ref4) {
var auth = _ref4.auth;
var mandrillClient = new _mandrill.Mandrill(auth.apiKey);
var mandrillSend = (0, _lodash2.default)(send, mandrillClient);
var validApiRequest = function validApiRequest(callback) {
return function (mailerResponse) {
return callback(null, mailerResponse);
};
};
var invalidApiRequest = function invalidApiRequest(callback) {
return function (err) {
return callback(err);
};
};
return {
version: packageInfo.version,
name: TRANSPORTER_NAME,
client: mandrillClient,
send: function send(mail, callback) {
return mandrillSend(mail).then(validApiRequest(callback)).catch(invalidApiRequest(callback));
}
};
};
var _mandrill = require('mandrill-api/mandrill');
var _addressparser = require('addressparser');
var _addressparser2 = _interopRequireDefault(_addressparser);
var _lodash = require('lodash.partial');
var _lodash2 = _interopRequireDefault(_lodash);
var _lodash3 = require('lodash.groupby');
var _lodash4 = _interopRequireDefault(_lodash3);
var _lodash5 = require('lodash.isundefined');
var _lodash6 = _interopRequireDefault(_lodash5);
var _lodash7 = require('lodash.isfunction');
var _lodash8 = _interopRequireDefault(_lodash7);
var _lodash9 = require('lodash.isarray');
var _lodash10 = _interopRequireDefault(_lodash9);
var _lodash11 = require('lodash.constant');
var _lodash12 = _interopRequireDefault(_lodash11);
var _lodash13 = require('lodash.merge');
var _lodash14 = _interopRequireDefault(_lodash13);
var _lodash15 = require('lodash.pick');
var _lodash16 = _interopRequireDefault(_lodash15);
var _lodash17 = require('lodash.omit');
var _lodash18 = _interopRequireDefault(_lodash17);
var _lodash19 = require('lodash.cond');
var _lodash20 = _interopRequireDefault(_lodash19);
var _lodash21 = require('lodash.first');
var _lodash22 = _interopRequireDefault(_lodash21);
var _lodash23 = require('lodash.flatten');
var _lodash24 = _interopRequireDefault(_lodash23);
var _lodash25 = require('lodash.has');
var _lodash26 = _interopRequireDefault(_lodash25);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
var packageInfo = require('../package.json');
var TRANSPORTER_NAME = 'MandrillTemplate';
function formatEmail(type, item) {
var hasAddr = function hasAddr(item) {
return (0, _lodash26.default)(item, 'address') || (0, _lodash26.default)(item, 'email');
};
return (0, _lodash20.default)([[_lodash6.default, (0, _lodash12.default)([])], [_lodash8.default, function (arr) {
return formatEmail(type, arr());
}], [hasAddr, function (arr) {
return {
email: arr.address,
name: arr.name,
type: type
};
}], [_lodash10.default, function (arr) {
return arr.map(function (item) {
return formatEmail(type, item);
});
}], [(0, _lodash12.default)(true), function (arr) {
var emailList = (0, _addressparser2.default)(arr) || [];
return emailList.map(function (_ref) {
var email = _ref.address;
var name = _ref.name;
return { email: email, name: name, type: type };
});
}]])(item);
}
function formatHeader(data) {
return (0, _lodash14.default)(data.headers, { 'Reply-To': data.replyTo });
}
/*
* Need to rewrite this function to be more readable
*/
function formatMailOptions(data) {
var _ref2;
var toUnflatten = ['to', 'cc', 'bcc'].map(function (type) {
return formatEmail(type, data[type]);
});
var to = (_ref2 = []).concat.apply(_ref2, _toConsumableArray((0, _lodash24.default)(toUnflatten)));
var _ref3 = (0, _lodash22.default)(formatEmail('from', data.from)) || {};
var from_email = _ref3.email;
var from_name = _ref3.name;
var message = (0, _lodash14.default)({
headers: formatHeader(data)
}, (0, _lodash18.default)(data, 'template_name', 'template_content', 'from', 'cc', 'to', 'bcc', 'replyTo'), {
from_email: from_email,
from_name: from_name,
to: to
});
return (0, _lodash14.default)((0, _lodash16.default)(data, 'template_name', 'template_content'), { message: message });
}
function send(mandrillClient, mail) {
return new Promise(function (resolve, reject) {
var onSuccess = function onSuccess(results) {
var mailerResponse = (0, _lodash4.default)(results, 'status');
mailerResponse.messageId = (results[0] || {})._id;
resolve(mailerResponse);
};
var payload = formatMailOptions(mail.data);
mandrillClient.messages.sendTemplate(payload, onSuccess, reject);
});
}