Compare commits

..

1 Commits

Author SHA1 Message Date
Jakub P.
06e8f5bfdc test: trigger only flow should not be publishable 2024-09-23 22:35:19 +02:00
340 changed files with 2662 additions and 7533 deletions

View File

@@ -23,6 +23,7 @@ env:
REDIS_HOST: localhost REDIS_HOST: localhost
APP_ENV: production APP_ENV: production
LICENSE_KEY: dummy_license_key LICENSE_KEY: dummy_license_key
BACKEND_APP_URL: http://localhost:3000
jobs: jobs:
test: test:

View File

@@ -23,6 +23,8 @@
"dependencies": { "dependencies": {
"@bull-board/express": "^3.10.1", "@bull-board/express": "^3.10.1",
"@casl/ability": "^6.5.0", "@casl/ability": "^6.5.0",
"@graphql-tools/graphql-file-loader": "^7.3.4",
"@graphql-tools/load": "^7.5.2",
"@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",
@@ -39,7 +41,11 @@
"express": "~4.18.2", "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",
"express-graphql": "^0.12.0",
"fast-xml-parser": "^4.0.11", "fast-xml-parser": "^4.0.11",
"graphql-middleware": "^6.1.15",
"graphql-shield": "^7.5.0",
"graphql-tools": "^8.2.0",
"handlebars": "^4.7.7", "handlebars": "^4.7.7",
"http-errors": "~1.6.3", "http-errors": "~1.6.3",
"http-proxy-agent": "^7.0.0", "http-proxy-agent": "^7.0.0",

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -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: '{DOCS_URL}/apps/clickup/connection', authDocUrl: 'https://automatisch.io/docs/apps/clickup/connection',
primaryColor: '#FD71AF', primaryColor: 'FD71AF',
supportsConnections: true, supportsConnections: true,
beforeRequest: [addAuthHeader], beforeRequest: [addAuthHeader],
auth, auth,

View File

@@ -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,
}); });

View File

@@ -9,6 +9,6 @@ export default defineApp({
supportsConnections: false, supportsConnections: false,
baseUrl: '', baseUrl: '',
apiBaseUrl: '', apiBaseUrl: '',
primaryColor: '#001F52', primaryColor: '001F52',
actions, actions,
}); });

View File

@@ -9,6 +9,6 @@ export default defineApp({
supportsConnections: false, supportsConnections: false,
baseUrl: '', baseUrl: '',
apiBaseUrl: '', apiBaseUrl: '',
primaryColor: '#001F52', primaryColor: '001F52',
actions, actions,
}); });

View File

@@ -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,

View File

@@ -9,6 +9,6 @@ export default defineApp({
supportsConnections: false, supportsConnections: false,
baseUrl: '', baseUrl: '',
apiBaseUrl: '', apiBaseUrl: '',
primaryColor: '#001F52', primaryColor: '001F52',
actions, actions,
}); });

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -9,6 +9,6 @@ export default defineApp({
supportsConnections: false, supportsConnections: false,
baseUrl: '', baseUrl: '',
apiBaseUrl: '', apiBaseUrl: '',
primaryColor: '#001F52', primaryColor: '001F52',
actions, actions,
}); });

View File

@@ -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',

View File

@@ -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,

View File

@@ -10,7 +10,7 @@ export default defineApp({
supportsConnections: false, supportsConnections: false,
baseUrl: '', baseUrl: '',
apiBaseUrl: '', apiBaseUrl: '',
primaryColor: '#001F52', primaryColor: '001F52',
actions, actions,
dynamicFields, dynamicFields,
}); });

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -9,6 +9,6 @@ export default defineApp({
supportsConnections: false, supportsConnections: false,
baseUrl: '', baseUrl: '',
apiBaseUrl: '', apiBaseUrl: '',
primaryColor: '#000000', primaryColor: '000000',
actions, actions,
}); });

View File

@@ -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,

View File

@@ -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,

View File

@@ -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: '{DOCS_URL}/apps/jotform/connection', authDocUrl: 'https://automatisch.io/docs/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,

View File

@@ -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: '{DOCS_URL}/apps/mailchimp/connection', authDocUrl: 'https://automatisch.io/docs/apps/mailchimp/connection',
primaryColor: '#000000', primaryColor: '000000',
supportsConnections: true, supportsConnections: true,
beforeRequest: [setBaseUrl, addAuthHeader], beforeRequest: [setBaseUrl, addAuthHeader],
auth, auth,

View File

@@ -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: '{DOCS_URL}/apps/mailerlite/connection', authDocUrl: 'https://automatisch.io/docs/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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,
}); });

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -10,7 +10,7 @@ export default defineApp({
supportsConnections: true, supportsConnections: true,
baseUrl: '', baseUrl: '',
apiBaseUrl: '', apiBaseUrl: '',
primaryColor: '#336791', primaryColor: '336791',
auth, auth,
actions, actions,
}); });

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -9,6 +9,6 @@ export default defineApp({
supportsConnections: false, supportsConnections: false,
baseUrl: '', baseUrl: '',
apiBaseUrl: '', apiBaseUrl: '',
primaryColor: '#ff8800', primaryColor: 'ff8800',
triggers, triggers,
}); });

View File

@@ -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,

View File

@@ -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,
}); });

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -10,7 +10,7 @@ export default defineApp({
supportsConnections: true, supportsConnections: true,
baseUrl: '', baseUrl: '',
apiBaseUrl: '', apiBaseUrl: '',
primaryColor: '#2DAAE1', primaryColor: '2DAAE1',
auth, auth,
actions, actions,
}); });

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -10,7 +10,7 @@ export default defineApp({
supportsConnections: false, supportsConnections: false,
baseUrl: '', baseUrl: '',
apiBaseUrl: '', apiBaseUrl: '',
primaryColor: '#0059F7', primaryColor: '0059F7',
actions, actions,
triggers, triggers,
}); });

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -32,7 +32,7 @@ describe('POST /api/v1/access-tokens', () => {
}) })
.expect(422); .expect(422);
expect(response.body.errors.general).toStrictEqual([ expect(response.body.errors.general).toEqual([
'Incorrect email or password.', 'Incorrect email or password.',
]); ]);
}); });

View File

@@ -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).toStrictEqual('ModelValidation'); expect(response.body.meta.type).toEqual('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: [

View File

@@ -10,11 +10,11 @@ export default async (request, response) => {
}; };
const appConfigParams = (request) => { const appConfigParams = (request) => {
const { customConnectionAllowed, shared, disabled } = request.body; const { allowCustomConnection, shared, disabled } = request.body;
return { return {
key: request.params.appKey, key: request.params.appKey,
customConnectionAllowed, allowCustomConnection,
shared, shared,
disabled, disabled,
}; };

View File

@@ -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 = {
customConnectionAllowed: true, allowCustomConnection: 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',
customConnectionAllowed: true, allowCustomConnection: 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).toStrictEqual('UniqueViolationError'); expect(response.body.meta.type).toEqual('UniqueViolationError');
expect(response.body.errors).toMatchObject({ expect(response.body.errors).toMatchObject({
key: ["'key' must be unique."], key: ["'key' must be unique."],
}); });

View File

@@ -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).toStrictEqual(expectedPayload); expect(response.body).toEqual(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 () => {

View File

@@ -39,6 +39,6 @@ describe('GET /api/v1/admin/apps/:appKey/auth-clients', () => {
appAuthClientOne, appAuthClientOne,
]); ]);
expect(response.body).toStrictEqual(expectedPayload); expect(response.body).toEqual(expectedPayload);
}); });
}); });

View File

@@ -8,19 +8,16 @@ export default async (request, response) => {
}) })
.throwIfNotFound(); .throwIfNotFound();
await appConfig.$query().patchAndFetch({ await appConfig.$query().patchAndFetch(appConfigParams(request));
...appConfigParams(request),
key: request.params.appKey,
});
renderObject(response, appConfig); renderObject(response, appConfig);
}; };
const appConfigParams = (request) => { const appConfigParams = (request) => {
const { customConnectionAllowed, shared, disabled } = request.body; const { allowCustomConnection, shared, disabled } = request.body;
return { return {
customConnectionAllowed, allowCustomConnection,
shared, shared,
disabled, disabled,
}; };

View File

@@ -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',
customConnectionAllowed: true, allowCustomConnection: 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,
customConnectionAllowed: false, allowCustomConnection: 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,
customConnectionAllowed: false, allowCustomConnection: 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',
customConnectionAllowed: true, allowCustomConnection: 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).toStrictEqual('ModelValidation'); expect(response.body.meta.type).toEqual('ModelValidation');
expect(response.body.errors).toMatchObject({ expect(response.body.errors).toMatchObject({
disabled: ['must be boolean'], disabled: ['must be boolean'],
}); });

View File

@@ -1,28 +1,23 @@
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 = await Config.query().updateFirstOrInsert( const config = configParams(request);
configParams(request)
); await Config.batchUpdate(config);
renderObject(response, config); renderObject(response, config);
}; };
const configParams = (request) => { const configParams = (request) => {
const { const updatableConfigurationKeys = [
logoSvgData, 'logo.svgData',
palettePrimaryDark, 'palette.primary.dark',
palettePrimaryLight, 'palette.primary.light',
palettePrimaryMain, 'palette.primary.main',
title, 'title',
} = request.body; ];
return { return pick(request.body, updatableConfigurationKeys);
logoSvgData,
palettePrimaryDark,
palettePrimaryLight,
palettePrimaryMain,
title,
};
}; };

View File

@@ -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 { updateConfig } from '../../../../../../test/factories/config.js'; import { createBulkConfig } 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,
palettePrimaryMain: palettePrimaryMain, 'palette.primary.main': palettePrimaryMain,
palettePrimaryDark: palettePrimaryDark, 'palette.primary.dark': palettePrimaryDark,
palettePrimaryLight: palettePrimaryLight, 'palette.primary.light': palettePrimaryLight,
logoSvgData: logoSvgData, 'logo.svgData': logoSvgData,
}; };
await updateConfig(appConfig); await createBulkConfig(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).toStrictEqual(newTitle); expect(response.body.data.title).toEqual(newTitle);
expect(response.body.meta.type).toStrictEqual('Config'); expect(response.body.meta.type).toEqual('Object');
}); });
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).toStrictEqual(newTitle); expect(response.body.data.title).toEqual(newTitle);
expect(response.body.meta.type).toStrictEqual('Config'); expect(response.body.meta.type).toEqual('Object');
}); });
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).toStrictEqual('Config'); expect(response.body.meta.type).toEqual('Object');
}); });
}); });

View File

@@ -27,6 +27,6 @@ describe('GET /api/v1/admin/permissions/catalog', () => {
const expectedPayload = await getPermissionsCatalogMock(); const expectedPayload = await getPermissionsCatalogMock();
expect(response.body).toStrictEqual(expectedPayload); expect(response.body).toEqual(expectedPayload);
}); });
}); });

View File

@@ -58,7 +58,7 @@ describe('POST /api/v1/admin/roles', () => {
] ]
); );
expect(response.body).toStrictEqual(expectedPayload); expect(response.body).toEqual(expectedPayload);
}); });
it('should return unprocessable entity response for invalid role data', async () => { it('should return unprocessable entity response for invalid role data', async () => {

View File

@@ -92,4 +92,21 @@ 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);
});
}); });

View File

@@ -34,7 +34,7 @@ describe('GET /api/v1/admin/roles/:roleId', () => {
permissionTwo, permissionTwo,
]); ]);
expect(response.body).toStrictEqual(expectedPayload); expect(response.body).toEqual(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 () => {

View File

@@ -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).toStrictEqual(expectedPayload); expect(response.body).toEqual(expectedPayload);
}); });
}); });

View File

@@ -46,6 +46,6 @@ describe('GET /api/v1/admin/saml-auth-providers/:samlAuthProviderId/role-mapping
roleMappingTwo, roleMappingTwo,
]); ]);
expect(response.body).toStrictEqual(expectedPayload); expect(response.body).toEqual(expectedPayload);
}); });
}); });

View File

@@ -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).toStrictEqual(expectedPayload); expect(response.body).toEqual(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 () => {

View File

@@ -34,6 +34,6 @@ describe('GET /api/v1/admin/saml-auth-providers', () => {
samlAuthProviderOne, samlAuthProviderOne,
]); ]);
expect(response.body).toStrictEqual(expectedPayload); expect(response.body).toEqual(expectedPayload);
}); });
}); });

View File

@@ -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).toStrictEqual(expectedPayload); expect(response.body).toEqual(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 () => {

View File

@@ -40,6 +40,6 @@ describe('GET /api/v1/admin/users', () => {
[anotherUserRole, currentUserRole] [anotherUserRole, currentUserRole]
); );
expect(response.body).toStrictEqual(expectedResponsePayload); expect(response.body).toEqual(expectedResponsePayload);
}); });
}); });

View File

@@ -61,8 +61,7 @@ describe('PATCH /api/v1/admin/users/:userId', () => {
.send(anotherUserUpdatedData) .send(anotherUserUpdatedData)
.expect(422); .expect(422);
expect(response.body.meta.type).toStrictEqual('ModelValidation'); expect(response.body.meta.type).toEqual('ModelValidation');
expect(response.body.errors).toMatchObject({ expect(response.body.errors).toMatchObject({
email: ['must be string'], email: ['must be string'],
fullName: ['must be string'], fullName: ['must be string'],

View File

@@ -155,7 +155,7 @@ describe('POST /api/v1/apps/:appKey/connections', () => {
await createAppConfig({ await createAppConfig({
key: 'gitlab', key: 'gitlab',
disabled: false, disabled: false,
customConnectionAllowed: true, allowCustomConnection: true,
}); });
}); });
@@ -218,7 +218,7 @@ describe('POST /api/v1/apps/:appKey/connections', () => {
await createAppConfig({ await createAppConfig({
key: 'gitlab', key: 'gitlab',
disabled: false, disabled: false,
customConnectionAllowed: false, allowCustomConnection: false,
}); });
}); });

View File

@@ -29,7 +29,7 @@ describe('GET /api/v1/apps/:appKey/actions/:actionKey/substeps', () => {
.expect(200); .expect(200);
const expectedPayload = getActionSubstepsMock(exampleAction.substeps); const expectedPayload = getActionSubstepsMock(exampleAction.substeps);
expect(response.body).toStrictEqual(expectedPayload); expect(response.body).toEqual(expectedPayload);
}); });
it('should return not found response for invalid app key', async () => { it('should return not found response for invalid app key', async () => {
@@ -47,6 +47,6 @@ describe('GET /api/v1/apps/:appKey/actions/:actionKey/substeps', () => {
.set('Authorization', token) .set('Authorization', token)
.expect(200); .expect(200);
expect(response.body.data).toStrictEqual([]); expect(response.body.data).toEqual([]);
}); });
}); });

View File

@@ -23,7 +23,7 @@ describe('GET /api/v1/apps/:appKey/actions', () => {
.expect(200); .expect(200);
const expectedPayload = getActionsMock(exampleApp.actions); const expectedPayload = getActionsMock(exampleApp.actions);
expect(response.body).toStrictEqual(expectedPayload); expect(response.body).toEqual(expectedPayload);
}); });
it('should return not found response for invalid app key', async () => { it('should return not found response for invalid app key', async () => {

View File

@@ -23,7 +23,7 @@ describe('GET /api/v1/apps/:appKey', () => {
.expect(200); .expect(200);
const expectedPayload = getAppMock(exampleApp); const expectedPayload = getAppMock(exampleApp);
expect(response.body).toStrictEqual(expectedPayload); expect(response.body).toEqual(expectedPayload);
}); });
it('should return not found response for invalid app key', async () => { it('should return not found response for invalid app key', async () => {

View File

@@ -22,7 +22,7 @@ describe('GET /api/v1/apps', () => {
.expect(200); .expect(200);
const expectedPayload = getAppsMock(apps); const expectedPayload = getAppsMock(apps);
expect(response.body).toStrictEqual(expectedPayload); expect(response.body).toEqual(expectedPayload);
}); });
it('should return all apps filtered by name', async () => { it('should return all apps filtered by name', async () => {
@@ -34,7 +34,7 @@ describe('GET /api/v1/apps', () => {
.expect(200); .expect(200);
const expectedPayload = getAppsMock(appsWithNameGit); const expectedPayload = getAppsMock(appsWithNameGit);
expect(response.body).toStrictEqual(expectedPayload); expect(response.body).toEqual(expectedPayload);
}); });
it('should return only the apps with triggers', async () => { it('should return only the apps with triggers', async () => {
@@ -46,7 +46,7 @@ describe('GET /api/v1/apps', () => {
.expect(200); .expect(200);
const expectedPayload = getAppsMock(appsWithTriggers); const expectedPayload = getAppsMock(appsWithTriggers);
expect(response.body).toStrictEqual(expectedPayload); expect(response.body).toEqual(expectedPayload);
}); });
it('should return only the apps with actions', async () => { it('should return only the apps with actions', async () => {
@@ -58,6 +58,6 @@ describe('GET /api/v1/apps', () => {
.expect(200); .expect(200);
const expectedPayload = getAppsMock(appsWithActions); const expectedPayload = getAppsMock(appsWithActions);
expect(response.body).toStrictEqual(expectedPayload); expect(response.body).toEqual(expectedPayload);
}); });
}); });

View File

@@ -29,7 +29,7 @@ describe('GET /api/v1/apps/:appKey/auth-clients/:appAuthClientId', () => {
.expect(200); .expect(200);
const expectedPayload = getAppAuthClientMock(currentAppAuthClient); const expectedPayload = getAppAuthClientMock(currentAppAuthClient);
expect(response.body).toStrictEqual(expectedPayload); expect(response.body).toEqual(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 () => {

View File

@@ -37,6 +37,6 @@ describe('GET /api/v1/apps/:appKey/auth-clients', () => {
appAuthClientOne, appAuthClientOne,
]); ]);
expect(response.body).toStrictEqual(expectedPayload); expect(response.body).toEqual(expectedPayload);
}); });
}); });

View File

@@ -23,7 +23,7 @@ describe('GET /api/v1/apps/:appKey/auth', () => {
.expect(200); .expect(200);
const expectedPayload = getAuthMock(exampleApp.auth); const expectedPayload = getAuthMock(exampleApp.auth);
expect(response.body).toStrictEqual(expectedPayload); expect(response.body).toEqual(expectedPayload);
}); });
it('should return not found response for invalid app key', async () => { it('should return not found response for invalid app key', async () => {

View File

@@ -17,7 +17,7 @@ describe('GET /api/v1/apps/:appKey/config', () => {
appConfig = await createAppConfig({ appConfig = await createAppConfig({
key: 'deepl', key: 'deepl',
customConnectionAllowed: true, allowCustomConnection: true,
shared: true, shared: true,
disabled: false, disabled: false,
}); });
@@ -32,7 +32,7 @@ describe('GET /api/v1/apps/:appKey/config', () => {
.expect(200); .expect(200);
const expectedPayload = getAppConfigMock(appConfig); const expectedPayload = getAppConfigMock(appConfig);
expect(response.body).toStrictEqual(expectedPayload); expect(response.body).toEqual(expectedPayload);
}); });
it('should return not found response for not existing app key', async () => { it('should return not found response for not existing app key', async () => {

View File

@@ -47,7 +47,7 @@ describe('GET /api/v1/apps/:appKey/connections', () => {
currentUserConnectionOne, currentUserConnectionOne,
]); ]);
expect(response.body).toStrictEqual(expectedPayload); expect(response.body).toEqual(expectedPayload);
}); });
it('should return the connections data of specified app for another user', async () => { it('should return the connections data of specified app for another user', async () => {
@@ -82,7 +82,7 @@ describe('GET /api/v1/apps/:appKey/connections', () => {
anotherUserConnectionOne, anotherUserConnectionOne,
]); ]);
expect(response.body).toStrictEqual(expectedPayload); expect(response.body).toEqual(expectedPayload);
}); });
it('should return not found response for invalid connection UUID', async () => { it('should return not found response for invalid connection UUID', async () => {

Some files were not shown because too many files have changed in this diff Show More