From 0ce54f112f1d611cbe536129cf72934be899280f Mon Sep 17 00:00:00 2001 From: Peter Stockings Date: Mon, 18 Dec 2023 14:09:39 +1100 Subject: [PATCH] Add environment object to function context and return it back to caller --- server.js | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/server.js b/server.js index b465f88..c5158a2 100644 --- a/server.js +++ b/server.js @@ -19,7 +19,12 @@ app.use((req, res, next) => { const TIMEOUT_MS = 5000; // Set timeout to 5000 milliseconds (5 seconds) -async function executeUserCode(code, requestObject, timeout = TIMEOUT_MS) { +async function executeUserCode( + code, + requestObject, + environment = {}, + timeout = TIMEOUT_MS +) { const logs = []; const States = { @@ -90,16 +95,18 @@ async function executeUserCode(code, requestObject, timeout = TIMEOUT_MS) { }, }); - const Result = (state, result) => { + const Result = (state, result, environment) => { console.log(`Status: ${state}`); console.log(`Result: ${JSON.stringify(result, null, 2)}`); console.log(`Logs: ${JSON.stringify(logs, null, 2)}`); + console.log(`Environment (post): ${JSON.stringify(environment, null, 2)}`); console.log(`\n`); return { state, result, logs, + environment, }; }; @@ -125,6 +132,7 @@ async function executeUserCode(code, requestObject, timeout = TIMEOUT_MS) { }, }, requestObject, + environment, HTTP_STATUS_CODES, Response, JsonResponse, @@ -143,29 +151,32 @@ async function executeUserCode(code, requestObject, timeout = TIMEOUT_MS) { console.log(`Function: ${code}`); let requestObjectString = JSON.stringify(requestObject, null, 2); console.log(`Request: ${requestObjectString}`); + console.log( + `Environment (pre): ${JSON.stringify(environment, null, 2)})` + ); // Call the user function with request object let result = await userFunction(requestObject); - return Result(States.SUCCESS, result); + return Result(States.SUCCESS, result, environment); } else { - return Result(States.NOT_A_FUNCTION, null); + return Result(States.NOT_A_FUNCTION, null, environment); } } catch (err) { if (err.message === "Script execution timed out.") { - return Result(States.TIMEOUT, null); + return Result(States.TIMEOUT, null, environment); } else { - return Result(States.SCRIPT_ERROR, err.message || err); + return Result(States.SCRIPT_ERROR, err.message || err, environment); } } } app.post("/execute", async (req, res) => { - const { code, request } = req.body; + const { code, request, environment } = req.body; const timeout = req.query.timeout || TIMEOUT_MS; - const result = await executeUserCode(code, request, timeout); + const result = await executeUserCode(code, request, environment, timeout); res.send(result); });