diff --git a/server/lib/config.ts b/server/lib/config.ts
index 4cd8bbfdb..6c6c876aa 100644
--- a/server/lib/config.ts
+++ b/server/lib/config.ts
@@ -112,6 +112,11 @@ export class Config {
? "true"
: "false";
+ process.env.FLAGS_DISABLE_VIRTUAL_API_KEYS_UI = parsedConfig.flags
+ ?.disable_virtual_api_keys_ui
+ ? "true"
+ : "false";
+
this.rawConfig = parsedConfig;
}
diff --git a/server/lib/readConfigFile.ts b/server/lib/readConfigFile.ts
index bf144ac97..462d73c1c 100644
--- a/server/lib/readConfigFile.ts
+++ b/server/lib/readConfigFile.ts
@@ -442,6 +442,7 @@ export const configSchema = z
disable_config_managed_domains: z.boolean().optional(),
disable_product_help_banners: z.boolean().optional(),
disable_enterprise_features: z.boolean().optional(),
+ disable_virtual_api_keys_ui: z.boolean().optional(),
enable_acme_cert_sync: z.boolean().optional().default(true),
disable_private_http_placeholder: z
.boolean()
diff --git a/server/private/routers/ws/ws.ts b/server/private/routers/ws/ws.ts
index 34356a8c8..4a79ff006 100644
--- a/server/private/routers/ws/ws.ts
+++ b/server/private/routers/ws/ws.ts
@@ -104,7 +104,8 @@ const processMessage = async (
const handler = messageHandlers[message.type];
if (!handler) {
- throw new Error(`Unsupported message type: ${message.type}`);
+ logger.debug(`No handler found for message type: ${message.type}`);
+ return;
}
const response = await handler({
diff --git a/server/routers/ws/ws.ts b/server/routers/ws/ws.ts
index 62aee93bd..358ff8b81 100644
--- a/server/routers/ws/ws.ts
+++ b/server/routers/ws/ws.ts
@@ -353,7 +353,10 @@ const setupConnection = async (
const handler = messageHandlers[message.type];
if (!handler) {
- throw new Error(`Unsupported message type: ${message.type}`);
+ logger.debug(
+ `No handler found for message type: ${message.type}`
+ );
+ return;
}
const response = await handler({
diff --git a/src/app/[orgId]/keys/page.tsx b/src/app/[orgId]/keys/page.tsx
index e8341dd29..9ec09df78 100644
--- a/src/app/[orgId]/keys/page.tsx
+++ b/src/app/[orgId]/keys/page.tsx
@@ -76,6 +76,11 @@ export default async function KeysPage(props: KeysPageProps) {
redirect("/");
}
+ const env = pullEnv();
+ if (env.flags.disableVirtualApiKeysUi) {
+ redirect(`/${orgId}`);
+ }
+
let keysData: ListMyVirtualApiKeysResponse | null = null;
try {
const res = await internal.get<
@@ -90,7 +95,6 @@ export default async function KeysPage(props: KeysPageProps) {
redirect(`/${orgId}`);
}
- const env = pullEnv();
const primaryOrg = orgs.find((o) => o.orgId === orgId)?.isPrimaryOrg;
const isAdminOrOwner = Boolean(overview?.isAdmin || overview?.isOwner);
@@ -106,6 +110,7 @@ export default async function KeysPage(props: KeysPageProps) {
showSidebar={false}
launcherMode
showViewAsAdmin={isAdminOrOwner}
+ env={env}
>
diff --git a/src/app/[orgId]/page.tsx b/src/app/[orgId]/page.tsx
index 614db095d..84d7f8edf 100644
--- a/src/app/[orgId]/page.tsx
+++ b/src/app/[orgId]/page.tsx
@@ -83,6 +83,7 @@ export default async function OrgPage(props: OrgPageProps) {
showSidebar={false}
launcherMode
showViewAsAdmin={isAdminOrOwner}
+ env={env}
>
{overview && launcherData ? (