From b7e5979d0cd07f335472b65eb3b6991bb8743256 Mon Sep 17 00:00:00 2001 From: chihlasm Date: Thu, 2 Apr 2026 15:20:38 +0000 Subject: [PATCH] feat: add featureFlags to authStore, fetched in fetchUser Loads resolved feature flags from /auth/me/feature-flags alongside user, account, and subscription data. Co-Authored-By: Claude Opus 4.6 --- frontend/src/store/authStore.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/frontend/src/store/authStore.ts b/frontend/src/store/authStore.ts index 3465b626..5c183aae 100644 --- a/frontend/src/store/authStore.ts +++ b/frontend/src/store/authStore.ts @@ -12,6 +12,7 @@ interface AuthState { token: Token | null account: Account | null subscription: SubscriptionDetails | null + featureFlags: Record isAuthenticated: boolean isLoading: boolean error: string | null @@ -33,6 +34,7 @@ export const useAuthStore = create()( token: null, account: null, subscription: null, + featureFlags: {}, isAuthenticated: false, isLoading: false, error: null, @@ -87,22 +89,24 @@ export const useAuthStore = create()( clearCachedQuota() Sentry.setUser(null) resetAnalytics() - set({ user: null, token: null, account: null, subscription: null, isAuthenticated: false, error: null }) + set({ user: null, token: null, account: null, subscription: null, featureFlags: {}, isAuthenticated: false, error: null }) } }, fetchUser: async () => { set({ isLoading: true }) try { - const [userResult, accountResult, subscriptionResult] = await Promise.allSettled([ + const [userResult, accountResult, subscriptionResult, flagsResult] = await Promise.allSettled([ authApi.me(), apiClient.get('/accounts/me').then(r => r.data), apiClient.get('/accounts/me/subscription').then(r => r.data), + apiClient.get>('/auth/me/feature-flags').then(r => r.data), ]) const user = userResult.status === 'fulfilled' ? userResult.value : null const account = accountResult.status === 'fulfilled' ? accountResult.value : null const subscription = subscriptionResult.status === 'fulfilled' ? subscriptionResult.value : null + const featureFlags = flagsResult.status === 'fulfilled' ? flagsResult.value : {} if (!user) { // User fetch failed — propagate the error @@ -116,7 +120,7 @@ export const useAuthStore = create()( // Identify user in PostHog for product analytics identifyUser({ id: user.id, email: user.email, role: user.role, is_super_admin: user.is_super_admin, account_id: account?.id }) - set({ user, account, subscription, isLoading: false }) + set({ user, account, subscription, featureFlags, isLoading: false }) } catch (error: unknown) { const message = error instanceof Error ? error.message : 'Failed to fetch user' set({ error: message, isLoading: false }) @@ -135,6 +139,7 @@ export const useAuthStore = create()( isAuthenticated: state.isAuthenticated, account: state.account, subscription: state.subscription, + featureFlags: state.featureFlags, }), } )