@myko.pk/mailer
v1.0.1
Published
Transactional email package for the MYKO ecosystem. Drop into any NestJS server and send OTP emails directly — no separate mailing service needed.
Readme
@myko/mailer
Transactional email package for the MYKO ecosystem. Drop into any NestJS server and send OTP emails directly — no separate mailing service needed.
Installation
// package.json
{
"dependencies": {
"@myko/mailer": "file:../packages/@myko/mailer"
}
}Then install:
npm installUsage
1. Register the module
In your app.module.ts, call MailerModule.forRoot() with your SMTP config:
import { MailerModule } from '@myko/mailer';
import { Module } from '@nestjs/common';
@Module({
imports: [
MailerModule.forRoot({
smtp: {
host: 'email-smtp.eu-north-1.amazonaws.com',
port: 465,
user: 'your-smtp-username',
pass: 'your-smtp-password',
},
from: {
email: '[email protected]',
name: 'MYKO PAKISTAN',
},
}),
],
})
export class AppModule {}The module is @Global(), so you only need to import it once.
2. Inject and use
import { MailerService } from '@myko/mailer';
@Injectable()
export class SomeService {
constructor(private readonly mailer: MailerService) {}
async handleLogin() {
const result = await this.mailer.sendOTP({
email: '[email protected]',
otpCode: '482916',
magicLink: 'https://myko.pk/auth/verify?token=xxx',
appName: 'MYKO Merchant',
appIcon: 'https://...', // optional
});
console.log(result.timings);
// { templateRender: 2, smtpSend: 120, total: 122 }
}
}API
MailerModule.forRoot(config)
| Param | Type | Description |
|-------|------|-------------|
| config.smtp.host | string | SMTP server hostname |
| config.smtp.port | number | SMTP port (465 for SSL, 587 for STARTTLS) |
| config.smtp.user | string | SMTP username |
| config.smtp.pass | string | SMTP password |
| config.from.email | string | Sender email address |
| config.from.name | string | Sender display name |
mailer.sendOTP(options)
| Option | Type | Default | Description |
|--------|------|---------|-------------|
| email | string | required | Recipient email |
| otpCode | string | required | The OTP code to embed |
| magicLink | string | required | One-tap login URL |
| appName | string | 'MYKO' | App display name |
| appIcon | string | '' | App icon URL |
Returns: Promise<SendOtpResult>
interface SendOtpResult {
messageId?: string;
timings: {
templateRender: number; // ms
smtpSend: number; // ms
total: number; // ms
};
}Adding a new API
- Create
src/apis/<name>/with:<name>.service.ts— the service logic<name>.interface.ts— input/output typestemplates/— any HTML templates
- Add it to
MailerServiceas a method - Wire it in
MailerModule
Build
npm run buildCompiles TypeScript to dist/ and copies .html templates alongside.
