153 lines
8.6 KiB
JavaScript
153 lines
8.6 KiB
JavaScript
|
|
/**
|
||
|
|
* SMTP Client Logging Utilities
|
||
|
|
* Client-side logging utilities for SMTP operations
|
||
|
|
*/
|
||
|
|
import { logger } from '../../../../logger.js';
|
||
|
|
/**
|
||
|
|
* Log SMTP client connection events
|
||
|
|
*/
|
||
|
|
export function logConnection(event, options, data) {
|
||
|
|
const logData = {
|
||
|
|
component: 'smtp-client',
|
||
|
|
event,
|
||
|
|
host: options.host,
|
||
|
|
port: options.port,
|
||
|
|
secure: options.secure,
|
||
|
|
...data
|
||
|
|
};
|
||
|
|
switch (event) {
|
||
|
|
case 'connecting':
|
||
|
|
logger.info('SMTP client connecting', logData);
|
||
|
|
break;
|
||
|
|
case 'connected':
|
||
|
|
logger.info('SMTP client connected', logData);
|
||
|
|
break;
|
||
|
|
case 'disconnected':
|
||
|
|
logger.info('SMTP client disconnected', logData);
|
||
|
|
break;
|
||
|
|
case 'error':
|
||
|
|
logger.error('SMTP client connection error', logData);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
/**
|
||
|
|
* Log SMTP command execution
|
||
|
|
*/
|
||
|
|
export function logCommand(command, response, options, data) {
|
||
|
|
const logData = {
|
||
|
|
component: 'smtp-client',
|
||
|
|
command,
|
||
|
|
response,
|
||
|
|
host: options?.host,
|
||
|
|
port: options?.port,
|
||
|
|
...data
|
||
|
|
};
|
||
|
|
if (response && response.code >= 400) {
|
||
|
|
logger.warn('SMTP command failed', logData);
|
||
|
|
}
|
||
|
|
else {
|
||
|
|
logger.debug('SMTP command executed', logData);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
/**
|
||
|
|
* Log authentication events
|
||
|
|
*/
|
||
|
|
export function logAuthentication(event, method, options, data) {
|
||
|
|
const logData = {
|
||
|
|
component: 'smtp-client',
|
||
|
|
event: `auth_${event}`,
|
||
|
|
authMethod: method,
|
||
|
|
host: options.host,
|
||
|
|
port: options.port,
|
||
|
|
...data
|
||
|
|
};
|
||
|
|
switch (event) {
|
||
|
|
case 'start':
|
||
|
|
logger.debug('SMTP authentication started', logData);
|
||
|
|
break;
|
||
|
|
case 'success':
|
||
|
|
logger.info('SMTP authentication successful', logData);
|
||
|
|
break;
|
||
|
|
case 'failure':
|
||
|
|
logger.error('SMTP authentication failed', logData);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
/**
|
||
|
|
* Log TLS/STARTTLS events
|
||
|
|
*/
|
||
|
|
export function logTLS(event, options, data) {
|
||
|
|
const logData = {
|
||
|
|
component: 'smtp-client',
|
||
|
|
event,
|
||
|
|
host: options.host,
|
||
|
|
port: options.port,
|
||
|
|
...data
|
||
|
|
};
|
||
|
|
if (event.includes('failure')) {
|
||
|
|
logger.error('SMTP TLS operation failed', logData);
|
||
|
|
}
|
||
|
|
else {
|
||
|
|
logger.info('SMTP TLS operation', logData);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
/**
|
||
|
|
* Log email sending events
|
||
|
|
*/
|
||
|
|
export function logEmailSend(event, recipients, options, data) {
|
||
|
|
const logData = {
|
||
|
|
component: 'smtp-client',
|
||
|
|
event: `send_${event}`,
|
||
|
|
recipientCount: recipients.length,
|
||
|
|
recipients: recipients.slice(0, 5), // Only log first 5 recipients for privacy
|
||
|
|
host: options.host,
|
||
|
|
port: options.port,
|
||
|
|
...data
|
||
|
|
};
|
||
|
|
switch (event) {
|
||
|
|
case 'start':
|
||
|
|
logger.info('SMTP email send started', logData);
|
||
|
|
break;
|
||
|
|
case 'success':
|
||
|
|
logger.info('SMTP email send successful', logData);
|
||
|
|
break;
|
||
|
|
case 'failure':
|
||
|
|
logger.error('SMTP email send failed', logData);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
/**
|
||
|
|
* Log performance metrics
|
||
|
|
*/
|
||
|
|
export function logPerformance(operation, duration, options, data) {
|
||
|
|
const logData = {
|
||
|
|
component: 'smtp-client',
|
||
|
|
operation,
|
||
|
|
duration,
|
||
|
|
host: options.host,
|
||
|
|
port: options.port,
|
||
|
|
...data
|
||
|
|
};
|
||
|
|
if (duration > 10000) { // Log slow operations (>10s)
|
||
|
|
logger.warn('SMTP slow operation detected', logData);
|
||
|
|
}
|
||
|
|
else {
|
||
|
|
logger.debug('SMTP operation performance', logData);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
/**
|
||
|
|
* Log debug information (only when debug is enabled)
|
||
|
|
*/
|
||
|
|
export function logDebug(message, options, data) {
|
||
|
|
if (!options.debug) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
const logData = {
|
||
|
|
component: 'smtp-client-debug',
|
||
|
|
host: options.host,
|
||
|
|
port: options.port,
|
||
|
|
...data
|
||
|
|
};
|
||
|
|
logger.debug(`[SMTP Client Debug] ${message}`, logData);
|
||
|
|
}
|
||
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2luZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RzL21haWwvZGVsaXZlcnkvc210cGNsaWVudC91dGlscy9sb2dnaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQWlCL0M7O0dBRUc7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUMzQixLQUE0RCxFQUM1RCxPQUEyQixFQUMzQixJQUFrQztJQUVsQyxNQUFNLE9BQU8sR0FBdUI7UUFDbEMsU0FBUyxFQUFFLGFBQWE7UUFDeEIsS0FBSztRQUNMLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtRQUNsQixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7UUFDbEIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1FBQ3RCLEdBQUcsSUFBSTtLQUNSLENBQUM7SUFFRixRQUFRLEtBQUssRUFBRSxDQUFDO1FBQ2QsS0FBSyxZQUFZO1lBQ2YsTUFBTSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUMvQyxNQUFNO1FBQ1IsS0FBSyxXQUFXO1lBQ2QsTUFBTSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUM5QyxNQUFNO1FBQ1IsS0FBSyxjQUFjO1lBQ2pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDakQsTUFBTTtRQUNSLEtBQUssT0FBTztZQUNWLE1BQU0sQ0FBQyxLQUFLLENBQUMsOEJBQThCLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDdEQsTUFBTTtJQUNWLENBQUM7QUFDSCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUN4QixPQUFlLEVBQ2YsUUFBd0IsRUFDeEIsT0FBNEIsRUFDNUIsSUFBa0M7SUFFbEMsTUFBTSxPQUFPLEdBQXVCO1FB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
|