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