Skip to content

Commit d3ecd6a

Browse files
committed
refactor: reintroduced v8-sandbox for testing purposes only
1 parent da27a9d commit d3ecd6a

File tree

5 files changed

+327
-22
lines changed

5 files changed

+327
-22
lines changed

.eslintignore

+2
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
11
docs/_build/
2+
dist/
3+
node_modules/

package.json

+4-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
"src"
2020
],
2121
"scripts": {
22-
"build": "babel src -d dist",
22+
"build": "cross-env NODE_ENV=production babel src -d dist",
2323
"docs": "esdoc",
2424
"ganache": "ganache-cli",
2525
"prepublishOnly": "run-s build",
@@ -47,6 +47,7 @@
4747
"assert": "^2.0.0",
4848
"babel-eslint": "^10.1.0",
4949
"babel-jest": "^26.6.1",
50+
"cross-env": "^7.0.3",
5051
"electron": "^13.1.6",
5152
"esdoc": "^1.1.0",
5253
"esdoc-ecmascript-proposal-plugin": "^1.0.0",
@@ -69,7 +70,8 @@
6970
"solc": "0.4.25",
7071
"standard-version": "^9.0.0",
7172
"url": "^0.11.0",
72-
"util": "^0.12.3"
73+
"util": "^0.12.3",
74+
"v8-sandbox": "^2.2.2"
7375
},
7476
"volta": {
7577
"node": "14.17.3"

src/utils/frame-loader.js

+47-1
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,55 @@
11
import iframe from "iframe";
22

33
export default function fetchDataFromScript(scriptString, scriptParameters) {
4-
return typeof window !== "undefined" ? fetchDataFromScriptIframe(scriptString, scriptParameters) : {};
4+
return typeof window !== "undefined"
5+
? fetchDataFromScriptIframe(scriptString, scriptParameters)
6+
: fetchDataFromScriptSandbox(scriptString, scriptParameters);
57
}
68

9+
const fetchDataFromScriptSandbox =
10+
process.env.NODE_ENV !== "production"
11+
? async (scriptString, scriptParameters) => {
12+
const { default: Sandbox } = await import("v8-sandbox");
13+
const sandbox = new Sandbox();
14+
15+
const code = `
16+
${scriptString}
17+
18+
let resolveScript
19+
let rejectScript
20+
let scriptParameters = JSON.parse(stringifiedScriptParameters)
21+
22+
const returnPromise = new Promise((resolve, reject) => {
23+
resolveScript = resolve
24+
rejectScript = reject
25+
})
26+
27+
getMetaEvidence()
28+
29+
returnPromise.then((metaEvidence) => {
30+
setResult({ value: metaEvidence })
31+
}).catch((err) => {
32+
setResult({ error: err })
33+
})`;
34+
35+
const { error, value } = await sandbox.execute({
36+
code,
37+
globals: {
38+
stringifiedScriptParameters: JSON.stringify(scriptParameters || {}),
39+
},
40+
timeout: 5000,
41+
});
42+
43+
await sandbox.shutdown();
44+
45+
if (error) {
46+
throw error;
47+
}
48+
49+
return value;
50+
}
51+
: async () => ({});
52+
753
const fetchDataFromScriptIframe = async (scriptString, scriptParameters) => {
854
let resolver;
955
const returnPromise = new Promise((resolve) => {

tests/standards/arbitrable/MetaEvidence.test.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { multihashFile } from '../../../src/utils/hashing'
99

1010
const provider = ganache.provider()
1111

12-
describe.skip('MetaEvidence', () => {
12+
describe('MetaEvidence', () => {
1313
let web3
1414
let arbitrableInstance
1515
let accounts

0 commit comments

Comments
 (0)