import { Request, Response, NextFunction } from 'express'; import { verifyToken } from '../services/AuthService'; import { AppError } from './errorHandler'; export interface AuthRequest extends Request { userId?: string; userEmail?: string; } export function authMiddleware(req: AuthRequest, res: Response, next: NextFunction) { const authHeader = req.headers.authorization; if (!authHeader) { return res.status(401).json({ error: { status: 401, message: 'Missing authorization header', }, }); } const parts = authHeader.split(' '); if (parts.length !== 2 || parts[0] !== 'Bearer') { return res.status(401).json({ error: { status: 401, message: 'Invalid authorization header format', }, }); } const token = parts[1]; try { const payload = verifyToken(token); req.userId = payload.userId; next(); } catch (error: any) { return res.status(401).json({ error: { status: 401, message: 'Invalid or expired token', }, }); } } export function optionalAuthMiddleware(req: AuthRequest, res: Response, next: NextFunction) { const authHeader = req.headers.authorization; if (authHeader) { const parts = authHeader.split(' '); if (parts.length === 2 && parts[0] === 'Bearer') { const token = parts[1]; try { const payload = verifyToken(token); req.userId = payload.userId; } catch (error) { // Silently fail - continue without authentication } } } next(); }