import { randomUUID } from "node:crypto";
import type { NextFunction, Request, Response } from "express";
import "./types.js"; // Import Request type augmentation
/**
* Request ID middleware
*
* Generates a unique UUID v4 for each request and:
* - Attaches it to req.requestId for downstream use
* - Sets X-Request-ID response header for client tracking
*
* @param req - Express request object
* @param res - Express response object
* @param next - Express next function
*
* @example
* app.use(requestIdMiddleware);
* app.get('/api/data', (req, res) => {
* console.log(`Request ID: ${req.requestId}`);
* res.json({ data: 'example' });
* });
*/
export function requestIdMiddleware(req: Request, res: Response, next: NextFunction): void {
// Generate UUID v4
const requestId = randomUUID();
// Attach to request object
req.requestId = requestId;
// Set response header
res.setHeader("X-Request-ID", requestId);
// Continue middleware chain
next();
}