const node = {}, modules = 'child_process|fs|os|process|timers|util' for (let m of modules.split`|`) node[m] = require(`node:${m}`) const prettyBytes = require('bytes'), express = require('express'), morgan = require('morgan'), { default: prettyMs } = require('pretty-ms'), serveIndex = require('serve-index') const limitSize = '69mb', tmpDir = node.os.tmpdir(), { env } = node.process, PORT = env.SERVER_PORT || env.PORT || 7860, timeZone = env.TZ || 'Asia/Jakarta' const execPromise = node.util.promisify( node.child_process.exec ), formatBytes = (val) => prettyBytes(val, { unitSeparator: ' ' }), isNumber = (val) => typeof val === 'number', logger = (...args) => console.log( new Date().toLocaleTimeString('fr', { timeZone }), ...args ), transformObj = (obj, cb) => JSON.parse( JSON.stringify( obj, (key, val) => cb(key, val) ? formatBytes(val) : val ).replace(/_(\w)/g, (_, g) => g.toUpperCase()) ), getServerStats = () => { const proc = node.process const stats = {} stats.uptime = prettyMs(proc.uptime() * 1e3) stats.osUptime = prettyMs(node.os.uptime() * 1e3) const report = proc.report?.getReport?.() if (report) Object.assign(stats, { getReport: report.header, javascriptHeap: transformObj( report.javascriptHeap, (k, v) => !/(ContextCount|Garbage)/i.test(k) && isNumber(v) ), resourceUsage: transformObj( report.resourceUsage, (k, v) => !/(Percent|IO|reads|write)/i.test(k) && isNumber(v) ), uvthreadResourceUsage: report.uvthreadResourceUsage }) const memUsage = proc.memoryUsage() stats.memoryUsage = {} for (let [k, v] of Object.entries(memUsage)) stats.memoryUsage[k] = formatBytes(v) return stats } express() .enable('trust proxy') .set('etag', false) .set('json spaces', 2) .use(express.json({ limit: limitSize })) .use(express.urlencoded({ extended: true, limit: limitSize })) .use(morgan('dev')) .use( tmpDir, express.static(tmpDir), serveIndex(tmpDir, { hidden: true, icons: true }) ) .all('/', (_, res) => { res.set('Cache-Control', 'no-store, no-cache, must-revalidate, proxy-revalidate') res.set('Pragma', 'no-cache') res.set('Expires', '0') res.json(getServerStats()) }) .post('/eval', async (req, res) => { let code = req.body.code, o code = `(async function MengEval() { ${code} })()` try { o = await eval(code) } catch (e) { o = e } finally { res.send(node.util.format(o)) } }) .listen(PORT, () => logger('Running at port', PORT))