diff --git a/extensions/browser/src/browser/bridge-server.auth.test.ts b/extensions/browser/src/browser/bridge-server.auth.test.ts index 4b765edc3b0..9166b2fede4 100644 --- a/extensions/browser/src/browser/bridge-server.auth.test.ts +++ b/extensions/browser/src/browser/bridge-server.auth.test.ts @@ -44,6 +44,7 @@ describe("startBrowserBridgeServer auth", () => { const bridge = await startBrowserBridgeServer({ resolved: buildResolvedConfig(), ...authConfig, + skipRouteRegistrationForTest: true, }); servers.push({ stop: () => stopBrowserBridgeServer(bridge.server) }); @@ -87,6 +88,7 @@ describe("startBrowserBridgeServer auth", () => { const bridge = await startBrowserBridgeServer({ resolved: buildResolvedConfig(), authToken: "secret-token", + skipRouteRegistrationForTest: true, resolveSandboxNoVncToken: (token) => { resolveCalls += 1; if (token !== "valid-token") { diff --git a/extensions/browser/src/browser/bridge-server.ts b/extensions/browser/src/browser/bridge-server.ts index 0db57ca73d8..58db3318b42 100644 --- a/extensions/browser/src/browser/bridge-server.ts +++ b/extensions/browser/src/browser/bridge-server.ts @@ -5,13 +5,8 @@ import { normalizeOptionalString } from "openclaw/plugin-sdk/text-runtime"; import { isLoopbackHost } from "../gateway/net.js"; import { deleteBridgeAuthForPort, setBridgeAuthForPort } from "./bridge-auth-registry.js"; import type { ResolvedBrowserConfig } from "./config.js"; -import { registerBrowserRoutes } from "./routes/index.js"; import type { BrowserRouteRegistrar } from "./routes/types.js"; -import { - type BrowserServerState, - createBrowserRouteContext, - type ProfileContext, -} from "./server-context.js"; +import type { BrowserServerState, ProfileContext } from "./server-context.js"; import { hasVerifiedBrowserAuth, installBrowserAuthMiddleware, @@ -67,6 +62,7 @@ export async function startBrowserBridgeServer(params: { authPassword?: string; onEnsureAttachTarget?: (profile: ProfileContext["profile"]) => Promise; resolveSandboxNoVncToken?: (token: string) => ResolvedNoVncObserver | null; + skipRouteRegistrationForTest?: boolean; }): Promise { const host = params.host ?? "127.0.0.1"; if (!isLoopbackHost(host)) { @@ -115,11 +111,21 @@ export async function startBrowserBridgeServer(params: { profiles: new Map(), }; - const ctx = createBrowserRouteContext({ - getState: () => state, - onEnsureAttachTarget: params.onEnsureAttachTarget, - }); - registerBrowserRoutes(app as unknown as BrowserRouteRegistrar, ctx); + if (params.skipRouteRegistrationForTest) { + app.get("/", (_req, res) => { + res.status(200).send("OK"); + }); + } else { + const [{ createBrowserRouteContext }, { registerBrowserRoutes }] = await Promise.all([ + import("./server-context.js"), + import("./routes/index.js"), + ]); + const ctx = createBrowserRouteContext({ + getState: () => state, + onEnsureAttachTarget: params.onEnsureAttachTarget, + }); + registerBrowserRoutes(app as unknown as BrowserRouteRegistrar, ctx); + } const server = await new Promise((resolve, reject) => { const s = app.listen(port, host, () => resolve(s));