@lhremote/core 0.0.0 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +661 -0
- package/dist/cdp/client.d.ts +100 -0
- package/dist/cdp/client.d.ts.map +1 -0
- package/dist/cdp/client.integration.test.d.ts +2 -0
- package/dist/cdp/client.integration.test.d.ts.map +1 -0
- package/dist/cdp/client.integration.test.js +70 -0
- package/dist/cdp/client.integration.test.js.map +1 -0
- package/dist/cdp/client.js +286 -0
- package/dist/cdp/client.js.map +1 -0
- package/dist/cdp/client.test.d.ts +2 -0
- package/dist/cdp/client.test.d.ts.map +1 -0
- package/dist/cdp/client.test.js +269 -0
- package/dist/cdp/client.test.js.map +1 -0
- package/dist/cdp/discovery.d.ts +14 -0
- package/dist/cdp/discovery.d.ts.map +1 -0
- package/dist/cdp/discovery.integration.test.d.ts +2 -0
- package/dist/cdp/discovery.integration.test.d.ts.map +1 -0
- package/dist/cdp/discovery.integration.test.js +25 -0
- package/dist/cdp/discovery.integration.test.js.map +1 -0
- package/dist/cdp/discovery.js +31 -0
- package/dist/cdp/discovery.js.map +1 -0
- package/dist/cdp/discovery.test.d.ts +2 -0
- package/dist/cdp/discovery.test.d.ts.map +1 -0
- package/dist/cdp/discovery.test.js +54 -0
- package/dist/cdp/discovery.test.js.map +1 -0
- package/dist/cdp/errors.d.ts +28 -0
- package/dist/cdp/errors.d.ts.map +1 -0
- package/dist/cdp/errors.js +40 -0
- package/dist/cdp/errors.js.map +1 -0
- package/dist/cdp/errors.test.d.ts +2 -0
- package/dist/cdp/errors.test.d.ts.map +1 -0
- package/dist/cdp/errors.test.js +35 -0
- package/dist/cdp/errors.test.js.map +1 -0
- package/dist/cdp/index.d.ts +5 -0
- package/dist/cdp/index.d.ts.map +1 -0
- package/dist/cdp/index.js +5 -0
- package/dist/cdp/index.js.map +1 -0
- package/dist/cdp/instance-discovery.d.ts +30 -0
- package/dist/cdp/instance-discovery.d.ts.map +1 -0
- package/dist/cdp/instance-discovery.integration.test.d.ts +2 -0
- package/dist/cdp/instance-discovery.integration.test.d.ts.map +1 -0
- package/dist/cdp/instance-discovery.integration.test.js +34 -0
- package/dist/cdp/instance-discovery.integration.test.js.map +1 -0
- package/dist/cdp/instance-discovery.js +130 -0
- package/dist/cdp/instance-discovery.js.map +1 -0
- package/dist/cdp/instance-discovery.test.d.ts +2 -0
- package/dist/cdp/instance-discovery.test.d.ts.map +1 -0
- package/dist/cdp/instance-discovery.test.js +110 -0
- package/dist/cdp/instance-discovery.test.js.map +1 -0
- package/dist/cdp/testing/launch-chromium.d.ts +24 -0
- package/dist/cdp/testing/launch-chromium.d.ts.map +1 -0
- package/dist/cdp/testing/launch-chromium.js +90 -0
- package/dist/cdp/testing/launch-chromium.js.map +1 -0
- package/dist/db/client.d.ts +13 -0
- package/dist/db/client.d.ts.map +1 -0
- package/dist/db/client.integration.test.d.ts +2 -0
- package/dist/db/client.integration.test.d.ts.map +1 -0
- package/dist/db/client.integration.test.js +59 -0
- package/dist/db/client.integration.test.js.map +1 -0
- package/dist/db/client.js +17 -0
- package/dist/db/client.js.map +1 -0
- package/dist/db/client.test.d.ts +2 -0
- package/dist/db/client.test.d.ts.map +1 -0
- package/dist/db/client.test.js +46 -0
- package/dist/db/client.test.js.map +1 -0
- package/dist/db/discovery.d.ts +14 -0
- package/dist/db/discovery.d.ts.map +1 -0
- package/dist/db/discovery.integration.test.d.ts +2 -0
- package/dist/db/discovery.integration.test.d.ts.map +1 -0
- package/dist/db/discovery.integration.test.js +99 -0
- package/dist/db/discovery.integration.test.js.map +1 -0
- package/dist/db/discovery.js +74 -0
- package/dist/db/discovery.js.map +1 -0
- package/dist/db/discovery.test.d.ts +2 -0
- package/dist/db/discovery.test.d.ts.map +1 -0
- package/dist/db/discovery.test.js +123 -0
- package/dist/db/discovery.test.js.map +1 -0
- package/dist/db/errors.d.ts +21 -0
- package/dist/db/errors.d.ts.map +1 -0
- package/dist/db/errors.js +33 -0
- package/dist/db/errors.js.map +1 -0
- package/dist/db/errors.test.d.ts +2 -0
- package/dist/db/errors.test.d.ts.map +1 -0
- package/dist/db/errors.test.js +32 -0
- package/dist/db/errors.test.js.map +1 -0
- package/dist/db/index.d.ts +5 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +5 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/repositories/index.d.ts +2 -0
- package/dist/db/repositories/index.d.ts.map +1 -0
- package/dist/db/repositories/index.js +2 -0
- package/dist/db/repositories/index.js.map +1 -0
- package/dist/db/repositories/profile.d.ts +32 -0
- package/dist/db/repositories/profile.d.ts.map +1 -0
- package/dist/db/repositories/profile.integration.test.d.ts +2 -0
- package/dist/db/repositories/profile.integration.test.d.ts.map +1 -0
- package/dist/db/repositories/profile.integration.test.js +119 -0
- package/dist/db/repositories/profile.integration.test.js.map +1 -0
- package/dist/db/repositories/profile.js +126 -0
- package/dist/db/repositories/profile.js.map +1 -0
- package/dist/db/repositories/profile.test.d.ts +2 -0
- package/dist/db/repositories/profile.test.d.ts.map +1 -0
- package/dist/db/repositories/profile.test.js +126 -0
- package/dist/db/repositories/profile.test.js.map +1 -0
- package/dist/db/testing/create-fixture.d.ts +8 -0
- package/dist/db/testing/create-fixture.d.ts.map +1 -0
- package/dist/db/testing/create-fixture.js +286 -0
- package/dist/db/testing/create-fixture.js.map +1 -0
- package/dist/db/testing/open-fixture.d.ts +14 -0
- package/dist/db/testing/open-fixture.d.ts.map +1 -0
- package/dist/db/testing/open-fixture.js +21 -0
- package/dist/db/testing/open-fixture.js.map +1 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/services/app.d.ts +62 -0
- package/dist/services/app.d.ts.map +1 -0
- package/dist/services/app.js +198 -0
- package/dist/services/app.js.map +1 -0
- package/dist/services/app.test.d.ts +2 -0
- package/dist/services/app.test.d.ts.map +1 -0
- package/dist/services/app.test.js +265 -0
- package/dist/services/app.test.js.map +1 -0
- package/dist/services/errors.d.ts +45 -0
- package/dist/services/errors.d.ts.map +1 -0
- package/dist/services/errors.js +66 -0
- package/dist/services/errors.js.map +1 -0
- package/dist/services/errors.test.d.ts +2 -0
- package/dist/services/errors.test.d.ts.map +1 -0
- package/dist/services/errors.test.js +71 -0
- package/dist/services/errors.test.js.map +1 -0
- package/dist/services/index.d.ts +8 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +8 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/instance-lifecycle.d.ts +38 -0
- package/dist/services/instance-lifecycle.d.ts.map +1 -0
- package/dist/services/instance-lifecycle.js +87 -0
- package/dist/services/instance-lifecycle.js.map +1 -0
- package/dist/services/instance-lifecycle.test.d.ts +2 -0
- package/dist/services/instance-lifecycle.test.d.ts.map +1 -0
- package/dist/services/instance-lifecycle.test.js +152 -0
- package/dist/services/instance-lifecycle.test.js.map +1 -0
- package/dist/services/instance.d.ts +50 -0
- package/dist/services/instance.d.ts.map +1 -0
- package/dist/services/instance.js +121 -0
- package/dist/services/instance.js.map +1 -0
- package/dist/services/instance.test.d.ts +2 -0
- package/dist/services/instance.test.d.ts.map +1 -0
- package/dist/services/instance.test.js +181 -0
- package/dist/services/instance.test.js.map +1 -0
- package/dist/services/launcher.d.ts +51 -0
- package/dist/services/launcher.d.ts.map +1 -0
- package/dist/services/launcher.js +147 -0
- package/dist/services/launcher.js.map +1 -0
- package/dist/services/launcher.test.d.ts +2 -0
- package/dist/services/launcher.test.d.ts.map +1 -0
- package/dist/services/launcher.test.js +126 -0
- package/dist/services/launcher.test.js.map +1 -0
- package/dist/services/profile.d.ts +44 -0
- package/dist/services/profile.d.ts.map +1 -0
- package/dist/services/profile.js +83 -0
- package/dist/services/profile.js.map +1 -0
- package/dist/services/profile.test.d.ts +2 -0
- package/dist/services/profile.test.d.ts.map +1 -0
- package/dist/services/profile.test.js +145 -0
- package/dist/services/profile.test.js.map +1 -0
- package/dist/services/status.d.ts +33 -0
- package/dist/services/status.d.ts.map +1 -0
- package/dist/services/status.js +76 -0
- package/dist/services/status.js.map +1 -0
- package/dist/services/status.test.d.ts +2 -0
- package/dist/services/status.test.d.ts.map +1 -0
- package/dist/services/status.test.js +207 -0
- package/dist/services/status.test.js.map +1 -0
- package/dist/testing/e2e-helpers.d.ts +41 -0
- package/dist/testing/e2e-helpers.d.ts.map +1 -0
- package/dist/testing/e2e-helpers.js +111 -0
- package/dist/testing/e2e-helpers.js.map +1 -0
- package/dist/types/account.d.ts +13 -0
- package/dist/types/account.d.ts.map +1 -0
- package/dist/types/account.js +2 -0
- package/dist/types/account.js.map +1 -0
- package/dist/types/account.test.d.ts +2 -0
- package/dist/types/account.test.d.ts.map +1 -0
- package/dist/types/account.test.js +24 -0
- package/dist/types/account.test.js.map +1 -0
- package/dist/types/cdp.d.ts +18 -0
- package/dist/types/cdp.d.ts.map +1 -0
- package/dist/types/cdp.js +2 -0
- package/dist/types/cdp.js.map +1 -0
- package/dist/types/cdp.test.d.ts +2 -0
- package/dist/types/cdp.test.d.ts.map +1 -0
- package/dist/types/cdp.test.js +28 -0
- package/dist/types/cdp.test.js.map +1 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/instance.d.ts +36 -0
- package/dist/types/instance.d.ts.map +1 -0
- package/dist/types/instance.js +8 -0
- package/dist/types/instance.js.map +1 -0
- package/dist/types/instance.test.d.ts +2 -0
- package/dist/types/instance.test.d.ts.map +1 -0
- package/dist/types/instance.test.js +57 -0
- package/dist/types/instance.test.js.map +1 -0
- package/dist/types/profile.d.ts +50 -0
- package/dist/types/profile.d.ts.map +1 -0
- package/dist/types/profile.js +8 -0
- package/dist/types/profile.js.map +1 -0
- package/dist/types/profile.test.d.ts +2 -0
- package/dist/types/profile.test.d.ts.map +1 -0
- package/dist/types/profile.test.js +103 -0
- package/dist/types/profile.test.js.map +1 -0
- package/package.json +20 -8
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import type { Protocol } from "devtools-protocol";
|
|
2
|
+
type EventListener = (params: unknown) => void;
|
|
3
|
+
/**
|
|
4
|
+
* Chrome DevTools Protocol client.
|
|
5
|
+
*
|
|
6
|
+
* Communicates with a CDP-enabled process over WebSocket, providing:
|
|
7
|
+
* - Request/response correlation via incrementing message IDs
|
|
8
|
+
* - Event subscription
|
|
9
|
+
* - Convenience helpers for `Runtime.evaluate` and `Page.navigate`
|
|
10
|
+
* - Automatic reconnection with exponential backoff
|
|
11
|
+
*/
|
|
12
|
+
export declare class CDPClient {
|
|
13
|
+
private readonly port;
|
|
14
|
+
private readonly host;
|
|
15
|
+
private readonly timeout;
|
|
16
|
+
private ws;
|
|
17
|
+
private nextId;
|
|
18
|
+
private readonly pending;
|
|
19
|
+
private readonly listeners;
|
|
20
|
+
private connected;
|
|
21
|
+
private targetId;
|
|
22
|
+
private reconnecting;
|
|
23
|
+
constructor(port: number, options?: {
|
|
24
|
+
host?: string;
|
|
25
|
+
timeout?: number;
|
|
26
|
+
});
|
|
27
|
+
/**
|
|
28
|
+
* Open a WebSocket connection to a CDP target.
|
|
29
|
+
*
|
|
30
|
+
* @param targetId - Specific target ID to connect to. When omitted the
|
|
31
|
+
* first `page` target is used.
|
|
32
|
+
*/
|
|
33
|
+
connect(targetId?: string): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Close the connection. Pending requests are rejected.
|
|
36
|
+
*/
|
|
37
|
+
disconnect(): void;
|
|
38
|
+
/**
|
|
39
|
+
* Send a raw CDP method call and wait for the response.
|
|
40
|
+
*
|
|
41
|
+
* @param method - CDP method name, e.g. `"Runtime.evaluate"`.
|
|
42
|
+
* @param params - Method parameters.
|
|
43
|
+
* @returns The `result` field from the CDP response.
|
|
44
|
+
*/
|
|
45
|
+
send(method: string, params?: Record<string, unknown>): Promise<unknown>;
|
|
46
|
+
/**
|
|
47
|
+
* Evaluate a JavaScript expression via `Runtime.evaluate`.
|
|
48
|
+
*
|
|
49
|
+
* @param expression - JavaScript source to evaluate.
|
|
50
|
+
* @param awaitPromise - Whether to await a Promise result (default `false`).
|
|
51
|
+
* @returns The deserialized value from the remote context.
|
|
52
|
+
*/
|
|
53
|
+
evaluate<T = unknown>(expression: string, awaitPromise?: boolean): Promise<T>;
|
|
54
|
+
/**
|
|
55
|
+
* Navigate the target to the given URL via `Page.navigate`.
|
|
56
|
+
*/
|
|
57
|
+
navigate(url: string): Promise<Protocol.Page.NavigateResponse>;
|
|
58
|
+
/**
|
|
59
|
+
* Subscribe to a CDP event.
|
|
60
|
+
*
|
|
61
|
+
* @param event - Event name, e.g. `"Page.loadEventFired"`.
|
|
62
|
+
* @param listener - Callback receiving the event parameters.
|
|
63
|
+
*/
|
|
64
|
+
on(event: string, listener: EventListener): void;
|
|
65
|
+
/**
|
|
66
|
+
* Remove a previously registered event listener.
|
|
67
|
+
*/
|
|
68
|
+
off(event: string, listener: EventListener): void;
|
|
69
|
+
/**
|
|
70
|
+
* Wait for a single occurrence of a CDP event.
|
|
71
|
+
*
|
|
72
|
+
* @param event - Event name.
|
|
73
|
+
* @param timeout - Maximum wait time in ms (default: client timeout).
|
|
74
|
+
*/
|
|
75
|
+
waitForEvent(event: string, timeout?: number): Promise<unknown>;
|
|
76
|
+
/** Whether the client currently has an open connection. */
|
|
77
|
+
get isConnected(): boolean;
|
|
78
|
+
/**
|
|
79
|
+
* Resolve a `ws://` URL for the given target ID, or the first page target.
|
|
80
|
+
*/
|
|
81
|
+
private resolveWebSocketUrl;
|
|
82
|
+
/**
|
|
83
|
+
* Open a WebSocket and wire up message handling.
|
|
84
|
+
*/
|
|
85
|
+
private openWebSocket;
|
|
86
|
+
/**
|
|
87
|
+
* Handle an incoming WebSocket message — either a method response or an event.
|
|
88
|
+
*/
|
|
89
|
+
private handleMessage;
|
|
90
|
+
/**
|
|
91
|
+
* Attempt to reconnect with exponential backoff.
|
|
92
|
+
*/
|
|
93
|
+
private attemptReconnect;
|
|
94
|
+
/**
|
|
95
|
+
* Reject all pending requests (used on disconnect / close).
|
|
96
|
+
*/
|
|
97
|
+
private rejectAllPending;
|
|
98
|
+
}
|
|
99
|
+
export {};
|
|
100
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/cdp/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAwBlD,KAAK,aAAa,GAAG,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;AAE/C;;;;;;;;GAQG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IAEjC,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqC;IAC7D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyC;IAEnE,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,YAAY,CAAS;gBAG3B,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;IAO/C;;;;;OAKG;IACG,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK/C;;OAEG;IACH,UAAU,IAAI,IAAI;IAUlB;;;;;;OAMG;IACG,IAAI,CACR,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,OAAO,CAAC;IAoBnB;;;;;;OAMG;IACG,QAAQ,CAAC,CAAC,GAAG,OAAO,EACxB,UAAU,EAAE,MAAM,EAClB,YAAY,UAAQ,GACnB,OAAO,CAAC,CAAC,CAAC;IAqBb;;OAEG;IACG,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC;IAMpE;;;;;OAKG;IACH,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;IAShD;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;IAIjD;;;;;OAKG;IACG,YAAY,CAChB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC;IAmBnB,2DAA2D;IAC3D,IAAI,WAAW,IAAI,OAAO,CAEzB;IAMD;;OAEG;YACW,mBAAmB;IA8BjC;;OAEG;IACH,OAAO,CAAC,aAAa;IA2CrB;;OAEG;IACH,OAAO,CAAC,aAAa;IAmCrB;;OAEG;YACW,gBAAgB;IAsB9B;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAOzB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.integration.test.d.ts","sourceRoot":"","sources":["../../src/cdp/client.integration.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { afterAll, afterEach, beforeAll, describe, expect, it } from "vitest";
|
|
2
|
+
import { CDPClient } from "./client.js";
|
|
3
|
+
import { CDPEvaluationError } from "./errors.js";
|
|
4
|
+
import { launchChromium, } from "./testing/launch-chromium.js";
|
|
5
|
+
describe("CDPClient (integration)", () => {
|
|
6
|
+
let chromium;
|
|
7
|
+
let client;
|
|
8
|
+
beforeAll(async () => {
|
|
9
|
+
chromium = await launchChromium();
|
|
10
|
+
}, 30_000);
|
|
11
|
+
afterAll(async () => {
|
|
12
|
+
await chromium.close();
|
|
13
|
+
});
|
|
14
|
+
afterEach(() => {
|
|
15
|
+
client.disconnect();
|
|
16
|
+
});
|
|
17
|
+
describe("connect", () => {
|
|
18
|
+
it("should connect to a real Chromium page target", async () => {
|
|
19
|
+
client = new CDPClient(chromium.port);
|
|
20
|
+
await client.connect();
|
|
21
|
+
expect(client.isConnected).toBe(true);
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
describe("evaluate", () => {
|
|
25
|
+
it("should evaluate a JavaScript expression", async () => {
|
|
26
|
+
client = new CDPClient(chromium.port);
|
|
27
|
+
await client.connect();
|
|
28
|
+
const result = await client.evaluate("2 + 2");
|
|
29
|
+
expect(result).toBe(4);
|
|
30
|
+
});
|
|
31
|
+
it("should evaluate expressions returning objects", async () => {
|
|
32
|
+
client = new CDPClient(chromium.port);
|
|
33
|
+
await client.connect();
|
|
34
|
+
const result = await client.evaluate("({ a: 1, b: 'hello' })");
|
|
35
|
+
expect(result).toEqual({ a: 1, b: "hello" });
|
|
36
|
+
});
|
|
37
|
+
it("should throw CDPEvaluationError on runtime exception", async () => {
|
|
38
|
+
client = new CDPClient(chromium.port);
|
|
39
|
+
await client.connect();
|
|
40
|
+
await expect(client.evaluate("throw new Error('test error')")).rejects.toThrow(CDPEvaluationError);
|
|
41
|
+
});
|
|
42
|
+
it("should await promise results when awaitPromise is true", async () => {
|
|
43
|
+
client = new CDPClient(chromium.port);
|
|
44
|
+
await client.connect();
|
|
45
|
+
const result = await client.evaluate("Promise.resolve(42)", true);
|
|
46
|
+
expect(result).toBe(42);
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
describe("navigate", () => {
|
|
50
|
+
it("should navigate to a data URL", async () => {
|
|
51
|
+
client = new CDPClient(chromium.port);
|
|
52
|
+
await client.connect();
|
|
53
|
+
const response = await client.navigate("data:text/html,<h1>Integration Test</h1>");
|
|
54
|
+
expect(response.frameId).toEqual(expect.any(String));
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
describe("events", () => {
|
|
58
|
+
it("should receive CDP events from the browser", async () => {
|
|
59
|
+
client = new CDPClient(chromium.port);
|
|
60
|
+
await client.connect();
|
|
61
|
+
// Enable Page domain to receive events
|
|
62
|
+
await client.send("Page.enable");
|
|
63
|
+
const eventPromise = client.waitForEvent("Page.loadEventFired", 10_000);
|
|
64
|
+
await client.navigate("data:text/html,<h1>Event Test</h1>");
|
|
65
|
+
const params = (await eventPromise);
|
|
66
|
+
expect(params.timestamp).toEqual(expect.any(Number));
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
//# sourceMappingURL=client.integration.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.integration.test.js","sourceRoot":"","sources":["../../src/cdp/client.integration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
import { CDPConnectionError, CDPEvaluationError, CDPTimeoutError, } from "./errors.js";
|
|
2
|
+
import { discoverTargets } from "./discovery.js";
|
|
3
|
+
/** Default timeout for CDP requests (ms). */
|
|
4
|
+
const DEFAULT_TIMEOUT = 30_000;
|
|
5
|
+
/** Maximum reconnection attempts before giving up. */
|
|
6
|
+
const MAX_RECONNECT_ATTEMPTS = 5;
|
|
7
|
+
/** Base delay for exponential backoff (ms). */
|
|
8
|
+
const RECONNECT_BASE_DELAY = 500;
|
|
9
|
+
/**
|
|
10
|
+
* Chrome DevTools Protocol client.
|
|
11
|
+
*
|
|
12
|
+
* Communicates with a CDP-enabled process over WebSocket, providing:
|
|
13
|
+
* - Request/response correlation via incrementing message IDs
|
|
14
|
+
* - Event subscription
|
|
15
|
+
* - Convenience helpers for `Runtime.evaluate` and `Page.navigate`
|
|
16
|
+
* - Automatic reconnection with exponential backoff
|
|
17
|
+
*/
|
|
18
|
+
export class CDPClient {
|
|
19
|
+
port;
|
|
20
|
+
host;
|
|
21
|
+
timeout;
|
|
22
|
+
ws = null;
|
|
23
|
+
nextId = 1;
|
|
24
|
+
pending = new Map();
|
|
25
|
+
listeners = new Map();
|
|
26
|
+
connected = false;
|
|
27
|
+
targetId = null;
|
|
28
|
+
reconnecting = false;
|
|
29
|
+
constructor(port, options) {
|
|
30
|
+
this.port = port;
|
|
31
|
+
this.host = options?.host ?? "127.0.0.1";
|
|
32
|
+
this.timeout = options?.timeout ?? DEFAULT_TIMEOUT;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Open a WebSocket connection to a CDP target.
|
|
36
|
+
*
|
|
37
|
+
* @param targetId - Specific target ID to connect to. When omitted the
|
|
38
|
+
* first `page` target is used.
|
|
39
|
+
*/
|
|
40
|
+
async connect(targetId) {
|
|
41
|
+
const wsUrl = await this.resolveWebSocketUrl(targetId);
|
|
42
|
+
await this.openWebSocket(wsUrl);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Close the connection. Pending requests are rejected.
|
|
46
|
+
*/
|
|
47
|
+
disconnect() {
|
|
48
|
+
this.connected = false;
|
|
49
|
+
this.rejectAllPending(new CDPConnectionError("Client disconnected"));
|
|
50
|
+
if (this.ws) {
|
|
51
|
+
this.ws.close();
|
|
52
|
+
this.ws = null;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Send a raw CDP method call and wait for the response.
|
|
57
|
+
*
|
|
58
|
+
* @param method - CDP method name, e.g. `"Runtime.evaluate"`.
|
|
59
|
+
* @param params - Method parameters.
|
|
60
|
+
* @returns The `result` field from the CDP response.
|
|
61
|
+
*/
|
|
62
|
+
async send(method, params) {
|
|
63
|
+
const ws = this.ws;
|
|
64
|
+
if (!ws || !this.connected) {
|
|
65
|
+
throw new CDPConnectionError("Not connected");
|
|
66
|
+
}
|
|
67
|
+
const id = this.nextId++;
|
|
68
|
+
const message = JSON.stringify({ id, method, params });
|
|
69
|
+
return new Promise((resolve, reject) => {
|
|
70
|
+
const timer = setTimeout(() => {
|
|
71
|
+
this.pending.delete(id);
|
|
72
|
+
reject(new CDPTimeoutError(`Timed out waiting for response to ${method} (id=${id.toString()})`));
|
|
73
|
+
}, this.timeout);
|
|
74
|
+
this.pending.set(id, { resolve, reject, timer });
|
|
75
|
+
ws.send(message);
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Evaluate a JavaScript expression via `Runtime.evaluate`.
|
|
80
|
+
*
|
|
81
|
+
* @param expression - JavaScript source to evaluate.
|
|
82
|
+
* @param awaitPromise - Whether to await a Promise result (default `false`).
|
|
83
|
+
* @returns The deserialized value from the remote context.
|
|
84
|
+
*/
|
|
85
|
+
async evaluate(expression, awaitPromise = false) {
|
|
86
|
+
const result = (await this.send("Runtime.evaluate", {
|
|
87
|
+
expression,
|
|
88
|
+
awaitPromise,
|
|
89
|
+
returnByValue: true,
|
|
90
|
+
}));
|
|
91
|
+
if (result.exceptionDetails) {
|
|
92
|
+
const desc = result.exceptionDetails.exception?.description ??
|
|
93
|
+
result.exceptionDetails.text ??
|
|
94
|
+
"Unknown evaluation error";
|
|
95
|
+
throw new CDPEvaluationError(desc);
|
|
96
|
+
}
|
|
97
|
+
return result.result?.value;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Navigate the target to the given URL via `Page.navigate`.
|
|
101
|
+
*/
|
|
102
|
+
async navigate(url) {
|
|
103
|
+
return (await this.send("Page.navigate", {
|
|
104
|
+
url,
|
|
105
|
+
}));
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Subscribe to a CDP event.
|
|
109
|
+
*
|
|
110
|
+
* @param event - Event name, e.g. `"Page.loadEventFired"`.
|
|
111
|
+
* @param listener - Callback receiving the event parameters.
|
|
112
|
+
*/
|
|
113
|
+
on(event, listener) {
|
|
114
|
+
let set = this.listeners.get(event);
|
|
115
|
+
if (!set) {
|
|
116
|
+
set = new Set();
|
|
117
|
+
this.listeners.set(event, set);
|
|
118
|
+
}
|
|
119
|
+
set.add(listener);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Remove a previously registered event listener.
|
|
123
|
+
*/
|
|
124
|
+
off(event, listener) {
|
|
125
|
+
this.listeners.get(event)?.delete(listener);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Wait for a single occurrence of a CDP event.
|
|
129
|
+
*
|
|
130
|
+
* @param event - Event name.
|
|
131
|
+
* @param timeout - Maximum wait time in ms (default: client timeout).
|
|
132
|
+
*/
|
|
133
|
+
async waitForEvent(event, timeout) {
|
|
134
|
+
const ms = timeout ?? this.timeout;
|
|
135
|
+
return new Promise((resolve, reject) => {
|
|
136
|
+
const timer = setTimeout(() => {
|
|
137
|
+
this.off(event, handler);
|
|
138
|
+
reject(new CDPTimeoutError(`Timed out waiting for event ${event}`));
|
|
139
|
+
}, ms);
|
|
140
|
+
const handler = (params) => {
|
|
141
|
+
clearTimeout(timer);
|
|
142
|
+
this.off(event, handler);
|
|
143
|
+
resolve(params);
|
|
144
|
+
};
|
|
145
|
+
this.on(event, handler);
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
/** Whether the client currently has an open connection. */
|
|
149
|
+
get isConnected() {
|
|
150
|
+
return this.connected;
|
|
151
|
+
}
|
|
152
|
+
// ---------------------------------------------------------------------------
|
|
153
|
+
// Private
|
|
154
|
+
// ---------------------------------------------------------------------------
|
|
155
|
+
/**
|
|
156
|
+
* Resolve a `ws://` URL for the given target ID, or the first page target.
|
|
157
|
+
*/
|
|
158
|
+
async resolveWebSocketUrl(targetId) {
|
|
159
|
+
const targets = await discoverTargets(this.port, this.host);
|
|
160
|
+
let target;
|
|
161
|
+
if (targetId) {
|
|
162
|
+
target = targets.find((t) => t.id === targetId);
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
target = targets.find((t) => t.type === "page");
|
|
166
|
+
}
|
|
167
|
+
if (!target) {
|
|
168
|
+
throw new CDPConnectionError(targetId
|
|
169
|
+
? `Target ${targetId} not found among ${targets.length.toString()} targets`
|
|
170
|
+
: `No page target found among ${targets.length.toString()} targets`);
|
|
171
|
+
}
|
|
172
|
+
if (!target.webSocketDebuggerUrl) {
|
|
173
|
+
throw new CDPConnectionError(`Target ${target.id} has no webSocketDebuggerUrl (another debugger may be attached)`);
|
|
174
|
+
}
|
|
175
|
+
this.targetId = target.id;
|
|
176
|
+
return target.webSocketDebuggerUrl;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Open a WebSocket and wire up message handling.
|
|
180
|
+
*/
|
|
181
|
+
openWebSocket(url) {
|
|
182
|
+
return new Promise((resolve, reject) => {
|
|
183
|
+
const ws = new WebSocket(url);
|
|
184
|
+
let settled = false;
|
|
185
|
+
ws.addEventListener("open", () => {
|
|
186
|
+
if (settled)
|
|
187
|
+
return;
|
|
188
|
+
settled = true;
|
|
189
|
+
this.ws = ws;
|
|
190
|
+
this.connected = true;
|
|
191
|
+
resolve();
|
|
192
|
+
});
|
|
193
|
+
ws.addEventListener("message", (event) => {
|
|
194
|
+
const data = event.data;
|
|
195
|
+
this.handleMessage(typeof data === "string" ? data : String(data));
|
|
196
|
+
});
|
|
197
|
+
ws.addEventListener("close", () => {
|
|
198
|
+
const wasConnected = this.connected;
|
|
199
|
+
this.connected = false;
|
|
200
|
+
this.rejectAllPending(new CDPConnectionError("WebSocket closed"));
|
|
201
|
+
if (!settled) {
|
|
202
|
+
settled = true;
|
|
203
|
+
reject(new CDPConnectionError(`WebSocket closed before opening to ${url}`));
|
|
204
|
+
}
|
|
205
|
+
else if (wasConnected) {
|
|
206
|
+
void this.attemptReconnect();
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
ws.addEventListener("error", () => {
|
|
210
|
+
if (!settled) {
|
|
211
|
+
settled = true;
|
|
212
|
+
reject(new CDPConnectionError(`WebSocket connection failed to ${url}`));
|
|
213
|
+
}
|
|
214
|
+
});
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Handle an incoming WebSocket message — either a method response or an event.
|
|
219
|
+
*/
|
|
220
|
+
handleMessage(raw) {
|
|
221
|
+
let msg;
|
|
222
|
+
try {
|
|
223
|
+
msg = JSON.parse(raw);
|
|
224
|
+
}
|
|
225
|
+
catch {
|
|
226
|
+
return; // ignore malformed frames
|
|
227
|
+
}
|
|
228
|
+
// Response to a pending request
|
|
229
|
+
if (msg.id !== undefined) {
|
|
230
|
+
const pending = this.pending.get(msg.id);
|
|
231
|
+
if (pending) {
|
|
232
|
+
this.pending.delete(msg.id);
|
|
233
|
+
clearTimeout(pending.timer);
|
|
234
|
+
if (msg.error) {
|
|
235
|
+
pending.reject(new CDPEvaluationError(msg.error.message));
|
|
236
|
+
}
|
|
237
|
+
else {
|
|
238
|
+
pending.resolve(msg.result);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
// Event
|
|
244
|
+
if (msg.method) {
|
|
245
|
+
const set = this.listeners.get(msg.method);
|
|
246
|
+
if (set) {
|
|
247
|
+
for (const listener of set) {
|
|
248
|
+
listener(msg.params);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Attempt to reconnect with exponential backoff.
|
|
255
|
+
*/
|
|
256
|
+
async attemptReconnect() {
|
|
257
|
+
if (this.reconnecting || !this.targetId) {
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
260
|
+
this.reconnecting = true;
|
|
261
|
+
for (let attempt = 0; attempt < MAX_RECONNECT_ATTEMPTS; attempt++) {
|
|
262
|
+
const delay = RECONNECT_BASE_DELAY * 2 ** attempt;
|
|
263
|
+
await new Promise((r) => setTimeout(r, delay));
|
|
264
|
+
try {
|
|
265
|
+
await this.connect(this.targetId ?? undefined);
|
|
266
|
+
this.reconnecting = false;
|
|
267
|
+
return;
|
|
268
|
+
}
|
|
269
|
+
catch {
|
|
270
|
+
// continue to next attempt
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
this.reconnecting = false;
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Reject all pending requests (used on disconnect / close).
|
|
277
|
+
*/
|
|
278
|
+
rejectAllPending(error) {
|
|
279
|
+
for (const [id, pending] of this.pending) {
|
|
280
|
+
clearTimeout(pending.timer);
|
|
281
|
+
pending.reject(error);
|
|
282
|
+
this.pending.delete(id);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/cdp/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.test.d.ts","sourceRoot":"","sources":["../../src/cdp/client.test.ts"],"names":[],"mappings":""}
|