import { Elysia } from "elysia"; import { Eta } from "eta"; import { resolve } from "path"; import { createHash } from "crypto"; import sql from "./db"; import { loadStatusPage, loadPagePayload, loadMonitorDetail, type Window } from "./data"; import { renderRss } from "./render/rss"; import { renderBadge, badgeFromState } from "./render/badge"; import { cached } from "./cache"; import { allow } from "./rate-limit"; import { checkPassword, makeAuthCookie, verifyAuthCookie } from "./auth"; // Crash isolation: log loudly, never exit. Status pages going down silently is // worse than weird logs. process.on("unhandledRejection", (reason) => console.error("[unhandledRejection]", reason)); process.on("uncaughtException", (err) => console.error("[uncaughtException]", err)); const eta = new Eta({ views: resolve(import.meta.dir, "./views"), cache: true, defaultExtension: ".ejs" }); const PUBLIC_BASE = process.env.STATUS_BASE_URL ?? "https://status.pingql.com"; // Hash the static assets so their URLs change whenever their bytes change. // Used as cache-busting query strings on the /