// middleware/requestContext.js /** * Request Context Middleware * * Extracts and attaches request context information (IP, user agent, etc.) * This should be the FIRST middleware in the chain */ function requestContext(req, res, next) { // Extract client IP (considering proxies) req.clientIp = req.ip || req.headers['x-forwarded-for']?.split(',')[0]?.trim() || req.headers['x-real-ip'] || req.connection?.remoteAddress || 'unknown'; // Extract user agent req.userAgent = req.headers['user-agent'] || 'unknown'; // Extract request ID for tracing (if not already set) req.requestId = req.headers['x-request-id'] || `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`; // Set request ID in response header res.setHeader('X-Request-Id', req.requestId); // Attach timestamp req.requestTimestamp = new Date(); next(); } export default requestContext;