import { Hono } from "hono"; import { serve } from "@hono/node-server"; import { serveStatic } from "@hono/node-server/serve-static"; import { requestLogger } from "@atbb/logger/middleware"; import { existsSync } from "node:fs"; import { resolve } from "node:path"; import { webRoutes } from "./routes/index.js"; import { loadConfig } from "./lib/config.js"; import { logger } from "./lib/logger.js"; const config = loadConfig(); const app = new Hono(); app.use("*", requestLogger(logger)); const staticRoot = "./public"; if (!existsSync(resolve(staticRoot))) { logger.error("Static file directory not found", { resolvedPath: resolve(staticRoot), cwd: process.cwd(), }); } app.use("/static/*", serveStatic({ root: staticRoot })); app.route("/", webRoutes); app.onError((err, c) => { logger.error("Unhandled error in web route", { path: c.req.path, method: c.req.method, error: err.message, stack: err.stack, }); const detail = process.env.NODE_ENV !== "production" ? `

${err.message}

` : ""; return c.html( `

Internal Server Error

Something went wrong. Please try again later.

${detail}`, 500 ); }); serve( { fetch: app.fetch, port: config.port, }, (info) => { logger.info("Server started", { url: `http://localhost:${info.port}`, port: info.port, }); } );