import http from 'node:http'; import { healthRoute } from './routes/health.js'; import { pageRoutes } from './routes/pages.js'; import { contentRoutes } from './routes/content.js'; import { actionRoutes } from './routes/actions.js'; import { profilesRoute } from './routes/profiles.js'; import type { BrowserManager } from './browser-manager.js'; import { createWsRelay } from './ws-relay.js'; export function startServer(port: number, browserManager?: BrowserManager): Promise { const routes = [healthRoute, profilesRoute]; if (browserManager) { routes.push(pageRoutes(browserManager)); routes.push(contentRoutes(browserManager)); routes.push(actionRoutes(browserManager)); } return new Promise((resolve) => { const server = http.createServer((req, res) => { for (const route of routes) { if (route(req, res)) return; } res.writeHead(404, { 'Content-Type': 'application/json' }); res.end(JSON.stringify({ ok: false, error: { code: 'INTERNAL', message: 'not found' } })); }); server.listen(port, '127.0.0.1', () => { console.log(`[daemon] VisionL daemon started on http://127.0.0.1:${port}`); createWsRelay(server); resolve(server); }); }); } // Direct start when running as script const port = parseInt(process.env.VISIONL_PORT || '9527', 10); startServer(port);