@flusys/nestjs-email 1.0.0-rc
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 +552 -0
- package/cjs/config/email-config.service.js +81 -0
- package/cjs/config/email.constants.js +22 -0
- package/cjs/config/index.js +19 -0
- package/cjs/controllers/email-config.controller.js +101 -0
- package/cjs/controllers/email-send.controller.js +142 -0
- package/cjs/controllers/email-template.controller.js +128 -0
- package/cjs/controllers/index.js +20 -0
- package/cjs/docs/email-swagger.config.js +176 -0
- package/cjs/docs/index.js +11 -0
- package/cjs/dtos/email-config.dto.js +238 -0
- package/cjs/dtos/email-send.dto.js +444 -0
- package/cjs/dtos/email-template.dto.js +283 -0
- package/cjs/dtos/index.js +20 -0
- package/cjs/entities/email-config-base.entity.js +111 -0
- package/cjs/entities/email-config-with-company.entity.js +63 -0
- package/cjs/entities/email-config.entity.js +25 -0
- package/cjs/entities/email-template-base.entity.js +133 -0
- package/cjs/entities/email-template-with-company.entity.js +65 -0
- package/cjs/entities/email-template.entity.js +30 -0
- package/cjs/entities/index.js +41 -0
- package/cjs/enums/email-provider-type.enum.js +18 -0
- package/cjs/enums/index.js +18 -0
- package/cjs/index.js +28 -0
- package/cjs/interfaces/email-config.interface.js +4 -0
- package/cjs/interfaces/email-module-options.interface.js +4 -0
- package/cjs/interfaces/email-provider.interface.js +4 -0
- package/cjs/interfaces/email-template.interface.js +4 -0
- package/cjs/interfaces/index.js +21 -0
- package/cjs/modules/email.module.js +161 -0
- package/cjs/modules/index.js +18 -0
- package/cjs/providers/email-factory.service.js +144 -0
- package/cjs/providers/email-provider.registry.js +41 -0
- package/cjs/providers/index.js +22 -0
- package/cjs/providers/mailgun-provider.js +107 -0
- package/cjs/providers/sendgrid-provider.js +135 -0
- package/cjs/providers/smtp-provider.js +166 -0
- package/cjs/services/email-datasource.provider.js +187 -0
- package/cjs/services/email-provider-config.service.js +150 -0
- package/cjs/services/email-send.service.js +211 -0
- package/cjs/services/email-template.service.js +158 -0
- package/cjs/services/index.js +21 -0
- package/cjs/utils/email-templates.util.js +129 -0
- package/cjs/utils/index.js +18 -0
- package/config/email-config.service.d.ts +16 -0
- package/config/email.constants.d.ts +2 -0
- package/config/index.d.ts +2 -0
- package/controllers/email-config.controller.d.ts +17 -0
- package/controllers/email-send.controller.d.ts +11 -0
- package/controllers/email-template.controller.d.ts +25 -0
- package/controllers/index.d.ts +3 -0
- package/docs/email-swagger.config.d.ts +3 -0
- package/docs/index.d.ts +1 -0
- package/dtos/email-config.dto.d.ts +30 -0
- package/dtos/email-send.dto.d.ts +46 -0
- package/dtos/email-template.dto.d.ts +39 -0
- package/dtos/index.d.ts +3 -0
- package/entities/email-config-base.entity.d.ts +11 -0
- package/entities/email-config-with-company.entity.d.ts +4 -0
- package/entities/email-config.entity.d.ts +3 -0
- package/entities/email-template-base.entity.d.ts +14 -0
- package/entities/email-template-with-company.entity.d.ts +4 -0
- package/entities/email-template.entity.d.ts +3 -0
- package/entities/index.d.ts +7 -0
- package/enums/email-provider-type.enum.d.ts +5 -0
- package/enums/index.d.ts +1 -0
- package/fesm/config/email-config.service.js +71 -0
- package/fesm/config/email.constants.js +4 -0
- package/fesm/config/index.js +2 -0
- package/fesm/controllers/email-config.controller.js +91 -0
- package/fesm/controllers/email-send.controller.js +132 -0
- package/fesm/controllers/email-template.controller.js +118 -0
- package/fesm/controllers/index.js +3 -0
- package/fesm/docs/email-swagger.config.js +172 -0
- package/fesm/docs/index.js +1 -0
- package/fesm/dtos/email-config.dto.js +217 -0
- package/fesm/dtos/email-send.dto.js +414 -0
- package/fesm/dtos/email-template.dto.js +262 -0
- package/fesm/dtos/index.js +3 -0
- package/fesm/entities/email-config-base.entity.js +101 -0
- package/fesm/entities/email-config-with-company.entity.js +53 -0
- package/fesm/entities/email-config.entity.js +15 -0
- package/fesm/entities/email-template-base.entity.js +123 -0
- package/fesm/entities/email-template-with-company.entity.js +55 -0
- package/fesm/entities/email-template.entity.js +20 -0
- package/fesm/entities/index.js +20 -0
- package/fesm/enums/email-provider-type.enum.js +8 -0
- package/fesm/enums/index.js +1 -0
- package/fesm/index.js +11 -0
- package/fesm/interfaces/email-config.interface.js +1 -0
- package/fesm/interfaces/email-module-options.interface.js +1 -0
- package/fesm/interfaces/email-provider.interface.js +1 -0
- package/fesm/interfaces/email-template.interface.js +1 -0
- package/fesm/interfaces/index.js +4 -0
- package/fesm/modules/email.module.js +151 -0
- package/fesm/modules/index.js +1 -0
- package/fesm/providers/email-factory.service.js +93 -0
- package/fesm/providers/email-provider.registry.js +31 -0
- package/fesm/providers/index.js +5 -0
- package/fesm/providers/mailgun-provider.js +97 -0
- package/fesm/providers/sendgrid-provider.js +125 -0
- package/fesm/providers/smtp-provider.js +115 -0
- package/fesm/services/email-datasource.provider.js +136 -0
- package/fesm/services/email-provider-config.service.js +140 -0
- package/fesm/services/email-send.service.js +201 -0
- package/fesm/services/email-template.service.js +148 -0
- package/fesm/services/index.js +4 -0
- package/fesm/utils/email-templates.util.js +111 -0
- package/fesm/utils/index.js +1 -0
- package/index.d.ts +10 -0
- package/interfaces/email-config.interface.d.ts +34 -0
- package/interfaces/email-module-options.interface.d.ts +25 -0
- package/interfaces/email-provider.interface.d.ts +34 -0
- package/interfaces/email-template.interface.d.ts +64 -0
- package/interfaces/index.d.ts +4 -0
- package/modules/email.module.d.ts +9 -0
- package/modules/index.d.ts +1 -0
- package/package.json +105 -0
- package/providers/email-factory.service.d.ts +14 -0
- package/providers/email-provider.registry.d.ts +10 -0
- package/providers/index.d.ts +5 -0
- package/providers/mailgun-provider.d.ts +11 -0
- package/providers/sendgrid-provider.d.ts +11 -0
- package/providers/smtp-provider.d.ts +11 -0
- package/services/email-datasource.provider.d.ts +25 -0
- package/services/email-provider-config.service.d.ts +32 -0
- package/services/email-send.service.d.ts +20 -0
- package/services/email-template.service.d.ts +31 -0
- package/services/index.d.ts +4 -0
- package/utils/email-templates.util.d.ts +2 -0
- package/utils/index.d.ts +1 -0
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "EmailConfigController", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return EmailConfigController;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _classes = require("@flusys/nestjs-shared/classes");
|
|
12
|
+
const _common = require("@nestjs/common");
|
|
13
|
+
const _swagger = require("@nestjs/swagger");
|
|
14
|
+
const _dtos = require("../dtos");
|
|
15
|
+
const _services = require("../services");
|
|
16
|
+
function _define_property(obj, key, value) {
|
|
17
|
+
if (key in obj) {
|
|
18
|
+
Object.defineProperty(obj, key, {
|
|
19
|
+
value: value,
|
|
20
|
+
enumerable: true,
|
|
21
|
+
configurable: true,
|
|
22
|
+
writable: true
|
|
23
|
+
});
|
|
24
|
+
} else {
|
|
25
|
+
obj[key] = value;
|
|
26
|
+
}
|
|
27
|
+
return obj;
|
|
28
|
+
}
|
|
29
|
+
function _ts_decorate(decorators, target, key, desc) {
|
|
30
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
31
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
32
|
+
else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
33
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
34
|
+
}
|
|
35
|
+
function _ts_metadata(k, v) {
|
|
36
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
37
|
+
}
|
|
38
|
+
function _ts_param(paramIndex, decorator) {
|
|
39
|
+
return function(target, key) {
|
|
40
|
+
decorator(target, key, paramIndex);
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
let EmailConfigController = class EmailConfigController extends (0, _classes.createApiController)(_dtos.CreateEmailConfigDto, _dtos.UpdateEmailConfigDto, _dtos.EmailConfigResponseDto, {
|
|
44
|
+
security: {
|
|
45
|
+
insert: {
|
|
46
|
+
level: 'permission',
|
|
47
|
+
permissions: [
|
|
48
|
+
_classes.EMAIL_CONFIG_PERMISSIONS.CREATE
|
|
49
|
+
]
|
|
50
|
+
},
|
|
51
|
+
insertMany: {
|
|
52
|
+
level: 'permission',
|
|
53
|
+
permissions: [
|
|
54
|
+
_classes.EMAIL_CONFIG_PERMISSIONS.CREATE
|
|
55
|
+
]
|
|
56
|
+
},
|
|
57
|
+
getById: {
|
|
58
|
+
level: 'permission',
|
|
59
|
+
permissions: [
|
|
60
|
+
_classes.EMAIL_CONFIG_PERMISSIONS.READ
|
|
61
|
+
]
|
|
62
|
+
},
|
|
63
|
+
getAll: {
|
|
64
|
+
level: 'permission',
|
|
65
|
+
permissions: [
|
|
66
|
+
_classes.EMAIL_CONFIG_PERMISSIONS.READ
|
|
67
|
+
]
|
|
68
|
+
},
|
|
69
|
+
update: {
|
|
70
|
+
level: 'permission',
|
|
71
|
+
permissions: [
|
|
72
|
+
_classes.EMAIL_CONFIG_PERMISSIONS.UPDATE
|
|
73
|
+
]
|
|
74
|
+
},
|
|
75
|
+
updateMany: {
|
|
76
|
+
level: 'permission',
|
|
77
|
+
permissions: [
|
|
78
|
+
_classes.EMAIL_CONFIG_PERMISSIONS.UPDATE
|
|
79
|
+
]
|
|
80
|
+
},
|
|
81
|
+
delete: {
|
|
82
|
+
level: 'permission',
|
|
83
|
+
permissions: [
|
|
84
|
+
_classes.EMAIL_CONFIG_PERMISSIONS.DELETE
|
|
85
|
+
]
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}) {
|
|
89
|
+
constructor(emailConfigService){
|
|
90
|
+
super(emailConfigService), _define_property(this, "emailConfigService", void 0), this.emailConfigService = emailConfigService;
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
EmailConfigController = _ts_decorate([
|
|
94
|
+
(0, _swagger.ApiTags)('Email Config'),
|
|
95
|
+
(0, _common.Controller)('email/email-config'),
|
|
96
|
+
_ts_param(0, (0, _common.Inject)(_services.EmailProviderConfigService)),
|
|
97
|
+
_ts_metadata("design:type", Function),
|
|
98
|
+
_ts_metadata("design:paramtypes", [
|
|
99
|
+
typeof _services.EmailProviderConfigService === "undefined" ? Object : _services.EmailProviderConfigService
|
|
100
|
+
])
|
|
101
|
+
], EmailConfigController);
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "EmailSendController", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return EmailSendController;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _decorators = require("@flusys/nestjs-shared/decorators");
|
|
12
|
+
const _guards = require("@flusys/nestjs-shared/guards");
|
|
13
|
+
const _interfaces = require("@flusys/nestjs-shared/interfaces");
|
|
14
|
+
const _common = require("@nestjs/common");
|
|
15
|
+
const _swagger = require("@nestjs/swagger");
|
|
16
|
+
const _dtos = require("../dtos");
|
|
17
|
+
const _services = require("../services");
|
|
18
|
+
function _define_property(obj, key, value) {
|
|
19
|
+
if (key in obj) {
|
|
20
|
+
Object.defineProperty(obj, key, {
|
|
21
|
+
value: value,
|
|
22
|
+
enumerable: true,
|
|
23
|
+
configurable: true,
|
|
24
|
+
writable: true
|
|
25
|
+
});
|
|
26
|
+
} else {
|
|
27
|
+
obj[key] = value;
|
|
28
|
+
}
|
|
29
|
+
return obj;
|
|
30
|
+
}
|
|
31
|
+
function _ts_decorate(decorators, target, key, desc) {
|
|
32
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
33
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
34
|
+
else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
35
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
36
|
+
}
|
|
37
|
+
function _ts_metadata(k, v) {
|
|
38
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
39
|
+
}
|
|
40
|
+
function _ts_param(paramIndex, decorator) {
|
|
41
|
+
return function(target, key) {
|
|
42
|
+
decorator(target, key, paramIndex);
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
let EmailSendController = class EmailSendController {
|
|
46
|
+
async sendEmail(dto, user) {
|
|
47
|
+
const result = await this.emailSendService.sendEmail(dto, user);
|
|
48
|
+
return {
|
|
49
|
+
success: result.success,
|
|
50
|
+
message: result.success ? 'Email sent successfully' : 'Failed to send email',
|
|
51
|
+
data: {
|
|
52
|
+
success: result.success,
|
|
53
|
+
messageId: result.messageId,
|
|
54
|
+
error: result.error
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
async sendTemplateEmail(dto, user) {
|
|
59
|
+
const result = await this.emailSendService.sendTemplateEmail(dto, user);
|
|
60
|
+
return {
|
|
61
|
+
success: result.success,
|
|
62
|
+
message: result.success ? 'Template email sent successfully' : 'Failed to send template email',
|
|
63
|
+
data: {
|
|
64
|
+
success: result.success,
|
|
65
|
+
messageId: result.messageId,
|
|
66
|
+
error: result.error
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
async sendTestEmail(dto, user) {
|
|
71
|
+
const result = await this.emailSendService.sendTestEmail(dto.emailConfigId, dto.recipient, user);
|
|
72
|
+
return {
|
|
73
|
+
success: result.success,
|
|
74
|
+
message: result.success ? 'Test email sent successfully' : 'Failed to send test email',
|
|
75
|
+
data: {
|
|
76
|
+
success: result.success,
|
|
77
|
+
messageId: result.messageId,
|
|
78
|
+
error: result.error
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
constructor(emailSendService){
|
|
83
|
+
_define_property(this, "emailSendService", void 0);
|
|
84
|
+
this.emailSendService = emailSendService;
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
_ts_decorate([
|
|
88
|
+
(0, _common.Post)('direct'),
|
|
89
|
+
(0, _decorators.RequirePermission)('email.send'),
|
|
90
|
+
(0, _swagger.ApiOperation)({
|
|
91
|
+
summary: 'Send email directly with custom content'
|
|
92
|
+
}),
|
|
93
|
+
_ts_param(0, (0, _common.Body)()),
|
|
94
|
+
_ts_param(1, (0, _decorators.CurrentUser)()),
|
|
95
|
+
_ts_metadata("design:type", Function),
|
|
96
|
+
_ts_metadata("design:paramtypes", [
|
|
97
|
+
typeof _dtos.SendEmailDto === "undefined" ? Object : _dtos.SendEmailDto,
|
|
98
|
+
typeof _interfaces.ILoggedUserInfo === "undefined" ? Object : _interfaces.ILoggedUserInfo
|
|
99
|
+
]),
|
|
100
|
+
_ts_metadata("design:returntype", Promise)
|
|
101
|
+
], EmailSendController.prototype, "sendEmail", null);
|
|
102
|
+
_ts_decorate([
|
|
103
|
+
(0, _common.Post)('template'),
|
|
104
|
+
(0, _decorators.RequirePermission)('email.send'),
|
|
105
|
+
(0, _swagger.ApiOperation)({
|
|
106
|
+
summary: 'Send email using a template with variable interpolation'
|
|
107
|
+
}),
|
|
108
|
+
_ts_param(0, (0, _common.Body)()),
|
|
109
|
+
_ts_param(1, (0, _decorators.CurrentUser)()),
|
|
110
|
+
_ts_metadata("design:type", Function),
|
|
111
|
+
_ts_metadata("design:paramtypes", [
|
|
112
|
+
typeof _dtos.SendTemplateEmailDto === "undefined" ? Object : _dtos.SendTemplateEmailDto,
|
|
113
|
+
typeof _interfaces.ILoggedUserInfo === "undefined" ? Object : _interfaces.ILoggedUserInfo
|
|
114
|
+
]),
|
|
115
|
+
_ts_metadata("design:returntype", Promise)
|
|
116
|
+
], EmailSendController.prototype, "sendTemplateEmail", null);
|
|
117
|
+
_ts_decorate([
|
|
118
|
+
(0, _common.Post)('test'),
|
|
119
|
+
(0, _decorators.RequirePermission)('email.send'),
|
|
120
|
+
(0, _swagger.ApiOperation)({
|
|
121
|
+
summary: 'Send a test email to verify configuration'
|
|
122
|
+
}),
|
|
123
|
+
_ts_param(0, (0, _common.Body)()),
|
|
124
|
+
_ts_param(1, (0, _decorators.CurrentUser)()),
|
|
125
|
+
_ts_metadata("design:type", Function),
|
|
126
|
+
_ts_metadata("design:paramtypes", [
|
|
127
|
+
typeof _dtos.TestEmailDto === "undefined" ? Object : _dtos.TestEmailDto,
|
|
128
|
+
typeof _interfaces.ILoggedUserInfo === "undefined" ? Object : _interfaces.ILoggedUserInfo
|
|
129
|
+
]),
|
|
130
|
+
_ts_metadata("design:returntype", Promise)
|
|
131
|
+
], EmailSendController.prototype, "sendTestEmail", null);
|
|
132
|
+
EmailSendController = _ts_decorate([
|
|
133
|
+
(0, _swagger.ApiTags)('Email Send'),
|
|
134
|
+
(0, _swagger.ApiBearerAuth)(),
|
|
135
|
+
(0, _common.Controller)('email/send'),
|
|
136
|
+
(0, _common.UseGuards)(_guards.JwtAuthGuard),
|
|
137
|
+
_ts_param(0, (0, _common.Inject)(_services.EmailSendService)),
|
|
138
|
+
_ts_metadata("design:type", Function),
|
|
139
|
+
_ts_metadata("design:paramtypes", [
|
|
140
|
+
typeof _services.EmailSendService === "undefined" ? Object : _services.EmailSendService
|
|
141
|
+
])
|
|
142
|
+
], EmailSendController);
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "EmailTemplateController", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return EmailTemplateController;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _classes = require("@flusys/nestjs-shared/classes");
|
|
12
|
+
const _decorators = require("@flusys/nestjs-shared/decorators");
|
|
13
|
+
const _guards = require("@flusys/nestjs-shared/guards");
|
|
14
|
+
const _interfaces = require("@flusys/nestjs-shared/interfaces");
|
|
15
|
+
const _common = require("@nestjs/common");
|
|
16
|
+
const _swagger = require("@nestjs/swagger");
|
|
17
|
+
const _dtos = require("../dtos");
|
|
18
|
+
const _services = require("../services");
|
|
19
|
+
function _define_property(obj, key, value) {
|
|
20
|
+
if (key in obj) {
|
|
21
|
+
Object.defineProperty(obj, key, {
|
|
22
|
+
value: value,
|
|
23
|
+
enumerable: true,
|
|
24
|
+
configurable: true,
|
|
25
|
+
writable: true
|
|
26
|
+
});
|
|
27
|
+
} else {
|
|
28
|
+
obj[key] = value;
|
|
29
|
+
}
|
|
30
|
+
return obj;
|
|
31
|
+
}
|
|
32
|
+
function _ts_decorate(decorators, target, key, desc) {
|
|
33
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
34
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
35
|
+
else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
36
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
37
|
+
}
|
|
38
|
+
function _ts_metadata(k, v) {
|
|
39
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
40
|
+
}
|
|
41
|
+
function _ts_param(paramIndex, decorator) {
|
|
42
|
+
return function(target, key) {
|
|
43
|
+
decorator(target, key, paramIndex);
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
let EmailTemplateController = class EmailTemplateController extends (0, _classes.createApiController)(_dtos.CreateEmailTemplateDto, _dtos.UpdateEmailTemplateDto, _dtos.EmailTemplateResponseDto, {
|
|
47
|
+
security: {
|
|
48
|
+
insert: {
|
|
49
|
+
level: 'permission',
|
|
50
|
+
permissions: [
|
|
51
|
+
_classes.EMAIL_TEMPLATE_PERMISSIONS.CREATE
|
|
52
|
+
]
|
|
53
|
+
},
|
|
54
|
+
insertMany: {
|
|
55
|
+
level: 'permission',
|
|
56
|
+
permissions: [
|
|
57
|
+
_classes.EMAIL_TEMPLATE_PERMISSIONS.CREATE
|
|
58
|
+
]
|
|
59
|
+
},
|
|
60
|
+
getById: {
|
|
61
|
+
level: 'permission',
|
|
62
|
+
permissions: [
|
|
63
|
+
_classes.EMAIL_TEMPLATE_PERMISSIONS.READ
|
|
64
|
+
]
|
|
65
|
+
},
|
|
66
|
+
getAll: {
|
|
67
|
+
level: 'permission',
|
|
68
|
+
permissions: [
|
|
69
|
+
_classes.EMAIL_TEMPLATE_PERMISSIONS.READ
|
|
70
|
+
]
|
|
71
|
+
},
|
|
72
|
+
update: {
|
|
73
|
+
level: 'permission',
|
|
74
|
+
permissions: [
|
|
75
|
+
_classes.EMAIL_TEMPLATE_PERMISSIONS.UPDATE
|
|
76
|
+
]
|
|
77
|
+
},
|
|
78
|
+
updateMany: {
|
|
79
|
+
level: 'permission',
|
|
80
|
+
permissions: [
|
|
81
|
+
_classes.EMAIL_TEMPLATE_PERMISSIONS.UPDATE
|
|
82
|
+
]
|
|
83
|
+
},
|
|
84
|
+
delete: {
|
|
85
|
+
level: 'permission',
|
|
86
|
+
permissions: [
|
|
87
|
+
_classes.EMAIL_TEMPLATE_PERMISSIONS.DELETE
|
|
88
|
+
]
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}) {
|
|
92
|
+
async getBySlug(body, user) {
|
|
93
|
+
const template = await this.emailTemplateService.findBySlug(body.slug, user);
|
|
94
|
+
return {
|
|
95
|
+
success: true,
|
|
96
|
+
data: template
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
constructor(emailTemplateService){
|
|
100
|
+
super(emailTemplateService), _define_property(this, "emailTemplateService", void 0), this.emailTemplateService = emailTemplateService;
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
_ts_decorate([
|
|
104
|
+
(0, _common.Post)('get-by-slug'),
|
|
105
|
+
(0, _common.UseGuards)(_guards.JwtAuthGuard),
|
|
106
|
+
(0, _swagger.ApiBearerAuth)(),
|
|
107
|
+
(0, _decorators.RequirePermission)(_classes.EMAIL_TEMPLATE_PERMISSIONS.READ),
|
|
108
|
+
(0, _swagger.ApiOperation)({
|
|
109
|
+
summary: 'Get email template by slug'
|
|
110
|
+
}),
|
|
111
|
+
_ts_param(0, (0, _common.Body)()),
|
|
112
|
+
_ts_param(1, (0, _decorators.CurrentUser)()),
|
|
113
|
+
_ts_metadata("design:type", Function),
|
|
114
|
+
_ts_metadata("design:paramtypes", [
|
|
115
|
+
Object,
|
|
116
|
+
typeof _interfaces.ILoggedUserInfo === "undefined" ? Object : _interfaces.ILoggedUserInfo
|
|
117
|
+
]),
|
|
118
|
+
_ts_metadata("design:returntype", Promise)
|
|
119
|
+
], EmailTemplateController.prototype, "getBySlug", null);
|
|
120
|
+
EmailTemplateController = _ts_decorate([
|
|
121
|
+
(0, _swagger.ApiTags)('Email Template'),
|
|
122
|
+
(0, _common.Controller)('email/email-template'),
|
|
123
|
+
_ts_param(0, (0, _common.Inject)(_services.EmailTemplateService)),
|
|
124
|
+
_ts_metadata("design:type", Function),
|
|
125
|
+
_ts_metadata("design:paramtypes", [
|
|
126
|
+
typeof _services.EmailTemplateService === "undefined" ? Object : _services.EmailTemplateService
|
|
127
|
+
])
|
|
128
|
+
], EmailTemplateController);
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
_export_star(require("./email-config.controller"), exports);
|
|
6
|
+
_export_star(require("./email-template.controller"), exports);
|
|
7
|
+
_export_star(require("./email-send.controller"), exports);
|
|
8
|
+
function _export_star(from, to) {
|
|
9
|
+
Object.keys(from).forEach(function(k) {
|
|
10
|
+
if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
|
|
11
|
+
Object.defineProperty(to, k, {
|
|
12
|
+
enumerable: true,
|
|
13
|
+
get: function() {
|
|
14
|
+
return from[k];
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
return from;
|
|
20
|
+
}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "emailSwaggerConfig", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return emailSwaggerConfig;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
/** Schema properties to exclude when company feature is disabled */ const COMPANY_SCHEMA_EXCLUSIONS = [
|
|
12
|
+
{
|
|
13
|
+
schemaName: 'EmailConfigResponseDto',
|
|
14
|
+
properties: [
|
|
15
|
+
'companyId'
|
|
16
|
+
]
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
schemaName: 'EmailTemplateResponseDto',
|
|
20
|
+
properties: [
|
|
21
|
+
'companyId'
|
|
22
|
+
]
|
|
23
|
+
}
|
|
24
|
+
];
|
|
25
|
+
function emailSwaggerConfig(bootstrapConfig) {
|
|
26
|
+
const enableCompanyFeature = bootstrapConfig?.enableCompanyFeature ?? true;
|
|
27
|
+
return {
|
|
28
|
+
title: 'Email API',
|
|
29
|
+
description: enableCompanyFeature ? `
|
|
30
|
+
# Email Management API
|
|
31
|
+
|
|
32
|
+
Complete email management system with multi-tenant and company support.
|
|
33
|
+
|
|
34
|
+
## Features
|
|
35
|
+
|
|
36
|
+
### 📧 Email Configuration
|
|
37
|
+
- Multiple email providers (SMTP, SendGrid, Mailgun)
|
|
38
|
+
- Provider-specific configurations
|
|
39
|
+
- Default sender settings
|
|
40
|
+
- **Company-level email configs**
|
|
41
|
+
|
|
42
|
+
### 📝 Email Templates
|
|
43
|
+
- Visual template builder
|
|
44
|
+
- Variable interpolation ({{variable}})
|
|
45
|
+
- HTML and plain text support
|
|
46
|
+
- Template versioning
|
|
47
|
+
- **Company isolation**
|
|
48
|
+
|
|
49
|
+
### ✉️ Email Sending
|
|
50
|
+
- Direct email sending
|
|
51
|
+
- Template-based sending
|
|
52
|
+
- Attachments support
|
|
53
|
+
- CC/BCC recipients
|
|
54
|
+
|
|
55
|
+
### 🔒 Security
|
|
56
|
+
- JWT authentication required
|
|
57
|
+
- **Company isolation**
|
|
58
|
+
- Secure credential storage
|
|
59
|
+
|
|
60
|
+
## Supported Providers
|
|
61
|
+
|
|
62
|
+
### SMTP
|
|
63
|
+
- Universal email protocol
|
|
64
|
+
- Custom server support
|
|
65
|
+
- TLS/SSL encryption
|
|
66
|
+
|
|
67
|
+
### SendGrid (optional)
|
|
68
|
+
- Cloud email service
|
|
69
|
+
- High deliverability
|
|
70
|
+
- Install: \`npm install @sendgrid/mail\`
|
|
71
|
+
|
|
72
|
+
### Mailgun (optional)
|
|
73
|
+
- Developer-friendly API
|
|
74
|
+
- Detailed analytics
|
|
75
|
+
- Install: \`npm install mailgun.js\`
|
|
76
|
+
|
|
77
|
+
## Template Variables
|
|
78
|
+
|
|
79
|
+
Templates support Handlebars-style variables:
|
|
80
|
+
- \`{{userName}}\` - Simple variable
|
|
81
|
+
- \`{{user.email}}\` - Nested properties
|
|
82
|
+
- Variables are replaced at send time
|
|
83
|
+
|
|
84
|
+
## Multi-Tenant Support
|
|
85
|
+
|
|
86
|
+
Emails are automatically isolated by:
|
|
87
|
+
- **Company ID**: Company-level templates and configs
|
|
88
|
+
|
|
89
|
+
All queries automatically filter by current user's company context.
|
|
90
|
+
|
|
91
|
+
## API Endpoints
|
|
92
|
+
|
|
93
|
+
All email endpoints are prefixed with \`/email\`:
|
|
94
|
+
- \`/email/email-config/*\` - Email provider configurations
|
|
95
|
+
- \`/email/email-template/*\` - Email templates
|
|
96
|
+
- \`/email/email-send/*\` - Send emails
|
|
97
|
+
|
|
98
|
+
## Getting Started
|
|
99
|
+
|
|
100
|
+
1. **Authenticate**: Obtain JWT token from /auth/login
|
|
101
|
+
2. **Configure Provider**: Create email config via /email/email-config/insert
|
|
102
|
+
3. **Create Templates**: Add templates via /email/email-template/insert
|
|
103
|
+
4. **Send Emails**: Send via /email/email-send/send or /email/email-send/send-template
|
|
104
|
+
` : `
|
|
105
|
+
# Email Management API
|
|
106
|
+
|
|
107
|
+
Complete email management system.
|
|
108
|
+
|
|
109
|
+
## Features
|
|
110
|
+
|
|
111
|
+
### 📧 Email Configuration
|
|
112
|
+
- Multiple email providers (SMTP, SendGrid, Mailgun)
|
|
113
|
+
- Provider-specific configurations
|
|
114
|
+
- Default sender settings
|
|
115
|
+
|
|
116
|
+
### 📝 Email Templates
|
|
117
|
+
- Visual template builder
|
|
118
|
+
- Variable interpolation ({{variable}})
|
|
119
|
+
- HTML and plain text support
|
|
120
|
+
- Template versioning
|
|
121
|
+
|
|
122
|
+
### ✉️ Email Sending
|
|
123
|
+
- Direct email sending
|
|
124
|
+
- Template-based sending
|
|
125
|
+
- Attachments support
|
|
126
|
+
- CC/BCC recipients
|
|
127
|
+
|
|
128
|
+
### 🔒 Security
|
|
129
|
+
- JWT authentication required
|
|
130
|
+
- Secure credential storage
|
|
131
|
+
|
|
132
|
+
## Supported Providers
|
|
133
|
+
|
|
134
|
+
### SMTP
|
|
135
|
+
- Universal email protocol
|
|
136
|
+
- Custom server support
|
|
137
|
+
- TLS/SSL encryption
|
|
138
|
+
|
|
139
|
+
### SendGrid (optional)
|
|
140
|
+
- Cloud email service
|
|
141
|
+
- High deliverability
|
|
142
|
+
- Install: \`npm install @sendgrid/mail\`
|
|
143
|
+
|
|
144
|
+
### Mailgun (optional)
|
|
145
|
+
- Developer-friendly API
|
|
146
|
+
- Detailed analytics
|
|
147
|
+
- Install: \`npm install mailgun.js\`
|
|
148
|
+
|
|
149
|
+
## Template Variables
|
|
150
|
+
|
|
151
|
+
Templates support Handlebars-style variables:
|
|
152
|
+
- \`{{userName}}\` - Simple variable
|
|
153
|
+
- \`{{user.email}}\` - Nested properties
|
|
154
|
+
- Variables are replaced at send time
|
|
155
|
+
|
|
156
|
+
## API Endpoints
|
|
157
|
+
|
|
158
|
+
All email endpoints are prefixed with \`/email\`:
|
|
159
|
+
- \`/email/email-config/*\` - Email provider configurations
|
|
160
|
+
- \`/email/email-template/*\` - Email templates
|
|
161
|
+
- \`/email/email-send/*\` - Send emails
|
|
162
|
+
|
|
163
|
+
## Getting Started
|
|
164
|
+
|
|
165
|
+
1. **Authenticate**: Obtain JWT token from /auth/login
|
|
166
|
+
2. **Configure Provider**: Create email config via /email/email-config/insert
|
|
167
|
+
3. **Create Templates**: Add templates via /email/email-template/insert
|
|
168
|
+
4. **Send Emails**: Send via /email/email-send/send or /email/email-send/send-template
|
|
169
|
+
`,
|
|
170
|
+
version: '1.0',
|
|
171
|
+
path: 'api/docs/email',
|
|
172
|
+
bearerAuth: true,
|
|
173
|
+
excludeTags: [],
|
|
174
|
+
excludeSchemaProperties: enableCompanyFeature ? undefined : COMPANY_SCHEMA_EXCLUSIONS
|
|
175
|
+
};
|
|
176
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "emailSwaggerConfig", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return _emailswaggerconfig.emailSwaggerConfig;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _emailswaggerconfig = require("./email-swagger.config");
|