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