import { NextFunction, Request, Response } from 'express'; import { validate as validateUuid, version as uuidVersion, v4 as uuidv4 } from 'uuid'; export function RequestIdMiddleware( request: Request & { requestId?: string; startTime?: bigint }, response: Response, next: NextFunction, ) { const incomingRequestId = request.get('x-request-id'); const requestId = incomingRequestId && validateUuid(incomingRequestId) && uuidVersion(incomingRequestId) === 4 ? incomingRequestId : uuidv4(); request.requestId = requestId; request.startTime = process.hrtime.bigint(); response.setHeader('X-Request-Id', requestId); next(); }