import express from 'express'; import module from './modules/index.js'; import SourceRcon from '@hellz.fr/sourcecon'; const app = express(); app.get('/', (req, res) => { res.send('use /metrics?ip=<srcds ip>&port=<srcds port>&rconPassword=<rcon password>&game=<game>&sm=<boolean>&meta=<boolean>sp=<boolean> to get data'); }); app.get('/metrics', async (req, res) => { const config = { ip: req.query.ip, port: req.query.port, game: req.query.game, rconPassword: req.query.rconPassword, }; config.metamod = req.query.metamod === 'true' || false; config.sourcemod = req.query.sourcemod === 'true' || false; config.sourcepython = req.query.sourcepython === 'true' || false; config.tags = req.query.tags || []; if ( config.ip == null || config.port == null || config.rconPassword == null || config.game == null ) { res.send('Missing parameter'); return; } if (!['csgo', 'cstrike', 'gmod', 'cs2'].includes(config.game)) { res.send('Incorrect game value, currently supported games are : csgo, gmod, cstrike'); return; } try { const client = new SourceRcon.default(config.ip, Number.parseInt(config.port)); await client.connect(); await client.auth(config.rconPassword); const response = await module.request(config, client); await module.send(config, response, res); } catch (e) { if (e.code === 'EHOSTUNREACH') { console.error(`Unreachable host : ${e.address}:${e.port}`); } else { console.error(e); } await module.send(config, null, res, true); } }); app.listen(9591);