| const node = {} |
| const modules = 'child_process|fs|os|process|timers|util' |
| for (let m of modules.split`|`) node[m] = require(`node:${m}`) |
|
|
| const formatBytes = require('bytes'), |
| express = require('express'), |
| morgan = require('morgan'), |
| serveIndex = require('serve-index') |
|
|
| const limitSize = '69mb', |
| tmpDir = node.os.tmpdir(), |
| { env } = node.process, |
| PORT = env.SERVER_PORT || env.PORT || 7860 |
|
|
| const logger = (...args) => console.log( |
| new Date().toLocaleTimeString( |
| 'fr', { timeZone: 'Asia/Jakarta' } |
| ), |
| ...args |
| ) |
|
|
| const execPromise = node.util.promisify( |
| node.child_process.exec |
| ) |
|
|
| express() |
| .enable('trust proxy') |
| .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.json({ msg: 'goodbye world.' })) |
| .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) |