const { customAlphabet } = require("nanoid"); const codeAlphabet = "ABCDEFGHJKLMNPQRSTUVWXYZ23456789"; const makeCode = customAlphabet(codeAlphabet, 6); const makeId = customAlphabet( "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", 21 ); const rooms = new Map(); function genCode() { let c; do { c = makeCode(); } while (rooms.has(c)); return c; } function getRoom(code) { return rooms.get(String(code || "").toUpperCase()); } function setRoom(code, room) { rooms.set(code.toUpperCase(), room); } function deleteRoom(code) { rooms.delete(String(code || "").toUpperCase()); } function allRooms() { return rooms; } // Idle cleanup — drop rooms with no active sockets older than 60min setInterval(() => { const now = Date.now(); for (const [code, room] of rooms.entries()) { const active = room.players.some((p) => p.connected); if (!active && now - (room.lastActiveAt || 0) > 60 * 60 * 1000) { rooms.delete(code); } } }, 60 * 1000); module.exports = { genCode, getRoom, setRoom, deleteRoom, allRooms, makeId };