import { GatewayApiError, getCurrentUser, OIDC_BROWSER_SESSION_CREDENTIAL, } from '../api'; type CurrentUser = Awaited>; export interface RestoredOIDCBrowserSession { credential: typeof OIDC_BROWSER_SESSION_CREDENTIAL; user: CurrentUser; } export interface ReconcileOIDCBrowserSessionOptions { credential: string; oidcEnabled: boolean; onReset: () => void; onRestored: (session: RestoredOIDCBrowserSession) => void; } export async function restoreOIDCBrowserSession(): Promise { try { const user = await getCurrentUser(OIDC_BROWSER_SESSION_CREDENTIAL); return { credential: OIDC_BROWSER_SESSION_CREDENTIAL, user }; } catch (error) { if (error instanceof GatewayApiError && error.details.status === 401) return null; throw error; } } export async function reconcileOIDCBrowserSessionAfterRuntimeChange( options: ReconcileOIDCBrowserSessionOptions, ): Promise<'ignored' | 'reset' | 'restored'> { if (options.credential !== OIDC_BROWSER_SESSION_CREDENTIAL) return 'ignored'; if (!options.oidcEnabled) { options.onReset(); return 'reset'; } const restored = await restoreOIDCBrowserSession(); if (!restored) { options.onReset(); return 'reset'; } options.onRestored(restored); return 'restored'; }