diff options
Diffstat (limited to 'src/index.ts')
| -rw-r--r-- | src/index.ts | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..68cdadf --- /dev/null +++ b/src/index.ts @@ -0,0 +1,34 @@ +import { App } from "@tinyhttp/app" +import { logger } from "@tinyhttp/logger" +import { json } from "milliparsec" +import { promisify } from "util" +import { exec as cb_exec } from "child_process" +import tmp from "tmp" +import fs from "fs" + +const exec = promisify(cb_exec) +const app = new App() + +const PORT = Number(process.env.PORT) || 3000 +console.log(`Serving API on port ${PORT}`) + +app + .use(logger({ + timestamp: { format: "YYYY-MM-DDTHH:mm:ssZ" }, + })) + .use(json()) + .post("/submit", async (req, res) => { + if (!req.body || !req.body.source) { + return res.sendStatus(400) + } + + const { name: sourceFile } = tmp.fileSync() + fs.writeFileSync(sourceFile, req.body.source) + + const cmd = `./interpreter ${sourceFile}` + const result = await exec(cmd) + fs.rmSync(sourceFile) + + res.send({ result }) + }) + .listen(PORT) |
