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>