-
-
Notifications
You must be signed in to change notification settings - Fork 31
Expand file tree
/
Copy pathhooks.server.ts
More file actions
83 lines (71 loc) · 2.76 KB
/
Copy pathhooks.server.ts
File metadata and controls
83 lines (71 loc) · 2.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import { auth } from "$lib/server/auth";
import { redirect, error, type Handle, type ServerInit } from "@sveltejs/kit";
import { svelteKitHandler } from "better-auth/svelte-kit";
import { building } from "$app/environment";
import { sequence } from "@sveltejs/kit/hooks";
import { env } from "$env/dynamic/private";
import providers from "$lib/providers";
import { dev } from "$app/environment";
import { migrate } from "drizzle-orm/better-sqlite3/migrator";
import { db } from "$lib/server/db";
import { createCustomFetch } from "$lib/custom-fetch";
import { createScopedLogger } from "$lib/logger";
const logger = createScopedLogger("hooks");
export const init: ServerInit = async () => {
if (!env.BACKEND_URL) {
throw new Error("BACKEND_URL environment variable is required");
}
if (!env.BACKEND_API_KEY) {
throw new Error("BACKEND_API_KEY environment variable is required");
}
migrate(db, { migrationsFolder: "drizzle" });
// @ts-expect-error ignore
logger.box(`Riven Frontend v${__APP_VERSION__}`);
};
export const betterAuthHandler: Handle = async ({ event, resolve }) => {
if (event.route.id?.startsWith("/(protected)")) {
const session = await auth.api.getSession({
headers: event.request.headers
});
if (session) {
event.locals.session = session?.session;
event.locals.user = session?.user;
return svelteKitHandler({ event, resolve, auth, building });
} else {
redirect(307, "/auth/login");
}
} else {
return svelteKitHandler({ event, resolve, auth, building });
}
};
const configureLocals: Handle = async ({ event, resolve }) => {
event.locals.backendUrl = env.BACKEND_URL;
event.locals.apiKey = env.BACKEND_API_KEY;
return resolve(event);
};
const handleTVDBCookie: Handle = async ({ event, resolve }) => {
const tvdbCookie = event.cookies.get("tvdb_cookie");
if (!tvdbCookie) {
const customFetch = createCustomFetch(event.fetch);
const tvdbLogin = await providers.tvdb.POST("/login", {
body: {
apikey: "6be85335-5c4f-4d8d-b945-d3ed0eb8cdce"
},
fetch: customFetch
});
if (tvdbLogin.error) {
error(500, "Failed to login to TVDB: " + tvdbLogin.error);
} else {
event.cookies.set("tvdb_cookie", tvdbLogin.data?.data?.token || "", {
path: "/",
httpOnly: true,
sameSite: "lax",
secure: !dev,
maxAge: 60 * 60 * 24 * 30 // 30 days
});
logger.info("Set TVDB cookie");
}
}
return resolve(event);
};
export const handle: Handle = sequence(configureLocals, betterAuthHandler, handleTVDBCookie);