mirror of
https://github.com/usebruno/bruno.git
synced 2025-08-19 04:06:46 +02:00
Safe Mode Sandbox using QuickJS Co-authored-by: Anoop M D <anoop.md1421@gmail.com> Co-authored-by: lohit <lohit.jiddimani@gmail.com>
82 lines
2.5 KiB
JavaScript
82 lines
2.5 KiB
JavaScript
const { marshallToVm } = require('../utils');
|
|
|
|
const addBruShimToContext = (vm, bru) => {
|
|
const bruObject = vm.newObject();
|
|
|
|
let cwd = vm.newFunction('cwd', function () {
|
|
return marshallToVm(bru.cwd(), vm);
|
|
});
|
|
vm.setProp(bruObject, 'cwd', cwd);
|
|
cwd.dispose();
|
|
|
|
let getEnvName = vm.newFunction('getEnvName', function () {
|
|
return marshallToVm(bru.getEnvName(), vm);
|
|
});
|
|
vm.setProp(bruObject, 'getEnvName', getEnvName);
|
|
getEnvName.dispose();
|
|
|
|
let getProcessEnv = vm.newFunction('getProcessEnv', function (key) {
|
|
return marshallToVm(bru.getProcessEnv(vm.dump(key)), vm);
|
|
});
|
|
vm.setProp(bruObject, 'getProcessEnv', getProcessEnv);
|
|
getProcessEnv.dispose();
|
|
|
|
let getEnvVar = vm.newFunction('getEnvVar', function (key) {
|
|
return marshallToVm(bru.getEnvVar(vm.dump(key)), vm);
|
|
});
|
|
vm.setProp(bruObject, 'getEnvVar', getEnvVar);
|
|
getEnvVar.dispose();
|
|
|
|
let setEnvVar = vm.newFunction('setEnvVar', function (key, value) {
|
|
bru.setEnvVar(vm.dump(key), vm.dump(value));
|
|
});
|
|
vm.setProp(bruObject, 'setEnvVar', setEnvVar);
|
|
setEnvVar.dispose();
|
|
|
|
let getVar = vm.newFunction('getVar', function (key) {
|
|
return marshallToVm(bru.getVar(vm.dump(key)), vm);
|
|
});
|
|
vm.setProp(bruObject, 'getVar', getVar);
|
|
getVar.dispose();
|
|
|
|
let setVar = vm.newFunction('setVar', function (key, value) {
|
|
bru.setVar(vm.dump(key), vm.dump(value));
|
|
});
|
|
vm.setProp(bruObject, 'setVar', setVar);
|
|
setVar.dispose();
|
|
|
|
let setNextRequest = vm.newFunction('setNextRequest', function (nextRequest) {
|
|
bru.setNextRequest(vm.dump(nextRequest));
|
|
});
|
|
vm.setProp(bruObject, 'setNextRequest', setNextRequest);
|
|
setNextRequest.dispose();
|
|
|
|
let visualize = vm.newFunction('visualize', function (htmlString) {
|
|
bru.visualize(vm.dump(htmlString));
|
|
});
|
|
vm.setProp(bruObject, 'visualize', visualize);
|
|
visualize.dispose();
|
|
|
|
let getSecretVar = vm.newFunction('getSecretVar', function (key) {
|
|
return marshallToVm(bru.getSecretVar(vm.dump(key)), vm);
|
|
});
|
|
vm.setProp(bruObject, 'getSecretVar', getSecretVar);
|
|
getSecretVar.dispose();
|
|
|
|
const sleep = vm.newFunction('sleep', (timer) => {
|
|
const t = vm.getString(timer);
|
|
const promise = vm.newPromise();
|
|
setTimeout(() => {
|
|
promise.resolve(vm.newString('slept'));
|
|
}, t);
|
|
promise.settled.then(vm.runtime.executePendingJobs);
|
|
return promise.handle;
|
|
});
|
|
sleep.consume((handle) => vm.setProp(bruObject, 'sleep', handle));
|
|
|
|
vm.setProp(vm.global, 'bru', bruObject);
|
|
bruObject.dispose();
|
|
};
|
|
|
|
module.exports = addBruShimToContext;
|