UNPKG

@lucia-auth/sveltekit

Version:
62 lines (61 loc) 2.42 kB
import { SESSION_COOKIE_NAME } from "lucia-auth"; export const handleHooks = (auth) => { return async (data) => { const event = data.event; const resolve = data.resolve; let getSessionPromise = null; let getSessionUserPromise = null; event.locals.setSession = (session) => { auth.createSessionCookies(session).forEach((cookie) => { event.cookies.set(cookie.name, cookie.value, cookie.attributes); }); getSessionPromise = null; getSessionUserPromise = null; }; event.locals.validate = async () => { if (getSessionPromise) return getSessionPromise; if (getSessionUserPromise) return (await getSessionUserPromise).session; getSessionPromise = new Promise(async (resolve) => { try { auth.validateRequestHeaders(event.request); const sessionId = event.cookies.get(SESSION_COOKIE_NAME) || ""; const session = await auth.validateSession(sessionId); if (session.isFresh) { event.locals.setSession(session); } resolve(session); } catch { event.locals.setSession(null); resolve(null); } }); return getSessionPromise; }; event.locals.validateUser = async () => { if (getSessionUserPromise) return getSessionUserPromise; getSessionUserPromise = new Promise(async (resolve) => { try { auth.validateRequestHeaders(event.request); const sessionId = event.cookies.get(SESSION_COOKIE_NAME) || ""; const { session, user } = await auth.validateSessionUser(sessionId); if (session.isFresh) { event.locals.setSession(session); } resolve({ session, user }); } catch { resolve({ session: null, user: null }); } }); return getSessionUserPromise; }; return await resolve(event); }; };