From 9746cf121e8fb166cac746e30fdb8d8a1b3dc192 Mon Sep 17 00:00:00 2001 From: Shantanu Joshi Date: Mon, 16 Mar 2026 10:11:42 -0700 Subject: [PATCH] migrate: isFeatureFlagEnabled uses internal feature_flag api instead of posthog --- src/lib/posthog.ts | 20 +++++++++++++------- src/schema.ts | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+), 7 deletions(-) diff --git a/src/lib/posthog.ts b/src/lib/posthog.ts index d4a88e2..06211b4 100644 --- a/src/lib/posthog.ts +++ b/src/lib/posthog.ts @@ -81,14 +81,20 @@ export const isFeatureEnabled = async (feature: FeatureFlags) => { return cachedFlag.value; } - // If not in cache or expired, fetch from PostHog - const result = await postHogClient.isFeatureEnabled( - feature, - exchangeAccountId, - ); + // Fetch from the v2/feature_flags API + let finalResult = false; + try { + const client = await apiClient(config.auth_token); + const { data, response } = await client.GET( + "/v2/feature_flags/{feature_flag_id}", + { params: { path: { feature_flag_id: feature } } }, + ); + // 404 means the flag doesn't exist → treat as disabled (false) + finalResult = response.ok ? (data?.enabled ?? false) : false; + } catch { + // Network or parse error → default to false + } - // Cache the result (PostHog returns undefined if there's an error, default to false) - const finalResult = result ?? false; await cacheFeatureFlag(feature, exchangeAccountId, finalResult); return finalResult; diff --git a/src/schema.ts b/src/schema.ts index 2a93bd0..7b06c12 100644 --- a/src/schema.ts +++ b/src/schema.ts @@ -1433,6 +1433,23 @@ export interface paths { patch?: never; trace?: never; }; + "/v2/feature_flags/{feature_flag_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get feature flag status for the authenticated user */ + get: operations["get_feature_flag"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; "/v1/inference/batches": { parameters: { query?: never; @@ -9223,6 +9240,35 @@ export interface operations { }; }; }; + get_feature_flag: { + parameters: { + query?: never; + header?: never; + path: { + feature_flag_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Feature flag status */ + 200: { + headers: { [name: string]: unknown }; + content: { + "application/json": { + enabled: boolean; + }; + }; + }; + /** @description Feature flag not found */ + 404: { + headers: { [name: string]: unknown }; + content: { + "application/json": unknown; + }; + }; + }; + }; handle_quote: { parameters: { query: {