import { Request, Response, NextFunction } from "express"; import jwt from "jsonwebtoken"; import dotenv from "dotenv"; dotenv.config(); export interface AuthRequest extends Request { userId?: number; userEmail?: string; file?: Express.Multer.File; files?: Express.Multer.File[] | { [fieldname: string]: Express.Multer.File[] }; } export const authenticateToken = ( req: AuthRequest, res: Response, next: NextFunction ) => { const authHeader = req.headers["authorization"]; const token = authHeader && authHeader.split(" ")[1]; if (!token) { return res.status(401).json({ success: false, error: "No token provided" }); } const jwtSecret = process.env.JWT_SECRET || "your-secret-key-change-in-production"; jwt.verify(token, jwtSecret, (err: any, decoded: any) => { if (err) { return res.status(403).json({ success: false, error: "Invalid or expired token" }); } req.userId = decoded.userId; req.userEmail = decoded.email; next(); }); };