waitlist-mailer
Version:
Modern, modular TypeScript library for managing waitlists with pluggable storage and mail providers. Supports MongoDB, SQL databases, and custom adapters with zero required dependencies for basic usage.
55 lines (47 loc) • 1.68 kB
text/typescript
/**
* Console-based mail provider for waitlist-mailer.
* Perfect for development and testing.
* Outputs email content to console instead of sending.
*/
import { MailProvider, EmailContext } from '../../types';
/**
* Console-based mail provider implementation.
* Outputs emails to console for development and testing.
* No external dependencies required.
*/
export class ConsoleMailProvider implements MailProvider {
constructor(private verbose: boolean = true) {}
/**
* Output a confirmation email to console.
* @param email - Recipient email address
* @param context - Email context
* @returns Always returns true (successful "send")
*/
async sendConfirmation(email: string, context: EmailContext): Promise<boolean> {
const timestamp = new Date().toISOString();
const subject = this.buildSubject(context);
const body = this.buildBody(context);
console.log(`\n${'='.repeat(60)}`);
console.log(`[EMAIL SENT] ${timestamp}`);
console.log(`To: ${email}`);
console.log(`Subject: ${subject}`);
if (this.verbose) {
console.log(`\nContext:`);
console.log(JSON.stringify(context, null, 2));
console.log(`\nBody:`);
console.log(body);
}
console.log(`${'='.repeat(60)}\n`);
return true;
}
private buildSubject(context: EmailContext): string {
return context.subject || `Welcome to ${context.companyName || 'our platform'}`;
}
private buildBody(context: EmailContext): string {
return context.customHtml || `
Thank you for joining ${context.companyName || 'our platform'}!
Email: ${context.email}
${context.customUrl ? `Link: ${context.customUrl}` : ''}
`.trim();
}
}