242 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			242 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| /**
 | |
|  * SMTP Client Interfaces and Types
 | |
|  * All interface definitions for the modular SMTP client
 | |
|  */
 | |
| 
 | |
| import type * as tls from 'node:tls';
 | |
| import type * as net from 'node:net';
 | |
| import type { Email } from '../../core/classes.email.ts';
 | |
| 
 | |
| /**
 | |
|  * SMTP client connection options
 | |
|  */
 | |
| export interface ISmtpClientOptions {
 | |
|   /** Hostname of the SMTP server */
 | |
|   host: string;
 | |
|   
 | |
|   /** Port to connect to */
 | |
|   port: number;
 | |
|   
 | |
|   /** Whether to use TLS for the connection */
 | |
|   secure?: boolean;
 | |
|   
 | |
|   /** Connection timeout in milliseconds */
 | |
|   connectionTimeout?: number;
 | |
|   
 | |
|   /** Socket timeout in milliseconds */
 | |
|   socketTimeout?: number;
 | |
|   
 | |
|   /** Domain name for EHLO command */
 | |
|   domain?: string;
 | |
|   
 | |
|   /** Authentication options */
 | |
|   auth?: ISmtpAuthOptions;
 | |
|   
 | |
|   /** TLS options */
 | |
|   tls?: tls.ConnectionOptions;
 | |
|   
 | |
|   /** Maximum number of connections in pool */
 | |
|   pool?: boolean;
 | |
|   maxConnections?: number;
 | |
|   maxMessages?: number;
 | |
|   
 | |
|   /** Enable debug logging */
 | |
|   debug?: boolean;
 | |
|   
 | |
|   /** Proxy settings */
 | |
|   proxy?: string;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Authentication options for SMTP
 | |
|  */
 | |
| export interface ISmtpAuthOptions {
 | |
|   /** Username */
 | |
|   user?: string;
 | |
|   
 | |
|   /** Password */
 | |
|   pass?: string;
 | |
|   
 | |
|   /** OAuth2 settings */
 | |
|   oauth2?: IOAuth2Options;
 | |
|   
 | |
|   /** Authentication method preference */
 | |
|   method?: 'PLAIN' | 'LOGIN' | 'OAUTH2' | 'AUTO';
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * OAuth2 authentication options
 | |
|  */
 | |
| export interface IOAuth2Options {
 | |
|   /** OAuth2 user identifier */
 | |
|   user: string;
 | |
|   
 | |
|   /** OAuth2 client ID */
 | |
|   clientId: string;
 | |
|   
 | |
|   /** OAuth2 client secret */
 | |
|   clientSecret: string;
 | |
|   
 | |
|   /** OAuth2 refresh token */
 | |
|   refreshToken: string;
 | |
|   
 | |
|   /** OAuth2 access token */
 | |
|   accessToken?: string;
 | |
|   
 | |
|   /** Token expiry time */
 | |
|   expires?: number;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Result of an email send operation
 | |
|  */
 | |
| export interface ISmtpSendResult {
 | |
|   /** Whether the send was successful */
 | |
|   success: boolean;
 | |
|   
 | |
|   /** Message ID from server */
 | |
|   messageId?: string;
 | |
|   
 | |
|   /** List of accepted recipients */
 | |
|   acceptedRecipients: string[];
 | |
|   
 | |
|   /** List of rejected recipients */
 | |
|   rejectedRecipients: string[];
 | |
|   
 | |
|   /** Error information if failed */
 | |
|   error?: Error;
 | |
|   
 | |
|   /** Server response */
 | |
|   response?: string;
 | |
|   
 | |
|   /** Envelope information */
 | |
|   envelope?: ISmtpEnvelope;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * SMTP envelope information
 | |
|  */
 | |
| export interface ISmtpEnvelope {
 | |
|   /** Sender address */
 | |
|   from: string;
 | |
|   
 | |
|   /** Recipient addresses */
 | |
|   to: string[];
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Connection pool status
 | |
|  */
 | |
| export interface IConnectionPoolStatus {
 | |
|   /** Total connections in pool */
 | |
|   total: number;
 | |
|   
 | |
|   /** Active connections */
 | |
|   active: number;
 | |
|   
 | |
|   /** Idle connections */
 | |
|   idle: number;
 | |
|   
 | |
|   /** Pending connection requests */
 | |
|   pending: number;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * SMTP command response
 | |
|  */
 | |
| export interface ISmtpResponse {
 | |
|   /** Response code */
 | |
|   code: number;
 | |
|   
 | |
|   /** Response message */
 | |
|   message: string;
 | |
|   
 | |
|   /** Enhanced status code */
 | |
|   enhancedCode?: string;
 | |
|   
 | |
|   /** Raw response */
 | |
|   raw: string;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Connection state
 | |
|  */
 | |
| export enum ConnectionState {
 | |
|   DISCONNECTED = 'disconnected',
 | |
|   CONNECTING = 'connecting',
 | |
|   CONNECTED = 'connected',
 | |
|   AUTHENTICATED = 'authenticated',
 | |
|   READY = 'ready',
 | |
|   BUSY = 'busy',
 | |
|   CLOSING = 'closing',
 | |
|   ERROR = 'error'
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * SMTP capabilities
 | |
|  */
 | |
| export interface ISmtpCapabilities {
 | |
|   /** Supported extensions */
 | |
|   extensions: Set<string>;
 | |
|   
 | |
|   /** Maximum message size */
 | |
|   maxSize?: number;
 | |
|   
 | |
|   /** Supported authentication methods */
 | |
|   authMethods: Set<string>;
 | |
|   
 | |
|   /** Support for pipelining */
 | |
|   pipelining: boolean;
 | |
|   
 | |
|   /** Support for STARTTLS */
 | |
|   starttls: boolean;
 | |
|   
 | |
|   /** Support for 8BITMIME */
 | |
|   eightBitMime: boolean;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Internal connection interface
 | |
|  */
 | |
| export interface ISmtpConnection {
 | |
|   /** Socket connection */
 | |
|   socket: net.Socket | tls.TLSSocket;
 | |
|   
 | |
|   /** Connection state */
 | |
|   state: ConnectionState;
 | |
|   
 | |
|   /** Server capabilities */
 | |
|   capabilities?: ISmtpCapabilities;
 | |
|   
 | |
|   /** Connection options */
 | |
|   options: ISmtpClientOptions;
 | |
|   
 | |
|   /** Whether connection is secure */
 | |
|   secure: boolean;
 | |
|   
 | |
|   /** Connection creation time */
 | |
|   createdAt: Date;
 | |
|   
 | |
|   /** Last activity time */
 | |
|   lastActivity: Date;
 | |
|   
 | |
|   /** Number of messages sent */
 | |
|   messageCount: number;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Error context for detailed error reporting
 | |
|  */
 | |
| export interface ISmtpErrorContext {
 | |
|   /** Command that caused the error */
 | |
|   command?: string;
 | |
|   
 | |
|   /** Server response */
 | |
|   response?: ISmtpResponse;
 | |
|   
 | |
|   /** Connection state */
 | |
|   connectionState?: ConnectionState;
 | |
|   
 | |
|   /** Additional context data */
 | |
|   data?: Record<string, any>;
 | |
| } |