this repo has no description
1<script lang="ts"> 2 import { getCurrentPath, navigate } from './lib/router.svelte' 3 import { initAuth, getAuthState } from './lib/auth.svelte' 4 import { initServerConfig } from './lib/serverConfig.svelte' 5 import { initI18n, _ } from './lib/i18n' 6 import { isLoading as i18nLoading } from 'svelte-i18n' 7 import Login from './routes/Login.svelte' 8 import Register from './routes/Register.svelte' 9 import RegisterPasskey from './routes/RegisterPasskey.svelte' 10 import Verify from './routes/Verify.svelte' 11 import ResetPassword from './routes/ResetPassword.svelte' 12 import RecoverPasskey from './routes/RecoverPasskey.svelte' 13 import RequestPasskeyRecovery from './routes/RequestPasskeyRecovery.svelte' 14 import Dashboard from './routes/Dashboard.svelte' 15 import AppPasswords from './routes/AppPasswords.svelte' 16 import InviteCodes from './routes/InviteCodes.svelte' 17 import Settings from './routes/Settings.svelte' 18 import Sessions from './routes/Sessions.svelte' 19 import Comms from './routes/Comms.svelte' 20 import RepoExplorer from './routes/RepoExplorer.svelte' 21 import Admin from './routes/Admin.svelte' 22 import OAuthConsent from './routes/OAuthConsent.svelte' 23 import OAuthLogin from './routes/OAuthLogin.svelte' 24 import OAuthAccounts from './routes/OAuthAccounts.svelte' 25 import OAuth2FA from './routes/OAuth2FA.svelte' 26 import OAuthTotp from './routes/OAuthTotp.svelte' 27 import OAuthPasskey from './routes/OAuthPasskey.svelte' 28 import OAuthDelegation from './routes/OAuthDelegation.svelte' 29 import OAuthError from './routes/OAuthError.svelte' 30 import Security from './routes/Security.svelte' 31 import TrustedDevices from './routes/TrustedDevices.svelte' 32 import Controllers from './routes/Controllers.svelte' 33 import DelegationAudit from './routes/DelegationAudit.svelte' 34 import ActAs from './routes/ActAs.svelte' 35 import Home from './routes/Home.svelte' 36 37 initI18n() 38 39 const auth = getAuthState() 40 41 let oauthCallbackPending = $state(hasOAuthCallback()) 42 43 function hasOAuthCallback(): boolean { 44 const params = new URLSearchParams(window.location.search) 45 return !!(params.get('code') && params.get('state')) 46 } 47 48 $effect(() => { 49 initServerConfig() 50 initAuth().then(({ oauthLoginCompleted }) => { 51 if (oauthLoginCompleted) { 52 navigate('/dashboard') 53 } 54 oauthCallbackPending = false 55 }) 56 }) 57 58 function getComponent(path: string) { 59 switch (path) { 60 case '/login': 61 return Login 62 case '/register': 63 return Register 64 case '/register-passkey': 65 return RegisterPasskey 66 case '/verify': 67 return Verify 68 case '/reset-password': 69 return ResetPassword 70 case '/recover-passkey': 71 return RecoverPasskey 72 case '/request-passkey-recovery': 73 return RequestPasskeyRecovery 74 case '/dashboard': 75 return Dashboard 76 case '/app-passwords': 77 return AppPasswords 78 case '/invite-codes': 79 return InviteCodes 80 case '/settings': 81 return Settings 82 case '/sessions': 83 return Sessions 84 case '/comms': 85 return Comms 86 case '/repo': 87 return RepoExplorer 88 case '/admin': 89 return Admin 90 case '/oauth/consent': 91 return OAuthConsent 92 case '/oauth/login': 93 return OAuthLogin 94 case '/oauth/accounts': 95 return OAuthAccounts 96 case '/oauth/2fa': 97 return OAuth2FA 98 case '/oauth/totp': 99 return OAuthTotp 100 case '/oauth/passkey': 101 return OAuthPasskey 102 case '/oauth/delegation': 103 return OAuthDelegation 104 case '/oauth/error': 105 return OAuthError 106 case '/security': 107 return Security 108 case '/trusted-devices': 109 return TrustedDevices 110 case '/controllers': 111 return Controllers 112 case '/delegation-audit': 113 return DelegationAudit 114 case '/act-as': 115 return ActAs 116 default: 117 return Home 118 } 119 } 120 121 let currentPath = $derived(getCurrentPath()) 122 let CurrentComponent = $derived(getComponent(currentPath)) 123</script> 124 125<main> 126 {#if auth.loading || $i18nLoading || oauthCallbackPending} 127 <div class="loading"> 128 <p>Loading...</p> 129 </div> 130 {:else} 131 <CurrentComponent /> 132 {/if} 133</main> 134 135<style> 136 main { 137 min-height: 100vh; 138 } 139 140 .loading { 141 display: flex; 142 align-items: center; 143 justify-content: center; 144 min-height: 100vh; 145 color: var(--text-secondary); 146 } 147</style>