From b12f39916facf046041f2838c473b0a04c1a5eca Mon Sep 17 00:00:00 2001 From: Faruk AYDIN Date: Fri, 8 Sep 2023 18:07:00 +0200 Subject: [PATCH] feat(hubspot): Implement generate auth url for OAuth --- .../apps/hubspot/auth/generate-auth-url.ts | 21 +++++++++++ .../backend/src/apps/hubspot/auth/index.ts | 36 ++++++++++++++++--- packages/backend/src/apps/hubspot/index.ts | 2 +- 3 files changed, 53 insertions(+), 6 deletions(-) create mode 100644 packages/backend/src/apps/hubspot/auth/generate-auth-url.ts diff --git a/packages/backend/src/apps/hubspot/auth/generate-auth-url.ts b/packages/backend/src/apps/hubspot/auth/generate-auth-url.ts new file mode 100644 index 00000000..33ecbb09 --- /dev/null +++ b/packages/backend/src/apps/hubspot/auth/generate-auth-url.ts @@ -0,0 +1,21 @@ +import { IField, IGlobalVariable } from '@automatisch/types'; +import { URLSearchParams } from 'url'; + +const scopes = ['crm.objects.contacts.read', 'crm.objects.contacts.write']; + +export default async function generateAuthUrl($: IGlobalVariable) { + const oauthRedirectUrlField = $.app.auth.fields.find( + (field: IField) => field.key == 'oAuthRedirectUrl' + ); + const callbackUrl = oauthRedirectUrlField.value as string; + + const searchParams = new URLSearchParams({ + client_id: $.auth.data.clientId as string, + redirect_uri: callbackUrl, + scope: scopes.join(' '), + }); + + const url = `https://app.hubspot.com/oauth/authorize?${searchParams.toString()}`; + + await $.auth.set({ url }); +} diff --git a/packages/backend/src/apps/hubspot/auth/index.ts b/packages/backend/src/apps/hubspot/auth/index.ts index 02064ff5..a5509677 100644 --- a/packages/backend/src/apps/hubspot/auth/index.ts +++ b/packages/backend/src/apps/hubspot/auth/index.ts @@ -1,11 +1,35 @@ -import verifyCredentials from "./verify-credentials"; -import isStillVerified from "./is-still-verified"; +import generateAuthUrl from './generate-auth-url'; +import verifyCredentials from './verify-credentials'; +import isStillVerified from './is-still-verified'; export default { fields: [ { - key: 'accessToken', - label: 'Access Token', + key: 'oAuthRedirectUrl', + label: 'OAuth Redirect URL', + type: 'string' as const, + required: true, + readOnly: true, + value: '{WEB_APP_URL}/app/hubspot/connections/add', + placeholder: null, + description: + 'When asked to input an OAuth callback or redirect URL in HubSpot OAuth, enter the URL above.', + clickToCopy: true, + }, + { + key: 'clientId', + label: 'Client ID', + type: 'string' as const, + required: true, + readOnly: false, + value: null, + placeholder: null, + description: null, + clickToCopy: false, + }, + { + key: 'clientSecret', + label: 'Client Secret', type: 'string' as const, required: true, readOnly: false, @@ -15,6 +39,8 @@ export default { clickToCopy: false, }, ], + + generateAuthUrl, verifyCredentials, - isStillVerified + isStillVerified, }; diff --git a/packages/backend/src/apps/hubspot/index.ts b/packages/backend/src/apps/hubspot/index.ts index aa71e901..672bb9b4 100644 --- a/packages/backend/src/apps/hubspot/index.ts +++ b/packages/backend/src/apps/hubspot/index.ts @@ -4,7 +4,7 @@ import actions from './actions'; import auth from './auth'; export default defineApp({ - name: 'Hubspot', + name: 'HubSpot', key: 'hubspot', iconUrl: '{BASE_URL}/apps/hubspot/assets/favicon.svg', authDocUrl: 'https://automatisch.io/docs/apps/hubspot/connection',