mirror of
https://github.com/openclaw/openclaw.git
synced 2026-07-21 10:16:44 +00:00
fix(browser): keep direct CDP version diagnostics (#104678)
This commit is contained in:
@@ -159,7 +159,7 @@ export async function readChromeVersionWithCredentialFallback(
|
||||
}
|
||||
|
||||
type CdpHealthDiagnostic =
|
||||
| { ok: true }
|
||||
| { ok: true; version?: ChromeVersion }
|
||||
| {
|
||||
ok: false;
|
||||
code:
|
||||
@@ -169,6 +169,25 @@ type CdpHealthDiagnostic =
|
||||
message: string;
|
||||
};
|
||||
|
||||
function readObjectString(value: unknown, key: string): string | undefined {
|
||||
if (!value || typeof value !== "object") {
|
||||
return undefined;
|
||||
}
|
||||
return normalizeOptionalString((value as Record<string, unknown>)[key]);
|
||||
}
|
||||
|
||||
function chromeVersionFromCdpResult(result: unknown): ChromeVersion | undefined {
|
||||
const browser = readObjectString(result, "Browser") ?? readObjectString(result, "product");
|
||||
const userAgent = readObjectString(result, "User-Agent") ?? readObjectString(result, "userAgent");
|
||||
if (!browser && !userAgent) {
|
||||
return undefined;
|
||||
}
|
||||
return {
|
||||
Browser: browser,
|
||||
"User-Agent": userAgent,
|
||||
};
|
||||
}
|
||||
|
||||
async function diagnoseCdpHealthCommand(
|
||||
wsUrl: string,
|
||||
timeoutMs = CHROME_WS_READY_TIMEOUT_MS,
|
||||
@@ -193,7 +212,7 @@ async function diagnoseCdpHealthCommand(
|
||||
return;
|
||||
}
|
||||
if (parsed.result && typeof parsed.result === "object") {
|
||||
finish({ ok: true });
|
||||
finish({ ok: true, version: chromeVersionFromCdpResult(parsed.result) });
|
||||
return;
|
||||
}
|
||||
finish({
|
||||
@@ -344,20 +363,12 @@ async function diagnoseCdpWebSocketEndpoint(params: {
|
||||
startedAt: params.startedAt,
|
||||
});
|
||||
}
|
||||
if (params.version) {
|
||||
return {
|
||||
ok: true,
|
||||
cdpUrl: params.cdpUrl,
|
||||
wsUrl: params.wsUrl,
|
||||
browser: params.version.Browser,
|
||||
userAgent: params.version["User-Agent"],
|
||||
elapsedMs: elapsedSince(params.startedAt),
|
||||
};
|
||||
}
|
||||
return {
|
||||
ok: true,
|
||||
cdpUrl: params.cdpUrl,
|
||||
wsUrl: params.wsUrl,
|
||||
browser: params.version?.Browser ?? health.version?.Browser,
|
||||
userAgent: params.version?.["User-Agent"] ?? health.version?.["User-Agent"],
|
||||
elapsedMs: elapsedSince(params.startedAt),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -890,7 +890,15 @@ describe("browser chrome helpers", () => {
|
||||
ws.on("message", (raw) => {
|
||||
const message = JSON.parse(rawDataToString(raw)) as { id?: number; method?: string };
|
||||
if (message.method === "Browser.getVersion" && message.id === 1) {
|
||||
ws.send(JSON.stringify({ id: 1, result: { product: "Browserless/Mock" } }));
|
||||
ws.send(
|
||||
JSON.stringify({
|
||||
id: 1,
|
||||
result: {
|
||||
product: "Browserless/Mock",
|
||||
userAgent: "Browserless Mock UA",
|
||||
},
|
||||
}),
|
||||
);
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -967,7 +975,15 @@ describe("browser chrome helpers", () => {
|
||||
ws.on("message", (raw) => {
|
||||
const message = JSON.parse(rawDataToString(raw)) as { id?: number; method?: string };
|
||||
if (message.method === "Browser.getVersion" && message.id === 1) {
|
||||
ws.send(JSON.stringify({ id: 1, result: { product: "Browserless/Mock" } }));
|
||||
ws.send(
|
||||
JSON.stringify({
|
||||
id: 1,
|
||||
result: {
|
||||
product: "Browserless/Mock",
|
||||
userAgent: "Browserless Mock UA",
|
||||
},
|
||||
}),
|
||||
);
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -981,6 +997,8 @@ describe("browser chrome helpers", () => {
|
||||
await diagnoseChromeCdp(`ws://127.0.0.1:${port}`, 500, 500),
|
||||
);
|
||||
expect(diagnostic.wsUrl).toBe(`ws://127.0.0.1:${port}`);
|
||||
expect(diagnostic.browser).toBe("Browserless/Mock");
|
||||
expect(diagnostic.userAgent).toBe("Browserless Mock UA");
|
||||
} finally {
|
||||
await new Promise<void>((resolve) => {
|
||||
wss.close(() => resolve());
|
||||
|
||||
Reference in New Issue
Block a user