import { join } from "jsr:@std/path"; import { serveDir } from "jsr:@std/http/file-server"; const root = import.meta.dirname ?? "."; const port = Number(Deno.env.get("PORT") ?? "8080"); function trimPathLine(line: string): string { let s = line.trim(); if (!s || s.startsWith("#")) return ""; if ((s.startsWith('"') && s.endsWith('"')) || (s.startsWith("'") && s.endsWith("'"))) { s = s.slice(1, -1); } return s.trim(); } /** Optional one-line file next to this script: absolute path to `ChatRequest/Database.json`. */ function readOptionalPathFile(): string | undefined { try { const pathFile = join(root, "chat-request-database.path"); const raw = Deno.readTextFileSync(pathFile); for (const line of raw.split(/\r?\n/)) { const p = trimPathLine(line); if (p) return p; } } catch { // missing or unreadable } return undefined; } const chatRequestDatabase = Deno.env.get("CHAT_REQUEST_DATABASE")?.trim() || readOptionalPathFile(); function isChatRequestFilename(pathname: string): boolean { const base = pathname.split("/").pop() ?? ""; return base === "ChatRequest.json" || base === "database.json"; } Deno.serve({ port, hostname: "127.0.0.1" }, async (req) => { const url = new URL(req.url); if (req.method === "GET" && chatRequestDatabase && isChatRequestFilename(url.pathname)) { try { let text = await Deno.readTextFile(chatRequestDatabase); if (text.charCodeAt(0) === 0xfeff) text = text.slice(1); return new Response(text, { headers: { "Content-Type": "application/json; charset=utf-8", "Cache-Control": "no-store", }, }); } catch (e) { if (e instanceof Deno.errors.NotFound) { console.error(`CHAT_REQUEST_DATABASE not found: ${chatRequestDatabase}`); return new Response(null, { status: 404 }); } const msg = e instanceof Error ? e.message : String(e); console.error(`CHAT_REQUEST_DATABASE read error (${chatRequestDatabase}): ${msg}`); return new Response(`Failed to read CHAT_REQUEST_DATABASE: ${msg}\n`, { status: 500 }); } } return serveDir(req, { fsRoot: root, showDirListing: false }); }); console.log(`Overlay: http://127.0.0.1:${port}/index.html`); if (chatRequestDatabase) { console.log(`Chat request database file: ${chatRequestDatabase}`); } else { console.warn( "No database path: set CHAT_REQUEST_DATABASE or create chat-request-database.path (see README). " + "Otherwise /ChatRequest.json is only served from this folder if the file exists.", ); }