/ src / hooks.server.ts
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  };