diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index e33ead4568..d850cf297e 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -36,5 +36,4 @@ RUN npm i -g pnpm@7.28.0 RUN pnpm store add \ @tsconfig/node18@1.0.0 \ @types/node@18.17.1 \ - typescript@4.8.4 \ - isolated-vm@4.6.0 + typescript@4.8.4 diff --git a/Dockerfile b/Dockerfile index 1cb1add315..db208f44a6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ ### STAGE 1: Build ### -FROM activepieces/ap-base:6 AS build +FROM activepieces/ap-base:7 AS build # Set up backend WORKDIR /usr/src/app @@ -14,7 +14,7 @@ RUN cd dist/packages/backend && \ npm install --production ### STAGE 2: Run ### -FROM activepieces/ap-base:6 AS run +FROM activepieces/ap-base:7 AS run # Set up backend WORKDIR /usr/src/app diff --git a/ap-base.dockerfile b/ap-base.dockerfile index c59f25adcb..728fe7c412 100644 --- a/ap-base.dockerfile +++ b/ap-base.dockerfile @@ -21,5 +21,4 @@ RUN npm i -g \ RUN pnpm store add \ @tsconfig/node18@1.0.0 \ @types/node@18.17.1 \ - typescript@4.8.4 \ - isolated-vm@4.6.0 + typescript@4.8.4 diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index ed0de4c01d..b8f4a8652e 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -8,7 +8,7 @@ version: '3.0' services: app: - image: activepieces/ap-base:4 + image: activepieces/ap-base:7 container_name: ap environment: AP_DB_TYPE: POSTGRES diff --git a/package-lock.json b/package-lock.json index e948585ce9..1869080df3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -79,7 +79,6 @@ "http-status-codes": "^2.2.0", "ioredis": "^5.2.5", "is-base64": "^1.1.0", - "isolated-vm": "^4.6.0", "jshint": "^2.13.6", "json2xml": "^0.1.3", "jsonlint-mod": "^1.7.6", @@ -12934,6 +12933,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -12944,6 +12944,7 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, "funding": [ { "type": "github", @@ -12967,6 +12968,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -15668,20 +15670,6 @@ "node": ">=4" } }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/decompress-tar": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", @@ -15814,14 +15802,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -17450,14 +17430,6 @@ "node": ">= 0.8.0" } }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "engines": { - "node": ">=6" - } - }, "node_modules/expect": { "version": "29.6.4", "resolved": "https://registry.npmjs.org/expect/-/expect-29.6.4.tgz", @@ -18769,11 +18741,6 @@ "node": ">=10" } }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" - }, "node_modules/glob": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", @@ -20468,18 +20435,6 @@ "node": ">=0.10.0" } }, - "node_modules/isolated-vm": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/isolated-vm/-/isolated-vm-4.6.0.tgz", - "integrity": "sha512-MEnfC/54q5PED3VJ9UJYJPOlU6mYFHS3ivR9E8yeNNBEFRFUNBnY0xO4Rj3D/SOtFKPNmsQp9NWUYSKZqAoZiA==", - "hasInstallScript": true, - "dependencies": { - "prebuild-install": "^7.1.1" - }, - "engines": { - "node": ">=16.0.0" - } - }, "node_modules/isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", @@ -24118,17 +24073,6 @@ "node": ">=6" } }, - "node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", @@ -24418,11 +24362,6 @@ "mkdirp": "bin/cmd.js" } }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" - }, "node_modules/ml-array-mean": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/ml-array-mean/-/ml-array-mean-1.1.6.tgz", @@ -24681,11 +24620,6 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" - }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -25344,17 +25278,6 @@ "node-gyp-build": "^4.2.2" } }, - "node_modules/node-abi": { - "version": "3.47.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.47.0.tgz", - "integrity": "sha512-2s6B2CWZM//kPgwnuI0KrYwNjfdByE25zvAaEpq9IH4zcNsarH8Ihu/UuX6XMPEogDAxkuUFeZn60pXNHAqn3A==", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/node-abort-controller": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", @@ -28453,31 +28376,6 @@ "form-data": "^4.0.0" } }, - "node_modules/prebuild-install": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", - "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", - "dependencies": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^3.3.0", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -28872,6 +28770,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -29090,33 +28989,6 @@ "node": ">=0.10.0" } }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", @@ -30612,49 +30484,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -32219,50 +32048,6 @@ "node": ">=10" } }, - "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-fs/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "node_modules/tar-fs/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/tar-fs/node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/tar-stream": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", diff --git a/package.json b/package.json index 3972c4719f..481fc5662b 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,6 @@ "http-status-codes": "^2.2.0", "ioredis": "^5.2.5", "is-base64": "^1.1.0", - "isolated-vm": "^4.6.0", "jshint": "^2.13.6", "json2xml": "^0.1.3", "jsonlint-mod": "^1.7.6", diff --git a/packages/backend/src/app/workers/sandbox.ts b/packages/backend/src/app/workers/sandbox.ts index 0221ec4c46..a14f7d173c 100755 --- a/packages/backend/src/app/workers/sandbox.ts +++ b/packages/backend/src/app/workers/sandbox.ts @@ -65,12 +65,6 @@ export class Sandbox { } await packageManager.initProject(sandboxFolderPath) - - await packageManager.addDependencies(sandboxFolderPath, { - 'isolated-vm': { - version: '4.6.0', - }, - }) } async clean(): Promise { diff --git a/packages/engine/src/lib/services/variable-service.ts b/packages/engine/src/lib/services/variable-service.ts index 2c76640fde..a9b79d5316 100755 --- a/packages/engine/src/lib/services/variable-service.ts +++ b/packages/engine/src/lib/services/variable-service.ts @@ -13,7 +13,6 @@ import { NonAuthPiecePropertyMap } from '@activepieces/pieces-framework'; import { handleAPFile, isApFilePath } from './files.service'; -import ivm from 'isolated-vm'; export class VariableService { private VARIABLE_TOKEN = RegExp('\\{\\{(.*?)\\}\\}', 'g'); @@ -38,10 +37,10 @@ export class VariableService { if (isApFilePath(variableName)) { return variableName; } - return this.evalInIsolate(variableName, valuesMap); + return this.evalInScope(variableName, valuesMap); } return input.replace(this.VARIABLE_TOKEN, (_match, variable) => { - const result = this.evalInIsolate(variable, valuesMap); + const result = this.evalInScope(variable, valuesMap); if (!isString(result)) { return JSON.stringify(result); } @@ -70,7 +69,7 @@ export class VariableService { } const context: Record = {}; context['connection'] = connection; - return this.evalInIsolate(newPath, context); + return this.evalInScope(newPath, context); } private cleanPath(path: string, connectionName: string): string { @@ -100,31 +99,15 @@ export class VariableService { return paths[1]; } - private async evalInIsolate(js: string, contextAsScope: Record) { + private evalInScope(js: string, contextAsScope: Record) { try { - const isolate = new ivm.Isolate({ - memoryLimit: 64 - }); - const context = await isolate.createContext(); - const global = context.global; - - for (const key of Object.keys(contextAsScope)) { - const value = contextAsScope[key]; - global.set(key, new ivm.ExternalCopy(value).copyInto()); - } - - const functionBody = `(${js})`; - const script = await isolate.compileScript(functionBody); - const result = await script.run(context); - - if (result instanceof ivm.ExternalCopy) { - return result.copyInto(); - } else { - return result; - } + const keys = Object.keys(contextAsScope); + const values = Object.values(contextAsScope); + const functionBody = `return (${js})`; + const evaluatedFn = new Function(...keys, functionBody); + const result = evaluatedFn(...values); + return result ?? ''; } catch (exception) { - console.log(ivm); - console.error(exception); return ''; } } diff --git a/packages/engine/webpack.config.js b/packages/engine/webpack.config.js index 110ee03370..1a12b324ce 100644 --- a/packages/engine/webpack.config.js +++ b/packages/engine/webpack.config.js @@ -3,10 +3,5 @@ const IgnoreDynamicRequire = require('webpack-ignore-dynamic-require'); module.exports = composePlugins(withNx(), (config) => { config.plugins.push(new IgnoreDynamicRequire()); - - config.externals = { - 'isolated-vm': 'commonjs2 isolated-vm' - }; - return config; }); diff --git a/tools/setup-dev.js b/tools/setup-dev.js index e542aa0291..490c615a0c 100644 --- a/tools/setup-dev.js +++ b/tools/setup-dev.js @@ -19,5 +19,4 @@ execSync('npm ci'); execSync('npx pnpm store add \ @tsconfig/node18@1.0.0 \ @types/node@18.17.1 \ - typescript@4.8.4 \ - isolated-vm@4.6.0'); + typescript@4.8.4');