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