2021-03-26 15:56:34 +01:00
|
|
|
const fetch = require("node-fetch")
|
2021-03-25 12:17:04 +01:00
|
|
|
const vm = require("vm")
|
|
|
|
|
|
|
|
class ScriptExecutor {
|
2021-03-26 15:56:34 +01:00
|
|
|
constructor(body) {
|
2021-06-18 19:07:51 +02:00
|
|
|
const code = `let fn = () => {\n${body.script}\n}; out = fn();`
|
|
|
|
this.script = new vm.Script(code)
|
2021-03-26 15:56:34 +01:00
|
|
|
this.context = vm.createContext(body.context)
|
|
|
|
this.context.fetch = fetch
|
2021-03-25 12:17:04 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
execute() {
|
2021-06-18 19:07:51 +02:00
|
|
|
this.script.runInContext(this.context)
|
|
|
|
return this.context.out
|
2021-03-25 12:17:04 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-05-04 10:55:14 +02:00
|
|
|
exports.execute = async function (ctx) {
|
2021-03-26 15:56:34 +01:00
|
|
|
const executor = new ScriptExecutor(ctx.request.body)
|
2021-03-25 12:17:04 +01:00
|
|
|
|
2021-05-11 18:49:26 +02:00
|
|
|
ctx.body = executor.execute()
|
|
|
|
}
|
|
|
|
|
2021-05-11 18:50:26 +02:00
|
|
|
exports.save = async function (ctx) {
|
2021-05-11 18:49:26 +02:00
|
|
|
ctx.throw(501, "Not currently implemented")
|
2021-03-25 12:17:04 +01:00
|
|
|
}
|