@tc-libs/email-sender 0.9.0

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.
package/README.md ADDED
@@ -0,0 +1,11 @@
1
+ # email-sender
2
+
3
+ This library was generated with [Nx](https://nx.dev).
4
+
5
+ ## Building
6
+
7
+ Run `nx build email-sender` to build the library.
8
+
9
+ ## Running unit tests
10
+
11
+ Run `nx test email-sender` to execute the unit tests via [Jest](https://jestjs.io).
package/package.json ADDED
@@ -0,0 +1,12 @@
1
+ {
2
+ "name": "@tc-libs/email-sender",
3
+ "version": "0.9.0",
4
+ "dependencies": {
5
+ "tslib": "^2.3.0",
6
+ "@nestjs/common": "^10.0.2"
7
+ },
8
+ "type": "commonjs",
9
+ "main": "./src/index.js",
10
+ "typings": "./src/index.d.ts",
11
+ "types": "./src/index.d.ts"
12
+ }
@@ -0,0 +1,14 @@
1
+ import { IEmailOptions } from '../interfaces/email-sender.type';
2
+ export declare class SendTemplateDto {
3
+ lang: string;
4
+ template: string;
5
+ options: IEmailOptions;
6
+ variables: {
7
+ [key: string]: string;
8
+ };
9
+ }
10
+ export declare class SendTextDto {
11
+ text: string;
12
+ subject: string;
13
+ options: IEmailOptions;
14
+ }
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SendTextDto = exports.SendTemplateDto = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const class_validator_1 = require("class-validator");
6
+ class SendTemplateDto {
7
+ }
8
+ exports.SendTemplateDto = SendTemplateDto;
9
+ tslib_1.__decorate([
10
+ (0, class_validator_1.Length)(2, 2),
11
+ (0, class_validator_1.IsString)(),
12
+ (0, class_validator_1.IsNotEmpty)(),
13
+ tslib_1.__metadata("design:type", String)
14
+ ], SendTemplateDto.prototype, "lang", void 0);
15
+ tslib_1.__decorate([
16
+ (0, class_validator_1.IsString)(),
17
+ (0, class_validator_1.IsNotEmpty)(),
18
+ tslib_1.__metadata("design:type", String)
19
+ ], SendTemplateDto.prototype, "template", void 0);
20
+ class SendTextDto {
21
+ }
22
+ exports.SendTextDto = SendTextDto;
23
+ //# sourceMappingURL=email.dto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email.dto.js","sourceRoot":"","sources":["../../../../../packages/email-sender/src/dtos/email.dto.ts"],"names":[],"mappings":";;;;AAAA,qDAA+D;AAG/D,MAAa,eAAe;CAU3B;AAVD,0CAUC;AANC;IAHC,IAAA,wBAAM,EAAC,CAAC,EAAE,CAAC,CAAC;IACZ,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;6CACA;AAGb;IAFC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;iDACI;AAKnB,MAAa,WAAW;CAIvB;AAJD,kCAIC"}
@@ -0,0 +1,6 @@
1
+ import { DynamicModule } from '@nestjs/common';
2
+ import EmailSenderAsyncOptions, { EmailSenderOptions } from './email-sender.module.options';
3
+ export declare class EmailSenderModule {
4
+ static register(options: EmailSenderOptions, isGlobal?: boolean): DynamicModule;
5
+ static registerAsync(options: EmailSenderAsyncOptions, isGlobal?: boolean): DynamicModule;
6
+ }
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EmailSenderModule = void 0;
4
+ const email_sender_module_options_1 = require("./email-sender.module.options");
5
+ const email_sender_service_1 = require("./services/email-sender.service");
6
+ class EmailSenderModule {
7
+ static register(options, isGlobal) {
8
+ return {
9
+ module: EmailSenderModule,
10
+ imports: [],
11
+ providers: [
12
+ { provide: email_sender_module_options_1.EMAIL_SENDER_CONFIG_OPTIONS, useValue: options },
13
+ email_sender_service_1.EmailSenderService,
14
+ ],
15
+ exports: [email_sender_service_1.EmailSenderService],
16
+ global: isGlobal,
17
+ };
18
+ }
19
+ static registerAsync(options, isGlobal) {
20
+ return {
21
+ module: EmailSenderModule,
22
+ imports: [...(options.imports || [])],
23
+ providers: [
24
+ {
25
+ provide: email_sender_module_options_1.EMAIL_SENDER_CONFIG_OPTIONS,
26
+ useFactory: options.useFactory,
27
+ inject: options.inject,
28
+ },
29
+ email_sender_service_1.EmailSenderService,
30
+ ],
31
+ exports: [email_sender_service_1.EmailSenderService],
32
+ global: isGlobal,
33
+ };
34
+ }
35
+ }
36
+ exports.EmailSenderModule = EmailSenderModule;
37
+ //# sourceMappingURL=email-sender.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email-sender.module.js","sourceRoot":"","sources":["../../../../packages/email-sender/src/email-sender.module.ts"],"names":[],"mappings":";;;AACA,+EAGuC;AACvC,0EAAqE;AAErE,MAAa,iBAAiB;IAC5B,MAAM,CAAC,QAAQ,CACb,OAA2B,EAC3B,QAAkB;QAElB,OAAO;YACL,MAAM,EAAE,iBAAiB;YACzB,OAAO,EAAE,EAAE;YACX,SAAS,EAAE;gBACT,EAAE,OAAO,EAAE,yDAA2B,EAAE,QAAQ,EAAE,OAAO,EAAE;gBAC3D,yCAAkB;aACnB;YACD,OAAO,EAAE,CAAC,yCAAkB,CAAC;YAC7B,MAAM,EAAE,QAAQ;SACjB,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,aAAa,CAClB,OAAgC,EAChC,QAAkB;QAElB,OAAO;YACL,MAAM,EAAE,iBAAiB;YACzB,OAAO,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YACrC,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,yDAA2B;oBACpC,UAAU,EAAE,OAAO,CAAC,UAAU;oBAC9B,MAAM,EAAE,OAAO,CAAC,MAAM;iBACvB;gBACD,yCAAkB;aACnB;YACD,OAAO,EAAE,CAAC,yCAAkB,CAAC;YAC7B,MAAM,EAAE,QAAQ;SACjB,CAAC;IACJ,CAAC;CACF;AApCD,8CAoCC"}
@@ -0,0 +1,16 @@
1
+ import { ModuleMetadata } from '@nestjs/common';
2
+ import { FactoryProvider } from '@nestjs/common/interfaces/modules/provider.interface';
3
+ export declare const EMAIL_SENDER_CONFIG_OPTIONS = "EMAIL_SENDER_CONFIG_OPTIONS";
4
+ export interface EmailSenderOptions {
5
+ enabled: boolean;
6
+ from: string;
7
+ cc: string[];
8
+ bcc: string[];
9
+ mailgun: {
10
+ host: string;
11
+ key: string;
12
+ domain: string;
13
+ };
14
+ }
15
+ type EmailSenderAsyncOptions = Pick<ModuleMetadata, 'imports'> & Pick<FactoryProvider<EmailSenderOptions>, 'useFactory' | 'inject'>;
16
+ export default EmailSenderAsyncOptions;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EMAIL_SENDER_CONFIG_OPTIONS = void 0;
4
+ exports.EMAIL_SENDER_CONFIG_OPTIONS = 'EMAIL_SENDER_CONFIG_OPTIONS';
5
+ //# sourceMappingURL=email-sender.module.options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email-sender.module.options.js","sourceRoot":"","sources":["../../../../packages/email-sender/src/email-sender.module.options.ts"],"names":[],"mappings":";;;AAGa,QAAA,2BAA2B,GAAG,6BAA6B,CAAC"}
package/src/index.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ export * from './email-sender.module';
2
+ export * from './interfaces/email-sender.type';
3
+ export * from './services/email-sender.service';
4
+ export * from './dtos/email.dto';
package/src/index.js ADDED
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./email-sender.module"), exports);
5
+ tslib_1.__exportStar(require("./interfaces/email-sender.type"), exports);
6
+ tslib_1.__exportStar(require("./services/email-sender.service"), exports);
7
+ tslib_1.__exportStar(require("./dtos/email.dto"), exports);
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/email-sender/src/index.ts"],"names":[],"mappings":";;;AAAA,gEAAsC;AACtC,yEAA+C;AAC/C,0EAAgD;AAChD,2DAAiC"}
@@ -0,0 +1,55 @@
1
+ import { Stream } from 'stream';
2
+ export declare enum EMAIL_LABEL_TYPE {
3
+ content = "CONTENT",
4
+ label = "LABEL"
5
+ }
6
+ export type IEmail = {
7
+ subject: string;
8
+ from?: string;
9
+ to?: string[];
10
+ cc?: string[];
11
+ bcc?: string[];
12
+ code: string;
13
+ variables: string[];
14
+ labels: {
15
+ [key: string]: string;
16
+ };
17
+ };
18
+ export type SenderConf = {
19
+ templateDir: string;
20
+ smtp: SmtpConf;
21
+ };
22
+ export type SmtpConf = {
23
+ enabled: boolean;
24
+ from: string;
25
+ cc: string[];
26
+ bcc: string[];
27
+ mailgun: {
28
+ host: string;
29
+ key: string;
30
+ domain: string;
31
+ };
32
+ };
33
+ export type MailgunOverrides = {
34
+ host: string;
35
+ key: string;
36
+ domain: string;
37
+ from: string;
38
+ };
39
+ export type IEmailOptions = {
40
+ to: string[];
41
+ cc?: string[];
42
+ bcc?: string[];
43
+ subject?: string;
44
+ attachment?: Stream;
45
+ remoteTemplatePath?: string;
46
+ mailgunOverride?: MailgunOverrides;
47
+ };
48
+ export type MailingListUpdate = {
49
+ subscribed: boolean;
50
+ name: string;
51
+ vars: any;
52
+ };
53
+ export type MailingListAdd = MailingListUpdate & {
54
+ address: string;
55
+ };
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EMAIL_LABEL_TYPE = void 0;
4
+ var EMAIL_LABEL_TYPE;
5
+ (function (EMAIL_LABEL_TYPE) {
6
+ EMAIL_LABEL_TYPE["content"] = "CONTENT";
7
+ EMAIL_LABEL_TYPE["label"] = "LABEL";
8
+ })(EMAIL_LABEL_TYPE || (exports.EMAIL_LABEL_TYPE = EMAIL_LABEL_TYPE = {}));
9
+ //# sourceMappingURL=email-sender.type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email-sender.type.js","sourceRoot":"","sources":["../../../../../packages/email-sender/src/interfaces/email-sender.type.ts"],"names":[],"mappings":";;;AAEA,IAAY,gBAGX;AAHD,WAAY,gBAAgB;IAC1B,uCAAmB,CAAA;IACnB,mCAAe,CAAA;AACjB,CAAC,EAHW,gBAAgB,gCAAhB,gBAAgB,QAG3B"}
@@ -0,0 +1,19 @@
1
+ import { TemplateFunction } from 'ejs';
2
+ import { Mailgun, Attachment } from 'mailgun-js';
3
+ import { IEmailOptions, MailingListAdd, MailingListUpdate, IEmail, MailgunOverrides } from '../interfaces/email-sender.type';
4
+ import { EmailSenderOptions } from '../email-sender.module.options';
5
+ export declare class EmailSenderService {
6
+ readonly _options: EmailSenderOptions;
7
+ private _smtp;
8
+ constructor(_options: EmailSenderOptions);
9
+ createAttachment(data: any, filename: any, contentType: any, mailgunOverride?: MailgunOverrides): Attachment | null;
10
+ private _createClient;
11
+ private _send;
12
+ private _buildRecipients;
13
+ private _labelCompiler;
14
+ sendTemplate(email: IEmail, tplCompiled: TemplateFunction, options: IEmailOptions, variables: any): Promise<boolean>;
15
+ sendText(text: string, subject: string, options: IEmailOptions): Promise<boolean>;
16
+ addToMailingList(client: Mailgun, list: string, body: MailingListAdd): Promise<boolean>;
17
+ updateToMailingList(client: Mailgun, list: string, email: string, body: MailingListUpdate): Promise<boolean>;
18
+ deleteToMailingList(client: Mailgun, list: string, email: string): Promise<boolean>;
19
+ }
@@ -0,0 +1,202 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EmailSenderService = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const mailgun_js_1 = tslib_1.__importDefault(require("mailgun-js"));
6
+ const common_1 = require("@nestjs/common");
7
+ const email_sender_module_options_1 = require("../email-sender.module.options");
8
+ let EmailSenderService = class EmailSenderService {
9
+ constructor(_options) {
10
+ this._options = _options;
11
+ this._smtp = {
12
+ from: _options.from,
13
+ enabled: _options.enabled,
14
+ cc: [],
15
+ bcc: [],
16
+ mailgun: {
17
+ host: _options.mailgun.host,
18
+ domain: _options.mailgun.domain,
19
+ key: _options.mailgun.key,
20
+ },
21
+ };
22
+ }
23
+ createAttachment(data, filename, contentType, mailgunOverride) {
24
+ if (!this._smtp.enabled)
25
+ return null;
26
+ const client = this._createClient(mailgunOverride);
27
+ return new client.Attachment({
28
+ data,
29
+ filename,
30
+ contentType,
31
+ });
32
+ }
33
+ _createClient(mailgunOverride) {
34
+ const config = {
35
+ host: mailgunOverride?.host ?? this._smtp.mailgun.host,
36
+ apiKey: mailgunOverride?.key ?? this._smtp.mailgun.key,
37
+ domain: mailgunOverride?.domain ?? this._smtp.mailgun.domain,
38
+ };
39
+ return (0, mailgun_js_1.default)(config);
40
+ }
41
+ _send(client, config) {
42
+ return new Promise((resolve, reject) => {
43
+ if (!client)
44
+ return resolve(true);
45
+ client.messages().send(config, (error, body) => {
46
+ if (error) {
47
+ return reject(error);
48
+ }
49
+ return resolve(!!body);
50
+ });
51
+ });
52
+ }
53
+ _buildRecipients(dbTemplate, options) {
54
+ if (!dbTemplate)
55
+ dbTemplate = {
56
+ from: null,
57
+ to: null,
58
+ cc: null,
59
+ bcc: null,
60
+ };
61
+ // init from
62
+ const from = options.mailgunOverride?.from ?? (dbTemplate.from || this._smtp.from);
63
+ // create fallbacks
64
+ dbTemplate.to = dbTemplate.to || [];
65
+ dbTemplate.cc = dbTemplate.cc || [];
66
+ dbTemplate.bcc = dbTemplate.bcc || [];
67
+ options.to = options.to || [];
68
+ options.cc = options.cc || [];
69
+ options.bcc = options.bcc || [];
70
+ // init to, cc, bcc
71
+ const to = [...dbTemplate.to, ...options.to];
72
+ const cc = [...dbTemplate.cc, ...options.cc, ...this._smtp.cc];
73
+ const bcc = [...dbTemplate.bcc, ...options.bcc, ...this._smtp.bcc];
74
+ return { from, to, cc, bcc };
75
+ }
76
+ _labelCompiler(labels) {
77
+ return (label, replacements = {}) => {
78
+ let compiled = labels[label] || `MISSING LABEL [${label}]`;
79
+ const keys = Object.keys(replacements);
80
+ keys.forEach((key) => {
81
+ compiled = compiled.replace(new RegExp(`\\[\\[${key}\\]\\]`, 'g'), replacements[key] || `{Missing replacement for [${key}]}`);
82
+ });
83
+ return compiled;
84
+ };
85
+ }
86
+ async sendTemplate(email, tplCompiled, options, variables) {
87
+ // skip if email are disabled
88
+ if (!this._smtp.enabled)
89
+ return false;
90
+ // get ejs compiled template
91
+ // extract recipients
92
+ const { from, to, cc, bcc } = this._buildRecipients(email, options);
93
+ const html = tplCompiled({
94
+ label: this._labelCompiler(email.labels),
95
+ ...variables,
96
+ });
97
+ const obj = {
98
+ from,
99
+ to: to.join(','),
100
+ cc: cc.join(','),
101
+ bcc: bcc.join(','),
102
+ subject: email.subject,
103
+ html, // compile with locals
104
+ };
105
+ // add attachment if required
106
+ if (options.attachment)
107
+ obj.attachment = options.attachment;
108
+ const client = this._createClient(options.mailgunOverride);
109
+ return this._send(client, obj);
110
+ }
111
+ sendText(text, subject, options) {
112
+ // extract recipients
113
+ const { from, to, cc, bcc } = this._buildRecipients(null, options);
114
+ const obj = {
115
+ from,
116
+ to: to.join(','),
117
+ cc: cc.join(','),
118
+ bcc: bcc.join(','),
119
+ subject,
120
+ text,
121
+ };
122
+ const client = this._createClient(options.mailgunOverride);
123
+ return this._send(client, obj);
124
+ }
125
+ // _compile(lang: string, dbTemplate: IEmail, replacements: any) {
126
+ // var source = readFileSync(
127
+ // joinPath('mail', dbTemplate.code, `index.html`),
128
+ // 'utf8',
129
+ // );
130
+ // // first transform translations
131
+ // for (let i = 0; i < dbTemplate.labels.length; i++) {
132
+ // const label = dbTemplate.labels[i];
133
+ // source = source.replace(
134
+ // new RegExp(`{{{${label.code}}}}`, 'g'),
135
+ // label.translations[lang],
136
+ // );
137
+ // }
138
+ // // than put all variables inside
139
+ // for (let i = 0; i < dbTemplate.variables.length; i++) {
140
+ // const variable = dbTemplate.variables[i];
141
+ // source = source.replace(
142
+ // new RegExp(`[[[${variable}]]]`, 'g'),
143
+ // replacements[variable],
144
+ // );
145
+ // }
146
+ // return source;
147
+ // }
148
+ addToMailingList(client, list, body) {
149
+ return new Promise((resolve) => {
150
+ if (!this._smtp.enabled || !client)
151
+ return resolve(false);
152
+ client
153
+ .lists(list)
154
+ .members()
155
+ .create(body, (error) => {
156
+ if (error) {
157
+ if (error &&
158
+ error.statusCode === 400 &&
159
+ error.message.indexOf('Address already exists') >= 0)
160
+ return resolve(true);
161
+ return resolve(false);
162
+ }
163
+ return resolve(true);
164
+ });
165
+ });
166
+ }
167
+ updateToMailingList(client, list, email, body) {
168
+ return new Promise((resolve) => {
169
+ if (!this._smtp.enabled || !client)
170
+ return resolve(false);
171
+ client
172
+ .lists(list)
173
+ .members(email)
174
+ .update(body, (error) => {
175
+ if (error)
176
+ return resolve(false);
177
+ return resolve(true);
178
+ });
179
+ });
180
+ }
181
+ deleteToMailingList(client, list, email) {
182
+ return new Promise((resolve) => {
183
+ if (!this._smtp.enabled || !client)
184
+ return resolve(false);
185
+ client
186
+ .lists(list)
187
+ .members(email)
188
+ .delete((error) => {
189
+ if (error)
190
+ return resolve(false);
191
+ return resolve(true);
192
+ });
193
+ });
194
+ }
195
+ };
196
+ exports.EmailSenderService = EmailSenderService;
197
+ exports.EmailSenderService = EmailSenderService = tslib_1.__decorate([
198
+ (0, common_1.Injectable)(),
199
+ tslib_1.__param(0, (0, common_1.Inject)(email_sender_module_options_1.EMAIL_SENDER_CONFIG_OPTIONS)),
200
+ tslib_1.__metadata("design:paramtypes", [Object])
201
+ ], EmailSenderService);
202
+ //# sourceMappingURL=email-sender.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email-sender.service.js","sourceRoot":"","sources":["../../../../../packages/email-sender/src/services/email-sender.service.ts"],"names":[],"mappings":"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"}