import { Request, Response } from "express";
export const cleanupEndpoint = (
req: Request,
res: Response,
activeSessions: Map<string, any>,
sessionServers: Map<string, any>
): void => {
const { sessionId, olderThan } = req.body;
let cleaned = 0;
const stopTransport = (id: string) => {
const server = sessionServers.get(id);
if (server && typeof server.stop === "function") {
try {
server.stop();
} catch (err) {
console.error(`Error stopping transport for session ${id}:`, err);
}
} else {
console.error(`No transport found for session ${id}`);
}
};
if (sessionId) {
if (activeSessions.has(sessionId)) {
try { stopTransport(sessionId) } catch (err) { console.error(err) }
activeSessions.delete(sessionId);
sessionServers.delete(sessionId);
cleaned = 1;
console.error(`Manually cleaned session: ${sessionId}`);
}
} else if (olderThan) {
const cutoff = Date.now() - (olderThan * 60 * 1000);
for (const [id, session] of activeSessions.entries()) {
if (session.lastActivity < cutoff) {
stopTransport(id);
activeSessions.delete(id);
sessionServers.delete(id);
cleaned++;
}
}
console.error(`Cleaned ${cleaned} sessions older than ${olderThan} minutes`);
} else {
const oneHourAgo = Date.now() - (60 * 60 * 1000);
for (const [id, session] of activeSessions.entries()) {
if (session.lastActivity < oneHourAgo) {
stopTransport(id);
activeSessions.delete(id);
sessionServers.delete(id);
cleaned++;
}
}
console.error(`Cleaned ${cleaned} stale sessions`);
}
res.json({
status: 'cleaned',
cleaned,
remaining: activeSessions.size,
timestamp: new Date().toISOString()
});
};