File: //lib/node_modules/openclaw/dist/server-D_-hXya7.js
import "./paths-B4BZAPZh.js";
import "./utils-7gb3VEps.js";
import "./agent-scope-Cwx-l_oY.js";
import { t as createSubsystemLogger } from "./subsystem-C5Sd3JES.js";
import "./exec-DnsD91Q4.js";
import "./model-selection-D629Ojni.js";
import "./github-copilot-token-nncItI8D.js";
import "./boolean-BgXe2hyu.js";
import "./env-DkKx0PT3.js";
import "./host-env-security-ljCLeQmh.js";
import { i as loadConfig } from "./config-DiKKRE56.js";
import "./env-vars-CvvqezS9.js";
import "./manifest-registry-C6u54rI3.js";
import "./chrome-FF2Gl2uS.js";
import "./tailscale-iTlFoOvr.js";
import "./ip-D0zgNmBV.js";
import "./tailnet-CEudzG0i.js";
import "./ws-BTdBA7Dw.js";
import "./auth-Byh9Posp.js";
import { i as resolveBrowserConfig, o as ensureBrowserControlAuth, r as registerBrowserRoutes, s as resolveBrowserControlAuth, t as createBrowserRouteContext } from "./server-context-Ces4rjKO.js";
import "./redact-DKEWQ4ef.js";
import "./errors-DiV2hVgY.js";
import "./fs-safe-DwCRJYoe.js";
import "./trash-BlINPotY.js";
import "./ssrf-D0C-ivqd.js";
import "./image-ops-CT4_RMYw.js";
import "./store-to0SxvTa.js";
import "./ports-CMYOQ1Xv.js";
import { n as installBrowserCommonMiddleware, t as installBrowserAuthMiddleware } from "./server-middleware-CQ0JmE7W.js";
import { n as stopKnownBrowserProfiles, t as ensureExtensionRelayForProfiles } from "./server-lifecycle-C9mtiCMQ.js";
import { t as isPwAiLoaded } from "./tool-loop-detection-voFArPPx.js";
import express from "express";
//#region src/browser/server.ts
let state = null;
const logServer = createSubsystemLogger("browser").child("server");
async function startBrowserControlServerFromConfig() {
if (state) return state;
const cfg = loadConfig();
const resolved = resolveBrowserConfig(cfg.browser, cfg);
if (!resolved.enabled) return null;
let browserAuth = resolveBrowserControlAuth(cfg);
try {
const ensured = await ensureBrowserControlAuth({ cfg });
browserAuth = ensured.auth;
if (ensured.generatedToken) logServer.info("No browser auth configured; generated gateway.auth.token automatically.");
} catch (err) {
logServer.warn(`failed to auto-configure browser auth: ${String(err)}`);
}
const app = express();
installBrowserCommonMiddleware(app);
installBrowserAuthMiddleware(app, browserAuth);
registerBrowserRoutes(app, createBrowserRouteContext({
getState: () => state,
refreshConfigFromDisk: true
}));
const port = resolved.controlPort;
const server = await new Promise((resolve, reject) => {
const s = app.listen(port, "127.0.0.1", () => resolve(s));
s.once("error", reject);
}).catch((err) => {
logServer.error(`openclaw browser server failed to bind 127.0.0.1:${port}: ${String(err)}`);
return null;
});
if (!server) return null;
state = {
server,
port,
resolved,
profiles: /* @__PURE__ */ new Map()
};
await ensureExtensionRelayForProfiles({
resolved,
onWarn: (message) => logServer.warn(message)
});
const authMode = browserAuth.token ? "token" : browserAuth.password ? "password" : "off";
logServer.info(`Browser control listening on http://127.0.0.1:${port}/ (auth=${authMode})`);
return state;
}
async function stopBrowserControlServer() {
const current = state;
if (!current) return;
await stopKnownBrowserProfiles({
getState: () => state,
onWarn: (message) => logServer.warn(message)
});
if (current.server) await new Promise((resolve) => {
current.server?.close(() => resolve());
});
state = null;
if (isPwAiLoaded()) try {
await (await import("./pw-ai-DQB5Q2sN.js")).closePlaywrightBrowserConnection();
} catch {}
}
//#endregion
export { startBrowserControlServerFromConfig, stopBrowserControlServer };