Compare commits
	
		
			299 Commits
		
	
	
		
			dependabot
			...
			AUT-1371
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 3de18ab46f | ||
|   | 54f509ee38 | ||
|   | 978ceaadb6 | ||
|   | 770b07179f | ||
|   | 6d15167ad9 | ||
|   | 39cba6bc74 | ||
|   | 9558e66abf | ||
|   | ff7908955e | ||
|   | 26b095b835 | ||
|   | feba2a32f9 | ||
|   | 5090ece9b6 | ||
|   | 221b19586e | ||
|   | 3346c14255 | ||
|   | 6e97e023c9 | ||
|   | b26e2ecf2e | ||
|   | d896238f23 | ||
|   | d2c8f5a75c | ||
|   | ce430d238c | ||
|   | ee397441ed | ||
|   | ba82d986c1 | ||
|   | 2361cb521e | ||
|   | 05f8d95281 | ||
|   | 6c60b1c263 | ||
|   | 0c32a0693c | ||
|   | 807faa3c93 | ||
|   | fb53e37f7a | ||
|   | 4ffdf98e16 | ||
|   | b8da721e39 | ||
|   | db8b98ca16 | ||
|   | 01b8c600fe | ||
|   | 69bd5549a2 | ||
|   | bc631e3931 | ||
|   | 8ca4bc5a33 | ||
|   | 58a569afb0 | ||
|   | db718d6fc3 | ||
|   | ca9cb8b07b | ||
|   | ef14586412 | ||
|   | 09335fcd79 | ||
|   | 15f1fca6fe | ||
|   | a570b8eb7a | ||
|   | 02e2735b7a | ||
|   | 54fa347142 | ||
|   | 0c752beace | ||
|   | c14f808d29 | ||
|   | ad71173671 | ||
|   | 204325ef44 | ||
|   | 7ce6117659 | ||
|   | 823a2c8b73 | ||
|   | 741866e742 | ||
|   | 41622678b0 | ||
|   | 449b953401 | ||
|   | 551548400f | ||
|   | 6345ce5195 | ||
|   | 95651f6163 | ||
|   | b02c1545b7 | ||
|   | 2deaab9b24 | ||
|   | f0d4853533 | ||
|   | af81ae812f | ||
|   | bae76064e5 | ||
|   | 07d9198cc8 | ||
|   | a2e07ea2f7 | ||
|   | 864c762fe2 | ||
|   | 167bb4e8a0 | ||
|   | 4cf64ede74 | ||
|   | bb309fea6f | ||
|   | 90a7b4c1c0 | ||
|   | 1133362028 | ||
|   | eb9226bd4a | ||
|   | a9abdcc37e | ||
|   | 6ace93bdbf | ||
|   | b89197939a | ||
|   | da788106af | ||
|   | 49e92e6f1d | ||
|   | a6c3276104 | ||
|   | 6388bfc714 | ||
|   | bebc3b181d | ||
|   | 5a6d561c1a | ||
|   | 5ba575fdfd | ||
|   | dcf8bbd804 | ||
|   | ff93ffd0b1 | ||
|   | 395c09df92 | ||
|   | 4c903cd08b | ||
|   | 64cb98717c | ||
|   | b0e4ce54fb | ||
|   | d67a37002f | ||
|   | 965ff8bc3f | ||
|   | 400a495ad2 | ||
|   | 09d0822a8d | ||
|   | 7016c20ccc | ||
|   | df54895805 | ||
|   | 62d5e6fe51 | ||
|   | 4615a0b7ea | ||
|   | 280d603b14 | ||
|   | 36271f0749 | ||
|   | 579638f932 | ||
|   | 48871c82a6 | ||
|   | 14056c42ef | ||
|   | 90fe1576de | ||
|   | d61cf13985 | ||
|   | dfe6dfd0c6 | ||
|   | c138c7d0e9 | ||
|   | d542be947e | ||
|   | c76366e72e | ||
|   | 75abfda783 | ||
|   | f3d8d7d4ad | ||
|   | 7255eccb22 | ||
|   | a0decb70cc | ||
|   | 532f562495 | ||
|   | 27e58ae925 | ||
|   | abf30dfc1a | ||
|   | 218b8ce86e | ||
|   | 4867ffcb4b | ||
|   | e34c3b411d | ||
|   | c91b8be1a6 | ||
|   | 9cb41644a1 | ||
|   | 8c01cea147 | ||
|   | 58eb55e90a | ||
|   | bb05e82e15 | ||
|   | 5ab95ea175 | ||
|   | a25c4f1d1e | ||
|   | 15287de8af | ||
|   | 49b4d6b511 | ||
|   | d5b4a5d4ac | ||
|   | de480b491c | ||
|   | a949fda1fc | ||
|   | 3e28af670c | ||
|   | b5310afb90 | ||
|   | da81ecf915 | ||
|   | f597066d16 | ||
|   | ec30606b24 | ||
|   | 20dce14f17 | ||
|   | 821742de85 | ||
|   | 74dc108f62 | ||
|   | a05fe856bb | ||
|   | d13f51a32d | ||
|   | 3dbe599cb3 | ||
|   | cf966dd83c | ||
|   | 4e62f3654f | ||
|   | 970d926563 | ||
|   | ff49c747ba | ||
|   | c46b8a5f4f | ||
|   | 485324e204 | ||
|   | 4696a03db1 | ||
|   | 7885de36a9 | ||
|   | fac4339207 | ||
|   | 9c70519021 | ||
|   | 9ae77ecd5d | ||
|   | 1c8e6f278d | ||
|   | c0a190a9f2 | ||
|   | e29e2a62f0 | ||
|   | 1580640a35 | ||
|   | 33c84b7fcc | ||
|   | 9773ce75b0 | ||
|   | c310e8d152 | ||
|   | af251c7b81 | ||
|   | 122483de0c | ||
|   | 42c2131144 | ||
|   | 71bc7a62c2 | ||
|   | 87bfff07db | ||
|   | 1cb5b780d2 | ||
|   | 2f6acd4d6e | ||
|   | c2e2351505 | ||
|   | d847b5480b | ||
|   | 32749ee58e | ||
|   | a531b8b5fe | ||
|   | 148a0c5bb0 | ||
|   | 39f9a58200 | ||
|   | edd113d344 | ||
|   | c641e8729b | ||
|   | 2c4b13e4b5 | ||
|   | 48fcf4dda7 | ||
|   | acfd980d4f | ||
|   | db9bfab812 | ||
|   | d32820ee09 | ||
|   | 0f823fd19e | ||
|   | 4308ed5850 | ||
|   | b9cd7c3983 | ||
|   | fa607aa961 | ||
|   | 6900b71841 | ||
|   | bb230d67e8 | ||
|   | 4f076ec3e3 | ||
|   | 96a6cbfb95 | ||
|   | 5bdc5aed72 | ||
|   | d38b0f088b | ||
|   | 892710f705 | ||
|   | fbf898be64 | ||
|   | e3e2ecc1e1 | ||
|   | b59807d221 | ||
|   | 163ad52285 | ||
|   | 4023a6d1cc | ||
|   | ec827e5dc0 | ||
|   | a8f4fb7c22 | ||
|   | bc195ed452 | ||
|   | 41568904ab | ||
|   | 79050af391 | ||
|   | 2e5b44c424 | ||
|   | 7a437660d1 | ||
|   | 47510e24d5 | ||
|   | 91c9ef3068 | ||
|   | 240854e4ac | ||
|   | 0e4fc7efbc | ||
|   | b47e859225 | ||
|   | 62a1072682 | ||
|   | c6f2a97591 | ||
|   | d66be231b3 | ||
|   | f73ffc8711 | ||
|   | e4c17c1bc7 | ||
|   | 997e729535 | ||
|   | e0e313b8d1 | ||
|   | f0bd763e72 | ||
|   | 6a7a90536b | ||
|   | ac8ddedfb5 | ||
|   | 6fcd126ff8 | ||
|   | 55d0966d48 | ||
|   | 2583e08f7a | ||
|   | de72e62470 | ||
|   | 91993dbb07 | ||
|   | d87ee4daa3 | ||
|   | 6791e002ff | ||
|   | 4ca84aa515 | ||
|   | 8189cbc171 | ||
|   | 73edb45ff7 | ||
|   | 0bbe362660 | ||
|   | a76bee51fc | ||
|   | 6e42b52414 | ||
|   | aed61209fa | ||
|   | f5d796ea77 | ||
|   | ecb04b4ba9 | ||
|   | dabb01e237 | ||
|   | c2d27d0fd4 | ||
|   | e62bd75fdf | ||
|   | 2e917bd62b | ||
|   | e0492c4264 | ||
|   | 7db68e2f96 | ||
|   | e9b05a37d1 | ||
|   | 5613259536 | ||
|   | 3209ff16ac | ||
|   | a49c8602d1 | ||
|   | 7caa055e00 | ||
|   | 0d62bc6c78 | ||
|   | bc0861fd9e | ||
|   | f280052d93 | ||
|   | 21da49f79d | ||
|   | 19a5ccf942 | ||
|   | 0234b4ad81 | ||
|   | 59ee9c21f3 | ||
|   | 00317fed24 | ||
|   | 42f6311ca8 | ||
|   | 0f77a1ec03 | ||
|   | 8268cd4d09 | ||
|   | c868070337 | ||
|   | 2981fa5946 | ||
|   | 623ec66a79 | ||
|   | b51bae14ec | ||
|   | 05a3016557 | ||
|   | 9250456e7b | ||
|   | 163d6a7a28 | ||
|   | 4ce9976dbc | ||
|   | f6490990de | ||
|   | f24ff606ac | ||
|   | 3ff53744b5 | ||
|   | 0b33c10ed8 | ||
|   | 3fa87701ed | ||
|   | e5e0c6fa2a | ||
|   | 0b38a0b6af | ||
|   | 44b228777a | ||
|   | dd4f658d14 | ||
|   | 9c66f47bca | ||
|   | 138a34d6a4 | ||
|   | 8f2af2e863 | ||
|   | c732fe16b3 | ||
|   | 9be75e56e7 | ||
|   | e7d1f26034 | ||
|   | c554fff048 | ||
|   | 0268521aaa | ||
|   | 89b1cb9353 | ||
|   | 8a17c5eaab | ||
|   | f4a1ad6c8c | ||
|   | 93d76d8d79 | ||
|   | 0b956a71b9 | ||
|   | 26be72f76d | ||
|   | 737391c721 | ||
|   | 9c1d21fd1b | ||
|   | ef4a4c8611 | ||
|   | 13c0a8ceaa | ||
|   | c2976080f6 | ||
|   | 0a1b6931af | ||
|   | 5009319f91 | ||
|   | 4db8683bd6 | ||
|   | d35cf8d31e | ||
|   | 5fef16131a | ||
|   | 8b2235ee26 | ||
|   | 2d8faf849e | ||
|   | c9de9fa185 | ||
|   | 0618877d58 | ||
|   | f6b4e7eef8 | ||
|   | 7abe44da19 | ||
|   | 9006a0c25f | ||
|   | f8389ff8ab | 
| @@ -5,8 +5,11 @@ BACKEND_PORT=3000 | ||||
| WEB_PORT=3001 | ||||
|  | ||||
| echo "Configuring backend environment variables..." | ||||
|  | ||||
| cd packages/backend | ||||
|  | ||||
| rm -rf .env | ||||
|  | ||||
| echo " | ||||
| PORT=$BACKEND_PORT | ||||
| WEB_APP_URL=http://localhost:$WEB_PORT | ||||
| @@ -21,23 +24,34 @@ WEBHOOK_SECRET_KEY=sample_webhook_secret_key | ||||
| APP_SECRET_KEY=sample_app_secret_key | ||||
| REDIS_HOST=redis | ||||
| SERVE_WEB_APP_SEPARATELY=true" >> .env | ||||
|  | ||||
| echo "Installing backend dependencies..." | ||||
|  | ||||
| yarn | ||||
|  | ||||
| cd $CURRENT_DIR | ||||
|  | ||||
| echo "Configuring web environment variables..." | ||||
|  | ||||
| cd packages/web | ||||
|  | ||||
| rm -rf .env | ||||
|  | ||||
| echo " | ||||
| PORT=$WEB_PORT | ||||
| REACT_APP_BACKEND_URL=http://localhost:$BACKEND_PORT | ||||
| " >> .env | ||||
|  | ||||
| echo "Installing web dependencies..." | ||||
|  | ||||
| yarn | ||||
|  | ||||
| cd $CURRENT_DIR | ||||
|  | ||||
| echo "Installing and linking dependencies..." | ||||
| yarn | ||||
| yarn lerna bootstrap | ||||
|  | ||||
| echo "Migrating database..." | ||||
|  | ||||
| cd packages/backend | ||||
|  | ||||
| yarn db:migrate | ||||
| yarn db:seed:user | ||||
|  | ||||
|   | ||||
							
								
								
									
										9
									
								
								.github/workflows/backend.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								.github/workflows/backend.yml
									
									
									
									
										vendored
									
									
								
							| @@ -41,8 +41,11 @@ jobs: | ||||
|         with: | ||||
|           node-version: 18 | ||||
|       - name: Install dependencies | ||||
|         run: cd packages/backend && yarn | ||||
|         run: yarn | ||||
|         working-directory: packages/backend | ||||
|       - name: Copy .env-example.test file to .env.test | ||||
|         run: cd packages/backend && cp .env-example.test .env.test | ||||
|         run: cp .env-example.test .env.test | ||||
|         working-directory: packages/backend | ||||
|       - name: Run tests | ||||
|         run: cd packages/backend && yarn test | ||||
|         run: yarn test:coverage | ||||
|         working-directory: packages/backend | ||||
|   | ||||
							
								
								
									
										30
									
								
								.github/workflows/ci.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										30
									
								
								.github/workflows/ci.yml
									
									
									
									
										vendored
									
									
								
							| @@ -18,11 +18,13 @@ jobs: | ||||
|         with: | ||||
|           node-version: '18' | ||||
|           cache: 'yarn' | ||||
|           cache-dependency-path: yarn.lock | ||||
|           cache-dependency-path: packages/backend/yarn.lock | ||||
|       - run: echo "💡 The ${{ github.repository }} repository has been cloned to the runner." | ||||
|       - run: echo "🖥️ The workflow is now ready to test your code on the runner." | ||||
|       - run: yarn --frozen-lockfile | ||||
|       - run: cd packages/backend && yarn lint | ||||
|         working-directory: packages/backend | ||||
|       - run: yarn lint | ||||
|         working-directory: packages/backend | ||||
|       - run: echo "🍏 This job's status is ${{ job.status }}." | ||||
|   start-backend-server: | ||||
|     runs-on: ubuntu-latest | ||||
| @@ -35,11 +37,13 @@ jobs: | ||||
|         with: | ||||
|           node-version: '18' | ||||
|           cache: 'yarn' | ||||
|           cache-dependency-path: yarn.lock | ||||
|           cache-dependency-path: packages/backend/yarn.lock | ||||
|       - run: echo "💡 The ${{ github.repository }} repository has been cloned to the runner." | ||||
|       - run: echo "🖥️ The workflow is now ready to test your code on the runner." | ||||
|       - run: yarn --frozen-lockfile && yarn lerna bootstrap | ||||
|       - run: cd packages/backend && yarn start | ||||
|       - run: yarn --frozen-lockfile | ||||
|         working-directory: packages/backend | ||||
|       - run: yarn start | ||||
|         working-directory: packages/backend | ||||
|         env: | ||||
|           ENCRYPTION_KEY: sample_encryption_key | ||||
|           WEBHOOK_SECRET_KEY: sample_webhook_secret_key | ||||
| @@ -55,11 +59,13 @@ jobs: | ||||
|         with: | ||||
|           node-version: '18' | ||||
|           cache: 'yarn' | ||||
|           cache-dependency-path: yarn.lock | ||||
|           cache-dependency-path: packages/backend/yarn.lock | ||||
|       - run: echo "💡 The ${{ github.repository }} repository has been cloned to the runner." | ||||
|       - run: echo "🖥️ The workflow is now ready to test your code on the runner." | ||||
|       - run: yarn --frozen-lockfile && yarn lerna bootstrap | ||||
|       - run: cd packages/backend && yarn start:worker | ||||
|       - run: yarn --frozen-lockfile | ||||
|         working-directory: packages/backend | ||||
|       - run: yarn start:worker | ||||
|         working-directory: packages/backend | ||||
|         env: | ||||
|           ENCRYPTION_KEY: sample_encryption_key | ||||
|           WEBHOOK_SECRET_KEY: sample_webhook_secret_key | ||||
| @@ -75,11 +81,13 @@ jobs: | ||||
|         with: | ||||
|           node-version: '18' | ||||
|           cache: 'yarn' | ||||
|           cache-dependency-path: yarn.lock | ||||
|           cache-dependency-path: packages/web/yarn.lock | ||||
|       - run: echo "💡 The ${{ github.repository }} repository has been cloned to the runner." | ||||
|       - run: echo "🖥️ The workflow is now ready to test your code on the runner." | ||||
|       - run: yarn --frozen-lockfile && yarn lerna bootstrap | ||||
|       - run: cd packages/web && yarn build | ||||
|       - run: yarn --frozen-lockfile | ||||
|         working-directory: packages/web | ||||
|       - run: yarn build | ||||
|         working-directory: packages/web | ||||
|         env: | ||||
|           CI: false | ||||
|       - run: echo "🍏 This job's status is ${{ job.status }}." | ||||
|   | ||||
							
								
								
									
										27
									
								
								.github/workflows/playwright.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										27
									
								
								.github/workflows/playwright.yml
									
									
									
									
										vendored
									
									
								
							| @@ -3,12 +3,13 @@ on: | ||||
|   push: | ||||
|     branches: | ||||
|       - main | ||||
|   pull_request: | ||||
|     paths: | ||||
|       - 'packages/backend/**' | ||||
|       - 'packages/e2e-tests/**' | ||||
|       - 'packages/web/**' | ||||
|       - '!packages/backend/src/apps/**' | ||||
|   # TODO: Add pull request after optimizing the total excecution time of the test suite. | ||||
|   # pull_request: | ||||
|   #   paths: | ||||
|   #     - 'packages/backend/**' | ||||
|   #     - 'packages/e2e-tests/**' | ||||
|   #     - 'packages/web/**' | ||||
|   #     - '!packages/backend/src/apps/**' | ||||
|   workflow_dispatch: | ||||
|  | ||||
| env: | ||||
| @@ -58,13 +59,21 @@ jobs: | ||||
|       - uses: actions/setup-node@v3 | ||||
|         with: | ||||
|           node-version: 18 | ||||
|       - name: Install dependencies | ||||
|         run: yarn && yarn lerna bootstrap | ||||
|       - name: Install web dependencies | ||||
|         run: yarn | ||||
|         working-directory: ./packages/web | ||||
|       - name: Install backend dependencies | ||||
|         run: yarn | ||||
|         working-directory: ./packages/backend | ||||
|       - name: Install e2e-tests dependencies | ||||
|         run: yarn | ||||
|         working-directory: ./packages/e2e-tests | ||||
|       - name: Install Playwright Browsers | ||||
|         run: yarn playwright install --with-deps | ||||
|         working-directory: ./packages/e2e-tests | ||||
|       - name: Build Automatisch web | ||||
|         working-directory: ./packages/web | ||||
|         run: yarn build | ||||
|         working-directory: ./packages/web | ||||
|         env: | ||||
|           # Keep this until we clean up warnings in build processes | ||||
|           CI: false | ||||
|   | ||||
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -4,7 +4,6 @@ logs | ||||
| npm-debug.log* | ||||
| yarn-debug.log* | ||||
| yarn-error.log* | ||||
| lerna-debug.log* | ||||
| .pnpm-debug.log* | ||||
|  | ||||
| # Diagnostic reports (https://nodejs.org/api/report.html) | ||||
|   | ||||
| @@ -11,10 +11,12 @@ WORKDIR /automatisch | ||||
| # copy the app, note .dockerignore | ||||
| COPY . /automatisch | ||||
|  | ||||
| RUN yarn | ||||
| RUN cd packages/web && yarn | ||||
|  | ||||
| RUN cd packages/web && yarn build | ||||
|  | ||||
| RUN cd packages/backend && yarn --production | ||||
|  | ||||
| RUN \ | ||||
|   rm -rf /usr/local/share/.cache/ && \ | ||||
|   apk del build-dependencies | ||||
|   | ||||
							
								
								
									
										13
									
								
								lerna.json
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								lerna.json
									
									
									
									
									
								
							| @@ -1,13 +0,0 @@ | ||||
| { | ||||
|   "packages": [ | ||||
|     "packages/*" | ||||
|   ], | ||||
|   "version": "0.10.0", | ||||
|   "npmClient": "yarn", | ||||
|   "useWorkspaces": true, | ||||
|   "command": { | ||||
|     "add": { | ||||
|       "exact": true | ||||
|     } | ||||
|   } | ||||
| } | ||||
							
								
								
									
										32
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								package.json
									
									
									
									
									
								
							| @@ -1,32 +0,0 @@ | ||||
| { | ||||
|   "name": "@automatisch/root", | ||||
|   "license": "See LICENSE file", | ||||
|   "private": true, | ||||
|   "scripts": { | ||||
|     "start": "lerna run --stream --parallel --scope=@*/{web,backend} dev", | ||||
|     "start:web": "lerna run --stream --scope=@*/web dev", | ||||
|     "start:backend": "lerna run --stream --scope=@*/backend dev", | ||||
|     "build:docs": "cd ./packages/docs && yarn install && yarn build" | ||||
|   }, | ||||
|   "workspaces": { | ||||
|     "packages": [ | ||||
|       "packages/*" | ||||
|     ], | ||||
|     "nohoist": [ | ||||
|       "**/babel-loader", | ||||
|       "**/webpack", | ||||
|       "**/@automatisch/web", | ||||
|       "**/ajv" | ||||
|     ] | ||||
|   }, | ||||
|   "devDependencies": { | ||||
|     "eslint": "^8.13.0", | ||||
|     "eslint-config-prettier": "^8.3.0", | ||||
|     "eslint-plugin-prettier": "^4.0.0", | ||||
|     "lerna": "^4.0.0", | ||||
|     "prettier": "^2.5.1" | ||||
|   }, | ||||
|   "publishConfig": { | ||||
|     "access": "public" | ||||
|   } | ||||
| } | ||||
| @@ -12,6 +12,7 @@ | ||||
|     "pretest": "APP_ENV=test node ./test/setup/prepare-test-env.js", | ||||
|     "test": "APP_ENV=test vitest run", | ||||
|     "test:watch": "APP_ENV=test vitest watch", | ||||
|     "test:coverage": "yarn test --coverage", | ||||
|     "lint": "eslint .", | ||||
|     "db:create": "node ./bin/database/create.js", | ||||
|     "db:seed:user": "node ./bin/database/seed-user.js", | ||||
| @@ -23,6 +24,7 @@ | ||||
|   "dependencies": { | ||||
|     "@bull-board/express": "^3.10.1", | ||||
|     "@casl/ability": "^6.5.0", | ||||
|     "@faker-js/faker": "^9.2.0", | ||||
|     "@node-saml/passport-saml": "^4.0.4", | ||||
|     "@rudderstack/rudder-sdk-node": "^1.1.2", | ||||
|     "@sentry/node": "^7.42.0", | ||||
| @@ -36,6 +38,9 @@ | ||||
|     "crypto-js": "^4.1.1", | ||||
|     "debug": "~2.6.9", | ||||
|     "dotenv": "^10.0.0", | ||||
|     "eslint": "^8.13.0", | ||||
|     "eslint-config-prettier": "^8.3.0", | ||||
|     "eslint-plugin-prettier": "^4.0.0", | ||||
|     "express": "~4.18.2", | ||||
|     "express-async-errors": "^3.1.1", | ||||
|     "express-basic-auth": "^1.2.1", | ||||
| @@ -61,6 +66,7 @@ | ||||
|     "pg": "^8.7.1", | ||||
|     "php-serialize": "^4.0.2", | ||||
|     "pluralize": "^8.0.0", | ||||
|     "prettier": "^2.5.1", | ||||
|     "raw-body": "^2.5.2", | ||||
|     "showdown": "^2.1.0", | ||||
|     "uuid": "^9.0.1", | ||||
| @@ -92,10 +98,11 @@ | ||||
|     "url": "https://github.com/automatisch/automatisch/issues" | ||||
|   }, | ||||
|   "devDependencies": { | ||||
|     "@vitest/coverage-v8": "^2.1.5", | ||||
|     "node-gyp": "^10.1.0", | ||||
|     "nodemon": "^2.0.13", | ||||
|     "supertest": "^6.3.3", | ||||
|     "vitest": "^1.1.3" | ||||
|     "vitest": "^2.1.5" | ||||
|   }, | ||||
|   "publishConfig": { | ||||
|     "access": "public" | ||||
|   | ||||
| @@ -12,7 +12,7 @@ export default defineApp({ | ||||
|   apiBaseUrl: 'https://api.airtable.com', | ||||
|   iconUrl: '{BASE_URL}/apps/airtable/assets/favicon.svg', | ||||
|   authDocUrl: '{DOCS_URL}/apps/airtable/connection', | ||||
|   primaryColor: 'FFBF00', | ||||
|   primaryColor: '#FFBF00', | ||||
|   supportsConnections: true, | ||||
|   beforeRequest: [addAuthHeader], | ||||
|   auth, | ||||
|   | ||||
| @@ -12,7 +12,7 @@ export default defineApp({ | ||||
|   apiBaseUrl: 'https://cloud.appwrite.io', | ||||
|   iconUrl: '{BASE_URL}/apps/appwrite/assets/favicon.svg', | ||||
|   authDocUrl: '{DOCS_URL}/apps/appwrite/connection', | ||||
|   primaryColor: 'FD366E', | ||||
|   primaryColor: '#FD366E', | ||||
|   supportsConnections: true, | ||||
|   beforeRequest: [setBaseUrl, addAuthHeader], | ||||
|   auth, | ||||
|   | ||||
| @@ -12,7 +12,7 @@ export default defineApp({ | ||||
|   apiBaseUrl: '', | ||||
|   iconUrl: '{BASE_URL}/apps/azure-openai/assets/favicon.svg', | ||||
|   authDocUrl: '{DOCS_URL}/apps/azure-openai/connection', | ||||
|   primaryColor: '000000', | ||||
|   primaryColor: '#000000', | ||||
|   supportsConnections: true, | ||||
|   beforeRequest: [setBaseUrl, addAuthHeader], | ||||
|   auth, | ||||
|   | ||||
| @@ -11,7 +11,7 @@ export default defineApp({ | ||||
|   supportsConnections: true, | ||||
|   baseUrl: 'https://carbone.io', | ||||
|   apiBaseUrl: 'https://api.carbone.io', | ||||
|   primaryColor: '6f42c1', | ||||
|   primaryColor: '#6f42c1', | ||||
|   beforeRequest: [addAuthHeader], | ||||
|   auth, | ||||
|   actions, | ||||
|   | ||||
| @@ -12,8 +12,8 @@ export default defineApp({ | ||||
|   baseUrl: 'https://clickup.com', | ||||
|   apiBaseUrl: 'https://api.clickup.com/api', | ||||
|   iconUrl: '{BASE_URL}/apps/clickup/assets/favicon.svg', | ||||
|   authDocUrl: 'https://automatisch.io/docs/apps/clickup/connection', | ||||
|   primaryColor: 'FD71AF', | ||||
|   authDocUrl: '{DOCS_URL}/apps/clickup/connection', | ||||
|   primaryColor: '#FD71AF', | ||||
|   supportsConnections: true, | ||||
|   beforeRequest: [addAuthHeader], | ||||
|   auth, | ||||
|   | ||||
| @@ -8,7 +8,7 @@ export default defineApp({ | ||||
|   apiBaseUrl: '', | ||||
|   iconUrl: '{BASE_URL}/apps/code/assets/favicon.svg', | ||||
|   authDocUrl: '{DOCS_URL}/apps/code/connection', | ||||
|   primaryColor: '000000', | ||||
|   primaryColor: '#000000', | ||||
|   supportsConnections: false, | ||||
|   actions, | ||||
| }); | ||||
|   | ||||
| @@ -9,6 +9,6 @@ export default defineApp({ | ||||
|   supportsConnections: false, | ||||
|   baseUrl: '', | ||||
|   apiBaseUrl: '', | ||||
|   primaryColor: '001F52', | ||||
|   primaryColor: '#001F52', | ||||
|   actions, | ||||
| }); | ||||
|   | ||||
| @@ -9,6 +9,6 @@ export default defineApp({ | ||||
|   supportsConnections: false, | ||||
|   baseUrl: '', | ||||
|   apiBaseUrl: '', | ||||
|   primaryColor: '001F52', | ||||
|   primaryColor: '#001F52', | ||||
|   actions, | ||||
| }); | ||||
|   | ||||
| @@ -11,7 +11,7 @@ export default defineApp({ | ||||
|   supportsConnections: true, | ||||
|   baseUrl: 'https://deepl.com', | ||||
|   apiBaseUrl: 'https://api.deepl.com', | ||||
|   primaryColor: '0d2d45', | ||||
|   primaryColor: '#0d2d45', | ||||
|   beforeRequest: [addAuthHeader], | ||||
|   auth, | ||||
|   actions, | ||||
|   | ||||
| @@ -9,6 +9,6 @@ export default defineApp({ | ||||
|   supportsConnections: false, | ||||
|   baseUrl: '', | ||||
|   apiBaseUrl: '', | ||||
|   primaryColor: '001F52', | ||||
|   primaryColor: '#001F52', | ||||
|   actions, | ||||
| }); | ||||
|   | ||||
| @@ -14,7 +14,7 @@ export default defineApp({ | ||||
|   supportsConnections: true, | ||||
|   baseUrl: 'https://discord.com', | ||||
|   apiBaseUrl: 'https://discord.com/api', | ||||
|   primaryColor: '5865f2', | ||||
|   primaryColor: '#5865f2', | ||||
|   beforeRequest: [addAuthHeader], | ||||
|   auth, | ||||
|   dynamicData, | ||||
|   | ||||
| @@ -11,7 +11,7 @@ export default defineApp({ | ||||
|   apiBaseUrl: 'https://disqus.com/api', | ||||
|   iconUrl: '{BASE_URL}/apps/disqus/assets/favicon.svg', | ||||
|   authDocUrl: '{DOCS_URL}/apps/disqus/connection', | ||||
|   primaryColor: '2E9FFF', | ||||
|   primaryColor: '#2E9FFF', | ||||
|   supportsConnections: true, | ||||
|   beforeRequest: [addAuthHeader], | ||||
|   auth, | ||||
|   | ||||
| @@ -11,7 +11,7 @@ export default defineApp({ | ||||
|   supportsConnections: true, | ||||
|   baseUrl: 'https://dropbox.com', | ||||
|   apiBaseUrl: 'https://api.dropboxapi.com', | ||||
|   primaryColor: '0061ff', | ||||
|   primaryColor: '#0061ff', | ||||
|   beforeRequest: [addAuthHeader], | ||||
|   auth, | ||||
|   actions, | ||||
|   | ||||
| @@ -9,6 +9,6 @@ export default defineApp({ | ||||
|   supportsConnections: false, | ||||
|   baseUrl: '', | ||||
|   apiBaseUrl: '', | ||||
|   primaryColor: '001F52', | ||||
|   primaryColor: '#001F52', | ||||
|   actions, | ||||
| }); | ||||
|   | ||||
| @@ -10,7 +10,7 @@ export default defineApp({ | ||||
|   iconUrl: '{BASE_URL}/apps/flickr/assets/favicon.svg', | ||||
|   authDocUrl: '{DOCS_URL}/apps/flickr/connection', | ||||
|   docUrl: 'https://automatisch.io/docs/flickr', | ||||
|   primaryColor: '000000', | ||||
|   primaryColor: '#000000', | ||||
|   supportsConnections: true, | ||||
|   baseUrl: 'https://www.flickr.com/', | ||||
|   apiBaseUrl: 'https://www.flickr.com/services', | ||||
|   | ||||
| @@ -11,7 +11,7 @@ export default defineApp({ | ||||
|   supportsConnections: true, | ||||
|   baseUrl: 'https://flowers-software.com', | ||||
|   apiBaseUrl: 'https://webapp.flowers-software.com/api', | ||||
|   primaryColor: '02AFC7', | ||||
|   primaryColor: '#02AFC7', | ||||
|   beforeRequest: [addAuthHeader], | ||||
|   auth, | ||||
|   triggers, | ||||
|   | ||||
| @@ -10,7 +10,7 @@ export default defineApp({ | ||||
|   supportsConnections: false, | ||||
|   baseUrl: '', | ||||
|   apiBaseUrl: '', | ||||
|   primaryColor: '001F52', | ||||
|   primaryColor: '#001F52', | ||||
|   actions, | ||||
|   dynamicFields, | ||||
| }); | ||||
|   | ||||
| @@ -11,7 +11,7 @@ export default defineApp({ | ||||
|   apiBaseUrl: '', | ||||
|   iconUrl: '{BASE_URL}/apps/ghost/assets/favicon.svg', | ||||
|   authDocUrl: '{DOCS_URL}/apps/ghost/connection', | ||||
|   primaryColor: '15171A', | ||||
|   primaryColor: '#15171A', | ||||
|   supportsConnections: true, | ||||
|   beforeRequest: [setBaseUrl, addAuthHeader], | ||||
|   auth, | ||||
|   | ||||
| @@ -12,7 +12,7 @@ export default defineApp({ | ||||
|   apiBaseUrl: 'https://api.github.com', | ||||
|   iconUrl: '{BASE_URL}/apps/github/assets/favicon.svg', | ||||
|   authDocUrl: '{DOCS_URL}/apps/github/connection', | ||||
|   primaryColor: '000000', | ||||
|   primaryColor: '#000000', | ||||
|   supportsConnections: true, | ||||
|   beforeRequest: [addAuthHeader], | ||||
|   auth, | ||||
|   | ||||
| @@ -12,7 +12,7 @@ export default defineApp({ | ||||
|   apiBaseUrl: 'https://gitlab.com', | ||||
|   iconUrl: '{BASE_URL}/apps/gitlab/assets/favicon.svg', | ||||
|   authDocUrl: '{DOCS_URL}/apps/gitlab/connection', | ||||
|   primaryColor: 'FC6D26', | ||||
|   primaryColor: '#FC6D26', | ||||
|   supportsConnections: true, | ||||
|   beforeRequest: [setBaseUrl, addAuthHeader], | ||||
|   auth, | ||||
|   | ||||
| @@ -11,7 +11,7 @@ export default defineApp({ | ||||
|   apiBaseUrl: 'https://www.googleapis.com/calendar', | ||||
|   iconUrl: '{BASE_URL}/apps/google-calendar/assets/favicon.svg', | ||||
|   authDocUrl: '{DOCS_URL}/apps/google-calendar/connection', | ||||
|   primaryColor: '448AFF', | ||||
|   primaryColor: '#448AFF', | ||||
|   supportsConnections: true, | ||||
|   beforeRequest: [addAuthHeader], | ||||
|   auth, | ||||
|   | ||||
| @@ -11,7 +11,7 @@ export default defineApp({ | ||||
|   apiBaseUrl: 'https://www.googleapis.com/drive', | ||||
|   iconUrl: '{BASE_URL}/apps/google-drive/assets/favicon.svg', | ||||
|   authDocUrl: '{DOCS_URL}/apps/google-drive/connection', | ||||
|   primaryColor: '1FA463', | ||||
|   primaryColor: '#1FA463', | ||||
|   supportsConnections: true, | ||||
|   beforeRequest: [addAuthHeader], | ||||
|   auth, | ||||
|   | ||||
| @@ -11,7 +11,7 @@ export default defineApp({ | ||||
|   apiBaseUrl: 'https://forms.googleapis.com', | ||||
|   iconUrl: '{BASE_URL}/apps/google-forms/assets/favicon.svg', | ||||
|   authDocUrl: '{DOCS_URL}/apps/google-forms/connection', | ||||
|   primaryColor: '673AB7', | ||||
|   primaryColor: '#673AB7', | ||||
|   supportsConnections: true, | ||||
|   beforeRequest: [addAuthHeader], | ||||
|   auth, | ||||
|   | ||||
| @@ -13,7 +13,7 @@ export default defineApp({ | ||||
|   apiBaseUrl: 'https://sheets.googleapis.com', | ||||
|   iconUrl: '{BASE_URL}/apps/google-sheets/assets/favicon.svg', | ||||
|   authDocUrl: '{DOCS_URL}/apps/google-sheets/connection', | ||||
|   primaryColor: '0F9D58', | ||||
|   primaryColor: '#0F9D58', | ||||
|   supportsConnections: true, | ||||
|   beforeRequest: [addAuthHeader], | ||||
|   auth, | ||||
|   | ||||
| @@ -12,7 +12,7 @@ export default defineApp({ | ||||
|   apiBaseUrl: 'https://tasks.googleapis.com', | ||||
|   iconUrl: '{BASE_URL}/apps/google-tasks/assets/favicon.svg', | ||||
|   authDocUrl: '{DOCS_URL}/apps/google-tasks/connection', | ||||
|   primaryColor: '0066DA', | ||||
|   primaryColor: '#0066DA', | ||||
|   supportsConnections: true, | ||||
|   beforeRequest: [addAuthHeader], | ||||
|   auth, | ||||
|   | ||||
| @@ -11,7 +11,7 @@ export default defineApp({ | ||||
|   apiBaseUrl: 'https://app.tryhelix.ai', | ||||
|   iconUrl: '{BASE_URL}/apps/helix/assets/favicon.svg', | ||||
|   authDocUrl: '{DOCS_URL}/apps/helix/connection', | ||||
|   primaryColor: '000000', | ||||
|   primaryColor: '#000000', | ||||
|   supportsConnections: true, | ||||
|   beforeRequest: [setBaseUrl, addAuthHeader], | ||||
|   auth, | ||||
|   | ||||
| @@ -9,6 +9,6 @@ export default defineApp({ | ||||
|   supportsConnections: false, | ||||
|   baseUrl: '', | ||||
|   apiBaseUrl: '', | ||||
|   primaryColor: '000000', | ||||
|   primaryColor: '#000000', | ||||
|   actions, | ||||
| }); | ||||
|   | ||||
| @@ -11,7 +11,7 @@ export default defineApp({ | ||||
|   supportsConnections: true, | ||||
|   baseUrl: 'https://www.hubspot.com', | ||||
|   apiBaseUrl: 'https://api.hubapi.com', | ||||
|   primaryColor: 'F95C35', | ||||
|   primaryColor: '#F95C35', | ||||
|   beforeRequest: [addAuthHeader], | ||||
|   auth, | ||||
|   actions, | ||||
|   | ||||
| @@ -13,7 +13,7 @@ export default defineApp({ | ||||
|   apiBaseUrl: 'https://invoicing.co/api', | ||||
|   iconUrl: '{BASE_URL}/apps/invoice-ninja/assets/favicon.svg', | ||||
|   authDocUrl: '{DOCS_URL}/apps/invoice-ninja/connection', | ||||
|   primaryColor: '000000', | ||||
|   primaryColor: '#000000', | ||||
|   supportsConnections: true, | ||||
|   beforeRequest: [setBaseUrl, addAuthHeader], | ||||
|   auth, | ||||
|   | ||||
| @@ -9,11 +9,11 @@ export default defineApp({ | ||||
|   name: 'Jotform', | ||||
|   key: 'jotform', | ||||
|   iconUrl: '{BASE_URL}/apps/jotform/assets/favicon.svg', | ||||
|   authDocUrl: 'https://automatisch.io/docs/apps/jotform/connection', | ||||
|   authDocUrl: '{DOCS_URL}/apps/jotform/connection', | ||||
|   supportsConnections: true, | ||||
|   baseUrl: 'https://www.jotform.com', | ||||
|   apiBaseUrl: 'https://api.jotform.com', | ||||
|   primaryColor: 'FF6100', | ||||
|   primaryColor: '#FF6100', | ||||
|   beforeRequest: [setBaseUrl, addAuthHeader], | ||||
|   auth, | ||||
|   triggers, | ||||
|   | ||||
| @@ -12,8 +12,8 @@ export default defineApp({ | ||||
|   baseUrl: 'https://mailchimp.com', | ||||
|   apiBaseUrl: '', | ||||
|   iconUrl: '{BASE_URL}/apps/mailchimp/assets/favicon.svg', | ||||
|   authDocUrl: 'https://automatisch.io/docs/apps/mailchimp/connection', | ||||
|   primaryColor: '000000', | ||||
|   authDocUrl: '{DOCS_URL}/apps/mailchimp/connection', | ||||
|   primaryColor: '#000000', | ||||
|   supportsConnections: true, | ||||
|   beforeRequest: [setBaseUrl, addAuthHeader], | ||||
|   auth, | ||||
|   | ||||
| @@ -7,11 +7,11 @@ export default defineApp({ | ||||
|   name: 'MailerLite', | ||||
|   key: 'mailerlite', | ||||
|   iconUrl: '{BASE_URL}/apps/mailerlite/assets/favicon.svg', | ||||
|   authDocUrl: 'https://automatisch.io/docs/apps/mailerlite/connection', | ||||
|   authDocUrl: '{DOCS_URL}/apps/mailerlite/connection', | ||||
|   supportsConnections: true, | ||||
|   baseUrl: 'https://www.mailerlite.com', | ||||
|   apiBaseUrl: 'https://connect.mailerlite.com/api', | ||||
|   primaryColor: '09C269', | ||||
|   primaryColor: '#09C269', | ||||
|   beforeRequest: [addAuthHeader], | ||||
|   auth, | ||||
|   triggers, | ||||
|   | ||||
| @@ -13,7 +13,7 @@ export default defineApp({ | ||||
|   authDocUrl: '{DOCS_URL}/apps/mattermost/connection', | ||||
|   baseUrl: 'https://mattermost.com', | ||||
|   apiBaseUrl: '', // there is no cloud version of this app, user always need to provide address of own instance when creating connection | ||||
|   primaryColor: '4a154b', | ||||
|   primaryColor: '#4a154b', | ||||
|   supportsConnections: true, | ||||
|   beforeRequest: [setBaseUrl, addXRequestedWithHeader, addAuthHeader], | ||||
|   auth, | ||||
|   | ||||
| @@ -11,7 +11,7 @@ export default defineApp({ | ||||
|   apiBaseUrl: 'https://api.miro.com', | ||||
|   iconUrl: '{BASE_URL}/apps/miro/assets/favicon.svg', | ||||
|   authDocUrl: '{DOCS_URL}/apps/miro/connection', | ||||
|   primaryColor: 'F2CA02', | ||||
|   primaryColor: '#F2CA02', | ||||
|   supportsConnections: true, | ||||
|   beforeRequest: [addAuthHeader], | ||||
|   auth, | ||||
|   | ||||
| @@ -13,7 +13,7 @@ export default defineApp({ | ||||
|   apiBaseUrl: 'https://api.notion.com', | ||||
|   iconUrl: '{BASE_URL}/apps/notion/assets/favicon.svg', | ||||
|   authDocUrl: '{DOCS_URL}/apps/notion/connection', | ||||
|   primaryColor: '000000', | ||||
|   primaryColor: '#000000', | ||||
|   supportsConnections: true, | ||||
|   beforeRequest: [addAuthHeader, addNotionVersionHeader], | ||||
|   auth, | ||||
|   | ||||
| @@ -11,7 +11,7 @@ export default defineApp({ | ||||
|   supportsConnections: true, | ||||
|   baseUrl: 'https://ntfy.sh', | ||||
|   apiBaseUrl: 'https://ntfy.sh', | ||||
|   primaryColor: '56bda8', | ||||
|   primaryColor: '#56bda8', | ||||
|   beforeRequest: [addAuthHeader], | ||||
|   auth, | ||||
|   actions, | ||||
|   | ||||
| @@ -10,7 +10,7 @@ export default defineApp({ | ||||
|   supportsConnections: true, | ||||
|   baseUrl: 'https://odoo.com', | ||||
|   apiBaseUrl: '', | ||||
|   primaryColor: '9c5789', | ||||
|   primaryColor: '#9c5789', | ||||
|   auth, | ||||
|   actions, | ||||
| }); | ||||
|   | ||||
| @@ -11,7 +11,7 @@ export default defineApp({ | ||||
|   apiBaseUrl: 'https://api.openai.com', | ||||
|   iconUrl: '{BASE_URL}/apps/openai/assets/favicon.svg', | ||||
|   authDocUrl: '{DOCS_URL}/apps/openai/connection', | ||||
|   primaryColor: '000000', | ||||
|   primaryColor: '#000000', | ||||
|   supportsConnections: true, | ||||
|   beforeRequest: [addAuthHeader], | ||||
|   auth, | ||||
|   | ||||
| @@ -13,7 +13,7 @@ export default defineApp({ | ||||
|   apiBaseUrl: '', | ||||
|   iconUrl: '{BASE_URL}/apps/pipedrive/assets/favicon.svg', | ||||
|   authDocUrl: '{DOCS_URL}/apps/pipedrive/connection', | ||||
|   primaryColor: 'FFFFFF', | ||||
|   primaryColor: '#FFFFFF', | ||||
|   supportsConnections: true, | ||||
|   beforeRequest: [setBaseUrl, addAuthHeader], | ||||
|   auth, | ||||
|   | ||||
| @@ -12,7 +12,7 @@ export default defineApp({ | ||||
|   supportsConnections: true, | ||||
|   baseUrl: 'https://placetel.de', | ||||
|   apiBaseUrl: 'https://api.placetel.de', | ||||
|   primaryColor: '069dd9', | ||||
|   primaryColor: '#069dd9', | ||||
|   beforeRequest: [addAuthHeader], | ||||
|   auth, | ||||
|   triggers, | ||||
|   | ||||
| @@ -10,7 +10,7 @@ export default defineApp({ | ||||
|   supportsConnections: true, | ||||
|   baseUrl: '', | ||||
|   apiBaseUrl: '', | ||||
|   primaryColor: '336791', | ||||
|   primaryColor: '#336791', | ||||
|   auth, | ||||
|   actions, | ||||
| }); | ||||
|   | ||||
| @@ -10,7 +10,7 @@ export default defineApp({ | ||||
|   apiBaseUrl: 'https://api.pushover.net', | ||||
|   iconUrl: '{BASE_URL}/apps/pushover/assets/favicon.svg', | ||||
|   authDocUrl: '{DOCS_URL}/apps/pushover/connection', | ||||
|   primaryColor: '249DF1', | ||||
|   primaryColor: '#249DF1', | ||||
|   supportsConnections: true, | ||||
|   auth, | ||||
|   actions, | ||||
|   | ||||
| @@ -11,7 +11,7 @@ export default defineApp({ | ||||
|   apiBaseUrl: 'https://oauth.reddit.com', | ||||
|   iconUrl: '{BASE_URL}/apps/reddit/assets/favicon.svg', | ||||
|   authDocUrl: '{DOCS_URL}/apps/reddit/connection', | ||||
|   primaryColor: 'FF4500', | ||||
|   primaryColor: '#FF4500', | ||||
|   supportsConnections: true, | ||||
|   beforeRequest: [addAuthHeader], | ||||
|   auth, | ||||
|   | ||||
| @@ -11,7 +11,7 @@ export default defineApp({ | ||||
|   supportsConnections: true, | ||||
|   baseUrl: 'https://www.remove.bg', | ||||
|   apiBaseUrl: 'https://api.remove.bg/v1.0', | ||||
|   primaryColor: '55636c', | ||||
|   primaryColor: '#55636c', | ||||
|   beforeRequest: [addAuthHeader], | ||||
|   auth, | ||||
|   actions, | ||||
|   | ||||
| @@ -9,6 +9,6 @@ export default defineApp({ | ||||
|   supportsConnections: false, | ||||
|   baseUrl: '', | ||||
|   apiBaseUrl: '', | ||||
|   primaryColor: 'ff8800', | ||||
|   primaryColor: '#ff8800', | ||||
|   triggers, | ||||
| }); | ||||
|   | ||||
| @@ -13,7 +13,7 @@ export default defineApp({ | ||||
|   supportsConnections: true, | ||||
|   baseUrl: 'https://salesforce.com', | ||||
|   apiBaseUrl: '', | ||||
|   primaryColor: '00A1E0', | ||||
|   primaryColor: '#00A1E0', | ||||
|   beforeRequest: [addAuthHeader], | ||||
|   auth, | ||||
|   triggers, | ||||
|   | ||||
| @@ -9,7 +9,7 @@ export default defineApp({ | ||||
|   authDocUrl: '{DOCS_URL}/apps/scheduler/connection', | ||||
|   baseUrl: '', | ||||
|   apiBaseUrl: '', | ||||
|   primaryColor: '0059F7', | ||||
|   primaryColor: '#0059F7', | ||||
|   supportsConnections: false, | ||||
|   triggers, | ||||
| }); | ||||
|   | ||||
| @@ -12,7 +12,7 @@ export default defineApp({ | ||||
|   apiBaseUrl: '', | ||||
|   iconUrl: '{BASE_URL}/apps/self-hosted-llm/assets/favicon.svg', | ||||
|   authDocUrl: '{DOCS_URL}/apps/self-hosted-llm/connection', | ||||
|   primaryColor: '000000', | ||||
|   primaryColor: '#000000', | ||||
|   supportsConnections: true, | ||||
|   beforeRequest: [setBaseUrl, addAuthHeader], | ||||
|   auth, | ||||
|   | ||||
| @@ -13,7 +13,7 @@ export default defineApp({ | ||||
|   supportsConnections: true, | ||||
|   baseUrl: 'https://signalwire.com', | ||||
|   apiBaseUrl: '', | ||||
|   primaryColor: '044cf6', | ||||
|   primaryColor: '#044cf6', | ||||
|   beforeRequest: [addAuthHeader], | ||||
|   auth, | ||||
|   triggers, | ||||
|   | ||||
| @@ -13,7 +13,7 @@ export default defineApp({ | ||||
|   supportsConnections: true, | ||||
|   baseUrl: 'https://slack.com', | ||||
|   apiBaseUrl: 'https://slack.com/api', | ||||
|   primaryColor: '4a154b', | ||||
|   primaryColor: '#4a154b', | ||||
|   beforeRequest: [addAuthHeader], | ||||
|   auth, | ||||
|   actions, | ||||
|   | ||||
| @@ -10,7 +10,7 @@ export default defineApp({ | ||||
|   supportsConnections: true, | ||||
|   baseUrl: '', | ||||
|   apiBaseUrl: '', | ||||
|   primaryColor: '2DAAE1', | ||||
|   primaryColor: '#2DAAE1', | ||||
|   auth, | ||||
|   actions, | ||||
| }); | ||||
|   | ||||
| @@ -11,7 +11,7 @@ export default defineApp({ | ||||
|   supportsConnections: true, | ||||
|   baseUrl: 'https://spotify.com', | ||||
|   apiBaseUrl: 'https://api.spotify.com', | ||||
|   primaryColor: '000000', | ||||
|   primaryColor: '#000000', | ||||
|   beforeRequest: [addAuthHeader], | ||||
|   auth, | ||||
|   actions, | ||||
|   | ||||
| @@ -11,7 +11,7 @@ export default defineApp({ | ||||
|   supportsConnections: true, | ||||
|   baseUrl: 'https://www.strava.com', | ||||
|   apiBaseUrl: 'https://www.strava.com/api', | ||||
|   primaryColor: 'fc4c01', | ||||
|   primaryColor: '#fc4c01', | ||||
|   beforeRequest: [addAuthHeader], | ||||
|   auth, | ||||
|   actions, | ||||
|   | ||||
| @@ -11,7 +11,7 @@ export default defineApp({ | ||||
|   supportsConnections: true, | ||||
|   baseUrl: 'https://stripe.com', | ||||
|   apiBaseUrl: 'https://api.stripe.com', | ||||
|   primaryColor: '635bff', | ||||
|   primaryColor: '#635bff', | ||||
|   beforeRequest: [addAuthHeader], | ||||
|   auth, | ||||
|   triggers, | ||||
|   | ||||
| @@ -11,7 +11,7 @@ export default defineApp({ | ||||
|   supportsConnections: true, | ||||
|   baseUrl: 'https://telegram.org', | ||||
|   apiBaseUrl: 'https://api.telegram.org', | ||||
|   primaryColor: '2AABEE', | ||||
|   primaryColor: '#2AABEE', | ||||
|   beforeRequest: [addAuthHeader], | ||||
|   auth, | ||||
|   actions, | ||||
|   | ||||
| @@ -13,7 +13,7 @@ export default defineApp({ | ||||
|   supportsConnections: true, | ||||
|   baseUrl: 'https://todoist.com', | ||||
|   apiBaseUrl: 'https://api.todoist.com/rest/v2', | ||||
|   primaryColor: 'e44332', | ||||
|   primaryColor: '#e44332', | ||||
|   beforeRequest: [addAuthHeader], | ||||
|   auth, | ||||
|   triggers, | ||||
|   | ||||
| @@ -12,7 +12,7 @@ export default defineApp({ | ||||
|   iconUrl: '{BASE_URL}/apps/trello/assets/favicon.svg', | ||||
|   authDocUrl: '{DOCS_URL}/apps/trello/connection', | ||||
|   supportsConnections: true, | ||||
|   primaryColor: '0079bf', | ||||
|   primaryColor: '#0079bf', | ||||
|   beforeRequest: [addAuthHeader], | ||||
|   auth, | ||||
|   actions, | ||||
|   | ||||
| @@ -13,7 +13,7 @@ export default defineApp({ | ||||
|   supportsConnections: true, | ||||
|   baseUrl: 'https://twilio.com', | ||||
|   apiBaseUrl: 'https://api.twilio.com', | ||||
|   primaryColor: 'e1000f', | ||||
|   primaryColor: '#e1000f', | ||||
|   beforeRequest: [addAuthHeader], | ||||
|   auth, | ||||
|   triggers, | ||||
|   | ||||
| @@ -12,7 +12,7 @@ export default defineApp({ | ||||
|   supportsConnections: true, | ||||
|   baseUrl: 'https://twitter.com', | ||||
|   apiBaseUrl: 'https://api.twitter.com', | ||||
|   primaryColor: '1da1f2', | ||||
|   primaryColor: '#1da1f2', | ||||
|   beforeRequest: [addAuthHeader], | ||||
|   auth, | ||||
|   triggers, | ||||
|   | ||||
| @@ -12,7 +12,7 @@ export default defineApp({ | ||||
|   supportsConnections: true, | ||||
|   baseUrl: 'https://typeform.com', | ||||
|   apiBaseUrl: 'https://api.typeform.com', | ||||
|   primaryColor: '262627', | ||||
|   primaryColor: '#262627', | ||||
|   beforeRequest: [addAuthHeader], | ||||
|   auth, | ||||
|   triggers, | ||||
|   | ||||
| @@ -14,7 +14,7 @@ export default defineApp({ | ||||
|   supportsConnections: true, | ||||
|   baseUrl: '', | ||||
|   apiBaseUrl: '', | ||||
|   primaryColor: '39a86d', | ||||
|   primaryColor: '#39a86d', | ||||
|   beforeRequest: [setBaseUrl, addAuthHeader], | ||||
|   auth, | ||||
|   triggers, | ||||
|   | ||||
| @@ -10,7 +10,7 @@ export default defineApp({ | ||||
|   supportsConnections: false, | ||||
|   baseUrl: '', | ||||
|   apiBaseUrl: '', | ||||
|   primaryColor: '0059F7', | ||||
|   primaryColor: '#0059F7', | ||||
|   actions, | ||||
|   triggers, | ||||
| }); | ||||
|   | ||||
| @@ -8,7 +8,7 @@ export default { | ||||
|       key: 'instanceUrl', | ||||
|       label: 'WordPress instance URL', | ||||
|       type: 'string', | ||||
|       required: false, | ||||
|       required: true, | ||||
|       readOnly: false, | ||||
|       value: null, | ||||
|       placeholder: null, | ||||
|   | ||||
| @@ -13,7 +13,7 @@ export default defineApp({ | ||||
|   supportsConnections: true, | ||||
|   baseUrl: 'https://wordpress.com', | ||||
|   apiBaseUrl: '', | ||||
|   primaryColor: '464342', | ||||
|   primaryColor: '#464342', | ||||
|   beforeRequest: [setBaseUrl, addAuthHeader], | ||||
|   auth, | ||||
|   triggers, | ||||
|   | ||||
| @@ -11,7 +11,7 @@ export default defineApp({ | ||||
|   apiBaseUrl: 'https://api.xero.com', | ||||
|   iconUrl: '{BASE_URL}/apps/xero/assets/favicon.svg', | ||||
|   authDocUrl: '{DOCS_URL}/apps/xero/connection', | ||||
|   primaryColor: '13B5EA', | ||||
|   primaryColor: '#13B5EA', | ||||
|   supportsConnections: true, | ||||
|   beforeRequest: [addAuthHeader], | ||||
|   auth, | ||||
|   | ||||
| @@ -10,7 +10,7 @@ export default defineApp({ | ||||
|   apiBaseUrl: 'https://api.ynab.com/v1', | ||||
|   iconUrl: '{BASE_URL}/apps/you-need-a-budget/assets/favicon.svg', | ||||
|   authDocUrl: '{DOCS_URL}/apps/you-need-a-budget/connection', | ||||
|   primaryColor: '19223C', | ||||
|   primaryColor: '#19223C', | ||||
|   supportsConnections: true, | ||||
|   beforeRequest: [addAuthHeader], | ||||
|   auth, | ||||
|   | ||||
| @@ -10,7 +10,7 @@ export default defineApp({ | ||||
|   apiBaseUrl: 'https://www.googleapis.com/youtube', | ||||
|   iconUrl: '{BASE_URL}/apps/youtube/assets/favicon.svg', | ||||
|   authDocUrl: '{DOCS_URL}/apps/youtube/connection', | ||||
|   primaryColor: 'FF0000', | ||||
|   primaryColor: '#FF0000', | ||||
|   supportsConnections: true, | ||||
|   beforeRequest: [addAuthHeader], | ||||
|   auth, | ||||
|   | ||||
| @@ -12,7 +12,7 @@ export default defineApp({ | ||||
|   apiBaseUrl: '', | ||||
|   iconUrl: '{BASE_URL}/apps/zendesk/assets/favicon.svg', | ||||
|   authDocUrl: '{DOCS_URL}/apps/zendesk/connection', | ||||
|   primaryColor: '17494d', | ||||
|   primaryColor: '#17494d', | ||||
|   supportsConnections: true, | ||||
|   beforeRequest: [addAuthHeader], | ||||
|   auth, | ||||
|   | ||||
| @@ -52,7 +52,7 @@ const appConfig = { | ||||
|   isDev: appEnv === 'development', | ||||
|   isTest: appEnv === 'test', | ||||
|   isProd: appEnv === 'production', | ||||
|   version: '0.13.1', | ||||
|   version: '0.14.0', | ||||
|   postgresDatabase: process.env.POSTGRES_DATABASE || 'automatisch_development', | ||||
|   postgresSchema: process.env.POSTGRES_SCHEMA || 'public', | ||||
|   postgresPort: parseInt(process.env.POSTGRES_PORT || '5432'), | ||||
|   | ||||
| @@ -32,7 +32,7 @@ describe('POST /api/v1/access-tokens', () => { | ||||
|       }) | ||||
|       .expect(422); | ||||
|  | ||||
|     expect(response.body.errors.general).toEqual([ | ||||
|     expect(response.body.errors.general).toStrictEqual([ | ||||
|       'Incorrect email or password.', | ||||
|     ]); | ||||
|   }); | ||||
|   | ||||
| @@ -83,7 +83,7 @@ describe('POST /api/v1/admin/apps/:appKey/auth-clients', () => { | ||||
|       .send(appAuthClient) | ||||
|       .expect(422); | ||||
|  | ||||
|     expect(response.body.meta.type).toEqual('ModelValidation'); | ||||
|     expect(response.body.meta.type).toStrictEqual('ModelValidation'); | ||||
|     expect(response.body.errors).toMatchObject({ | ||||
|       name: ["must have required property 'name'"], | ||||
|       formattedAuthDefaults: [ | ||||
|   | ||||
| @@ -10,11 +10,11 @@ export default async (request, response) => { | ||||
| }; | ||||
|  | ||||
| const appConfigParams = (request) => { | ||||
|   const { allowCustomConnection, shared, disabled } = request.body; | ||||
|   const { customConnectionAllowed, shared, disabled } = request.body; | ||||
|  | ||||
|   return { | ||||
|     key: request.params.appKey, | ||||
|     allowCustomConnection, | ||||
|     customConnectionAllowed, | ||||
|     shared, | ||||
|     disabled, | ||||
|   }; | ||||
|   | ||||
| @@ -23,7 +23,7 @@ describe('POST /api/v1/admin/apps/:appKey/config', () => { | ||||
|  | ||||
|   it('should return created app config', async () => { | ||||
|     const appConfig = { | ||||
|       allowCustomConnection: true, | ||||
|       customConnectionAllowed: true, | ||||
|       shared: true, | ||||
|       disabled: false, | ||||
|     }; | ||||
| @@ -44,7 +44,7 @@ describe('POST /api/v1/admin/apps/:appKey/config', () => { | ||||
|   it('should return HTTP 422 for already existing app config', async () => { | ||||
|     const appConfig = { | ||||
|       key: 'gitlab', | ||||
|       allowCustomConnection: true, | ||||
|       customConnectionAllowed: true, | ||||
|       shared: true, | ||||
|       disabled: false, | ||||
|     }; | ||||
| @@ -59,7 +59,7 @@ describe('POST /api/v1/admin/apps/:appKey/config', () => { | ||||
|       }) | ||||
|       .expect(422); | ||||
|  | ||||
|     expect(response.body.meta.type).toEqual('UniqueViolationError'); | ||||
|     expect(response.body.meta.type).toStrictEqual('UniqueViolationError'); | ||||
|     expect(response.body.errors).toMatchObject({ | ||||
|       key: ["'key' must be unique."], | ||||
|     }); | ||||
|   | ||||
| @@ -32,7 +32,7 @@ describe('GET /api/v1/admin/apps/:appKey/auth-clients/:appAuthClientId', () => { | ||||
|       .expect(200); | ||||
|  | ||||
|     const expectedPayload = getAppAuthClientMock(currentAppAuthClient); | ||||
|     expect(response.body).toEqual(expectedPayload); | ||||
|     expect(response.body).toStrictEqual(expectedPayload); | ||||
|   }); | ||||
|  | ||||
|   it('should return not found response for not existing app auth client ID', async () => { | ||||
|   | ||||
| @@ -39,6 +39,6 @@ describe('GET /api/v1/admin/apps/:appKey/auth-clients', () => { | ||||
|       appAuthClientOne, | ||||
|     ]); | ||||
|  | ||||
|     expect(response.body).toEqual(expectedPayload); | ||||
|     expect(response.body).toStrictEqual(expectedPayload); | ||||
|   }); | ||||
| }); | ||||
|   | ||||
| @@ -8,16 +8,19 @@ export default async (request, response) => { | ||||
|     }) | ||||
|     .throwIfNotFound(); | ||||
|  | ||||
|   await appConfig.$query().patchAndFetch(appConfigParams(request)); | ||||
|   await appConfig.$query().patchAndFetch({ | ||||
|     ...appConfigParams(request), | ||||
|     key: request.params.appKey, | ||||
|   }); | ||||
|  | ||||
|   renderObject(response, appConfig); | ||||
| }; | ||||
|  | ||||
| const appConfigParams = (request) => { | ||||
|   const { allowCustomConnection, shared, disabled } = request.body; | ||||
|   const { customConnectionAllowed, shared, disabled } = request.body; | ||||
|  | ||||
|   return { | ||||
|     allowCustomConnection, | ||||
|     customConnectionAllowed, | ||||
|     shared, | ||||
|     disabled, | ||||
|   }; | ||||
|   | ||||
| @@ -24,7 +24,7 @@ describe('PATCH /api/v1/admin/apps/:appKey/config', () => { | ||||
|   it('should return updated app config', async () => { | ||||
|     const appConfig = { | ||||
|       key: 'gitlab', | ||||
|       allowCustomConnection: true, | ||||
|       customConnectionAllowed: true, | ||||
|       shared: true, | ||||
|       disabled: false, | ||||
|     }; | ||||
| @@ -34,7 +34,7 @@ describe('PATCH /api/v1/admin/apps/:appKey/config', () => { | ||||
|     const newAppConfigValues = { | ||||
|       shared: false, | ||||
|       disabled: true, | ||||
|       allowCustomConnection: false, | ||||
|       customConnectionAllowed: false, | ||||
|     }; | ||||
|  | ||||
|     const response = await request(app) | ||||
| @@ -55,7 +55,7 @@ describe('PATCH /api/v1/admin/apps/:appKey/config', () => { | ||||
|     const appConfig = { | ||||
|       shared: false, | ||||
|       disabled: true, | ||||
|       allowCustomConnection: false, | ||||
|       customConnectionAllowed: false, | ||||
|     }; | ||||
|  | ||||
|     await request(app) | ||||
| @@ -68,7 +68,7 @@ describe('PATCH /api/v1/admin/apps/:appKey/config', () => { | ||||
|   it('should return HTTP 422 for invalid app config data', async () => { | ||||
|     const appConfig = { | ||||
|       key: 'gitlab', | ||||
|       allowCustomConnection: true, | ||||
|       customConnectionAllowed: true, | ||||
|       shared: true, | ||||
|       disabled: false, | ||||
|     }; | ||||
| @@ -83,7 +83,7 @@ describe('PATCH /api/v1/admin/apps/:appKey/config', () => { | ||||
|       }) | ||||
|       .expect(422); | ||||
|  | ||||
|     expect(response.body.meta.type).toEqual('ModelValidation'); | ||||
|     expect(response.body.meta.type).toStrictEqual('ModelValidation'); | ||||
|     expect(response.body.errors).toMatchObject({ | ||||
|       disabled: ['must be boolean'], | ||||
|     }); | ||||
|   | ||||
| @@ -1,23 +1,28 @@ | ||||
| import pick from 'lodash/pick.js'; | ||||
| import { renderObject } from '../../../../../helpers/renderer.js'; | ||||
| import Config from '../../../../../models/config.js'; | ||||
|  | ||||
| export default async (request, response) => { | ||||
|   const config = configParams(request); | ||||
|  | ||||
|   await Config.batchUpdate(config); | ||||
|   const config = await Config.query().updateFirstOrInsert( | ||||
|     configParams(request) | ||||
|   ); | ||||
|  | ||||
|   renderObject(response, config); | ||||
| }; | ||||
|  | ||||
| const configParams = (request) => { | ||||
|   const updatableConfigurationKeys = [ | ||||
|     'logo.svgData', | ||||
|     'palette.primary.dark', | ||||
|     'palette.primary.light', | ||||
|     'palette.primary.main', | ||||
|     'title', | ||||
|   ]; | ||||
|   const { | ||||
|     logoSvgData, | ||||
|     palettePrimaryDark, | ||||
|     palettePrimaryLight, | ||||
|     palettePrimaryMain, | ||||
|     title, | ||||
|   } = request.body; | ||||
|  | ||||
|   return pick(request.body, updatableConfigurationKeys); | ||||
|   return { | ||||
|     logoSvgData, | ||||
|     palettePrimaryDark, | ||||
|     palettePrimaryLight, | ||||
|     palettePrimaryMain, | ||||
|     title, | ||||
|   }; | ||||
| }; | ||||
|   | ||||
| @@ -5,7 +5,7 @@ import app from '../../../../../app.js'; | ||||
| import createAuthTokenByUserId from '../../../../../helpers/create-auth-token-by-user-id.js'; | ||||
| import { createUser } from '../../../../../../test/factories/user.js'; | ||||
| import { createRole } from '../../../../../../test/factories/role.js'; | ||||
| import { createBulkConfig } from '../../../../../../test/factories/config.js'; | ||||
| import { updateConfig } from '../../../../../../test/factories/config.js'; | ||||
| import * as license from '../../../../../helpers/license.ee.js'; | ||||
|  | ||||
| describe('PATCH /api/v1/admin/config', () => { | ||||
| @@ -30,13 +30,13 @@ describe('PATCH /api/v1/admin/config', () => { | ||||
|  | ||||
|     const appConfig = { | ||||
|       title, | ||||
|       'palette.primary.main': palettePrimaryMain, | ||||
|       'palette.primary.dark': palettePrimaryDark, | ||||
|       'palette.primary.light': palettePrimaryLight, | ||||
|       'logo.svgData': logoSvgData, | ||||
|       palettePrimaryMain: palettePrimaryMain, | ||||
|       palettePrimaryDark: palettePrimaryDark, | ||||
|       palettePrimaryLight: palettePrimaryLight, | ||||
|       logoSvgData: logoSvgData, | ||||
|     }; | ||||
|  | ||||
|     await createBulkConfig(appConfig); | ||||
|     await updateConfig(appConfig); | ||||
|  | ||||
|     const newTitle = 'Updated title'; | ||||
|  | ||||
| @@ -50,8 +50,8 @@ describe('PATCH /api/v1/admin/config', () => { | ||||
|       .send(newConfigValues) | ||||
|       .expect(200); | ||||
|  | ||||
|     expect(response.body.data.title).toEqual(newTitle); | ||||
|     expect(response.body.meta.type).toEqual('Object'); | ||||
|     expect(response.body.data.title).toStrictEqual(newTitle); | ||||
|     expect(response.body.meta.type).toStrictEqual('Config'); | ||||
|   }); | ||||
|  | ||||
|   it('should return created config for unexisting config', async () => { | ||||
| @@ -67,8 +67,8 @@ describe('PATCH /api/v1/admin/config', () => { | ||||
|       .send(newConfigValues) | ||||
|       .expect(200); | ||||
|  | ||||
|     expect(response.body.data.title).toEqual(newTitle); | ||||
|     expect(response.body.meta.type).toEqual('Object'); | ||||
|     expect(response.body.data.title).toStrictEqual(newTitle); | ||||
|     expect(response.body.meta.type).toStrictEqual('Config'); | ||||
|   }); | ||||
|  | ||||
|   it('should return null for deleted config entry', async () => { | ||||
| @@ -83,6 +83,6 @@ describe('PATCH /api/v1/admin/config', () => { | ||||
|       .expect(200); | ||||
|  | ||||
|     expect(response.body.data.title).toBeNull(); | ||||
|     expect(response.body.meta.type).toEqual('Object'); | ||||
|     expect(response.body.meta.type).toStrictEqual('Config'); | ||||
|   }); | ||||
| }); | ||||
|   | ||||
| @@ -27,6 +27,6 @@ describe('GET /api/v1/admin/permissions/catalog', () => { | ||||
|  | ||||
|     const expectedPayload = await getPermissionsCatalogMock(); | ||||
|  | ||||
|     expect(response.body).toEqual(expectedPayload); | ||||
|     expect(response.body).toStrictEqual(expectedPayload); | ||||
|   }); | ||||
| }); | ||||
|   | ||||
| @@ -58,7 +58,7 @@ describe('POST /api/v1/admin/roles', () => { | ||||
|       ] | ||||
|     ); | ||||
|  | ||||
|     expect(response.body).toEqual(expectedPayload); | ||||
|     expect(response.body).toStrictEqual(expectedPayload); | ||||
|   }); | ||||
|  | ||||
|   it('should return unprocessable entity response for invalid role data', async () => { | ||||
|   | ||||
| @@ -92,21 +92,4 @@ describe('DELETE /api/v1/admin/roles/:roleId', () => { | ||||
|       }, | ||||
|     }); | ||||
|   }); | ||||
|  | ||||
|   it('should not delete role and permissions on unsuccessful response', async () => { | ||||
|     const role = await createRole(); | ||||
|     const permission = await createPermission({ roleId: role.id }); | ||||
|     await createUser({ roleId: role.id }); | ||||
|  | ||||
|     await request(app) | ||||
|       .delete(`/api/v1/admin/roles/${role.id}`) | ||||
|       .set('Authorization', token) | ||||
|       .expect(422); | ||||
|  | ||||
|     const refetchedRole = await role.$query(); | ||||
|     const refetchedPermission = await permission.$query(); | ||||
|  | ||||
|     expect(refetchedRole).toStrictEqual(role); | ||||
|     expect(refetchedPermission).toStrictEqual(permission); | ||||
|   }); | ||||
| }); | ||||
|   | ||||
| @@ -34,7 +34,7 @@ describe('GET /api/v1/admin/roles/:roleId', () => { | ||||
|       permissionTwo, | ||||
|     ]); | ||||
|  | ||||
|     expect(response.body).toEqual(expectedPayload); | ||||
|     expect(response.body).toStrictEqual(expectedPayload); | ||||
|   }); | ||||
|  | ||||
|   it('should return not found response for not existing role UUID', async () => { | ||||
|   | ||||
| @@ -28,6 +28,6 @@ describe('GET /api/v1/admin/roles', () => { | ||||
|  | ||||
|     const expectedPayload = await getRolesMock([roleOne, roleTwo]); | ||||
|  | ||||
|     expect(response.body).toEqual(expectedPayload); | ||||
|     expect(response.body).toStrictEqual(expectedPayload); | ||||
|   }); | ||||
| }); | ||||
|   | ||||
| @@ -7,7 +7,7 @@ export default async (request, response) => { | ||||
|     .throwIfNotFound(); | ||||
|  | ||||
|   const roleMappings = await samlAuthProvider | ||||
|     .$relatedQuery('samlAuthProvidersRoleMappings') | ||||
|     .$relatedQuery('roleMappings') | ||||
|     .orderBy('remote_role_name', 'asc'); | ||||
|  | ||||
|   renderObject(response, roleMappings); | ||||
|   | ||||
| @@ -46,6 +46,6 @@ describe('GET /api/v1/admin/saml-auth-providers/:samlAuthProviderId/role-mapping | ||||
|       roleMappingTwo, | ||||
|     ]); | ||||
|  | ||||
|     expect(response.body).toEqual(expectedPayload); | ||||
|     expect(response.body).toStrictEqual(expectedPayload); | ||||
|   }); | ||||
| }); | ||||
|   | ||||
| @@ -30,7 +30,7 @@ describe('GET /api/v1/admin/saml-auth-provider/:samlAuthProviderId', () => { | ||||
|  | ||||
|     const expectedPayload = await getSamlAuthProviderMock(samlAuthProvider); | ||||
|  | ||||
|     expect(response.body).toEqual(expectedPayload); | ||||
|     expect(response.body).toStrictEqual(expectedPayload); | ||||
|   }); | ||||
|  | ||||
|   it('should return not found response for not existing saml auth provider UUID', async () => { | ||||
|   | ||||
| @@ -34,6 +34,6 @@ describe('GET /api/v1/admin/saml-auth-providers', () => { | ||||
|       samlAuthProviderOne, | ||||
|     ]); | ||||
|  | ||||
|     expect(response.body).toEqual(expectedPayload); | ||||
|     expect(response.body).toStrictEqual(expectedPayload); | ||||
|   }); | ||||
| }); | ||||
|   | ||||
| @@ -8,15 +8,14 @@ export default async (request, response) => { | ||||
|     .findById(samlAuthProviderId) | ||||
|     .throwIfNotFound(); | ||||
|  | ||||
|   const samlAuthProvidersRoleMappings = | ||||
|     await samlAuthProvider.updateRoleMappings( | ||||
|       samlAuthProvidersRoleMappingsParams(request) | ||||
|   const roleMappings = await samlAuthProvider.updateRoleMappings( | ||||
|     roleMappingsParams(request) | ||||
|   ); | ||||
|  | ||||
|   renderObject(response, samlAuthProvidersRoleMappings); | ||||
|   renderObject(response, roleMappings); | ||||
| }; | ||||
|  | ||||
| const samlAuthProvidersRoleMappingsParams = (request) => { | ||||
| const roleMappingsParams = (request) => { | ||||
|   const roleMappings = request.body; | ||||
|  | ||||
|   return roleMappings.map(({ roleId, remoteRoleName }) => ({ | ||||
|   | ||||
| @@ -6,7 +6,7 @@ import createAuthTokenByUserId from '../../../../../helpers/create-auth-token-by | ||||
| import { createRole } from '../../../../../../test/factories/role.js'; | ||||
| import { createUser } from '../../../../../../test/factories/user.js'; | ||||
| import { createSamlAuthProvider } from '../../../../../../test/factories/saml-auth-provider.ee.js'; | ||||
| import { createSamlAuthProvidersRoleMapping } from '../../../../../../test/factories/saml-auth-providers-role-mapping.js'; | ||||
| import { createRoleMapping } from '../../../../../../test/factories/role-mapping.js'; | ||||
| import createRoleMappingsMock from '../../../../../../test/mocks/rest/api/v1/admin/saml-auth-providers/update-role-mappings.ee.js'; | ||||
| import * as license from '../../../../../helpers/license.ee.js'; | ||||
|  | ||||
| @@ -21,12 +21,12 @@ describe('PATCH /api/v1/admin/saml-auth-providers/:samlAuthProviderId/role-mappi | ||||
|  | ||||
|     samlAuthProvider = await createSamlAuthProvider(); | ||||
|  | ||||
|     await createSamlAuthProvidersRoleMapping({ | ||||
|     await createRoleMapping({ | ||||
|       samlAuthProviderId: samlAuthProvider.id, | ||||
|       remoteRoleName: 'Viewer', | ||||
|     }); | ||||
|  | ||||
|     await createSamlAuthProvidersRoleMapping({ | ||||
|     await createRoleMapping({ | ||||
|       samlAuthProviderId: samlAuthProvider.id, | ||||
|       remoteRoleName: 'Editor', | ||||
|     }); | ||||
| @@ -64,7 +64,7 @@ describe('PATCH /api/v1/admin/saml-auth-providers/:samlAuthProviderId/role-mappi | ||||
|  | ||||
|   it('should delete role mappings when given empty role mappings', async () => { | ||||
|     const existingRoleMappings = await samlAuthProvider.$relatedQuery( | ||||
|       'samlAuthProvidersRoleMappings' | ||||
|       'roleMappings' | ||||
|     ); | ||||
|  | ||||
|     expect(existingRoleMappings.length).toBe(2); | ||||
| @@ -149,34 +149,4 @@ describe('PATCH /api/v1/admin/saml-auth-providers/:samlAuthProviderId/role-mappi | ||||
|       .send(roleMappings) | ||||
|       .expect(404); | ||||
|   }); | ||||
|  | ||||
|   it('should not delete existing role mapping when error thrown', async () => { | ||||
|     const roleMappings = [ | ||||
|       { | ||||
|         roleId: userRole.id, | ||||
|         remoteRoleName: { | ||||
|           invalid: 'data', | ||||
|         }, | ||||
|       }, | ||||
|     ]; | ||||
|  | ||||
|     const roleMappingsBeforeRequest = await samlAuthProvider.$relatedQuery( | ||||
|       'samlAuthProvidersRoleMappings' | ||||
|     ); | ||||
|  | ||||
|     await request(app) | ||||
|       .patch( | ||||
|         `/api/v1/admin/saml-auth-providers/${samlAuthProvider.id}/role-mappings` | ||||
|       ) | ||||
|       .set('Authorization', token) | ||||
|       .send(roleMappings) | ||||
|       .expect(422); | ||||
|  | ||||
|     const roleMappingsAfterRequest = await samlAuthProvider.$relatedQuery( | ||||
|       'samlAuthProvidersRoleMappings' | ||||
|     ); | ||||
|  | ||||
|     expect(roleMappingsBeforeRequest).toStrictEqual(roleMappingsAfterRequest); | ||||
|     expect(roleMappingsAfterRequest.length).toBe(2); | ||||
|   }); | ||||
| }); | ||||
|   | ||||
| @@ -30,7 +30,7 @@ describe('GET /api/v1/admin/users/:userId', () => { | ||||
|       .expect(200); | ||||
|  | ||||
|     const expectedPayload = getUserMock(anotherUser, anotherUserRole); | ||||
|     expect(response.body).toEqual(expectedPayload); | ||||
|     expect(response.body).toStrictEqual(expectedPayload); | ||||
|   }); | ||||
|  | ||||
|   it('should return not found response for not existing user UUID', async () => { | ||||
|   | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user