import config from '../config'; interface Session { id: string; createdAt: Date; lastAccessed: Date; data: Record; } interface TranscriptionData { text: string; timestamp: Date; metadata?: Record; } interface SonarQuery { query: string; timestamp: Date; response?: any; } interface WhatsAppSession { phoneNumber: string; lastInteraction: Date; context?: Record; } class TempStore { private sessions: Map; private transcriptions: Map; private sonarQueries: Map; private whatsappSessions: Map; constructor() { this.sessions = new Map(); this.transcriptions = new Map(); this.sonarQueries = new Map(); this.whatsappSessions = new Map(); // Start cleanup interval setInterval(() => this.cleanup(), 5 * 60 * 1000); // Run every 5 minutes } // Session Management saveSession(id: string, data: Record): void { this.sessions.set(id, { id, createdAt: new Date(), lastAccessed: new Date(), data, }); } getSession(id: string): Record | null { const session = this.sessions.get(id); if (!session) return null; session.lastAccessed = new Date(); return session.data; } deleteSession(id: string): boolean { return this.sessions.delete(id); } // Transcription Management saveTranscription(id: string, text: string, metadata?: Record): void { this.transcriptions.set(id, { text, timestamp: new Date(), metadata, }); } getTranscription(id: string): TranscriptionData | null { return this.transcriptions.get(id) || null; } // Sonar Query Management saveSonarQuery(id: string, query: string, response?: any): void { this.sonarQueries.set(id, { query, timestamp: new Date(), response, }); } getSonarQuery(id: string): SonarQuery | null { return this.sonarQueries.get(id) || null; } // WhatsApp Session Management saveWhatsAppSession(phoneNumber: string, context?: Record): void { this.whatsappSessions.set(phoneNumber, { phoneNumber, lastInteraction: new Date(), context, }); } getWhatsAppSession(phoneNumber: string): WhatsAppSession | null { return this.whatsappSessions.get(phoneNumber) || null; } // Cleanup old data private cleanup(): void { const now = new Date(); const timeoutMs = config.sessionTimeout * 60 * 1000; // Cleanup sessions for (const [id, session] of this.sessions) { if (now.getTime() - session.lastAccessed.getTime() > timeoutMs) { this.sessions.delete(id); } } // Cleanup transcriptions older than 24 hours for (const [id, transcription] of this.transcriptions) { if (now.getTime() - transcription.timestamp.getTime() > 24 * 60 * 60 * 1000) { this.transcriptions.delete(id); } } // Cleanup Sonar queries older than 1 hour for (const [id, query] of this.sonarQueries) { if (now.getTime() - query.timestamp.getTime() > 60 * 60 * 1000) { this.sonarQueries.delete(id); } } // Cleanup WhatsApp sessions for (const [phoneNumber, session] of this.whatsappSessions) { if (now.getTime() - session.lastInteraction.getTime() > timeoutMs) { this.whatsappSessions.delete(phoneNumber); } } } } // Export a singleton instance export const store = new TempStore();