From e2ecd0a3214d4e23a1d4d7dccac7f25fa1c5f4a4 Mon Sep 17 00:00:00 2001 From: Shrey Pandya Date: Tue, 3 Mar 2026 13:39:06 -0800 Subject: [PATCH] fix(browser): preserve wss:// cdpUrl in legacy default profile resolution --- src/browser/config.test.ts | 11 +++++++++++ src/browser/config.ts | 10 +++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/browser/config.test.ts b/src/browser/config.test.ts index 5fa1488a22d..eb77dc5341d 100644 --- a/src/browser/config.test.ts +++ b/src/browser/config.test.ts @@ -165,6 +165,17 @@ describe("browser config", () => { expect(work?.cdpUrl).toBe("https://example.com:18801"); }); + it("preserves wss:// cdpUrl with query params for the default profile", () => { + const resolved = resolveBrowserConfig({ + cdpUrl: "wss://connect.browserbase.com?apiKey=test-key", + }); + const profile = resolveProfile(resolved, "openclaw"); + expect(profile?.cdpUrl).toBe("wss://connect.browserbase.com/?apiKey=test-key"); + expect(profile?.cdpHost).toBe("connect.browserbase.com"); + expect(profile?.cdpPort).toBe(443); + expect(profile?.cdpIsLoopback).toBe(false); + }); + it("rejects unsupported protocols", () => { expect(() => resolveBrowserConfig({ cdpUrl: "ftp://127.0.0.1:18791" })).toThrow( "must be http(s) or ws(s)", diff --git a/src/browser/config.ts b/src/browser/config.ts index b2b953aa31a..a2f4b5757f4 100644 --- a/src/browser/config.ts +++ b/src/browser/config.ts @@ -162,12 +162,17 @@ function ensureDefaultProfile( defaultColor: string, legacyCdpPort?: number, derivedDefaultCdpPort?: number, + legacyCdpUrl?: string, ): Record { const result = { ...profiles }; if (!result[DEFAULT_OPENCLAW_BROWSER_PROFILE_NAME]) { result[DEFAULT_OPENCLAW_BROWSER_PROFILE_NAME] = { cdpPort: legacyCdpPort ?? derivedDefaultCdpPort ?? CDP_PORT_RANGE_START, color: defaultColor, + // Preserve the full cdpUrl for ws/wss endpoints so resolveProfile() + // doesn't reconstruct from cdpProtocol/cdpHost/cdpPort (which drops + // the WebSocket protocol and query params like API keys). + ...(legacyCdpUrl ? { cdpUrl: legacyCdpUrl } : {}), }; } return result; @@ -260,8 +265,11 @@ export function resolveBrowserConfig( const defaultProfileFromConfig = cfg?.defaultProfile?.trim() || undefined; // Use legacy cdpUrl port for backward compatibility when no profiles configured const legacyCdpPort = rawCdpUrl ? cdpInfo.port : undefined; + const isWsUrl = + cdpInfo.parsed.protocol === "ws:" || cdpInfo.parsed.protocol === "wss:"; + const legacyCdpUrl = rawCdpUrl && isWsUrl ? cdpInfo.normalized : undefined; const profiles = ensureDefaultChromeExtensionProfile( - ensureDefaultProfile(cfg?.profiles, defaultColor, legacyCdpPort, cdpPortRangeStart), + ensureDefaultProfile(cfg?.profiles, defaultColor, legacyCdpPort, cdpPortRangeStart, legacyCdpUrl), controlPort, ); const cdpProtocol = cdpInfo.parsed.protocol === "https:" ? "https" : "http";