master
Raw Download raw file
 1import cookieParser from "cookie-parser";
 2import express from "express";
 3import "express-async-errors";
 4import expressWs from "express-ws";
 5import { ZodError } from "zod";
 6
 7declare global {
 8	namespace Express {
 9		interface Request {
10			sundown: {
11				user?: string;
12			};
13		}
14	}
15}
16
17const { app } = expressWs(express());
18app.use(express.json());
19app.use(cookieParser());
20
21app.use("/assets", express.static("dist-ui/assets", { maxAge: "1y" }));
22app.use((req, res, next) => {
23	if (req.path.startsWith("/api")) {
24		return next();
25	}
26
27	return res.sendFile("dist-ui/index.html", { root: "." });
28});
29
30app.use("/api", (await import("./api.js")).apiRouter);
31
32app.use((err: Error, req: express.Request, res: express.Response, next: express.NextFunction) => {
33	console.error(err);
34	if (err instanceof ZodError) {
35		res.status(400).json(err.errors);
36	} else {
37		res.status(500).send("Internal server error");
38	}
39});
40
41app.listen(80, () => {
42	console.log("Listening on port 80");
43});