@@ -38,6 +38,33 @@ export const HELP_MENU_LIST = [
3838]
3939
4040const HEADER_MOBILE_STYLE_ID = 'solid-ui-header-mobile-style'
41+ let authRefreshInFlight : Promise < void > | null = null
42+
43+ async function ensureAuthUserResolved ( ) : Promise < void > {
44+ if ( authn . currentUser ( ) ) return
45+ if ( authRefreshInFlight ) {
46+ await authRefreshInFlight
47+ return
48+ }
49+
50+ authRefreshInFlight = ( async ( ) => {
51+ try {
52+ await authn . checkUser ( )
53+ // Some auth stacks resolve session state asynchronously after first check.
54+ if ( ! authn . currentUser ( ) ) {
55+ await authn . checkUser ( )
56+ }
57+ } catch ( _err ) {
58+ // Keep header rendering resilient when auth refresh fails.
59+ }
60+ } ) ( )
61+
62+ try {
63+ await authRefreshInFlight
64+ } finally {
65+ authRefreshInFlight = null
66+ }
67+ }
4168
4269type ManagedHeader = Header & {
4370 __solidPanesListenersAttached ?: boolean
@@ -139,6 +166,7 @@ function attachHeaderListeners (header: ManagedHeader) {
139166
140167export async function refreshHeader ( outliner : OutlineManager , headerElement ?: Header ) {
141168 ensureMobileHeaderStyles ( )
169+ await ensureAuthUserResolved ( )
142170 const headerOptions = setHeaderOptions ( outliner )
143171 const header = headerElement || document . querySelector ( 'solid-ui-header' ) as Header | null
144172 if ( ! header ) return null
0 commit comments