/** * In-Memory Session Store für SOS-Streaming * * POST /api/coach/sos-session speichert messages/locale hier, * GET /api/coach/sos-stream lädt sie per sessionId. * * TTL: 5 Minuten (Auto-Cleanup) */ type SosSessionData = { userId: string; messages: Array<{ role: "user" | "assistant"; content: string }>; locale: string; /** A/B-Test: client wählt LLM via Toggle. Default openrouter-sonnet. */ llmProvider?: string; createdAt: number; }; const sessions = new Map(); const SESSION_TTL = 5 * 60 * 1000; // 5min // Cleanup-Intervall: alle 2min alte Sessions löschen setInterval( () => { const now = Date.now(); for (const [id, data] of sessions.entries()) { if (now - data.createdAt > SESSION_TTL) { sessions.delete(id); } } }, 2 * 60 * 1000, ); export function setSosSession(sessionId: string, data: SosSessionData) { sessions.set(sessionId, data); } export function getSosSession(sessionId: string): SosSessionData | undefined { const data = sessions.get(sessionId); if (!data) return undefined; // TTL-Check if (Date.now() - data.createdAt > SESSION_TTL) { sessions.delete(sessionId); return undefined; } return data; } export function deleteSosSession(sessionId: string) { sessions.delete(sessionId); }