Compare commits
	
		
			291 Commits
		
	
	
		
			dependabot
			...
			AUT-1351
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					0012c9fb59 | ||
| 
						 | 
					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
 | 
					WEB_PORT=3001
 | 
				
			||||||
 | 
					
 | 
				
			||||||
echo "Configuring backend environment variables..."
 | 
					echo "Configuring backend environment variables..."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cd packages/backend
 | 
					cd packages/backend
 | 
				
			||||||
 | 
					
 | 
				
			||||||
rm -rf .env
 | 
					rm -rf .env
 | 
				
			||||||
 | 
					
 | 
				
			||||||
echo "
 | 
					echo "
 | 
				
			||||||
PORT=$BACKEND_PORT
 | 
					PORT=$BACKEND_PORT
 | 
				
			||||||
WEB_APP_URL=http://localhost:$WEB_PORT
 | 
					WEB_APP_URL=http://localhost:$WEB_PORT
 | 
				
			||||||
@@ -21,24 +24,35 @@ WEBHOOK_SECRET_KEY=sample_webhook_secret_key
 | 
				
			|||||||
APP_SECRET_KEY=sample_app_secret_key
 | 
					APP_SECRET_KEY=sample_app_secret_key
 | 
				
			||||||
REDIS_HOST=redis
 | 
					REDIS_HOST=redis
 | 
				
			||||||
SERVE_WEB_APP_SEPARATELY=true" >> .env
 | 
					SERVE_WEB_APP_SEPARATELY=true" >> .env
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo "Installing backend dependencies..."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					yarn
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cd $CURRENT_DIR
 | 
					cd $CURRENT_DIR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
echo "Configuring web environment variables..."
 | 
					echo "Configuring web environment variables..."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cd packages/web
 | 
					cd packages/web
 | 
				
			||||||
 | 
					
 | 
				
			||||||
rm -rf .env
 | 
					rm -rf .env
 | 
				
			||||||
 | 
					
 | 
				
			||||||
echo "
 | 
					echo "
 | 
				
			||||||
PORT=$WEB_PORT
 | 
					PORT=$WEB_PORT
 | 
				
			||||||
REACT_APP_BACKEND_URL=http://localhost:$BACKEND_PORT
 | 
					REACT_APP_BACKEND_URL=http://localhost:$BACKEND_PORT
 | 
				
			||||||
" >> .env
 | 
					" >> .env
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo "Installing web dependencies..."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					yarn
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cd $CURRENT_DIR
 | 
					cd $CURRENT_DIR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
echo "Installing and linking dependencies..."
 | 
					 | 
				
			||||||
yarn
 | 
					 | 
				
			||||||
yarn lerna bootstrap
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
echo "Migrating database..."
 | 
					echo "Migrating database..."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cd packages/backend
 | 
					cd packages/backend
 | 
				
			||||||
 | 
					
 | 
				
			||||||
yarn db:migrate
 | 
					yarn db:migrate
 | 
				
			||||||
yarn db:seed:user
 | 
					yarn db:seed:user
 | 
				
			||||||
 | 
					
 | 
				
			||||||
echo "Done!"
 | 
					echo "Done!"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										9
									
								
								.github/workflows/backend.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								.github/workflows/backend.yml
									
									
									
									
										vendored
									
									
								
							@@ -41,8 +41,11 @@ jobs:
 | 
				
			|||||||
        with:
 | 
					        with:
 | 
				
			||||||
          node-version: 18
 | 
					          node-version: 18
 | 
				
			||||||
      - name: Install dependencies
 | 
					      - name: Install dependencies
 | 
				
			||||||
        run: cd packages/backend && yarn
 | 
					        run: yarn
 | 
				
			||||||
 | 
					        working-directory: packages/backend
 | 
				
			||||||
      - name: Copy .env-example.test file to .env.test
 | 
					      - 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
 | 
					      - 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:
 | 
					        with:
 | 
				
			||||||
          node-version: '18'
 | 
					          node-version: '18'
 | 
				
			||||||
          cache: 'yarn'
 | 
					          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 ${{ github.repository }} repository has been cloned to the runner."
 | 
				
			||||||
      - run: echo "🖥️ The workflow is now ready to test your code on the runner."
 | 
					      - run: echo "🖥️ The workflow is now ready to test your code on the runner."
 | 
				
			||||||
      - run: yarn --frozen-lockfile
 | 
					      - 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 }}."
 | 
					      - run: echo "🍏 This job's status is ${{ job.status }}."
 | 
				
			||||||
  start-backend-server:
 | 
					  start-backend-server:
 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
@@ -35,11 +37,13 @@ jobs:
 | 
				
			|||||||
        with:
 | 
					        with:
 | 
				
			||||||
          node-version: '18'
 | 
					          node-version: '18'
 | 
				
			||||||
          cache: 'yarn'
 | 
					          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 ${{ github.repository }} repository has been cloned to the runner."
 | 
				
			||||||
      - run: echo "🖥️ The workflow is now ready to test your code on the runner."
 | 
					      - run: echo "🖥️ The workflow is now ready to test your code on the runner."
 | 
				
			||||||
      - run: yarn --frozen-lockfile && yarn lerna bootstrap
 | 
					      - run: yarn --frozen-lockfile
 | 
				
			||||||
      - run: cd packages/backend && yarn start
 | 
					        working-directory: packages/backend
 | 
				
			||||||
 | 
					      - run: yarn start
 | 
				
			||||||
 | 
					        working-directory: packages/backend
 | 
				
			||||||
        env:
 | 
					        env:
 | 
				
			||||||
          ENCRYPTION_KEY: sample_encryption_key
 | 
					          ENCRYPTION_KEY: sample_encryption_key
 | 
				
			||||||
          WEBHOOK_SECRET_KEY: sample_webhook_secret_key
 | 
					          WEBHOOK_SECRET_KEY: sample_webhook_secret_key
 | 
				
			||||||
@@ -55,11 +59,13 @@ jobs:
 | 
				
			|||||||
        with:
 | 
					        with:
 | 
				
			||||||
          node-version: '18'
 | 
					          node-version: '18'
 | 
				
			||||||
          cache: 'yarn'
 | 
					          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 ${{ github.repository }} repository has been cloned to the runner."
 | 
				
			||||||
      - run: echo "🖥️ The workflow is now ready to test your code on the runner."
 | 
					      - run: echo "🖥️ The workflow is now ready to test your code on the runner."
 | 
				
			||||||
      - run: yarn --frozen-lockfile && yarn lerna bootstrap
 | 
					      - run: yarn --frozen-lockfile
 | 
				
			||||||
      - run: cd packages/backend && yarn start:worker
 | 
					        working-directory: packages/backend
 | 
				
			||||||
 | 
					      - run: yarn start:worker
 | 
				
			||||||
 | 
					        working-directory: packages/backend
 | 
				
			||||||
        env:
 | 
					        env:
 | 
				
			||||||
          ENCRYPTION_KEY: sample_encryption_key
 | 
					          ENCRYPTION_KEY: sample_encryption_key
 | 
				
			||||||
          WEBHOOK_SECRET_KEY: sample_webhook_secret_key
 | 
					          WEBHOOK_SECRET_KEY: sample_webhook_secret_key
 | 
				
			||||||
@@ -75,11 +81,13 @@ jobs:
 | 
				
			|||||||
        with:
 | 
					        with:
 | 
				
			||||||
          node-version: '18'
 | 
					          node-version: '18'
 | 
				
			||||||
          cache: 'yarn'
 | 
					          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 ${{ github.repository }} repository has been cloned to the runner."
 | 
				
			||||||
      - run: echo "🖥️ The workflow is now ready to test your code on the runner."
 | 
					      - run: echo "🖥️ The workflow is now ready to test your code on the runner."
 | 
				
			||||||
      - run: yarn --frozen-lockfile && yarn lerna bootstrap
 | 
					      - run: yarn --frozen-lockfile
 | 
				
			||||||
      - run: cd packages/web && yarn build
 | 
					        working-directory: packages/web
 | 
				
			||||||
 | 
					      - run: yarn build
 | 
				
			||||||
 | 
					        working-directory: packages/web
 | 
				
			||||||
        env:
 | 
					        env:
 | 
				
			||||||
          CI: false
 | 
					          CI: false
 | 
				
			||||||
      - run: echo "🍏 This job's status is ${{ job.status }}."
 | 
					      - run: echo "🍏 This job's status is ${{ job.status }}."
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										28
									
								
								.github/workflows/playwright.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										28
									
								
								.github/workflows/playwright.yml
									
									
									
									
										vendored
									
									
								
							@@ -3,12 +3,13 @@ on:
 | 
				
			|||||||
  push:
 | 
					  push:
 | 
				
			||||||
    branches:
 | 
					    branches:
 | 
				
			||||||
      - main
 | 
					      - main
 | 
				
			||||||
  pull_request:
 | 
					  # TODO: Add pull request after optimizing the total excecution time of the test suite.
 | 
				
			||||||
    paths:
 | 
					  # pull_request:
 | 
				
			||||||
      - 'packages/backend/**'
 | 
					  #   paths:
 | 
				
			||||||
      - 'packages/e2e-tests/**'
 | 
					  #     - 'packages/backend/**'
 | 
				
			||||||
      - 'packages/web/**'
 | 
					  #     - 'packages/e2e-tests/**'
 | 
				
			||||||
      - '!packages/backend/src/apps/**'
 | 
					  #     - 'packages/web/**'
 | 
				
			||||||
 | 
					  #     - '!packages/backend/src/apps/**'
 | 
				
			||||||
  workflow_dispatch:
 | 
					  workflow_dispatch:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
env:
 | 
					env:
 | 
				
			||||||
@@ -58,13 +59,21 @@ jobs:
 | 
				
			|||||||
      - uses: actions/setup-node@v3
 | 
					      - uses: actions/setup-node@v3
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
          node-version: 18
 | 
					          node-version: 18
 | 
				
			||||||
      - name: Install dependencies
 | 
					      - name: Install web dependencies
 | 
				
			||||||
        run: yarn && yarn lerna bootstrap
 | 
					        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
 | 
					      - name: Install Playwright Browsers
 | 
				
			||||||
        run: yarn playwright install --with-deps
 | 
					        run: yarn playwright install --with-deps
 | 
				
			||||||
 | 
					        working-directory: ./packages/e2e-tests
 | 
				
			||||||
      - name: Build Automatisch web
 | 
					      - name: Build Automatisch web
 | 
				
			||||||
        working-directory: ./packages/web
 | 
					 | 
				
			||||||
        run: yarn build
 | 
					        run: yarn build
 | 
				
			||||||
 | 
					        working-directory: ./packages/web
 | 
				
			||||||
        env:
 | 
					        env:
 | 
				
			||||||
          # Keep this until we clean up warnings in build processes
 | 
					          # Keep this until we clean up warnings in build processes
 | 
				
			||||||
          CI: false
 | 
					          CI: false
 | 
				
			||||||
@@ -105,6 +114,7 @@ jobs:
 | 
				
			|||||||
      - name: Run Playwright tests
 | 
					      - name: Run Playwright tests
 | 
				
			||||||
        working-directory: ./packages/e2e-tests
 | 
					        working-directory: ./packages/e2e-tests
 | 
				
			||||||
        env:
 | 
					        env:
 | 
				
			||||||
 | 
					          PORT: 3000
 | 
				
			||||||
          LOGIN_EMAIL: user@automatisch.io
 | 
					          LOGIN_EMAIL: user@automatisch.io
 | 
				
			||||||
          LOGIN_PASSWORD: sample
 | 
					          LOGIN_PASSWORD: sample
 | 
				
			||||||
          BASE_URL: http://localhost:3000
 | 
					          BASE_URL: http://localhost:3000
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -4,7 +4,6 @@ logs
 | 
				
			|||||||
npm-debug.log*
 | 
					npm-debug.log*
 | 
				
			||||||
yarn-debug.log*
 | 
					yarn-debug.log*
 | 
				
			||||||
yarn-error.log*
 | 
					yarn-error.log*
 | 
				
			||||||
lerna-debug.log*
 | 
					 | 
				
			||||||
.pnpm-debug.log*
 | 
					.pnpm-debug.log*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Diagnostic reports (https://nodejs.org/api/report.html)
 | 
					# Diagnostic reports (https://nodejs.org/api/report.html)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,10 +11,12 @@ WORKDIR /automatisch
 | 
				
			|||||||
# copy the app, note .dockerignore
 | 
					# copy the app, note .dockerignore
 | 
				
			||||||
COPY . /automatisch
 | 
					COPY . /automatisch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
RUN yarn
 | 
					RUN cd packages/web && yarn
 | 
				
			||||||
 | 
					
 | 
				
			||||||
RUN cd packages/web && yarn build
 | 
					RUN cd packages/web && yarn build
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RUN cd packages/backend && yarn --production
 | 
				
			||||||
 | 
					
 | 
				
			||||||
RUN \
 | 
					RUN \
 | 
				
			||||||
  rm -rf /usr/local/share/.cache/ && \
 | 
					  rm -rf /usr/local/share/.cache/ && \
 | 
				
			||||||
  apk del build-dependencies
 | 
					  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",
 | 
					    "pretest": "APP_ENV=test node ./test/setup/prepare-test-env.js",
 | 
				
			||||||
    "test": "APP_ENV=test vitest run",
 | 
					    "test": "APP_ENV=test vitest run",
 | 
				
			||||||
    "test:watch": "APP_ENV=test vitest watch",
 | 
					    "test:watch": "APP_ENV=test vitest watch",
 | 
				
			||||||
 | 
					    "test:coverage": "yarn test --coverage",
 | 
				
			||||||
    "lint": "eslint .",
 | 
					    "lint": "eslint .",
 | 
				
			||||||
    "db:create": "node ./bin/database/create.js",
 | 
					    "db:create": "node ./bin/database/create.js",
 | 
				
			||||||
    "db:seed:user": "node ./bin/database/seed-user.js",
 | 
					    "db:seed:user": "node ./bin/database/seed-user.js",
 | 
				
			||||||
@@ -23,6 +24,7 @@
 | 
				
			|||||||
  "dependencies": {
 | 
					  "dependencies": {
 | 
				
			||||||
    "@bull-board/express": "^3.10.1",
 | 
					    "@bull-board/express": "^3.10.1",
 | 
				
			||||||
    "@casl/ability": "^6.5.0",
 | 
					    "@casl/ability": "^6.5.0",
 | 
				
			||||||
 | 
					    "@faker-js/faker": "^9.2.0",
 | 
				
			||||||
    "@node-saml/passport-saml": "^4.0.4",
 | 
					    "@node-saml/passport-saml": "^4.0.4",
 | 
				
			||||||
    "@rudderstack/rudder-sdk-node": "^1.1.2",
 | 
					    "@rudderstack/rudder-sdk-node": "^1.1.2",
 | 
				
			||||||
    "@sentry/node": "^7.42.0",
 | 
					    "@sentry/node": "^7.42.0",
 | 
				
			||||||
@@ -36,7 +38,10 @@
 | 
				
			|||||||
    "crypto-js": "^4.1.1",
 | 
					    "crypto-js": "^4.1.1",
 | 
				
			||||||
    "debug": "~2.6.9",
 | 
					    "debug": "~2.6.9",
 | 
				
			||||||
    "dotenv": "^10.0.0",
 | 
					    "dotenv": "^10.0.0",
 | 
				
			||||||
    "express": "~4.20.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-async-errors": "^3.1.1",
 | 
				
			||||||
    "express-basic-auth": "^1.2.1",
 | 
					    "express-basic-auth": "^1.2.1",
 | 
				
			||||||
    "fast-xml-parser": "^4.0.11",
 | 
					    "fast-xml-parser": "^4.0.11",
 | 
				
			||||||
@@ -61,6 +66,7 @@
 | 
				
			|||||||
    "pg": "^8.7.1",
 | 
					    "pg": "^8.7.1",
 | 
				
			||||||
    "php-serialize": "^4.0.2",
 | 
					    "php-serialize": "^4.0.2",
 | 
				
			||||||
    "pluralize": "^8.0.0",
 | 
					    "pluralize": "^8.0.0",
 | 
				
			||||||
 | 
					    "prettier": "^2.5.1",
 | 
				
			||||||
    "raw-body": "^2.5.2",
 | 
					    "raw-body": "^2.5.2",
 | 
				
			||||||
    "showdown": "^2.1.0",
 | 
					    "showdown": "^2.1.0",
 | 
				
			||||||
    "uuid": "^9.0.1",
 | 
					    "uuid": "^9.0.1",
 | 
				
			||||||
@@ -92,10 +98,11 @@
 | 
				
			|||||||
    "url": "https://github.com/automatisch/automatisch/issues"
 | 
					    "url": "https://github.com/automatisch/automatisch/issues"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "devDependencies": {
 | 
					  "devDependencies": {
 | 
				
			||||||
 | 
					    "@vitest/coverage-v8": "^2.1.5",
 | 
				
			||||||
    "node-gyp": "^10.1.0",
 | 
					    "node-gyp": "^10.1.0",
 | 
				
			||||||
    "nodemon": "^2.0.13",
 | 
					    "nodemon": "^2.0.13",
 | 
				
			||||||
    "supertest": "^6.3.3",
 | 
					    "supertest": "^6.3.3",
 | 
				
			||||||
    "vitest": "^1.1.3"
 | 
					    "vitest": "^2.1.5"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "publishConfig": {
 | 
					  "publishConfig": {
 | 
				
			||||||
    "access": "public"
 | 
					    "access": "public"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,7 +12,7 @@ export default defineApp({
 | 
				
			|||||||
  apiBaseUrl: 'https://api.airtable.com',
 | 
					  apiBaseUrl: 'https://api.airtable.com',
 | 
				
			||||||
  iconUrl: '{BASE_URL}/apps/airtable/assets/favicon.svg',
 | 
					  iconUrl: '{BASE_URL}/apps/airtable/assets/favicon.svg',
 | 
				
			||||||
  authDocUrl: '{DOCS_URL}/apps/airtable/connection',
 | 
					  authDocUrl: '{DOCS_URL}/apps/airtable/connection',
 | 
				
			||||||
  primaryColor: 'FFBF00',
 | 
					  primaryColor: '#FFBF00',
 | 
				
			||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  beforeRequest: [addAuthHeader],
 | 
					  beforeRequest: [addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,7 +12,7 @@ export default defineApp({
 | 
				
			|||||||
  apiBaseUrl: 'https://cloud.appwrite.io',
 | 
					  apiBaseUrl: 'https://cloud.appwrite.io',
 | 
				
			||||||
  iconUrl: '{BASE_URL}/apps/appwrite/assets/favicon.svg',
 | 
					  iconUrl: '{BASE_URL}/apps/appwrite/assets/favicon.svg',
 | 
				
			||||||
  authDocUrl: '{DOCS_URL}/apps/appwrite/connection',
 | 
					  authDocUrl: '{DOCS_URL}/apps/appwrite/connection',
 | 
				
			||||||
  primaryColor: 'FD366E',
 | 
					  primaryColor: '#FD366E',
 | 
				
			||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  beforeRequest: [setBaseUrl, addAuthHeader],
 | 
					  beforeRequest: [setBaseUrl, addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,7 +12,7 @@ export default defineApp({
 | 
				
			|||||||
  apiBaseUrl: '',
 | 
					  apiBaseUrl: '',
 | 
				
			||||||
  iconUrl: '{BASE_URL}/apps/azure-openai/assets/favicon.svg',
 | 
					  iconUrl: '{BASE_URL}/apps/azure-openai/assets/favicon.svg',
 | 
				
			||||||
  authDocUrl: '{DOCS_URL}/apps/azure-openai/connection',
 | 
					  authDocUrl: '{DOCS_URL}/apps/azure-openai/connection',
 | 
				
			||||||
  primaryColor: '000000',
 | 
					  primaryColor: '#000000',
 | 
				
			||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  beforeRequest: [setBaseUrl, addAuthHeader],
 | 
					  beforeRequest: [setBaseUrl, addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,7 +11,7 @@ export default defineApp({
 | 
				
			|||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  baseUrl: 'https://carbone.io',
 | 
					  baseUrl: 'https://carbone.io',
 | 
				
			||||||
  apiBaseUrl: 'https://api.carbone.io',
 | 
					  apiBaseUrl: 'https://api.carbone.io',
 | 
				
			||||||
  primaryColor: '6f42c1',
 | 
					  primaryColor: '#6f42c1',
 | 
				
			||||||
  beforeRequest: [addAuthHeader],
 | 
					  beforeRequest: [addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
  actions,
 | 
					  actions,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,8 +12,8 @@ export default defineApp({
 | 
				
			|||||||
  baseUrl: 'https://clickup.com',
 | 
					  baseUrl: 'https://clickup.com',
 | 
				
			||||||
  apiBaseUrl: 'https://api.clickup.com/api',
 | 
					  apiBaseUrl: 'https://api.clickup.com/api',
 | 
				
			||||||
  iconUrl: '{BASE_URL}/apps/clickup/assets/favicon.svg',
 | 
					  iconUrl: '{BASE_URL}/apps/clickup/assets/favicon.svg',
 | 
				
			||||||
  authDocUrl: 'https://automatisch.io/docs/apps/clickup/connection',
 | 
					  authDocUrl: '{DOCS_URL}/apps/clickup/connection',
 | 
				
			||||||
  primaryColor: 'FD71AF',
 | 
					  primaryColor: '#FD71AF',
 | 
				
			||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  beforeRequest: [addAuthHeader],
 | 
					  beforeRequest: [addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,7 +8,7 @@ export default defineApp({
 | 
				
			|||||||
  apiBaseUrl: '',
 | 
					  apiBaseUrl: '',
 | 
				
			||||||
  iconUrl: '{BASE_URL}/apps/code/assets/favicon.svg',
 | 
					  iconUrl: '{BASE_URL}/apps/code/assets/favicon.svg',
 | 
				
			||||||
  authDocUrl: '{DOCS_URL}/apps/code/connection',
 | 
					  authDocUrl: '{DOCS_URL}/apps/code/connection',
 | 
				
			||||||
  primaryColor: '000000',
 | 
					  primaryColor: '#000000',
 | 
				
			||||||
  supportsConnections: false,
 | 
					  supportsConnections: false,
 | 
				
			||||||
  actions,
 | 
					  actions,
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,6 +9,6 @@ export default defineApp({
 | 
				
			|||||||
  supportsConnections: false,
 | 
					  supportsConnections: false,
 | 
				
			||||||
  baseUrl: '',
 | 
					  baseUrl: '',
 | 
				
			||||||
  apiBaseUrl: '',
 | 
					  apiBaseUrl: '',
 | 
				
			||||||
  primaryColor: '001F52',
 | 
					  primaryColor: '#001F52',
 | 
				
			||||||
  actions,
 | 
					  actions,
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,6 +9,6 @@ export default defineApp({
 | 
				
			|||||||
  supportsConnections: false,
 | 
					  supportsConnections: false,
 | 
				
			||||||
  baseUrl: '',
 | 
					  baseUrl: '',
 | 
				
			||||||
  apiBaseUrl: '',
 | 
					  apiBaseUrl: '',
 | 
				
			||||||
  primaryColor: '001F52',
 | 
					  primaryColor: '#001F52',
 | 
				
			||||||
  actions,
 | 
					  actions,
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,7 +11,7 @@ export default defineApp({
 | 
				
			|||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  baseUrl: 'https://deepl.com',
 | 
					  baseUrl: 'https://deepl.com',
 | 
				
			||||||
  apiBaseUrl: 'https://api.deepl.com',
 | 
					  apiBaseUrl: 'https://api.deepl.com',
 | 
				
			||||||
  primaryColor: '0d2d45',
 | 
					  primaryColor: '#0d2d45',
 | 
				
			||||||
  beforeRequest: [addAuthHeader],
 | 
					  beforeRequest: [addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
  actions,
 | 
					  actions,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,6 +9,6 @@ export default defineApp({
 | 
				
			|||||||
  supportsConnections: false,
 | 
					  supportsConnections: false,
 | 
				
			||||||
  baseUrl: '',
 | 
					  baseUrl: '',
 | 
				
			||||||
  apiBaseUrl: '',
 | 
					  apiBaseUrl: '',
 | 
				
			||||||
  primaryColor: '001F52',
 | 
					  primaryColor: '#001F52',
 | 
				
			||||||
  actions,
 | 
					  actions,
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,7 +14,7 @@ export default defineApp({
 | 
				
			|||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  baseUrl: 'https://discord.com',
 | 
					  baseUrl: 'https://discord.com',
 | 
				
			||||||
  apiBaseUrl: 'https://discord.com/api',
 | 
					  apiBaseUrl: 'https://discord.com/api',
 | 
				
			||||||
  primaryColor: '5865f2',
 | 
					  primaryColor: '#5865f2',
 | 
				
			||||||
  beforeRequest: [addAuthHeader],
 | 
					  beforeRequest: [addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
  dynamicData,
 | 
					  dynamicData,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,7 +11,7 @@ export default defineApp({
 | 
				
			|||||||
  apiBaseUrl: 'https://disqus.com/api',
 | 
					  apiBaseUrl: 'https://disqus.com/api',
 | 
				
			||||||
  iconUrl: '{BASE_URL}/apps/disqus/assets/favicon.svg',
 | 
					  iconUrl: '{BASE_URL}/apps/disqus/assets/favicon.svg',
 | 
				
			||||||
  authDocUrl: '{DOCS_URL}/apps/disqus/connection',
 | 
					  authDocUrl: '{DOCS_URL}/apps/disqus/connection',
 | 
				
			||||||
  primaryColor: '2E9FFF',
 | 
					  primaryColor: '#2E9FFF',
 | 
				
			||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  beforeRequest: [addAuthHeader],
 | 
					  beforeRequest: [addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,7 +11,7 @@ export default defineApp({
 | 
				
			|||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  baseUrl: 'https://dropbox.com',
 | 
					  baseUrl: 'https://dropbox.com',
 | 
				
			||||||
  apiBaseUrl: 'https://api.dropboxapi.com',
 | 
					  apiBaseUrl: 'https://api.dropboxapi.com',
 | 
				
			||||||
  primaryColor: '0061ff',
 | 
					  primaryColor: '#0061ff',
 | 
				
			||||||
  beforeRequest: [addAuthHeader],
 | 
					  beforeRequest: [addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
  actions,
 | 
					  actions,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,6 +9,6 @@ export default defineApp({
 | 
				
			|||||||
  supportsConnections: false,
 | 
					  supportsConnections: false,
 | 
				
			||||||
  baseUrl: '',
 | 
					  baseUrl: '',
 | 
				
			||||||
  apiBaseUrl: '',
 | 
					  apiBaseUrl: '',
 | 
				
			||||||
  primaryColor: '001F52',
 | 
					  primaryColor: '#001F52',
 | 
				
			||||||
  actions,
 | 
					  actions,
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,7 +10,7 @@ export default defineApp({
 | 
				
			|||||||
  iconUrl: '{BASE_URL}/apps/flickr/assets/favicon.svg',
 | 
					  iconUrl: '{BASE_URL}/apps/flickr/assets/favicon.svg',
 | 
				
			||||||
  authDocUrl: '{DOCS_URL}/apps/flickr/connection',
 | 
					  authDocUrl: '{DOCS_URL}/apps/flickr/connection',
 | 
				
			||||||
  docUrl: 'https://automatisch.io/docs/flickr',
 | 
					  docUrl: 'https://automatisch.io/docs/flickr',
 | 
				
			||||||
  primaryColor: '000000',
 | 
					  primaryColor: '#000000',
 | 
				
			||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  baseUrl: 'https://www.flickr.com/',
 | 
					  baseUrl: 'https://www.flickr.com/',
 | 
				
			||||||
  apiBaseUrl: 'https://www.flickr.com/services',
 | 
					  apiBaseUrl: 'https://www.flickr.com/services',
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,7 +11,7 @@ export default defineApp({
 | 
				
			|||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  baseUrl: 'https://flowers-software.com',
 | 
					  baseUrl: 'https://flowers-software.com',
 | 
				
			||||||
  apiBaseUrl: 'https://webapp.flowers-software.com/api',
 | 
					  apiBaseUrl: 'https://webapp.flowers-software.com/api',
 | 
				
			||||||
  primaryColor: '02AFC7',
 | 
					  primaryColor: '#02AFC7',
 | 
				
			||||||
  beforeRequest: [addAuthHeader],
 | 
					  beforeRequest: [addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
  triggers,
 | 
					  triggers,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,7 +10,7 @@ export default defineApp({
 | 
				
			|||||||
  supportsConnections: false,
 | 
					  supportsConnections: false,
 | 
				
			||||||
  baseUrl: '',
 | 
					  baseUrl: '',
 | 
				
			||||||
  apiBaseUrl: '',
 | 
					  apiBaseUrl: '',
 | 
				
			||||||
  primaryColor: '001F52',
 | 
					  primaryColor: '#001F52',
 | 
				
			||||||
  actions,
 | 
					  actions,
 | 
				
			||||||
  dynamicFields,
 | 
					  dynamicFields,
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,7 +11,7 @@ export default defineApp({
 | 
				
			|||||||
  apiBaseUrl: '',
 | 
					  apiBaseUrl: '',
 | 
				
			||||||
  iconUrl: '{BASE_URL}/apps/ghost/assets/favicon.svg',
 | 
					  iconUrl: '{BASE_URL}/apps/ghost/assets/favicon.svg',
 | 
				
			||||||
  authDocUrl: '{DOCS_URL}/apps/ghost/connection',
 | 
					  authDocUrl: '{DOCS_URL}/apps/ghost/connection',
 | 
				
			||||||
  primaryColor: '15171A',
 | 
					  primaryColor: '#15171A',
 | 
				
			||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  beforeRequest: [setBaseUrl, addAuthHeader],
 | 
					  beforeRequest: [setBaseUrl, addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,7 +12,7 @@ export default defineApp({
 | 
				
			|||||||
  apiBaseUrl: 'https://api.github.com',
 | 
					  apiBaseUrl: 'https://api.github.com',
 | 
				
			||||||
  iconUrl: '{BASE_URL}/apps/github/assets/favicon.svg',
 | 
					  iconUrl: '{BASE_URL}/apps/github/assets/favicon.svg',
 | 
				
			||||||
  authDocUrl: '{DOCS_URL}/apps/github/connection',
 | 
					  authDocUrl: '{DOCS_URL}/apps/github/connection',
 | 
				
			||||||
  primaryColor: '000000',
 | 
					  primaryColor: '#000000',
 | 
				
			||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  beforeRequest: [addAuthHeader],
 | 
					  beforeRequest: [addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,7 +12,7 @@ export default defineApp({
 | 
				
			|||||||
  apiBaseUrl: 'https://gitlab.com',
 | 
					  apiBaseUrl: 'https://gitlab.com',
 | 
				
			||||||
  iconUrl: '{BASE_URL}/apps/gitlab/assets/favicon.svg',
 | 
					  iconUrl: '{BASE_URL}/apps/gitlab/assets/favicon.svg',
 | 
				
			||||||
  authDocUrl: '{DOCS_URL}/apps/gitlab/connection',
 | 
					  authDocUrl: '{DOCS_URL}/apps/gitlab/connection',
 | 
				
			||||||
  primaryColor: 'FC6D26',
 | 
					  primaryColor: '#FC6D26',
 | 
				
			||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  beforeRequest: [setBaseUrl, addAuthHeader],
 | 
					  beforeRequest: [setBaseUrl, addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,7 +11,7 @@ export default defineApp({
 | 
				
			|||||||
  apiBaseUrl: 'https://www.googleapis.com/calendar',
 | 
					  apiBaseUrl: 'https://www.googleapis.com/calendar',
 | 
				
			||||||
  iconUrl: '{BASE_URL}/apps/google-calendar/assets/favicon.svg',
 | 
					  iconUrl: '{BASE_URL}/apps/google-calendar/assets/favicon.svg',
 | 
				
			||||||
  authDocUrl: '{DOCS_URL}/apps/google-calendar/connection',
 | 
					  authDocUrl: '{DOCS_URL}/apps/google-calendar/connection',
 | 
				
			||||||
  primaryColor: '448AFF',
 | 
					  primaryColor: '#448AFF',
 | 
				
			||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  beforeRequest: [addAuthHeader],
 | 
					  beforeRequest: [addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,7 +11,7 @@ export default defineApp({
 | 
				
			|||||||
  apiBaseUrl: 'https://www.googleapis.com/drive',
 | 
					  apiBaseUrl: 'https://www.googleapis.com/drive',
 | 
				
			||||||
  iconUrl: '{BASE_URL}/apps/google-drive/assets/favicon.svg',
 | 
					  iconUrl: '{BASE_URL}/apps/google-drive/assets/favicon.svg',
 | 
				
			||||||
  authDocUrl: '{DOCS_URL}/apps/google-drive/connection',
 | 
					  authDocUrl: '{DOCS_URL}/apps/google-drive/connection',
 | 
				
			||||||
  primaryColor: '1FA463',
 | 
					  primaryColor: '#1FA463',
 | 
				
			||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  beforeRequest: [addAuthHeader],
 | 
					  beforeRequest: [addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,7 +11,7 @@ export default defineApp({
 | 
				
			|||||||
  apiBaseUrl: 'https://forms.googleapis.com',
 | 
					  apiBaseUrl: 'https://forms.googleapis.com',
 | 
				
			||||||
  iconUrl: '{BASE_URL}/apps/google-forms/assets/favicon.svg',
 | 
					  iconUrl: '{BASE_URL}/apps/google-forms/assets/favicon.svg',
 | 
				
			||||||
  authDocUrl: '{DOCS_URL}/apps/google-forms/connection',
 | 
					  authDocUrl: '{DOCS_URL}/apps/google-forms/connection',
 | 
				
			||||||
  primaryColor: '673AB7',
 | 
					  primaryColor: '#673AB7',
 | 
				
			||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  beforeRequest: [addAuthHeader],
 | 
					  beforeRequest: [addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,7 +13,7 @@ export default defineApp({
 | 
				
			|||||||
  apiBaseUrl: 'https://sheets.googleapis.com',
 | 
					  apiBaseUrl: 'https://sheets.googleapis.com',
 | 
				
			||||||
  iconUrl: '{BASE_URL}/apps/google-sheets/assets/favicon.svg',
 | 
					  iconUrl: '{BASE_URL}/apps/google-sheets/assets/favicon.svg',
 | 
				
			||||||
  authDocUrl: '{DOCS_URL}/apps/google-sheets/connection',
 | 
					  authDocUrl: '{DOCS_URL}/apps/google-sheets/connection',
 | 
				
			||||||
  primaryColor: '0F9D58',
 | 
					  primaryColor: '#0F9D58',
 | 
				
			||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  beforeRequest: [addAuthHeader],
 | 
					  beforeRequest: [addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,7 +12,7 @@ export default defineApp({
 | 
				
			|||||||
  apiBaseUrl: 'https://tasks.googleapis.com',
 | 
					  apiBaseUrl: 'https://tasks.googleapis.com',
 | 
				
			||||||
  iconUrl: '{BASE_URL}/apps/google-tasks/assets/favicon.svg',
 | 
					  iconUrl: '{BASE_URL}/apps/google-tasks/assets/favicon.svg',
 | 
				
			||||||
  authDocUrl: '{DOCS_URL}/apps/google-tasks/connection',
 | 
					  authDocUrl: '{DOCS_URL}/apps/google-tasks/connection',
 | 
				
			||||||
  primaryColor: '0066DA',
 | 
					  primaryColor: '#0066DA',
 | 
				
			||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  beforeRequest: [addAuthHeader],
 | 
					  beforeRequest: [addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,7 +11,7 @@ export default defineApp({
 | 
				
			|||||||
  apiBaseUrl: 'https://app.tryhelix.ai',
 | 
					  apiBaseUrl: 'https://app.tryhelix.ai',
 | 
				
			||||||
  iconUrl: '{BASE_URL}/apps/helix/assets/favicon.svg',
 | 
					  iconUrl: '{BASE_URL}/apps/helix/assets/favicon.svg',
 | 
				
			||||||
  authDocUrl: '{DOCS_URL}/apps/helix/connection',
 | 
					  authDocUrl: '{DOCS_URL}/apps/helix/connection',
 | 
				
			||||||
  primaryColor: '000000',
 | 
					  primaryColor: '#000000',
 | 
				
			||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  beforeRequest: [setBaseUrl, addAuthHeader],
 | 
					  beforeRequest: [setBaseUrl, addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,6 +9,6 @@ export default defineApp({
 | 
				
			|||||||
  supportsConnections: false,
 | 
					  supportsConnections: false,
 | 
				
			||||||
  baseUrl: '',
 | 
					  baseUrl: '',
 | 
				
			||||||
  apiBaseUrl: '',
 | 
					  apiBaseUrl: '',
 | 
				
			||||||
  primaryColor: '000000',
 | 
					  primaryColor: '#000000',
 | 
				
			||||||
  actions,
 | 
					  actions,
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,7 +11,7 @@ export default defineApp({
 | 
				
			|||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  baseUrl: 'https://www.hubspot.com',
 | 
					  baseUrl: 'https://www.hubspot.com',
 | 
				
			||||||
  apiBaseUrl: 'https://api.hubapi.com',
 | 
					  apiBaseUrl: 'https://api.hubapi.com',
 | 
				
			||||||
  primaryColor: 'F95C35',
 | 
					  primaryColor: '#F95C35',
 | 
				
			||||||
  beforeRequest: [addAuthHeader],
 | 
					  beforeRequest: [addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
  actions,
 | 
					  actions,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,7 +13,7 @@ export default defineApp({
 | 
				
			|||||||
  apiBaseUrl: 'https://invoicing.co/api',
 | 
					  apiBaseUrl: 'https://invoicing.co/api',
 | 
				
			||||||
  iconUrl: '{BASE_URL}/apps/invoice-ninja/assets/favicon.svg',
 | 
					  iconUrl: '{BASE_URL}/apps/invoice-ninja/assets/favicon.svg',
 | 
				
			||||||
  authDocUrl: '{DOCS_URL}/apps/invoice-ninja/connection',
 | 
					  authDocUrl: '{DOCS_URL}/apps/invoice-ninja/connection',
 | 
				
			||||||
  primaryColor: '000000',
 | 
					  primaryColor: '#000000',
 | 
				
			||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  beforeRequest: [setBaseUrl, addAuthHeader],
 | 
					  beforeRequest: [setBaseUrl, addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,11 +9,11 @@ export default defineApp({
 | 
				
			|||||||
  name: 'Jotform',
 | 
					  name: 'Jotform',
 | 
				
			||||||
  key: 'jotform',
 | 
					  key: 'jotform',
 | 
				
			||||||
  iconUrl: '{BASE_URL}/apps/jotform/assets/favicon.svg',
 | 
					  iconUrl: '{BASE_URL}/apps/jotform/assets/favicon.svg',
 | 
				
			||||||
  authDocUrl: 'https://automatisch.io/docs/apps/jotform/connection',
 | 
					  authDocUrl: '{DOCS_URL}/apps/jotform/connection',
 | 
				
			||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  baseUrl: 'https://www.jotform.com',
 | 
					  baseUrl: 'https://www.jotform.com',
 | 
				
			||||||
  apiBaseUrl: 'https://api.jotform.com',
 | 
					  apiBaseUrl: 'https://api.jotform.com',
 | 
				
			||||||
  primaryColor: 'FF6100',
 | 
					  primaryColor: '#FF6100',
 | 
				
			||||||
  beforeRequest: [setBaseUrl, addAuthHeader],
 | 
					  beforeRequest: [setBaseUrl, addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
  triggers,
 | 
					  triggers,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,8 +12,8 @@ export default defineApp({
 | 
				
			|||||||
  baseUrl: 'https://mailchimp.com',
 | 
					  baseUrl: 'https://mailchimp.com',
 | 
				
			||||||
  apiBaseUrl: '',
 | 
					  apiBaseUrl: '',
 | 
				
			||||||
  iconUrl: '{BASE_URL}/apps/mailchimp/assets/favicon.svg',
 | 
					  iconUrl: '{BASE_URL}/apps/mailchimp/assets/favicon.svg',
 | 
				
			||||||
  authDocUrl: 'https://automatisch.io/docs/apps/mailchimp/connection',
 | 
					  authDocUrl: '{DOCS_URL}/apps/mailchimp/connection',
 | 
				
			||||||
  primaryColor: '000000',
 | 
					  primaryColor: '#000000',
 | 
				
			||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  beforeRequest: [setBaseUrl, addAuthHeader],
 | 
					  beforeRequest: [setBaseUrl, addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,11 +7,11 @@ export default defineApp({
 | 
				
			|||||||
  name: 'MailerLite',
 | 
					  name: 'MailerLite',
 | 
				
			||||||
  key: 'mailerlite',
 | 
					  key: 'mailerlite',
 | 
				
			||||||
  iconUrl: '{BASE_URL}/apps/mailerlite/assets/favicon.svg',
 | 
					  iconUrl: '{BASE_URL}/apps/mailerlite/assets/favicon.svg',
 | 
				
			||||||
  authDocUrl: 'https://automatisch.io/docs/apps/mailerlite/connection',
 | 
					  authDocUrl: '{DOCS_URL}/apps/mailerlite/connection',
 | 
				
			||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  baseUrl: 'https://www.mailerlite.com',
 | 
					  baseUrl: 'https://www.mailerlite.com',
 | 
				
			||||||
  apiBaseUrl: 'https://connect.mailerlite.com/api',
 | 
					  apiBaseUrl: 'https://connect.mailerlite.com/api',
 | 
				
			||||||
  primaryColor: '09C269',
 | 
					  primaryColor: '#09C269',
 | 
				
			||||||
  beforeRequest: [addAuthHeader],
 | 
					  beforeRequest: [addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
  triggers,
 | 
					  triggers,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,7 +13,7 @@ export default defineApp({
 | 
				
			|||||||
  authDocUrl: '{DOCS_URL}/apps/mattermost/connection',
 | 
					  authDocUrl: '{DOCS_URL}/apps/mattermost/connection',
 | 
				
			||||||
  baseUrl: 'https://mattermost.com',
 | 
					  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
 | 
					  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,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  beforeRequest: [setBaseUrl, addXRequestedWithHeader, addAuthHeader],
 | 
					  beforeRequest: [setBaseUrl, addXRequestedWithHeader, addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,7 +11,7 @@ export default defineApp({
 | 
				
			|||||||
  apiBaseUrl: 'https://api.miro.com',
 | 
					  apiBaseUrl: 'https://api.miro.com',
 | 
				
			||||||
  iconUrl: '{BASE_URL}/apps/miro/assets/favicon.svg',
 | 
					  iconUrl: '{BASE_URL}/apps/miro/assets/favicon.svg',
 | 
				
			||||||
  authDocUrl: '{DOCS_URL}/apps/miro/connection',
 | 
					  authDocUrl: '{DOCS_URL}/apps/miro/connection',
 | 
				
			||||||
  primaryColor: 'F2CA02',
 | 
					  primaryColor: '#F2CA02',
 | 
				
			||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  beforeRequest: [addAuthHeader],
 | 
					  beforeRequest: [addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,7 +13,7 @@ export default defineApp({
 | 
				
			|||||||
  apiBaseUrl: 'https://api.notion.com',
 | 
					  apiBaseUrl: 'https://api.notion.com',
 | 
				
			||||||
  iconUrl: '{BASE_URL}/apps/notion/assets/favicon.svg',
 | 
					  iconUrl: '{BASE_URL}/apps/notion/assets/favicon.svg',
 | 
				
			||||||
  authDocUrl: '{DOCS_URL}/apps/notion/connection',
 | 
					  authDocUrl: '{DOCS_URL}/apps/notion/connection',
 | 
				
			||||||
  primaryColor: '000000',
 | 
					  primaryColor: '#000000',
 | 
				
			||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  beforeRequest: [addAuthHeader, addNotionVersionHeader],
 | 
					  beforeRequest: [addAuthHeader, addNotionVersionHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,7 +11,7 @@ export default defineApp({
 | 
				
			|||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  baseUrl: 'https://ntfy.sh',
 | 
					  baseUrl: 'https://ntfy.sh',
 | 
				
			||||||
  apiBaseUrl: 'https://ntfy.sh',
 | 
					  apiBaseUrl: 'https://ntfy.sh',
 | 
				
			||||||
  primaryColor: '56bda8',
 | 
					  primaryColor: '#56bda8',
 | 
				
			||||||
  beforeRequest: [addAuthHeader],
 | 
					  beforeRequest: [addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
  actions,
 | 
					  actions,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,7 +10,7 @@ export default defineApp({
 | 
				
			|||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  baseUrl: 'https://odoo.com',
 | 
					  baseUrl: 'https://odoo.com',
 | 
				
			||||||
  apiBaseUrl: '',
 | 
					  apiBaseUrl: '',
 | 
				
			||||||
  primaryColor: '9c5789',
 | 
					  primaryColor: '#9c5789',
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
  actions,
 | 
					  actions,
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,7 +11,7 @@ export default defineApp({
 | 
				
			|||||||
  apiBaseUrl: 'https://api.openai.com',
 | 
					  apiBaseUrl: 'https://api.openai.com',
 | 
				
			||||||
  iconUrl: '{BASE_URL}/apps/openai/assets/favicon.svg',
 | 
					  iconUrl: '{BASE_URL}/apps/openai/assets/favicon.svg',
 | 
				
			||||||
  authDocUrl: '{DOCS_URL}/apps/openai/connection',
 | 
					  authDocUrl: '{DOCS_URL}/apps/openai/connection',
 | 
				
			||||||
  primaryColor: '000000',
 | 
					  primaryColor: '#000000',
 | 
				
			||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  beforeRequest: [addAuthHeader],
 | 
					  beforeRequest: [addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,7 +13,7 @@ export default defineApp({
 | 
				
			|||||||
  apiBaseUrl: '',
 | 
					  apiBaseUrl: '',
 | 
				
			||||||
  iconUrl: '{BASE_URL}/apps/pipedrive/assets/favicon.svg',
 | 
					  iconUrl: '{BASE_URL}/apps/pipedrive/assets/favicon.svg',
 | 
				
			||||||
  authDocUrl: '{DOCS_URL}/apps/pipedrive/connection',
 | 
					  authDocUrl: '{DOCS_URL}/apps/pipedrive/connection',
 | 
				
			||||||
  primaryColor: 'FFFFFF',
 | 
					  primaryColor: '#FFFFFF',
 | 
				
			||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  beforeRequest: [setBaseUrl, addAuthHeader],
 | 
					  beforeRequest: [setBaseUrl, addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,7 +12,7 @@ export default defineApp({
 | 
				
			|||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  baseUrl: 'https://placetel.de',
 | 
					  baseUrl: 'https://placetel.de',
 | 
				
			||||||
  apiBaseUrl: 'https://api.placetel.de',
 | 
					  apiBaseUrl: 'https://api.placetel.de',
 | 
				
			||||||
  primaryColor: '069dd9',
 | 
					  primaryColor: '#069dd9',
 | 
				
			||||||
  beforeRequest: [addAuthHeader],
 | 
					  beforeRequest: [addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
  triggers,
 | 
					  triggers,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,7 +10,7 @@ export default defineApp({
 | 
				
			|||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  baseUrl: '',
 | 
					  baseUrl: '',
 | 
				
			||||||
  apiBaseUrl: '',
 | 
					  apiBaseUrl: '',
 | 
				
			||||||
  primaryColor: '336791',
 | 
					  primaryColor: '#336791',
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
  actions,
 | 
					  actions,
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,7 +10,7 @@ export default defineApp({
 | 
				
			|||||||
  apiBaseUrl: 'https://api.pushover.net',
 | 
					  apiBaseUrl: 'https://api.pushover.net',
 | 
				
			||||||
  iconUrl: '{BASE_URL}/apps/pushover/assets/favicon.svg',
 | 
					  iconUrl: '{BASE_URL}/apps/pushover/assets/favicon.svg',
 | 
				
			||||||
  authDocUrl: '{DOCS_URL}/apps/pushover/connection',
 | 
					  authDocUrl: '{DOCS_URL}/apps/pushover/connection',
 | 
				
			||||||
  primaryColor: '249DF1',
 | 
					  primaryColor: '#249DF1',
 | 
				
			||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
  actions,
 | 
					  actions,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,7 +11,7 @@ export default defineApp({
 | 
				
			|||||||
  apiBaseUrl: 'https://oauth.reddit.com',
 | 
					  apiBaseUrl: 'https://oauth.reddit.com',
 | 
				
			||||||
  iconUrl: '{BASE_URL}/apps/reddit/assets/favicon.svg',
 | 
					  iconUrl: '{BASE_URL}/apps/reddit/assets/favicon.svg',
 | 
				
			||||||
  authDocUrl: '{DOCS_URL}/apps/reddit/connection',
 | 
					  authDocUrl: '{DOCS_URL}/apps/reddit/connection',
 | 
				
			||||||
  primaryColor: 'FF4500',
 | 
					  primaryColor: '#FF4500',
 | 
				
			||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  beforeRequest: [addAuthHeader],
 | 
					  beforeRequest: [addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,7 +11,7 @@ export default defineApp({
 | 
				
			|||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  baseUrl: 'https://www.remove.bg',
 | 
					  baseUrl: 'https://www.remove.bg',
 | 
				
			||||||
  apiBaseUrl: 'https://api.remove.bg/v1.0',
 | 
					  apiBaseUrl: 'https://api.remove.bg/v1.0',
 | 
				
			||||||
  primaryColor: '55636c',
 | 
					  primaryColor: '#55636c',
 | 
				
			||||||
  beforeRequest: [addAuthHeader],
 | 
					  beforeRequest: [addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
  actions,
 | 
					  actions,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,6 +9,6 @@ export default defineApp({
 | 
				
			|||||||
  supportsConnections: false,
 | 
					  supportsConnections: false,
 | 
				
			||||||
  baseUrl: '',
 | 
					  baseUrl: '',
 | 
				
			||||||
  apiBaseUrl: '',
 | 
					  apiBaseUrl: '',
 | 
				
			||||||
  primaryColor: 'ff8800',
 | 
					  primaryColor: '#ff8800',
 | 
				
			||||||
  triggers,
 | 
					  triggers,
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,7 +13,7 @@ export default defineApp({
 | 
				
			|||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  baseUrl: 'https://salesforce.com',
 | 
					  baseUrl: 'https://salesforce.com',
 | 
				
			||||||
  apiBaseUrl: '',
 | 
					  apiBaseUrl: '',
 | 
				
			||||||
  primaryColor: '00A1E0',
 | 
					  primaryColor: '#00A1E0',
 | 
				
			||||||
  beforeRequest: [addAuthHeader],
 | 
					  beforeRequest: [addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
  triggers,
 | 
					  triggers,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,7 @@ export default defineApp({
 | 
				
			|||||||
  authDocUrl: '{DOCS_URL}/apps/scheduler/connection',
 | 
					  authDocUrl: '{DOCS_URL}/apps/scheduler/connection',
 | 
				
			||||||
  baseUrl: '',
 | 
					  baseUrl: '',
 | 
				
			||||||
  apiBaseUrl: '',
 | 
					  apiBaseUrl: '',
 | 
				
			||||||
  primaryColor: '0059F7',
 | 
					  primaryColor: '#0059F7',
 | 
				
			||||||
  supportsConnections: false,
 | 
					  supportsConnections: false,
 | 
				
			||||||
  triggers,
 | 
					  triggers,
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,7 +12,7 @@ export default defineApp({
 | 
				
			|||||||
  apiBaseUrl: '',
 | 
					  apiBaseUrl: '',
 | 
				
			||||||
  iconUrl: '{BASE_URL}/apps/self-hosted-llm/assets/favicon.svg',
 | 
					  iconUrl: '{BASE_URL}/apps/self-hosted-llm/assets/favicon.svg',
 | 
				
			||||||
  authDocUrl: '{DOCS_URL}/apps/self-hosted-llm/connection',
 | 
					  authDocUrl: '{DOCS_URL}/apps/self-hosted-llm/connection',
 | 
				
			||||||
  primaryColor: '000000',
 | 
					  primaryColor: '#000000',
 | 
				
			||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  beforeRequest: [setBaseUrl, addAuthHeader],
 | 
					  beforeRequest: [setBaseUrl, addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,7 +13,7 @@ export default defineApp({
 | 
				
			|||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  baseUrl: 'https://signalwire.com',
 | 
					  baseUrl: 'https://signalwire.com',
 | 
				
			||||||
  apiBaseUrl: '',
 | 
					  apiBaseUrl: '',
 | 
				
			||||||
  primaryColor: '044cf6',
 | 
					  primaryColor: '#044cf6',
 | 
				
			||||||
  beforeRequest: [addAuthHeader],
 | 
					  beforeRequest: [addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
  triggers,
 | 
					  triggers,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,7 +13,7 @@ export default defineApp({
 | 
				
			|||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  baseUrl: 'https://slack.com',
 | 
					  baseUrl: 'https://slack.com',
 | 
				
			||||||
  apiBaseUrl: 'https://slack.com/api',
 | 
					  apiBaseUrl: 'https://slack.com/api',
 | 
				
			||||||
  primaryColor: '4a154b',
 | 
					  primaryColor: '#4a154b',
 | 
				
			||||||
  beforeRequest: [addAuthHeader],
 | 
					  beforeRequest: [addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
  actions,
 | 
					  actions,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,7 +10,7 @@ export default defineApp({
 | 
				
			|||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  baseUrl: '',
 | 
					  baseUrl: '',
 | 
				
			||||||
  apiBaseUrl: '',
 | 
					  apiBaseUrl: '',
 | 
				
			||||||
  primaryColor: '2DAAE1',
 | 
					  primaryColor: '#2DAAE1',
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
  actions,
 | 
					  actions,
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,7 +11,7 @@ export default defineApp({
 | 
				
			|||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  baseUrl: 'https://spotify.com',
 | 
					  baseUrl: 'https://spotify.com',
 | 
				
			||||||
  apiBaseUrl: 'https://api.spotify.com',
 | 
					  apiBaseUrl: 'https://api.spotify.com',
 | 
				
			||||||
  primaryColor: '000000',
 | 
					  primaryColor: '#000000',
 | 
				
			||||||
  beforeRequest: [addAuthHeader],
 | 
					  beforeRequest: [addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
  actions,
 | 
					  actions,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,7 +11,7 @@ export default defineApp({
 | 
				
			|||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  baseUrl: 'https://www.strava.com',
 | 
					  baseUrl: 'https://www.strava.com',
 | 
				
			||||||
  apiBaseUrl: 'https://www.strava.com/api',
 | 
					  apiBaseUrl: 'https://www.strava.com/api',
 | 
				
			||||||
  primaryColor: 'fc4c01',
 | 
					  primaryColor: '#fc4c01',
 | 
				
			||||||
  beforeRequest: [addAuthHeader],
 | 
					  beforeRequest: [addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
  actions,
 | 
					  actions,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,7 +11,7 @@ export default defineApp({
 | 
				
			|||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  baseUrl: 'https://stripe.com',
 | 
					  baseUrl: 'https://stripe.com',
 | 
				
			||||||
  apiBaseUrl: 'https://api.stripe.com',
 | 
					  apiBaseUrl: 'https://api.stripe.com',
 | 
				
			||||||
  primaryColor: '635bff',
 | 
					  primaryColor: '#635bff',
 | 
				
			||||||
  beforeRequest: [addAuthHeader],
 | 
					  beforeRequest: [addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
  triggers,
 | 
					  triggers,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,7 +11,7 @@ export default defineApp({
 | 
				
			|||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  baseUrl: 'https://telegram.org',
 | 
					  baseUrl: 'https://telegram.org',
 | 
				
			||||||
  apiBaseUrl: 'https://api.telegram.org',
 | 
					  apiBaseUrl: 'https://api.telegram.org',
 | 
				
			||||||
  primaryColor: '2AABEE',
 | 
					  primaryColor: '#2AABEE',
 | 
				
			||||||
  beforeRequest: [addAuthHeader],
 | 
					  beforeRequest: [addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
  actions,
 | 
					  actions,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,7 +13,7 @@ export default defineApp({
 | 
				
			|||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  baseUrl: 'https://todoist.com',
 | 
					  baseUrl: 'https://todoist.com',
 | 
				
			||||||
  apiBaseUrl: 'https://api.todoist.com/rest/v2',
 | 
					  apiBaseUrl: 'https://api.todoist.com/rest/v2',
 | 
				
			||||||
  primaryColor: 'e44332',
 | 
					  primaryColor: '#e44332',
 | 
				
			||||||
  beforeRequest: [addAuthHeader],
 | 
					  beforeRequest: [addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
  triggers,
 | 
					  triggers,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,7 +12,7 @@ export default defineApp({
 | 
				
			|||||||
  iconUrl: '{BASE_URL}/apps/trello/assets/favicon.svg',
 | 
					  iconUrl: '{BASE_URL}/apps/trello/assets/favicon.svg',
 | 
				
			||||||
  authDocUrl: '{DOCS_URL}/apps/trello/connection',
 | 
					  authDocUrl: '{DOCS_URL}/apps/trello/connection',
 | 
				
			||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  primaryColor: '0079bf',
 | 
					  primaryColor: '#0079bf',
 | 
				
			||||||
  beforeRequest: [addAuthHeader],
 | 
					  beforeRequest: [addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
  actions,
 | 
					  actions,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,7 +13,7 @@ export default defineApp({
 | 
				
			|||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  baseUrl: 'https://twilio.com',
 | 
					  baseUrl: 'https://twilio.com',
 | 
				
			||||||
  apiBaseUrl: 'https://api.twilio.com',
 | 
					  apiBaseUrl: 'https://api.twilio.com',
 | 
				
			||||||
  primaryColor: 'e1000f',
 | 
					  primaryColor: '#e1000f',
 | 
				
			||||||
  beforeRequest: [addAuthHeader],
 | 
					  beforeRequest: [addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
  triggers,
 | 
					  triggers,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,7 +12,7 @@ export default defineApp({
 | 
				
			|||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  baseUrl: 'https://twitter.com',
 | 
					  baseUrl: 'https://twitter.com',
 | 
				
			||||||
  apiBaseUrl: 'https://api.twitter.com',
 | 
					  apiBaseUrl: 'https://api.twitter.com',
 | 
				
			||||||
  primaryColor: '1da1f2',
 | 
					  primaryColor: '#1da1f2',
 | 
				
			||||||
  beforeRequest: [addAuthHeader],
 | 
					  beforeRequest: [addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
  triggers,
 | 
					  triggers,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,7 +12,7 @@ export default defineApp({
 | 
				
			|||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  baseUrl: 'https://typeform.com',
 | 
					  baseUrl: 'https://typeform.com',
 | 
				
			||||||
  apiBaseUrl: 'https://api.typeform.com',
 | 
					  apiBaseUrl: 'https://api.typeform.com',
 | 
				
			||||||
  primaryColor: '262627',
 | 
					  primaryColor: '#262627',
 | 
				
			||||||
  beforeRequest: [addAuthHeader],
 | 
					  beforeRequest: [addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
  triggers,
 | 
					  triggers,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,7 +14,7 @@ export default defineApp({
 | 
				
			|||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  baseUrl: '',
 | 
					  baseUrl: '',
 | 
				
			||||||
  apiBaseUrl: '',
 | 
					  apiBaseUrl: '',
 | 
				
			||||||
  primaryColor: '39a86d',
 | 
					  primaryColor: '#39a86d',
 | 
				
			||||||
  beforeRequest: [setBaseUrl, addAuthHeader],
 | 
					  beforeRequest: [setBaseUrl, addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
  triggers,
 | 
					  triggers,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,7 +10,7 @@ export default defineApp({
 | 
				
			|||||||
  supportsConnections: false,
 | 
					  supportsConnections: false,
 | 
				
			||||||
  baseUrl: '',
 | 
					  baseUrl: '',
 | 
				
			||||||
  apiBaseUrl: '',
 | 
					  apiBaseUrl: '',
 | 
				
			||||||
  primaryColor: '0059F7',
 | 
					  primaryColor: '#0059F7',
 | 
				
			||||||
  actions,
 | 
					  actions,
 | 
				
			||||||
  triggers,
 | 
					  triggers,
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,7 +8,7 @@ export default {
 | 
				
			|||||||
      key: 'instanceUrl',
 | 
					      key: 'instanceUrl',
 | 
				
			||||||
      label: 'WordPress instance URL',
 | 
					      label: 'WordPress instance URL',
 | 
				
			||||||
      type: 'string',
 | 
					      type: 'string',
 | 
				
			||||||
      required: false,
 | 
					      required: true,
 | 
				
			||||||
      readOnly: false,
 | 
					      readOnly: false,
 | 
				
			||||||
      value: null,
 | 
					      value: null,
 | 
				
			||||||
      placeholder: null,
 | 
					      placeholder: null,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,7 +13,7 @@ export default defineApp({
 | 
				
			|||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  baseUrl: 'https://wordpress.com',
 | 
					  baseUrl: 'https://wordpress.com',
 | 
				
			||||||
  apiBaseUrl: '',
 | 
					  apiBaseUrl: '',
 | 
				
			||||||
  primaryColor: '464342',
 | 
					  primaryColor: '#464342',
 | 
				
			||||||
  beforeRequest: [setBaseUrl, addAuthHeader],
 | 
					  beforeRequest: [setBaseUrl, addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
  triggers,
 | 
					  triggers,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,7 +11,7 @@ export default defineApp({
 | 
				
			|||||||
  apiBaseUrl: 'https://api.xero.com',
 | 
					  apiBaseUrl: 'https://api.xero.com',
 | 
				
			||||||
  iconUrl: '{BASE_URL}/apps/xero/assets/favicon.svg',
 | 
					  iconUrl: '{BASE_URL}/apps/xero/assets/favicon.svg',
 | 
				
			||||||
  authDocUrl: '{DOCS_URL}/apps/xero/connection',
 | 
					  authDocUrl: '{DOCS_URL}/apps/xero/connection',
 | 
				
			||||||
  primaryColor: '13B5EA',
 | 
					  primaryColor: '#13B5EA',
 | 
				
			||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  beforeRequest: [addAuthHeader],
 | 
					  beforeRequest: [addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,7 +10,7 @@ export default defineApp({
 | 
				
			|||||||
  apiBaseUrl: 'https://api.ynab.com/v1',
 | 
					  apiBaseUrl: 'https://api.ynab.com/v1',
 | 
				
			||||||
  iconUrl: '{BASE_URL}/apps/you-need-a-budget/assets/favicon.svg',
 | 
					  iconUrl: '{BASE_URL}/apps/you-need-a-budget/assets/favicon.svg',
 | 
				
			||||||
  authDocUrl: '{DOCS_URL}/apps/you-need-a-budget/connection',
 | 
					  authDocUrl: '{DOCS_URL}/apps/you-need-a-budget/connection',
 | 
				
			||||||
  primaryColor: '19223C',
 | 
					  primaryColor: '#19223C',
 | 
				
			||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  beforeRequest: [addAuthHeader],
 | 
					  beforeRequest: [addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,7 +10,7 @@ export default defineApp({
 | 
				
			|||||||
  apiBaseUrl: 'https://www.googleapis.com/youtube',
 | 
					  apiBaseUrl: 'https://www.googleapis.com/youtube',
 | 
				
			||||||
  iconUrl: '{BASE_URL}/apps/youtube/assets/favicon.svg',
 | 
					  iconUrl: '{BASE_URL}/apps/youtube/assets/favicon.svg',
 | 
				
			||||||
  authDocUrl: '{DOCS_URL}/apps/youtube/connection',
 | 
					  authDocUrl: '{DOCS_URL}/apps/youtube/connection',
 | 
				
			||||||
  primaryColor: 'FF0000',
 | 
					  primaryColor: '#FF0000',
 | 
				
			||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  beforeRequest: [addAuthHeader],
 | 
					  beforeRequest: [addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,7 +12,7 @@ export default defineApp({
 | 
				
			|||||||
  apiBaseUrl: '',
 | 
					  apiBaseUrl: '',
 | 
				
			||||||
  iconUrl: '{BASE_URL}/apps/zendesk/assets/favicon.svg',
 | 
					  iconUrl: '{BASE_URL}/apps/zendesk/assets/favicon.svg',
 | 
				
			||||||
  authDocUrl: '{DOCS_URL}/apps/zendesk/connection',
 | 
					  authDocUrl: '{DOCS_URL}/apps/zendesk/connection',
 | 
				
			||||||
  primaryColor: '17494d',
 | 
					  primaryColor: '#17494d',
 | 
				
			||||||
  supportsConnections: true,
 | 
					  supportsConnections: true,
 | 
				
			||||||
  beforeRequest: [addAuthHeader],
 | 
					  beforeRequest: [addAuthHeader],
 | 
				
			||||||
  auth,
 | 
					  auth,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -52,7 +52,7 @@ const appConfig = {
 | 
				
			|||||||
  isDev: appEnv === 'development',
 | 
					  isDev: appEnv === 'development',
 | 
				
			||||||
  isTest: appEnv === 'test',
 | 
					  isTest: appEnv === 'test',
 | 
				
			||||||
  isProd: appEnv === 'production',
 | 
					  isProd: appEnv === 'production',
 | 
				
			||||||
  version: '0.13.1',
 | 
					  version: '0.14.0',
 | 
				
			||||||
  postgresDatabase: process.env.POSTGRES_DATABASE || 'automatisch_development',
 | 
					  postgresDatabase: process.env.POSTGRES_DATABASE || 'automatisch_development',
 | 
				
			||||||
  postgresSchema: process.env.POSTGRES_SCHEMA || 'public',
 | 
					  postgresSchema: process.env.POSTGRES_SCHEMA || 'public',
 | 
				
			||||||
  postgresPort: parseInt(process.env.POSTGRES_PORT || '5432'),
 | 
					  postgresPort: parseInt(process.env.POSTGRES_PORT || '5432'),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,7 +32,7 @@ describe('POST /api/v1/access-tokens', () => {
 | 
				
			|||||||
      })
 | 
					      })
 | 
				
			||||||
      .expect(422);
 | 
					      .expect(422);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    expect(response.body.errors.general).toEqual([
 | 
					    expect(response.body.errors.general).toStrictEqual([
 | 
				
			||||||
      'Incorrect email or password.',
 | 
					      'Incorrect email or password.',
 | 
				
			||||||
    ]);
 | 
					    ]);
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -83,7 +83,7 @@ describe('POST /api/v1/admin/apps/:appKey/auth-clients', () => {
 | 
				
			|||||||
      .send(appAuthClient)
 | 
					      .send(appAuthClient)
 | 
				
			||||||
      .expect(422);
 | 
					      .expect(422);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    expect(response.body.meta.type).toEqual('ModelValidation');
 | 
					    expect(response.body.meta.type).toStrictEqual('ModelValidation');
 | 
				
			||||||
    expect(response.body.errors).toMatchObject({
 | 
					    expect(response.body.errors).toMatchObject({
 | 
				
			||||||
      name: ["must have required property 'name'"],
 | 
					      name: ["must have required property 'name'"],
 | 
				
			||||||
      formattedAuthDefaults: [
 | 
					      formattedAuthDefaults: [
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,11 +10,11 @@ export default async (request, response) => {
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const appConfigParams = (request) => {
 | 
					const appConfigParams = (request) => {
 | 
				
			||||||
  const { allowCustomConnection, shared, disabled } = request.body;
 | 
					  const { customConnectionAllowed, shared, disabled } = request.body;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  return {
 | 
					  return {
 | 
				
			||||||
    key: request.params.appKey,
 | 
					    key: request.params.appKey,
 | 
				
			||||||
    allowCustomConnection,
 | 
					    customConnectionAllowed,
 | 
				
			||||||
    shared,
 | 
					    shared,
 | 
				
			||||||
    disabled,
 | 
					    disabled,
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,7 +23,7 @@ describe('POST /api/v1/admin/apps/:appKey/config', () => {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  it('should return created app config', async () => {
 | 
					  it('should return created app config', async () => {
 | 
				
			||||||
    const appConfig = {
 | 
					    const appConfig = {
 | 
				
			||||||
      allowCustomConnection: true,
 | 
					      customConnectionAllowed: true,
 | 
				
			||||||
      shared: true,
 | 
					      shared: true,
 | 
				
			||||||
      disabled: false,
 | 
					      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 () => {
 | 
					  it('should return HTTP 422 for already existing app config', async () => {
 | 
				
			||||||
    const appConfig = {
 | 
					    const appConfig = {
 | 
				
			||||||
      key: 'gitlab',
 | 
					      key: 'gitlab',
 | 
				
			||||||
      allowCustomConnection: true,
 | 
					      customConnectionAllowed: true,
 | 
				
			||||||
      shared: true,
 | 
					      shared: true,
 | 
				
			||||||
      disabled: false,
 | 
					      disabled: false,
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
@@ -59,7 +59,7 @@ describe('POST /api/v1/admin/apps/:appKey/config', () => {
 | 
				
			|||||||
      })
 | 
					      })
 | 
				
			||||||
      .expect(422);
 | 
					      .expect(422);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    expect(response.body.meta.type).toEqual('UniqueViolationError');
 | 
					    expect(response.body.meta.type).toStrictEqual('UniqueViolationError');
 | 
				
			||||||
    expect(response.body.errors).toMatchObject({
 | 
					    expect(response.body.errors).toMatchObject({
 | 
				
			||||||
      key: ["'key' must be unique."],
 | 
					      key: ["'key' must be unique."],
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,7 +32,7 @@ describe('GET /api/v1/admin/apps/:appKey/auth-clients/:appAuthClientId', () => {
 | 
				
			|||||||
      .expect(200);
 | 
					      .expect(200);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const expectedPayload = getAppAuthClientMock(currentAppAuthClient);
 | 
					    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 () => {
 | 
					  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,
 | 
					      appAuthClientOne,
 | 
				
			||||||
    ]);
 | 
					    ]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    expect(response.body).toEqual(expectedPayload);
 | 
					    expect(response.body).toStrictEqual(expectedPayload);
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,16 +8,19 @@ export default async (request, response) => {
 | 
				
			|||||||
    })
 | 
					    })
 | 
				
			||||||
    .throwIfNotFound();
 | 
					    .throwIfNotFound();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  await appConfig.$query().patchAndFetch(appConfigParams(request));
 | 
					  await appConfig.$query().patchAndFetch({
 | 
				
			||||||
 | 
					    ...appConfigParams(request),
 | 
				
			||||||
 | 
					    key: request.params.appKey,
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  renderObject(response, appConfig);
 | 
					  renderObject(response, appConfig);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const appConfigParams = (request) => {
 | 
					const appConfigParams = (request) => {
 | 
				
			||||||
  const { allowCustomConnection, shared, disabled } = request.body;
 | 
					  const { customConnectionAllowed, shared, disabled } = request.body;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  return {
 | 
					  return {
 | 
				
			||||||
    allowCustomConnection,
 | 
					    customConnectionAllowed,
 | 
				
			||||||
    shared,
 | 
					    shared,
 | 
				
			||||||
    disabled,
 | 
					    disabled,
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,7 +24,7 @@ describe('PATCH /api/v1/admin/apps/:appKey/config', () => {
 | 
				
			|||||||
  it('should return updated app config', async () => {
 | 
					  it('should return updated app config', async () => {
 | 
				
			||||||
    const appConfig = {
 | 
					    const appConfig = {
 | 
				
			||||||
      key: 'gitlab',
 | 
					      key: 'gitlab',
 | 
				
			||||||
      allowCustomConnection: true,
 | 
					      customConnectionAllowed: true,
 | 
				
			||||||
      shared: true,
 | 
					      shared: true,
 | 
				
			||||||
      disabled: false,
 | 
					      disabled: false,
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
@@ -34,7 +34,7 @@ describe('PATCH /api/v1/admin/apps/:appKey/config', () => {
 | 
				
			|||||||
    const newAppConfigValues = {
 | 
					    const newAppConfigValues = {
 | 
				
			||||||
      shared: false,
 | 
					      shared: false,
 | 
				
			||||||
      disabled: true,
 | 
					      disabled: true,
 | 
				
			||||||
      allowCustomConnection: false,
 | 
					      customConnectionAllowed: false,
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const response = await request(app)
 | 
					    const response = await request(app)
 | 
				
			||||||
@@ -55,7 +55,7 @@ describe('PATCH /api/v1/admin/apps/:appKey/config', () => {
 | 
				
			|||||||
    const appConfig = {
 | 
					    const appConfig = {
 | 
				
			||||||
      shared: false,
 | 
					      shared: false,
 | 
				
			||||||
      disabled: true,
 | 
					      disabled: true,
 | 
				
			||||||
      allowCustomConnection: false,
 | 
					      customConnectionAllowed: false,
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    await request(app)
 | 
					    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 () => {
 | 
					  it('should return HTTP 422 for invalid app config data', async () => {
 | 
				
			||||||
    const appConfig = {
 | 
					    const appConfig = {
 | 
				
			||||||
      key: 'gitlab',
 | 
					      key: 'gitlab',
 | 
				
			||||||
      allowCustomConnection: true,
 | 
					      customConnectionAllowed: true,
 | 
				
			||||||
      shared: true,
 | 
					      shared: true,
 | 
				
			||||||
      disabled: false,
 | 
					      disabled: false,
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
@@ -83,7 +83,7 @@ describe('PATCH /api/v1/admin/apps/:appKey/config', () => {
 | 
				
			|||||||
      })
 | 
					      })
 | 
				
			||||||
      .expect(422);
 | 
					      .expect(422);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    expect(response.body.meta.type).toEqual('ModelValidation');
 | 
					    expect(response.body.meta.type).toStrictEqual('ModelValidation');
 | 
				
			||||||
    expect(response.body.errors).toMatchObject({
 | 
					    expect(response.body.errors).toMatchObject({
 | 
				
			||||||
      disabled: ['must be boolean'],
 | 
					      disabled: ['must be boolean'],
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,23 +1,28 @@
 | 
				
			|||||||
import pick from 'lodash/pick.js';
 | 
					 | 
				
			||||||
import { renderObject } from '../../../../../helpers/renderer.js';
 | 
					import { renderObject } from '../../../../../helpers/renderer.js';
 | 
				
			||||||
import Config from '../../../../../models/config.js';
 | 
					import Config from '../../../../../models/config.js';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default async (request, response) => {
 | 
					export default async (request, response) => {
 | 
				
			||||||
  const config = configParams(request);
 | 
					  const config = await Config.query().updateFirstOrInsert(
 | 
				
			||||||
 | 
					    configParams(request)
 | 
				
			||||||
  await Config.batchUpdate(config);
 | 
					  );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  renderObject(response, config);
 | 
					  renderObject(response, config);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const configParams = (request) => {
 | 
					const configParams = (request) => {
 | 
				
			||||||
  const updatableConfigurationKeys = [
 | 
					  const {
 | 
				
			||||||
    'logo.svgData',
 | 
					    logoSvgData,
 | 
				
			||||||
    'palette.primary.dark',
 | 
					    palettePrimaryDark,
 | 
				
			||||||
    'palette.primary.light',
 | 
					    palettePrimaryLight,
 | 
				
			||||||
    'palette.primary.main',
 | 
					    palettePrimaryMain,
 | 
				
			||||||
    'title',
 | 
					    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 createAuthTokenByUserId from '../../../../../helpers/create-auth-token-by-user-id.js';
 | 
				
			||||||
import { createUser } from '../../../../../../test/factories/user.js';
 | 
					import { createUser } from '../../../../../../test/factories/user.js';
 | 
				
			||||||
import { createRole } from '../../../../../../test/factories/role.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';
 | 
					import * as license from '../../../../../helpers/license.ee.js';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
describe('PATCH /api/v1/admin/config', () => {
 | 
					describe('PATCH /api/v1/admin/config', () => {
 | 
				
			||||||
@@ -30,13 +30,13 @@ describe('PATCH /api/v1/admin/config', () => {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    const appConfig = {
 | 
					    const appConfig = {
 | 
				
			||||||
      title,
 | 
					      title,
 | 
				
			||||||
      'palette.primary.main': palettePrimaryMain,
 | 
					      palettePrimaryMain: palettePrimaryMain,
 | 
				
			||||||
      'palette.primary.dark': palettePrimaryDark,
 | 
					      palettePrimaryDark: palettePrimaryDark,
 | 
				
			||||||
      'palette.primary.light': palettePrimaryLight,
 | 
					      palettePrimaryLight: palettePrimaryLight,
 | 
				
			||||||
      'logo.svgData': logoSvgData,
 | 
					      logoSvgData: logoSvgData,
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    await createBulkConfig(appConfig);
 | 
					    await updateConfig(appConfig);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const newTitle = 'Updated title';
 | 
					    const newTitle = 'Updated title';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -50,8 +50,8 @@ describe('PATCH /api/v1/admin/config', () => {
 | 
				
			|||||||
      .send(newConfigValues)
 | 
					      .send(newConfigValues)
 | 
				
			||||||
      .expect(200);
 | 
					      .expect(200);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    expect(response.body.data.title).toEqual(newTitle);
 | 
					    expect(response.body.data.title).toStrictEqual(newTitle);
 | 
				
			||||||
    expect(response.body.meta.type).toEqual('Object');
 | 
					    expect(response.body.meta.type).toStrictEqual('Config');
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  it('should return created config for unexisting config', async () => {
 | 
					  it('should return created config for unexisting config', async () => {
 | 
				
			||||||
@@ -67,8 +67,8 @@ describe('PATCH /api/v1/admin/config', () => {
 | 
				
			|||||||
      .send(newConfigValues)
 | 
					      .send(newConfigValues)
 | 
				
			||||||
      .expect(200);
 | 
					      .expect(200);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    expect(response.body.data.title).toEqual(newTitle);
 | 
					    expect(response.body.data.title).toStrictEqual(newTitle);
 | 
				
			||||||
    expect(response.body.meta.type).toEqual('Object');
 | 
					    expect(response.body.meta.type).toStrictEqual('Config');
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  it('should return null for deleted config entry', async () => {
 | 
					  it('should return null for deleted config entry', async () => {
 | 
				
			||||||
@@ -83,6 +83,6 @@ describe('PATCH /api/v1/admin/config', () => {
 | 
				
			|||||||
      .expect(200);
 | 
					      .expect(200);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    expect(response.body.data.title).toBeNull();
 | 
					    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();
 | 
					    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 () => {
 | 
					  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,
 | 
					      permissionTwo,
 | 
				
			||||||
    ]);
 | 
					    ]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    expect(response.body).toEqual(expectedPayload);
 | 
					    expect(response.body).toStrictEqual(expectedPayload);
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  it('should return not found response for not existing role UUID', async () => {
 | 
					  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]);
 | 
					    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();
 | 
					    .throwIfNotFound();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const roleMappings = await samlAuthProvider
 | 
					  const roleMappings = await samlAuthProvider
 | 
				
			||||||
    .$relatedQuery('samlAuthProvidersRoleMappings')
 | 
					    .$relatedQuery('roleMappings')
 | 
				
			||||||
    .orderBy('remote_role_name', 'asc');
 | 
					    .orderBy('remote_role_name', 'asc');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  renderObject(response, roleMappings);
 | 
					  renderObject(response, roleMappings);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -46,6 +46,6 @@ describe('GET /api/v1/admin/saml-auth-providers/:samlAuthProviderId/role-mapping
 | 
				
			|||||||
      roleMappingTwo,
 | 
					      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);
 | 
					    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 () => {
 | 
					  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,
 | 
					      samlAuthProviderOne,
 | 
				
			||||||
    ]);
 | 
					    ]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    expect(response.body).toEqual(expectedPayload);
 | 
					    expect(response.body).toStrictEqual(expectedPayload);
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,15 +8,14 @@ export default async (request, response) => {
 | 
				
			|||||||
    .findById(samlAuthProviderId)
 | 
					    .findById(samlAuthProviderId)
 | 
				
			||||||
    .throwIfNotFound();
 | 
					    .throwIfNotFound();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const samlAuthProvidersRoleMappings =
 | 
					  const roleMappings = await samlAuthProvider.updateRoleMappings(
 | 
				
			||||||
    await samlAuthProvider.updateRoleMappings(
 | 
					    roleMappingsParams(request)
 | 
				
			||||||
      samlAuthProvidersRoleMappingsParams(request)
 | 
					  );
 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  renderObject(response, samlAuthProvidersRoleMappings);
 | 
					  renderObject(response, roleMappings);
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const samlAuthProvidersRoleMappingsParams = (request) => {
 | 
					const roleMappingsParams = (request) => {
 | 
				
			||||||
  const roleMappings = request.body;
 | 
					  const roleMappings = request.body;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  return roleMappings.map(({ roleId, remoteRoleName }) => ({
 | 
					  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 { createRole } from '../../../../../../test/factories/role.js';
 | 
				
			||||||
import { createUser } from '../../../../../../test/factories/user.js';
 | 
					import { createUser } from '../../../../../../test/factories/user.js';
 | 
				
			||||||
import { createSamlAuthProvider } from '../../../../../../test/factories/saml-auth-provider.ee.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 createRoleMappingsMock from '../../../../../../test/mocks/rest/api/v1/admin/saml-auth-providers/update-role-mappings.ee.js';
 | 
				
			||||||
import * as license from '../../../../../helpers/license.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();
 | 
					    samlAuthProvider = await createSamlAuthProvider();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    await createSamlAuthProvidersRoleMapping({
 | 
					    await createRoleMapping({
 | 
				
			||||||
      samlAuthProviderId: samlAuthProvider.id,
 | 
					      samlAuthProviderId: samlAuthProvider.id,
 | 
				
			||||||
      remoteRoleName: 'Viewer',
 | 
					      remoteRoleName: 'Viewer',
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    await createSamlAuthProvidersRoleMapping({
 | 
					    await createRoleMapping({
 | 
				
			||||||
      samlAuthProviderId: samlAuthProvider.id,
 | 
					      samlAuthProviderId: samlAuthProvider.id,
 | 
				
			||||||
      remoteRoleName: 'Editor',
 | 
					      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 () => {
 | 
					  it('should delete role mappings when given empty role mappings', async () => {
 | 
				
			||||||
    const existingRoleMappings = await samlAuthProvider.$relatedQuery(
 | 
					    const existingRoleMappings = await samlAuthProvider.$relatedQuery(
 | 
				
			||||||
      'samlAuthProvidersRoleMappings'
 | 
					      'roleMappings'
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    expect(existingRoleMappings.length).toBe(2);
 | 
					    expect(existingRoleMappings.length).toBe(2);
 | 
				
			||||||
@@ -149,34 +149,4 @@ describe('PATCH /api/v1/admin/saml-auth-providers/:samlAuthProviderId/role-mappi
 | 
				
			|||||||
      .send(roleMappings)
 | 
					      .send(roleMappings)
 | 
				
			||||||
      .expect(404);
 | 
					      .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);
 | 
					      .expect(200);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const expectedPayload = getUserMock(anotherUser, anotherUserRole);
 | 
					    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 () => {
 | 
					  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