diff options
Diffstat (limited to 'code/app/src/routes/(main)/+layout.server.ts')
| -rw-r--r-- | code/app/src/routes/(main)/+layout.server.ts | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/code/app/src/routes/(main)/+layout.server.ts b/code/app/src/routes/(main)/+layout.server.ts index 086d1c0..4199d7f 100644 --- a/code/app/src/routes/(main)/+layout.server.ts +++ b/code/app/src/routes/(main)/+layout.server.ts @@ -4,12 +4,15 @@ import {error, redirect} from "@sveltejs/kit"; import {Temporal} from "temporal-polyfill"; import type {LayoutServerLoad} from "./$types"; -export const load: LayoutServerLoad = async ({route, cookies, locals}) => { +export const load: LayoutServerLoad = async ({url, request, route, cookies, locals, fetch}) => { + console.log(url.toString()); const isBaseRoute = route.id === "/(main)"; const isPublicRoute = (route.id?.startsWith("/(main)/(public)") || isBaseRoute) ?? true; - const sessionIsValid = (await cached_result<Response>("sessionCheck", 120, () => fetch(api_base("_/valid-session"), { + const sessionCookieValue = cookies.get(CookieNames.session); + const hasSessionCookie = (sessionCookieValue?.length > 0 ?? false); + const sessionIsValid = hasSessionCookie && (await cached_result_async<Response>("sessionCheck", 120, () => fetch(api_base("_/is-authenticated"), { headers: { - Cookie: CookieNames.session + "=" + cookies.get(CookieNames.session), + Cookie: CookieNames.session + "=" + sessionCookieValue, }, }).catch((e) => { log_error(e); @@ -37,7 +40,7 @@ export const load: LayoutServerLoad = async ({route, cookies, locals}) => { let resultCache = {}; -async function cached_result<T>(key: string, staleAfterSeconds: number, code: any) { +async function cached_result_async<T>(key: string, staleAfterSeconds: number, get_result: any, forceRefresh: boolean = false) { if (!resultCache[key]) { resultCache[key] = { l: 0, @@ -45,13 +48,13 @@ async function cached_result<T>(key: string, staleAfterSeconds: number, code: an }; } const staleEpoch = ((resultCache[key]?.l ?? 0) + staleAfterSeconds); - const isStale = staleEpoch < Temporal.Now.instant().epochSeconds; + const isStale = forceRefresh || (staleEpoch < Temporal.Now.instant().epochSeconds); if (isStale || !resultCache[key]?.c) { - resultCache[key].c = await code(); + resultCache[key].c = await get_result(); resultCache[key].l = Temporal.Now.instant().epochSeconds; } - log_debug("Ran cached_result", { + log_debug("Ran cached_result_async", { cacheKey: key, isStale, cache: resultCache[key], |
