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]

Download RAW File