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
|
token: Token | null
|
||||||
account: Account | null
|
account: Account | null
|
||||||
subscription: SubscriptionDetails | null
|
subscription: SubscriptionDetails | null
|
||||||
|
featureFlags: Record<string, boolean>
|
||||||
isAuthenticated: boolean
|
isAuthenticated: boolean
|
||||||
isLoading: boolean
|
isLoading: boolean
|
||||||
error: string | null
|
error: string | null
|
||||||
@@ -33,6 +34,7 @@ export const useAuthStore = create<AuthState>()(
|
|||||||
token: null,
|
token: null,
|
||||||
account: null,
|
account: null,
|
||||||
subscription: null,
|
subscription: null,
|
||||||
|
featureFlags: {},
|
||||||
isAuthenticated: false,
|
isAuthenticated: false,
|
||||||
isLoading: false,
|
isLoading: false,
|
||||||
error: null,
|
error: null,
|
||||||
@@ -87,22 +89,24 @@ export const useAuthStore = create<AuthState>()(
|
|||||||
clearCachedQuota()
|
clearCachedQuota()
|
||||||
Sentry.setUser(null)
|
Sentry.setUser(null)
|
||||||
resetAnalytics()
|
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 () => {
|
fetchUser: async () => {
|
||||||
set({ isLoading: true })
|
set({ isLoading: true })
|
||||||
try {
|
try {
|
||||||
const [userResult, accountResult, subscriptionResult] = await Promise.allSettled([
|
const [userResult, accountResult, subscriptionResult, flagsResult] = await Promise.allSettled([
|
||||||
authApi.me(),
|
authApi.me(),
|
||||||
apiClient.get<Account>('/accounts/me').then(r => r.data),
|
apiClient.get<Account>('/accounts/me').then(r => r.data),
|
||||||
apiClient.get<SubscriptionDetails>('/accounts/me/subscription').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 user = userResult.status === 'fulfilled' ? userResult.value : null
|
||||||
const account = accountResult.status === 'fulfilled' ? accountResult.value : null
|
const account = accountResult.status === 'fulfilled' ? accountResult.value : null
|
||||||
const subscription = subscriptionResult.status === 'fulfilled' ? subscriptionResult.value : null
|
const subscription = subscriptionResult.status === 'fulfilled' ? subscriptionResult.value : null
|
||||||
|
const featureFlags = flagsResult.status === 'fulfilled' ? flagsResult.value : {}
|
||||||
|
|
||||||
if (!user) {
|
if (!user) {
|
||||||
// User fetch failed — propagate the error
|
// User fetch failed — propagate the error
|
||||||
@@ -116,7 +120,7 @@ export const useAuthStore = create<AuthState>()(
|
|||||||
// Identify user in PostHog for product analytics
|
// 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 })
|
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) {
|
} catch (error: unknown) {
|
||||||
const message = error instanceof Error ? error.message : 'Failed to fetch user'
|
const message = error instanceof Error ? error.message : 'Failed to fetch user'
|
||||||
set({ error: message, isLoading: false })
|
set({ error: message, isLoading: false })
|
||||||
@@ -135,6 +139,7 @@ export const useAuthStore = create<AuthState>()(
|
|||||||
isAuthenticated: state.isAuthenticated,
|
isAuthenticated: state.isAuthenticated,
|
||||||
account: state.account,
|
account: state.account,
|
||||||
subscription: state.subscription,
|
subscription: state.subscription,
|
||||||
|
featureFlags: state.featureFlags,
|
||||||
}),
|
}),
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user