| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 | /* eslint-disable global-require */import config from "config";import nodemailer from "nodemailer";import CoreClass from "../../core";let MailModule;class _MailModule extends CoreClass {	// eslint-disable-next-line require-jsdoc	constructor() {		super("mail");		MailModule = this;	}	/**	 * Initialises the mail module	 *	 * @returns {Promise} - returns promise (reject, resolve)	 */	async initialize() {		const importSchema = schemaName =>			new Promise(resolve => {				import(`./schemas/${schemaName}`).then(schema => resolve(schema.default));			});		this.schemas = {			verifyEmail: await importSchema("verifyEmail"),			resetPasswordRequest: await importSchema("resetPasswordRequest"),			passwordRequest: await importSchema("passwordRequest"),			dataRequest: await importSchema("dataRequest")		};		this.enabled = config.get("smtp.enabled");		if (this.enabled)			this.transporter = nodemailer.createTransport({				host: config.get("smtp.host"),				port: config.get("smtp.port"),				secure: config.get("smtp.secure"),				auth: {					user: config.get("smtp.auth.user"),					pass: config.get("smtp.auth.pass")				}			});		return new Promise(resolve => {			resolve();		});	}	/**	 * Sends an email	 *	 * @param {object} payload - object that contains the payload	 * @param {object} payload.data - information such as to, from in order to send the email	 * @returns {Promise} - returns promise (reject, resolve)	 */	SEND_MAIL(payload) {		return new Promise((resolve, reject) => {			if (MailModule.enabled) {				MailModule.transporter					.sendMail(payload.data)					.then(info => {						MailModule.log("SUCCESS", "MAIL_SEND", `Successfully sent email ${info.messageId}`);						return resolve();					})					.catch(err => {						MailModule.log("ERROR", "MAIL_SEND", `Failed to send email. ${err}`);						return reject();					});				return;			}			resolve();		});	}	/**	 * Returns an email schema	 *	 * @param {object} payload - object that contains the payload	 * @param {string} payload.schemaName - name of the schema to get	 * @returns {Promise} - returns promise (reject, resolve)	 */	GET_SCHEMA(payload) {		return new Promise(resolve => {			resolve(MailModule.schemas[payload.schemaName]);		});	}}export default new _MailModule();
 |