🔒 Use isolated-vm

This commit is contained in:
Baptiste Arnaud
2024-05-22 11:42:31 +02:00
parent 15b2901f8a
commit 3d496e1eec
13 changed files with 291 additions and 114 deletions

View File

@@ -22,7 +22,7 @@ You need to write `console.log({{My variable}})` instead of `console.log("{{My v
If you want to set a variable value with Javascript, the [Set variable block](./set-variable) is more appropriate for most cases.
However, if you'd like to set variables with the script blocks, you can use the `setVariable` function in your script:
However, if you'd like to set variables in a Script block, you can use the `setVariable` function in your script:
```js
if({{My variable}} === 'foo') {
@@ -34,6 +34,23 @@ if({{My variable}} === 'foo') {
The `setVariable` function is only available in script executed on the server, so it won't work if the `Execute on client?` is checked.
## Limitations on scripts executed on server
Because the script is executed on a isolated and secured environment, there are some limitations.
- Global functions like `console.log`, `setTimeout`, `setInterval`, etc. are not available
- The `fetch` function behavior is slightly different from the native `fetch` function. You just have to skip the `await response.text()` or `await response.json()` part.
```js
const response = await fetch('https://jsonplaceholder.typicode.com/todos/1')
// const data = await response.text() 👈 You can remove this line, it is executed by default under the hood.
```
So `response` will always have the `string` type even if the the request returns a JSON object. If you know that the response is a JSON object, you can parse it using `JSON.parse(response)`.
- You can't use `import` or `require` to import external libraries
- You don't have access to browser APIs like `window`, `document`, `localStorage`, etc. If you need to use browser APIs, you should check the `Execute on client?` option so that the script is executed on the user's browser.
## Examples
### Reload page