@storyous/mailer 1.0.5 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,18 @@
1
+ import { Transporter } from 'nodemailer';
2
+ import { Options } from 'nodemailer/lib/mailer';
3
+ import { Logger } from 'winston';
4
+ import { IDefaultMailOptions, MailSender } from './mailSender';
5
+ declare const mailer: {
6
+ _transporter: Transporter<any> | undefined;
7
+ _logger: Logger | undefined;
8
+ /**
9
+ * RFC 2822 standard
10
+ * @type RegExp
11
+ */
12
+ _emailAddressRegexp: RegExp;
13
+ createSender(options: IDefaultMailOptions, logger?: Logger | undefined): MailSender;
14
+ sendMail(mailOptions: Options): Promise<any>;
15
+ _logSentMail(mailOptions: Options, resultInfo: any): void;
16
+ _extractEmail(emailText: string): string;
17
+ };
18
+ export default mailer;
package/dist/index.js ADDED
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const nodemailer_1 = require("nodemailer");
4
+ const mailSender_1 = require("./mailSender");
5
+ const mailer = {
6
+ _transporter: undefined,
7
+ _logger: undefined,
8
+ /**
9
+ * RFC 2822 standard
10
+ * @type RegExp
11
+ */
12
+ _emailAddressRegexp: /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/,
13
+ createSender(options, logger) {
14
+ this._transporter = (0, nodemailer_1.createTransport)(options);
15
+ this._logger = logger;
16
+ return new mailSender_1.MailSender(options, this.sendMail.bind(this));
17
+ },
18
+ async sendMail(mailOptions) {
19
+ return new Promise((resolve, reject) => {
20
+ if (!this._transporter) {
21
+ throw new Error('The transporter is not initialized yet! Use createSender before.');
22
+ }
23
+ this._transporter.sendMail(mailOptions, (err, info) => {
24
+ if (err) {
25
+ reject(err);
26
+ }
27
+ else {
28
+ this._logSentMail(mailOptions, info || {});
29
+ resolve(info);
30
+ }
31
+ });
32
+ });
33
+ },
34
+ _logSentMail(mailOptions, resultInfo) {
35
+ const extractEmail = this._extractEmail.bind(this);
36
+ let { to } = mailOptions;
37
+ if (typeof mailOptions.to === 'string') {
38
+ to = mailOptions.to?.split(',').map(extractEmail);
39
+ }
40
+ const logMetaInfo = {
41
+ subject: mailOptions.subject,
42
+ to,
43
+ };
44
+ if (resultInfo?.accepted?.length) {
45
+ logMetaInfo.accepted = resultInfo.accepted.map(extractEmail);
46
+ }
47
+ if (resultInfo?.rejected?.length) {
48
+ logMetaInfo.rejected = resultInfo.rejected.map(extractEmail);
49
+ }
50
+ if (resultInfo?.pending?.length) {
51
+ logMetaInfo.pending = resultInfo.pending.map(extractEmail);
52
+ }
53
+ this._logger?.info('Mail sent', logMetaInfo);
54
+ },
55
+ _extractEmail(emailText) {
56
+ const result = emailText.match(this._emailAddressRegexp);
57
+ return result ? result[0] : '';
58
+ },
59
+ };
60
+ exports.default = mailer;
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwyQ0FBMEQ7QUFHMUQsNkNBQStEO0FBRS9ELE1BQU0sTUFBTSxHQUFHO0lBQ1gsWUFBWSxFQUEwQixTQUFTO0lBQy9DLE9BQU8sRUFBcUIsU0FBUztJQUVyQzs7O09BR0c7SUFDSCxtQkFBbUIsRUFBRSxtRkFBbUY7SUFFeEcsWUFBWSxDQUFFLE9BQTRCLEVBQUUsTUFBZTtRQUN2RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUEsNEJBQWUsRUFBQyxPQUFPLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUV0QixPQUFPLElBQUksdUJBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQVEsQ0FBRSxXQUFvQjtRQUNoQyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLGtFQUFrRSxDQUFDLENBQUM7YUFDdkY7WUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFRLEVBQUUsSUFBYSxFQUFFLEVBQUU7Z0JBQ2hFLElBQUksR0FBRyxFQUFFO29CQUNMLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDZjtxQkFBTTtvQkFDSCxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7b0JBQzNDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDakI7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFlBQVksQ0FBRSxXQUFvQixFQUFFLFVBQWU7UUFDL0MsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFbkQsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLFdBQVcsQ0FBQztRQUN6QixJQUFJLE9BQU8sV0FBVyxDQUFDLEVBQUUsS0FBSyxRQUFRLEVBQUU7WUFDcEMsRUFBRSxHQUFHLFdBQVcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUNyRDtRQUVELE1BQU0sV0FBVyxHQUFRO1lBQ3JCLE9BQU8sRUFBRSxXQUFXLENBQUMsT0FBTztZQUM1QixFQUFFO1NBQ0wsQ0FBQztRQUVGLElBQUksVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUU7WUFDOUIsV0FBVyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUNoRTtRQUVELElBQUksVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUU7WUFDOUIsV0FBVyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUNoRTtRQUVELElBQUksVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUU7WUFDN0IsV0FBVyxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUM5RDtRQUVELElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsYUFBYSxDQUFFLFNBQWlCO1FBQzVCLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDekQsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ25DLENBQUM7Q0FFSixDQUFDO0FBRUYsa0JBQWUsTUFBTSxDQUFDIn0=
@@ -0,0 +1,34 @@
1
+ import { Address } from 'nodemailer/lib/mailer';
2
+ export interface ISendMailOptions {
3
+ bcc?: string | string[];
4
+ cc?: string | string[];
5
+ from?: string;
6
+ lang?: string;
7
+ replyTo?: string | Address;
8
+ template?: string;
9
+ to?: string | string[];
10
+ person?: {
11
+ lang?: string;
12
+ };
13
+ }
14
+ export interface IDefaultMailOptions {
15
+ from: string;
16
+ to: string | string[];
17
+ template: string;
18
+ defaultLang: string;
19
+ }
20
+ /**
21
+ * Provides shortcut for sending email
22
+ */
23
+ export declare class MailSender {
24
+ private readonly _sendFunction;
25
+ private readonly _sendTo;
26
+ private readonly _sendFrom;
27
+ private readonly _template;
28
+ private readonly _defaultLang;
29
+ constructor(options: IDefaultMailOptions, sendFunction: any);
30
+ send(params: ISendMailOptions): Promise<any>;
31
+ private _completeParams;
32
+ private _getLanguageFromParams;
33
+ private _getTemplate;
34
+ }
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.MailSender = void 0;
7
+ const errors_1 = require("@storyous/errors");
8
+ const handlebars_1 = __importDefault(require("handlebars"));
9
+ const lodash_1 = require("lodash");
10
+ /**
11
+ * Provides shortcut for sending email
12
+ */
13
+ class MailSender {
14
+ constructor(options, sendFunction) {
15
+ this._getTemplate = (params) => {
16
+ const compiledTemplate = handlebars_1.default.compile(params.template)(params);
17
+ const separatorRegexp = /<!--\s*\/([a-zA-Z0-9]+)\s*-->/;
18
+ const templatePieces = compiledTemplate.split(separatorRegexp);
19
+ templatePieces.shift(); // remove first blank string
20
+ if (templatePieces.length % 2 !== 0) {
21
+ throw errors_1.AppError.internal('The template is not valid.');
22
+ }
23
+ const template = {};
24
+ for (let i = 0; i < templatePieces.length; i += 2) {
25
+ template[templatePieces[i]] = templatePieces[i + 1];
26
+ }
27
+ if (template.subject) {
28
+ template.subject = template.subject.trim();
29
+ }
30
+ return template;
31
+ };
32
+ this._sendFunction = sendFunction;
33
+ this._sendTo = options.to;
34
+ this._sendFrom = options.from;
35
+ this._template = options.template;
36
+ this._defaultLang = options.defaultLang;
37
+ }
38
+ async send(params) {
39
+ params = this._completeParams(params);
40
+ const template = this._getTemplate(params);
41
+ const mailOptions = {
42
+ html: template.html,
43
+ text: template.text,
44
+ subject: template.subject,
45
+ to: params.to,
46
+ from: this._sendFrom,
47
+ replyTo: params.replyTo,
48
+ bcc: params.bcc,
49
+ cc: params.cc,
50
+ };
51
+ if (Array.isArray(mailOptions.to)) {
52
+ mailOptions.to = mailOptions.to.join(',');
53
+ }
54
+ if (Array.isArray(mailOptions.bcc)) {
55
+ mailOptions.bcc = mailOptions.bcc.join(',');
56
+ }
57
+ if (Array.isArray(mailOptions.cc)) {
58
+ mailOptions.cc = mailOptions.cc.join(',');
59
+ }
60
+ return this._sendFunction(mailOptions);
61
+ }
62
+ _completeParams(params) {
63
+ return (0, lodash_1.extend)({}, params, {
64
+ lang: this._getLanguageFromParams(params),
65
+ to: params.to || this._sendTo,
66
+ from: params.from || this._sendFrom,
67
+ template: params.template || this._template,
68
+ });
69
+ }
70
+ _getLanguageFromParams(params) {
71
+ if (params.lang) {
72
+ return params.lang;
73
+ }
74
+ if (params?.person?.lang) {
75
+ return params.person.lang;
76
+ }
77
+ return this._defaultLang;
78
+ }
79
+ }
80
+ exports.MailSender = MailSender;
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbFNlbmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL2xpYi9tYWlsU2VuZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDZDQUE0QztBQUM1Qyw0REFBb0M7QUFDcEMsbUNBQWdDO0FBdUJoQzs7R0FFRztBQUNILE1BQWEsVUFBVTtJQVluQixZQUFhLE9BQTRCLEVBQUUsWUFBaUI7UUE0RHBELGlCQUFZLEdBQUcsQ0FBQyxNQUF3QixFQUFFLEVBQUU7WUFFaEQsTUFBTSxnQkFBZ0IsR0FBRyxvQkFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFckUsTUFBTSxlQUFlLEdBQUcsK0JBQStCLENBQUM7WUFDeEQsTUFBTSxjQUFjLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBRS9ELGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLDRCQUE0QjtZQUVwRCxJQUFJLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDakMsTUFBTSxpQkFBUSxDQUFDLFFBQVEsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO2FBQ3pEO1lBRUQsTUFBTSxRQUFRLEdBQVEsRUFBRSxDQUFDO1lBQ3pCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQy9DLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQ3ZEO1lBRUQsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFO2dCQUNsQixRQUFRLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDOUM7WUFFRCxPQUFPLFFBQVEsQ0FBQztRQUNw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
package/lib/index.d.ts ADDED
@@ -0,0 +1,18 @@
1
+ import { Transporter } from 'nodemailer';
2
+ import { Options } from 'nodemailer/lib/mailer';
3
+ import { Logger } from 'winston';
4
+ import { IDefaultMailOptions, MailSender } from './mailSender';
5
+ declare const mailer: {
6
+ _transporter: Transporter<any> | undefined;
7
+ _logger: Logger | undefined;
8
+ /**
9
+ * RFC 2822 standard
10
+ * @type RegExp
11
+ */
12
+ _emailAddressRegexp: RegExp;
13
+ createSender(options: IDefaultMailOptions, logger?: Logger | undefined): MailSender;
14
+ sendMail(mailOptions: Options): Promise<any>;
15
+ _logSentMail(mailOptions: Options, resultInfo: any): void;
16
+ _extractEmail(emailText: string): string;
17
+ };
18
+ export default mailer;
@@ -0,0 +1,34 @@
1
+ import { Address } from 'nodemailer/lib/mailer';
2
+ export interface ISendMailOptions {
3
+ bcc?: string | string[];
4
+ cc?: string | string[];
5
+ from?: string;
6
+ lang?: string;
7
+ replyTo?: string | Address;
8
+ template?: string;
9
+ to?: string | string[];
10
+ person?: {
11
+ lang?: string;
12
+ };
13
+ }
14
+ export interface IDefaultMailOptions {
15
+ from: string;
16
+ to: string | string[];
17
+ template: string;
18
+ defaultLang: string;
19
+ }
20
+ /**
21
+ * Provides shortcut for sending email
22
+ */
23
+ export declare class MailSender {
24
+ private readonly _sendFunction;
25
+ private readonly _sendTo;
26
+ private readonly _sendFrom;
27
+ private readonly _template;
28
+ private readonly _defaultLang;
29
+ constructor(options: IDefaultMailOptions, sendFunction: any);
30
+ send(params: ISendMailOptions): Promise<any>;
31
+ private _completeParams;
32
+ private _getLanguageFromParams;
33
+ private _getTemplate;
34
+ }
package/package.json CHANGED
@@ -1,10 +1,15 @@
1
1
  {
2
2
  "name": "@storyous/mailer",
3
- "version": "1.0.5",
3
+ "version": "1.0.6",
4
4
  "description": "",
5
5
  "homepage": "https://github.com/Storyous/mono-utils#readme",
6
6
  "license": "ISC",
7
- "main": "lib/index",
7
+ "main": "dist/index.js",
8
+ "types": "dist/index.d.ts",
9
+ "files": [
10
+ "dist",
11
+ "lib"
12
+ ],
8
13
  "scripts": {
9
14
  "start": "tsc"
10
15
  },
@@ -29,7 +34,7 @@
29
34
  "registry": "https://registry.npmjs.org/"
30
35
  },
31
36
  "dependencies": {
32
- "@storyous/errors": "^1.0.5",
37
+ "@storyous/errors": "^1.0.6",
33
38
  "@types/lodash": "^4.14.182",
34
39
  "@types/nodemailer": "^6.4.4",
35
40
  "handlebars": "^4.7.7",
@@ -38,7 +43,7 @@
38
43
  "winston": "^3.7.2"
39
44
  },
40
45
  "devDependencies": {
41
- "@storyous/test-utils": "^2.0.0"
46
+ "@storyous/test-utils": "^2.0.1"
42
47
  },
43
- "gitHead": "4ea95d722ba6e85e9b6939128a2d37860fbb00f1"
48
+ "gitHead": "3884746d0e2c36dd11a390e18f2eb05f5c9db510"
44
49
  }
@@ -1,86 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
- Object.defineProperty(exports, "__esModule", { value: true });
29
- const test_utils_1 = __importDefault(require("@storyous/test-utils"));
30
- const assert_1 = __importDefault(require("assert"));
31
- const mocha_1 = __importStar(require("mocha"));
32
- const lib_1 = __importDefault(require("../lib"));
33
- const defaultOptions = {
34
- from: 'test@storyous.cz',
35
- to: 'test@storyous.cz',
36
- template: 'some.template',
37
- defaultLang: 'cs',
38
- };
39
- const sender = lib_1.default.createSender(defaultOptions);
40
- (0, mocha_1.describe)('packages/mailer', () => {
41
- test_utils_1.default.init({ mocha: mocha_1.default, mailer: lib_1.default });
42
- (0, mocha_1.it)('should send email', async () => {
43
- await sender.send({
44
- to: ['dev@storyous.cz', 'dev2@storyous.cz'],
45
- bcc: ['dev@storyous.cz', 'dev2@storyous.cz'],
46
- cc: ['dev@storyous.cz', 'dev2@storyous.cz'],
47
- replyTo: 'dev@storyous.cz',
48
- });
49
- const sentEmails = test_utils_1.default.getSentMails();
50
- assert_1.default.deepStrictEqual(sentEmails.length, 1);
51
- });
52
- (0, mocha_1.it)('should send email with person lang', async () => {
53
- await sender.send({
54
- person: { lang: 'cs' },
55
- });
56
- const sentEmails = test_utils_1.default.getSentMails();
57
- assert_1.default.deepStrictEqual(sentEmails.length, 1);
58
- });
59
- (0, mocha_1.it)('should send email with lang', async () => {
60
- await sender.send({
61
- lang: 'cs',
62
- });
63
- const sentEmails = test_utils_1.default.getSentMails();
64
- assert_1.default.deepStrictEqual(sentEmails.length, 1);
65
- });
66
- (0, mocha_1.it)('should throw exception when options are empty', async () => {
67
- try {
68
- await lib_1.default.sendMail({});
69
- assert_1.default.fail('The method must throw an exception.');
70
- }
71
- catch (e) {
72
- assert_1.default.deepStrictEqual(e.message, 'I need to know who this email is being sent to :-(');
73
- }
74
- });
75
- (0, mocha_1.it)('should throw exception when transporter is not initialized', async () => {
76
- lib_1.default._transporter = undefined;
77
- try {
78
- await lib_1.default.sendMail({});
79
- assert_1.default.fail('The method must throw an exception.');
80
- }
81
- catch (e) {
82
- assert_1.default.deepStrictEqual(e.message, 'The transporter is not initialized yet! Use createSender before.');
83
- }
84
- });
85
- });
86
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbGVyLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJtYWlsZXIudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsc0VBQTZDO0FBQzdDLG9EQUE0QjtBQUM1QiwrQ0FBNEM7QUFDNUMsaURBQTRCO0FBRTVCLE1BQU0sY0FBYyxHQUFHO0lBQ25CLElBQUksRUFBRSxrQkFBa0I7SUFDeEIsRUFBRSxFQUFFLGtCQUFrQjtJQUN0QixRQUFRLEVBQUUsZUFBZTtJQUN6QixXQUFXLEVBQUUsSUFBSTtDQUNwQixDQUFDO0FBQ0YsTUFBTSxNQUFNLEdBQUcsYUFBTSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUVuRCxJQUFBLGdCQUFRLEVBQUMsaUJBQWlCLEVBQUUsR0FBRyxFQUFFO0lBQzdCLG9CQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFMLGVBQUssRUFBRSxNQUFNLEVBQU4sYUFBTSxFQUFFLENBQUMsQ0FBQztJQUVsQyxJQUFBLFVBQUUsRUFBQyxtQkFBbUIsRUFBRSxLQUFLLElBQUksRUFBRTtRQUMvQixNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDZCxFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxrQkFBa0IsQ0FBQztZQUMzQyxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxrQkFBa0IsQ0FBQztZQUM1QyxFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxrQkFBa0IsQ0FBQztZQUMzQyxPQUFPLEVBQUUsaUJBQWlCO1NBQzdCLENBQUMsQ0FBQztRQUNILE1BQU0sVUFBVSxHQUFHLG9CQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDNUMsZ0JBQU0sQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFDLENBQUMsQ0FBQztJQUVILElBQUEsVUFBRSxFQUFDLG9DQUFvQyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ2hELE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQztZQUNkLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7U0FDekIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxVQUFVLEdBQUcsb0JBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM1QyxnQkFBTSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pELENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBQSxVQUFFLEVBQUMsNkJBQTZCLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDekMsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ2QsSUFBSSxFQUFFLElBQUk7U0FDYixDQUFDLENBQUM7UUFDSCxNQUFNLFVBQVUsR0FBRyxvQkFBUyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzVDLGdCQUFNLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakQsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFBLFVBQUUsRUFBQywrQ0FBK0MsRUFBRSxLQUFLLElBQUksRUFBRTtRQUMzRCxJQUFJO1lBQ0EsTUFBTSxhQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzFCLGdCQUFNLENBQUMsSUFBSSxDQUFDLHFDQUFxQyxDQUFDLENBQUM7U0FDdEQ7UUFBQyxPQUFPLENBQU0sRUFBRTtZQUNiLGdCQUFNLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsb0RBQW9ELENBQUMsQ0FBQztTQUMzRjtJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBQSxVQUFFLEVBQUMsNERBQTRELEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDeEUsYUFBTSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUM7UUFDaEMsSUFBSTtZQUNBLE1BQU0sYUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxQixnQkFBTSxDQUFDLElBQUksQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO1NBQ3REO1FBQUMsT0FBTyxDQUFNLEVBQUU7WUFDYixnQkFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLGtFQUFrRSxDQUFDLENBQUM7U0FDekc7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQyxDQUFDIn0=
@@ -1,62 +0,0 @@
1
- import testUtils from '@storyous/test-utils';
2
- import assert from 'assert';
3
- import mocha, { describe, it } from 'mocha';
4
- import mailer from '../lib';
5
-
6
- const defaultOptions = {
7
- from: 'test@storyous.cz',
8
- to: 'test@storyous.cz',
9
- template: 'some.template',
10
- defaultLang: 'cs',
11
- };
12
- const sender = mailer.createSender(defaultOptions);
13
-
14
- describe('packages/mailer', () => {
15
- testUtils.init({ mocha, mailer });
16
-
17
- it('should send email', async () => {
18
- await sender.send({
19
- to: ['dev@storyous.cz', 'dev2@storyous.cz'],
20
- bcc: ['dev@storyous.cz', 'dev2@storyous.cz'],
21
- cc: ['dev@storyous.cz', 'dev2@storyous.cz'],
22
- replyTo: 'dev@storyous.cz',
23
- });
24
- const sentEmails = testUtils.getSentMails();
25
- assert.deepStrictEqual(sentEmails.length, 1);
26
- });
27
-
28
- it('should send email with person lang', async () => {
29
- await sender.send({
30
- person: { lang: 'cs' },
31
- });
32
- const sentEmails = testUtils.getSentMails();
33
- assert.deepStrictEqual(sentEmails.length, 1);
34
- });
35
-
36
- it('should send email with lang', async () => {
37
- await sender.send({
38
- lang: 'cs',
39
- });
40
- const sentEmails = testUtils.getSentMails();
41
- assert.deepStrictEqual(sentEmails.length, 1);
42
- });
43
-
44
- it('should throw exception when options are empty', async () => {
45
- try {
46
- await mailer.sendMail({});
47
- assert.fail('The method must throw an exception.');
48
- } catch (e: any) {
49
- assert.deepStrictEqual(e.message, 'I need to know who this email is being sent to :-(');
50
- }
51
- });
52
-
53
- it('should throw exception when transporter is not initialized', async () => {
54
- mailer._transporter = undefined;
55
- try {
56
- await mailer.sendMail({});
57
- assert.fail('The method must throw an exception.');
58
- } catch (e: any) {
59
- assert.deepStrictEqual(e.message, 'The transporter is not initialized yet! Use createSender before.');
60
- }
61
- });
62
- });
package/tsconfig.json DELETED
@@ -1,8 +0,0 @@
1
- {
2
- "extends": "../../tsconfig.json",
3
-
4
- "include": [
5
- "lib",
6
- "__tests__"
7
- ]
8
- }