import { getDbClient } from "$lib/server/db"; import { getS3Client } from "$lib/server/s3"; import { validateSessionToken } from "$lib/server/sessions"; import { type Handle } from "@sveltejs/kit"; import { sequence } from "@sveltejs/kit/hooks"; import { beanstalkdHandle } from "$lib/server/beanstalkd"; const dbHandle = (async ({ event, resolve }) => { const dbClient = await getDbClient(); event.locals.dbClient = dbClient; try { return await resolve(event); } finally { dbClient.release(); } }) satisfies Handle; // FIXME: Kind of stupid to load for every request. Should probs move handler to $lib and import for relevant routes. // Same goes for beanstalkd. const s3Handle = (async ({ event, resolve }) => { const s3Client = getS3Client(); event.locals.s3Client = s3Client; try { return await resolve(event); } finally { s3Client.destroy(); } }) satisfies Handle; const sessionHandle = (async ({ event, resolve }) => { const sessionToken = event.cookies.get("SESSION_ID"); if (sessionToken) { const { user } = await validateSessionToken(event.locals.dbClient, sessionToken); if (user) { event.locals.user = user; } } return resolve(event); }) satisfies Handle; // FIXME: Kind of stupid to load for every request. Should probs move handler to $lib and import for relevant routes. export const handle = sequence(dbHandle, s3Handle, beanstalkdHandle, sessionHandle);