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,477 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BiDi Network Interceptor
|
|
3
|
+
* Provides request interception, mocking, and modification capabilities
|
|
4
|
+
*/
|
|
5
|
+
export class NetworkInterceptor {
|
|
6
|
+
connection;
|
|
7
|
+
intercepts = new Map();
|
|
8
|
+
handlers = new Map();
|
|
9
|
+
subscribed = false;
|
|
10
|
+
context;
|
|
11
|
+
requestListeners = [];
|
|
12
|
+
responseListeners = [];
|
|
13
|
+
/** Set of request IDs currently in-flight (sent but not yet completed/errored). */
|
|
14
|
+
inFlightRequests = new Set();
|
|
15
|
+
/** Callbacks to notify when inFlightRequests changes — used by waitForNetworkIdle. */
|
|
16
|
+
idleListeners = [];
|
|
17
|
+
constructor(connection, context) {
|
|
18
|
+
this.connection = connection;
|
|
19
|
+
this.context = context;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Initialize network event subscriptions
|
|
23
|
+
*/
|
|
24
|
+
async initialize() {
|
|
25
|
+
if (this.subscribed)
|
|
26
|
+
return;
|
|
27
|
+
// Subscribe to network events
|
|
28
|
+
await this.connection.subscribe([
|
|
29
|
+
'network.beforeRequestSent',
|
|
30
|
+
'network.responseStarted',
|
|
31
|
+
'network.responseCompleted',
|
|
32
|
+
'network.fetchError',
|
|
33
|
+
'network.authRequired',
|
|
34
|
+
]);
|
|
35
|
+
// Handle intercepted requests + track in-flight
|
|
36
|
+
this.connection.on('network.beforeRequestSent', async (params) => {
|
|
37
|
+
const event = params;
|
|
38
|
+
// Track in-flight (before intercept handling, so count is always accurate)
|
|
39
|
+
this.inFlightRequests.add(event.request.request);
|
|
40
|
+
await this.handleBeforeRequestSent(event);
|
|
41
|
+
// Notify passive request listeners (waitForRequest)
|
|
42
|
+
if (this.requestListeners.length > 0) {
|
|
43
|
+
const req = {
|
|
44
|
+
id: event.request.request,
|
|
45
|
+
url: event.request.url,
|
|
46
|
+
method: event.request.method,
|
|
47
|
+
headers: this.headersToObject(event.request.headers),
|
|
48
|
+
isBlocked: event.isBlocked,
|
|
49
|
+
context: event.context,
|
|
50
|
+
};
|
|
51
|
+
for (const l of [...this.requestListeners])
|
|
52
|
+
l(req);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
// Track completed responses + notify waitForResponse listeners
|
|
56
|
+
this.connection.on('network.responseCompleted', (params) => {
|
|
57
|
+
const event = params;
|
|
58
|
+
this.inFlightRequests.delete(event.request.request);
|
|
59
|
+
this._notifyIdleListeners();
|
|
60
|
+
if (this.responseListeners.length > 0) {
|
|
61
|
+
const res = {
|
|
62
|
+
url: event.response.url,
|
|
63
|
+
status: event.response.status,
|
|
64
|
+
statusText: event.response.statusText,
|
|
65
|
+
headers: this.headersToObject(event.response.headers),
|
|
66
|
+
mimeType: event.response.mimeType,
|
|
67
|
+
fromCache: event.response.fromCache,
|
|
68
|
+
request: {
|
|
69
|
+
id: event.request.request,
|
|
70
|
+
url: event.request.url,
|
|
71
|
+
method: event.request.method,
|
|
72
|
+
headers: this.headersToObject(event.request.headers),
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
for (const l of [...this.responseListeners])
|
|
76
|
+
l(res);
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
// Track fetch errors (request failed before a response)
|
|
80
|
+
this.connection.on('network.fetchError', (params) => {
|
|
81
|
+
const reqId = params?.request?.request;
|
|
82
|
+
if (reqId) {
|
|
83
|
+
this.inFlightRequests.delete(reqId);
|
|
84
|
+
this._notifyIdleListeners();
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
this.subscribed = true;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Add a network intercept for specific URL patterns
|
|
91
|
+
*/
|
|
92
|
+
async intercept(patterns, handler, phases = ['beforeRequestSent'], contexts) {
|
|
93
|
+
await this.initialize();
|
|
94
|
+
const urlPatterns = this.normalizePatterns(patterns);
|
|
95
|
+
const ctxs = contexts ?? (this.context ? [this.context] : undefined);
|
|
96
|
+
const result = await this.connection.send('network.addIntercept', {
|
|
97
|
+
phases,
|
|
98
|
+
urlPatterns,
|
|
99
|
+
...(ctxs ? { contexts: ctxs } : {}),
|
|
100
|
+
});
|
|
101
|
+
const interceptId = result.intercept;
|
|
102
|
+
this.intercepts.set(interceptId, {
|
|
103
|
+
id: interceptId,
|
|
104
|
+
patterns: urlPatterns,
|
|
105
|
+
phases,
|
|
106
|
+
handler,
|
|
107
|
+
});
|
|
108
|
+
this.handlers.set(interceptId, handler);
|
|
109
|
+
return interceptId;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Mock all requests matching pattern with a fixed response
|
|
113
|
+
*/
|
|
114
|
+
async mock(pattern, response) {
|
|
115
|
+
const handler = (req) => {
|
|
116
|
+
if (typeof response === 'function') {
|
|
117
|
+
return response(req);
|
|
118
|
+
}
|
|
119
|
+
return response;
|
|
120
|
+
};
|
|
121
|
+
return this.intercept(pattern, handler);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Block all requests matching pattern
|
|
125
|
+
*/
|
|
126
|
+
async block(pattern) {
|
|
127
|
+
return this.intercept(pattern, () => ({
|
|
128
|
+
status: 0,
|
|
129
|
+
body: '',
|
|
130
|
+
}));
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Modify request headers for matching patterns
|
|
134
|
+
*/
|
|
135
|
+
async setExtraHeaders(headers, contexts) {
|
|
136
|
+
const headerList = Object.entries(headers).map(([name, value]) => ({
|
|
137
|
+
name,
|
|
138
|
+
value: { type: 'string', value },
|
|
139
|
+
}));
|
|
140
|
+
await this.connection.send('network.setExtraHeaders', {
|
|
141
|
+
headers: headerList,
|
|
142
|
+
...(contexts ? { contexts } : {}),
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Continue a blocked request (optionally with modifications)
|
|
147
|
+
*/
|
|
148
|
+
async continueRequest(requestId, options) {
|
|
149
|
+
const params = { request: requestId };
|
|
150
|
+
if (options?.url)
|
|
151
|
+
params.url = options.url;
|
|
152
|
+
if (options?.method)
|
|
153
|
+
params.method = options.method;
|
|
154
|
+
if (options?.headers) {
|
|
155
|
+
params.headers = Object.entries(options.headers).map(([name, value]) => ({
|
|
156
|
+
name,
|
|
157
|
+
value: { type: 'string', value },
|
|
158
|
+
}));
|
|
159
|
+
}
|
|
160
|
+
if (options?.body) {
|
|
161
|
+
params.body = { type: 'string', value: options.body };
|
|
162
|
+
}
|
|
163
|
+
await this.connection.send('network.continueRequest', params);
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Provide a custom response for a blocked request
|
|
167
|
+
*/
|
|
168
|
+
async provideResponse(requestId, response) {
|
|
169
|
+
const params = { request: requestId };
|
|
170
|
+
if (response.status !== undefined)
|
|
171
|
+
params.statusCode = response.status;
|
|
172
|
+
if (response.statusText)
|
|
173
|
+
params.reasonPhrase = response.statusText;
|
|
174
|
+
if (response.headers) {
|
|
175
|
+
params.headers = Object.entries(response.headers).map(([name, value]) => ({
|
|
176
|
+
name,
|
|
177
|
+
value: { type: 'string', value },
|
|
178
|
+
}));
|
|
179
|
+
}
|
|
180
|
+
if (response.body !== undefined) {
|
|
181
|
+
let bodyStr;
|
|
182
|
+
let bodyType = 'string';
|
|
183
|
+
if (typeof response.body === 'string') {
|
|
184
|
+
bodyStr = response.body;
|
|
185
|
+
}
|
|
186
|
+
else if (Buffer.isBuffer(response.body)) {
|
|
187
|
+
bodyStr = response.body.toString('base64');
|
|
188
|
+
bodyType = 'base64';
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
// Object - serialize as JSON
|
|
192
|
+
bodyStr = JSON.stringify(response.body);
|
|
193
|
+
}
|
|
194
|
+
params.body = { type: bodyType, value: bodyStr };
|
|
195
|
+
}
|
|
196
|
+
await this.connection.send('network.provideResponse', params);
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Fail a blocked request
|
|
200
|
+
*/
|
|
201
|
+
async failRequest(requestId) {
|
|
202
|
+
await this.connection.send('network.failRequest', { request: requestId });
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Number of network requests currently in-flight (sent but no response yet).
|
|
206
|
+
* Used to implement `waitForNetworkIdle`.
|
|
207
|
+
*/
|
|
208
|
+
get inFlightCount() {
|
|
209
|
+
return this.inFlightRequests.size;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Resolves when no network requests have been in-flight for `idleDuration` ms.
|
|
213
|
+
* Event-driven: subscribes to network events internally; no polling.
|
|
214
|
+
*
|
|
215
|
+
* @param idleDuration Milliseconds of network silence required (default: 500)
|
|
216
|
+
*/
|
|
217
|
+
async waitForNetworkIdle(opts) {
|
|
218
|
+
await this.initialize();
|
|
219
|
+
// Validate-or-fallback to bound timer durations (defends against resource
|
|
220
|
+
// exhaustion from a hostile / buggy caller). CodeQL does not treat
|
|
221
|
+
// Math.min as a sanitizer, so we use explicit range checks.
|
|
222
|
+
const MAX_IDLE_MS = 60_000;
|
|
223
|
+
const MAX_TIMEOUT_MS = 300_000;
|
|
224
|
+
const reqIdle = opts?.idleDuration;
|
|
225
|
+
const reqTimeout = opts?.timeout;
|
|
226
|
+
const idleDuration = typeof reqIdle === 'number' && reqIdle >= 0 && reqIdle <= MAX_IDLE_MS ? reqIdle : 500;
|
|
227
|
+
const timeout = typeof reqTimeout === 'number' && reqTimeout >= 0 && reqTimeout <= MAX_TIMEOUT_MS
|
|
228
|
+
? reqTimeout
|
|
229
|
+
: 30_000;
|
|
230
|
+
return new Promise((resolve, reject) => {
|
|
231
|
+
let idleTimer;
|
|
232
|
+
const timeoutTimer = setTimeout(() => {
|
|
233
|
+
cleanup();
|
|
234
|
+
reject(new Error(`waitForNetworkIdle() timed out after ${timeout}ms`));
|
|
235
|
+
}, timeout);
|
|
236
|
+
const scheduleIdle = () => {
|
|
237
|
+
if (idleTimer)
|
|
238
|
+
clearTimeout(idleTimer);
|
|
239
|
+
if (this.inFlightRequests.size === 0) {
|
|
240
|
+
idleTimer = setTimeout(() => { cleanup(); resolve(); }, idleDuration);
|
|
241
|
+
}
|
|
242
|
+
};
|
|
243
|
+
const onNetworkChange = () => scheduleIdle();
|
|
244
|
+
const cleanup = () => {
|
|
245
|
+
clearTimeout(timeoutTimer);
|
|
246
|
+
if (idleTimer)
|
|
247
|
+
clearTimeout(idleTimer);
|
|
248
|
+
this.idleListeners = this.idleListeners.filter(l => l !== onNetworkChange);
|
|
249
|
+
};
|
|
250
|
+
this.idleListeners.push(onNetworkChange);
|
|
251
|
+
// Kick off immediately in case already idle
|
|
252
|
+
scheduleIdle();
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
_notifyIdleListeners() {
|
|
256
|
+
for (const l of [...this.idleListeners])
|
|
257
|
+
l();
|
|
258
|
+
}
|
|
259
|
+
on(event, listener) {
|
|
260
|
+
if (event === 'request') {
|
|
261
|
+
const fn = listener;
|
|
262
|
+
this.requestListeners.push(fn);
|
|
263
|
+
// Ensure subscriptions are active so events arrive
|
|
264
|
+
this.initialize().catch(() => { });
|
|
265
|
+
return () => {
|
|
266
|
+
this.requestListeners = this.requestListeners.filter((l) => l !== fn);
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
const fn = listener;
|
|
270
|
+
this.responseListeners.push(fn);
|
|
271
|
+
this.initialize().catch(() => { });
|
|
272
|
+
return () => {
|
|
273
|
+
this.responseListeners = this.responseListeners.filter((l) => l !== fn);
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Wait for the first request matching a URL glob or predicate.
|
|
278
|
+
* Must be registered **before** the action that triggers the request.
|
|
279
|
+
*/
|
|
280
|
+
waitForRequest(pattern, opts) {
|
|
281
|
+
return this._waitFor('request', pattern, opts);
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Wait for the first completed response matching a URL glob or predicate.
|
|
285
|
+
* Must be registered **before** the action that triggers the request.
|
|
286
|
+
*
|
|
287
|
+
* @example
|
|
288
|
+
* ```ts
|
|
289
|
+
* const [res] = await Promise.all([
|
|
290
|
+
* browser.waitForResponse('/api/users'),
|
|
291
|
+
* browser.click('#load-btn'),
|
|
292
|
+
* ]);
|
|
293
|
+
* expect(res.status).toBe(200);
|
|
294
|
+
* ```
|
|
295
|
+
*/
|
|
296
|
+
waitForResponse(pattern, opts) {
|
|
297
|
+
return this._waitFor('response', pattern, opts);
|
|
298
|
+
}
|
|
299
|
+
_waitFor(kind, pattern, opts) {
|
|
300
|
+
const timeout = opts?.timeout ?? 30000;
|
|
301
|
+
const matcher = typeof pattern === 'function'
|
|
302
|
+
? pattern
|
|
303
|
+
: (v) => this._matchesGlob(v.url, pattern);
|
|
304
|
+
return new Promise((resolve, reject) => {
|
|
305
|
+
let done = false;
|
|
306
|
+
const timer = setTimeout(() => {
|
|
307
|
+
if (done)
|
|
308
|
+
return;
|
|
309
|
+
done = true;
|
|
310
|
+
cleanup();
|
|
311
|
+
const desc = typeof pattern === 'string' ? `"${pattern}"` : '[predicate]';
|
|
312
|
+
reject(new Error(`waitFor${kind === 'request' ? 'Request' : 'Response'}(${desc}) timed out after ${timeout}ms`));
|
|
313
|
+
}, timeout);
|
|
314
|
+
const listener = (v) => {
|
|
315
|
+
if (done)
|
|
316
|
+
return;
|
|
317
|
+
if (matcher(v)) {
|
|
318
|
+
done = true;
|
|
319
|
+
cleanup();
|
|
320
|
+
resolve(v);
|
|
321
|
+
}
|
|
322
|
+
};
|
|
323
|
+
const cleanup = () => {
|
|
324
|
+
clearTimeout(timer);
|
|
325
|
+
if (kind === 'request') {
|
|
326
|
+
this.requestListeners = this.requestListeners.filter(l => l !== listener);
|
|
327
|
+
}
|
|
328
|
+
else {
|
|
329
|
+
this.responseListeners = this.responseListeners.filter(l => l !== listener);
|
|
330
|
+
}
|
|
331
|
+
};
|
|
332
|
+
if (kind === 'request') {
|
|
333
|
+
this.requestListeners.push(listener);
|
|
334
|
+
}
|
|
335
|
+
else {
|
|
336
|
+
this.responseListeners.push(listener);
|
|
337
|
+
}
|
|
338
|
+
// Ensure we are subscribed so events arrive
|
|
339
|
+
this.initialize().catch(reject);
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
_matchesGlob(url, pattern) {
|
|
343
|
+
// Re-use the same logic as normalizePatterns but do a JS-side string match
|
|
344
|
+
// so callers can use Playwright-style ** globs without relying on BiDi
|
|
345
|
+
// pattern registration.
|
|
346
|
+
let pathname;
|
|
347
|
+
try {
|
|
348
|
+
pathname = new URL(url).pathname;
|
|
349
|
+
}
|
|
350
|
+
catch {
|
|
351
|
+
pathname = url;
|
|
352
|
+
}
|
|
353
|
+
if (pattern.includes('**') || pattern.includes('*')) {
|
|
354
|
+
let pat = pattern;
|
|
355
|
+
pat = pat.replace(/^\*\*/, '');
|
|
356
|
+
pat = pat.replace(/\/?\*\*$/, '');
|
|
357
|
+
pat = pat.replace(/\/?\*$/, '');
|
|
358
|
+
pat = pat.replace(/\*/g, '');
|
|
359
|
+
if (!pat.startsWith('/'))
|
|
360
|
+
pat = '/' + pat;
|
|
361
|
+
pat = pat.replace(/\/+/g, '/');
|
|
362
|
+
return pathname.includes(pat);
|
|
363
|
+
}
|
|
364
|
+
// Exact string match against full URL
|
|
365
|
+
return url === pattern || url.startsWith(pattern);
|
|
366
|
+
}
|
|
367
|
+
/**
|
|
368
|
+
* Remove an intercept
|
|
369
|
+
*/
|
|
370
|
+
async removeIntercept(interceptId) {
|
|
371
|
+
await this.connection.send('network.removeIntercept', { intercept: interceptId });
|
|
372
|
+
this.intercepts.delete(interceptId);
|
|
373
|
+
this.handlers.delete(interceptId);
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* Remove all intercepts
|
|
377
|
+
*/
|
|
378
|
+
async removeAllIntercepts() {
|
|
379
|
+
const ids = [...this.intercepts.keys()];
|
|
380
|
+
for (const id of ids) {
|
|
381
|
+
await this.removeIntercept(id);
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
/**
|
|
385
|
+
* Set cache behavior
|
|
386
|
+
*/
|
|
387
|
+
async setCacheBehavior(behavior, contexts) {
|
|
388
|
+
await this.connection.send('network.setCacheBehavior', {
|
|
389
|
+
cacheBehavior: behavior,
|
|
390
|
+
...(contexts ? { contexts } : {}),
|
|
391
|
+
});
|
|
392
|
+
}
|
|
393
|
+
async handleBeforeRequestSent(event) {
|
|
394
|
+
if (!event.isBlocked || !event.intercepts?.length)
|
|
395
|
+
return;
|
|
396
|
+
const requestId = event.request.request;
|
|
397
|
+
// Find matching handler
|
|
398
|
+
for (const interceptId of event.intercepts) {
|
|
399
|
+
const handler = this.handlers.get(interceptId);
|
|
400
|
+
if (!handler)
|
|
401
|
+
continue;
|
|
402
|
+
const interceptedRequest = {
|
|
403
|
+
id: requestId,
|
|
404
|
+
url: event.request.url,
|
|
405
|
+
method: event.request.method,
|
|
406
|
+
headers: this.headersToObject(event.request.headers),
|
|
407
|
+
isBlocked: event.isBlocked,
|
|
408
|
+
context: event.context,
|
|
409
|
+
};
|
|
410
|
+
try {
|
|
411
|
+
const result = await handler(interceptedRequest);
|
|
412
|
+
if (result) {
|
|
413
|
+
// Provide mock response
|
|
414
|
+
await this.provideResponse(requestId, result);
|
|
415
|
+
}
|
|
416
|
+
else {
|
|
417
|
+
// Continue with original request
|
|
418
|
+
await this.continueRequest(requestId);
|
|
419
|
+
}
|
|
420
|
+
return;
|
|
421
|
+
}
|
|
422
|
+
catch (err) {
|
|
423
|
+
console.error('Error in network intercept handler:', err);
|
|
424
|
+
await this.continueRequest(requestId);
|
|
425
|
+
return;
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
// No handler found, continue request
|
|
429
|
+
await this.continueRequest(requestId);
|
|
430
|
+
}
|
|
431
|
+
normalizePatterns(patterns) {
|
|
432
|
+
// Handle single UrlPattern object
|
|
433
|
+
if (typeof patterns === 'object' && !Array.isArray(patterns) && 'type' in patterns) {
|
|
434
|
+
return [patterns];
|
|
435
|
+
}
|
|
436
|
+
const arr = Array.isArray(patterns) ? patterns : [patterns];
|
|
437
|
+
return arr.map((p) => {
|
|
438
|
+
if (typeof p === 'string') {
|
|
439
|
+
// BiDi URL patterns don't support wildcards - they use exact component matching
|
|
440
|
+
// Extract pathname from glob-style patterns for simple prefix matching
|
|
441
|
+
if (p.includes('**') || p.includes('*')) {
|
|
442
|
+
// Extract pathname from glob pattern
|
|
443
|
+
// e.g., "**/api/users" -> pathname: "/api/users"
|
|
444
|
+
// Note: BiDi will only match exact pathnames, not prefixes
|
|
445
|
+
let pathname = p;
|
|
446
|
+
// Remove leading **
|
|
447
|
+
pathname = pathname.replace(/^\*\*/, '');
|
|
448
|
+
// Remove trailing wildcards (can't do prefix matching in BiDi)
|
|
449
|
+
pathname = pathname.replace(/\/?\*\*$/, '');
|
|
450
|
+
pathname = pathname.replace(/\/?\*$/, '');
|
|
451
|
+
// Remove any remaining wildcards
|
|
452
|
+
pathname = pathname.replace(/\*/g, '');
|
|
453
|
+
if (!pathname.startsWith('/')) {
|
|
454
|
+
pathname = '/' + pathname;
|
|
455
|
+
}
|
|
456
|
+
// Clean up double slashes
|
|
457
|
+
pathname = pathname.replace(/\/+/g, '/');
|
|
458
|
+
return {
|
|
459
|
+
type: 'pattern',
|
|
460
|
+
pathname,
|
|
461
|
+
};
|
|
462
|
+
}
|
|
463
|
+
// For full URLs, use UrlPatternString
|
|
464
|
+
return { type: 'string', pattern: p };
|
|
465
|
+
}
|
|
466
|
+
return p;
|
|
467
|
+
});
|
|
468
|
+
}
|
|
469
|
+
headersToObject(headers) {
|
|
470
|
+
const result = {};
|
|
471
|
+
for (const h of headers) {
|
|
472
|
+
result[h.name] = h.value.value;
|
|
473
|
+
}
|
|
474
|
+
return result;
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
//# sourceMappingURL=network.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../../src/lib/bidi/network.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session State Manager
|
|
3
|
+
* Playwright-style session persistence - save login state, cookies, localStorage
|
|
4
|
+
*/
|
|
5
|
+
import type { BiDiConnection } from './connection.js';
|
|
6
|
+
import type { Driver } from '../driver.js';
|
|
7
|
+
import type { BrowsingContext, Cookie, CookieInput, SessionState } from './types.js';
|
|
8
|
+
export interface StorageStateOptions {
|
|
9
|
+
/** Include cookies in saved state (default: true) */
|
|
10
|
+
includeCookies?: boolean;
|
|
11
|
+
/** Include localStorage in saved state (default: true) */
|
|
12
|
+
includeLocalStorage?: boolean;
|
|
13
|
+
/** Include sessionStorage in saved state (default: false) */
|
|
14
|
+
includeSessionStorage?: boolean;
|
|
15
|
+
/** Specific origins to capture (default: all) */
|
|
16
|
+
origins?: string[];
|
|
17
|
+
}
|
|
18
|
+
export declare class SessionStateManager {
|
|
19
|
+
private connection;
|
|
20
|
+
private driver;
|
|
21
|
+
private context?;
|
|
22
|
+
constructor(driver: Driver, connection: BiDiConnection | null, context?: BrowsingContext);
|
|
23
|
+
/**
|
|
24
|
+
* Save current session state to a file (Playwright-style)
|
|
25
|
+
* Captures cookies and optionally localStorage/sessionStorage
|
|
26
|
+
*/
|
|
27
|
+
saveState(path: string, options?: StorageStateOptions): Promise<SessionState>;
|
|
28
|
+
/**
|
|
29
|
+
* Load session state from a file
|
|
30
|
+
*/
|
|
31
|
+
loadState(path: string): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* Get current session state
|
|
34
|
+
*/
|
|
35
|
+
getState(options?: StorageStateOptions): Promise<SessionState>;
|
|
36
|
+
/**
|
|
37
|
+
* Set session state (cookies + storage)
|
|
38
|
+
*/
|
|
39
|
+
setState(state: SessionState): Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* Get all cookies using BiDi or fallback to Classic
|
|
42
|
+
*/
|
|
43
|
+
getCookies(filter?: {
|
|
44
|
+
domain?: string;
|
|
45
|
+
name?: string;
|
|
46
|
+
}): Promise<Cookie[]>;
|
|
47
|
+
/**
|
|
48
|
+
* Set cookies using BiDi or fallback to Classic
|
|
49
|
+
*/
|
|
50
|
+
setCookies(cookies: Cookie[] | CookieInput[]): Promise<void>;
|
|
51
|
+
/**
|
|
52
|
+
* Clear all cookies
|
|
53
|
+
*/
|
|
54
|
+
clearCookies(filter?: {
|
|
55
|
+
domain?: string;
|
|
56
|
+
name?: string;
|
|
57
|
+
}): Promise<void>;
|
|
58
|
+
/**
|
|
59
|
+
* Add a single cookie
|
|
60
|
+
*/
|
|
61
|
+
addCookie(cookie: {
|
|
62
|
+
name: string;
|
|
63
|
+
value: string;
|
|
64
|
+
domain?: string;
|
|
65
|
+
path?: string;
|
|
66
|
+
secure?: boolean;
|
|
67
|
+
httpOnly?: boolean;
|
|
68
|
+
sameSite?: 'Strict' | 'Lax' | 'None';
|
|
69
|
+
expiry?: number | Date;
|
|
70
|
+
}): Promise<void>;
|
|
71
|
+
private getCookiesBiDi;
|
|
72
|
+
private getCookiesClassic;
|
|
73
|
+
private setCookiesBiDi;
|
|
74
|
+
private setCookiesClassic;
|
|
75
|
+
private normalizeCookie;
|
|
76
|
+
private normalizeCookieValue;
|
|
77
|
+
private getLocalStorage;
|
|
78
|
+
private getSessionStorage;
|
|
79
|
+
private setLocalStorage;
|
|
80
|
+
private setSessionStorage;
|
|
81
|
+
private getCurrentDomain;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/lib/bidi/storage.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EACV,eAAe,EACf,MAAM,EACN,WAAW,EACX,YAAY,EAKb,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,mBAAmB;IAClC,qDAAqD;IACrD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,0DAA0D;IAC1D,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,6DAA6D;IAC7D,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAC,CAAkB;gBAEtB,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,eAAe;IAMxF;;;OAGG;IACG,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,YAAY,CAAC;IAMvF;;OAEG;IACG,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM5C;;OAEG;IACG,QAAQ,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,YAAY,CAAC;IA6BxE;;OAEG;IACG,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBlD;;OAEG;IACG,UAAU,CAAC,MAAM,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAOhF;;OAEG;IACG,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQlE;;OAEG;IACG,YAAY,CAAC,MAAM,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB9E;;OAEG;IACG,SAAS,CAAC,MAAM,EAAE;QACtB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;QACrC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KACxB,GAAG,OAAO,CAAC,IAAI,CAAC;YAsBH,cAAc;YAgBd,iBAAiB;YAyCjB,cAAc;YAiCd,iBAAiB;IAkB/B,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,oBAAoB;YAId,eAAe;YAuBf,iBAAiB;YAuBjB,eAAe;YAef,iBAAiB;YAcjB,gBAAgB;CAG/B"}
|