From b4e6f73b78f6c25389521f22cfd167f71e6bd0f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Sibiril?= <81782+aureliensibiril@users.noreply.github.com> Date: Wed, 3 Jun 2026 16:03:18 +0200 Subject: [PATCH] Merge PostHog self-hosted into a single PostHog provider MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fold POSTHOG_SELF_HOSTED into POSTHOG: one provider now covers Cloud (OAuth + region-pinned API key) and self-hosted (API key + instance URL), since both already share the driver, name resolver, and PostHogConnectorSettings{BaseURL}. The API-key form picks a deployment (Cloud US/EU or self-hosted URL); the resolver requires exactly one of region/instanceUrl. Drop the POSTHOG_SELF_HOSTED enum value, registration, migration, and logo mapping. Extract the deployment selector into a dedicated PostHogDeploymentField component. Point the driver tests at us.posthog.com instead of the legacy app.posthog.com host. Signed-off-by: Aurélien Sibiril <81782+aureliensibiril@users.noreply.github.com> --- .../dialogs/AddAccessSourceDialog.tsx | 79 ++++++++++--------- .../dialogs/PostHogDeploymentField.tsx | 79 +++++++++++++++++++ .../src/Atoms/ThirdParties/ThirdPartyLogo.tsx | 1 - pkg/accessreview/drivers/posthog_test.go | 4 +- .../drivers/testdata/posthog.yaml | 4 +- pkg/connector/provider/builtin.go | 1 - pkg/connector/provider/posthog.go | 23 ++++-- pkg/connector/provider/posthog_self_hosted.go | 71 ----------------- pkg/coredata/connector_provider.go | 66 +++++++--------- pkg/coredata/connector_settings.go | 13 +-- pkg/coredata/migrations/20260529T617403Z.sql | 15 ---- .../api/console/v1/connector_settings.go | 41 ++++++---- .../api/console/v1/graphql/connector.graphql | 4 - 13 files changed, 203 insertions(+), 198 deletions(-) create mode 100644 apps/console/src/pages/organizations/access-reviews/dialogs/PostHogDeploymentField.tsx delete mode 100644 pkg/connector/provider/posthog_self_hosted.go delete mode 100644 pkg/coredata/migrations/20260529T617403Z.sql diff --git a/apps/console/src/pages/organizations/access-reviews/dialogs/AddAccessSourceDialog.tsx b/apps/console/src/pages/organizations/access-reviews/dialogs/AddAccessSourceDialog.tsx index 0095e079a..0c056beb1 100644 --- a/apps/console/src/pages/organizations/access-reviews/dialogs/AddAccessSourceDialog.tsx +++ b/apps/console/src/pages/organizations/access-reviews/dialogs/AddAccessSourceDialog.tsx @@ -43,6 +43,10 @@ import type { AddAccessSourceDialogCreateAPIKeyConnectorMutation } from "#/__gen import type { AddAccessSourceDialogCreateClientCredentialsConnectorMutation } from "#/__generated__/core/AddAccessSourceDialogCreateClientCredentialsConnectorMutation.graphql"; import { createAccessSourceMutation } from "./accessSourceMutations"; +import { + isPostHogDeploymentSelected, + PostHogDeploymentField, +} from "./PostHogDeploymentField"; export const addAccessSourceDialogConnectorProviderInfoFragment = graphql` fragment AddAccessSourceDialogConnectorProviderInfoFragment on ConnectorProviderInfo @relay(plural: true) { @@ -124,8 +128,6 @@ function mapAPIKeyExtraSettingToField( break; case "POSTHOG": if (settingKey === "region") return "posthogRegion"; - break; - case "POSTHOG_SELF_HOSTED": if (settingKey === "instanceUrl") return "posthogInstanceUrl"; break; } @@ -503,6 +505,43 @@ export function AddAccessSourceDialog({ ); }; + // PostHog renders a dedicated deployment selector (Cloud region or + // self-hosted URL); every other provider falls back to generic fields. + const renderAPIKeyExtraSettings = () => { + if (!activeProvider) { + return null; + } + + if (activeProvider.provider === "POSTHOG") { + return ( + + ); + } + + return activeProvider.extraSettings.map((setting) => { + const value = extraSettingValues[setting.key] ?? ""; + return ( + ) => + setExtraSettingValues(prev => ({ ...prev, [setting.key]: e.target.value }))} + required={setting.required} + /> + ); + }); + }; + + // PostHog's extra settings are individually optional (region OR instance + // URL), so the generic required-field check can't gate it. + const postHogAPIKeyValid + = activeProvider?.provider !== "POSTHOG" + || isPostHogDeploymentSelected(extraSettingValues); + const apiKeyExtraSettingsValid = activeProvider ? hasRequiredExtraSettings(activeProvider.extraSettings, extraSettingValues) : true; @@ -586,40 +625,7 @@ export function AddAccessSourceDialog({ required autoFocus /> - {activeProvider?.extraSettings.map((setting) => { - const value = extraSettingValues[setting.key] ?? ""; - const setValue = (next: string) => - setExtraSettingValues(prev => ({ ...prev, [setting.key]: next })); - - // The "region" setting is a fixed US/EU choice; every other - // extra setting is a free-text field. - if (setting.key === "region") { - return ( -
- - -
- ); - } - - return ( - ) => - setValue(e.target.value)} - required={setting.required} - /> - ); - })} + {renderAPIKeyExtraSettings()}