diff --git a/packages/backend/src/apps/airbrake/assets/favicon.svg b/packages/backend/src/apps/airbrake/assets/favicon.svg new file mode 100644 index 00000000..919f200b --- /dev/null +++ b/packages/backend/src/apps/airbrake/assets/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/backend/src/apps/airbrake/auth/index.js b/packages/backend/src/apps/airbrake/auth/index.js new file mode 100644 index 00000000..17eefd0a --- /dev/null +++ b/packages/backend/src/apps/airbrake/auth/index.js @@ -0,0 +1,44 @@ +import verifyCredentials from './verify-credentials.js'; +import isStillVerified from './is-still-verified.js'; + +export default { + fields: [ + { + key: 'screenName', + label: 'Screen Name', + type: 'string', + required: true, + readOnly: false, + value: null, + placeholder: null, + description: + 'Screen name of your connection to be used on Automatisch UI.', + clickToCopy: false, + }, + { + key: 'instanceUrl', + label: 'Instance URL', + type: 'string', + required: true, + readOnly: false, + value: null, + placeholder: null, + description: 'Your subdomain as https://{yoursubdomain}.airbrake.io', + clickToCopy: false, + }, + { + key: 'authToken', + label: 'Auth Token', + type: 'string', + required: true, + readOnly: false, + value: null, + placeholder: null, + description: 'Airbrake Auth Token of your account.', + clickToCopy: false, + }, + ], + + verifyCredentials, + isStillVerified, +}; diff --git a/packages/backend/src/apps/airbrake/auth/is-still-verified.js b/packages/backend/src/apps/airbrake/auth/is-still-verified.js new file mode 100644 index 00000000..6663679a --- /dev/null +++ b/packages/backend/src/apps/airbrake/auth/is-still-verified.js @@ -0,0 +1,8 @@ +import verifyCredentials from './verify-credentials.js'; + +const isStillVerified = async ($) => { + await verifyCredentials($); + return true; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/airbrake/auth/verify-credentials.js b/packages/backend/src/apps/airbrake/auth/verify-credentials.js new file mode 100644 index 00000000..2ef5c853 --- /dev/null +++ b/packages/backend/src/apps/airbrake/auth/verify-credentials.js @@ -0,0 +1,14 @@ +const verifyCredentials = async ($) => { + await $.http.get(`/api/v4/projects?key=${$.auth.data.authToken}`, { + additionalProperties: { + skipAddingAuthToken: true, + }, + }); + + await $.auth.set({ + screenName: $.auth.data.screenName, + authToken: $.auth.data.authToken, + }); +}; + +export default verifyCredentials; diff --git a/packages/backend/src/apps/airbrake/common/add-auth-token.js b/packages/backend/src/apps/airbrake/common/add-auth-token.js new file mode 100644 index 00000000..bc6d3c11 --- /dev/null +++ b/packages/backend/src/apps/airbrake/common/add-auth-token.js @@ -0,0 +1,10 @@ +const addAuthToken = ($, requestConfig) => { + if (requestConfig.additionalProperties?.skipAddingAuthToken) + return requestConfig; + + requestConfig.url = requestConfig.url + `?key=${$.auth.data.authToken}`; + + return requestConfig; +}; + +export default addAuthToken; diff --git a/packages/backend/src/apps/airbrake/common/set-base-url.js b/packages/backend/src/apps/airbrake/common/set-base-url.js new file mode 100644 index 00000000..438f5b7d --- /dev/null +++ b/packages/backend/src/apps/airbrake/common/set-base-url.js @@ -0,0 +1,11 @@ +const setBaseUrl = ($, requestConfig) => { + const subdomain = $.auth.data.instanceUrl; + + if (subdomain) { + requestConfig.baseURL = `https://${subdomain}.airbrake.io`; + } + + return requestConfig; +}; + +export default setBaseUrl; diff --git a/packages/backend/src/apps/airbrake/index.js b/packages/backend/src/apps/airbrake/index.js new file mode 100644 index 00000000..31d252f7 --- /dev/null +++ b/packages/backend/src/apps/airbrake/index.js @@ -0,0 +1,17 @@ +import defineApp from '../../helpers/define-app.js'; +import setBaseUrl from './common/set-base-url.js'; +import auth from './auth/index.js'; +import addAuthToken from './common/add-auth-token.js'; + +export default defineApp({ + name: 'Airbrake', + key: 'airbrake', + iconUrl: '{BASE_URL}/apps/airbrake/assets/favicon.svg', + authDocUrl: 'https://automatisch.io/docs/apps/airbrake/connection', + supportsConnections: true, + baseUrl: 'https://www.airbrake.io', + apiBaseUrl: '', + primaryColor: 'f58c54', + beforeRequest: [setBaseUrl, addAuthToken], + auth, +}); diff --git a/packages/docs/pages/.vitepress/config.js b/packages/docs/pages/.vitepress/config.js index 04d3fdcf..363c0af3 100644 --- a/packages/docs/pages/.vitepress/config.js +++ b/packages/docs/pages/.vitepress/config.js @@ -32,6 +32,12 @@ export default defineConfig({ ], sidebar: { '/apps/': [ + { + text: 'Airbrake', + collapsible: true, + collapsed: true, + items: [{ text: 'Connection', link: '/apps/airbrake/connection' }], + }, { text: 'Carbone', collapsible: true, @@ -305,7 +311,7 @@ export default defineConfig({ collapsed: true, items: [ { text: 'Actions', link: '/apps/removebg/actions' }, - { text: 'Connection', link: '/apps/removebg/connection' } + { text: 'Connection', link: '/apps/removebg/connection' }, ], }, { diff --git a/packages/docs/pages/apps/airbrake/connection.md b/packages/docs/pages/apps/airbrake/connection.md new file mode 100644 index 00000000..0526252f --- /dev/null +++ b/packages/docs/pages/apps/airbrake/connection.md @@ -0,0 +1,13 @@ +# Airbrake + +:::info +This page explains the steps you need to follow to set up the Airbrake +connection in Automatisch. If any of the steps are outdated, please let us know! +::: + +1. Login to your Airbrake account: [https://www.airbrake.io/](https://www.airbrake.io/). +2. Go to your profile & notifications page. +3. Copy `Auth Token` from the page to the `Auth Token` field on Automatisch. +4. Fill the instance URL field with your subdomain. (https://{yoursubdomain}.airbrake.io) +5. Write any screen name to be displayed in Automatisch. +6. Now, you can start using the Airbrake connection with Automatisch. diff --git a/packages/docs/pages/public/favicons/airbrake.svg b/packages/docs/pages/public/favicons/airbrake.svg new file mode 100644 index 00000000..919f200b --- /dev/null +++ b/packages/docs/pages/public/favicons/airbrake.svg @@ -0,0 +1 @@ + \ No newline at end of file