fix(browser): keep direct CDP version diagnostics (#104678)

This commit is contained in:
llagy007
2026-07-11 16:09:42 -07:00
committed by GitHub
parent c04c85b6f3
commit 4057d4b623
2 changed files with 43 additions and 14 deletions
@@ -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),
};
}
+20 -2
View File
@@ -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());