synops/frontend/src/routes/+layout.svelte
vegard d7a9f3816d Fullfør oppgave 22.1: WebSocket-lag med PG LISTEN/NOTIFY og frontend dual-tilkobling
Backend:
- ws.rs: Fikset WS auth via query-param (browser kan ikke sende headers ved WS upgrade)
- auth.rs: Gjort decoding_key pub for gjenbruk i ws-modulen

Frontend:
- pg-ws.svelte.ts: Ny PG WebSocket-klient med auto-reconnect og event-logging
- index.ts: Eksporterer pgWsConnect/pgWsDisconnect/pgWsState
- +layout.svelte: Kobler til PG WS i parallell med STDB for verifisering

Docs:
- api_grensesnitt.md: Dokumentert /ws endepunkt og sanntidsarkitektur
- tasks.md: Merket 22.1 som ferdig

Deploy: Krever restart av maskinrommet + rebuild av frontend.
2026-03-18 12:01:10 +00:00

34 lines
932 B
Svelte

<script lang="ts">
import '../app.css';
import { page } from '$app/stores';
import { stdb, pgWsConnect, pgWsDisconnect } from '$lib/spacetime';
import { browser } from '$app/environment';
import SystemAnnouncements from '$lib/components/SystemAnnouncements.svelte';
let { children } = $props();
// Connect to SpacetimeDB when authenticated and in browser
$effect(() => {
if (browser && $page.data.session?.user) {
stdb.connect();
}
return () => {
if (browser) stdb.disconnect();
};
});
// Connect PG WebSocket in parallel for verification (Fase M1, oppgave 22.1)
$effect(() => {
const session = $page.data.session as Record<string, unknown> | undefined;
const accessToken = session?.accessToken as string | undefined;
if (browser && accessToken) {
pgWsConnect(accessToken);
}
return () => {
if (browser) pgWsDisconnect();
};
});
</script>
<SystemAnnouncements />
{@render children()}