import Hono from '@/lib/hono'; import { serveStatic } from 'hono/bun'; import { secureHeaders } from 'hono/secure-headers'; import eta from '@/lib/eta.ts'; import auth from '@/routes/auth.ts'; import dash from '@/routes/dashboard.ts'; import write from '@/routes/write.ts'; import { redirect_if_auth } from '@/middleware/redirect'; import { params_middleware } from '@/middleware/params'; import { bundle_typescript } from '@/bundle'; import subdomainMiddleware from '@/middleware/subdomain'; import { clearWindow } from 'isomorphic-dompurify'; import { cleanup_sessions } from '@/db/db'; await bundle_typescript(); const app = new Hono; app.use(secureHeaders()); app.use('/static/*', serveStatic({ root: './static', rewriteRequestPath: (path) => path.replace(/^\/static/, '/'), })); app.use('/bundles/*', serveStatic({ root: './public', rewriteRequestPath: (path) => path.replace(/^\/bundles/, '/') })); app.use(subdomainMiddleware); app.use(params_middleware); app.get("/", redirect_if_auth("/dashboard", true), (c) => eta(c, "./index")); app.route("/", auth); app.route("/dashboard", dash); app.route("/write", write); app.notFound((c) => { c.status(404) return eta(c, "not_found") }); Bun.cron("*/30 * * * *", async () => { await cleanup_sessions(); clearWindow(); }) // (half an hour) export default { port: process.env.PORT, fetch: app.fetch, };