@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,16 @@
|
|
|
1
|
+
import { DatabaseMode } from '@flusys/nestjs-core';
|
|
2
|
+
import { IModuleConfigService } from '@flusys/nestjs-shared/interfaces';
|
|
3
|
+
import { EmailModuleOptions } from '../interfaces';
|
|
4
|
+
export declare class EmailConfigService implements IModuleConfigService {
|
|
5
|
+
private readonly options;
|
|
6
|
+
constructor(options: EmailModuleOptions);
|
|
7
|
+
isCompanyFeatureEnabled(): boolean;
|
|
8
|
+
getDatabaseMode(): DatabaseMode;
|
|
9
|
+
isMultiTenant(): boolean;
|
|
10
|
+
getRateLimitPerMinute(): number;
|
|
11
|
+
isLoggingEnabled(): boolean;
|
|
12
|
+
getDefaultProvider(): string | undefined;
|
|
13
|
+
getDefaultFromName(): string;
|
|
14
|
+
getDefaultDatabaseConfig(): import("@flusys/nestjs-core").IDatabaseConfig;
|
|
15
|
+
getOptions(): EmailModuleOptions;
|
|
16
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { CreateEmailConfigDto, EmailConfigResponseDto, UpdateEmailConfigDto } from '../dtos';
|
|
2
|
+
import { EmailProviderConfigService } from '../services';
|
|
3
|
+
declare const EmailConfigController_base: abstract new (service: EmailProviderConfigService) => {
|
|
4
|
+
service: EmailProviderConfigService;
|
|
5
|
+
insert(addDto: CreateEmailConfigDto, user: import("@flusys/nestjs-shared/interfaces").ILoggedUserInfo | null): Promise<import("@flusys/nestjs-shared/dtos").SingleResponseDto<EmailConfigResponseDto>>;
|
|
6
|
+
insertMany(addDto: CreateEmailConfigDto[], user: import("@flusys/nestjs-shared/interfaces").ILoggedUserInfo | null): Promise<import("@flusys/nestjs-shared/dtos").BulkResponseDto<EmailConfigResponseDto>>;
|
|
7
|
+
getById(id: string, body: import("@flusys/nestjs-shared/dtos").GetByIdBodyDto, user: import("@flusys/nestjs-shared/interfaces").ILoggedUserInfo | null): Promise<import("@flusys/nestjs-shared/dtos").SingleResponseDto<EmailConfigResponseDto>>;
|
|
8
|
+
update(updateDto: UpdateEmailConfigDto, user: import("@flusys/nestjs-shared/interfaces").ILoggedUserInfo | null): Promise<import("@flusys/nestjs-shared/dtos").SingleResponseDto<EmailConfigResponseDto>>;
|
|
9
|
+
updateMany(updateDtos: UpdateEmailConfigDto[], user: import("@flusys/nestjs-shared/interfaces").ILoggedUserInfo | null): Promise<import("@flusys/nestjs-shared/dtos").BulkResponseDto<EmailConfigResponseDto>>;
|
|
10
|
+
getAll(filterAndPaginationDto: import("@flusys/nestjs-shared/dtos").FilterAndPaginationDto, user: import("@flusys/nestjs-shared/interfaces").ILoggedUserInfo | null, search?: string): Promise<import("@flusys/nestjs-shared/dtos").ListResponseDto<EmailConfigResponseDto>>;
|
|
11
|
+
delete(deleteDto: import("@flusys/nestjs-shared/dtos").DeleteDto, user: import("@flusys/nestjs-shared/interfaces").ILoggedUserInfo | null): Promise<import("@flusys/nestjs-shared/dtos").MessageResponseDto>;
|
|
12
|
+
};
|
|
13
|
+
export declare class EmailConfigController extends EmailConfigController_base {
|
|
14
|
+
emailConfigService: EmailProviderConfigService;
|
|
15
|
+
constructor(emailConfigService: EmailProviderConfigService);
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { SingleResponseDto } from '@flusys/nestjs-shared/dtos';
|
|
2
|
+
import { ILoggedUserInfo } from '@flusys/nestjs-shared/interfaces';
|
|
3
|
+
import { EmailSendResultDto, SendEmailDto, SendTemplateEmailDto, TestEmailDto } from '../dtos';
|
|
4
|
+
import { EmailSendService } from '../services';
|
|
5
|
+
export declare class EmailSendController {
|
|
6
|
+
private readonly emailSendService;
|
|
7
|
+
constructor(emailSendService: EmailSendService);
|
|
8
|
+
sendEmail(dto: SendEmailDto, user: ILoggedUserInfo): Promise<SingleResponseDto<EmailSendResultDto>>;
|
|
9
|
+
sendTemplateEmail(dto: SendTemplateEmailDto, user: ILoggedUserInfo): Promise<SingleResponseDto<EmailSendResultDto>>;
|
|
10
|
+
sendTestEmail(dto: TestEmailDto, user: ILoggedUserInfo): Promise<SingleResponseDto<EmailSendResultDto>>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ILoggedUserInfo } from '@flusys/nestjs-shared/interfaces';
|
|
2
|
+
import { CreateEmailTemplateDto, EmailTemplateResponseDto, UpdateEmailTemplateDto } from '../dtos';
|
|
3
|
+
import { IEmailTemplate } from '../interfaces';
|
|
4
|
+
import { EmailTemplateService } from '../services';
|
|
5
|
+
declare const EmailTemplateController_base: abstract new (service: EmailTemplateService) => {
|
|
6
|
+
service: EmailTemplateService;
|
|
7
|
+
insert(addDto: CreateEmailTemplateDto, user: ILoggedUserInfo | null): Promise<import("@flusys/nestjs-shared/dtos").SingleResponseDto<EmailTemplateResponseDto>>;
|
|
8
|
+
insertMany(addDto: CreateEmailTemplateDto[], user: ILoggedUserInfo | null): Promise<import("@flusys/nestjs-shared/dtos").BulkResponseDto<EmailTemplateResponseDto>>;
|
|
9
|
+
getById(id: string, body: import("@flusys/nestjs-shared/dtos").GetByIdBodyDto, user: ILoggedUserInfo | null): Promise<import("@flusys/nestjs-shared/dtos").SingleResponseDto<EmailTemplateResponseDto>>;
|
|
10
|
+
update(updateDto: UpdateEmailTemplateDto, user: ILoggedUserInfo | null): Promise<import("@flusys/nestjs-shared/dtos").SingleResponseDto<EmailTemplateResponseDto>>;
|
|
11
|
+
updateMany(updateDtos: UpdateEmailTemplateDto[], user: ILoggedUserInfo | null): Promise<import("@flusys/nestjs-shared/dtos").BulkResponseDto<EmailTemplateResponseDto>>;
|
|
12
|
+
getAll(filterAndPaginationDto: import("@flusys/nestjs-shared/dtos").FilterAndPaginationDto, user: ILoggedUserInfo | null, search?: string): Promise<import("@flusys/nestjs-shared/dtos").ListResponseDto<EmailTemplateResponseDto>>;
|
|
13
|
+
delete(deleteDto: import("@flusys/nestjs-shared/dtos").DeleteDto, user: ILoggedUserInfo | null): Promise<import("@flusys/nestjs-shared/dtos").MessageResponseDto>;
|
|
14
|
+
};
|
|
15
|
+
export declare class EmailTemplateController extends EmailTemplateController_base {
|
|
16
|
+
emailTemplateService: EmailTemplateService;
|
|
17
|
+
constructor(emailTemplateService: EmailTemplateService);
|
|
18
|
+
getBySlug(body: {
|
|
19
|
+
slug: string;
|
|
20
|
+
}, user: ILoggedUserInfo): Promise<{
|
|
21
|
+
success: boolean;
|
|
22
|
+
data: IEmailTemplate | null;
|
|
23
|
+
}>;
|
|
24
|
+
}
|
|
25
|
+
export {};
|
package/docs/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { emailSwaggerConfig } from './email-swagger.config';
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { IdentityResponseDto } from '@flusys/nestjs-shared/dtos';
|
|
2
|
+
import { EmailProviderTypeEnum } from '../enums';
|
|
3
|
+
export declare class CreateEmailConfigDto {
|
|
4
|
+
name: string;
|
|
5
|
+
provider: EmailProviderTypeEnum;
|
|
6
|
+
config: Record<string, any>;
|
|
7
|
+
fromEmail?: string;
|
|
8
|
+
fromName?: string;
|
|
9
|
+
isActive?: boolean;
|
|
10
|
+
isDefault?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export declare class UpdateEmailConfigDto {
|
|
13
|
+
id: string;
|
|
14
|
+
name?: string;
|
|
15
|
+
provider?: EmailProviderTypeEnum;
|
|
16
|
+
config?: Record<string, any>;
|
|
17
|
+
fromEmail?: string;
|
|
18
|
+
fromName?: string;
|
|
19
|
+
isActive?: boolean;
|
|
20
|
+
isDefault?: boolean;
|
|
21
|
+
}
|
|
22
|
+
export declare class EmailConfigResponseDto extends IdentityResponseDto {
|
|
23
|
+
name: string;
|
|
24
|
+
provider: EmailProviderTypeEnum;
|
|
25
|
+
config: Record<string, any>;
|
|
26
|
+
fromEmail: string | null;
|
|
27
|
+
fromName: string | null;
|
|
28
|
+
isActive: boolean;
|
|
29
|
+
isDefault: boolean;
|
|
30
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { ValidationArguments, ValidatorConstraintInterface } from 'class-validator';
|
|
2
|
+
export declare class IsEmailOrEmailArrayConstraint implements ValidatorConstraintInterface {
|
|
3
|
+
private readonly emailRegex;
|
|
4
|
+
validate(value: unknown): boolean;
|
|
5
|
+
defaultMessage(args: ValidationArguments): string;
|
|
6
|
+
}
|
|
7
|
+
export declare class EmailAttachmentDto {
|
|
8
|
+
filename: string;
|
|
9
|
+
content: string;
|
|
10
|
+
contentType?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare class SendEmailDto {
|
|
13
|
+
to: string | string[];
|
|
14
|
+
cc?: string | string[];
|
|
15
|
+
bcc?: string | string[];
|
|
16
|
+
subject: string;
|
|
17
|
+
html: string;
|
|
18
|
+
text?: string;
|
|
19
|
+
from?: string;
|
|
20
|
+
fromName?: string;
|
|
21
|
+
replyTo?: string;
|
|
22
|
+
emailConfigId?: string;
|
|
23
|
+
attachments?: EmailAttachmentDto[];
|
|
24
|
+
}
|
|
25
|
+
export declare class SendTemplateEmailDto {
|
|
26
|
+
templateId?: string;
|
|
27
|
+
templateSlug?: string;
|
|
28
|
+
to: string | string[];
|
|
29
|
+
cc?: string | string[];
|
|
30
|
+
bcc?: string | string[];
|
|
31
|
+
variables?: Record<string, any>;
|
|
32
|
+
from?: string;
|
|
33
|
+
fromName?: string;
|
|
34
|
+
replyTo?: string;
|
|
35
|
+
emailConfigId?: string;
|
|
36
|
+
attachments?: EmailAttachmentDto[];
|
|
37
|
+
}
|
|
38
|
+
export declare class TestEmailDto {
|
|
39
|
+
emailConfigId: string;
|
|
40
|
+
recipient: string;
|
|
41
|
+
}
|
|
42
|
+
export declare class EmailSendResultDto {
|
|
43
|
+
success: boolean;
|
|
44
|
+
messageId?: string;
|
|
45
|
+
error?: string;
|
|
46
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { IdentityResponseDto } from '@flusys/nestjs-shared/dtos';
|
|
2
|
+
export declare class CreateEmailTemplateDto {
|
|
3
|
+
name: string;
|
|
4
|
+
slug: string;
|
|
5
|
+
description?: string;
|
|
6
|
+
subject: string;
|
|
7
|
+
schema: Record<string, unknown>;
|
|
8
|
+
htmlContent: string;
|
|
9
|
+
textContent?: string;
|
|
10
|
+
isActive?: boolean;
|
|
11
|
+
isHtml?: boolean;
|
|
12
|
+
metadata?: Record<string, unknown>;
|
|
13
|
+
}
|
|
14
|
+
export declare class UpdateEmailTemplateDto {
|
|
15
|
+
id: string;
|
|
16
|
+
name?: string;
|
|
17
|
+
slug?: string;
|
|
18
|
+
description?: string;
|
|
19
|
+
subject?: string;
|
|
20
|
+
schema?: Record<string, unknown>;
|
|
21
|
+
htmlContent?: string;
|
|
22
|
+
textContent?: string;
|
|
23
|
+
isActive?: boolean;
|
|
24
|
+
isHtml?: boolean;
|
|
25
|
+
metadata?: Record<string, unknown>;
|
|
26
|
+
}
|
|
27
|
+
export declare class EmailTemplateResponseDto extends IdentityResponseDto {
|
|
28
|
+
name: string;
|
|
29
|
+
slug: string;
|
|
30
|
+
description: string | null;
|
|
31
|
+
subject: string;
|
|
32
|
+
schema: Record<string, unknown>;
|
|
33
|
+
htmlContent: string;
|
|
34
|
+
textContent: string | null;
|
|
35
|
+
schemaVersion: number;
|
|
36
|
+
isActive: boolean;
|
|
37
|
+
isHtml: boolean;
|
|
38
|
+
metadata: Record<string, unknown> | null;
|
|
39
|
+
}
|
package/dtos/index.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Identity } from '@flusys/nestjs-shared/entities';
|
|
2
|
+
import { EmailProviderTypeEnum } from '../enums';
|
|
3
|
+
export declare abstract class EmailConfigBase extends Identity {
|
|
4
|
+
name: string;
|
|
5
|
+
provider: EmailProviderTypeEnum;
|
|
6
|
+
config: Record<string, any>;
|
|
7
|
+
fromEmail: string | null;
|
|
8
|
+
fromName: string | null;
|
|
9
|
+
isActive: boolean;
|
|
10
|
+
isDefault: boolean;
|
|
11
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Identity } from '@flusys/nestjs-shared/entities';
|
|
2
|
+
export declare abstract class EmailTemplateBase extends Identity {
|
|
3
|
+
name: string;
|
|
4
|
+
slug: string;
|
|
5
|
+
description: string | null;
|
|
6
|
+
subject: string;
|
|
7
|
+
schema: Record<string, unknown>;
|
|
8
|
+
htmlContent: string;
|
|
9
|
+
textContent: string | null;
|
|
10
|
+
schemaVersion: number;
|
|
11
|
+
isActive: boolean;
|
|
12
|
+
isHtml: boolean;
|
|
13
|
+
metadata: Record<string, unknown> | null;
|
|
14
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
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
|
+
export declare function getEmailEntitiesByConfig(enableCompanyFeature: boolean): any[];
|
package/enums/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './email-provider-type.enum';
|
|
@@ -0,0 +1,71 @@
|
|
|
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
|
+
function _ts_param(paramIndex, decorator) {
|
|
24
|
+
return function(target, key) {
|
|
25
|
+
decorator(target, key, paramIndex);
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
import { Inject, Injectable } from '@nestjs/common';
|
|
29
|
+
import { EmailModuleOptions } from '../interfaces';
|
|
30
|
+
import { EMAIL_MODULE_OPTIONS, DEFAULT_FROM_NAME } from './email.constants';
|
|
31
|
+
export class EmailConfigService {
|
|
32
|
+
isCompanyFeatureEnabled() {
|
|
33
|
+
return this.options.bootstrapAppConfig?.enableCompanyFeature ?? false;
|
|
34
|
+
}
|
|
35
|
+
getDatabaseMode() {
|
|
36
|
+
return this.options.bootstrapAppConfig?.databaseMode ?? 'single';
|
|
37
|
+
}
|
|
38
|
+
isMultiTenant() {
|
|
39
|
+
return this.getDatabaseMode() === 'multi-tenant';
|
|
40
|
+
}
|
|
41
|
+
getRateLimitPerMinute() {
|
|
42
|
+
return this.options.config?.rateLimitPerMinute ?? 60;
|
|
43
|
+
}
|
|
44
|
+
isLoggingEnabled() {
|
|
45
|
+
return this.options.config?.enableLogging ?? false;
|
|
46
|
+
}
|
|
47
|
+
getDefaultProvider() {
|
|
48
|
+
return this.options.config?.defaultProvider;
|
|
49
|
+
}
|
|
50
|
+
getDefaultFromName() {
|
|
51
|
+
return DEFAULT_FROM_NAME;
|
|
52
|
+
}
|
|
53
|
+
getDefaultDatabaseConfig() {
|
|
54
|
+
return this.options.config?.defaultDatabaseConfig;
|
|
55
|
+
}
|
|
56
|
+
getOptions() {
|
|
57
|
+
return this.options;
|
|
58
|
+
}
|
|
59
|
+
constructor(options){
|
|
60
|
+
_define_property(this, "options", void 0);
|
|
61
|
+
this.options = options;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
EmailConfigService = _ts_decorate([
|
|
65
|
+
Injectable(),
|
|
66
|
+
_ts_param(0, Inject(EMAIL_MODULE_OPTIONS)),
|
|
67
|
+
_ts_metadata("design:type", Function),
|
|
68
|
+
_ts_metadata("design:paramtypes", [
|
|
69
|
+
typeof EmailModuleOptions === "undefined" ? Object : EmailModuleOptions
|
|
70
|
+
])
|
|
71
|
+
], EmailConfigService);
|
|
@@ -0,0 +1,91 @@
|
|
|
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
|
+
function _ts_param(paramIndex, decorator) {
|
|
24
|
+
return function(target, key) {
|
|
25
|
+
decorator(target, key, paramIndex);
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
import { createApiController, EMAIL_CONFIG_PERMISSIONS } from '@flusys/nestjs-shared/classes';
|
|
29
|
+
import { Controller, Inject } from '@nestjs/common';
|
|
30
|
+
import { ApiTags } from '@nestjs/swagger';
|
|
31
|
+
import { CreateEmailConfigDto, EmailConfigResponseDto, UpdateEmailConfigDto } from '../dtos';
|
|
32
|
+
import { EmailProviderConfigService } from '../services';
|
|
33
|
+
export class EmailConfigController extends createApiController(CreateEmailConfigDto, UpdateEmailConfigDto, EmailConfigResponseDto, {
|
|
34
|
+
security: {
|
|
35
|
+
insert: {
|
|
36
|
+
level: 'permission',
|
|
37
|
+
permissions: [
|
|
38
|
+
EMAIL_CONFIG_PERMISSIONS.CREATE
|
|
39
|
+
]
|
|
40
|
+
},
|
|
41
|
+
insertMany: {
|
|
42
|
+
level: 'permission',
|
|
43
|
+
permissions: [
|
|
44
|
+
EMAIL_CONFIG_PERMISSIONS.CREATE
|
|
45
|
+
]
|
|
46
|
+
},
|
|
47
|
+
getById: {
|
|
48
|
+
level: 'permission',
|
|
49
|
+
permissions: [
|
|
50
|
+
EMAIL_CONFIG_PERMISSIONS.READ
|
|
51
|
+
]
|
|
52
|
+
},
|
|
53
|
+
getAll: {
|
|
54
|
+
level: 'permission',
|
|
55
|
+
permissions: [
|
|
56
|
+
EMAIL_CONFIG_PERMISSIONS.READ
|
|
57
|
+
]
|
|
58
|
+
},
|
|
59
|
+
update: {
|
|
60
|
+
level: 'permission',
|
|
61
|
+
permissions: [
|
|
62
|
+
EMAIL_CONFIG_PERMISSIONS.UPDATE
|
|
63
|
+
]
|
|
64
|
+
},
|
|
65
|
+
updateMany: {
|
|
66
|
+
level: 'permission',
|
|
67
|
+
permissions: [
|
|
68
|
+
EMAIL_CONFIG_PERMISSIONS.UPDATE
|
|
69
|
+
]
|
|
70
|
+
},
|
|
71
|
+
delete: {
|
|
72
|
+
level: 'permission',
|
|
73
|
+
permissions: [
|
|
74
|
+
EMAIL_CONFIG_PERMISSIONS.DELETE
|
|
75
|
+
]
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}) {
|
|
79
|
+
constructor(emailConfigService){
|
|
80
|
+
super(emailConfigService), _define_property(this, "emailConfigService", void 0), this.emailConfigService = emailConfigService;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
EmailConfigController = _ts_decorate([
|
|
84
|
+
ApiTags('Email Config'),
|
|
85
|
+
Controller('email/email-config'),
|
|
86
|
+
_ts_param(0, Inject(EmailProviderConfigService)),
|
|
87
|
+
_ts_metadata("design:type", Function),
|
|
88
|
+
_ts_metadata("design:paramtypes", [
|
|
89
|
+
typeof EmailProviderConfigService === "undefined" ? Object : EmailProviderConfigService
|
|
90
|
+
])
|
|
91
|
+
], EmailConfigController);
|
|
@@ -0,0 +1,132 @@
|
|
|
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
|
+
function _ts_param(paramIndex, decorator) {
|
|
24
|
+
return function(target, key) {
|
|
25
|
+
decorator(target, key, paramIndex);
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
import { CurrentUser, RequirePermission } from '@flusys/nestjs-shared/decorators';
|
|
29
|
+
import { JwtAuthGuard } from '@flusys/nestjs-shared/guards';
|
|
30
|
+
import { ILoggedUserInfo } from '@flusys/nestjs-shared/interfaces';
|
|
31
|
+
import { Body, Controller, Inject, Post, UseGuards } from '@nestjs/common';
|
|
32
|
+
import { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger';
|
|
33
|
+
import { SendEmailDto, SendTemplateEmailDto, TestEmailDto } from '../dtos';
|
|
34
|
+
import { EmailSendService } from '../services';
|
|
35
|
+
export class EmailSendController {
|
|
36
|
+
async sendEmail(dto, user) {
|
|
37
|
+
const result = await this.emailSendService.sendEmail(dto, user);
|
|
38
|
+
return {
|
|
39
|
+
success: result.success,
|
|
40
|
+
message: result.success ? 'Email sent successfully' : 'Failed to send email',
|
|
41
|
+
data: {
|
|
42
|
+
success: result.success,
|
|
43
|
+
messageId: result.messageId,
|
|
44
|
+
error: result.error
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
async sendTemplateEmail(dto, user) {
|
|
49
|
+
const result = await this.emailSendService.sendTemplateEmail(dto, user);
|
|
50
|
+
return {
|
|
51
|
+
success: result.success,
|
|
52
|
+
message: result.success ? 'Template email sent successfully' : 'Failed to send template email',
|
|
53
|
+
data: {
|
|
54
|
+
success: result.success,
|
|
55
|
+
messageId: result.messageId,
|
|
56
|
+
error: result.error
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
async sendTestEmail(dto, user) {
|
|
61
|
+
const result = await this.emailSendService.sendTestEmail(dto.emailConfigId, dto.recipient, user);
|
|
62
|
+
return {
|
|
63
|
+
success: result.success,
|
|
64
|
+
message: result.success ? 'Test email sent successfully' : 'Failed to send test email',
|
|
65
|
+
data: {
|
|
66
|
+
success: result.success,
|
|
67
|
+
messageId: result.messageId,
|
|
68
|
+
error: result.error
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
constructor(emailSendService){
|
|
73
|
+
_define_property(this, "emailSendService", void 0);
|
|
74
|
+
this.emailSendService = emailSendService;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
_ts_decorate([
|
|
78
|
+
Post('direct'),
|
|
79
|
+
RequirePermission('email.send'),
|
|
80
|
+
ApiOperation({
|
|
81
|
+
summary: 'Send email directly with custom content'
|
|
82
|
+
}),
|
|
83
|
+
_ts_param(0, Body()),
|
|
84
|
+
_ts_param(1, CurrentUser()),
|
|
85
|
+
_ts_metadata("design:type", Function),
|
|
86
|
+
_ts_metadata("design:paramtypes", [
|
|
87
|
+
typeof SendEmailDto === "undefined" ? Object : SendEmailDto,
|
|
88
|
+
typeof ILoggedUserInfo === "undefined" ? Object : ILoggedUserInfo
|
|
89
|
+
]),
|
|
90
|
+
_ts_metadata("design:returntype", Promise)
|
|
91
|
+
], EmailSendController.prototype, "sendEmail", null);
|
|
92
|
+
_ts_decorate([
|
|
93
|
+
Post('template'),
|
|
94
|
+
RequirePermission('email.send'),
|
|
95
|
+
ApiOperation({
|
|
96
|
+
summary: 'Send email using a template with variable interpolation'
|
|
97
|
+
}),
|
|
98
|
+
_ts_param(0, Body()),
|
|
99
|
+
_ts_param(1, CurrentUser()),
|
|
100
|
+
_ts_metadata("design:type", Function),
|
|
101
|
+
_ts_metadata("design:paramtypes", [
|
|
102
|
+
typeof SendTemplateEmailDto === "undefined" ? Object : SendTemplateEmailDto,
|
|
103
|
+
typeof ILoggedUserInfo === "undefined" ? Object : ILoggedUserInfo
|
|
104
|
+
]),
|
|
105
|
+
_ts_metadata("design:returntype", Promise)
|
|
106
|
+
], EmailSendController.prototype, "sendTemplateEmail", null);
|
|
107
|
+
_ts_decorate([
|
|
108
|
+
Post('test'),
|
|
109
|
+
RequirePermission('email.send'),
|
|
110
|
+
ApiOperation({
|
|
111
|
+
summary: 'Send a test email to verify configuration'
|
|
112
|
+
}),
|
|
113
|
+
_ts_param(0, Body()),
|
|
114
|
+
_ts_param(1, CurrentUser()),
|
|
115
|
+
_ts_metadata("design:type", Function),
|
|
116
|
+
_ts_metadata("design:paramtypes", [
|
|
117
|
+
typeof TestEmailDto === "undefined" ? Object : TestEmailDto,
|
|
118
|
+
typeof ILoggedUserInfo === "undefined" ? Object : ILoggedUserInfo
|
|
119
|
+
]),
|
|
120
|
+
_ts_metadata("design:returntype", Promise)
|
|
121
|
+
], EmailSendController.prototype, "sendTestEmail", null);
|
|
122
|
+
EmailSendController = _ts_decorate([
|
|
123
|
+
ApiTags('Email Send'),
|
|
124
|
+
ApiBearerAuth(),
|
|
125
|
+
Controller('email/send'),
|
|
126
|
+
UseGuards(JwtAuthGuard),
|
|
127
|
+
_ts_param(0, Inject(EmailSendService)),
|
|
128
|
+
_ts_metadata("design:type", Function),
|
|
129
|
+
_ts_metadata("design:paramtypes", [
|
|
130
|
+
typeof EmailSendService === "undefined" ? Object : EmailSendService
|
|
131
|
+
])
|
|
132
|
+
], EmailSendController);
|