import type { Middleware } from '../middlewareChain';
import type { WebSocketResponse, WebSocketInputWithModels, WebSocketRequestLoggerConfig } from './types';
import type { AmplifyModelType } from '../../queries/types';
/**
 * Create a WebSocket request logging middleware
 *
 * This middleware provides comprehensive logging for WebSocket requests and responses.
 * It captures connection details, message timing, and optionally message bodies while
 * applying sanitization to exclude sensitive information.
 *
 * **Logging Flow:**
 * 1. Sets up structured logging context with connection details
 * 2. Logs incoming request with event information
 * 3. Executes next middleware and measures duration
 * 4. Logs response information (if response is provided)
 * 5. Logs completion with total duration
 * 6. Clears logging context
 *
 * **Log Levels:**
 * - `info`: Request received and response sent
 * - `debug`: Request completion timing
 *
 * **Security Features:**
 * - Field exclusion for sensitive data
 * - Object depth limiting to prevent large logs
 * - JSON parsing safety with fallback handling
 * - Automatic context cleanup
 *
 * @template TTypes - Record of available Amplify model types
 * @template TSelected - Selected model types for this middleware chain
 * @template TOutput - Expected output type of the middleware chain
 * @param config - Configuration options for logging behavior
 * @returns Middleware function for WebSocket request logging
 *
 * @example
 * ```typescript
 * const requestLogger = createWebSocketRequestLogger({
 *   logMessageBody: true,  // This enables body logging
 *   excludeEventFields: ['authToken'], // Optional: exclude sensitive fields
 * });
 *
 * chain.use('logging', requestLogger);
 * ```
 *
 * @example
 * ```typescript
 * // Production logging - minimal message body logging
 * const productionLogger = createWebSocketRequestLogger({
 *   logMessageBody: false,
 *   excludeEventFields: ['body', 'headers'],
 *   defaultContext: { environment: 'production' },
 * });
 * ```
 *
 * @example
 * ```typescript
 * // Development logging - detailed logging with message bodies
 * const devLogger = createWebSocketRequestLogger({
 *   logMessageBody: true,
 *   maxDepth: 8,
 *   defaultContext: {
 *     environment: 'development',
 *     debug: true
 *   },
 * });
 * ```
 */
export declare function createWebSocketRequestLogger<TTypes extends Record<string, AmplifyModelType> = Record<string, AmplifyModelType>, TSelected extends keyof TTypes & string = keyof TTypes & string, TOutput = WebSocketResponse>(config?: WebSocketRequestLoggerConfig): Middleware<WebSocketInputWithModels<TTypes, TSelected>, TOutput>;
//# sourceMappingURL=WebSocketRequestLogger.d.ts.map