diff --git a/docker/Dockerfile b/docker/Dockerfile index 64f47850..47e2f249 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -4,7 +4,7 @@ FROM node:18-alpine ENV PORT=3000 RUN \ - apk --no-cache add --virtual build-dependencies python3 build-base git + apk --no-cache add --virtual build-dependencies python3 build-base git make g++ WORKDIR /automatisch diff --git a/packages/backend/code-execution.patch b/packages/backend/code-execution.patch new file mode 100644 index 00000000..163b3d4c --- /dev/null +++ b/packages/backend/code-execution.patch @@ -0,0 +1,332 @@ +diff --git a/packages/backend/code-execution.patch b/packages/backend/code-execution.patch +index 646bc6dd..e69de29b 100644 +--- a/packages/backend/code-execution.patch ++++ b/packages/backend/code-execution.patch +@@ -1,327 +0,0 @@ +-diff --git a/docker/Dockerfile b/docker/Dockerfile +-index f4aa6577..e3b9c10f 100644 +---- a/docker/Dockerfile +-+++ b/docker/Dockerfile +-@@ -4,7 +4,7 @@ FROM node:18-alpine +- ENV PORT 3000 +- +- RUN \ +-- apk --no-cache add --virtual build-dependencies python3 build-base git +-+ apk --no-cache add --virtual build-dependencies python3 build-base git make g++ +- +- WORKDIR /automatisch +- +-diff --git a/packages/backend/package.json b/packages/backend/package.json +-index 50b8109f..677f5325 100644 +---- a/packages/backend/package.json +-+++ b/packages/backend/package.json +-@@ -49,6 +49,7 @@ +- "http-errors": "~1.6.3", +- "http-proxy-agent": "^7.0.0", +- "https-proxy-agent": "^7.0.1", +-+ "isolated-vm": "^5.0.1", +- "jsonwebtoken": "^9.0.0", +- "knex": "^2.4.0", +- "libphonenumber-js": "^1.10.48", +-diff --git a/yarn.lock b/yarn.lock +-index 7904bbef..30e88cd9 100644 +---- a/yarn.lock +-+++ b/yarn.lock +-@@ -5816,6 +5816,11 @@ base16@^1.0.0: +- resolved "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz" +- integrity sha1-4pf2DX7BAUp6lxo568ipjAtoHnA= +- +-+base64-js@^1.3.1: +-+ version "1.5.1" +-+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" +-+ integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== +-+ +- basic-auth@^2.0.1, basic-auth@~2.0.1: +- version "2.0.1" +- resolved "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz" +-@@ -5868,6 +5873,15 @@ binary-extensions@^2.0.0: +- resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" +- integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== +- +-+bl@^4.0.3: +-+ version "4.1.0" +-+ resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" +-+ integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== +-+ dependencies: +-+ buffer "^5.5.0" +-+ inherits "^2.0.4" +-+ readable-stream "^3.4.0" +-+ +- bluebird@^3.5.5: +- version "3.7.2" +- resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" +-@@ -6008,6 +6022,14 @@ buffer-writer@2.0.0: +- resolved "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz" +- integrity sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw== +- +-+buffer@^5.5.0: +-+ version "5.7.1" +-+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" +-+ integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== +-+ dependencies: +-+ base64-js "^1.3.1" +-+ ieee754 "^1.1.13" +-+ +- builtin-modules@^3.1.0: +- version "3.2.0" +- resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz" +-@@ -6304,7 +6326,7 @@ chokidar@^3.4.2, chokidar@^3.5.2: +- optionalDependencies: +- fsevents "~2.3.2" +- +--chownr@^1.1.4: +-+chownr@^1.1.1, chownr@^1.1.4: +- version "1.1.4" +- resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz" +- integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== +-@@ -7283,6 +7305,13 @@ decompress-response@^3.3.0: +- dependencies: +- mimic-response "^1.0.0" +- +-+decompress-response@^6.0.0: +-+ version "6.0.0" +-+ resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" +-+ integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== +-+ dependencies: +-+ mimic-response "^3.1.0" +-+ +- dedent@^0.7.0: +- version "0.7.0" +- resolved "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz" +-@@ -7770,7 +7799,7 @@ encoding@^0.1.12, encoding@^0.1.13: +- dependencies: +- iconv-lite "^0.6.2" +- +--end-of-stream@^1.1.0: +-+end-of-stream@^1.1.0, end-of-stream@^1.4.1: +- version "1.4.4" +- resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" +- integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== +-@@ -8488,6 +8517,11 @@ exit@^0.1.2: +- resolved "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" +- integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= +- +-+expand-template@^2.0.3: +-+ version "2.0.3" +-+ resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" +-+ integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== +-+ +- expect@^27.4.6: +- version "27.4.6" +- resolved "https://registry.npmjs.org/expect/-/expect-27.4.6.tgz" +-@@ -8914,6 +8948,11 @@ fresh@0.5.2: +- resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" +- integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= +- +-+fs-constants@^1.0.0: +-+ version "1.0.0" +-+ resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" +-+ integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== +-+ +- fs-extra@^10.0.0: +- version "10.0.0" +- resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz" +-@@ -9169,6 +9208,11 @@ gitconfiglocal@^1.0.0: +- dependencies: +- ini "^1.3.2" +- +-+github-from-package@0.0.0: +-+ version "0.0.0" +-+ resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" +-+ integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== +-+ +- glob-parent@^5.1.1, glob-parent@^5.1.2, glob-parent@~5.1.2: +- version "5.1.2" +- resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" +-@@ -9717,6 +9761,11 @@ identity-obj-proxy@^3.0.0: +- dependencies: +- harmony-reflect "^1.4.6" +- +-+ieee754@^1.1.13: +-+ version "1.2.1" +-+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" +-+ integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== +-+ +- ignore-by-default@^1.0.1: +- version "1.0.1" +- resolved "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz" +-@@ -10238,6 +10287,13 @@ isobject@^3.0.1: +- resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" +- integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= +- +-+isolated-vm@^5.0.1: +-+ version "5.0.1" +-+ resolved "https://registry.yarnpkg.com/isolated-vm/-/isolated-vm-5.0.1.tgz#d87b12cf8889e351cb1598a4aeea00bb458bf20c" +-+ integrity sha512-hs7+ff59Z2zDvavfcjuot/r1gm6Bmpt+GoZxmVfxUmXaX5scOvUq/Rnme+mUtSh5lW41hH8gAuvk/yTJDYO8Fg== +-+ dependencies: +-+ prebuild-install "^7.1.1" +-+ +- isstream@~0.1.2: +- version "0.1.2" +- resolved "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz" +-@@ -11616,6 +11672,11 @@ mimic-response@^1.0.0, mimic-response@^1.0.1: +- resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" +- integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== +- +-+mimic-response@^3.1.0: +-+ version "3.1.0" +-+ resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" +-+ integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== +-+ +- min-indent@^1.0.0: +- version "1.0.1" +- resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz" +-@@ -11675,6 +11736,11 @@ minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: +- resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz" +- integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== +- +-+minimist@^1.2.3: +-+ version "1.2.8" +-+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" +-+ integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== +-+ +- minipass-collect@^1.0.2: +- version "1.0.2" +- resolved "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" +-@@ -11780,6 +11846,11 @@ minizlib@^2.0.0, minizlib@^2.1.1, minizlib@^2.1.2: +- minipass "^3.0.0" +- yallist "^4.0.0" +- +-+mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: +-+ version "0.5.3" +-+ resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" +-+ integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== +-+ +- mkdirp-infer-owner@^2.0.0: +- version "2.0.0" +- resolved "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz" +-@@ -11995,6 +12066,11 @@ nanoid@^3.3.7: +- resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" +- integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== +- +-+napi-build-utils@^1.0.1: +-+ version "1.0.2" +-+ resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" +-+ integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== +-+ +- natural-compare@^1.4.0: +- version "1.4.0" +- resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" +-@@ -12023,6 +12099,13 @@ no-case@^3.0.4: +- lower-case "^2.0.2" +- tslib "^2.0.3" +- +-+node-abi@^3.3.0: +-+ version "3.65.0" +-+ resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.65.0.tgz#ca92d559388e1e9cab1680a18c1a18757cdac9d3" +-+ integrity sha512-ThjYBfoDNr08AWx6hGaRbfPwxKV9kVzAzOzlLKbk2CuqXE2xnCh+cbAGnwM3t8Lq4v9rUB7VfondlkBckcJrVA== +-+ dependencies: +-+ semver "^7.3.5" +-+ +- node-addon-api@^5.0.0: +- version "5.1.0" +- resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-5.1.0.tgz#49da1ca055e109a23d537e9de43c09cca21eb762" +-@@ -13683,6 +13766,24 @@ preact@^10.0.0: +- resolved "https://registry.npmjs.org/preact/-/preact-10.10.2.tgz" +- integrity sha512-GUXSsfwq4NKhlLYY5ctfNE0IjFk7Xo4952yPI8yMkXdhzeQmQ+FahZITe7CeHXMPyKBVQ8SoCmGNIy9TSOdhgQ== +- +-+prebuild-install@^7.1.1: +-+ version "7.1.2" +-+ resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.2.tgz#a5fd9986f5a6251fbc47e1e5c65de71e68c0a056" +-+ integrity sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ== +-+ 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" +-+ +- prelude-ls@^1.2.1: +- version "1.2.1" +- resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" +-@@ -13989,7 +14090,7 @@ raw-body@^2.5.2: +- iconv-lite "0.4.24" +- unpipe "1.0.0" +- +--rc@^1.2.8: +-+rc@^1.2.7, rc@^1.2.8: +- version "1.2.8" +- resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz" +- integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== +-@@ -14342,6 +14443,15 @@ readable-stream@^2.0.1, readable-stream@^2.0.6, readable-stream@^2.2.2, readable +- string_decoder "~1.1.1" +- util-deprecate "~1.0.1" +- +-+readable-stream@^3.1.1: +-+ version "3.6.2" +-+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" +-+ integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== +-+ dependencies: +-+ inherits "^2.0.3" +-+ string_decoder "^1.1.1" +-+ util-deprecate "^1.0.1" +-+ +- readdir-scoped-modules@^1.0.0: +- version "1.1.0" +- resolved "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz" +-@@ -15054,6 +15164,20 @@ signal-exit@^4.0.1, signal-exit@^4.1.0: +- resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" +- integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== +- +-+simple-concat@^1.0.0: +-+ version "1.0.1" +-+ resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" +-+ integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== +-+ +-+simple-get@^4.0.0: +-+ version "4.0.1" +-+ resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" +-+ integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== +-+ dependencies: +-+ decompress-response "^6.0.0" +-+ once "^1.3.1" +-+ simple-concat "^1.0.0" +-+ +- simple-swizzle@^0.2.2: +- version "0.2.2" +- resolved "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz" +-@@ -15799,6 +15923,27 @@ tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: +- resolved "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz" +- integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== +- +-+tar-fs@^2.0.0: +-+ version "2.1.1" +-+ resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" +-+ 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" +-+ +-+tar-stream@^2.1.4: +-+ version "2.2.0" +-+ resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" +-+ 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" +-+ +- tar@^4.4.12: +- version "4.4.19" +- resolved "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz" diff --git a/packages/backend/package.json b/packages/backend/package.json index 50b8109f..677f5325 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -49,6 +49,7 @@ "http-errors": "~1.6.3", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.1", + "isolated-vm": "^5.0.1", "jsonwebtoken": "^9.0.0", "knex": "^2.4.0", "libphonenumber-js": "^1.10.48", diff --git a/packages/backend/src/apps/code/actions/index.js b/packages/backend/src/apps/code/actions/index.js new file mode 100644 index 00000000..d2b42078 --- /dev/null +++ b/packages/backend/src/apps/code/actions/index.js @@ -0,0 +1,3 @@ +import runJavascript from './run-javascript/index.js'; + +export default [runJavascript]; diff --git a/packages/backend/src/apps/code/actions/run-javascript/index.js b/packages/backend/src/apps/code/actions/run-javascript/index.js new file mode 100644 index 00000000..1f1b7200 --- /dev/null +++ b/packages/backend/src/apps/code/actions/run-javascript/index.js @@ -0,0 +1,81 @@ +import defineAction from '../../../../helpers/define-action.js'; + +export default defineAction({ + name: 'Run Javascript', + key: 'runJavascript', + description: + 'Run browser Javascript code. You can not use NodeJS specific features and npm packages.', + arguments: [ + { + label: 'Inputs', + key: 'inputs', + type: 'dynamic', + required: false, + description: + 'To be able to use data from previous steps, you need to expose them as input entries. You can access these input values in your code by using the `inputs` argument.', + value: [ + { + key: '', + value: '', + }, + ], + fields: [ + { + label: 'Key', + key: 'key', + type: 'string', + required: true, + variables: true, + }, + { + label: 'Value', + key: 'value', + type: 'string', + required: true, + variables: true, + }, + ], + }, + { + label: 'Code Snippet', + key: 'codeSnippet', + type: 'string', + required: true, + variables: false, + value: 'const code = async (inputs) => { return true; };', + }, + ], + + async run($) { + const { inputs = [], codeSnippet } = $.step.parameters; + + const ivm = (await import('isolated-vm')).default; + const isolate = new ivm.Isolate({ memoryLimit: 128 }); + + try { + const context = await isolate.createContext(); + + const externalData = new ivm.ExternalCopy(inputs).copyInto(); + + const compiledCodeSnippet = await isolate.compileScript(codeSnippet); + + const codeRun = await compiledCodeSnippet.run(context); + + const codeFunction = await context.global.get('code', { + reference: true, + promise: true, + }); + + const result = await codeFunction.apply(undefined, [externalData], {}); + + // const codeReturn = await outRef.copy(); + const codeReturn = await result.copy(); + + // console.log(codeReturn); + + $.setActionItem({ raw: { output: codeReturn } }); + } finally { + isolate.dispose(); + } + }, +}); diff --git a/packages/backend/src/apps/code/assets/favicon.svg b/packages/backend/src/apps/code/assets/favicon.svg new file mode 100644 index 00000000..a3d20164 --- /dev/null +++ b/packages/backend/src/apps/code/assets/favicon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/packages/backend/src/apps/code/index.js b/packages/backend/src/apps/code/index.js new file mode 100644 index 00000000..36e9e5ed --- /dev/null +++ b/packages/backend/src/apps/code/index.js @@ -0,0 +1,14 @@ +import defineApp from '../../helpers/define-app.js'; +import actions from './actions/index.js'; + +export default defineApp({ + name: 'Code', + key: 'code', + baseUrl: '', + apiBaseUrl: '', + iconUrl: '{BASE_URL}/apps/code/assets/favicon.svg', + authDocUrl: '{DOCS_URL}/apps/code/connection', + primaryColor: '000000', + supportsConnections: false, + actions, +}); diff --git a/yarn.lock b/yarn.lock index 7904bbef..30e88cd9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5816,6 +5816,11 @@ base16@^1.0.0: resolved "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz" integrity sha1-4pf2DX7BAUp6lxo568ipjAtoHnA= +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + basic-auth@^2.0.1, basic-auth@~2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz" @@ -5868,6 +5873,15 @@ binary-extensions@^2.0.0: resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== +bl@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + bluebird@^3.5.5: version "3.7.2" resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" @@ -6008,6 +6022,14 @@ buffer-writer@2.0.0: resolved "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz" integrity sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw== +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + builtin-modules@^3.1.0: version "3.2.0" resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz" @@ -6304,7 +6326,7 @@ chokidar@^3.4.2, chokidar@^3.5.2: optionalDependencies: fsevents "~2.3.2" -chownr@^1.1.4: +chownr@^1.1.1, chownr@^1.1.4: version "1.1.4" resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== @@ -7283,6 +7305,13 @@ decompress-response@^3.3.0: dependencies: mimic-response "^1.0.0" +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + dedent@^0.7.0: version "0.7.0" resolved "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz" @@ -7770,7 +7799,7 @@ encoding@^0.1.12, encoding@^0.1.13: dependencies: iconv-lite "^0.6.2" -end-of-stream@^1.1.0: +end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== @@ -8488,6 +8517,11 @@ exit@^0.1.2: resolved "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= +expand-template@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" + integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== + expect@^27.4.6: version "27.4.6" resolved "https://registry.npmjs.org/expect/-/expect-27.4.6.tgz" @@ -8914,6 +8948,11 @@ fresh@0.5.2: resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + fs-extra@^10.0.0: version "10.0.0" resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz" @@ -9169,6 +9208,11 @@ gitconfiglocal@^1.0.0: dependencies: ini "^1.3.2" +github-from-package@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" + integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== + glob-parent@^5.1.1, glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" @@ -9717,6 +9761,11 @@ identity-obj-proxy@^3.0.0: dependencies: harmony-reflect "^1.4.6" +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + ignore-by-default@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz" @@ -10238,6 +10287,13 @@ isobject@^3.0.1: resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= +isolated-vm@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/isolated-vm/-/isolated-vm-5.0.1.tgz#d87b12cf8889e351cb1598a4aeea00bb458bf20c" + integrity sha512-hs7+ff59Z2zDvavfcjuot/r1gm6Bmpt+GoZxmVfxUmXaX5scOvUq/Rnme+mUtSh5lW41hH8gAuvk/yTJDYO8Fg== + dependencies: + prebuild-install "^7.1.1" + isstream@~0.1.2: version "0.1.2" resolved "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz" @@ -11616,6 +11672,11 @@ mimic-response@^1.0.0, mimic-response@^1.0.1: resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + min-indent@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz" @@ -11675,6 +11736,11 @@ minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz" integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== +minimist@^1.2.3: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + minipass-collect@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" @@ -11780,6 +11846,11 @@ minizlib@^2.0.0, minizlib@^2.1.1, minizlib@^2.1.2: minipass "^3.0.0" yallist "^4.0.0" +mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== + mkdirp-infer-owner@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz" @@ -11995,6 +12066,11 @@ nanoid@^3.3.7: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== +napi-build-utils@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" + integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" @@ -12023,6 +12099,13 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" +node-abi@^3.3.0: + version "3.65.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.65.0.tgz#ca92d559388e1e9cab1680a18c1a18757cdac9d3" + integrity sha512-ThjYBfoDNr08AWx6hGaRbfPwxKV9kVzAzOzlLKbk2CuqXE2xnCh+cbAGnwM3t8Lq4v9rUB7VfondlkBckcJrVA== + dependencies: + semver "^7.3.5" + node-addon-api@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-5.1.0.tgz#49da1ca055e109a23d537e9de43c09cca21eb762" @@ -13683,6 +13766,24 @@ preact@^10.0.0: resolved "https://registry.npmjs.org/preact/-/preact-10.10.2.tgz" integrity sha512-GUXSsfwq4NKhlLYY5ctfNE0IjFk7Xo4952yPI8yMkXdhzeQmQ+FahZITe7CeHXMPyKBVQ8SoCmGNIy9TSOdhgQ== +prebuild-install@^7.1.1: + version "7.1.2" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.2.tgz#a5fd9986f5a6251fbc47e1e5c65de71e68c0a056" + integrity sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ== + 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" + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" @@ -13989,7 +14090,7 @@ raw-body@^2.5.2: iconv-lite "0.4.24" unpipe "1.0.0" -rc@^1.2.8: +rc@^1.2.7, rc@^1.2.8: version "1.2.8" resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== @@ -14342,6 +14443,15 @@ readable-stream@^2.0.1, readable-stream@^2.0.6, readable-stream@^2.2.2, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" +readable-stream@^3.1.1: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + readdir-scoped-modules@^1.0.0: version "1.1.0" resolved "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz" @@ -15054,6 +15164,20 @@ signal-exit@^4.0.1, signal-exit@^4.1.0: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" + integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== + dependencies: + decompress-response "^6.0.0" + once "^1.3.1" + simple-concat "^1.0.0" + simple-swizzle@^0.2.2: version "0.2.2" resolved "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz" @@ -15799,6 +15923,27 @@ tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: resolved "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== +tar-fs@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" + 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" + +tar-stream@^2.1.4: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + 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" + tar@^4.4.12: version "4.4.19" resolved "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz"