From 7ec48b24a3757a1b67cd7ce2bc4fd0da886b48e7 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Thu, 23 Apr 2026 23:20:00 +0100 Subject: [PATCH] perf: inline browser ws decoder --- extensions/browser/src/browser/cdp.helpers.ts | 19 +++++++++++++++++-- extensions/browser/src/infra/ws.ts | 19 ++++++++++++++++++- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/extensions/browser/src/browser/cdp.helpers.ts b/extensions/browser/src/browser/cdp.helpers.ts index 5e3e25e814f..82c8767f6a2 100644 --- a/extensions/browser/src/browser/cdp.helpers.ts +++ b/extensions/browser/src/browser/cdp.helpers.ts @@ -6,7 +6,6 @@ import { type SsrFPolicy, resolvePinnedHostnameWithPolicy, } from "../infra/net/ssrf.js"; -import { rawDataToString } from "../infra/ws.js"; import { redactSensitiveText } from "../logging/redact.js"; import { getDirectAgentForCdp, withNoProxyForCdpUrl } from "./cdp-proxy-bypass.js"; import { CDP_HTTP_REQUEST_TIMEOUT_MS, CDP_WS_HANDSHAKE_TIMEOUT_MS } from "./cdp-timeouts.js"; @@ -151,6 +150,22 @@ export type CdpSendFn = ( sessionId?: string, ) => Promise; +function rawCdpMessageToString(data: WebSocket.RawData): string { + if (typeof data === "string") { + return data; + } + if (Buffer.isBuffer(data)) { + return data.toString("utf8"); + } + if (Array.isArray(data)) { + return Buffer.concat(data).toString("utf8"); + } + if (ArrayBuffer.isView(data)) { + return Buffer.from(data.buffer, data.byteOffset, data.byteLength).toString("utf8"); + } + return Buffer.from(data).toString("utf8"); +} + export function getHeadersWithAuth(url: string, headers: Record = {}) { const mergedHeaders = { ...headers }; try { @@ -246,7 +261,7 @@ function createCdpSender(ws: WebSocket) { ws.on("message", (data) => { try { - const parsed = JSON.parse(rawDataToString(data)) as CdpResponse; + const parsed = JSON.parse(rawCdpMessageToString(data)) as CdpResponse; if (typeof parsed.id !== "number") { return; } diff --git a/extensions/browser/src/infra/ws.ts b/extensions/browser/src/infra/ws.ts index f0c522a42a6..565c2b8f963 100644 --- a/extensions/browser/src/infra/ws.ts +++ b/extensions/browser/src/infra/ws.ts @@ -1 +1,18 @@ -export { rawDataToString } from "openclaw/plugin-sdk/browser-node-runtime"; +export function rawDataToString(data: unknown): string { + if (typeof data === "string") { + return data; + } + if (Buffer.isBuffer(data)) { + return data.toString("utf8"); + } + if (Array.isArray(data)) { + return Buffer.concat(data).toString("utf8"); + } + if (ArrayBuffer.isView(data)) { + return Buffer.from(data.buffer, data.byteOffset, data.byteLength).toString("utf8"); + } + if (data instanceof ArrayBuffer) { + return Buffer.from(data).toString("utf8"); + } + return String(data); +}