{
  "version": 3,
  "sources": ["../src-backend/api.ts"],
  "sourcesContent": ["import { matchMaker } from '@colyseus/core';\n\nimport express from 'express';\nimport { OSUtils } from 'node-os-utils';\n\nimport type { MonitorOptions } from './index.js';\n\nconst osutils = new OSUtils();\n\nconst UNAVAILABLE_ROOM_ERROR = \"@colyseus/monitor: room $roomId is not available anymore.\";\n\nexport function getAPI (opts: Partial<MonitorOptions>): express.Router {\n    const api = express.Router();\n\n    api.get(\"/\", async (req: express.Request, res: express.Response) => {\n        try {\n            const rooms: any[] = await matchMaker.query({});\n            const columns = opts.columns || ['roomId', 'name', 'clients', 'maxClients', 'locked', 'elapsedTime'];\n\n            // extend columns to expose \"publicAddress\", if present\n            if (!opts.columns && rooms[0] && rooms[0].publicAddress !== undefined) {\n                columns.push(\"publicAddress\");\n            }\n\n            let connections: number = 0;\n\n            const cpuUsage = await osutils.cpu.usage();\n            const cpu = (cpuUsage.success) ? cpuUsage.data : NaN;\n\n            const memoryInfo = await osutils.memory.info();\n            const totalMemMb = (memoryInfo.success) ? memoryInfo.data.total?.toMB() : NaN;\n            const usedMemMb = (memoryInfo.success) ? memoryInfo.data.used?.toMB() : NaN;\n\n            res.json({\n                columns,\n                rooms: rooms.map(room => {\n                    const data = JSON.parse(JSON.stringify(room));\n\n                    connections += room.clients;\n\n                    // additional data\n                    data.locked = room.locked || false;\n                    data.private = room.private;\n\n                    data.maxClients = `${room.maxClients}`;\n\n                    data.elapsedTime = Date.now() - new Date(room.createdAt).getTime();\n                    return data;\n                }),\n\n                connections,\n                cpu,\n                memory: {\n                    totalMemMb,\n                    usedMemMb \n                },\n            });\n        } catch (e: any) {\n            const message = e.message;\n            console.error(message);\n            res.status(500);\n            res.json({ message });\n        }\n    });\n\n    api.get(\"/room\", async (req: express.Request, res: express.Response) => {\n        const roomId = req.query.roomId as string;\n        try {\n            const inspectData = await matchMaker.remoteRoomCall(roomId, \"getInspectData\");\n            res.json(inspectData);\n        } catch (e) {\n            const message = UNAVAILABLE_ROOM_ERROR.replace(\"$roomId\", roomId);\n            res.status(500);\n            res.json({ message });\n        }\n    });\n\n    api.get(\"/room/call\", async (req: express.Request, res: express.Response) => {\n        const roomId = req.query.roomId as string;\n        const method = req.query.method as string;\n        const args = JSON.parse(req.query.args as string);\n\n        try {\n            const data = await matchMaker.remoteRoomCall(roomId, method, args);\n            res.json(data ?? {});\n        } catch (e) {\n            const message = UNAVAILABLE_ROOM_ERROR.replace(\"$roomId\", roomId);\n            res.status(500);\n            res.json({ message });\n        }\n    });\n\n    return api;\n}\n"],
  "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAA2B;AAE3B,qBAAoB;AACpB,2BAAwB;AAIxB,IAAM,UAAU,IAAI,6BAAQ;AAE5B,IAAM,yBAAyB;AAExB,SAAS,OAAQ,MAA+C;AACnE,QAAM,MAAM,eAAAA,QAAQ,OAAO;AAE3B,MAAI,IAAI,KAAK,OAAO,KAAsB,QAA0B;AAdxE;AAeQ,QAAI;AACA,YAAM,QAAe,MAAM,uBAAW,MAAM,CAAC,CAAC;AAC9C,YAAM,UAAU,KAAK,WAAW,CAAC,UAAU,QAAQ,WAAW,cAAc,UAAU,aAAa;AAGnG,UAAI,CAAC,KAAK,WAAW,MAAM,CAAC,KAAK,MAAM,CAAC,EAAE,kBAAkB,QAAW;AACnE,gBAAQ,KAAK,eAAe;AAAA,MAChC;AAEA,UAAI,cAAsB;AAE1B,YAAM,WAAW,MAAM,QAAQ,IAAI,MAAM;AACzC,YAAM,MAAO,SAAS,UAAW,SAAS,OAAO;AAEjD,YAAM,aAAa,MAAM,QAAQ,OAAO,KAAK;AAC7C,YAAM,aAAc,WAAW,WAAW,gBAAW,KAAK,UAAhB,mBAAuB,SAAS;AAC1E,YAAM,YAAa,WAAW,WAAW,gBAAW,KAAK,SAAhB,mBAAsB,SAAS;AAExE,UAAI,KAAK;AAAA,QACL;AAAA,QACA,OAAO,MAAM,IAAI,UAAQ;AACrB,gBAAM,OAAO,KAAK,MAAM,KAAK,UAAU,IAAI,CAAC;AAE5C,yBAAe,KAAK;AAGpB,eAAK,SAAS,KAAK,UAAU;AAC7B,eAAK,UAAU,KAAK;AAEpB,eAAK,aAAa,GAAG,KAAK,UAAU;AAEpC,eAAK,cAAc,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,QAAQ;AACjE,iBAAO;AAAA,QACX,CAAC;AAAA,QAED;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,UACJ;AAAA,UACA;AAAA,QACJ;AAAA,MACJ,CAAC;AAAA,IACL,SAAS,GAAQ;AACb,YAAM,UAAU,EAAE;AAClB,cAAQ,MAAM,OAAO;AACrB,UAAI,OAAO,GAAG;AACd,UAAI,KAAK,EAAE,QAAQ,CAAC;AAAA,IACxB;AAAA,EACJ,CAAC;AAED,MAAI,IAAI,SAAS,OAAO,KAAsB,QAA0B;AACpE,UAAM,SAAS,IAAI,MAAM;AACzB,QAAI;AACA,YAAM,cAAc,MAAM,uBAAW,eAAe,QAAQ,gBAAgB;AAC5E,UAAI,KAAK,WAAW;AAAA,IACxB,SAAS,GAAG;AACR,YAAM,UAAU,uBAAuB,QAAQ,WAAW,MAAM;AAChE,UAAI,OAAO,GAAG;AACd,UAAI,KAAK,EAAE,QAAQ,CAAC;AAAA,IACxB;AAAA,EACJ,CAAC;AAED,MAAI,IAAI,cAAc,OAAO,KAAsB,QAA0B;AACzE,UAAM,SAAS,IAAI,MAAM;AACzB,UAAM,SAAS,IAAI,MAAM;AACzB,UAAM,OAAO,KAAK,MAAM,IAAI,MAAM,IAAc;AAEhD,QAAI;AACA,YAAM,OAAO,MAAM,uBAAW,eAAe,QAAQ,QAAQ,IAAI;AACjE,UAAI,KAAK,sBAAQ,CAAC,CAAC;AAAA,IACvB,SAAS,GAAG;AACR,YAAM,UAAU,uBAAuB,QAAQ,WAAW,MAAM;AAChE,UAAI,OAAO,GAAG;AACd,UAAI,KAAK,EAAE,QAAQ,CAAC;AAAA,IACxB;AAAA,EACJ,CAAC;AAED,SAAO;AACX;",
  "names": ["express"]
}
