1
```
import { sequence } from "@sveltejs/kit/hooks";
import { redirect, type Handle } from "@sveltejs/kit";
import { paraglideMiddleware } from "$lib/common/paraglide/server";
import { svelteKitHandler } from "better-auth/svelte-kit";
import { auth } from "$lib/server/auth";
import { LOGIN_PATH, WELCOME_CHANGE_PWD_PATH, HOME_PATH, PUBLIC_PATHS } from "$lib/common/config";
import { localizeUrl } from "$lib/common/paraglide/runtime";
const handleParaglide: Handle = ({ event, resolve }) =>
paraglideMiddleware(event.request, ({ request, locale }) => {
event.request = request;
return resolve(event, {
transformPageChunk: ({ html }) => html.replace("%paraglide.lang%", locale),
});
});
const handleBetterAuth: Handle = async ({ event, resolve }) => {
return svelteKitHandler({ event, resolve, auth });
};
const handleThemeMode: Handle = async ({ event, resolve }) => {
// https://dev.to/bryce/detecting-dark-mode-on-every-request-21b2
event.request.headers.set("Accept-CH", "Sec-CH-Prefers-Color-Scheme");
event.request.headers.set("Vary", "Sec-CH-Prefers-Color-Scheme");
event.request.headers.set("Critical-CH", "Sec-CH-Prefers-Color-Scheme");
const prefersThemeModeHeader = event.request.headers.get("Sec-CH-Prefers-Color-Scheme");
const prefersThemeModeCookie = event.cookies.get("theme");
return resolve(event, {
transformPageChunk: ({ html }) => html.replace("%theme%", prefersThemeModeCookie ?? prefersThemeModeHeader ?? "light"),
});
};
const handleRouteGuards: Handle = async ({ event, resolve }) => {
const { headers } = event.request;
const { pathname: currentPath } = event.url;
const session = await auth.api.getSession({ headers });
if (!session && currentPath !== LOGIN_PATH) {
redirect(302, localizeUrl(LOGIN_PATH));
}
if (session && !session?.user.changedFirstPasswordAt && currentPath !== WELCOME_CHANGE_PWD_PATH) {
redirect(302, localizeUrl(WELCOME_CHANGE_PWD_PATH));
}
if (session && session?.user.changedFirstPasswordAt && currentPath === WELCOME_CHANGE_PWD_PATH) {
redirect(302, localizeUrl(HOME_PATH));
}
if (session && currentPath !== HOME_PATH && PUBLIC_PATHS.includes(currentPath)) {
redirect(302, localizeUrl(HOME_PATH));
}
return resolve(event);
};
export const handle = sequence(handleParaglide, handleBetterAuth, handleThemeMode, handleRouteGuards);
```
For immediate assistance, please email our customer support: [email protected]