hooks.server.ts
1 import { initializeDatabase } from "$lib/server/db"; 2 import { createServiceLogger } from "$lib/server/logger"; 3 import { startMetricsServer, stopMetricsServer } from "$lib/server/metrics"; 4 import { getUserFromSession } from "$lib/server/services/auth"; 5 import { ensureNodeActiveForUser } from "$lib/server/services/nodes"; 6 import { stripeService } from "$lib/server/services/stripe"; 7 8 import type { Handle, ServerInit } from "@sveltejs/kit"; 9 10 const log = createServiceLogger("Hooks"); 11 12 export const init: ServerInit = async () => { 13 startMetricsServer(); 14 await initializeDatabase(); 15 const usersWithActiveSubscriptions = 16 await stripeService.getUsersWithActiveSubscription(); 17 log.info("Found users with active subscriptions", { 18 count: usersWithActiveSubscriptions.length, 19 }); 20 for (const user of usersWithActiveSubscriptions) { 21 try { 22 log.info("Ensuring node active for user", { userId: user.id }); 23 await ensureNodeActiveForUser(user.id); 24 } catch (e) { 25 log.error("Error activating node for user", { 26 userId: user.id, 27 error: e, 28 }); 29 } 30 } 31 }; 32 33 function shutdown() { 34 log.info("Shutting down"); 35 stopMetricsServer(); 36 process.exit(0); 37 } 38 39 process.on("SIGTERM", shutdown); 40 process.on("SIGINT", shutdown); 41 42 export const handle: Handle = async ({ event, resolve }) => { 43 const user = await getUserFromSession(event.cookies); 44 event.locals.user = user; 45 46 const response = await resolve(event); 47 return response; 48 };