@energica-city/shared-amplify-utils
Version:
Shared utilities for AWS Amplify projects
69 lines • 2.72 kB
TypeScript
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