@flusys/nestjs-email 1.1.0-beta

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.
Files changed (124) hide show
  1. package/cjs/config/email-config.service.js +94 -0
  2. package/cjs/config/email.constants.js +40 -0
  3. package/cjs/config/index.js +19 -0
  4. package/cjs/controllers/email-config.controller.js +59 -0
  5. package/cjs/controllers/email-send.controller.js +142 -0
  6. package/cjs/controllers/email-template.controller.js +84 -0
  7. package/cjs/controllers/index.js +20 -0
  8. package/cjs/docs/email-swagger.config.js +176 -0
  9. package/cjs/docs/index.js +11 -0
  10. package/cjs/dtos/email-config.dto.js +238 -0
  11. package/cjs/dtos/email-send.dto.js +376 -0
  12. package/cjs/dtos/email-template.dto.js +283 -0
  13. package/cjs/dtos/index.js +20 -0
  14. package/cjs/entities/email-config-base.entity.js +111 -0
  15. package/cjs/entities/email-config-with-company.entity.js +63 -0
  16. package/cjs/entities/email-config.entity.js +25 -0
  17. package/cjs/entities/email-template-base.entity.js +134 -0
  18. package/cjs/entities/email-template-with-company.entity.js +63 -0
  19. package/cjs/entities/email-template.entity.js +25 -0
  20. package/cjs/entities/index.js +41 -0
  21. package/cjs/enums/email-provider-type.enum.js +18 -0
  22. package/cjs/enums/index.js +18 -0
  23. package/cjs/index.js +27 -0
  24. package/cjs/interfaces/email-config.interface.js +4 -0
  25. package/cjs/interfaces/email-module-options.interface.js +4 -0
  26. package/cjs/interfaces/email-provider.interface.js +6 -0
  27. package/cjs/interfaces/email-template.interface.js +4 -0
  28. package/cjs/interfaces/index.js +21 -0
  29. package/cjs/modules/email.module.js +177 -0
  30. package/cjs/modules/index.js +18 -0
  31. package/cjs/providers/email-factory.service.js +160 -0
  32. package/cjs/providers/email-provider.registry.js +51 -0
  33. package/cjs/providers/index.js +22 -0
  34. package/cjs/providers/mailgun-provider.js +125 -0
  35. package/cjs/providers/sendgrid-provider.js +156 -0
  36. package/cjs/providers/smtp-provider.js +185 -0
  37. package/cjs/services/email-datasource.provider.js +215 -0
  38. package/cjs/services/email-provider-config.service.js +180 -0
  39. package/cjs/services/email-send.service.js +228 -0
  40. package/cjs/services/email-template.service.js +186 -0
  41. package/cjs/services/index.js +21 -0
  42. package/config/email-config.service.d.ts +13 -0
  43. package/config/email.constants.d.ts +11 -0
  44. package/config/index.d.ts +2 -0
  45. package/controllers/email-config.controller.d.ts +17 -0
  46. package/controllers/email-send.controller.d.ts +19 -0
  47. package/controllers/email-template.controller.d.ts +25 -0
  48. package/controllers/index.d.ts +3 -0
  49. package/docs/email-swagger.config.d.ts +3 -0
  50. package/docs/index.d.ts +1 -0
  51. package/dtos/email-config.dto.d.ts +33 -0
  52. package/dtos/email-send.dto.d.ts +45 -0
  53. package/dtos/email-template.dto.d.ts +42 -0
  54. package/dtos/index.d.ts +3 -0
  55. package/entities/email-config-base.entity.d.ts +11 -0
  56. package/entities/email-config-with-company.entity.d.ts +4 -0
  57. package/entities/email-config.entity.d.ts +3 -0
  58. package/entities/email-template-base.entity.d.ts +14 -0
  59. package/entities/email-template-with-company.entity.d.ts +4 -0
  60. package/entities/email-template.entity.d.ts +3 -0
  61. package/entities/index.d.ts +7 -0
  62. package/enums/email-provider-type.enum.d.ts +5 -0
  63. package/enums/index.d.ts +1 -0
  64. package/fesm/config/email-config.service.js +84 -0
  65. package/fesm/config/email.constants.js +13 -0
  66. package/fesm/config/index.js +2 -0
  67. package/fesm/controllers/email-config.controller.js +49 -0
  68. package/fesm/controllers/email-send.controller.js +132 -0
  69. package/fesm/controllers/email-template.controller.js +74 -0
  70. package/fesm/controllers/index.js +3 -0
  71. package/fesm/docs/email-swagger.config.js +172 -0
  72. package/fesm/docs/index.js +1 -0
  73. package/fesm/dtos/email-config.dto.js +223 -0
  74. package/fesm/dtos/email-send.dto.js +360 -0
  75. package/fesm/dtos/email-template.dto.js +268 -0
  76. package/fesm/dtos/index.js +3 -0
  77. package/fesm/entities/email-config-base.entity.js +101 -0
  78. package/fesm/entities/email-config-with-company.entity.js +53 -0
  79. package/fesm/entities/email-config.entity.js +15 -0
  80. package/fesm/entities/email-template-base.entity.js +124 -0
  81. package/fesm/entities/email-template-with-company.entity.js +53 -0
  82. package/fesm/entities/email-template.entity.js +15 -0
  83. package/fesm/entities/index.js +20 -0
  84. package/fesm/enums/email-provider-type.enum.js +8 -0
  85. package/fesm/enums/index.js +1 -0
  86. package/fesm/index.js +10 -0
  87. package/fesm/interfaces/email-config.interface.js +3 -0
  88. package/fesm/interfaces/email-module-options.interface.js +3 -0
  89. package/fesm/interfaces/email-provider.interface.js +5 -0
  90. package/fesm/interfaces/email-template.interface.js +3 -0
  91. package/fesm/interfaces/index.js +4 -0
  92. package/fesm/modules/email.module.js +167 -0
  93. package/fesm/modules/index.js +1 -0
  94. package/fesm/providers/email-factory.service.js +109 -0
  95. package/fesm/providers/email-provider.registry.js +44 -0
  96. package/fesm/providers/index.js +5 -0
  97. package/fesm/providers/mailgun-provider.js +119 -0
  98. package/fesm/providers/sendgrid-provider.js +150 -0
  99. package/fesm/providers/smtp-provider.js +137 -0
  100. package/fesm/services/email-datasource.provider.js +164 -0
  101. package/fesm/services/email-provider-config.service.js +170 -0
  102. package/fesm/services/email-send.service.js +218 -0
  103. package/fesm/services/email-template.service.js +176 -0
  104. package/fesm/services/index.js +4 -0
  105. package/index.d.ts +9 -0
  106. package/interfaces/email-config.interface.d.ts +28 -0
  107. package/interfaces/email-module-options.interface.d.ts +26 -0
  108. package/interfaces/email-provider.interface.d.ts +34 -0
  109. package/interfaces/email-template.interface.d.ts +64 -0
  110. package/interfaces/index.d.ts +4 -0
  111. package/modules/email.module.d.ts +9 -0
  112. package/modules/index.d.ts +1 -0
  113. package/package.json +105 -0
  114. package/providers/email-factory.service.d.ts +14 -0
  115. package/providers/email-provider.registry.d.ts +10 -0
  116. package/providers/index.d.ts +5 -0
  117. package/providers/mailgun-provider.d.ts +11 -0
  118. package/providers/sendgrid-provider.d.ts +11 -0
  119. package/providers/smtp-provider.d.ts +11 -0
  120. package/services/email-datasource.provider.d.ts +25 -0
  121. package/services/email-provider-config.service.d.ts +32 -0
  122. package/services/email-send.service.d.ts +20 -0
  123. package/services/email-template.service.d.ts +31 -0
  124. package/services/index.d.ts +4 -0
@@ -0,0 +1,101 @@
1
+ function _define_property(obj, key, value) {
2
+ if (key in obj) {
3
+ Object.defineProperty(obj, key, {
4
+ value: value,
5
+ enumerable: true,
6
+ configurable: true,
7
+ writable: true
8
+ });
9
+ } else {
10
+ obj[key] = value;
11
+ }
12
+ return obj;
13
+ }
14
+ function _ts_decorate(decorators, target, key, desc) {
15
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
16
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
17
+ 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;
18
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
19
+ }
20
+ function _ts_metadata(k, v) {
21
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
22
+ }
23
+ import { Identity } from '@flusys/nestjs-shared/entities';
24
+ import { Column, Index } from 'typeorm';
25
+ import { EmailProviderTypeEnum } from '../enums';
26
+ export class EmailConfigBase extends Identity {
27
+ constructor(...args){
28
+ super(...args), _define_property(this, "name", void 0), _define_property(this, "provider", void 0), _define_property(this, "config", void 0), _define_property(this, "fromEmail", void 0), _define_property(this, "fromName", void 0), _define_property(this, "isActive", void 0), _define_property(this, "isDefault", void 0);
29
+ }
30
+ }
31
+ _ts_decorate([
32
+ Column({
33
+ type: 'varchar',
34
+ length: 255,
35
+ nullable: false
36
+ }),
37
+ _ts_metadata("design:type", String)
38
+ ], EmailConfigBase.prototype, "name", void 0);
39
+ _ts_decorate([
40
+ Column({
41
+ type: 'enum',
42
+ enum: EmailProviderTypeEnum,
43
+ nullable: false
44
+ }),
45
+ _ts_metadata("design:type", typeof EmailProviderTypeEnum === "undefined" ? Object : EmailProviderTypeEnum)
46
+ ], EmailConfigBase.prototype, "provider", void 0);
47
+ _ts_decorate([
48
+ Column({
49
+ type: 'json',
50
+ nullable: false
51
+ }),
52
+ _ts_metadata("design:type", typeof Record === "undefined" ? Object : Record)
53
+ ], EmailConfigBase.prototype, "config", void 0);
54
+ _ts_decorate([
55
+ Column({
56
+ type: 'varchar',
57
+ length: 255,
58
+ nullable: true,
59
+ name: 'from_email'
60
+ }),
61
+ _ts_metadata("design:type", Object)
62
+ ], EmailConfigBase.prototype, "fromEmail", void 0);
63
+ _ts_decorate([
64
+ Column({
65
+ type: 'varchar',
66
+ length: 255,
67
+ nullable: true,
68
+ name: 'from_name'
69
+ }),
70
+ _ts_metadata("design:type", Object)
71
+ ], EmailConfigBase.prototype, "fromName", void 0);
72
+ _ts_decorate([
73
+ Column({
74
+ type: 'boolean',
75
+ default: true,
76
+ name: 'is_active'
77
+ }),
78
+ _ts_metadata("design:type", Boolean)
79
+ ], EmailConfigBase.prototype, "isActive", void 0);
80
+ _ts_decorate([
81
+ Column({
82
+ type: 'boolean',
83
+ default: false,
84
+ name: 'is_default'
85
+ }),
86
+ _ts_metadata("design:type", Boolean)
87
+ ], EmailConfigBase.prototype, "isDefault", void 0);
88
+ EmailConfigBase = _ts_decorate([
89
+ Index([
90
+ 'name'
91
+ ]),
92
+ Index([
93
+ 'provider'
94
+ ]),
95
+ Index([
96
+ 'isActive'
97
+ ]),
98
+ Index([
99
+ 'isDefault'
100
+ ])
101
+ ], EmailConfigBase);
@@ -0,0 +1,53 @@
1
+ function _define_property(obj, key, value) {
2
+ if (key in obj) {
3
+ Object.defineProperty(obj, key, {
4
+ value: value,
5
+ enumerable: true,
6
+ configurable: true,
7
+ writable: true
8
+ });
9
+ } else {
10
+ obj[key] = value;
11
+ }
12
+ return obj;
13
+ }
14
+ function _ts_decorate(decorators, target, key, desc) {
15
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
16
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
17
+ 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;
18
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
19
+ }
20
+ function _ts_metadata(k, v) {
21
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
22
+ }
23
+ import { Column, Entity, Index } from 'typeorm';
24
+ import { EmailConfigBase } from './email-config-base.entity';
25
+ export class EmailConfigWithCompany extends EmailConfigBase {
26
+ constructor(...args){
27
+ super(...args), _define_property(this, "companyId", void 0);
28
+ }
29
+ }
30
+ _ts_decorate([
31
+ Column({
32
+ type: 'uuid',
33
+ nullable: true,
34
+ name: 'company_id'
35
+ }),
36
+ _ts_metadata("design:type", Object)
37
+ ], EmailConfigWithCompany.prototype, "companyId", void 0);
38
+ EmailConfigWithCompany = _ts_decorate([
39
+ Entity({
40
+ name: 'email_config'
41
+ }),
42
+ Index([
43
+ 'companyId'
44
+ ]),
45
+ Index([
46
+ 'companyId',
47
+ 'name'
48
+ ]),
49
+ Index([
50
+ 'companyId',
51
+ 'isActive'
52
+ ])
53
+ ], EmailConfigWithCompany);
@@ -0,0 +1,15 @@
1
+ function _ts_decorate(decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ 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;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ }
7
+ import { Entity } from 'typeorm';
8
+ import { EmailConfigBase } from './email-config-base.entity';
9
+ export class EmailConfig extends EmailConfigBase {
10
+ }
11
+ EmailConfig = _ts_decorate([
12
+ Entity({
13
+ name: 'email_config'
14
+ })
15
+ ], EmailConfig);
@@ -0,0 +1,124 @@
1
+ function _define_property(obj, key, value) {
2
+ if (key in obj) {
3
+ Object.defineProperty(obj, key, {
4
+ value: value,
5
+ enumerable: true,
6
+ configurable: true,
7
+ writable: true
8
+ });
9
+ } else {
10
+ obj[key] = value;
11
+ }
12
+ return obj;
13
+ }
14
+ function _ts_decorate(decorators, target, key, desc) {
15
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
16
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
17
+ 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;
18
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
19
+ }
20
+ function _ts_metadata(k, v) {
21
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
22
+ }
23
+ import { Identity } from '@flusys/nestjs-shared/entities';
24
+ import { Column, Index } from 'typeorm';
25
+ export class EmailTemplateBase extends Identity {
26
+ constructor(...args){
27
+ super(...args), _define_property(this, "name", void 0), _define_property(this, "slug", void 0), _define_property(this, "description", void 0), _define_property(this, "subject", void 0), _define_property(this, "schema", void 0), _define_property(this, "htmlContent", void 0), _define_property(this, "textContent", void 0), _define_property(this, "schemaVersion", void 0), _define_property(this, "isActive", void 0), _define_property(this, "isHtml", void 0), _define_property(this, "metadata", void 0);
28
+ }
29
+ }
30
+ _ts_decorate([
31
+ Column({
32
+ type: 'varchar',
33
+ length: 255,
34
+ nullable: false
35
+ }),
36
+ _ts_metadata("design:type", String)
37
+ ], EmailTemplateBase.prototype, "name", void 0);
38
+ _ts_decorate([
39
+ Column({
40
+ type: 'varchar',
41
+ length: 255,
42
+ nullable: false,
43
+ unique: true
44
+ }),
45
+ _ts_metadata("design:type", String)
46
+ ], EmailTemplateBase.prototype, "slug", void 0);
47
+ _ts_decorate([
48
+ Column({
49
+ type: 'varchar',
50
+ length: 500,
51
+ nullable: true
52
+ }),
53
+ _ts_metadata("design:type", Object)
54
+ ], EmailTemplateBase.prototype, "description", void 0);
55
+ _ts_decorate([
56
+ Column({
57
+ type: 'varchar',
58
+ length: 500,
59
+ nullable: false
60
+ }),
61
+ _ts_metadata("design:type", String)
62
+ ], EmailTemplateBase.prototype, "subject", void 0);
63
+ _ts_decorate([
64
+ Column({
65
+ type: 'json',
66
+ nullable: false
67
+ }),
68
+ _ts_metadata("design:type", typeof Record === "undefined" ? Object : Record)
69
+ ], EmailTemplateBase.prototype, "schema", void 0);
70
+ _ts_decorate([
71
+ Column({
72
+ type: 'text',
73
+ nullable: false,
74
+ name: 'html_content'
75
+ }),
76
+ _ts_metadata("design:type", String)
77
+ ], EmailTemplateBase.prototype, "htmlContent", void 0);
78
+ _ts_decorate([
79
+ Column({
80
+ type: 'text',
81
+ nullable: true,
82
+ name: 'text_content'
83
+ }),
84
+ _ts_metadata("design:type", Object)
85
+ ], EmailTemplateBase.prototype, "textContent", void 0);
86
+ _ts_decorate([
87
+ Column({
88
+ type: 'int',
89
+ nullable: false,
90
+ default: 1,
91
+ name: 'schema_version'
92
+ }),
93
+ _ts_metadata("design:type", Number)
94
+ ], EmailTemplateBase.prototype, "schemaVersion", void 0);
95
+ _ts_decorate([
96
+ Column({
97
+ type: 'boolean',
98
+ default: true,
99
+ name: 'is_active'
100
+ }),
101
+ _ts_metadata("design:type", Boolean)
102
+ ], EmailTemplateBase.prototype, "isActive", void 0);
103
+ _ts_decorate([
104
+ Column({
105
+ type: 'boolean',
106
+ default: true,
107
+ name: 'is_html'
108
+ }),
109
+ _ts_metadata("design:type", Boolean)
110
+ ], EmailTemplateBase.prototype, "isHtml", void 0);
111
+ _ts_decorate([
112
+ Column('simple-json', {
113
+ nullable: true
114
+ }),
115
+ _ts_metadata("design:type", Object)
116
+ ], EmailTemplateBase.prototype, "metadata", void 0);
117
+ EmailTemplateBase = _ts_decorate([
118
+ Index([
119
+ 'name'
120
+ ]),
121
+ Index([
122
+ 'isActive'
123
+ ])
124
+ ], EmailTemplateBase);
@@ -0,0 +1,53 @@
1
+ function _define_property(obj, key, value) {
2
+ if (key in obj) {
3
+ Object.defineProperty(obj, key, {
4
+ value: value,
5
+ enumerable: true,
6
+ configurable: true,
7
+ writable: true
8
+ });
9
+ } else {
10
+ obj[key] = value;
11
+ }
12
+ return obj;
13
+ }
14
+ function _ts_decorate(decorators, target, key, desc) {
15
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
16
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
17
+ 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;
18
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
19
+ }
20
+ function _ts_metadata(k, v) {
21
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
22
+ }
23
+ import { Column, Entity, Index } from 'typeorm';
24
+ import { EmailTemplateBase } from './email-template-base.entity';
25
+ export class EmailTemplateWithCompany extends EmailTemplateBase {
26
+ constructor(...args){
27
+ super(...args), _define_property(this, "companyId", void 0);
28
+ }
29
+ }
30
+ _ts_decorate([
31
+ Column({
32
+ type: 'uuid',
33
+ nullable: true,
34
+ name: 'company_id'
35
+ }),
36
+ _ts_metadata("design:type", Object)
37
+ ], EmailTemplateWithCompany.prototype, "companyId", void 0);
38
+ EmailTemplateWithCompany = _ts_decorate([
39
+ Entity({
40
+ name: 'email_template'
41
+ }),
42
+ Index([
43
+ 'companyId'
44
+ ]),
45
+ Index([
46
+ 'companyId',
47
+ 'slug'
48
+ ]),
49
+ Index([
50
+ 'companyId',
51
+ 'isActive'
52
+ ])
53
+ ], EmailTemplateWithCompany);
@@ -0,0 +1,15 @@
1
+ function _ts_decorate(decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ 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;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ }
7
+ import { Entity } from 'typeorm';
8
+ import { EmailTemplateBase } from './email-template-base.entity';
9
+ export class EmailTemplate extends EmailTemplateBase {
10
+ }
11
+ EmailTemplate = _ts_decorate([
12
+ Entity({
13
+ name: 'email_template'
14
+ })
15
+ ], EmailTemplate);
@@ -0,0 +1,20 @@
1
+ export * from './email-config-base.entity';
2
+ export * from './email-config.entity';
3
+ export * from './email-config-with-company.entity';
4
+ export * from './email-template-base.entity';
5
+ export * from './email-template.entity';
6
+ export * from './email-template-with-company.entity';
7
+ /**
8
+ * Get email entities based on configuration
9
+ */ export function getEmailEntitiesByConfig(enableCompanyFeature) {
10
+ if (enableCompanyFeature) {
11
+ return [
12
+ require('./email-config-with-company.entity').EmailConfigWithCompany,
13
+ require('./email-template-with-company.entity').EmailTemplateWithCompany
14
+ ];
15
+ }
16
+ return [
17
+ require('./email-config.entity').EmailConfig,
18
+ require('./email-template.entity').EmailTemplate
19
+ ];
20
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Supported email provider types
3
+ */ export var EmailProviderTypeEnum = /*#__PURE__*/ function(EmailProviderTypeEnum) {
4
+ /** SMTP - Default provider using nodemailer (always available) */ EmailProviderTypeEnum["SMTP"] = "smtp";
5
+ /** SendGrid - Optional (requires @sendgrid/mail) */ EmailProviderTypeEnum["SENDGRID"] = "sendgrid";
6
+ /** Mailgun - Optional (requires mailgun.js) */ EmailProviderTypeEnum["MAILGUN"] = "mailgun";
7
+ return EmailProviderTypeEnum;
8
+ }({});
@@ -0,0 +1 @@
1
+ export * from './email-provider-type.enum';
package/fesm/index.js ADDED
@@ -0,0 +1,10 @@
1
+ // Export all email module components
2
+ export * from './controllers';
3
+ export * from './services';
4
+ export * from './entities';
5
+ export * from './modules';
6
+ export * from './config';
7
+ export * from './dtos';
8
+ export * from './enums';
9
+ export * from './interfaces';
10
+ export * from './providers';
@@ -0,0 +1,3 @@
1
+ /**
2
+ * Mailgun provider configuration
3
+ */ export { };
@@ -0,0 +1,3 @@
1
+ /**
2
+ * Async options for EmailModule registration
3
+ */ export { };
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Email provider configuration
3
+ */ /**
4
+ * Email provider interface - contract for all email providers
5
+ */ export { };
@@ -0,0 +1,3 @@
1
+ /**
2
+ * Full email schema structure
3
+ */ export { };
@@ -0,0 +1,4 @@
1
+ export * from './email-provider.interface';
2
+ export * from './email-module-options.interface';
3
+ export * from './email-config.interface';
4
+ export * from './email-template.interface';
@@ -0,0 +1,167 @@
1
+ function _ts_decorate(decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ 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;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ }
7
+ import { CacheModule, UtilsModule } from '@flusys/nestjs-shared/modules';
8
+ import { Logger, Module } from '@nestjs/common';
9
+ import { EmailConfigService } from '../config';
10
+ import { EMAIL_MODULE_OPTIONS } from '../config/email.constants';
11
+ import { EmailProviderTypeEnum } from '../enums';
12
+ import { EmailFactoryService, EmailProviderRegistry, SmtpProvider, SendGridProvider, MailgunProvider } from '../providers';
13
+ import { EmailDataSourceProvider, EmailProviderConfigService, EmailSendService, EmailTemplateService } from '../services';
14
+ import { EmailConfigController, EmailSendController, EmailTemplateController } from '../controllers';
15
+ // Auto-register built-in email providers
16
+ const logger = new Logger('EmailModule');
17
+ // Register all providers (they use dynamic imports internally)
18
+ EmailProviderRegistry.register(EmailProviderTypeEnum.SMTP, SmtpProvider);
19
+ logger.log('Registered SmtpProvider');
20
+ EmailProviderRegistry.register(EmailProviderTypeEnum.SENDGRID, SendGridProvider);
21
+ logger.log('Registered SendGridProvider');
22
+ EmailProviderRegistry.register(EmailProviderTypeEnum.MAILGUN, MailgunProvider);
23
+ logger.log('Registered MailgunProvider');
24
+ export class EmailModule {
25
+ /**
26
+ * Register EmailModule synchronously
27
+ */ static forRoot(options) {
28
+ const controllers = this.getControllers(options);
29
+ const providers = this.getProviders(options);
30
+ return {
31
+ module: EmailModule,
32
+ global: options.global ?? false,
33
+ imports: [
34
+ CacheModule,
35
+ UtilsModule
36
+ ],
37
+ controllers: options.includeController !== false ? controllers : [],
38
+ providers,
39
+ exports: [
40
+ EmailConfigService,
41
+ EmailDataSourceProvider,
42
+ EmailProviderConfigService,
43
+ EmailTemplateService,
44
+ EmailSendService,
45
+ EmailFactoryService
46
+ ]
47
+ };
48
+ }
49
+ /**
50
+ * Register EmailModule asynchronously
51
+ */ static forRootAsync(options) {
52
+ const controllers = this.getControllers(options);
53
+ const asyncProviders = this.createAsyncProviders(options);
54
+ return {
55
+ module: EmailModule,
56
+ global: options.global ?? false,
57
+ imports: [
58
+ ...options.imports || [],
59
+ CacheModule,
60
+ UtilsModule
61
+ ],
62
+ controllers: options.includeController !== false ? controllers : [],
63
+ providers: [
64
+ ...asyncProviders,
65
+ ...this.getProviders(options, false)
66
+ ],
67
+ exports: [
68
+ EmailConfigService,
69
+ EmailDataSourceProvider,
70
+ EmailProviderConfigService,
71
+ EmailTemplateService,
72
+ EmailSendService,
73
+ EmailFactoryService
74
+ ]
75
+ };
76
+ }
77
+ // ==================== Private Helper Methods ====================
78
+ /**
79
+ * Get controllers
80
+ */ static getControllers(_options) {
81
+ return [
82
+ EmailConfigController,
83
+ EmailTemplateController,
84
+ EmailSendController
85
+ ];
86
+ }
87
+ /**
88
+ * Get providers
89
+ */ static getProviders(options, includeOptionsProvider = true) {
90
+ const providers = [
91
+ EmailConfigService,
92
+ EmailDataSourceProvider,
93
+ EmailProviderConfigService,
94
+ EmailTemplateService,
95
+ EmailSendService,
96
+ EmailFactoryService
97
+ ];
98
+ if (includeOptionsProvider) {
99
+ providers.unshift({
100
+ provide: EMAIL_MODULE_OPTIONS,
101
+ useValue: options
102
+ });
103
+ }
104
+ return providers;
105
+ }
106
+ /**
107
+ * Create async providers for forRootAsync
108
+ */ static createAsyncProviders(options) {
109
+ if (options.useFactory) {
110
+ return [
111
+ {
112
+ provide: EMAIL_MODULE_OPTIONS,
113
+ useFactory: async (...args)=>{
114
+ const config = await options.useFactory(...args);
115
+ return {
116
+ ...options,
117
+ config
118
+ };
119
+ },
120
+ inject: options.inject || []
121
+ }
122
+ ];
123
+ }
124
+ if (options.useClass) {
125
+ return [
126
+ {
127
+ provide: EMAIL_MODULE_OPTIONS,
128
+ useFactory: async (optionsFactory)=>{
129
+ const config = await optionsFactory.createEmailOptions();
130
+ return {
131
+ ...options,
132
+ config
133
+ };
134
+ },
135
+ inject: [
136
+ options.useClass
137
+ ]
138
+ },
139
+ {
140
+ provide: options.useClass,
141
+ useClass: options.useClass
142
+ }
143
+ ];
144
+ }
145
+ if (options.useExisting) {
146
+ return [
147
+ {
148
+ provide: EMAIL_MODULE_OPTIONS,
149
+ useFactory: async (optionsFactory)=>{
150
+ const config = await optionsFactory.createEmailOptions();
151
+ return {
152
+ ...options,
153
+ config
154
+ };
155
+ },
156
+ inject: [
157
+ options.useExisting
158
+ ]
159
+ }
160
+ ];
161
+ }
162
+ return [];
163
+ }
164
+ }
165
+ EmailModule = _ts_decorate([
166
+ Module({})
167
+ ], EmailModule);
@@ -0,0 +1 @@
1
+ export * from './email.module';