diff --git a/package.json b/package.json index 6c9db9f..cd5a59c 100644 --- a/package.json +++ b/package.json @@ -12,8 +12,7 @@ "author": "MathMan05", "license": "GPL-3.0", "dependencies": { - "@swc/core": "1.11.24", - "express": "^4.21.2" + "@swc/core": "1.11.24" }, "devDependencies": { "@types/audioworklet": "^0.0.90", diff --git a/src/index.ts b/src/index.ts index a097e32..e741d43 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,7 +1,7 @@ -import express, {Request, Response} from "express"; +import http from "http"; import fs from "node:fs/promises"; import path from "node:path"; -import {observe, uptime} from "./stats.js"; +import {observe} from "./stats.js"; import {getApiUrls} from "./utils.js"; import {fileURLToPath} from "node:url"; import {readFileSync} from "fs"; @@ -67,8 +67,64 @@ interface Instance { name: string; [key: string]: any; } +function guessMime(str: string) { + const ext = str.split(".").at(-1); + switch (ext) { + case "js": + case "cjs": + return "text/javascript"; + case "html": + return "text/html"; + case "css": + return "text/css"; + case "svg": + return "image/svg+xml"; + case "png": + case "jpeg": + case "webp": + return "image/" + ext; + default: + return "text/plain"; + } +} +const app = http.createServer(async (req, res) => { + const url = new URL(req.url as string, "http://localhost"); + const pathstr = url.pathname; -const app = express(); + async function sendFile(file: string) { + res.writeHead(200, {"Content-Type": guessMime(file)}); + const f = await fs.readFile(file); + res.write(f); + res.end(); + } + + if (pathstr === "/") { + sendFile(path.join(__dirname, "webpage", "index.html")); + return; + } + + if (pathstr.startsWith("/instances.json")) { + res.writeHead(200, {"Content-Type": "text/plain"}); + res.write(JSON.stringify(instances)); + res.end(); + return; + } + + if (pathstr.startsWith("/invite/")) { + sendFile(path.join(__dirname, "webpage", "invite.html")); + return; + } + if (pathstr.startsWith("/template/")) { + sendFile(path.join(__dirname, "webpage", "template.html")); + return; + } + if (pathstr === "index.html") { + sendFile(path.join(__dirname, "webpage", "app.html")); + return; + } + const filePath = await combinePath("/webpage/" + pathstr, true, pathstr); + sendFile(filePath); +}); export type instace = { name: string; @@ -132,62 +188,12 @@ async function updateInstances(): Promise { } updateInstances(); - -app.use("/uptime", (req: Request, res: Response) => { - const instanceUptime = uptime.get(req.query.name as string); - res.send(instanceUptime); -}); - -app.use("/", async (req: Request, res: Response) => { - const scheme = req.secure ? "https" : "http"; - const host = `${scheme}://${req.get("Host")}`; - let ref = host + req.originalUrl; - if (Object.keys(req.query).length !== 0) { - const parms = new URLSearchParams(); - for (const key of Object.keys(req.query)) { - parms.set(key, req.query[key] as string); - } - ref + `?${parms}`; - } - if (host && ref) { - const link = `${host}/services/oembed?url=${encodeURIComponent(ref)}`; - res.set( - "Link", - `<${link}>; rel="alternate"; type="application/json+oembed"; title="Fermi Client oEmbed format"`, - ); - } - - if (req.path === "/") { - res.sendFile(path.join(__dirname, "webpage", "index.html")); - return; - } - - if (req.path.startsWith("/instances.json")) { - res.json(instances); - return; - } - - if (req.path.startsWith("/invite/")) { - res.sendFile(path.join(__dirname, "webpage", "invite.html")); - return; - } - if (req.path.startsWith("/template/")) { - res.sendFile(path.join(__dirname, "webpage", "template.html")); - return; - } - if (req.path === "index.html") { - res.sendFile(path.join(__dirname, "webpage", "app.html")); - return; - } - const filePath = await combinePath("/webpage/" + req.path, true, req.path); - res.sendFile(filePath); -}); - +/* app.set("trust proxy", (ip: unknown) => { if (typeof ip !== "string") return false; return ip.startsWith("127."); }); - +*/ const PORT = process.env.PORT || Number(process.argv[2]) || 8080; app.listen(PORT, () => { console.log(`Server running on port ${PORT}`); diff --git a/src/stats.ts b/src/stats.ts index 9f3a0df..5634e2b 100644 --- a/src/stats.ts +++ b/src/stats.ts @@ -25,7 +25,6 @@ interface Instance { } const uptimeObject: Map = loadUptimeObject(); -export {uptimeObject as uptime}; function loadUptimeObject(): Map { const filePath = process.env.JANK_UPTIME_JSON_PATH || path.join(__dirname, "..", "uptime.json");