craftdriver 0.0.3 → 0.2.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/CHANGELOG.md +104 -0
- package/README.md +186 -10
- package/bin/craftdriver.mjs +26 -0
- package/dist/cli/client.d.ts +17 -0
- package/dist/cli/client.d.ts.map +1 -0
- package/dist/cli/client.js +88 -0
- package/dist/cli/client.js.map +1 -0
- package/dist/cli/daemon.d.ts +15 -0
- package/dist/cli/daemon.d.ts.map +1 -0
- package/dist/cli/daemon.js +145 -0
- package/dist/cli/daemon.js.map +1 -0
- package/dist/cli/defaults.d.ts +10 -0
- package/dist/cli/defaults.d.ts.map +1 -0
- package/dist/cli/defaults.js +42 -0
- package/dist/cli/defaults.js.map +1 -0
- package/dist/cli/dispatcher.d.ts +28 -0
- package/dist/cli/dispatcher.d.ts.map +1 -0
- package/dist/cli/dispatcher.js +319 -0
- package/dist/cli/dispatcher.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +404 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init.d.ts +24 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +192 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/mcp/artifacts.d.ts +43 -0
- package/dist/cli/mcp/artifacts.d.ts.map +1 -0
- package/dist/cli/mcp/artifacts.js +104 -0
- package/dist/cli/mcp/artifacts.js.map +1 -0
- package/dist/cli/mcp/server.d.ts +34 -0
- package/dist/cli/mcp/server.d.ts.map +1 -0
- package/dist/cli/mcp/server.js +214 -0
- package/dist/cli/mcp/server.js.map +1 -0
- package/dist/cli/mcp/tools.d.ts +34 -0
- package/dist/cli/mcp/tools.d.ts.map +1 -0
- package/dist/cli/mcp/tools.js +236 -0
- package/dist/cli/mcp/tools.js.map +1 -0
- package/dist/cli/parseArgs.d.ts +37 -0
- package/dist/cli/parseArgs.d.ts.map +1 -0
- package/dist/cli/parseArgs.js +215 -0
- package/dist/cli/parseArgs.js.map +1 -0
- package/dist/cli/protocol.d.ts +34 -0
- package/dist/cli/protocol.d.ts.map +1 -0
- package/dist/cli/protocol.js +2 -0
- package/dist/cli/protocol.js.map +1 -0
- package/dist/cli/selector.d.ts +29 -0
- package/dist/cli/selector.d.ts.map +1 -0
- package/dist/cli/selector.js +100 -0
- package/dist/cli/selector.js.map +1 -0
- package/dist/cli/snapshot.d.ts +48 -0
- package/dist/cli/snapshot.d.ts.map +1 -0
- package/dist/cli/snapshot.js +179 -0
- package/dist/cli/snapshot.js.map +1 -0
- package/dist/index.d.ts +14 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/a11y.d.ts +81 -0
- package/dist/lib/a11y.d.ts.map +1 -0
- package/dist/lib/a11y.js +171 -0
- package/dist/lib/a11y.js.map +1 -0
- package/dist/lib/bidi/connection.d.ts +62 -0
- package/dist/lib/bidi/connection.d.ts.map +1 -0
- package/dist/lib/bidi/connection.js +227 -0
- package/dist/lib/bidi/connection.js.map +1 -0
- package/dist/lib/bidi/index.d.ts +101 -0
- package/dist/lib/bidi/index.d.ts.map +1 -0
- package/dist/lib/bidi/index.js +163 -0
- package/dist/lib/bidi/index.js.map +1 -0
- package/dist/lib/bidi/logs.d.ts +104 -0
- package/dist/lib/bidi/logs.d.ts.map +1 -0
- package/dist/lib/bidi/logs.js +273 -0
- package/dist/lib/bidi/logs.js.map +1 -0
- package/dist/lib/bidi/network.d.ts +165 -0
- package/dist/lib/bidi/network.d.ts.map +1 -0
- package/dist/lib/bidi/network.js +477 -0
- package/dist/lib/bidi/network.js.map +1 -0
- package/dist/lib/bidi/storage.d.ts +83 -0
- package/dist/lib/bidi/storage.d.ts.map +1 -0
- package/dist/lib/bidi/storage.js +299 -0
- package/dist/lib/bidi/storage.js.map +1 -0
- package/dist/lib/bidi/types.d.ts +323 -0
- package/dist/lib/bidi/types.d.ts.map +1 -0
- package/dist/lib/bidi/types.js +6 -0
- package/dist/lib/bidi/types.js.map +1 -0
- package/dist/lib/browser.d.ts +776 -13
- package/dist/lib/browser.d.ts.map +1 -1
- package/dist/lib/browser.js +1547 -70
- package/dist/lib/browser.js.map +1 -1
- package/dist/lib/browserContext.d.ts +486 -0
- package/dist/lib/browserContext.d.ts.map +1 -0
- package/dist/lib/browserContext.js +937 -0
- package/dist/lib/browserContext.js.map +1 -0
- package/dist/lib/builder.d.ts +3 -0
- package/dist/lib/builder.d.ts.map +1 -1
- package/dist/lib/builder.js +31 -4
- package/dist/lib/builder.js.map +1 -1
- package/dist/lib/by.d.ts +18 -2
- package/dist/lib/by.d.ts.map +1 -1
- package/dist/lib/by.js +20 -2
- package/dist/lib/by.js.map +1 -1
- package/dist/lib/chrome.d.ts +13 -1
- package/dist/lib/chrome.d.ts.map +1 -1
- package/dist/lib/chrome.js +13 -17
- package/dist/lib/chrome.js.map +1 -1
- package/dist/lib/clock.d.ts +115 -0
- package/dist/lib/clock.d.ts.map +1 -0
- package/dist/lib/clock.js +407 -0
- package/dist/lib/clock.js.map +1 -0
- package/dist/lib/driver.d.ts +45 -0
- package/dist/lib/driver.d.ts.map +1 -1
- package/dist/lib/driver.js +129 -1
- package/dist/lib/driver.js.map +1 -1
- package/dist/lib/driverManager.d.ts +25 -0
- package/dist/lib/driverManager.d.ts.map +1 -0
- package/dist/lib/driverManager.js +399 -0
- package/dist/lib/driverManager.js.map +1 -0
- package/dist/lib/elementHandle.d.ts +69 -2
- package/dist/lib/elementHandle.d.ts.map +1 -1
- package/dist/lib/elementHandle.js +215 -40
- package/dist/lib/elementHandle.js.map +1 -1
- package/dist/lib/errors.d.ts +71 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +73 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/expect.d.ts +6 -1
- package/dist/lib/expect.d.ts.map +1 -1
- package/dist/lib/expect.js +55 -37
- package/dist/lib/expect.js.map +1 -1
- package/dist/lib/firefox.d.ts +18 -0
- package/dist/lib/firefox.d.ts.map +1 -0
- package/dist/lib/firefox.js +33 -0
- package/dist/lib/firefox.js.map +1 -0
- package/dist/lib/frame.d.ts +57 -0
- package/dist/lib/frame.d.ts.map +1 -0
- package/dist/lib/frame.js +277 -0
- package/dist/lib/frame.js.map +1 -0
- package/dist/lib/keyboard.d.ts +1 -1
- package/dist/lib/keyboard.d.ts.map +1 -1
- package/dist/lib/keyboard.js +1 -1
- package/dist/lib/keyboard.js.map +1 -1
- package/dist/lib/locator.d.ts +71 -2
- package/dist/lib/locator.d.ts.map +1 -1
- package/dist/lib/locator.js +289 -31
- package/dist/lib/locator.js.map +1 -1
- package/dist/lib/mouse.d.ts +1 -1
- package/dist/lib/mouse.d.ts.map +1 -1
- package/dist/lib/mouse.js +1 -1
- package/dist/lib/mouse.js.map +1 -1
- package/dist/lib/page.d.ts +107 -0
- package/dist/lib/page.d.ts.map +1 -0
- package/dist/lib/page.js +388 -0
- package/dist/lib/page.js.map +1 -0
- package/dist/lib/tracing.d.ts +128 -0
- package/dist/lib/tracing.d.ts.map +1 -0
- package/dist/lib/tracing.js +272 -0
- package/dist/lib/tracing.js.map +1 -0
- package/dist/lib/wait.d.ts.map +1 -1
- package/dist/lib/wait.js +14 -1
- package/dist/lib/wait.js.map +1 -1
- package/dist/lib/webelement.d.ts +2 -0
- package/dist/lib/webelement.d.ts.map +1 -1
- package/dist/lib/webelement.js +18 -0
- package/dist/lib/webelement.js.map +1 -1
- package/docs/accessibility.md +177 -0
- package/docs/api-reference.md +71 -0
- package/docs/assertions.md +182 -0
- package/docs/bidi-features.md +462 -0
- package/docs/browser-api.md +673 -0
- package/docs/browser-context.md +522 -0
- package/docs/cli.md +233 -0
- package/docs/clock.md +245 -0
- package/docs/dialogs.md +143 -0
- package/docs/driver-configuration.md +64 -0
- package/docs/element-api.md +219 -0
- package/docs/emulation.md +155 -0
- package/docs/error-codes.md +67 -0
- package/docs/getting-started.md +168 -0
- package/docs/keyboard-mouse.md +250 -0
- package/docs/mcp.md +250 -0
- package/docs/mobile-emulation.md +194 -0
- package/docs/screenshots.md +146 -0
- package/docs/selectors.md +382 -0
- package/docs/session-management.md +229 -0
- package/docs/tracing.md +282 -0
- package/package.json +25 -5
- package/skills/craftdriver/SKILL.md +84 -0
- package/skills/craftdriver/cheatsheet.md +194 -0
- package/skills/craftdriver/cli.md +104 -0
- package/skills/craftdriver/patterns.md +139 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"a11y.js","sourceRoot":"","sources":["../../src/lib/a11y.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WebDriver BiDi WebSocket connection manager
|
|
3
|
+
* Handles bidirectional communication with the browser
|
|
4
|
+
*/
|
|
5
|
+
export type EventHandler = (params: Record<string, unknown>) => void;
|
|
6
|
+
export interface ConnectionOptions {
|
|
7
|
+
/** Connection timeout in ms (default: 30000) */
|
|
8
|
+
timeout?: number;
|
|
9
|
+
/** Auto-reconnect on disconnect */
|
|
10
|
+
autoReconnect?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export declare class BiDiConnection {
|
|
13
|
+
private ws;
|
|
14
|
+
private messageId;
|
|
15
|
+
private pending;
|
|
16
|
+
private eventHandlers;
|
|
17
|
+
private connected;
|
|
18
|
+
private wsUrl;
|
|
19
|
+
private options;
|
|
20
|
+
constructor(options?: ConnectionOptions);
|
|
21
|
+
/**
|
|
22
|
+
* Connect to WebDriver BiDi WebSocket endpoint
|
|
23
|
+
*/
|
|
24
|
+
connect(wsUrl: string): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Check if connected to BiDi endpoint
|
|
27
|
+
*/
|
|
28
|
+
isConnected(): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Send a BiDi command and wait for response
|
|
31
|
+
*/
|
|
32
|
+
send<T = unknown>(method: string, params?: Record<string, unknown>): Promise<T>;
|
|
33
|
+
/**
|
|
34
|
+
* Subscribe to BiDi events
|
|
35
|
+
*/
|
|
36
|
+
subscribe(events: string[], contexts?: string[]): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Unsubscribe from BiDi events
|
|
39
|
+
*/
|
|
40
|
+
unsubscribe(events: string[], contexts?: string[]): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* Add event listener for specific BiDi event
|
|
43
|
+
*/
|
|
44
|
+
on(event: string, handler: EventHandler): () => void;
|
|
45
|
+
/**
|
|
46
|
+
* Remove event listener
|
|
47
|
+
*/
|
|
48
|
+
off(event: string, handler: EventHandler): void;
|
|
49
|
+
/**
|
|
50
|
+
* Wait for a specific event (one-time)
|
|
51
|
+
*/
|
|
52
|
+
once<T = Record<string, unknown>>(event: string, predicate?: (params: Record<string, unknown>) => boolean, timeout?: number): Promise<T>;
|
|
53
|
+
/**
|
|
54
|
+
* Close the connection
|
|
55
|
+
*/
|
|
56
|
+
close(): Promise<void>;
|
|
57
|
+
private handleMessage;
|
|
58
|
+
private handleResponse;
|
|
59
|
+
private handleEvent;
|
|
60
|
+
private rejectAllPending;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=connection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../../src/lib/bidi/connection.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,MAAM,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;AAErE,MAAM,WAAW,iBAAiB;IAChC,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mCAAmC;IACnC,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,OAAO,CAGX;IACJ,OAAO,CAAC,aAAa,CAAwC;IAC7D,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,OAAO,CAAoB;gBAEvB,OAAO,GAAE,iBAAsB;IAO3C;;OAEG;IACG,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA6C3C;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACG,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IA6BzF;;OAEG;IACG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQrE;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQvE;;OAEG;IACH,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,MAAM,IAAI;IAYpD;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI;IAI/C;;OAEG;IACH,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,KAAK,EAAE,MAAM,EACb,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,EACxD,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,CAAC,CAAC;IAmBb;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAS5B,OAAO,CAAC,aAAa;IAkBrB,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,WAAW;IAyBnB,OAAO,CAAC,gBAAgB;CAMzB"}
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WebDriver BiDi WebSocket connection manager
|
|
3
|
+
* Handles bidirectional communication with the browser
|
|
4
|
+
*/
|
|
5
|
+
import { WebSocket } from 'ws';
|
|
6
|
+
export class BiDiConnection {
|
|
7
|
+
ws = null;
|
|
8
|
+
messageId = 0;
|
|
9
|
+
pending = new Map();
|
|
10
|
+
eventHandlers = new Map();
|
|
11
|
+
connected = false;
|
|
12
|
+
wsUrl = '';
|
|
13
|
+
options;
|
|
14
|
+
constructor(options = {}) {
|
|
15
|
+
this.options = {
|
|
16
|
+
timeout: options.timeout ?? 30000,
|
|
17
|
+
autoReconnect: options.autoReconnect ?? false,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Connect to WebDriver BiDi WebSocket endpoint
|
|
22
|
+
*/
|
|
23
|
+
async connect(wsUrl) {
|
|
24
|
+
if (this.connected && this.ws) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
this.wsUrl = wsUrl;
|
|
28
|
+
return new Promise((resolve, reject) => {
|
|
29
|
+
const timeout = setTimeout(() => {
|
|
30
|
+
reject(new Error(`BiDi connection timeout after ${this.options.timeout}ms`));
|
|
31
|
+
}, this.options.timeout);
|
|
32
|
+
try {
|
|
33
|
+
this.ws = new WebSocket(wsUrl);
|
|
34
|
+
this.ws.on('open', () => {
|
|
35
|
+
clearTimeout(timeout);
|
|
36
|
+
this.connected = true;
|
|
37
|
+
resolve();
|
|
38
|
+
});
|
|
39
|
+
this.ws.on('message', (data) => {
|
|
40
|
+
this.handleMessage(data.toString());
|
|
41
|
+
});
|
|
42
|
+
this.ws.on('close', () => {
|
|
43
|
+
this.connected = false;
|
|
44
|
+
this.rejectAllPending(new Error('WebSocket connection closed'));
|
|
45
|
+
if (this.options.autoReconnect && this.wsUrl) {
|
|
46
|
+
setTimeout(() => this.connect(this.wsUrl).catch(() => { }), 1000);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
this.ws.on('error', (err) => {
|
|
50
|
+
clearTimeout(timeout);
|
|
51
|
+
this.connected = false;
|
|
52
|
+
reject(err);
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
clearTimeout(timeout);
|
|
57
|
+
reject(err);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Check if connected to BiDi endpoint
|
|
63
|
+
*/
|
|
64
|
+
isConnected() {
|
|
65
|
+
return this.connected && this.ws?.readyState === WebSocket.OPEN;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Send a BiDi command and wait for response
|
|
69
|
+
*/
|
|
70
|
+
async send(method, params = {}) {
|
|
71
|
+
if (!this.isConnected()) {
|
|
72
|
+
throw new Error('BiDi connection not established');
|
|
73
|
+
}
|
|
74
|
+
const id = ++this.messageId;
|
|
75
|
+
const command = { id, method, params };
|
|
76
|
+
return new Promise((resolve, reject) => {
|
|
77
|
+
const timeout = setTimeout(() => {
|
|
78
|
+
this.pending.delete(id);
|
|
79
|
+
reject(new Error(`BiDi command timeout: ${method}`));
|
|
80
|
+
}, this.options.timeout);
|
|
81
|
+
this.pending.set(id, {
|
|
82
|
+
resolve: (value) => {
|
|
83
|
+
clearTimeout(timeout);
|
|
84
|
+
resolve(value);
|
|
85
|
+
},
|
|
86
|
+
reject: (err) => {
|
|
87
|
+
clearTimeout(timeout);
|
|
88
|
+
reject(err);
|
|
89
|
+
},
|
|
90
|
+
});
|
|
91
|
+
this.ws.send(JSON.stringify(command));
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Subscribe to BiDi events
|
|
96
|
+
*/
|
|
97
|
+
async subscribe(events, contexts) {
|
|
98
|
+
const params = { events };
|
|
99
|
+
if (contexts?.length) {
|
|
100
|
+
params.contexts = contexts;
|
|
101
|
+
}
|
|
102
|
+
await this.send('session.subscribe', params);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Unsubscribe from BiDi events
|
|
106
|
+
*/
|
|
107
|
+
async unsubscribe(events, contexts) {
|
|
108
|
+
const params = { events };
|
|
109
|
+
if (contexts?.length) {
|
|
110
|
+
params.contexts = contexts;
|
|
111
|
+
}
|
|
112
|
+
await this.send('session.unsubscribe', params);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Add event listener for specific BiDi event
|
|
116
|
+
*/
|
|
117
|
+
on(event, handler) {
|
|
118
|
+
if (!this.eventHandlers.has(event)) {
|
|
119
|
+
this.eventHandlers.set(event, new Set());
|
|
120
|
+
}
|
|
121
|
+
this.eventHandlers.get(event).add(handler);
|
|
122
|
+
// Return unsubscribe function
|
|
123
|
+
return () => {
|
|
124
|
+
this.eventHandlers.get(event)?.delete(handler);
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Remove event listener
|
|
129
|
+
*/
|
|
130
|
+
off(event, handler) {
|
|
131
|
+
this.eventHandlers.get(event)?.delete(handler);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Wait for a specific event (one-time)
|
|
135
|
+
*/
|
|
136
|
+
once(event, predicate, timeout) {
|
|
137
|
+
return new Promise((resolve, reject) => {
|
|
138
|
+
const timeoutId = timeout
|
|
139
|
+
? setTimeout(() => {
|
|
140
|
+
unsubscribe();
|
|
141
|
+
reject(new Error(`Timeout waiting for event: ${event}`));
|
|
142
|
+
}, timeout)
|
|
143
|
+
: null;
|
|
144
|
+
const unsubscribe = this.on(event, (params) => {
|
|
145
|
+
if (!predicate || predicate(params)) {
|
|
146
|
+
if (timeoutId)
|
|
147
|
+
clearTimeout(timeoutId);
|
|
148
|
+
unsubscribe();
|
|
149
|
+
resolve(params);
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Close the connection
|
|
156
|
+
*/
|
|
157
|
+
async close() {
|
|
158
|
+
if (this.ws) {
|
|
159
|
+
this.ws.close();
|
|
160
|
+
this.ws = null;
|
|
161
|
+
this.connected = false;
|
|
162
|
+
this.rejectAllPending(new Error('Connection closed'));
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
handleMessage(data) {
|
|
166
|
+
let message;
|
|
167
|
+
try {
|
|
168
|
+
message = JSON.parse(data);
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
console.error('Failed to parse BiDi message:', data);
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
if ('id' in message && message.id !== undefined) {
|
|
175
|
+
// Command response
|
|
176
|
+
this.handleResponse(message);
|
|
177
|
+
}
|
|
178
|
+
else if (message.type === 'event') {
|
|
179
|
+
// Event
|
|
180
|
+
this.handleEvent(message);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
handleResponse(response) {
|
|
184
|
+
const pending = this.pending.get(response.id);
|
|
185
|
+
if (!pending)
|
|
186
|
+
return;
|
|
187
|
+
this.pending.delete(response.id);
|
|
188
|
+
if (response.type === 'error') {
|
|
189
|
+
pending.reject(new Error(`BiDi error [${response.error}]: ${response.message}`));
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
pending.resolve(response.result);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
handleEvent(event) {
|
|
196
|
+
const handlers = this.eventHandlers.get(event.method);
|
|
197
|
+
if (handlers) {
|
|
198
|
+
for (const handler of handlers) {
|
|
199
|
+
try {
|
|
200
|
+
handler(event.params);
|
|
201
|
+
}
|
|
202
|
+
catch (err) {
|
|
203
|
+
console.error(`Error in BiDi event handler for ${event.method}:`, err);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
// Also emit to wildcard handlers
|
|
208
|
+
const wildcardHandlers = this.eventHandlers.get('*');
|
|
209
|
+
if (wildcardHandlers) {
|
|
210
|
+
for (const handler of wildcardHandlers) {
|
|
211
|
+
try {
|
|
212
|
+
handler({ method: event.method, ...event.params });
|
|
213
|
+
}
|
|
214
|
+
catch (err) {
|
|
215
|
+
console.error('Error in BiDi wildcard event handler:', err);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
rejectAllPending(error) {
|
|
221
|
+
for (const [, pending] of this.pending) {
|
|
222
|
+
pending.reject(error);
|
|
223
|
+
}
|
|
224
|
+
this.pending.clear();
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
//# sourceMappingURL=connection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../../src/lib/bidi/connection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BiDi Session Manager
|
|
3
|
+
* Central manager for BiDi features with Classic WebDriver fallback
|
|
4
|
+
*/
|
|
5
|
+
import { BiDiConnection } from './connection.js';
|
|
6
|
+
import { NetworkInterceptor } from './network.js';
|
|
7
|
+
import { LogMonitor } from './logs.js';
|
|
8
|
+
import { SessionStateManager, type StorageStateOptions } from './storage.js';
|
|
9
|
+
import type { Driver } from '../driver.js';
|
|
10
|
+
import type { SessionState } from './types.js';
|
|
11
|
+
export interface BiDiSessionOptions {
|
|
12
|
+
/** WebSocket URL for BiDi connection */
|
|
13
|
+
wsUrl?: string;
|
|
14
|
+
/** Auto-initialize BiDi features */
|
|
15
|
+
autoInitialize?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export declare class BiDiSession {
|
|
18
|
+
private connection;
|
|
19
|
+
private driver;
|
|
20
|
+
private context?;
|
|
21
|
+
private _network?;
|
|
22
|
+
private _logs?;
|
|
23
|
+
private _storage?;
|
|
24
|
+
private initialized;
|
|
25
|
+
constructor(driver: Driver, options?: BiDiSessionOptions);
|
|
26
|
+
/**
|
|
27
|
+
* Connect to BiDi WebSocket endpoint
|
|
28
|
+
*/
|
|
29
|
+
connect(wsUrl: string): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Check if BiDi is connected
|
|
32
|
+
*/
|
|
33
|
+
isConnected(): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Get the BiDi connection (for advanced usage)
|
|
36
|
+
*/
|
|
37
|
+
getConnection(): BiDiConnection;
|
|
38
|
+
/**
|
|
39
|
+
* Network interception API
|
|
40
|
+
*/
|
|
41
|
+
get network(): NetworkInterceptor;
|
|
42
|
+
/**
|
|
43
|
+
* Log monitoring API
|
|
44
|
+
*/
|
|
45
|
+
get logs(): LogMonitor;
|
|
46
|
+
/**
|
|
47
|
+
* Session state/storage API
|
|
48
|
+
*/
|
|
49
|
+
get storage(): SessionStateManager;
|
|
50
|
+
/**
|
|
51
|
+
* Save session state to file (cookies + localStorage)
|
|
52
|
+
*/
|
|
53
|
+
saveState(path: string, options?: StorageStateOptions): Promise<SessionState>;
|
|
54
|
+
/**
|
|
55
|
+
* Load session state from file
|
|
56
|
+
*/
|
|
57
|
+
loadState(path: string): Promise<void>;
|
|
58
|
+
/**
|
|
59
|
+
* Get the active browsing context id
|
|
60
|
+
*/
|
|
61
|
+
getContext(): string | undefined;
|
|
62
|
+
/**
|
|
63
|
+
* Register a one-shot handler for the next `browsingContext.load` event
|
|
64
|
+
* on the active top-level context. Returns an unsubscribe function.
|
|
65
|
+
*/
|
|
66
|
+
onLoad(handler: (params: Record<string, unknown>) => void): () => void;
|
|
67
|
+
/**
|
|
68
|
+
* Register a handler for the next `browsingContext.domContentLoaded`
|
|
69
|
+
* event on the active top-level context. Returns an unsubscribe function.
|
|
70
|
+
*/
|
|
71
|
+
onDomContentLoaded(handler: (params: Record<string, unknown>) => void): () => void;
|
|
72
|
+
/**
|
|
73
|
+
* Register a persistent handler for `browsingContext.userPromptOpened` events.
|
|
74
|
+
* Called every time a dialog (alert/confirm/prompt) opens. Returns an unsubscribe function.
|
|
75
|
+
*/
|
|
76
|
+
onDialog(handler: (params: Record<string, unknown>) => void): () => void;
|
|
77
|
+
/**
|
|
78
|
+
* Handle an open user prompt (alert / confirm / prompt) via BiDi.
|
|
79
|
+
* @param accept true to accept (OK), false to dismiss (Cancel / close)
|
|
80
|
+
* @param userText Text to type into a prompt dialog before accepting
|
|
81
|
+
*/
|
|
82
|
+
handleUserPrompt(accept: boolean, userText?: string): Promise<void>;
|
|
83
|
+
/**
|
|
84
|
+
* Subscribe to BiDi events
|
|
85
|
+
*/
|
|
86
|
+
subscribe(events: string[]): Promise<void>;
|
|
87
|
+
/**
|
|
88
|
+
* Add event listener
|
|
89
|
+
*/
|
|
90
|
+
on(event: string, handler: (params: Record<string, unknown>) => void): () => void;
|
|
91
|
+
/**
|
|
92
|
+
* Close BiDi connection
|
|
93
|
+
*/
|
|
94
|
+
close(): Promise<void>;
|
|
95
|
+
}
|
|
96
|
+
export { BiDiConnection } from './connection.js';
|
|
97
|
+
export { NetworkInterceptor, type MockResponse, type InterceptedRequest, type InterceptedResponse } from './network.js';
|
|
98
|
+
export { LogMonitor, type ConsoleMessage, type JavaScriptError, type LogMessage } from './logs.js';
|
|
99
|
+
export { SessionStateManager, type StorageStateOptions } from './storage.js';
|
|
100
|
+
export * from './types.js';
|
|
101
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/bidi/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BiDi Session Manager
|
|
3
|
+
* Central manager for BiDi features with Classic WebDriver fallback
|
|
4
|
+
*/
|
|
5
|
+
import { BiDiConnection } from './connection.js';
|
|
6
|
+
import { NetworkInterceptor } from './network.js';
|
|
7
|
+
import { LogMonitor } from './logs.js';
|
|
8
|
+
import { SessionStateManager } from './storage.js';
|
|
9
|
+
export class BiDiSession {
|
|
10
|
+
connection;
|
|
11
|
+
driver;
|
|
12
|
+
context;
|
|
13
|
+
_network;
|
|
14
|
+
_logs;
|
|
15
|
+
_storage;
|
|
16
|
+
initialized = false;
|
|
17
|
+
constructor(driver, options = {}) {
|
|
18
|
+
this.driver = driver;
|
|
19
|
+
this.connection = new BiDiConnection();
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Connect to BiDi WebSocket endpoint
|
|
23
|
+
*/
|
|
24
|
+
async connect(wsUrl) {
|
|
25
|
+
await this.connection.connect(wsUrl);
|
|
26
|
+
// Get the current browsing context
|
|
27
|
+
const result = await this.connection.send('browsingContext.getTree', {});
|
|
28
|
+
if (result.contexts?.[0]) {
|
|
29
|
+
this.context = result.contexts[0].context;
|
|
30
|
+
}
|
|
31
|
+
// Subscribe to browsing-context lifecycle events needed for waitForLoadState
|
|
32
|
+
await this.connection.subscribe([
|
|
33
|
+
'browsingContext.load',
|
|
34
|
+
'browsingContext.domContentLoaded',
|
|
35
|
+
'browsingContext.userPromptOpened',
|
|
36
|
+
]);
|
|
37
|
+
// Eagerly initialize log monitoring so console/error capture starts immediately
|
|
38
|
+
this._logs = new LogMonitor(this.connection, this.context);
|
|
39
|
+
await this._logs.initialize();
|
|
40
|
+
// Eagerly initialize network so in-flight tracking starts from the first request
|
|
41
|
+
this._network = new NetworkInterceptor(this.connection, this.context);
|
|
42
|
+
await this._network.initialize();
|
|
43
|
+
this.initialized = true;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Check if BiDi is connected
|
|
47
|
+
*/
|
|
48
|
+
isConnected() {
|
|
49
|
+
return this.connection.isConnected();
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Get the BiDi connection (for advanced usage)
|
|
53
|
+
*/
|
|
54
|
+
getConnection() {
|
|
55
|
+
return this.connection;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Network interception API
|
|
59
|
+
*/
|
|
60
|
+
get network() {
|
|
61
|
+
if (!this._network) {
|
|
62
|
+
this._network = new NetworkInterceptor(this.connection, this.context);
|
|
63
|
+
}
|
|
64
|
+
return this._network;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Log monitoring API
|
|
68
|
+
*/
|
|
69
|
+
get logs() {
|
|
70
|
+
if (!this._logs) {
|
|
71
|
+
this._logs = new LogMonitor(this.connection, this.context);
|
|
72
|
+
}
|
|
73
|
+
return this._logs;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Session state/storage API
|
|
77
|
+
*/
|
|
78
|
+
get storage() {
|
|
79
|
+
if (!this._storage) {
|
|
80
|
+
this._storage = new SessionStateManager(this.driver, this.isConnected() ? this.connection : null, this.context);
|
|
81
|
+
}
|
|
82
|
+
return this._storage;
|
|
83
|
+
}
|
|
84
|
+
// === Convenience methods ===
|
|
85
|
+
/**
|
|
86
|
+
* Save session state to file (cookies + localStorage)
|
|
87
|
+
*/
|
|
88
|
+
async saveState(path, options) {
|
|
89
|
+
return this.storage.saveState(path, options);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Load session state from file
|
|
93
|
+
*/
|
|
94
|
+
async loadState(path) {
|
|
95
|
+
return this.storage.loadState(path);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Get the active browsing context id
|
|
99
|
+
*/
|
|
100
|
+
getContext() {
|
|
101
|
+
return this.context;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Register a one-shot handler for the next `browsingContext.load` event
|
|
105
|
+
* on the active top-level context. Returns an unsubscribe function.
|
|
106
|
+
*/
|
|
107
|
+
onLoad(handler) {
|
|
108
|
+
return this.connection.on('browsingContext.load', handler);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Register a handler for the next `browsingContext.domContentLoaded`
|
|
112
|
+
* event on the active top-level context. Returns an unsubscribe function.
|
|
113
|
+
*/
|
|
114
|
+
onDomContentLoaded(handler) {
|
|
115
|
+
return this.connection.on('browsingContext.domContentLoaded', handler);
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Register a persistent handler for `browsingContext.userPromptOpened` events.
|
|
119
|
+
* Called every time a dialog (alert/confirm/prompt) opens. Returns an unsubscribe function.
|
|
120
|
+
*/
|
|
121
|
+
onDialog(handler) {
|
|
122
|
+
return this.connection.on('browsingContext.userPromptOpened', handler);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Handle an open user prompt (alert / confirm / prompt) via BiDi.
|
|
126
|
+
* @param accept true to accept (OK), false to dismiss (Cancel / close)
|
|
127
|
+
* @param userText Text to type into a prompt dialog before accepting
|
|
128
|
+
*/
|
|
129
|
+
async handleUserPrompt(accept, userText) {
|
|
130
|
+
if (!this.context)
|
|
131
|
+
throw new Error('No active browsing context');
|
|
132
|
+
const params = { context: this.context, accept };
|
|
133
|
+
if (userText !== undefined)
|
|
134
|
+
params.userText = userText;
|
|
135
|
+
await this.connection.send('browsingContext.handleUserPrompt', params);
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Subscribe to BiDi events
|
|
139
|
+
*/
|
|
140
|
+
async subscribe(events) {
|
|
141
|
+
await this.connection.subscribe(events);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Add event listener
|
|
145
|
+
*/
|
|
146
|
+
on(event, handler) {
|
|
147
|
+
return this.connection.on(event, handler);
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Close BiDi connection
|
|
151
|
+
*/
|
|
152
|
+
async close() {
|
|
153
|
+
await this.connection.close();
|
|
154
|
+
this.initialized = false;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
// Export all BiDi modules
|
|
158
|
+
export { BiDiConnection } from './connection.js';
|
|
159
|
+
export { NetworkInterceptor } from './network.js';
|
|
160
|
+
export { LogMonitor } from './logs.js';
|
|
161
|
+
export { SessionStateManager } from './storage.js';
|
|
162
|
+
export * from './types.js';
|
|
163
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/bidi/index.ts"],"names":[],"mappings":"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"}
|