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