From feb5167771ae8ad439f2431fc781c5fd6ec17b98 Mon Sep 17 00:00:00 2001 From: Philipinho <16838612+Philipinho@users.noreply.github.com> Date: Mon, 15 Jun 2026 21:43:38 +0100 Subject: [PATCH] feat(confluence-import): hide API importer behind BETA_CONFLUENCE_IMPORTER flag --- apps/client/src/components/settings/settings-sidebar.tsx | 5 ++++- apps/client/src/lib/config.ts | 4 ++++ apps/client/vite.config.ts | 2 ++ .../src/integrations/environment/environment.service.ts | 7 +++++++ apps/server/src/integrations/static/static.module.ts | 2 ++ 5 files changed, 19 insertions(+), 1 deletion(-) diff --git a/apps/client/src/components/settings/settings-sidebar.tsx b/apps/client/src/components/settings/settings-sidebar.tsx index 59df2083a..654f1303d 100644 --- a/apps/client/src/components/settings/settings-sidebar.tsx +++ b/apps/client/src/components/settings/settings-sidebar.tsx @@ -20,7 +20,7 @@ import { import { Link, useLocation } from "react-router-dom"; import classes from "./settings.module.css"; import { useTranslation } from "react-i18next"; -import { isCloud } from "@/lib/config.ts"; +import { isBetaConfluenceImporter, isCloud } from "@/lib/config.ts"; import useUserRole from "@/hooks/use-user-role.tsx"; import { useAtom } from "jotai"; import { entitlementAtom } from "@/ee/entitlement/entitlement-atom"; @@ -52,6 +52,7 @@ type DataItem = { feature?: string; role?: "admin" | "owner"; env?: "cloud" | "selfhosted"; + show?: () => boolean; }; type DataGroup = { @@ -132,6 +133,7 @@ const groupedData: DataGroup[] = [ path: "/settings/import/confluence", feature: Feature.CONFLUENCE_API_IMPORT, role: "admin", + show: () => isBetaConfluenceImporter(), }, ], }, @@ -166,6 +168,7 @@ export default function SettingsSidebar() { entitlements?.features?.includes(f) ?? false; const canShowItem = (item: DataItem) => { + if (item.show && !item.show()) return false; if (item.env === "cloud" && !isCloud()) return false; if (item.env === "selfhosted" && isCloud()) return false; if (item.role === "admin" && !isAdmin) return false; diff --git a/apps/client/src/lib/config.ts b/apps/client/src/lib/config.ts index 67bbe1001..68ffde693 100644 --- a/apps/client/src/lib/config.ts +++ b/apps/client/src/lib/config.ts @@ -43,6 +43,10 @@ export function isCloud(): boolean { return castToBoolean(getConfigValue("CLOUD")); } +export function isBetaConfluenceImporter(): boolean { + return castToBoolean(getConfigValue("BETA_CONFLUENCE_IMPORTER")); +} + export function getAvatarUrl( avatarUrl: string, type: AvatarIconType = AvatarIconType.AVATAR, diff --git a/apps/client/vite.config.ts b/apps/client/vite.config.ts index a02b169fb..4ee0c821a 100644 --- a/apps/client/vite.config.ts +++ b/apps/client/vite.config.ts @@ -16,6 +16,7 @@ export default defineConfig(({ mode }) => { BILLING_TRIAL_DAYS, POSTHOG_HOST, POSTHOG_KEY, + BETA_CONFLUENCE_IMPORTER, } = loadEnv(mode, envPath, ""); return { @@ -31,6 +32,7 @@ export default defineConfig(({ mode }) => { BILLING_TRIAL_DAYS, POSTHOG_HOST, POSTHOG_KEY, + BETA_CONFLUENCE_IMPORTER }, APP_VERSION: JSON.stringify(process.env.npm_package_version), }, diff --git a/apps/server/src/integrations/environment/environment.service.ts b/apps/server/src/integrations/environment/environment.service.ts index abee1966f..611cac089 100644 --- a/apps/server/src/integrations/environment/environment.service.ts +++ b/apps/server/src/integrations/environment/environment.service.ts @@ -194,6 +194,13 @@ export class EnvironmentService { return !this.isCloud(); } + isBetaConfluenceImporter(): boolean { + const flag = this.configService + .get('BETA_CONFLUENCE_IMPORTER', 'false') + .toLowerCase(); + return flag === 'true'; + } + getStripePublishableKey(): string { return this.configService.get('STRIPE_PUBLISHABLE_KEY'); } diff --git a/apps/server/src/integrations/static/static.module.ts b/apps/server/src/integrations/static/static.module.ts index f0b7e8319..e5a4799c7 100644 --- a/apps/server/src/integrations/static/static.module.ts +++ b/apps/server/src/integrations/static/static.module.ts @@ -49,6 +49,8 @@ export class StaticModule implements OnModuleInit { : undefined, POSTHOG_HOST: this.environmentService.getPostHogHost(), POSTHOG_KEY: this.environmentService.getPostHogKey(), + BETA_CONFLUENCE_IMPORTER: + this.environmentService.isBetaConfluenceImporter(), }; const windowScriptContent = ``;