Skip to content

Commit 390cc61

Browse files
committed
Clean up application init and display backend version
1 parent efee44e commit 390cc61

6 files changed

Lines changed: 53 additions & 64 deletions

File tree

src/hooks.client.ts

Lines changed: 34 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,36 @@
1-
import { metaApi } from "$lib/api";
1+
import { metaApi } from '$lib/api';
2+
import { initializeSignalR } from '$lib/signalr';
3+
import { initializeDarkModeStore } from '$lib/stores/ColorSchemeStore.svelte';
4+
import { initializeSerialPortsStore } from '$lib/stores/SerialPortsStore';
5+
import { UserStore } from '$lib/stores/UserStore';
26

37
export async function init() {
4-
const response = await metaApi.versionGetBackendVersion();
5-
if (!response.data) throw new Error("Failed to fetch backend info");
6-
7-
if (response.data.version) {
8-
sessionStorage.setItem("backendVersion", response.data.version);
9-
}
10-
if (response.data.commit) {
11-
sessionStorage.setItem("backendCommit", response.data.commit);
12-
}
13-
if (response.data.shortLinkUrl) {
14-
sessionStorage.setItem("shortLinkUrl", response.data.shortLinkUrl);
15-
}
16-
if (response.data.turnstileSiteKey) {
17-
sessionStorage.setItem("turnstileSiteKey", response.data.turnstileSiteKey);
18-
}
19-
}
8+
// fire both requests in parallel
9+
const [backendInfoRes, userRes] = await Promise.allSettled([
10+
metaApi.versionGetBackendVersion(),
11+
UserStore.refreshSelf(),
12+
]);
13+
14+
// handle backend info
15+
if (backendInfoRes.status === 'fulfilled' && backendInfoRes.value?.data) {
16+
const { version, commit, shortLinkUrl, turnstileSiteKey } = backendInfoRes.value.data;
17+
18+
if (version != null) sessionStorage.setItem('backendVersion', String(version));
19+
if (commit != null) sessionStorage.setItem('backendCommit', String(commit));
20+
if (shortLinkUrl != null) sessionStorage.setItem('shortLinkUrl', String(shortLinkUrl));
21+
if (turnstileSiteKey != null)
22+
sessionStorage.setItem('turnstileSiteKey', String(turnstileSiteKey));
23+
} else {
24+
throw new Error('Failed to fetch backend info');
25+
}
26+
27+
// init client-side stores
28+
initializeDarkModeStore();
29+
initializeSerialPortsStore(); // TODO: move this elsewhere if needed
30+
31+
// start SignalR only if we have a user
32+
const isLoggedIn = userRes.status === 'fulfilled' && !!userRes.value;
33+
if (isLoggedIn) {
34+
await initializeSignalR();
35+
}
36+
}

src/lib/components/Turnstile.svelte

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,15 @@
1010
1111
interface Props {
1212
action: string;
13-
cData: string;
13+
cData?: string;
1414
response: string | null;
1515
}
1616
17-
let { action, cData, response = $bindable(dev ? PUBLIC_TURNSTILE_DEV_BYPASS_VALUE : null) }: Props = $props();
17+
let {
18+
action,
19+
cData,
20+
response = $bindable(dev ? PUBLIC_TURNSTILE_DEV_BYPASS_VALUE : null),
21+
}: Props = $props();
1822
1923
let element: HTMLDivElement;
2024

src/lib/init.ts

Lines changed: 0 additions & 40 deletions
This file was deleted.

src/routes/(anonymous)/logout/+page.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import { browser } from '$app/environment';
22
import { goto } from '$app/navigation';
33
import { accountV1Api } from '$lib/api';
4-
import { destroyAuth } from '$lib/init';
4+
import { destroySignalR } from '$lib/signalr';
5+
import { UserStore } from '$lib/stores/UserStore';
56

67
export const prerender = false;
78

@@ -17,7 +18,8 @@ export async function load() {
1718

1819
try {
1920
// Clear local context
20-
await destroyAuth();
21+
UserStore.reset();
22+
await destroySignalR();
2123
} catch (error) {
2224
console.error(error);
2325
}

src/routes/+layout.svelte

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import '../app.css';
1313
import { browser } from '$app/environment';
1414
import DialogManager from '$lib/components/confirm-dialog/dialog-manager.svelte';
15-
import { initializeApp } from '$lib/init';
1615
import { isMobile } from '$lib/utils/compatibility';
1716
1817
interface Props {
@@ -29,8 +28,6 @@
2928
$effect(() => {
3029
if (!isMobile) localStorage.setItem('sidebarOpen', isOpen ? 'true' : 'false');
3130
});
32-
33-
onMount(() => initializeApp(!page.url.pathname.startsWith('/logout')));
3431
</script>
3532

3633
<BasicTags {...meta} />

src/routes/Footer.svelte

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
<script lang="ts">
22
import { HubConnectionState } from '@microsoft/signalr';
3+
import { browser } from '$app/environment';
34
import { PUBLIC_GITHUB_PROJECT_URL } from '$env/static/public';
45
import { SignalR_State } from '$lib/signalr';
6+
7+
const version = browser && sessionStorage.getItem('backendVersion');
58
</script>
69

710
<footer class="bottom-0 flex items-center justify-between px-2 text-sm flex-none">
@@ -11,6 +14,12 @@
1114
by the <a target="_blank" href={PUBLIC_GITHUB_PROJECT_URL}> OpenShock Team</a>
1215
</div>
1316
<div>
17+
{#if version}
18+
{@const commit = sessionStorage.getItem('backendCommit')}
19+
<span title={commit ? `Commit ${commit}` : undefined} class="text-blue-500">
20+
API {version}
21+
</span>
22+
{/if}
1423
<span
1524
class={$SignalR_State === HubConnectionState.Connected ? 'text-green-500' : 'text-red-500'}
1625
>

0 commit comments

Comments
 (0)