UNPKG

@srsl/tools

Version:

JavaScript tools for common interfaces

160 lines (136 loc) 4.99 kB
const mjml2html = require('mjml') const handlebars = require('handlebars') const path = require('path') const { promisify } = require('bluebird') // const { ses } = require('../../constructors/aws-sdk') const { createVerificationCode } = require('../') const readFile = promisify(require('fs').readFile) const readEmailTemplate = (filepath) => { try { return readFile(path.resolve(__dirname, filepath), 'utf8') } catch (e) { console.log('Failed to read template from directory. ', e) return null } } const readHTMLEmailTemplate = filename => readEmailTemplate(`./templates/dist/${filename}.html`) const readTextEmailTemplate = filename => readEmailTemplate(`./templates/dist/${filename}.txt`) const defaultEmailParams = { Destination: { /* required */ CcAddresses: [ 'noreply@trustedlife.com', // TODO - defaults /* more CC email addresses */ ], ToAddresses: [ 'noreply@gmail.com', // TODO - defaults /* more To email addresses */ ], }, Source: 'noreply@trustedlife.com', /* required */ // TODO - defaults ReplyToAddresses: [ 'noreply@trustedlife.com', // TODO - defaults ], } const defaultTemplatedEmailParams = Object.assign({}, defaultEmailParams, { Template: 'TEMPLATE_NAME', /* required */ TemplateData: '{ "REPLACEMENT_TAG_NAME":"REPLACEMENT_VALUE" }', }) const defaultStaticEmailParams = Object.assign({}, defaultEmailParams, { Message: { Body: { Html: { Charset: 'UTF-8', Data: 'HTML_FORMAT_BODY', }, Text: { Charset: 'UTF-8', Data: 'TEXT_FORMAT_BODY', }, }, Subject: { Charset: 'UTF-8', Data: 'Message from TrustedLife', }, }, }) /* * sendStaticEmailWithName() * {param} templateName<String> * {param} subjectLine<String> * * Usage: * - ex: sendStaticEmailWithName('purchaseProcessing', { ToAddresses: ['user1@gmail.com'] }, 'noreply@trustedlife.com') * */ module.exports.sendStaticEmailWithName = async function sendStaticEmailWithName(templateName, Destination, Source, subjectLine = 'Message from TrustedLife') { const params = Object.assign({}, defaultStaticEmailParams, { Destination }, { Source }) params.Message.Body.Html.Data = await readHTMLEmailTemplate(templateName) params.Message.Body.Text.Data = await readTextEmailTemplate(templateName) params.Message.Subject.Data = subjectLine console.log(params) // ses.sendEmail(params).promise().then((data) => { // console.log(data.MessageId) // }).catch((err) => { // console.error(err, err.stack) // }) } module.exports.send = async function send(template, dest, src, data = {}, subject = 'Message from TrustedLife') { const params = Object.assign( {}, defaultStaticEmailParams, { Destination: dest }, { Source: src }, ) const mjmlTemplate = handlebars.compile(await readHTMLEmailTemplate(template)) const textTemplate = handlebars.compile(await readTextEmailTemplate(template)) const mjml = mjmlTemplate(data) const { html } = mjml2html(mjml) const text = textTemplate(data) params.Message.Body.Html.Data = html params.Message.Body.Text.Data = text params.Message.Subject.Data = subject console.log(params) // ses.sendEmail(params).promise().then((resp) => { // console.log(resp.MessageId) // }).catch((err) => { // console.error(err, err.stack) // }) } /* * sendTemplatedEmailWithNameAndData() * {param} templateName<String> * {param} subjectLine<String> * * Usage: * * ex: sendTemplatedEmailWithNameAndData('purchaseConfirmed', { order: "Pioneer's Something or Other", price: 60000 }, { ToAddresses: ['user1@gmail.com'] }, 'noreply@trustedlife.com') * */ async function sendTemplatedEmailWithNameAndData(templateName, templateData, Destination, Source) { if (!templateData) { console.error('Parameter "templateData" must be provided.') return } const params = Object.assign({}, defaultTemplatedEmailParams, { Destination }, { Source }) params.Template = templateName params.TemplateData = JSON.stringify(templateData) console.log(params) // ses.sendTemplatedEmail(params).promise().then((data) => { // console.log(data) // console.log(data.MessageId) // }).catch((err) => { // console.error(err, err.stack) // }) } const generateEmailVerificationCode = () => uuidv1() const sendEmailVerificationCode = (toEmails, fromEmail = 'trustedlifeapp@gmail.com') => { let ToAddresses = toEmails if (typeof toEmails === 'string') ToAddresses = [toEmails] const CODE_LENGTH = 6 const code = createVerificationCode(CODE_LENGTH) sendTemplatedEmailWithNameAndData('validateEmail', { code }, { ToAddresses }, fromEmail) return code } module.exports.sendTemplatedEmailWithNameAndData = sendTemplatedEmailWithNameAndData module.exports.readHTMLEmailTemplate = readHTMLEmailTemplate module.exports.readTextEmailTemplate = readTextEmailTemplate module.exports.sendEmailVerificationCode = sendEmailVerificationCode