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)
|
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 logs = [];
|
||||||
|
|
||||||
const States = {
|
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(`Status: ${state}`);
|
||||||
console.log(`Result: ${JSON.stringify(result, null, 2)}`);
|
console.log(`Result: ${JSON.stringify(result, null, 2)}`);
|
||||||
console.log(`Logs: ${JSON.stringify(logs, null, 2)}`);
|
console.log(`Logs: ${JSON.stringify(logs, null, 2)}`);
|
||||||
|
console.log(`Environment (post): ${JSON.stringify(environment, null, 2)}`);
|
||||||
console.log(`\n`);
|
console.log(`\n`);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
state,
|
state,
|
||||||
result,
|
result,
|
||||||
logs,
|
logs,
|
||||||
|
environment,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -125,6 +132,7 @@ async function executeUserCode(code, requestObject, timeout = TIMEOUT_MS) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
requestObject,
|
requestObject,
|
||||||
|
environment,
|
||||||
HTTP_STATUS_CODES,
|
HTTP_STATUS_CODES,
|
||||||
Response,
|
Response,
|
||||||
JsonResponse,
|
JsonResponse,
|
||||||
@@ -143,29 +151,32 @@ async function executeUserCode(code, requestObject, timeout = TIMEOUT_MS) {
|
|||||||
console.log(`Function: ${code}`);
|
console.log(`Function: ${code}`);
|
||||||
let requestObjectString = JSON.stringify(requestObject, null, 2);
|
let requestObjectString = JSON.stringify(requestObject, null, 2);
|
||||||
console.log(`Request: ${requestObjectString}`);
|
console.log(`Request: ${requestObjectString}`);
|
||||||
|
console.log(
|
||||||
|
`Environment (pre): ${JSON.stringify(environment, null, 2)})`
|
||||||
|
);
|
||||||
|
|
||||||
// Call the user function with request object
|
// Call the user function with request object
|
||||||
let result = await userFunction(requestObject);
|
let result = await userFunction(requestObject);
|
||||||
|
|
||||||
return Result(States.SUCCESS, result);
|
return Result(States.SUCCESS, result, environment);
|
||||||
} else {
|
} else {
|
||||||
return Result(States.NOT_A_FUNCTION, null);
|
return Result(States.NOT_A_FUNCTION, null, environment);
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
if (err.message === "Script execution timed out.") {
|
if (err.message === "Script execution timed out.") {
|
||||||
return Result(States.TIMEOUT, null);
|
return Result(States.TIMEOUT, null, environment);
|
||||||
} else {
|
} else {
|
||||||
return Result(States.SCRIPT_ERROR, err.message || err);
|
return Result(States.SCRIPT_ERROR, err.message || err, environment);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
app.post("/execute", async (req, res) => {
|
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 timeout = req.query.timeout || TIMEOUT_MS;
|
||||||
|
|
||||||
const result = await executeUserCode(code, request, timeout);
|
const result = await executeUserCode(code, request, environment, timeout);
|
||||||
res.send(result);
|
res.send(result);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user