@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
package/README.md CHANGED
@@ -1,11 +1,11 @@
1
1
  # @cogitator-ai/browser
2
2
 
3
- Browser automation tools for Cogitator AI agents. Playwright-based with 32 tools across 5 modules, vision mode, stealth system, structured data extraction, and network control.
3
+ Browser automation tools for Cogitator AI agents. Playwright-based with 33 tools across 5 modules, vision mode, stealth system, structured data extraction, and network control.
4
4
 
5
5
  ## Features
6
6
 
7
- - **32 Browser Tools** across 5 modules (navigation, interaction, extraction, vision, network)
8
- - **BrowserSession** -- managed browser lifecycle with tabs, cookies, proxy
7
+ - **33 Browser Tools** across 5 modules (navigation, interaction, extraction, vision, network)
8
+ - **BrowserSession** -- managed browser lifecycle with tabs (including popups), cookies, proxy, persistent profiles, and a tab limit
9
9
  - **Stealth Mode** -- fingerprint evasion, human-like typing/mouse, UA rotation
10
10
  - **Vision Mode** -- screenshot + accessibility tree for vision LLM navigation
11
11
  - **Smart Extraction** -- tables, structured data, links, clean text
@@ -29,7 +29,7 @@ await session.start();
29
29
 
30
30
  const agent = new Agent({
31
31
  name: 'web-researcher',
32
- model: 'gpt-4o',
32
+ model: 'gpt-6.1-sol',
33
33
  instructions: 'You browse the web and extract information.',
34
34
  tools: browserTools(session),
35
35
  });
@@ -62,7 +62,7 @@ await session.close();
62
62
  | Tool | Description |
63
63
  | ----------------------- | --------------------------------------------------------------------------------- |
64
64
  | `browser_click` | Click an element by CSS selector. Supports button, clickCount, position |
65
- | `browser_type` | Type text into an input. Stealth mode adds human-like keystroke delays |
65
+ | `browser_type` | Type text into an input. Stealth mode replaces the value with human-like keys |
66
66
  | `browser_select_option` | Select from a `<select>` element by value, label, or index |
67
67
  | `browser_hover` | Hover over an element |
68
68
  | `browser_scroll` | Scroll the page or a specific element in any direction |
@@ -75,32 +75,33 @@ await session.close();
75
75
 
76
76
  | Tool | Description |
77
77
  | ---------------------------- | ------------------------------------------------------------------ |
78
- | `browser_get_text` | Extract text from the page or a specific element |
78
+ | `browser_get_text` | Extract rendered text from the page or the first matching element |
79
79
  | `browser_get_html` | Get inner or outer HTML of the page or an element |
80
80
  | `browser_get_attribute` | Get the value of a DOM attribute |
81
81
  | `browser_get_links` | Extract all links with text, href, and title |
82
82
  | `browser_query_selector_all` | Query all matching elements with tag, text, attributes, visibility |
83
- | `browser_extract_table` | Extract structured data from HTML tables (headers + rows) |
84
- | `browser_extract_structured` | Extract clean readable text, stripping scripts/styles/SVG |
83
+ | `browser_extract_table` | Extract headers + rows from a table (or the first table inside) |
84
+ | `browser_extract_structured` | Extract rendered text, without scripts/styles/hidden elements |
85
85
 
86
86
  ### Vision (4 tools)
87
87
 
88
88
  | Tool | Description |
89
89
  | ------------------------------ | --------------------------------------------------------------------------------------- |
90
- | `browser_screenshot` | Screenshot the page or element. Returns base64 PNG/JPEG |
90
+ | `browser_screenshot` | Screenshot the page or element. Returns base64 PNG/JPEG with `mimeType` and dimensions |
91
91
  | `browser_screenshot_element` | Screenshot a specific element with bounding box coordinates |
92
92
  | `browser_find_by_description` | Find elements by natural language using the accessibility tree |
93
93
  | `browser_click_by_description` | Click an element by natural language description (tries role, text, label, placeholder) |
94
94
 
95
- ### Network (5 tools)
95
+ ### Network (6 tools)
96
96
 
97
- | Tool | Description |
98
- | --------------------------- | -------------------------------------------------------------------- |
99
- | `browser_intercept_request` | Intercept HTTP requests -- block, modify, or continue by URL pattern |
100
- | `browser_wait_for_response` | Wait for an HTTP response matching a URL pattern |
101
- | `browser_block_resources` | Block resource types (image, stylesheet, font, media, script) |
102
- | `browser_capture_har` | Start/stop HAR traffic capture. Returns all captured entries on stop |
103
- | `browser_get_api_calls` | Get captured XHR/fetch calls, filtered by URL pattern or method |
97
+ | Tool | Description |
98
+ | ---------------------------- | ------------------------------------------------------------------------------------- |
99
+ | `browser_intercept_request` | Block, modify, or continue requests matching a glob or `/regex/flags` in all tabs |
100
+ | `browser_remove_interceptor` | Remove one interceptor by ID, or all of them |
101
+ | `browser_wait_for_response` | Wait for a response whose URL contains a substring or matches `/regex/flags` |
102
+ | `browser_block_resources` | Block resource types (image, stylesheet, font, media, script) in all tabs |
103
+ | `browser_capture_har` | Start/stop traffic capture of all tabs; on stop returns entries and can write HAR 1.2 |
104
+ | `browser_get_api_calls` | XHR/fetch calls recorded since session start, filtered by URL or method; `clear` |
104
105
 
105
106
  ## Stealth Mode
106
107
 
@@ -123,18 +124,21 @@ const session = new BrowserSession({
123
124
  });
124
125
  ```
125
126
 
127
+ Options you omit fall back to the defaults above (all `true`), so `stealth: { humanLikeMouse: false }` keeps every other feature enabled.
128
+
126
129
  What stealth mode does:
127
130
 
128
- - Sets `navigator.webdriver` to `false`
131
+ - Sets `navigator.webdriver` to `false` (patched on `Navigator.prototype`, not as an own property)
129
132
  - Spoofs `navigator.plugins` with realistic Chrome plugins
130
- - Sets `navigator.languages` to `['en-US', 'en']`
133
+ - Sets `navigator.languages` from `locale` (e.g. `de-DE` -> `['de-DE', 'de']`, default `['en-US', 'en']`)
134
+ - Aligns `navigator.platform` and `navigator.userAgentData.platform` with the user agent in use
131
135
  - Randomizes canvas fingerprint (1-bit pixel noise)
132
136
  - Spoofs WebGL vendor/renderer (Intel Iris)
133
137
  - Injects `window.chrome` runtime stubs
134
138
  - Overrides `Permissions.query` for notifications
135
- - Rotates User-Agent strings per browser type
139
+ - Rotates desktop User-Agent strings per browser type
136
140
  - Adds human-like typing delays (50-150ms per character)
137
- - Uses bezier curve mouse movement for clicks
141
+ - Moves the mouse along bezier curves for `browser_click`, `browser_click_by_description`, `browser_hover`, and wheels in small steps for `browser_scroll`
138
142
 
139
143
  ## Vision Mode
140
144
 
@@ -166,21 +170,25 @@ await session.start();
166
170
 
167
171
  const tools = [...createNavigationTools(session), ...createNetworkTools(session)];
168
172
 
169
- // Agent can intercept requests:
173
+ // Agent can intercept requests (glob or /regex/flags), in every tab:
170
174
  // browser_intercept_request({ urlPattern: "**/ads/**", action: "block" })
175
+ // browser_intercept_request({ urlPattern: "/\\.(png|jpe?g)$/i", action: "block" })
176
+ // browser_remove_interceptor({ interceptorId: "interceptor_1" })
171
177
 
172
178
  // Block resource types to speed up loading:
173
179
  // browser_block_resources({ types: ["image", "font", "stylesheet"] })
174
180
 
175
- // Monitor API calls made by the page:
176
- // browser_get_api_calls({ urlPattern: "/api/", method: "POST" })
181
+ // Monitor API calls made by the page since the session started:
182
+ // browser_get_api_calls({ urlPattern: "/api/", method: "POST", clear: true })
177
183
 
178
- // Capture HAR traffic:
184
+ // Capture traffic and save a HAR 1.2 file (path must be inside the working directory):
179
185
  // browser_capture_har({ action: "start" })
180
186
  // ... navigate and interact ...
181
187
  // browser_capture_har({ action: "stop", path: "./traffic.har" })
182
188
  ```
183
189
 
190
+ Interceptors are registered on the browser context, so they also apply to tabs opened later. `continue` and `modify` hand the request to the next matching interceptor (`route.fallback`), so blocking rules keep working when several interceptors overlap. `modify.headers` are merged into the original request headers. API call history keeps the latest 1000 calls; HAR capture keeps up to 5000 entries and stores bodies only for textual responses up to 1 MB.
191
+
184
192
  ## BrowserSession API
185
193
 
186
194
  ### Constructor
@@ -202,9 +210,11 @@ interface BrowserSessionConfig {
202
210
  locale?: string; // browser locale (e.g., 'en-US')
203
211
  timezone?: string; // timezone ID (e.g., 'America/New_York')
204
212
  geolocation?: { latitude: number; longitude: number };
205
- cookies?: BrowserCookie[]; // pre-load cookies
213
+ persistentContext?: string; // user data dir; profile (cookies, storage) survives restarts
214
+ cookies?: BrowserCookie[]; // pre-load cookies (domain cookies default to path '/')
206
215
  timeout?: number; // navigation timeout, default: 30000ms
207
216
  actionTimeout?: number; // action timeout, default: 10000ms
217
+ pool?: { maxPages: number }; // maximum number of open tabs for newTab()
208
218
  }
209
219
  ```
210
220
 
@@ -212,14 +222,23 @@ interface BrowserSessionConfig {
212
222
 
213
223
  ```typescript
214
224
  await session.start(); // launch browser, create context and first page
225
+ await session.ensureStarted(); // start once; concurrent callers share one launch
215
226
  await session.close(); // close browser and cleanup
227
+
228
+ const unsubscribe = session.onStart((context) => {
229
+ // runs after every successful start (immediately if already started)
230
+ });
216
231
  ```
217
232
 
233
+ If the browser or context closes unexpectedly, the session resets itself and the next `ensureStarted()` (called by every tool from `browserTools`) relaunches it. A failed start closes anything it launched.
234
+
218
235
  ### Properties
219
236
 
220
237
  ```typescript
221
238
  session.page; // active Playwright Page
222
- session.tabs; // all open Page[]
239
+ session.tabs; // all open Page[] (includes popups and target=_blank pages)
240
+ session.activeTabIndex; // index of the active tab
241
+ session.started; // whether a context is running
223
242
  session.browser; // Playwright Browser instance
224
243
  session.context; // Playwright BrowserContext
225
244
  session.config; // current config
@@ -230,7 +249,7 @@ session.stealthConfig; // resolved StealthConfig or null
230
249
  ### Tab Management
231
250
 
232
251
  ```typescript
233
- const page = await session.newTab('https://example.com'); // open new tab
252
+ const page = await session.newTab('https://example.com'); // open new tab (respects pool.maxPages)
234
253
  session.switchTab(1); // switch to tab by index
235
254
  await session.closeTab(0); // close tab by index
236
255
  ```
@@ -249,7 +268,7 @@ await session.loadCookies('./cookies.json');
249
268
  Load only the tool modules you need:
250
269
 
251
270
  ```typescript
252
- // all 32 tools
271
+ // all 33 tools
253
272
  const tools = browserTools(session);
254
273
 
255
274
  // only navigation + extraction (14 tools)
@@ -292,7 +311,7 @@ const locator = await smartSelect(page, 'Submit');
292
311
  // findFormField tries name, placeholder, aria-label, label text
293
312
  const input = await findFormField(page, 'Email');
294
313
 
295
- // getReadableText strips scripts/styles and returns clean text
314
+ // getReadableText returns rendered text (no scripts, styles, or hidden elements)
296
315
  const text = await getReadableText(page);
297
316
 
298
317
  // getAccessibilityTree returns simplified a11y tree
@@ -307,6 +326,7 @@ Use stealth primitives directly outside of BrowserSession:
307
326
  import {
308
327
  humanLikeType,
309
328
  humanLikeClick,
329
+ humanLikeHover,
310
330
  humanLikeScroll,
311
331
  getRandomUserAgent,
312
332
  getAllUserAgents,
@@ -317,11 +337,17 @@ import {
317
337
 
318
338
  // human-like input on any Playwright page
319
339
  await humanLikeType(page, '#search', 'cogitator ai');
320
- await humanLikeClick(page, '.submit-btn');
321
- await humanLikeScroll(page, 'down', 500);
340
+ await humanLikeClick(page, '.submit-btn'); // selector or Locator
341
+ await humanLikeClick(page, page.getByRole('button', { name: 'Buy' }), { clickCount: 2 });
342
+ await humanLikeHover(page, '#menu');
343
+ await humanLikeScroll(page, 'down', 500); // up | down | left | right
322
344
 
323
- // get a random UA for a browser type
345
+ // get a random desktop UA for a browser type
324
346
  const ua = getRandomUserAgent('chromium');
347
+
348
+ // evasion scripts consistent with that user agent and locale
349
+ const scripts = getEvasionScripts({ userAgent: ua, locale: 'de-DE' });
350
+ await applyStealthToContext(context, { blockWebDriver: true }, { userAgent: ua, locale: 'de-DE' });
325
351
  ```
326
352
 
327
353
  ## License
package/dist/index.d.ts CHANGED
@@ -1,10 +1,11 @@
1
1
  export { BrowserSession } from './session.js';
2
+ export type { BrowserStartListener } from './session.js';
2
3
  export { browserTools } from './tools/index.js';
3
- export { createNavigationTools, createNavigateTool, createGoBackTool, createGoForwardTool, createReloadTool, createWaitForNavigationTool, createGetCurrentUrlTool, createWaitForSelectorTool, createInteractionTools, createClickTool, createTypeTool, createSelectOptionTool, createHoverTool, createScrollTool, createPressKeyTool, createDragAndDropTool, createFillFormTool, createUploadFileTool, createExtractionTools, createGetTextTool, createGetHtmlTool, createGetAttributeTool, createGetLinksTool, createQuerySelectorAllTool, createExtractTableTool, createExtractStructuredTool, createVisionTools, createScreenshotTool, createScreenshotElementTool, createFindByDescriptionTool, createClickByDescriptionTool, createNetworkTools, createInterceptRequestTool, createWaitForResponseTool, createBlockResourcesTool, createCaptureHarTool, createGetApiCallsTool, } from './tools/index.js';
4
- export { navigateSchema, goBackSchema, goForwardSchema, reloadSchema, waitForNavigationSchema, getCurrentUrlSchema, waitForSelectorSchema, clickSchema, typeSchema, selectOptionSchema, hoverSchema, scrollSchema, pressKeySchema, dragAndDropSchema, fillFormSchema, uploadFileSchema, getTextSchema, getHtmlSchema, getAttributeSchema, getLinksSchema, querySelectorAllSchema, extractTableSchema, extractStructuredSchema, screenshotSchema, screenshotElementSchema, findByDescriptionSchema, clickByDescriptionSchema, interceptRequestSchema, waitForResponseSchema, blockResourcesSchema, captureHarSchema, getApiCallsSchema, } from './utils/schemas.js';
5
- export type { NavigateInput, GoBackInput, GoForwardInput, ReloadInput, WaitForNavigationInput, GetCurrentUrlInput, WaitForSelectorInput, ClickInput, TypeInput, SelectOptionInput, HoverInput, ScrollInput, PressKeyInput, DragAndDropInput, FillFormInput, UploadFileInput, GetTextInput, GetHtmlInput, GetAttributeInput, GetLinksInput, QuerySelectorAllInput, ExtractTableInput, ExtractStructuredInput, ScreenshotInput, ScreenshotElementInput, FindByDescriptionInput, ClickByDescriptionInput, InterceptRequestInput, WaitForResponseInput, BlockResourcesInput, CaptureHarInput, GetApiCallsInput, } from './utils/schemas.js';
6
- export { applyStealthToContext, getStealthLaunchOptions, getEvasionScripts, humanLikeType, humanLikeClick, humanLikeScroll, getRandomUserAgent, getAllUserAgents, } from './stealth/index.js';
7
- export type { EvasionScriptsOptions, HumanLikeClickOptions } from './stealth/index.js';
4
+ export { createNavigationTools, createNavigateTool, createGoBackTool, createGoForwardTool, createReloadTool, createWaitForNavigationTool, createGetCurrentUrlTool, createWaitForSelectorTool, createInteractionTools, createClickTool, createTypeTool, createSelectOptionTool, createHoverTool, createScrollTool, createPressKeyTool, createDragAndDropTool, createFillFormTool, createUploadFileTool, createExtractionTools, createGetTextTool, createGetHtmlTool, createGetAttributeTool, createGetLinksTool, createQuerySelectorAllTool, createExtractTableTool, createExtractStructuredTool, createVisionTools, createScreenshotTool, createScreenshotElementTool, createFindByDescriptionTool, createClickByDescriptionTool, createNetworkTools, createInterceptRequestTool, createRemoveInterceptorTool, createWaitForResponseTool, createBlockResourcesTool, createCaptureHarTool, createGetApiCallsTool, } from './tools/index.js';
5
+ export { navigateSchema, goBackSchema, goForwardSchema, reloadSchema, waitForNavigationSchema, getCurrentUrlSchema, waitForSelectorSchema, clickSchema, typeSchema, selectOptionSchema, hoverSchema, scrollSchema, pressKeySchema, dragAndDropSchema, fillFormSchema, uploadFileSchema, getTextSchema, getHtmlSchema, getAttributeSchema, getLinksSchema, querySelectorAllSchema, extractTableSchema, extractStructuredSchema, screenshotSchema, screenshotElementSchema, findByDescriptionSchema, clickByDescriptionSchema, interceptRequestSchema, removeInterceptorSchema, waitForResponseSchema, blockResourcesSchema, captureHarSchema, getApiCallsSchema, } from './utils/schemas.js';
6
+ export type { NavigateInput, GoBackInput, GoForwardInput, ReloadInput, WaitForNavigationInput, GetCurrentUrlInput, WaitForSelectorInput, ClickInput, TypeInput, SelectOptionInput, HoverInput, ScrollInput, PressKeyInput, DragAndDropInput, FillFormInput, UploadFileInput, GetTextInput, GetHtmlInput, GetAttributeInput, GetLinksInput, QuerySelectorAllInput, ExtractTableInput, ExtractStructuredInput, ScreenshotInput, ScreenshotElementInput, FindByDescriptionInput, ClickByDescriptionInput, InterceptRequestInput, RemoveInterceptorInput, WaitForResponseInput, BlockResourcesInput, CaptureHarInput, GetApiCallsInput, } from './utils/schemas.js';
7
+ export { applyStealthToContext, getStealthLaunchOptions, getEvasionScripts, humanLikeType, humanLikeClick, humanLikeHover, humanLikeScroll, getRandomUserAgent, getAllUserAgents, } from './stealth/index.js';
8
+ export type { EvasionScriptsOptions, HumanLikeClickOptions, HumanLikeHoverOptions, StealthContextOptions, } from './stealth/index.js';
8
9
  export { smartSelect, findFormField } from './utils/selectors.js';
9
10
  export { getReadableText, getAccessibilityTree, elementToInfo } from './utils/page-helpers.js';
10
11
  export type { AccessibilityNode } from './utils/page-helpers.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,2BAA2B,EAC3B,uBAAuB,EACvB,yBAAyB,EACzB,sBAAsB,EACtB,eAAe,EACf,cAAc,EACd,sBAAsB,EACtB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,EAClB,0BAA0B,EAC1B,sBAAsB,EACtB,2BAA2B,EAC3B,iBAAiB,EACjB,oBAAoB,EACpB,2BAA2B,EAC3B,2BAA2B,EAC3B,4BAA4B,EAC5B,kBAAkB,EAClB,0BAA0B,EAC1B,yBAAyB,EACzB,wBAAwB,EACxB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,cAAc,EACd,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,EACrB,WAAW,EACX,UAAU,EACV,kBAAkB,EAClB,WAAW,EACX,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,sBAAsB,EACtB,kBAAkB,EAClB,uBAAuB,EACvB,gBAAgB,EAChB,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EACV,aAAa,EACb,WAAW,EACX,cAAc,EACd,WAAW,EACX,sBAAsB,EACtB,kBAAkB,EAClB,oBAAoB,EACpB,UAAU,EACV,SAAS,EACT,iBAAiB,EACjB,UAAU,EACV,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,qBAAqB,EACrB,iBAAiB,EACjB,sBAAsB,EACtB,eAAe,EACf,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,WAAW,CAAC;AAEnB,YAAY,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAE9E,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC5F,YAAY,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,YAAY,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,2BAA2B,EAC3B,uBAAuB,EACvB,yBAAyB,EACzB,sBAAsB,EACtB,eAAe,EACf,cAAc,EACd,sBAAsB,EACtB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,EAClB,0BAA0B,EAC1B,sBAAsB,EACtB,2BAA2B,EAC3B,iBAAiB,EACjB,oBAAoB,EACpB,2BAA2B,EAC3B,2BAA2B,EAC3B,4BAA4B,EAC5B,kBAAkB,EAClB,0BAA0B,EAC1B,2BAA2B,EAC3B,yBAAyB,EACzB,wBAAwB,EACxB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,cAAc,EACd,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,EACrB,WAAW,EACX,UAAU,EACV,kBAAkB,EAClB,WAAW,EACX,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,sBAAsB,EACtB,kBAAkB,EAClB,uBAAuB,EACvB,gBAAgB,EAChB,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EACV,aAAa,EACb,WAAW,EACX,cAAc,EACd,WAAW,EACX,sBAAsB,EACtB,kBAAkB,EAClB,oBAAoB,EACpB,UAAU,EACV,SAAS,EACT,iBAAiB,EACjB,UAAU,EACV,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,qBAAqB,EACrB,iBAAiB,EACjB,sBAAsB,EACtB,eAAe,EACf,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,WAAW,CAAC;AAEnB,YAAY,EACV,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC5F,YAAY,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC"}
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  export { BrowserSession } from './session.js';
2
2
  export { browserTools } from './tools/index.js';
3
- export { createNavigationTools, createNavigateTool, createGoBackTool, createGoForwardTool, createReloadTool, createWaitForNavigationTool, createGetCurrentUrlTool, createWaitForSelectorTool, createInteractionTools, createClickTool, createTypeTool, createSelectOptionTool, createHoverTool, createScrollTool, createPressKeyTool, createDragAndDropTool, createFillFormTool, createUploadFileTool, createExtractionTools, createGetTextTool, createGetHtmlTool, createGetAttributeTool, createGetLinksTool, createQuerySelectorAllTool, createExtractTableTool, createExtractStructuredTool, createVisionTools, createScreenshotTool, createScreenshotElementTool, createFindByDescriptionTool, createClickByDescriptionTool, createNetworkTools, createInterceptRequestTool, createWaitForResponseTool, createBlockResourcesTool, createCaptureHarTool, createGetApiCallsTool, } from './tools/index.js';
4
- export { navigateSchema, goBackSchema, goForwardSchema, reloadSchema, waitForNavigationSchema, getCurrentUrlSchema, waitForSelectorSchema, clickSchema, typeSchema, selectOptionSchema, hoverSchema, scrollSchema, pressKeySchema, dragAndDropSchema, fillFormSchema, uploadFileSchema, getTextSchema, getHtmlSchema, getAttributeSchema, getLinksSchema, querySelectorAllSchema, extractTableSchema, extractStructuredSchema, screenshotSchema, screenshotElementSchema, findByDescriptionSchema, clickByDescriptionSchema, interceptRequestSchema, waitForResponseSchema, blockResourcesSchema, captureHarSchema, getApiCallsSchema, } from './utils/schemas.js';
5
- export { applyStealthToContext, getStealthLaunchOptions, getEvasionScripts, humanLikeType, humanLikeClick, humanLikeScroll, getRandomUserAgent, getAllUserAgents, } from './stealth/index.js';
3
+ export { createNavigationTools, createNavigateTool, createGoBackTool, createGoForwardTool, createReloadTool, createWaitForNavigationTool, createGetCurrentUrlTool, createWaitForSelectorTool, createInteractionTools, createClickTool, createTypeTool, createSelectOptionTool, createHoverTool, createScrollTool, createPressKeyTool, createDragAndDropTool, createFillFormTool, createUploadFileTool, createExtractionTools, createGetTextTool, createGetHtmlTool, createGetAttributeTool, createGetLinksTool, createQuerySelectorAllTool, createExtractTableTool, createExtractStructuredTool, createVisionTools, createScreenshotTool, createScreenshotElementTool, createFindByDescriptionTool, createClickByDescriptionTool, createNetworkTools, createInterceptRequestTool, createRemoveInterceptorTool, createWaitForResponseTool, createBlockResourcesTool, createCaptureHarTool, createGetApiCallsTool, } from './tools/index.js';
4
+ export { navigateSchema, goBackSchema, goForwardSchema, reloadSchema, waitForNavigationSchema, getCurrentUrlSchema, waitForSelectorSchema, clickSchema, typeSchema, selectOptionSchema, hoverSchema, scrollSchema, pressKeySchema, dragAndDropSchema, fillFormSchema, uploadFileSchema, getTextSchema, getHtmlSchema, getAttributeSchema, getLinksSchema, querySelectorAllSchema, extractTableSchema, extractStructuredSchema, screenshotSchema, screenshotElementSchema, findByDescriptionSchema, clickByDescriptionSchema, interceptRequestSchema, removeInterceptorSchema, waitForResponseSchema, blockResourcesSchema, captureHarSchema, getApiCallsSchema, } from './utils/schemas.js';
5
+ export { applyStealthToContext, getStealthLaunchOptions, getEvasionScripts, humanLikeType, humanLikeClick, humanLikeHover, humanLikeScroll, getRandomUserAgent, getAllUserAgents, } from './stealth/index.js';
6
6
  export { smartSelect, findFormField } from './utils/selectors.js';
7
7
  export { getReadableText, getAccessibilityTree, elementToInfo } from './utils/page-helpers.js';
8
8
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,2BAA2B,EAC3B,uBAAuB,EACvB,yBAAyB,EACzB,sBAAsB,EACtB,eAAe,EACf,cAAc,EACd,sBAAsB,EACtB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,EAClB,0BAA0B,EAC1B,sBAAsB,EACtB,2BAA2B,EAC3B,iBAAiB,EACjB,oBAAoB,EACpB,2BAA2B,EAC3B,2BAA2B,EAC3B,4BAA4B,EAC5B,kBAAkB,EAClB,0BAA0B,EAC1B,yBAAyB,EACzB,wBAAwB,EACxB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,cAAc,EACd,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,EACrB,WAAW,EACX,UAAU,EACV,kBAAkB,EAClB,WAAW,EACX,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,sBAAsB,EACtB,kBAAkB,EAClB,uBAAuB,EACvB,gBAAgB,EAChB,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAqCzB,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,WAAW,CAAC;AAInB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,2BAA2B,EAC3B,uBAAuB,EACvB,yBAAyB,EACzB,sBAAsB,EACtB,eAAe,EACf,cAAc,EACd,sBAAsB,EACtB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,EAClB,0BAA0B,EAC1B,sBAAsB,EACtB,2BAA2B,EAC3B,iBAAiB,EACjB,oBAAoB,EACpB,2BAA2B,EAC3B,2BAA2B,EAC3B,4BAA4B,EAC5B,kBAAkB,EAClB,0BAA0B,EAC1B,2BAA2B,EAC3B,yBAAyB,EACzB,wBAAwB,EACxB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,cAAc,EACd,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,EACrB,WAAW,EACX,UAAU,EACV,kBAAkB,EAClB,WAAW,EACX,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,sBAAsB,EACtB,kBAAkB,EAClB,uBAAuB,EACvB,gBAAgB,EAChB,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAsCzB,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,WAAW,CAAC;AASnB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC"}
package/dist/session.d.ts CHANGED
@@ -5,21 +5,27 @@ declare global {
5
5
  readonly asyncDispose: unique symbol;
6
6
  }
7
7
  }
8
+ export type BrowserStartListener = (context: BrowserContext) => void;
8
9
  export declare class BrowserSession {
9
10
  private _config;
10
11
  private _browser;
11
12
  private _context;
12
13
  private _pages;
13
14
  private _activePageIndex;
15
+ private _starting;
16
+ private _startListeners;
14
17
  constructor(config?: BrowserSessionConfig);
15
18
  get config(): BrowserSessionConfig;
19
+ get started(): boolean;
16
20
  get stealthEnabled(): boolean;
17
21
  get stealthConfig(): StealthConfig | null;
18
22
  ensureStarted(): Promise<void>;
19
23
  get page(): Page;
20
24
  get tabs(): Page[];
25
+ get activeTabIndex(): number;
21
26
  get browser(): Browser | null;
22
27
  get context(): BrowserContext | null;
28
+ onStart(listener: BrowserStartListener): () => void;
23
29
  start(): Promise<void>;
24
30
  newTab(url?: string): Promise<Page>;
25
31
  switchTab(index: number): void;
@@ -30,6 +36,11 @@ export declare class BrowserSession {
30
36
  loadCookies(filePath: string): Promise<void>;
31
37
  close(): Promise<void>;
32
38
  [Symbol.asyncDispose](): Promise<void>;
39
+ private _launch;
40
+ private _reset;
41
+ private _trackPage;
42
+ private _untrackPage;
43
+ private _assertTabIndex;
33
44
  private _pruneClosedPages;
34
45
  private _resolveProxy;
35
46
  }
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,aAAa,EAEb,aAAa,EAEd,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAGhE,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,iBAAiB;QACzB,QAAQ,CAAC,YAAY,EAAE,OAAO,MAAM,CAAC;KACtC;CACF;AAcD,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAGQ;IACvB,OAAO,CAAC,QAAQ,CAAwB;IACxC,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,gBAAgB,CAAK;gBAEjB,MAAM,CAAC,EAAE,oBAAoB;IAWzC,IAAI,MAAM,IAAI,oBAAoB,CAEjC;IAED,IAAI,cAAc,IAAI,OAAO,CAE5B;IAED,IAAI,aAAa,IAAI,aAAa,GAAG,IAAI,CAIxC;IAEK,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAIpC,IAAI,IAAI,IAAI,IAAI,CAYf;IAED,IAAI,IAAI,IAAI,IAAI,EAAE,CAGjB;IAED,IAAI,OAAO,IAAI,OAAO,GAAG,IAAI,CAE5B;IAED,IAAI,OAAO,IAAI,cAAc,GAAG,IAAI,CAEnC;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAyDtB,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBzC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAOxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBvC,UAAU,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAOtC,UAAU,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAOnD,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM5C,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAa5C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAatB,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5C,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,aAAa;CAUtB"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,aAAa,EACb,aAAa,EAEd,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EACV,OAAO,EACP,cAAc,EAGd,IAAI,EACL,MAAM,YAAY,CAAC;AAGpB,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,iBAAiB;QACzB,QAAQ,CAAC,YAAY,EAAE,OAAO,MAAM,CAAC;KACtC;CACF;AAgBD,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;AAerE,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAGQ;IACvB,OAAO,CAAC,QAAQ,CAAwB;IACxC,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,SAAS,CAA8B;IAC/C,OAAO,CAAC,eAAe,CAAmC;gBAE9C,MAAM,CAAC,EAAE,oBAAoB;IAezC,IAAI,MAAM,IAAI,oBAAoB,CAEjC;IAED,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,IAAI,cAAc,IAAI,OAAO,CAE5B;IAED,IAAI,aAAa,IAAI,aAAa,GAAG,IAAI,CAIxC;IAEK,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IASpC,IAAI,IAAI,IAAI,IAAI,CAMf;IAED,IAAI,IAAI,IAAI,IAAI,EAAE,CAGjB;IAED,IAAI,cAAc,IAAI,MAAM,CAG3B;IAED,IAAI,OAAO,IAAI,OAAO,GAAG,IAAI,CAE5B;IAED,IAAI,OAAO,IAAI,cAAc,GAAG,IAAI,CAEnC;IAED,OAAO,CAAC,QAAQ,EAAE,oBAAoB,GAAG,MAAM,IAAI;IAQ7C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAatB,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BzC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAMxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAevC,UAAU,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAOtC,UAAU,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAOnD,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM5C,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU5C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBtB,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC;YAI9B,OAAO;IAkFrB,OAAO,CAAC,MAAM;IAOd,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,aAAa;CAUtB"}