UNPKG

@454creative/easy-email

Version:

A framework-agnostic email service library for Node.js with observability and monitoring

166 lines 5.74 kB
import { EmailOptions, EmailResponse, SmtpConfig, EmailProviderConfig } from '../interfaces/email-options.interface'; import { EmailRequest } from '../interfaces/email-request.interface'; import { IEmailService } from '../interfaces/email-service.interface'; import { ObservabilityService } from './observability.service'; /** * EmailService - A reusable service for sending emails * * This service can be used in both NodeJS/JavaScript and NestJS/TypeScript projects. */ export declare class EmailService implements IEmailService { private transporter?; private defaultFrom?; private providerType; private sendGridConfigured; private sesService?; private observability; private templateManager; /** * Create an instance of EmailService * * @param providerConfig - Email provider configuration (SMTP, SendGrid, or SES) * @param defaultFrom - Default sender email and name * @param observabilityService - Optional observability service instance */ constructor(providerConfig: EmailProviderConfig | SmtpConfig, // Support legacy constructor defaultFrom?: { email: string; name?: string; }, observabilityService?: ObservabilityService); /** * Configure email provider based on configuration * @private */ private configureProvider; /** * Verify email provider connection * * @returns Promise<boolean> - True if connection is successful */ verifyConnection(): Promise<boolean>; /** * Validate email options * @private */ private validateEmailOptions; /** * Centralized error handler for email operations * @private */ private handleError; /** * Send email using the new EmailRequest interface * * @param request - Email request * @returns Promise<EmailResponse> - Response with success status and message ID */ sendEmail(request: EmailRequest): Promise<EmailResponse>; /** * Send email using legacy EmailOptions interface (for backward compatibility) * * @param options - Email options * @returns Promise<EmailResponse> - Response with success status and message ID */ sendEmailLegacy(options: EmailOptions): Promise<EmailResponse>; /** * Create standardized email response * @private */ private createSuccessResponse; /** * Create standardized error response * @private */ private createErrorResponse; /** * Send an email using SMTP * * @param options - Email options * @returns Promise<EmailResponse> - Response with success status and message ID * @private */ protected sendWithSmtp(options: EmailOptions): Promise<EmailResponse>; /** * Send an email using SendGrid * * @param options - Email options * @returns Promise<EmailResponse> - Response with success status and message ID * @private */ private sendWithSendGrid; /** * Send an email using SES * * @param options - Email options * @returns Promise<EmailResponse> - Response with success status and message ID * @private */ private sendWithSes; /** * Encode attachment content for SendGrid * @private */ private encodeAttachmentContent; /** * Send a plain text email * * @param to - Recipient(s) * @param subject - Email subject * @param text - Plain text content * @param options - Additional email options * @returns Promise<EmailResponse> - Response with success status and message ID */ sendPlainText(to: EmailOptions['to'], subject: string, text: string, options?: Partial<EmailOptions>): Promise<EmailResponse>; /** * Send an HTML email * * @param to - Recipient(s) * @param subject - Email subject * @param html - HTML content * @param options - Additional email options * @returns Promise<EmailResponse> - Response with success status and message ID */ sendHtml(to: EmailOptions['to'], subject: string, html: string, options?: Partial<EmailOptions>): Promise<EmailResponse>; /** * Format recipients to the format expected by nodemailer * * @param recipients - Single recipient or array of recipients * @returns string - Formatted recipients string */ private formatRecipients; /** * Validate a template using the appropriate template service * * @param templateId - Template identifier * @returns Promise<boolean> - True if template is valid */ validateTemplate(templateId: string): Promise<boolean>; /** * Get template information * * @param templateId - Template identifier * @returns Promise<TemplateInfo> - Template information */ getTemplateInfo(templateId: string): Promise<import("../interfaces/template.interface").TemplateInfo>; /** * Validate template with detailed results * * @param templateId - Template identifier * @param data - Template data to validate * @returns Promise<TemplateValidationResult> - Template validation results */ validateTemplateWithDetails(templateId: string, data: Record<string, any>): Promise<import("../interfaces/template.interface").TemplateValidationResult>; /** * List available templates for the current provider * * @returns Promise<string[]> - List of template names/IDs */ listTemplates(): Promise<string[]>; /** * Get template service statistics * * @returns Record<string, any> - Service statistics */ getTemplateServiceStats(): Record<string, any>; } //# sourceMappingURL=email.service.d.ts.map