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.
Files changed (192) hide show
  1. package/CHANGELOG.md +104 -0
  2. package/README.md +186 -10
  3. package/bin/craftdriver.mjs +26 -0
  4. package/dist/cli/client.d.ts +17 -0
  5. package/dist/cli/client.d.ts.map +1 -0
  6. package/dist/cli/client.js +88 -0
  7. package/dist/cli/client.js.map +1 -0
  8. package/dist/cli/daemon.d.ts +15 -0
  9. package/dist/cli/daemon.d.ts.map +1 -0
  10. package/dist/cli/daemon.js +145 -0
  11. package/dist/cli/daemon.js.map +1 -0
  12. package/dist/cli/defaults.d.ts +10 -0
  13. package/dist/cli/defaults.d.ts.map +1 -0
  14. package/dist/cli/defaults.js +42 -0
  15. package/dist/cli/defaults.js.map +1 -0
  16. package/dist/cli/dispatcher.d.ts +28 -0
  17. package/dist/cli/dispatcher.d.ts.map +1 -0
  18. package/dist/cli/dispatcher.js +319 -0
  19. package/dist/cli/dispatcher.js.map +1 -0
  20. package/dist/cli/index.d.ts +2 -0
  21. package/dist/cli/index.d.ts.map +1 -0
  22. package/dist/cli/index.js +404 -0
  23. package/dist/cli/index.js.map +1 -0
  24. package/dist/cli/init.d.ts +24 -0
  25. package/dist/cli/init.d.ts.map +1 -0
  26. package/dist/cli/init.js +192 -0
  27. package/dist/cli/init.js.map +1 -0
  28. package/dist/cli/mcp/artifacts.d.ts +43 -0
  29. package/dist/cli/mcp/artifacts.d.ts.map +1 -0
  30. package/dist/cli/mcp/artifacts.js +104 -0
  31. package/dist/cli/mcp/artifacts.js.map +1 -0
  32. package/dist/cli/mcp/server.d.ts +34 -0
  33. package/dist/cli/mcp/server.d.ts.map +1 -0
  34. package/dist/cli/mcp/server.js +214 -0
  35. package/dist/cli/mcp/server.js.map +1 -0
  36. package/dist/cli/mcp/tools.d.ts +34 -0
  37. package/dist/cli/mcp/tools.d.ts.map +1 -0
  38. package/dist/cli/mcp/tools.js +236 -0
  39. package/dist/cli/mcp/tools.js.map +1 -0
  40. package/dist/cli/parseArgs.d.ts +37 -0
  41. package/dist/cli/parseArgs.d.ts.map +1 -0
  42. package/dist/cli/parseArgs.js +215 -0
  43. package/dist/cli/parseArgs.js.map +1 -0
  44. package/dist/cli/protocol.d.ts +34 -0
  45. package/dist/cli/protocol.d.ts.map +1 -0
  46. package/dist/cli/protocol.js +2 -0
  47. package/dist/cli/protocol.js.map +1 -0
  48. package/dist/cli/selector.d.ts +29 -0
  49. package/dist/cli/selector.d.ts.map +1 -0
  50. package/dist/cli/selector.js +100 -0
  51. package/dist/cli/selector.js.map +1 -0
  52. package/dist/cli/snapshot.d.ts +48 -0
  53. package/dist/cli/snapshot.d.ts.map +1 -0
  54. package/dist/cli/snapshot.js +179 -0
  55. package/dist/cli/snapshot.js.map +1 -0
  56. package/dist/index.d.ts +14 -1
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +17 -1
  59. package/dist/index.js.map +1 -1
  60. package/dist/lib/a11y.d.ts +81 -0
  61. package/dist/lib/a11y.d.ts.map +1 -0
  62. package/dist/lib/a11y.js +171 -0
  63. package/dist/lib/a11y.js.map +1 -0
  64. package/dist/lib/bidi/connection.d.ts +62 -0
  65. package/dist/lib/bidi/connection.d.ts.map +1 -0
  66. package/dist/lib/bidi/connection.js +227 -0
  67. package/dist/lib/bidi/connection.js.map +1 -0
  68. package/dist/lib/bidi/index.d.ts +101 -0
  69. package/dist/lib/bidi/index.d.ts.map +1 -0
  70. package/dist/lib/bidi/index.js +163 -0
  71. package/dist/lib/bidi/index.js.map +1 -0
  72. package/dist/lib/bidi/logs.d.ts +104 -0
  73. package/dist/lib/bidi/logs.d.ts.map +1 -0
  74. package/dist/lib/bidi/logs.js +273 -0
  75. package/dist/lib/bidi/logs.js.map +1 -0
  76. package/dist/lib/bidi/network.d.ts +165 -0
  77. package/dist/lib/bidi/network.d.ts.map +1 -0
  78. package/dist/lib/bidi/network.js +477 -0
  79. package/dist/lib/bidi/network.js.map +1 -0
  80. package/dist/lib/bidi/storage.d.ts +83 -0
  81. package/dist/lib/bidi/storage.d.ts.map +1 -0
  82. package/dist/lib/bidi/storage.js +299 -0
  83. package/dist/lib/bidi/storage.js.map +1 -0
  84. package/dist/lib/bidi/types.d.ts +323 -0
  85. package/dist/lib/bidi/types.d.ts.map +1 -0
  86. package/dist/lib/bidi/types.js +6 -0
  87. package/dist/lib/bidi/types.js.map +1 -0
  88. package/dist/lib/browser.d.ts +776 -13
  89. package/dist/lib/browser.d.ts.map +1 -1
  90. package/dist/lib/browser.js +1547 -70
  91. package/dist/lib/browser.js.map +1 -1
  92. package/dist/lib/browserContext.d.ts +486 -0
  93. package/dist/lib/browserContext.d.ts.map +1 -0
  94. package/dist/lib/browserContext.js +937 -0
  95. package/dist/lib/browserContext.js.map +1 -0
  96. package/dist/lib/builder.d.ts +3 -0
  97. package/dist/lib/builder.d.ts.map +1 -1
  98. package/dist/lib/builder.js +31 -4
  99. package/dist/lib/builder.js.map +1 -1
  100. package/dist/lib/by.d.ts +18 -2
  101. package/dist/lib/by.d.ts.map +1 -1
  102. package/dist/lib/by.js +20 -2
  103. package/dist/lib/by.js.map +1 -1
  104. package/dist/lib/chrome.d.ts +13 -1
  105. package/dist/lib/chrome.d.ts.map +1 -1
  106. package/dist/lib/chrome.js +13 -17
  107. package/dist/lib/chrome.js.map +1 -1
  108. package/dist/lib/clock.d.ts +115 -0
  109. package/dist/lib/clock.d.ts.map +1 -0
  110. package/dist/lib/clock.js +407 -0
  111. package/dist/lib/clock.js.map +1 -0
  112. package/dist/lib/driver.d.ts +45 -0
  113. package/dist/lib/driver.d.ts.map +1 -1
  114. package/dist/lib/driver.js +129 -1
  115. package/dist/lib/driver.js.map +1 -1
  116. package/dist/lib/driverManager.d.ts +25 -0
  117. package/dist/lib/driverManager.d.ts.map +1 -0
  118. package/dist/lib/driverManager.js +399 -0
  119. package/dist/lib/driverManager.js.map +1 -0
  120. package/dist/lib/elementHandle.d.ts +69 -2
  121. package/dist/lib/elementHandle.d.ts.map +1 -1
  122. package/dist/lib/elementHandle.js +215 -40
  123. package/dist/lib/elementHandle.js.map +1 -1
  124. package/dist/lib/errors.d.ts +71 -0
  125. package/dist/lib/errors.d.ts.map +1 -0
  126. package/dist/lib/errors.js +73 -0
  127. package/dist/lib/errors.js.map +1 -0
  128. package/dist/lib/expect.d.ts +6 -1
  129. package/dist/lib/expect.d.ts.map +1 -1
  130. package/dist/lib/expect.js +55 -37
  131. package/dist/lib/expect.js.map +1 -1
  132. package/dist/lib/firefox.d.ts +18 -0
  133. package/dist/lib/firefox.d.ts.map +1 -0
  134. package/dist/lib/firefox.js +33 -0
  135. package/dist/lib/firefox.js.map +1 -0
  136. package/dist/lib/frame.d.ts +57 -0
  137. package/dist/lib/frame.d.ts.map +1 -0
  138. package/dist/lib/frame.js +277 -0
  139. package/dist/lib/frame.js.map +1 -0
  140. package/dist/lib/keyboard.d.ts +1 -1
  141. package/dist/lib/keyboard.d.ts.map +1 -1
  142. package/dist/lib/keyboard.js +1 -1
  143. package/dist/lib/keyboard.js.map +1 -1
  144. package/dist/lib/locator.d.ts +71 -2
  145. package/dist/lib/locator.d.ts.map +1 -1
  146. package/dist/lib/locator.js +289 -31
  147. package/dist/lib/locator.js.map +1 -1
  148. package/dist/lib/mouse.d.ts +1 -1
  149. package/dist/lib/mouse.d.ts.map +1 -1
  150. package/dist/lib/mouse.js +1 -1
  151. package/dist/lib/mouse.js.map +1 -1
  152. package/dist/lib/page.d.ts +107 -0
  153. package/dist/lib/page.d.ts.map +1 -0
  154. package/dist/lib/page.js +388 -0
  155. package/dist/lib/page.js.map +1 -0
  156. package/dist/lib/tracing.d.ts +128 -0
  157. package/dist/lib/tracing.d.ts.map +1 -0
  158. package/dist/lib/tracing.js +272 -0
  159. package/dist/lib/tracing.js.map +1 -0
  160. package/dist/lib/wait.d.ts.map +1 -1
  161. package/dist/lib/wait.js +14 -1
  162. package/dist/lib/wait.js.map +1 -1
  163. package/dist/lib/webelement.d.ts +2 -0
  164. package/dist/lib/webelement.d.ts.map +1 -1
  165. package/dist/lib/webelement.js +18 -0
  166. package/dist/lib/webelement.js.map +1 -1
  167. package/docs/accessibility.md +177 -0
  168. package/docs/api-reference.md +71 -0
  169. package/docs/assertions.md +182 -0
  170. package/docs/bidi-features.md +462 -0
  171. package/docs/browser-api.md +673 -0
  172. package/docs/browser-context.md +522 -0
  173. package/docs/cli.md +233 -0
  174. package/docs/clock.md +245 -0
  175. package/docs/dialogs.md +143 -0
  176. package/docs/driver-configuration.md +64 -0
  177. package/docs/element-api.md +219 -0
  178. package/docs/emulation.md +155 -0
  179. package/docs/error-codes.md +67 -0
  180. package/docs/getting-started.md +168 -0
  181. package/docs/keyboard-mouse.md +250 -0
  182. package/docs/mcp.md +250 -0
  183. package/docs/mobile-emulation.md +194 -0
  184. package/docs/screenshots.md +146 -0
  185. package/docs/selectors.md +382 -0
  186. package/docs/session-management.md +229 -0
  187. package/docs/tracing.md +282 -0
  188. package/package.json +25 -5
  189. package/skills/craftdriver/SKILL.md +84 -0
  190. package/skills/craftdriver/cheatsheet.md +194 -0
  191. package/skills/craftdriver/cli.md +104 -0
  192. 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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"}