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 <noreply@anthropic.com>
This commit is contained in:
@@ -12,6 +12,7 @@ interface AuthState {
|
||||
token: Token | null
|
||||
account: Account | null
|
||||
subscription: SubscriptionDetails | null
|
||||
featureFlags: Record<string, boolean>
|
||||
isAuthenticated: boolean
|
||||
isLoading: boolean
|
||||
error: string | null
|
||||
@@ -33,6 +34,7 @@ export const useAuthStore = create<AuthState>()(
|
||||
token: null,
|
||||
account: null,
|
||||
subscription: null,
|
||||
featureFlags: {},
|
||||
isAuthenticated: false,
|
||||
isLoading: false,
|
||||
error: null,
|
||||
@@ -87,22 +89,24 @@ export const useAuthStore = create<AuthState>()(
|
||||
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<Account>('/accounts/me').then(r => r.data),
|
||||
apiClient.get<SubscriptionDetails>('/accounts/me/subscription').then(r => r.data),
|
||||
apiClient.get<Record<string, boolean>>('/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<AuthState>()(
|
||||
// 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<AuthState>()(
|
||||
isAuthenticated: state.isAuthenticated,
|
||||
account: state.account,
|
||||
subscription: state.subscription,
|
||||
featureFlags: state.featureFlags,
|
||||
}),
|
||||
}
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user