import * as http from "node:http"; import { readExpectedToken, requireBearer } from "./auth.js"; import { handleReposClone, handleReposList, handleReposLoad, } from "./handlers.js"; const HOST = process.env.REPOS_DEVTOOLS_HOST ?? "127.0.0.1"; const PORT = Number(process.env.REPOS_DEVTOOLS_PORT ?? "37140"); const main = (): void => { const token = readExpectedToken(); if (token.length === 0) { console.error("repos-devtools-server: set REPOS_DEVTOOLS_TOKEN (non-empty secret)."); process.exit(1); } const server = http.createServer((req, res) => { void (async () => { try { if (!requireBearer(req, res, token)) { return; } const url = new URL(req.url ?? "/", `http://${HOST}`); const p = url.pathname; if (req.method === "POST" && p === "/repos-clone") { await handleReposClone(req, res); return; } if (req.method === "GET" && p === "/repos-list") { await handleReposList(res); return; } if (req.method === "POST" && p === "/repos-load") { await handleReposLoad(req, res); return; } res.writeHead(404, { "Content-Type": "application/json; charset=utf-8" }); res.end(JSON.stringify({ error: "Not found" })); } catch (e) { const msg = e instanceof Error ? e.message : String(e); res.writeHead(400, { "Content-Type": "application/json; charset=utf-8" }); res.end(JSON.stringify({ error: msg })); } })(); }); server.listen(PORT, HOST, () => { console.error( `repos-devtools-server listening on http://${HOST}:${PORT} (root=${process.env.REPOS_DEVTOOLS_ROOT ?? "/home/ncantu/code"})`, ); }); }; main();