/** * MCP-safe logger that avoids writing to stdout/stderr during protocol communication * * In MCP servers, stdout and stderr are reserved for JSON-RPC protocol messages. * Any non-protocol output will cause "Unexpected token" errors in the MCP client. * * This logger: * - Writes to stderr ONLY during server initialization (before MCP connection) * - Stores all logs in memory during runtime * - Provides methods to retrieve logs via MCP tools if needed */ import { ILogger, LogEntry } from '../types/ILogger.js'; declare class MCPLogger implements ILogger { private logs; private isMCPConnected; private minLevel; private static readonly LEVEL_ORDER; private logListener?; addLogListener(fn: (entry: LogEntry) => void): () => void; private static readonly MAX_DEPTH; private static readonly EXACT_MATCH_PATTERNS; private static readonly SUBSTRING_PATTERNS; private static readonly EXACT_MATCH_REGEX; private static readonly SUBSTRING_REGEX; private static readonly MESSAGE_SENSITIVE_PATTERNS; /** * Call this after MCP connection is established to stop console output */ setMCPConnected(): void; /** * Set minimum log level for console output. * Entries below this level are still stored in memory but not printed. */ setMinLevel(level: 'debug' | 'info' | 'warn' | 'error'): void; /** * Check if a field name contains sensitive patterns * Uses both exact matching and substring matching for better precision * @param fieldName - The field name to check * @returns true if the field name matches sensitive patterns */ private isSensitiveField; /** * Safely assign a value, ensuring sensitive data is never exposed * This function makes it explicit to CodeQL that sensitive values are replaced * @param key - The object key * @param value - The value to potentially sanitize * @param depth - Current recursion depth for performance protection * @param seen - Set of seen objects to prevent circular references * @returns Safe value that can be logged */ private safeAssign; /** * Sanitize an object or array recursively with performance optimizations * @param obj - Object or array to sanitize * @param depth - Current recursion depth (defaults to 0) * @param seen - Set of seen objects to detect circular references * @returns Sanitized copy with sensitive fields redacted */ private sanitizeObject; /** * Sanitize sensitive data before logging * Security fix: Prevents exposure of OAuth tokens, API keys, passwords, etc. * @param data - Data to sanitize (can be any type) * @returns Sanitized copy with sensitive fields replaced with '[REDACTED]' */ private sanitizeData; /** * Sanitize sensitive information from log messages * Security fix: Prevents exposure of credentials that may be embedded in message strings * @param message - The log message to sanitize * @returns Sanitized message with sensitive data replaced with '[REDACTED]' */ private sanitizeMessage; /** * Internal logging method */ private log; debug(message: string, data?: any): void; info(message: string, data?: any): void; warn(message: string, data?: any): void; error(message: string, data?: any): void; /** * Get recent logs (for MCP tools to retrieve) */ getLogs(count?: number, level?: LogEntry['level']): LogEntry[]; /** * Clear logs */ clearLogs(): void; } export { MCPLogger }; export declare const logger: MCPLogger; //# sourceMappingURL=logger.d.ts.map