import { Request, Response, NextFunction } from 'express'; import { languageService } from '../services/languageService'; declare global { namespace Express { interface Request { sessionId?: string; language?: { code: string; code3: string; name: string; confidence: number; }; } } } export const languageMiddleware = async ( req: Request, res: Response, next: NextFunction ) => { try { // Generate or get session ID from headers or cookies const sessionId = req.headers['x-session-id'] as string || req.cookies?.sessionId || `session_${Date.now()}-${Math.random().toString(36).substr(2, 9)}`; // Add session ID to request req.sessionId = sessionId; // Try to get language preference const languagePreference = languageService.getLanguagePreference(sessionId); if (languagePreference) { req.language = languagePreference; // Set response header for client reference res.setHeader('X-Detected-Language', languagePreference.code); return next(); } // If no stored preference, try to detect from request if (req.body?.text) { // Detect from text in request body const detected = await languageService.detectFromText(req.body.text, sessionId); req.language = detected; res.setHeader('X-Detected-Language', detected.code); } else { // Default to English if no text to detect from req.language = { code: 'en', code3: 'eng', name: 'English', confidence: 1.0, }; res.setHeader('X-Detected-Language', 'en'); } // Set session ID header for client to store res.setHeader('X-Session-ID', sessionId); next(); } catch (error) { console.error('Error in language middleware:', error); // Don't fail the request on language detection error next(); } };