Add environment object to function context and return it back to caller

This commit is contained in:
Peter Stockings
2023-12-18 14:09:39 +11:00
parent ab04b77526
commit 0ce54f112f

View File

@@ -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);
});