Add environment object to function context and return it back to caller
This commit is contained in:
27
server.js
27
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);
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user