import { goto } from "$app/navigation"; import { resolve } from "$app/paths"; import { redirect, type RequestEvent } from "@sveltejs/kit"; import { CURRENT_DID_KEY, CURRENT_HANDLE_KEY } from "#lib/auth/accounts.ts"; import type { Auth } from "#lib/auth.svelte.ts"; export interface RequireAuthResult { did: string; handle: string; } export const loginWithReturn = (returnUrl: string): string => `/login?return_url=${encodeURIComponent(returnUrl)}`; export const loginHrefFor = (url: Pick) => resolve(loginWithReturn(url.pathname + url.search) as "/login"); export const requireAuth = (event: RequestEvent): RequireAuthResult => { const did = event.cookies.get(CURRENT_DID_KEY); if (!did) { redirect(302, loginWithReturn(event.url.pathname + event.url.search)); } return { did, handle: event.cookies.get(CURRENT_HANDLE_KEY) ?? did }; }; export const requireAuthClient = (auth: Auth, url: URL): boolean => { if (auth.currentDid) return true; void goto(resolve(loginWithReturn(url.pathname + url.search) as "/login"), { replace: true }); return false; };