import { dev } from "$app/environment"; import { acceptsLanguages } from "$lib/negotiation"; import { restoreSession } from "$lib/server/session"; import { isAuthEvent } from "$lib/types"; import { error, type Handle, redirect } from "@sveltejs/kit"; import { sequence } from "@sveltejs/kit/hooks"; /** * {@link https://svelte.dev/docs/cli/devtools-json} */ const devHandle: Handle = ({ event, resolve }) => { const path = "/.well-known/appspecific/com.chrome.devtools.json"; if (dev && event.url.pathname === path) { return new Response(null, { status: 404 }); } return resolve(event); }; export const defaultHandle: Handle = async ({ event, resolve }) => { if (isAuthEvent(event) === false) { error(500); } const languages = acceptsLanguages(event.request); event.locals.locale = languages[0] === "*" ? undefined : languages[0]; // [TODO] necessary? // if ( // event.url.searchParams.has("session") || // event.request.headers.has("x-session") || // event.request.headers.get("sec-fetch-mode") === "navigate" || // // event.request.headers.get("sec-fetch-dest") === "empty" // ) { await restoreSession(event); // } if ( event.route.id?.startsWith("/(protected)/") && event.locals.user === undefined ) { redirect(307, "/"); } return resolve(event, { filterSerializedResponseHeaders: (name: string, _value: string) => { return ["content-type"].includes(name.toLowerCase()); }, }); }; export const handle: Handle = sequence(devHandle, defaultHandle);