Feat/workspaces 5 auth gate check (#8350)

## Summary

- Fix auth related race conditions with a new WorkspaceAuthGate in
App.vue
- De dup initialization calls 
- Add state machine to track state of refreshRemoteConfig
- Fix websocket not using new workspace jwt
- Misc improvments

## Changes

- **What**: Mainly WorkspaceAuthGate.vue
- **Breaking**: <!-- Any breaking changes (if none, remove this line)
-->
- **Dependencies**: <!-- New dependencies (if none, remove this line)
-->

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8350-Feat-workspaces-5-auth-gate-check-2f66d73d365081b1a49afcd418fab3e7)
by [Unito](https://www.unito.io)
This commit is contained in:
Simula_r
2026-01-27 20:28:44 -08:00
committed by GitHub
parent d890e7568a
commit 34fc28a39d
12 changed files with 428 additions and 51 deletions

View File

@@ -10,10 +10,32 @@
* This module is tree-shaken in OSS builds.
*/
import { ref } from 'vue'
import { computed, ref } from 'vue'
import type { RemoteConfig } from './types'
/**
* Load state for remote configuration.
* - 'unloaded': No config loaded yet
* - 'anonymous': Config loaded without auth (bootstrap)
* - 'authenticated': Config loaded with auth (user-specific flags available)
* - 'error': Failed to load config
*/
type RemoteConfigState = 'unloaded' | 'anonymous' | 'authenticated' | 'error'
/**
* Current load state of remote configuration
*/
export const remoteConfigState = ref<RemoteConfigState>('unloaded')
/**
* Whether the authenticated config has been loaded.
* Use this to gate access to user-specific feature flags like teamWorkspacesEnabled.
*/
export const isAuthenticatedConfigLoaded = computed(
() => remoteConfigState.value === 'authenticated'
)
/**
* Reactive remote configuration
* Updated whenever config is loaded from the server