api / app.ts
pluviouse's picture
Update app.ts
e39190c verified
import { Elysia } from "elysia";
import { swagger } from "@elysiajs/swagger"
Bun.eval = (code: string) => {
const transpiler = new Bun.Transpiler({
loader: "ts"
});
return eval(transpiler.transformSync(`eval((${code}))`));
}
const app = new Elysia()
.use(swagger({
path : "/docs",
documentation: {
info: {
title : 'Pluvi API Documentation',
version: '1.0.0'
}
}
}))
.get("/", () => "Hello, Elysia!")
.get("/items/:id", ({ params }) => `Item ID: ${params.id}`)
.get("/eval", async ({ query, error }) => {
const { code } = query
if (!code) return error(400, "missing code")
const returned = await Bun.eval(`(async () => {
${code}
})
`)
return returned()
})
.get('/exec', async function* ({ query, error }) {
if (!query.cmd) return error(400, "required query 'cmd'")
const proc = Bun.spawn({
cmd: ["bash", "-c", query.cmd],
stderr: "pipe",
});
const err = await new Response(proc.stderr).text();
if (err) yield err
const out = await new Response(proc.stdout).text();
if (out) yield out
yield `\n\n\`process exited with code ${proc.signalCode}\``
})
.ws('/realtime', {
message(ws, message) {
console.log(message)
ws.send('got:' + message)
}
})
.listen(process.env.PORT);
console.log(`🦊 Elysia is running at http://localhost:7680`);