import { ConfigProvider, Result, Spin, theme } from 'antd' import { useCallback, useMemo } from 'react' import './App.css' import { buildKeycloakAuthorizationUrl, getKeycloakClientConfig, authenticatedFetch, logout, oidcStateStorageKey, submitKeycloakLogout, storeAuthTokenSet, } from './auth/authContracts' import { useOidcSession } from './auth/useOidcSession' import { WorkspaceShell } from './workspace/WorkspaceShell' import { workspaceThemeTokens } from './workspace/workspaceContracts' function App() { const session = useOidcSession() const config = useMemo(() => getKeycloakClientConfig(), []) const handleLogout = useCallback(async () => { const idToken = session.status === 'authenticated' ? (session.tokens.idToken ?? '') : '' const accessToken = session.status === 'authenticated' ? session.tokens.accessToken : undefined await logout(idToken, accessToken) const state = crypto.randomUUID() window.sessionStorage.setItem(oidcStateStorageKey, state) if (idToken) { submitKeycloakLogout(config, idToken, window.location.origin) return } window.location.assign( buildKeycloakAuthorizationUrl(config, state, crypto.randomUUID()).toString(), ) }, [session, config]) const adminFetch = useCallback( async (input: RequestInfo | URL, init: RequestInit = {}) => { if (session.status !== 'authenticated') { throw new Error('Admin request requires an authenticated session') } return authenticatedFetch(input, init, config, session.tokens, storeAuthTokenSet) }, [config, session], ) const content = session.status === 'authenticated' ? ( ) : session.status === 'error' ? ( ) : (
) return (
{content}
) } export default App