aboutsummaryrefslogtreecommitdiff
path: root/src/domains/cdp-call.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/domains/cdp-call.ts')
-rw-r--r--src/domains/cdp-call.ts45
1 files changed, 43 insertions, 2 deletions
diff --git a/src/domains/cdp-call.ts b/src/domains/cdp-call.ts
index 3316633..eee2e0a 100644
--- a/src/domains/cdp-call.ts
+++ b/src/domains/cdp-call.ts
@@ -1,14 +1,55 @@
import type { BrowserClient } from "../client";
import type { CdpMethod, ParamsOf, ResultOf } from "../cdp/commands";
+import type { CdpError } from "../cdp/errors";
import { type Result, err } from "../util/result";
import type { ToolErr } from "../util/tool";
+export const cdpErrToToolErr = (e: CdpError, method: string): ToolErr => ({
+ kind: e.kind === "timeout" ? "timeout" : "cdp_error",
+ message: e.message,
+ details: { method },
+});
+
export const cdpCall = async <M extends CdpMethod>(
client: BrowserClient,
method: M,
params: ParamsOf<M>,
+ opts?: { timeoutMs?: number },
+): Promise<Result<ResultOf<M>, ToolErr>> => {
+ const r = await client.session().call(method, params, opts);
+ if (!r.success) return err(cdpErrToToolErr(r.error, method));
+ return r;
+};
+
+export const cdpCallOnTarget = async <M extends CdpMethod>(
+ client: BrowserClient,
+ method: M,
+ params: ParamsOf<M>,
+ sessionId: string,
+ opts?: { timeoutMs?: number },
+): Promise<Result<ResultOf<M>, ToolErr>> => {
+ const r = await client.session().callOnTarget(method, params, sessionId, opts);
+ if (!r.success) return err(cdpErrToToolErr(r.error, method));
+ return r;
+};
+
+export const cdpCallBrowser = async <M extends CdpMethod>(
+ client: BrowserClient,
+ method: M,
+ params?: ParamsOf<M>,
+ opts?: { timeoutMs?: number },
): Promise<Result<ResultOf<M>, ToolErr>> => {
- const r = await client.session().call(method, params);
- if (!r.success) return err({ kind: "cdp_error", message: r.error.message, details: { method } });
+ const r = await client.session().callBrowser(method, params, opts);
+ if (!r.success) return err(cdpErrToToolErr(r.error, method));
+ return r;
+};
+
+export const evalJs = async (
+ client: BrowserClient,
+ expression: string,
+ sessionId?: string,
+): Promise<Result<unknown, ToolErr>> => {
+ const r = await client.evaluateJs(expression, sessionId);
+ if (!r.success) return err(cdpErrToToolErr(r.error, "Runtime.evaluate"));
return r;
};