aboutsummaryrefslogtreecommitdiff
path: root/src/cdp/evaluate.ts
diff options
context:
space:
mode:
authoramankumarsingh77 <amankumarsingh7702@gmail.com>2026-07-27 01:17:32 +0530
committerAman Kumar <145339995+amankumarsingh77@users.noreply.github.com>2026-08-02 19:12:46 +0530
commit9e9bf2a3badb59d0ce5bdb47c4e9d09ffb259e69 (patch)
tree602a6e33a98de62bf1f0c1d873eeb2676c650242 /src/cdp/evaluate.ts
parentd1b57558ff40ef6d6b19ee7eff0a44f7f4a585f6 (diff)
refactor(cdp): extract attachTo, getWindowId, evaluateJson helpers
Target.attachToTarget was decoded at 5 sites, Browser.getWindowForTarget at 5, and Runtime.evaluate unwrapped at another. Each is now one typed helper. Deletes the dead cdp/window-binding.ts. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'src/cdp/evaluate.ts')
-rw-r--r--src/cdp/evaluate.ts31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/cdp/evaluate.ts b/src/cdp/evaluate.ts
new file mode 100644
index 0000000..cd68d61
--- /dev/null
+++ b/src/cdp/evaluate.ts
@@ -0,0 +1,31 @@
+import { type Result, err, ok } from "../util/result";
+import { type CdpError, cdpError } from "./errors";
+import type { CdpSession } from "./session";
+
+/**
+ * Runtime.evaluate, unwrapped and narrowed. Runs `expression`, surfaces a page
+ * exception as an error, then applies `check` to the returned value — the
+ * sanctioned way to turn `unknown` evaluate output into a typed `T` without a
+ * cast.
+ */
+export const evaluateJson = async <T>(
+ session: CdpSession,
+ expression: string,
+ check: (v: unknown) => v is T,
+): Promise<Result<T, CdpError>> => {
+ const r = await session.call("Runtime.evaluate", {
+ expression,
+ returnByValue: true,
+ awaitPromise: true,
+ });
+ if (!r.success) return r;
+ const { result, exceptionDetails } = r.data;
+ if (exceptionDetails !== undefined) {
+ return err(cdpError("remote_error", exceptionDetails.text, "Runtime.evaluate"));
+ }
+ const value = result.value;
+ if (!check(value)) {
+ return err(cdpError("invalid_response", `unexpected evaluate shape for: ${expression.slice(0, 60)}`, "Runtime.evaluate"));
+ }
+ return ok(value);
+};