@454creative/easy-email
Version:
A framework-agnostic email service library for Node.js with observability and monitoring
106 lines • 3.33 kB
TypeScript
import { EmailEvent, ObservabilityConfig, EmailMetrics, AuditLog } from '../interfaces/observability.interface';
import { EmailOptions, EmailResponse, EmailProviderType } from '../interfaces/email-options.interface';
export declare class ObservabilityService {
private static instance;
private config;
private events;
private metrics;
private auditLogs;
private constructor();
static getInstance(config?: ObservabilityConfig): ObservabilityService;
private initializeMetrics;
/**
* Track email sending attempt
*/
trackEmailAttempt(options: EmailOptions, provider: EmailProviderType, _startTime: number): string;
/**
* Track email success
*/
trackEmailSuccess(eventId: string, response: EmailResponse, duration: number, provider: EmailProviderType): void;
/**
* Track email failure
*/
trackEmailFailure(eventId: string, error: any, duration: number, provider: EmailProviderType): void;
/**
* Track connection verification
*/
trackConnectionVerification(provider: EmailProviderType, success: boolean, duration?: number): void;
/**
* Track SES quota usage
*/
trackSesQuotaUsage(quotaData: {
max24HourSend: number;
sentLast24Hours: number;
maxSendRate: number;
}): void;
/**
* Track SES sending statistics
*/
trackSesStatistics(statsData: {
deliveryAttempts: number;
bounces: number;
complaints: number;
rejects: number;
}): void;
/**
* Track SES error with specific error type
*/
trackSesError(error: any, errorType: 'MessageRejected' | 'MailFromDomainNotVerified' | 'ConfigurationSetDoesNotExist' | 'TemplateDoesNotExist' | 'AccountSendingPaused' | 'SendingPaused' | 'MessageTooLarge' | 'InvalidParameterValue' | 'ValidationError' | 'ThrottlingException' | 'ServiceUnavailable' | 'InternalError' | 'NetworkError' | 'TimeoutError', duration: number): void;
/**
* Get current metrics
*/
getMetrics(): EmailMetrics;
/**
* Get SES-specific metrics
*/
getSesMetrics(): {
quotaUsage: number;
bounceRate: number;
complaintRate: number;
deliveryRate: number;
lastQuotaCheck?: string;
} | undefined;
/**
* Get metrics for a specific provider
*/
getProviderMetrics(provider: EmailProviderType): {
sent: number;
failed: number;
avgTime: number;
} | {
sent: number;
failed: number;
avgTime: number;
} | {
sent: number;
failed: number;
avgTime: number;
};
/**
* Get events within time range
*/
getEvents(startTime?: Date, endTime?: Date): EmailEvent[];
/**
* Get audit logs
*/
getAuditLogs(startTime?: Date, endTime?: Date): AuditLog[];
/**
* Clear all data (useful for testing)
*/
clearData(): void;
private sanitizeRecipients;
private updateMetrics;
private createAuditLog;
private logEvent;
/**
* Create email event with common properties
* @private
*/
private createEmailEvent;
/**
* Create connection verification event
* @private
*/
private createConnectionEvent;
}
//# sourceMappingURL=observability.service.d.ts.map