File size: 1,565 Bytes
fa8c6e6
93db1e3
42cedcf
e39190c
 
 
 
 
 
 
f32db6c
 
fa8c6e6
34a79b6
fa8c6e6
 
2989aa8
fa8c6e6
 
 
 
f32db6c
e60f600
fb2bfb5
814e02b
 
e39190c
 
 
 
 
814e02b
e60f600
e620dbd
f3a31b3
e620dbd
 
f3a31b3
b9a1c37
e620dbd
 
 
 
90e16c2
d9f570b
 
 
b49dc83
d9f570b
 
 
f32db6c
 
42cedcf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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`);