ipv4.army/src/index.ts
seth e6b8175662
All checks were successful
Code quality checks / biome (push) Successful in 8s
Fix linting
2025-05-16 00:15:22 -04:00

107 lines
2.6 KiB
TypeScript

import fs from "node:fs/promises";
import { file, gc, serve } from "bun";
import pkg from "../package.json";
import Backend from "./back";
let heartrate = 0;
let lanyard: LanyardData = {
discord_status: "online",
activities: [],
};
await fs.rm("./dist", { recursive: true, force: true }).catch(() => {});
if (!Backend.development) {
await Backend.build();
}
const server = serve({
port: process.env.PORT || 3000,
hostname: process.env.HOSTNAME || "localhost",
development: Backend.development,
routes: {
"/": async (req, server) => {
await Backend.postAnalytics(req, server);
if (Backend.development) await Backend.build();
return Backend.Responses.file(file("./dist/index.html"));
},
"/assets/:file": async (req) =>
Backend.Responses.file(file(`./dist/${req.params.file}`)),
"/robots.txt": async () =>
Backend.Responses.file(file("./public/robots.txt")),
"/favicon.svg": async () =>
Backend.Responses.file(file("./public/favicon.svg")),
"/api/server": () => {
const safeProcess = JSON.parse(JSON.stringify(process));
safeProcess.env = {};
safeProcess.availableMemory = process.availableMemory();
safeProcess.constrainedMemory = process.constrainedMemory();
safeProcess.cpuUsage = process.cpuUsage();
safeProcess.memoryUsage = process.memoryUsage();
safeProcess.uptime = process.uptime();
safeProcess.package = pkg;
return Backend.Responses.json({ data: safeProcess });
},
"/api/health": () => Backend.Responses.ok(),
"/api/ws": async (req, server) => {
if (!server.upgrade(req)) {
await Backend.postAnalytics(req, server);
return Response.redirect("/");
}
},
"/api/gc": async () => {
gc(true);
return Backend.Responses.ok();
},
"/api/headers": (req) => Backend.Responses.json(req.headers.toJSON()),
},
fetch: async (req, server) => {
await Backend.postAnalytics(req, server);
return Response.redirect("/");
},
websocket: {
idleTimeout: 1,
open: (ws) => {
ws.subscribe("lanyard");
ws.send(JSON.stringify({ type: "lanyard", data: lanyard }), true);
ws.subscribe("hyperate");
ws.send(
JSON.stringify({ type: "hyperate", data: { hr: heartrate } }),
true,
);
},
message: (ws, msg) => {
ws.send(JSON.stringify({ type: "echo", data: msg }), true);
},
},
});
new Backend.Sockets.Hyperate((data) => {
heartrate = data;
server.publish(
"hyperate",
JSON.stringify({ type: "hyperate", data: { hr: heartrate } }),
true,
);
});
new Backend.Sockets.Lanyard((data) => {
lanyard = data;
server.publish(
"lanyard",
JSON.stringify({ type: "lanyard", data: lanyard }),
true,
);
});