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