diff --git a/packages/backend/src/apps/placetel/assets/favicon.svg b/packages/backend/src/apps/placetel/assets/favicon.svg new file mode 100644 index 00000000..6df467ad --- /dev/null +++ b/packages/backend/src/apps/placetel/assets/favicon.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/packages/backend/src/apps/placetel/auth/index.ts b/packages/backend/src/apps/placetel/auth/index.ts new file mode 100644 index 00000000..6ce142f0 --- /dev/null +++ b/packages/backend/src/apps/placetel/auth/index.ts @@ -0,0 +1,21 @@ +import verifyCredentials from './verify-credentials'; +import isStillVerified from './is-still-verified'; + +export default { + fields: [ + { + key: 'apiToken', + label: 'API Token', + type: 'string' as const, + required: true, + readOnly: false, + value: null, + placeholder: null, + description: 'Placetel API Token of your account.', + clickToCopy: false, + }, + ], + + verifyCredentials, + isStillVerified, +}; diff --git a/packages/backend/src/apps/placetel/auth/is-still-verified.ts b/packages/backend/src/apps/placetel/auth/is-still-verified.ts new file mode 100644 index 00000000..66bb963e --- /dev/null +++ b/packages/backend/src/apps/placetel/auth/is-still-verified.ts @@ -0,0 +1,9 @@ +import { IGlobalVariable } from '@automatisch/types'; +import verifyCredentials from './verify-credentials'; + +const isStillVerified = async ($: IGlobalVariable) => { + await verifyCredentials($); + return true; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/placetel/auth/verify-credentials.ts b/packages/backend/src/apps/placetel/auth/verify-credentials.ts new file mode 100644 index 00000000..7fab269f --- /dev/null +++ b/packages/backend/src/apps/placetel/auth/verify-credentials.ts @@ -0,0 +1,11 @@ +import { IGlobalVariable } from '@automatisch/types'; + +const verifyCredentials = async ($: IGlobalVariable) => { + const { data } = await $.http.get('/v2/me'); + + await $.auth.set({ + screenName: `${data.name} @ ${data.company}`, + }); +}; + +export default verifyCredentials; diff --git a/packages/backend/src/apps/placetel/common/add-auth-header.ts b/packages/backend/src/apps/placetel/common/add-auth-header.ts new file mode 100644 index 00000000..8a77a497 --- /dev/null +++ b/packages/backend/src/apps/placetel/common/add-auth-header.ts @@ -0,0 +1,11 @@ +import { TBeforeRequest } from '@automatisch/types'; + +const addAuthHeader: TBeforeRequest = ($, requestConfig) => { + if ($.auth.data?.apiToken) { + requestConfig.headers.Authorization = `Bearer ${$.auth.data.apiToken}`; + } + + return requestConfig; +}; + +export default addAuthHeader; diff --git a/packages/backend/src/apps/placetel/index.ts b/packages/backend/src/apps/placetel/index.ts new file mode 100644 index 00000000..c8cdeb2d --- /dev/null +++ b/packages/backend/src/apps/placetel/index.ts @@ -0,0 +1,16 @@ +import defineApp from '../../helpers/define-app'; +import addAuthHeader from './common/add-auth-header'; +import auth from './auth'; + +export default defineApp({ + name: 'Placetel', + key: 'placetel', + iconUrl: '{BASE_URL}/apps/placetel/assets/favicon.svg', + authDocUrl: 'https://automatisch.io/docs/apps/placetel/connection', + supportsConnections: true, + baseUrl: 'https://placetel.de', + apiBaseUrl: 'https://api.placetel.de', + primaryColor: '069dd9', + beforeRequest: [addAuthHeader], + auth, +});