Skip to content

Commit dba1e76

Browse files
authored
refactor: isFeatureEnabled uses internal feature_flag api (#255)
1 parent 432e5eb commit dba1e76

2 files changed

Lines changed: 59 additions & 7 deletions

File tree

src/lib/posthog.ts

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -81,14 +81,20 @@ export const isFeatureEnabled = async (feature: FeatureFlags) => {
8181
return cachedFlag.value;
8282
}
8383

84-
// If not in cache or expired, fetch from PostHog
85-
const result = await postHogClient.isFeatureEnabled(
86-
feature,
87-
exchangeAccountId,
88-
);
84+
// Fetch from the v2/feature_flags API
85+
let finalResult = false;
86+
try {
87+
const client = await apiClient(config.auth_token);
88+
const { data, response } = await client.GET(
89+
"/v2/feature_flags/{feature_flag_id}",
90+
{ params: { path: { feature_flag_id: feature } } },
91+
);
92+
// 404 means the flag doesn't exist → treat as disabled (false)
93+
finalResult = response.ok ? (data?.enabled ?? false) : false;
94+
} catch {
95+
// Network or parse error → default to false
96+
}
8997

90-
// Cache the result (PostHog returns undefined if there's an error, default to false)
91-
const finalResult = result ?? false;
9298
await cacheFeatureFlag(feature, exchangeAccountId, finalResult);
9399

94100
return finalResult;

src/schema.ts

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1433,6 +1433,23 @@ export interface paths {
14331433
patch?: never;
14341434
trace?: never;
14351435
};
1436+
"/v2/feature_flags/{feature_flag_id}": {
1437+
parameters: {
1438+
query?: never;
1439+
header?: never;
1440+
path?: never;
1441+
cookie?: never;
1442+
};
1443+
/** Get feature flag status for the authenticated user */
1444+
get: operations["get_feature_flag"];
1445+
put?: never;
1446+
post?: never;
1447+
delete?: never;
1448+
options?: never;
1449+
head?: never;
1450+
patch?: never;
1451+
trace?: never;
1452+
};
14361453
"/v1/inference/batches": {
14371454
parameters: {
14381455
query?: never;
@@ -9223,6 +9240,35 @@ export interface operations {
92239240
};
92249241
};
92259242
};
9243+
get_feature_flag: {
9244+
parameters: {
9245+
query?: never;
9246+
header?: never;
9247+
path: {
9248+
feature_flag_id: string;
9249+
};
9250+
cookie?: never;
9251+
};
9252+
requestBody?: never;
9253+
responses: {
9254+
/** @description Feature flag status */
9255+
200: {
9256+
headers: { [name: string]: unknown };
9257+
content: {
9258+
"application/json": {
9259+
enabled: boolean;
9260+
};
9261+
};
9262+
};
9263+
/** @description Feature flag not found */
9264+
404: {
9265+
headers: { [name: string]: unknown };
9266+
content: {
9267+
"application/json": unknown;
9268+
};
9269+
};
9270+
};
9271+
};
92269272
handle_quote: {
92279273
parameters: {
92289274
query: {

0 commit comments

Comments
 (0)