@brilab-mailer/core
v0.0.2-12
Published
`@brilab-mailer/core` provides the foundational NestJS module responsible for: - registering email providers - registering template engines - orchestrating rendering + sending - exposing `MailerService` as a unified high-level interface
Readme
@brilab-mailer/core
Overview
@brilab-mailer/core provides the foundational NestJS module responsible for:
- registering email providers
- registering template engines
- orchestrating rendering + sending
- exposing
MailerServiceas a unified high-level interface
This is the heart of the Brilab Mailer architecture.
High-Level Architecture
+---------------------+
| NestJS Application |
+---------------------+
|
v
+---------------------+
| MailerModule |
+---------------------+
| |
v v
+-------------------+ +-------------------+
| MailerProvider | | TemplateEngine |
+-------------------+ +-------------------+Core Responsibilities
1. Provider Registration
You pass providerClass in MailerModule.register():
MailerModule.register({
providerClass: MailtrapApiProvider,
});Core will:
- instantiate the provider
- validate that it implements
MailerProvider - expose it through
MAILER_PROVIDER
2. Template Engine Registration
MailerModule.register({
templateEngineClass: HandlebarsTemplateEngine,
});3. Unified MailerService
await this.mailer.send({
to: email,
subject: 'Welcome!',
html: await this.template.render('welcome', { name }),
});API Documentation
MailerModule.register(options)
interface MailerModuleOptions {
providerClass: Type<MailerProvider>;
templateEngineClass?: Type<MailerTemplateEngine>;
}MailerService
send(options: MailerSendOptions): Promise<void>
render(template: string, context: any): Promise<string>Error Handling Strategy
- missing provider →
MailerMissingProviderException - provider.send() error → wrapped into
MailerProviderException - missing template engine → bypass rendering (raw content)
Lifecycle
- provider instantiated once per module
- template engine instantiated once
- service stateless
Best Practices
- Always use dynamic module configuration.
- Use ConfigModule for provider secrets.
- Keep providers stateless.
