index.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. /* eslint-disable global-require */
  2. import config from "config";
  3. import Mailgun from "mailgun-js";
  4. import CoreClass from "../../core";
  5. let MailModule;
  6. class _MailModule extends CoreClass {
  7. // eslint-disable-next-line require-jsdoc
  8. constructor() {
  9. super("mail");
  10. MailModule = this;
  11. }
  12. /**
  13. * Initialises the mail module
  14. *
  15. * @returns {Promise} - returns promise (reject, resolve)
  16. */
  17. async initialize() {
  18. const importSchema = schemaName =>
  19. new Promise(resolve => {
  20. import(`./schemas/${schemaName}`).then(schema => resolve(schema.default));
  21. });
  22. this.schemas = {
  23. verifyEmail: await importSchema("verifyEmail"),
  24. resetPasswordRequest: await importSchema("resetPasswordRequest"),
  25. passwordRequest: await importSchema("passwordRequest")
  26. };
  27. this.enabled = config.get("apis.mailgun.enabled");
  28. if (this.enabled)
  29. this.mailgun = new Mailgun({
  30. apiKey: config.get("apis.mailgun.key"),
  31. domain: config.get("apis.mailgun.domain")
  32. });
  33. return new Promise(resolve => resolve());
  34. }
  35. /**
  36. * Sends an email
  37. *
  38. * @param {object} payload - object that contains the payload
  39. * @param {object} payload.data - information such as to, from in order to send the email
  40. * @returns {Promise} - returns promise (reject, resolve)
  41. */
  42. SEND_MAIL(payload) {
  43. return new Promise(resolve => {
  44. if (MailModule.enabled)
  45. MailModule.mailgun.messages().send(payload.data, () => {
  46. resolve();
  47. });
  48. else resolve();
  49. });
  50. }
  51. /**
  52. * Returns an email schema
  53. *
  54. * @param {object} payload - object that contains the payload
  55. * @param {string} payload.schemaName - name of the schema to get
  56. * @returns {Promise} - returns promise (reject, resolve)
  57. */
  58. GET_SCHEMA(payload) {
  59. return new Promise(resolve => {
  60. resolve(MailModule.schemas[payload.schemaName]);
  61. });
  62. }
  63. }
  64. export default new _MailModule();