UNPKG

@energica-city/shared-amplify-utils

Version:

Shared utilities for AWS Amplify projects

69 lines 2.72 kB
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