@cogitator-ai/browser 0.1.6 → 0.3.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 (100) hide show
  1. package/README.md +59 -33
  2. package/dist/index.d.ts +6 -5
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +3 -3
  5. package/dist/index.js.map +1 -1
  6. package/dist/session.d.ts +11 -0
  7. package/dist/session.d.ts.map +1 -1
  8. package/dist/session.js +181 -84
  9. package/dist/session.js.map +1 -1
  10. package/dist/stealth/evasions.d.ts +2 -0
  11. package/dist/stealth/evasions.d.ts.map +1 -1
  12. package/dist/stealth/evasions.js +52 -4
  13. package/dist/stealth/evasions.js.map +1 -1
  14. package/dist/stealth/human-like.d.ts +21 -3
  15. package/dist/stealth/human-like.d.ts.map +1 -1
  16. package/dist/stealth/human-like.js +66 -25
  17. package/dist/stealth/human-like.js.map +1 -1
  18. package/dist/stealth/index.d.ts +7 -3
  19. package/dist/stealth/index.d.ts.map +1 -1
  20. package/dist/stealth/index.js +4 -2
  21. package/dist/stealth/index.js.map +1 -1
  22. package/dist/stealth/user-agents.d.ts.map +1 -1
  23. package/dist/stealth/user-agents.js +2 -3
  24. package/dist/stealth/user-agents.js.map +1 -1
  25. package/dist/tools/extraction.d.ts.map +1 -1
  26. package/dist/tools/extraction.js +36 -39
  27. package/dist/tools/extraction.js.map +1 -1
  28. package/dist/tools/index.d.ts +1 -1
  29. package/dist/tools/index.d.ts.map +1 -1
  30. package/dist/tools/index.js +1 -1
  31. package/dist/tools/index.js.map +1 -1
  32. package/dist/tools/interaction.d.ts +2 -2
  33. package/dist/tools/interaction.d.ts.map +1 -1
  34. package/dist/tools/interaction.js +30 -11
  35. package/dist/tools/interaction.js.map +1 -1
  36. package/dist/tools/network.d.ts +21 -28
  37. package/dist/tools/network.d.ts.map +1 -1
  38. package/dist/tools/network.js +370 -107
  39. package/dist/tools/network.js.map +1 -1
  40. package/dist/tools/vision.d.ts +2 -0
  41. package/dist/tools/vision.d.ts.map +1 -1
  42. package/dist/tools/vision.js +22 -14
  43. package/dist/tools/vision.js.map +1 -1
  44. package/dist/utils/human-mode.d.ts +5 -0
  45. package/dist/utils/human-mode.d.ts.map +1 -0
  46. package/dist/utils/human-mode.js +10 -0
  47. package/dist/utils/human-mode.js.map +1 -0
  48. package/dist/utils/page-helpers.d.ts +1 -0
  49. package/dist/utils/page-helpers.d.ts.map +1 -1
  50. package/dist/utils/page-helpers.js +66 -18
  51. package/dist/utils/page-helpers.js.map +1 -1
  52. package/dist/utils/schemas.d.ts +7 -2
  53. package/dist/utils/schemas.d.ts.map +1 -1
  54. package/dist/utils/schemas.js +36 -15
  55. package/dist/utils/schemas.js.map +1 -1
  56. package/package.json +12 -10
  57. package/dist/__tests__/browser-tools.test.d.ts +0 -2
  58. package/dist/__tests__/browser-tools.test.d.ts.map +0 -1
  59. package/dist/__tests__/browser-tools.test.js +0 -120
  60. package/dist/__tests__/browser-tools.test.js.map +0 -1
  61. package/dist/__tests__/extraction.test.d.ts +0 -2
  62. package/dist/__tests__/extraction.test.d.ts.map +0 -1
  63. package/dist/__tests__/extraction.test.js +0 -267
  64. package/dist/__tests__/extraction.test.js.map +0 -1
  65. package/dist/__tests__/interaction.test.d.ts +0 -2
  66. package/dist/__tests__/interaction.test.d.ts.map +0 -1
  67. package/dist/__tests__/interaction.test.js +0 -376
  68. package/dist/__tests__/interaction.test.js.map +0 -1
  69. package/dist/__tests__/navigation.test.d.ts +0 -2
  70. package/dist/__tests__/navigation.test.d.ts.map +0 -1
  71. package/dist/__tests__/navigation.test.js +0 -235
  72. package/dist/__tests__/navigation.test.js.map +0 -1
  73. package/dist/__tests__/network.test.d.ts +0 -2
  74. package/dist/__tests__/network.test.d.ts.map +0 -1
  75. package/dist/__tests__/network.test.js +0 -508
  76. package/dist/__tests__/network.test.js.map +0 -1
  77. package/dist/__tests__/page-helpers.test.d.ts +0 -2
  78. package/dist/__tests__/page-helpers.test.d.ts.map +0 -1
  79. package/dist/__tests__/page-helpers.test.js +0 -321
  80. package/dist/__tests__/page-helpers.test.js.map +0 -1
  81. package/dist/__tests__/schemas.test.d.ts +0 -2
  82. package/dist/__tests__/schemas.test.d.ts.map +0 -1
  83. package/dist/__tests__/schemas.test.js +0 -518
  84. package/dist/__tests__/schemas.test.js.map +0 -1
  85. package/dist/__tests__/selectors.test.d.ts +0 -2
  86. package/dist/__tests__/selectors.test.d.ts.map +0 -1
  87. package/dist/__tests__/selectors.test.js +0 -157
  88. package/dist/__tests__/selectors.test.js.map +0 -1
  89. package/dist/__tests__/session.test.d.ts +0 -2
  90. package/dist/__tests__/session.test.d.ts.map +0 -1
  91. package/dist/__tests__/session.test.js +0 -325
  92. package/dist/__tests__/session.test.js.map +0 -1
  93. package/dist/__tests__/stealth.test.d.ts +0 -2
  94. package/dist/__tests__/stealth.test.d.ts.map +0 -1
  95. package/dist/__tests__/stealth.test.js +0 -353
  96. package/dist/__tests__/stealth.test.js.map +0 -1
  97. package/dist/__tests__/vision.test.d.ts +0 -2
  98. package/dist/__tests__/vision.test.d.ts.map +0 -1
  99. package/dist/__tests__/vision.test.js +0 -226
  100. package/dist/__tests__/vision.test.js.map +0 -1
@@ -1,5 +1,37 @@
1
+ import { createRequire } from 'node:module';
1
2
  import { tool } from '@cogitator-ai/core';
2
- import { interceptRequestSchema, waitForResponseSchema, blockResourcesSchema, captureHarSchema, getApiCallsSchema, } from '../utils/schemas.js';
3
+ import { interceptRequestSchema, removeInterceptorSchema, waitForResponseSchema, blockResourcesSchema, captureHarSchema, getApiCallsSchema, } from '../utils/schemas.js';
4
+ const MAX_API_CALLS = 1000;
5
+ const MAX_HAR_ENTRIES = 5000;
6
+ const HAR_SETTLE_TIMEOUT_MS = 2000;
7
+ const MAX_HAR_BODY_BYTES = 1_000_000;
8
+ const REGEX_LITERAL = /^\/(.+)\/([dgimsuvy]*)$/;
9
+ const TEXTUAL_MIME = /^(text\/|application\/(json|javascript|ecmascript|xml|x-www-form-urlencoded|graphql)|application\/[\w.+-]+\+(json|xml)|image\/svg\+xml)/i;
10
+ function packageVersion() {
11
+ try {
12
+ const require = createRequire(import.meta.url);
13
+ const pkg = require('../../package.json');
14
+ return pkg.version ?? '0.0.0';
15
+ }
16
+ catch {
17
+ return '0.0.0';
18
+ }
19
+ }
20
+ export function toUrlMatcher(pattern) {
21
+ const literal = REGEX_LITERAL.exec(pattern);
22
+ if (!literal)
23
+ return pattern;
24
+ try {
25
+ return new RegExp(literal[1], literal[2].replace(/[gy]/g, ''));
26
+ }
27
+ catch {
28
+ throw new Error(`Invalid regular expression in urlPattern: ${pattern}`);
29
+ }
30
+ }
31
+ function createUrlPredicate(pattern) {
32
+ const matcher = toUrlMatcher(pattern);
33
+ return typeof matcher === 'string' ? (url) => url.includes(matcher) : (url) => matcher.test(url);
34
+ }
3
35
  function networkTimingMs(request) {
4
36
  let timing;
5
37
  try {
@@ -8,113 +40,367 @@ function networkTimingMs(request) {
8
40
  catch {
9
41
  return 0;
10
42
  }
11
- const start = timing.startTime;
12
43
  const end = timing.responseEnd;
13
- if (!Number.isFinite(start) || !Number.isFinite(end) || start < 0 || end < 0)
44
+ if (!Number.isFinite(end) || end < 0)
14
45
  return 0;
15
- return Math.max(0, end - start);
46
+ return end;
47
+ }
48
+ function startedDateTime(request) {
49
+ try {
50
+ const { startTime } = request.timing();
51
+ if (Number.isFinite(startTime) && startTime > 0) {
52
+ return new Date(startTime).toISOString();
53
+ }
54
+ }
55
+ catch { }
56
+ return new Date().toISOString();
57
+ }
58
+ function isApiRequest(request) {
59
+ const type = request.resourceType();
60
+ return type === 'xhr' || type === 'fetch';
61
+ }
62
+ async function readTextBody(response, mimeType) {
63
+ try {
64
+ const body = await response.body();
65
+ if (!TEXTUAL_MIME.test(mimeType) || body.byteLength > MAX_HAR_BODY_BYTES) {
66
+ return { size: body.byteLength };
67
+ }
68
+ return { text: body.toString('utf-8'), size: body.byteLength };
69
+ }
70
+ catch {
71
+ return { size: -1 };
72
+ }
73
+ }
74
+ function toNameValue(headers) {
75
+ return Object.entries(headers).map(([name, value]) => ({ name, value }));
76
+ }
77
+ function queryStringOf(url) {
78
+ try {
79
+ return Array.from(new URL(url).searchParams, ([name, value]) => ({ name, value }));
80
+ }
81
+ catch {
82
+ return [];
83
+ }
84
+ }
85
+ function toHarLog(entries) {
86
+ return {
87
+ log: {
88
+ version: '1.2',
89
+ creator: { name: '@cogitator-ai/browser', version: packageVersion() },
90
+ pages: [],
91
+ entries: entries.map((entry) => ({
92
+ startedDateTime: entry.startedDateTime,
93
+ time: entry.timing,
94
+ request: {
95
+ method: entry.method,
96
+ url: entry.url,
97
+ httpVersion: 'HTTP/1.1',
98
+ cookies: [],
99
+ headers: toNameValue(entry.requestHeaders),
100
+ queryString: queryStringOf(entry.url),
101
+ headersSize: -1,
102
+ bodySize: entry.requestBody ? Buffer.byteLength(entry.requestBody) : 0,
103
+ ...(entry.requestBody !== undefined
104
+ ? {
105
+ postData: {
106
+ mimeType: entry.requestHeaders['content-type'] ?? '',
107
+ text: entry.requestBody,
108
+ },
109
+ }
110
+ : {}),
111
+ },
112
+ response: {
113
+ status: entry.status,
114
+ statusText: entry.statusText,
115
+ httpVersion: 'HTTP/1.1',
116
+ cookies: [],
117
+ headers: toNameValue(entry.responseHeaders),
118
+ content: {
119
+ size: entry.bodySize,
120
+ mimeType: entry.mimeType,
121
+ ...(entry.responseBody !== undefined ? { text: entry.responseBody } : {}),
122
+ },
123
+ redirectURL: entry.responseHeaders.location ?? '',
124
+ headersSize: -1,
125
+ bodySize: entry.bodySize,
126
+ ...(entry.error ? { _error: entry.error } : {}),
127
+ },
128
+ cache: {},
129
+ timings: { send: 0, wait: entry.timing, receive: 0 },
130
+ })),
131
+ },
132
+ };
133
+ }
134
+ function toPublicHarEntry(entry) {
135
+ const result = {
136
+ url: entry.url,
137
+ method: entry.method,
138
+ status: entry.status,
139
+ timing: entry.timing,
140
+ requestHeaders: entry.requestHeaders,
141
+ responseHeaders: entry.responseHeaders,
142
+ };
143
+ if (entry.requestBody !== undefined)
144
+ result.requestBody = entry.requestBody;
145
+ if (entry.responseBody !== undefined)
146
+ result.responseBody = entry.responseBody;
147
+ return result;
16
148
  }
17
149
  class NetworkState {
150
+ _session;
18
151
  _interceptors = new Map();
19
152
  _apiCalls = [];
20
- _listenedPage = null;
21
- _responseHandler = null;
22
153
  _interceptorCounter = 0;
154
+ _context = null;
155
+ _har = null;
156
+ _harSlots = new WeakMap();
157
+ constructor(_session) {
158
+ this._session = _session;
159
+ _session.onStart((context) => this._attach(context));
160
+ }
23
161
  get apiCalls() {
24
162
  return this._apiCalls;
25
163
  }
26
- async addInterceptor(id, remover) {
27
- this._interceptors.set(id, remover);
164
+ get harCapturing() {
165
+ return this._har !== null;
166
+ }
167
+ clearApiCalls() {
168
+ this._apiCalls = [];
169
+ }
170
+ async addRoute(pattern, handler) {
171
+ const context = this._requireContext();
172
+ await context.route(pattern, handler);
173
+ const id = `interceptor_${++this._interceptorCounter}`;
174
+ this._interceptors.set(id, async () => {
175
+ await context.unroute(pattern, handler);
176
+ });
177
+ return id;
28
178
  }
29
179
  async removeInterceptor(id) {
30
180
  const remover = this._interceptors.get(id);
31
- if (remover) {
32
- await remover();
33
- this._interceptors.delete(id);
181
+ if (!remover)
182
+ return false;
183
+ this._interceptors.delete(id);
184
+ await remover();
185
+ return true;
186
+ }
187
+ async removeAllInterceptors() {
188
+ const ids = [...this._interceptors.keys()];
189
+ for (const id of ids) {
190
+ await this.removeInterceptor(id);
34
191
  }
192
+ return ids;
35
193
  }
36
- startListening(page) {
37
- if (this._listenedPage === page && this._responseHandler)
194
+ startHar() {
195
+ this._requireContext();
196
+ this._har = { entries: [], inflight: new Set(), truncated: false };
197
+ }
198
+ async stopHar() {
199
+ const har = this._har;
200
+ this._har = null;
201
+ if (!har)
202
+ return null;
203
+ if (har.inflight.size > 0) {
204
+ let timer;
205
+ await Promise.race([
206
+ Promise.allSettled([...har.inflight]),
207
+ new Promise((resolve) => {
208
+ timer = setTimeout(resolve, HAR_SETTLE_TIMEOUT_MS);
209
+ }),
210
+ ]);
211
+ clearTimeout(timer);
212
+ }
213
+ return {
214
+ entries: har.entries.filter((entry) => entry !== null),
215
+ truncated: har.truncated,
216
+ };
217
+ }
218
+ _requireContext() {
219
+ const context = this._session.context;
220
+ if (!context) {
221
+ throw new Error('BrowserSession not started');
222
+ }
223
+ if (context !== this._context) {
224
+ this._attach(context);
225
+ }
226
+ return context;
227
+ }
228
+ _attach(context) {
229
+ if (this._context === context)
230
+ return;
231
+ this._context = context;
232
+ this._interceptors.clear();
233
+ this._har = null;
234
+ context.on('request', (request) => {
235
+ if (this._context !== context)
236
+ return;
237
+ this._reserveHarSlot(request);
238
+ });
239
+ context.on('requestfinished', (request) => {
240
+ if (this._context !== context)
241
+ return;
242
+ this._observe(request, null);
243
+ });
244
+ context.on('requestfailed', (request) => {
245
+ if (this._context !== context)
246
+ return;
247
+ this._observe(request, request.failure()?.errorText ?? 'Request failed');
248
+ });
249
+ }
250
+ _reserveHarSlot(request) {
251
+ const har = this._har;
252
+ if (!har)
253
+ return;
254
+ if (har.entries.length >= MAX_HAR_ENTRIES) {
255
+ har.truncated = true;
38
256
  return;
39
- if (this._listenedPage && this._responseHandler) {
40
- this._listenedPage.removeListener('response', this._responseHandler);
41
257
  }
42
- this._responseHandler = (response) => {
43
- const request = response.request();
44
- const resourceType = request.resourceType();
45
- if (resourceType === 'xhr' || resourceType === 'fetch') {
258
+ let settle;
259
+ const settled = new Promise((resolve) => {
260
+ settle = () => {
261
+ har.inflight.delete(settled);
262
+ resolve();
263
+ };
264
+ });
265
+ har.inflight.add(settled);
266
+ this._harSlots.set(request, { har, index: har.entries.push(null) - 1, settle });
267
+ }
268
+ _observe(request, error) {
269
+ const slot = this._harSlots.get(request) ?? null;
270
+ this._harSlots.delete(request);
271
+ if (!slot && !isApiRequest(request))
272
+ return;
273
+ const work = this._record(request, error, slot);
274
+ if (slot) {
275
+ void work.finally(slot.settle);
276
+ }
277
+ }
278
+ async _record(request, error, slot) {
279
+ try {
280
+ const response = error ? null : await request.response();
281
+ const responseHeaders = response?.headers() ?? {};
282
+ const status = response?.status() ?? 0;
283
+ const timing = networkTimingMs(request);
284
+ if (isApiRequest(request)) {
46
285
  this._apiCalls.push({
47
286
  url: request.url(),
48
287
  method: request.method(),
49
- status: response.status(),
50
- timing: networkTimingMs(request),
288
+ status,
289
+ timing,
51
290
  requestHeaders: request.headers(),
52
- responseHeaders: response.headers(),
291
+ responseHeaders,
292
+ ...(error ? { error } : {}),
53
293
  });
294
+ if (this._apiCalls.length > MAX_API_CALLS) {
295
+ this._apiCalls.splice(0, this._apiCalls.length - MAX_API_CALLS);
296
+ }
54
297
  }
55
- };
56
- page.on('response', this._responseHandler);
57
- this._listenedPage = page;
58
- }
59
- nextId() {
60
- return `interceptor_${++this._interceptorCounter}`;
298
+ if (!slot)
299
+ return;
300
+ const mimeType = responseHeaders['content-type'] ?? '';
301
+ const body = response ? await readTextBody(response, mimeType) : { size: 0 };
302
+ const entry = {
303
+ url: request.url(),
304
+ method: request.method(),
305
+ status,
306
+ statusText: response?.statusText() ?? '',
307
+ timing,
308
+ startedDateTime: startedDateTime(request),
309
+ requestHeaders: request.headers(),
310
+ responseHeaders,
311
+ mimeType,
312
+ bodySize: body.size,
313
+ };
314
+ const postData = request.postData();
315
+ if (postData !== null)
316
+ entry.requestBody = postData;
317
+ if (body.text !== undefined)
318
+ entry.responseBody = body.text;
319
+ if (error)
320
+ entry.error = error;
321
+ slot.har.entries[slot.index] = entry;
322
+ }
323
+ catch { }
61
324
  }
62
- clearApiCalls() {
63
- this._apiCalls = [];
325
+ }
326
+ const networkStates = new WeakMap();
327
+ function networkStateFor(session) {
328
+ let state = networkStates.get(session);
329
+ if (!state) {
330
+ state = new NetworkState(session);
331
+ networkStates.set(session, state);
64
332
  }
333
+ return state;
65
334
  }
66
- export function createInterceptRequestTool(session, state) {
335
+ export function createInterceptRequestTool(session) {
336
+ const state = networkStateFor(session);
67
337
  return tool({
68
338
  name: 'browser_intercept_request',
69
- description: 'Intercept and modify, block, or continue HTTP requests matching a URL pattern.',
339
+ description: 'Intercept and modify, block, or continue HTTP requests matching a URL pattern in all tabs. Returns an interceptorId that can be passed to browser_remove_interceptor.',
70
340
  category: 'web',
71
341
  tags: ['browser', 'network'],
72
342
  parameters: interceptRequestSchema,
73
343
  execute: async (params) => {
74
- const page = session.page;
75
344
  if (params.action === 'modify' && !params.modify) {
76
345
  return {
77
346
  interceptorId: null,
78
347
  warning: "action 'modify' requires a 'modify' object with headers, body, or url; no interceptor was registered",
79
348
  };
80
349
  }
81
- const id = state.nextId();
82
350
  const handler = async (route) => {
83
351
  if (params.action === 'block') {
84
352
  await route.abort();
353
+ return;
85
354
  }
86
- else if (params.action === 'modify' && params.modify) {
355
+ if (params.action === 'modify' && params.modify) {
87
356
  const overrides = {};
88
- if (params.modify.headers)
89
- overrides.headers = params.modify.headers;
90
- if (params.modify.body)
357
+ if (params.modify.headers) {
358
+ overrides.headers = { ...route.request().headers(), ...params.modify.headers };
359
+ }
360
+ if (params.modify.body !== undefined)
91
361
  overrides.postData = params.modify.body;
92
- if (params.modify.url)
362
+ if (params.modify.url !== undefined)
93
363
  overrides.url = params.modify.url;
94
- await route.continue(overrides);
95
- }
96
- else {
97
- await route.continue();
364
+ await route.fallback(overrides);
365
+ return;
98
366
  }
367
+ await route.fallback();
99
368
  };
100
- await page.route(params.urlPattern, handler);
101
- await state.addInterceptor(id, async () => {
102
- await page.unroute(params.urlPattern, handler);
103
- });
104
- return { interceptorId: id };
369
+ const interceptorId = await state.addRoute(toUrlMatcher(params.urlPattern), handler);
370
+ return { interceptorId };
371
+ },
372
+ });
373
+ }
374
+ export function createRemoveInterceptorTool(session) {
375
+ const state = networkStateFor(session);
376
+ return tool({
377
+ name: 'browser_remove_interceptor',
378
+ description: 'Remove a request interceptor created by browser_intercept_request or browser_block_resources. Omit interceptorId to remove all interceptors.',
379
+ category: 'web',
380
+ tags: ['browser', 'network'],
381
+ parameters: removeInterceptorSchema,
382
+ execute: async (params) => {
383
+ if (params.interceptorId === undefined) {
384
+ return { removed: await state.removeAllInterceptors() };
385
+ }
386
+ const removed = await state.removeInterceptor(params.interceptorId);
387
+ return { removed: removed ? [params.interceptorId] : [] };
105
388
  },
106
389
  });
107
390
  }
108
391
  export function createWaitForResponseTool(session) {
109
392
  return tool({
110
393
  name: 'browser_wait_for_response',
111
- description: 'Wait for an HTTP response matching a URL pattern. Returns status, headers, and body.',
394
+ description: 'Wait for an HTTP response whose URL contains the given substring (or matches /regex/flags). Returns status, headers, and body.',
112
395
  category: 'web',
113
396
  tags: ['browser', 'network'],
114
397
  parameters: waitForResponseSchema,
115
398
  execute: async (params) => {
116
399
  const page = session.page;
117
- const response = await page.waitForResponse((resp) => resp.url().includes(params.urlPattern), { timeout: params.timeout });
400
+ const matches = createUrlPredicate(params.urlPattern);
401
+ const response = await page.waitForResponse((resp) => matches(resp.url()), {
402
+ timeout: params.timeout,
403
+ });
118
404
  let body;
119
405
  try {
120
406
  body = await response.text();
@@ -131,77 +417,45 @@ export function createWaitForResponseTool(session) {
131
417
  },
132
418
  });
133
419
  }
134
- export function createBlockResourcesTool(session, state) {
420
+ export function createBlockResourcesTool(session) {
421
+ const state = networkStateFor(session);
135
422
  return tool({
136
423
  name: 'browser_block_resources',
137
- description: 'Block specific resource types (images, stylesheets, fonts, media, scripts) from loading.',
424
+ description: 'Block specific resource types (images, stylesheets, fonts, media, scripts) from loading in all tabs.',
138
425
  category: 'web',
139
426
  tags: ['browser', 'network'],
140
427
  parameters: blockResourcesSchema,
141
428
  execute: async (params) => {
142
- const page = session.page;
143
429
  const types = new Set(params.types);
144
430
  const handler = async (route) => {
145
431
  if (types.has(route.request().resourceType())) {
146
432
  await route.abort();
147
433
  }
148
434
  else {
149
- await route.continue();
435
+ await route.fallback();
150
436
  }
151
437
  };
152
- const id = state.nextId();
153
- await page.route('**/*', handler);
154
- await state.addInterceptor(id, async () => {
155
- await page.unroute('**/*', handler);
156
- });
157
- return { blocking: true, interceptorId: id, types: params.types };
438
+ const interceptorId = await state.addRoute('**/*', handler);
439
+ return { blocking: true, interceptorId, types: params.types };
158
440
  },
159
441
  });
160
442
  }
161
443
  export function createCaptureHarTool(session) {
162
- let harEntries = [];
163
- let harCapturing = false;
164
- let responseHandler = null;
444
+ const state = networkStateFor(session);
165
445
  return tool({
166
446
  name: 'browser_capture_har',
167
- description: 'Start or stop capturing HTTP traffic in HAR format. On stop, returns all captured entries.',
447
+ description: 'Start or stop capturing HTTP traffic of all tabs. On stop, returns the captured entries and optionally writes a HAR 1.2 file.',
168
448
  category: 'web',
169
449
  tags: ['browser', 'network'],
170
450
  parameters: captureHarSchema,
171
451
  execute: async (params) => {
172
- const page = session.page;
173
452
  if (params.action === 'start') {
174
- harEntries = [];
175
- harCapturing = true;
176
- responseHandler = async (response) => {
177
- if (!harCapturing)
178
- return;
179
- const request = response.request();
180
- let body = '';
181
- try {
182
- body = await response.text();
183
- }
184
- catch {
185
- /* response body may not be available */
186
- }
187
- harEntries.push({
188
- url: request.url(),
189
- method: request.method(),
190
- status: response.status(),
191
- timing: networkTimingMs(request),
192
- requestHeaders: request.headers(),
193
- responseHeaders: response.headers(),
194
- responseBody: body,
195
- });
196
- };
197
- page.on('response', responseHandler);
453
+ state.startHar();
198
454
  return { capturing: true, entries: 0 };
199
455
  }
200
- harCapturing = false;
201
- if (responseHandler) {
202
- page.removeListener('response', responseHandler);
203
- responseHandler = null;
204
- }
456
+ const har = await state.stopHar();
457
+ const entries = har?.entries ?? [];
458
+ let savedPath;
205
459
  if (params.path) {
206
460
  const { writeFile } = await import('node:fs/promises');
207
461
  const path = await import('node:path');
@@ -210,43 +464,52 @@ export function createCaptureHarTool(session) {
210
464
  if (target !== basePath && !target.startsWith(basePath + path.sep)) {
211
465
  throw new Error(`HAR output path must be within the working directory: ${params.path}`);
212
466
  }
213
- await writeFile(target, JSON.stringify({ entries: harEntries }, null, 2));
467
+ await writeFile(target, JSON.stringify(toHarLog(entries), null, 2));
468
+ savedPath = target;
214
469
  }
215
- const entries = [...harEntries];
216
- harEntries = [];
217
- return { capturing: false, entries: entries.length, har: entries };
470
+ return {
471
+ capturing: false,
472
+ entries: entries.length,
473
+ truncated: har?.truncated ?? false,
474
+ har: entries.map(toPublicHarEntry),
475
+ ...(savedPath ? { path: savedPath } : {}),
476
+ };
218
477
  },
219
478
  });
220
479
  }
221
- export function createGetApiCallsTool(session, state) {
480
+ export function createGetApiCallsTool(session) {
481
+ const state = networkStateFor(session);
222
482
  return tool({
223
483
  name: 'browser_get_api_calls',
224
- description: 'Get captured XHR/fetch API calls, optionally filtered by URL pattern or HTTP method.',
484
+ description: 'Get XHR/fetch API calls captured since the session started, optionally filtered by URL substring (or /regex/flags) and HTTP method.',
225
485
  category: 'web',
226
486
  tags: ['browser', 'network'],
227
487
  parameters: getApiCallsSchema,
228
488
  execute: async (params) => {
229
- state.startListening(session.page);
230
489
  let calls = state.apiCalls;
231
490
  if (params.urlPattern) {
232
- calls = calls.filter((c) => c.url.includes(params.urlPattern));
491
+ const matches = createUrlPredicate(params.urlPattern);
492
+ calls = calls.filter((c) => matches(c.url));
233
493
  }
234
494
  if (params.method) {
235
495
  const method = params.method.toUpperCase();
236
496
  calls = calls.filter((c) => c.method === method);
237
497
  }
238
- return { calls };
498
+ const result = { calls: [...calls] };
499
+ if (params.clear)
500
+ state.clearApiCalls();
501
+ return result;
239
502
  },
240
503
  });
241
504
  }
242
505
  export function createNetworkTools(session) {
243
- const state = new NetworkState();
244
506
  return [
245
- createInterceptRequestTool(session, state),
507
+ createInterceptRequestTool(session),
246
508
  createWaitForResponseTool(session),
247
- createBlockResourcesTool(session, state),
509
+ createBlockResourcesTool(session),
248
510
  createCaptureHarTool(session),
249
- createGetApiCallsTool(session, state),
511
+ createGetApiCallsTool(session),
512
+ createRemoveInterceptorTool(session),
250
513
  ];
251
514
  }
252
515
  //# sourceMappingURL=network.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/tools/network.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/tools/network.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAI1C,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,GAOlB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,aAAa,GAAG,IAAI,CAAC;AAC3B,MAAM,eAAe,GAAG,IAAI,CAAC;AAC7B,MAAM,qBAAqB,GAAG,IAAI,CAAC;AACnC,MAAM,kBAAkB,GAAG,SAAS,CAAC;AACrC,MAAM,aAAa,GAAG,yBAAyB,CAAC;AAChD,MAAM,YAAY,GAChB,0IAA0I,CAAC;AAgC7I,SAAS,cAAc;IACrB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,oBAAoB,CAAyB,CAAC;QAClE,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5C,IAAI,CAAC,OAAO;QAAE,OAAO,OAAO,CAAC;IAC7B,IAAI,CAAC;QACH,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IACjE,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,6CAA6C,OAAO,EAAE,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAe;IACzC,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACtC,OAAO,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACnG,CAAC;AAED,SAAS,eAAe,CAAC,OAAgB;IACvC,IAAI,MAAkD,CAAC;IACvD,IAAI,CAAC;QACH,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC;IAC/B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IAC/C,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,eAAe,CAAC,OAAgB;IACvC,IAAI,CAAC;QACH,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QACvC,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YAChD,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;QAC3C,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IACV,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAClC,CAAC;AAED,SAAS,YAAY,CAAC,OAAgB;IACpC,MAAM,IAAI,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IACpC,OAAO,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,OAAO,CAAC;AAC5C,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,QAAkB,EAClB,QAAgB;IAEhB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,UAAU,GAAG,kBAAkB,EAAE,CAAC;YACzE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;QACnC,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;IACjE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;IACtB,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,OAA+B;IAClD,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,aAAa,CAAC,GAAW;IAChC,IAAI,CAAC;QACH,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACrF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,OAA2B;IAC3C,OAAO;QACL,GAAG,EAAE;YACH,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE;YACrE,KAAK,EAAE,EAAE;YACT,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBAC/B,eAAe,EAAE,KAAK,CAAC,eAAe;gBACtC,IAAI,EAAE,KAAK,CAAC,MAAM;gBAClB,OAAO,EAAE;oBACP,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,GAAG,EAAE,KAAK,CAAC,GAAG;oBACd,WAAW,EAAE,UAAU;oBACvB,OAAO,EAAE,EAAE;oBACX,OAAO,EAAE,WAAW,CAAC,KAAK,CAAC,cAAc,CAAC;oBAC1C,WAAW,EAAE,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC;oBACrC,WAAW,EAAE,CAAC,CAAC;oBACf,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;oBACtE,GAAG,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS;wBACjC,CAAC,CAAC;4BACE,QAAQ,EAAE;gCACR,QAAQ,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,EAAE;gCACpD,IAAI,EAAE,KAAK,CAAC,WAAW;6BACxB;yBACF;wBACH,CAAC,CAAC,EAAE,CAAC;iBACR;gBACD,QAAQ,EAAE;oBACR,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,WAAW,EAAE,UAAU;oBACvB,OAAO,EAAE,EAAE;oBACX,OAAO,EAAE,WAAW,CAAC,KAAK,CAAC,eAAe,CAAC;oBAC3C,OAAO,EAAE;wBACP,IAAI,EAAE,KAAK,CAAC,QAAQ;wBACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;wBACxB,GAAG,CAAC,KAAK,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAC1E;oBACD,WAAW,EAAE,KAAK,CAAC,eAAe,CAAC,QAAQ,IAAI,EAAE;oBACjD,WAAW,EAAE,CAAC,CAAC;oBACf,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAChD;gBACD,KAAK,EAAE,EAAE;gBACT,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE;aACrD,CAAC,CAAC;SACJ;KACF,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAuB;IAC/C,MAAM,MAAM,GAAa;QACvB,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,eAAe,EAAE,KAAK,CAAC,eAAe;KACvC,CAAC;IACF,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS;QAAE,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;IAC5E,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS;QAAE,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;IAC/E,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,YAAY;IAQa;IAPrB,aAAa,GAAG,IAAI,GAAG,EAA+B,CAAC;IACvD,SAAS,GAAoB,EAAE,CAAC;IAChC,mBAAmB,GAAG,CAAC,CAAC;IACxB,QAAQ,GAA0B,IAAI,CAAC;IACvC,IAAI,GAAsB,IAAI,CAAC;IAC/B,SAAS,GAAG,IAAI,OAAO,EAAoB,CAAC;IAEpD,YAA6B,QAAwB;QAAxB,aAAQ,GAAR,QAAQ,CAAgB;QACnD,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC;IAC5B,CAAC;IAED,aAAa;QACX,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,OAAwB,EACxB,OAAwC;QAExC,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACvC,MAAM,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACtC,MAAM,EAAE,GAAG,eAAe,EAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACvD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE;YACpC,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QACH,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,EAAU;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAC3B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC9B,MAAM,OAAO,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,qBAAqB;QACzB,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3C,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;YACrB,MAAM,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC1B,IAAI,KAAgD,CAAC;YACrD,MAAM,OAAO,CAAC,IAAI,CAAC;gBACjB,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACrC,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;oBAC5B,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;gBACrD,CAAC,CAAC;aACH,CAAC,CAAC;YACH,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;QACD,OAAO;YACL,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAA6B,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC;YACjF,SAAS,EAAE,GAAG,CAAC,SAAS;SACzB,CAAC;IACJ,CAAC;IAEO,eAAe;QACrB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QACtC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,OAAO,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC9B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,OAAO,CAAC,OAAuB;QACrC,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO;YAAE,OAAO;QACtC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAEjB,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE;YAChC,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO;gBAAE,OAAO;YACtC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,OAAO,EAAE,EAAE;YACxC,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO;gBAAE,OAAO;YACtC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,OAAO,EAAE,EAAE;YACtC,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO;gBAAE,OAAO;YACtC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,SAAS,IAAI,gBAAgB,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,eAAe,CAAC,OAAgB;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,eAAe,EAAE,CAAC;YAC1C,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC;YACrB,OAAO;QACT,CAAC;QACD,IAAI,MAAmB,CAAC;QACxB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAC5C,MAAM,GAAG,GAAG,EAAE;gBACZ,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC7B,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC1B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAClF,CAAC;IAEO,QAAQ,CAAC,OAAgB,EAAE,KAAoB;QACrD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;QACjD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC/B,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;YAAE,OAAO;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAChD,IAAI,IAAI,EAAE,CAAC;YACT,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,OAAO,CACnB,OAAgB,EAChB,KAAoB,EACpB,IAAoB;QAEpB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC;YACzD,MAAM,eAAe,GAAG,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAClD,MAAM,MAAM,GAAG,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;YACvC,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;YAExC,IAAI,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC1B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;oBAClB,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;oBAClB,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;oBACxB,MAAM;oBACN,MAAM;oBACN,cAAc,EAAE,OAAO,CAAC,OAAO,EAAE;oBACjC,eAAe;oBACf,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC5B,CAAC,CAAC;gBACH,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,aAAa,EAAE,CAAC;oBAC1C,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC;gBAClE,CAAC;YACH,CAAC;YAED,IAAI,CAAC,IAAI;gBAAE,OAAO;YAElB,MAAM,QAAQ,GAAG,eAAe,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;YACvD,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YAC7E,MAAM,KAAK,GAAqB;gBAC9B,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;gBAClB,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;gBACxB,MAAM;gBACN,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE;gBACxC,MAAM;gBACN,eAAe,EAAE,eAAe,CAAC,OAAO,CAAC;gBACzC,cAAc,EAAE,OAAO,CAAC,OAAO,EAAE;gBACjC,eAAe;gBACf,QAAQ;gBACR,QAAQ,EAAE,IAAI,CAAC,IAAI;aACpB,CAAC;YACF,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;YACpC,IAAI,QAAQ,KAAK,IAAI;gBAAE,KAAK,CAAC,WAAW,GAAG,QAAQ,CAAC;YACpD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;gBAAE,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC;YAC5D,IAAI,KAAK;gBAAE,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;YAC/B,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;QACvC,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC;CACF;AAED,MAAM,aAAa,GAAG,IAAI,OAAO,EAAgC,CAAC;AAElE,SAAS,eAAe,CAAC,OAAuB;IAC9C,IAAI,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACvC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,KAAK,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC;QAClC,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,OAAuB;IAChE,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACvC,OAAO,IAAI,CAAC;QACV,IAAI,EAAE,2BAA2B;QACjC,WAAW,EACT,uKAAuK;QACzK,QAAQ,EAAE,KAAc;QACxB,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;QAC5B,UAAU,EAAE,sBAAsB;QAClC,OAAO,EAAE,KAAK,EAAE,MAA6B,EAAE,EAAE;YAC/C,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBACjD,OAAO;oBACL,aAAa,EAAE,IAAI;oBACnB,OAAO,EACL,sGAAsG;iBACzG,CAAC;YACJ,CAAC;YAED,MAAM,OAAO,GAAG,KAAK,EAAE,KAAY,EAAE,EAAE;gBACrC,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;oBAC9B,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;oBACpB,OAAO;gBACT,CAAC;gBACD,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;oBAChD,MAAM,SAAS,GAIX,EAAE,CAAC;oBACP,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;wBAC1B,SAAS,CAAC,OAAO,GAAG,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBACjF,CAAC;oBACD,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS;wBAAE,SAAS,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;oBAC9E,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,SAAS;wBAAE,SAAS,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;oBACvE,MAAM,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;oBAChC,OAAO;gBACT,CAAC;gBACD,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;YACzB,CAAC,CAAC;YAEF,MAAM,aAAa,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;YACrF,OAAO,EAAE,aAAa,EAAE,CAAC;QAC3B,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,OAAuB;IACjE,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACvC,OAAO,IAAI,CAAC;QACV,IAAI,EAAE,4BAA4B;QAClC,WAAW,EACT,8IAA8I;QAChJ,QAAQ,EAAE,KAAc;QACxB,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;QAC5B,UAAU,EAAE,uBAAuB;QACnC,OAAO,EAAE,KAAK,EAAE,MAA8B,EAAE,EAAE;YAChD,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;gBACvC,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC,qBAAqB,EAAE,EAAE,CAAC;YAC1D,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YACpE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC5D,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,OAAuB;IAC/D,OAAO,IAAI,CAAC;QACV,IAAI,EAAE,2BAA2B;QACjC,WAAW,EACT,gIAAgI;QAClI,QAAQ,EAAE,KAAc;QACxB,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;QAC5B,UAAU,EAAE,qBAAqB;QACjC,OAAO,EAAE,KAAK,EAAE,MAA4B,EAAE,EAAE;YAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;YAC1B,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACtD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,CAAC,IAAc,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE;gBACnF,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB,CAAC,CAAC;YACH,IAAI,IAAY,CAAC;YACjB,IAAI,CAAC;gBACH,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC/B,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,GAAG,EAAE,CAAC;YACZ,CAAC;YACD,OAAO;gBACL,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE;gBACnB,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE;gBACzB,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE;gBAC3B,IAAI;aACL,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,OAAuB;IAC9D,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACvC,OAAO,IAAI,CAAC;QACV,IAAI,EAAE,yBAAyB;QAC/B,WAAW,EACT,sGAAsG;QACxG,QAAQ,EAAE,KAAc;QACxB,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;QAC5B,UAAU,EAAE,oBAAoB;QAChC,OAAO,EAAE,KAAK,EAAE,MAA2B,EAAE,EAAE;YAC7C,MAAM,KAAK,GAAG,IAAI,GAAG,CAAS,MAAM,CAAC,KAAK,CAAC,CAAC;YAE5C,MAAM,OAAO,GAAG,KAAK,EAAE,KAAY,EAAE,EAAE;gBACrC,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC;oBAC9C,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;gBACtB,CAAC;qBAAM,CAAC;oBACN,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACzB,CAAC;YACH,CAAC,CAAC;YAEF,MAAM,aAAa,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC5D,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;QAChE,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAuB;IAC1D,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACvC,OAAO,IAAI,CAAC;QACV,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EACT,+HAA+H;QACjI,QAAQ,EAAE,KAAc;QACxB,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;QAC5B,UAAU,EAAE,gBAAgB;QAC5B,OAAO,EAAE,KAAK,EAAE,MAAuB,EAAE,EAAE;YACzC,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;gBAC9B,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACjB,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;YACzC,CAAC;YAED,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;YAClC,MAAM,OAAO,GAAG,GAAG,EAAE,OAAO,IAAI,EAAE,CAAC;YAEnC,IAAI,SAA6B,CAAC;YAClC,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBAChB,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;gBACvD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;gBACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;gBAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;gBACnE,IAAI,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;oBACnE,MAAM,IAAI,KAAK,CAAC,yDAAyD,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC1F,CAAC;gBACD,MAAM,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBACpE,SAAS,GAAG,MAAM,CAAC;YACrB,CAAC;YAED,OAAO;gBACL,SAAS,EAAE,KAAK;gBAChB,OAAO,EAAE,OAAO,CAAC,MAAM;gBACvB,SAAS,EAAE,GAAG,EAAE,SAAS,IAAI,KAAK;gBAClC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;gBAClC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC1C,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAuB;IAC3D,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACvC,OAAO,IAAI,CAAC;QACV,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EACT,qIAAqI;QACvI,QAAQ,EAAE,KAAc;QACxB,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;QAC5B,UAAU,EAAE,iBAAiB;QAC7B,OAAO,EAAE,KAAK,EAAE,MAAwB,EAAE,EAAE;YAC1C,IAAI,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC;YAC3B,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;gBACtB,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBACtD,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9C,CAAC;YACD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAClB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;gBAC3C,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;YACnD,CAAC;YACD,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC;YACrC,IAAI,MAAM,CAAC,KAAK;gBAAE,KAAK,CAAC,aAAa,EAAE,CAAC;YACxC,OAAO,MAAM,CAAC;QAChB,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAuB;IACxD,OAAO;QACL,0BAA0B,CAAC,OAAO,CAAC;QACnC,yBAAyB,CAAC,OAAO,CAAC;QAClC,wBAAwB,CAAC,OAAO,CAAC;QACjC,oBAAoB,CAAC,OAAO,CAAC;QAC7B,qBAAqB,CAAC,OAAO,CAAC;QAC9B,2BAA2B,CAAC,OAAO,CAAC;KACrC,CAAC;AACJ,CAAC"}