@agent-infra/browser 0.2.0-alpha.5 → 0.2.1

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 (45) hide show
  1. package/dist/actions/keyboard.d.ts.map +1 -1
  2. package/dist/actions/keyboard.js +4 -4
  3. package/dist/actions/keyboard.js.map +1 -1
  4. package/dist/actions/keyboard.mjs +4 -4
  5. package/dist/actions/keyboard.mjs.map +1 -1
  6. package/dist/browser/browser.d.ts +3 -1
  7. package/dist/browser/browser.d.ts.map +1 -1
  8. package/dist/browser/browser.js +4 -2
  9. package/dist/browser/browser.js.map +1 -1
  10. package/dist/browser/browser.mjs +4 -2
  11. package/dist/browser/browser.mjs.map +1 -1
  12. package/dist/injected-script/visibility.d.ts +1 -1
  13. package/dist/injected-script/visibility.d.ts.map +1 -1
  14. package/dist/injected-script/visibility.js +5 -0
  15. package/dist/injected-script/visibility.js.map +1 -1
  16. package/dist/injected-script/visibility.mjs +5 -0
  17. package/dist/injected-script/visibility.mjs.map +1 -1
  18. package/dist/injected-script/webdriver.d.ts +1 -1
  19. package/dist/injected-script/webdriver.d.ts.map +1 -1
  20. package/dist/injected-script/webdriver.js +5 -0
  21. package/dist/injected-script/webdriver.js.map +1 -1
  22. package/dist/injected-script/webdriver.mjs +5 -0
  23. package/dist/injected-script/webdriver.mjs.map +1 -1
  24. package/dist/tabs/tab.d.ts +1 -0
  25. package/dist/tabs/tab.d.ts.map +1 -1
  26. package/dist/tabs/tab.js +50 -36
  27. package/dist/tabs/tab.js.map +1 -1
  28. package/dist/tabs/tab.mjs +40 -36
  29. package/dist/tabs/tab.mjs.map +1 -1
  30. package/dist/tabs/tabs.d.ts +1 -1
  31. package/dist/tabs/tabs.d.ts.map +1 -1
  32. package/dist/tabs/tabs.js +7 -17
  33. package/dist/tabs/tabs.js.map +1 -1
  34. package/dist/tabs/tabs.mjs +7 -17
  35. package/dist/tabs/tabs.mjs.map +1 -1
  36. package/dist/types/tabs.d.ts +1 -4
  37. package/dist/types/tabs.d.ts.map +1 -1
  38. package/dist/types/tabs.js.map +1 -1
  39. package/dist/types/tabs.mjs.map +1 -1
  40. package/dist/utils/iife.d.ts.map +1 -1
  41. package/dist/utils/iife.js +2 -3
  42. package/dist/utils/iife.js.map +1 -1
  43. package/dist/utils/iife.mjs +2 -3
  44. package/dist/utils/iife.mjs.map +1 -1
  45. package/package.json +3 -3
package/dist/tabs/tab.js CHANGED
@@ -4,6 +4,15 @@
4
4
  */
5
5
  "use strict";
6
6
  var __webpack_require__ = {};
7
+ (()=>{
8
+ __webpack_require__.n = (module)=>{
9
+ var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
10
+ __webpack_require__.d(getter, {
11
+ a: getter
12
+ });
13
+ return getter;
14
+ };
15
+ })();
7
16
  (()=>{
8
17
  __webpack_require__.d = (exports1, definition)=>{
9
18
  for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
@@ -30,6 +39,8 @@ __webpack_require__.r(__webpack_exports__);
30
39
  __webpack_require__.d(__webpack_exports__, {
31
40
  Tab: ()=>Tab
32
41
  });
42
+ const external_delay_namespaceObject = require("delay");
43
+ var external_delay_default = /*#__PURE__*/ __webpack_require__.n(external_delay_namespaceObject);
33
44
  const external_eventemitter3_namespaceObject = require("eventemitter3");
34
45
  const media_utils_namespaceObject = require("@agent-infra/media-utils");
35
46
  const index_js_namespaceObject = require("../injected-script/index.js");
@@ -137,8 +148,16 @@ function tab_ts_dispose_resources(env) {
137
148
  return next();
138
149
  })(env);
139
150
  }
140
- var _id = /*#__PURE__*/ new WeakMap(), _options = /*#__PURE__*/ new WeakMap(), _status = /*#__PURE__*/ new WeakMap(), _pptrPage = /*#__PURE__*/ new WeakMap(), _url = /*#__PURE__*/ new WeakMap(), _favicon = /*#__PURE__*/ new WeakMap(), _title = /*#__PURE__*/ new WeakMap(), _tabDialog = /*#__PURE__*/ new WeakMap(), _keyboard = /*#__PURE__*/ new WeakMap(), _mouse = /*#__PURE__*/ new WeakMap(), _isLoading = /*#__PURE__*/ new WeakMap(), _reloadAbortController = /*#__PURE__*/ new WeakMap(), _scriptsOnCreate = /*#__PURE__*/ new WeakMap(), _scriptsOnLoad = /*#__PURE__*/ new WeakMap(), _dclHandler = /*#__PURE__*/ new WeakMap(), _loadHandler = /*#__PURE__*/ new WeakMap(), _frameNavigatedHandler = /*#__PURE__*/ new WeakMap(), _backMutex = /*#__PURE__*/ new WeakMap(), _forwardMutex = /*#__PURE__*/ new WeakMap(), _reloadMutex = /*#__PURE__*/ new WeakMap(), _onFrameNavigated = /*#__PURE__*/ new WeakSet(), _setupVisibilityTracking = /*#__PURE__*/ new WeakSet(), _executeScriptsOnCreate = /*#__PURE__*/ new WeakSet(), _executeScriptsOnLoad = /*#__PURE__*/ new WeakSet(), _getFavicon = /*#__PURE__*/ new WeakSet(), _setLoading = /*#__PURE__*/ new WeakSet();
151
+ var _id = /*#__PURE__*/ new WeakMap(), _options = /*#__PURE__*/ new WeakMap(), _status = /*#__PURE__*/ new WeakMap(), _pptrPage = /*#__PURE__*/ new WeakMap(), _url = /*#__PURE__*/ new WeakMap(), _favicon = /*#__PURE__*/ new WeakMap(), _title = /*#__PURE__*/ new WeakMap(), _tabDialog = /*#__PURE__*/ new WeakMap(), _keyboard = /*#__PURE__*/ new WeakMap(), _mouse = /*#__PURE__*/ new WeakMap(), _isLoading = /*#__PURE__*/ new WeakMap(), _reloadAbortController = /*#__PURE__*/ new WeakMap(), _scriptsOnCreate = /*#__PURE__*/ new WeakMap(), _scriptsOnLoad = /*#__PURE__*/ new WeakMap(), _dclHandler = /*#__PURE__*/ new WeakMap(), _loadHandler = /*#__PURE__*/ new WeakMap(), _frameNavigatedHandler = /*#__PURE__*/ new WeakMap(), _backMutex = /*#__PURE__*/ new WeakMap(), _forwardMutex = /*#__PURE__*/ new WeakMap(), _reloadMutex = /*#__PURE__*/ new WeakMap(), _onFrameNavigated = /*#__PURE__*/ new WeakSet(), _setupVisibilityTracking = /*#__PURE__*/ new WeakSet(), _executeScriptsOnCreate = /*#__PURE__*/ new WeakSet(), _executeScriptsOnLoad = /*#__PURE__*/ new WeakSet(), _getTitle = /*#__PURE__*/ new WeakSet(), _getFavicon = /*#__PURE__*/ new WeakSet(), _setLoading = /*#__PURE__*/ new WeakSet();
141
152
  class Tab extends external_eventemitter3_namespaceObject.EventEmitter {
153
+ async init() {
154
+ if (_class_private_field_get(this, _options).injectVisibilityScript) {
155
+ _class_private_field_get(this, _scriptsOnCreate).push(index_js_namespaceObject.visibilityScript);
156
+ await _class_private_method_get(this, _setupVisibilityTracking, setupVisibilityTracking).call(this);
157
+ }
158
+ await _class_private_method_get(this, _executeScriptsOnCreate, executeScriptsOnCreate).call(this);
159
+ if (_class_private_field_get(this, _options).userAgentInfo) await _class_private_field_get(this, _pptrPage).setUserAgent(_class_private_field_get(this, _options).userAgentInfo);
160
+ }
142
161
  get tabId() {
143
162
  return _class_private_field_get(this, _id);
144
163
  }
@@ -149,11 +168,11 @@ class Tab extends external_eventemitter3_namespaceObject.EventEmitter {
149
168
  return _class_private_field_get(this, _url);
150
169
  }
151
170
  async getTitle() {
152
- if (!_class_private_field_get(this, _title)) _class_private_field_set(this, _title, await _class_private_field_get(this, _pptrPage).title());
171
+ _class_private_field_set(this, _title, await _class_private_method_get(this, _getTitle, getTitle).call(this));
153
172
  return _class_private_field_get(this, _title);
154
173
  }
155
174
  async getFavicon() {
156
- if (!_class_private_field_get(this, _favicon)) _class_private_field_set(this, _favicon, await _class_private_method_get(this, _getFavicon, getFavicon).call(this));
175
+ _class_private_field_set(this, _favicon, await _class_private_method_get(this, _getFavicon, getFavicon).call(this));
157
176
  return _class_private_field_get(this, _favicon);
158
177
  }
159
178
  async _active() {
@@ -232,11 +251,9 @@ class Tab extends external_eventemitter3_namespaceObject.EventEmitter {
232
251
  const validated = (0, external_utils_index_js_namespaceObject.validateNavigationUrl)(url);
233
252
  if (validated.ignored) return {
234
253
  success: false,
235
- url: url,
254
+ url: validated.url,
236
255
  message: validated.message
237
256
  };
238
- _class_private_field_set(this, _url, validated.url);
239
- _class_private_field_set(this, _title, validated.url);
240
257
  _class_private_method_get(this, _setLoading, setLoading).call(this, true);
241
258
  try {
242
259
  await _class_private_field_get(this, _pptrPage).setViewport({
@@ -248,20 +265,18 @@ class Tab extends external_eventemitter3_namespaceObject.EventEmitter {
248
265
  waitUntil: options.waitUntil,
249
266
  timeout: options.timeout
250
267
  });
251
- _class_private_field_set(this, _title, await _class_private_field_get(this, _pptrPage).title());
252
- _class_private_field_set(this, _favicon, await _class_private_method_get(this, _getFavicon, getFavicon).call(this));
253
- _class_private_method_get(this, _setLoading, setLoading).call(this, false);
254
268
  return {
255
269
  success: true,
256
- url: _class_private_field_get(this, _url)
270
+ url: validated.url
257
271
  };
258
272
  } catch (error) {
259
- _class_private_method_get(this, _setLoading, setLoading).call(this, false);
260
273
  return {
261
274
  success: false,
262
275
  message: error instanceof Error ? error.message : String(error),
263
276
  url: validated.url
264
277
  };
278
+ } finally{
279
+ _class_private_method_get(this, _setLoading, setLoading).call(this, false);
265
280
  }
266
281
  }
267
282
  async goBack(options = {}) {
@@ -401,7 +416,7 @@ class Tab extends external_eventemitter3_namespaceObject.EventEmitter {
401
416
  else _class_private_field_get(this, _scriptsOnLoad).push(script);
402
417
  }
403
418
  constructor(page, options){
404
- super(), _class_private_method_init(this, _onFrameNavigated), _class_private_method_init(this, _setupVisibilityTracking), _class_private_method_init(this, _executeScriptsOnCreate), _class_private_method_init(this, _executeScriptsOnLoad), _class_private_method_init(this, _getFavicon), _class_private_method_init(this, _setLoading), _class_private_field_init(this, _id, {
419
+ super(), _class_private_method_init(this, _onFrameNavigated), _class_private_method_init(this, _setupVisibilityTracking), _class_private_method_init(this, _executeScriptsOnCreate), _class_private_method_init(this, _executeScriptsOnLoad), _class_private_method_init(this, _getTitle), _class_private_method_init(this, _getFavicon), _class_private_method_init(this, _setLoading), _class_private_field_init(this, _id, {
405
420
  writable: true,
406
421
  value: void 0
407
422
  }), _class_private_field_init(this, _options, {
@@ -440,8 +455,7 @@ class Tab extends external_eventemitter3_namespaceObject.EventEmitter {
440
455
  }), _class_private_field_init(this, _scriptsOnCreate, {
441
456
  writable: true,
442
457
  value: [
443
- index_js_namespaceObject.disableWebdriver,
444
- index_js_namespaceObject.visibilityScript
458
+ index_js_namespaceObject.disableWebdriver
445
459
  ]
446
460
  }), _class_private_field_init(this, _scriptsOnLoad, {
447
461
  writable: true,
@@ -484,9 +498,6 @@ class Tab extends external_eventemitter3_namespaceObject.EventEmitter {
484
498
  _class_private_field_set(this, _tabDialog, new external_dialog_js_namespaceObject.TabDialog(this));
485
499
  _class_private_field_set(this, _keyboard, new external_actions_index_js_namespaceObject.Keyboard(page, _class_private_field_get(this, _tabDialog), options.envInfo));
486
500
  _class_private_field_set(this, _mouse, new external_actions_index_js_namespaceObject.Mouse(page, _class_private_field_get(this, _tabDialog)));
487
- _class_private_method_get(this, _setupVisibilityTracking, setupVisibilityTracking).call(this);
488
- _class_private_method_get(this, _executeScriptsOnCreate, executeScriptsOnCreate).call(this);
489
- if (options.userAgentInfo) _class_private_field_get(this, _pptrPage).setUserAgent(options.userAgentInfo);
490
501
  _class_private_field_get(this, _pptrPage).on('domcontentloaded', _class_private_field_get(this, _dclHandler));
491
502
  _class_private_field_get(this, _pptrPage).on('load', _class_private_field_get(this, _loadHandler));
492
503
  _class_private_field_get(this, _pptrPage).on('framenavigated', _class_private_field_get(this, _frameNavigatedHandler));
@@ -496,27 +507,11 @@ async function onFrameNavigated(frame) {
496
507
  if (!frame.parentFrame()) {
497
508
  const oldUrl = _class_private_field_get(this, _url);
498
509
  const newUrl = frame.url();
499
- const [title, favicon, historyData] = await Promise.all([
500
- _class_private_field_get(this, _pptrPage).title().catch(()=>'Loading...'),
501
- _class_private_method_get(this, _getFavicon, getFavicon).call(this).catch(()=>''),
502
- this.getHistory().catch(()=>({
503
- index: 0,
504
- history: [],
505
- canGoBack: false,
506
- canGoForward: false
507
- }))
508
- ]);
509
510
  _class_private_field_set(this, _url, newUrl);
510
- _class_private_field_set(this, _title, title);
511
- _class_private_field_set(this, _favicon, favicon);
512
511
  if (oldUrl !== newUrl) this.emit(external_types_index_js_namespaceObject.TabEvents.TabUrlChanged, {
513
512
  tabId: _class_private_field_get(this, _id),
514
513
  oldUrl: oldUrl,
515
- newUrl: newUrl,
516
- title: title,
517
- favicon: favicon,
518
- canGoBack: historyData.canGoBack,
519
- canGoForward: historyData.canGoForward
514
+ newUrl: newUrl
520
515
  });
521
516
  }
522
517
  }
@@ -531,8 +526,10 @@ async function setupVisibilityTracking() {
531
526
  async function executeScriptsOnCreate() {
532
527
  try {
533
528
  const script = (0, external_utils_index_js_namespaceObject.iife)(_class_private_field_get(this, _scriptsOnCreate).join('\n'));
534
- await _class_private_field_get(this, _pptrPage).evaluateOnNewDocument(script);
535
- await _class_private_field_get(this, _pptrPage).evaluate(script);
529
+ await Promise.race([
530
+ _class_private_field_get(this, _pptrPage).evaluateOnNewDocument(script),
531
+ _class_private_field_get(this, _pptrPage).evaluate(script)
532
+ ]);
536
533
  } catch (error) {
537
534
  console.warn("Failed to execute script on create:", error);
538
535
  }
@@ -545,9 +542,26 @@ async function executeScriptsOnLoad() {
545
542
  console.warn("Failed to execute script on load:", error);
546
543
  }
547
544
  }
545
+ async function getTitle() {
546
+ try {
547
+ await external_delay_default()(100);
548
+ const pptrTitle = (await _class_private_field_get(this, _pptrPage).title()).trim();
549
+ if (pptrTitle) return pptrTitle;
550
+ const domTitle = await _class_private_field_get(this, _pptrPage).evaluate(()=>{
551
+ var _titleElement_textContent;
552
+ const titleElement = document.querySelector('title');
553
+ return (null == titleElement ? void 0 : null == (_titleElement_textContent = titleElement.textContent) ? void 0 : _titleElement_textContent.trim()) || '';
554
+ });
555
+ if (domTitle) return domTitle;
556
+ return _class_private_field_get(this, _url);
557
+ } catch (error) {
558
+ return '';
559
+ }
560
+ }
548
561
  async function getFavicon() {
549
562
  if ('about:blank' === this.url || this.url.startsWith('chrome://')) return '';
550
563
  try {
564
+ await external_delay_default()(100);
551
565
  const favicon = await _class_private_field_get(this, _pptrPage).evaluate(()=>{
552
566
  const iconLink = document.querySelector('link[rel*="icon"]');
553
567
  if (iconLink && iconLink.href) return iconLink.href;
@@ -1 +1 @@
1
- {"version":3,"file":"tabs/tab.js","sources":["webpack://@agent-infra/browser/webpack/runtime/define_property_getters","webpack://@agent-infra/browser/webpack/runtime/has_own_property","webpack://@agent-infra/browser/webpack/runtime/make_namespace_object","webpack://@agent-infra/browser/./src/tabs/tab.ts"],"sourcesContent":["__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/*\n * Copyright (c) 2025 Bytedance, Inc. and its affiliates.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { EventEmitter } from 'eventemitter3';\nimport { BinaryImageParser, Base64ImageParser } from '@agent-infra/media-utils';\nimport { disableWebdriver, visibilityScript } from '../injected-script';\nimport { iife, Mutex, validateNavigationUrl } from '../utils';\nimport { TabDialog } from './dialog';\nimport { Mouse, Keyboard } from '../actions';\n\nimport type { Page, Frame, CDPSession } from 'puppeteer-core';\nimport {\n TabEvents,\n type NavigationOptions,\n type NavigationResult,\n type TabEventsMap,\n type TabOptions,\n type TabScreenshotOptions,\n type TabScreenshotResult,\n} from '../types';\n\nexport class Tab extends EventEmitter<TabEventsMap> {\n #id: string;\n #options: TabOptions;\n // eslint-disable-next-line no-unused-private-class-members\n #status: 'active' | 'inactive';\n\n #pptrPage: Page;\n\n #url = 'about:blank';\n #favicon = '';\n #title = '';\n\n #tabDialog: TabDialog;\n #keyboard: Keyboard;\n #mouse: Mouse;\n\n #isLoading = false;\n #reloadAbortController: AbortController | null = null;\n\n #scriptsOnCreate: string[] = [disableWebdriver, visibilityScript];\n #scriptsOnLoad: string[] = [];\n\n constructor(page: Page, options: TabOptions) {\n super();\n this.#pptrPage = page;\n this.#options = options;\n\n // CdpTarget has _targetId\n // @ts-ignore\n this.#id = options.tabId || page.target()._targetId; // tabId is tagetId\n this.#url = page.url();\n\n this.#status = 'active';\n this.#tabDialog = new TabDialog(this);\n this.#keyboard = new Keyboard(page, this.#tabDialog, options.envInfo);\n this.#mouse = new Mouse(page, this.#tabDialog);\n\n this.#setupVisibilityTracking();\n this.#executeScriptsOnCreate();\n\n // Set user agent if provided\n if (options.userAgentInfo) {\n this.#pptrPage.setUserAgent(options.userAgentInfo);\n }\n\n // page events: https://pptr.dev/api/puppeteer.pageevent\n this.#pptrPage.on('domcontentloaded', this.#dclHandler);\n this.#pptrPage.on('load', this.#loadHandler);\n this.#pptrPage.on('framenavigated', this.#frameNavigatedHandler);\n }\n\n // #region meta info\n\n get tabId() {\n return this.#id;\n }\n\n get page() {\n return this.#pptrPage;\n }\n\n get url() {\n return this.#url;\n }\n\n async getTitle() {\n if (!this.#title) {\n this.#title = await this.#pptrPage.title();\n }\n\n return this.#title;\n }\n\n async getFavicon() {\n if (!this.#favicon) {\n this.#favicon = await this.#getFavicon();\n }\n\n return this.#favicon;\n }\n\n // #endregion\n\n // #region events handler\n\n #dclHandler = () => {\n this.emit(TabEvents.TabLoadingStateChanged, {\n isLoading: true,\n tabId: this.#id,\n });\n };\n\n #loadHandler = () => {\n this.emit(TabEvents.TabLoadingStateChanged, {\n isLoading: false,\n tabId: this.#id,\n });\n this.#executeScriptsOnLoad();\n };\n\n #frameNavigatedHandler = (frame: Frame) => this.#onFrameNavigated(frame);\n\n // #endregion\n\n // #region active status\n\n /**\n * @internal\n */\n async _active() {\n await this.#pptrPage.bringToFront();\n this.#status = 'active';\n }\n\n /**\n * @internal\n */\n async _inactive() {\n this.#status = 'inactive';\n }\n\n /**\n * @internal\n */\n async _checkActiveStatusWithRuntime() {\n try {\n await this.#pptrPage.waitForFunction(\n () => document.visibilityState === 'visible',\n {\n timeout: 1000,\n },\n );\n return true;\n } catch (error) {\n return false;\n }\n }\n\n // #endregion\n\n // #region dialog/keyboard/mouse\n\n get dialog() {\n return this.#tabDialog;\n }\n\n get keyboard() {\n return this.#keyboard;\n }\n\n get mouse() {\n return this.#mouse;\n }\n\n // #endregion\n\n // #region screenshot\n\n async screenshot<T extends TabScreenshotOptions>(\n options: T = {} as T,\n ): Promise<TabScreenshotResult<T>> {\n if (options.path) {\n const binaryImage = await this.#pptrPage.screenshot({\n path: options.path,\n type: options.type,\n quality: options.quality,\n fullPage: options.fullPage,\n });\n const meta = new BinaryImageParser(binaryImage);\n\n return {\n data: binaryImage,\n type: meta.getImageType()!,\n width: meta.getDimensions()!.width,\n height: meta.getDimensions()!.height,\n } as TabScreenshotResult<T>;\n }\n\n const base64Image = await this.#pptrPage.screenshot({\n encoding: 'base64',\n type: options.type,\n quality: options.quality,\n fullPage: options.fullPage,\n });\n const meta = new Base64ImageParser(base64Image);\n\n return {\n data: base64Image,\n type: meta.getImageType()!,\n width: meta.getDimensions()!.width,\n height: meta.getDimensions()!.height,\n } as TabScreenshotResult<T>;\n }\n\n // #endregion\n\n // #region navigation\n\n async getHistory() {\n // @ts-ignore\n const history = await (this.#pptrPage._client() as CDPSession).send(\n 'Page.getNavigationHistory',\n );\n const index = history.currentIndex;\n const length = history.entries.length;\n\n const canGoBack = length > 1 && index !== 0;\n const canGoForward = length > 1 && index < length - 1;\n\n return {\n index: index,\n canGoBack: canGoBack,\n canGoForward: canGoForward,\n history: history.entries.map((item) => ({\n url: item.url,\n title: item.title,\n })),\n };\n }\n\n async goto(\n url: string,\n options: NavigationOptions = {},\n ): Promise<NavigationResult> {\n // validate / normalize url before navigation\n const validated = validateNavigationUrl(url);\n if (validated.ignored) {\n return {\n success: false,\n url: url,\n message: validated.message!,\n };\n }\n\n this.#url = validated.url;\n this.#title = validated.url;\n\n this.#setLoading(true);\n\n try {\n await this.#pptrPage.setViewport({\n width: this.#options.viewport.width,\n height: this.#options.viewport.height,\n deviceScaleFactor: this.#options.viewport.deviceScaleFactor,\n });\n await this.#pptrPage.goto(validated.url, {\n waitUntil: options.waitUntil,\n timeout: options.timeout,\n });\n\n this.#title = await this.#pptrPage.title();\n this.#favicon = await this.#getFavicon();\n\n this.#setLoading(false);\n\n return {\n success: true,\n url: this.#url,\n };\n } catch (error) {\n this.#setLoading(false);\n return {\n success: false,\n message: error instanceof Error ? error.message : String(error),\n url: validated.url,\n };\n }\n }\n\n #backMutex = new Mutex();\n async goBack(options: NavigationOptions = {}): Promise<NavigationResult> {\n using _ = await this.#backMutex.acquire();\n\n try {\n const { canGoBack } = await this.getHistory();\n\n if (!canGoBack) {\n return {\n success: false,\n url: this.#url,\n message: 'Cannot go back - no previous history entry',\n };\n }\n\n await this.#pptrPage.goBack({\n waitUntil: options.waitUntil,\n timeout: options.timeout,\n });\n\n return {\n success: true,\n url: this.#url,\n };\n } catch (error) {\n return {\n success: false,\n url: this.#url,\n message: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n #forwardMutex = new Mutex();\n async goForward(options: NavigationOptions = {}): Promise<NavigationResult> {\n using _ = await this.#forwardMutex.acquire();\n\n try {\n const { canGoForward } = await this.getHistory();\n\n if (!canGoForward) {\n return {\n success: false,\n url: this.#url,\n message: 'Cannot go forward - no next history entry',\n };\n }\n\n await this.#pptrPage.goForward({\n waitUntil: options.waitUntil,\n timeout: options.timeout,\n });\n\n return {\n success: true,\n url: this.#url,\n };\n } catch (error) {\n return {\n success: false,\n url: this.#url,\n message: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n #reloadMutex = new Mutex();\n async reload(options: NavigationOptions = {}): Promise<NavigationResult> {\n using _ = await this.#reloadMutex.acquire();\n\n if (this.#reloadAbortController) {\n this.#reloadAbortController.abort();\n }\n\n this.#reloadAbortController = new AbortController();\n this.#setLoading(true);\n\n try {\n await this.#pptrPage.reload({\n waitUntil: options.waitUntil,\n timeout: options.timeout,\n signal: this.#reloadAbortController.signal,\n });\n this.#setLoading(false);\n\n return {\n success: true,\n url: this.#url,\n };\n } catch (error) {\n this.#setLoading(false);\n\n return {\n success: false,\n url: this.#url,\n message: error instanceof Error ? error.message : String(error),\n };\n } finally {\n this.#reloadAbortController = null;\n }\n }\n\n /**\n * @internal\n */\n async _close() {\n this.#pptrPage.off('load', this.#loadHandler);\n this.#pptrPage.off('framenavigated', this.#frameNavigatedHandler);\n\n if (this.#reloadAbortController) {\n this.#reloadAbortController.abort();\n this.#reloadAbortController = null;\n }\n\n this.#tabDialog.cleanup();\n\n try {\n await this.#pptrPage.close();\n } catch (error) {\n // If the page has already been manually closed\n // (not controlled by pptr, usually upon receiving the 'targetdestroyed' event),\n // then it can be ignored directly.\n if (\n error instanceof Error &&\n error.message.includes('No target with given id found')\n ) {\n return;\n }\n\n throw error;\n }\n }\n\n async #onFrameNavigated(frame: Frame) {\n if (!frame.parentFrame()) {\n const oldUrl = this.#url;\n const newUrl = frame.url();\n const [title, favicon, historyData] = await Promise.all([\n this.#pptrPage.title().catch(() => 'Loading...'),\n this.#getFavicon().catch(() => ''),\n this.getHistory().catch(() => ({\n index: 0,\n history: [],\n canGoBack: false,\n canGoForward: false,\n })),\n ]);\n\n this.#url = newUrl;\n this.#title = title;\n this.#favicon = favicon;\n\n if (oldUrl !== newUrl) {\n this.emit(TabEvents.TabUrlChanged, {\n tabId: this.#id,\n oldUrl: oldUrl,\n newUrl: newUrl,\n title: title,\n favicon: favicon,\n canGoBack: historyData.canGoBack,\n canGoForward: historyData.canGoForward,\n });\n }\n }\n }\n\n // #endregion\n\n // #region injectScript\n\n injectScriptOnCreate(script: string | string[]) {\n if (Array.isArray(script)) {\n this.#scriptsOnCreate.push(...script);\n } else {\n this.#scriptsOnCreate.push(script);\n }\n }\n\n injectScriptOnLoad(script: string | string[]) {\n if (Array.isArray(script)) {\n this.#scriptsOnLoad.push(...script);\n } else {\n this.#scriptsOnLoad.push(script);\n }\n }\n\n async #setupVisibilityTracking() {\n await this.#pptrPage.exposeFunction(\n '__agent_infra_visibility_change',\n (isVisible: boolean) => {\n this.emit(TabEvents.TabVisibilityChanged, {\n tabId: this.#id,\n isVisible,\n });\n },\n );\n }\n\n async #executeScriptsOnCreate() {\n try {\n const script = iife(this.#scriptsOnCreate.join('\\n'));\n await this.#pptrPage.evaluateOnNewDocument(script);\n await this.#pptrPage.evaluate(script);\n } catch (error) {\n console.warn('Failed to execute script on create:', error);\n }\n }\n\n async #executeScriptsOnLoad(): Promise<void> {\n try {\n const script = iife(this.#scriptsOnLoad.join('\\n'));\n await this.#pptrPage.evaluate(script);\n } catch (error) {\n console.warn('Failed to execute script on load:', error);\n }\n }\n\n // #endregion\n\n async #getFavicon() {\n if (this.url === 'about:blank' || this.url.startsWith('chrome://')) {\n return '';\n }\n\n try {\n const favicon = await this.#pptrPage.evaluate(() => {\n const iconLink = document.querySelector(\n 'link[rel*=\"icon\"]',\n ) as HTMLLinkElement;\n if (iconLink && iconLink.href) {\n return iconLink.href;\n }\n\n // fallback\n if (\n window.location &&\n window.location.origin &&\n window.location.origin !== 'null' &&\n window.location.origin !== 'file://'\n ) {\n return `${window.location.origin}/favicon.ico`;\n }\n\n return '';\n });\n\n return favicon;\n } catch (error) {\n console.warn('Failed to get favicon:', error);\n return '';\n }\n }\n\n #setLoading(loading: boolean) {\n if (this.#isLoading === loading) {\n return;\n }\n\n // console.log('setLoading', loading, this.#url);\n\n this.#isLoading = loading;\n this.emit(TabEvents.TabLoadingStateChanged, {\n isLoading: loading,\n tabId: this.#id,\n });\n }\n}\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","_id","_options","_status","_pptrPage","_url","_favicon","_title","_tabDialog","_keyboard","_mouse","_isLoading","_reloadAbortController","_scriptsOnCreate","_scriptsOnLoad","_dclHandler","_loadHandler","_frameNavigatedHandler","_backMutex","_forwardMutex","_reloadMutex","_onFrameNavigated","_setupVisibilityTracking","_executeScriptsOnCreate","_executeScriptsOnLoad","_getFavicon","setLoading","Tab","EventEmitter","getFavicon","document","error","options","binaryImage","meta","BinaryImageParser","base64Image","Base64ImageParser","history","index","length","canGoBack","canGoForward","item","url","validated","validateNavigationUrl","Error","String","_","AbortController","script","Array","page","onFrameNavigated","setupVisibilityTracking","executeScriptsOnCreate","executeScriptsOnLoad","disableWebdriver","visibilityScript","TabEvents","frame","Mutex","TabDialog","Keyboard","Mouse","oldUrl","newUrl","title","favicon","historyData","Promise","isVisible","iife","console","iconLink","window","loading"],"mappings":"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"}
1
+ {"version":3,"file":"tabs/tab.js","sources":["webpack://@agent-infra/browser/webpack/runtime/compat_get_default_export","webpack://@agent-infra/browser/webpack/runtime/define_property_getters","webpack://@agent-infra/browser/webpack/runtime/has_own_property","webpack://@agent-infra/browser/webpack/runtime/make_namespace_object","webpack://@agent-infra/browser/./src/tabs/tab.ts"],"sourcesContent":["// getDefaultExport function for compatibility with non-ESM modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};\n","__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/*\n * Copyright (c) 2025 Bytedance, Inc. and its affiliates.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport delay from 'delay';\nimport { EventEmitter } from 'eventemitter3';\nimport { BinaryImageParser, Base64ImageParser } from '@agent-infra/media-utils';\nimport { disableWebdriver, visibilityScript } from '../injected-script';\nimport { iife, Mutex, validateNavigationUrl } from '../utils';\nimport { TabDialog } from './dialog';\nimport { Mouse, Keyboard } from '../actions';\n\nimport type { Page, Frame, CDPSession } from 'puppeteer-core';\nimport {\n TabEvents,\n type NavigationOptions,\n type NavigationResult,\n type TabEventsMap,\n type TabOptions,\n type TabScreenshotOptions,\n type TabScreenshotResult,\n} from '../types';\n\nexport class Tab extends EventEmitter<TabEventsMap> {\n #id: string;\n #options: TabOptions;\n // eslint-disable-next-line no-unused-private-class-members\n #status: 'active' | 'inactive';\n\n #pptrPage: Page;\n\n #url = 'about:blank';\n #favicon = '';\n #title = '';\n\n #tabDialog: TabDialog;\n #keyboard: Keyboard;\n #mouse: Mouse;\n\n #isLoading = false;\n #reloadAbortController: AbortController | null = null;\n\n #scriptsOnCreate: string[] = [disableWebdriver];\n #scriptsOnLoad: string[] = [];\n\n constructor(page: Page, options: TabOptions) {\n super();\n this.#pptrPage = page;\n this.#options = options;\n\n // CdpTarget has _targetId\n // @ts-ignore\n this.#id = options.tabId || page.target()._targetId; // tabId is tagetId\n this.#url = page.url();\n\n this.#status = 'active';\n this.#tabDialog = new TabDialog(this);\n this.#keyboard = new Keyboard(page, this.#tabDialog, options.envInfo);\n this.#mouse = new Mouse(page, this.#tabDialog);\n\n // page events: https://pptr.dev/api/puppeteer.pageevent\n this.#pptrPage.on('domcontentloaded', this.#dclHandler);\n this.#pptrPage.on('load', this.#loadHandler);\n this.#pptrPage.on('framenavigated', this.#frameNavigatedHandler);\n }\n\n async init() {\n // Only setup visibility tracking if visibility script is injected\n if (this.#options.injectVisibilityScript) {\n this.#scriptsOnCreate.push(visibilityScript);\n await this.#setupVisibilityTracking();\n }\n\n await this.#executeScriptsOnCreate();\n\n if (this.#options.userAgentInfo) {\n await this.#pptrPage.setUserAgent(this.#options.userAgentInfo);\n }\n }\n\n // #region meta info\n\n get tabId() {\n return this.#id;\n }\n\n get page() {\n return this.#pptrPage;\n }\n\n get url() {\n return this.#url;\n }\n\n async getTitle() {\n this.#title = await this.#getTitle();\n\n return this.#title;\n }\n\n async getFavicon() {\n this.#favicon = await this.#getFavicon();\n\n return this.#favicon;\n }\n\n // #endregion\n\n // #region events handler\n\n #dclHandler = () => {\n this.emit(TabEvents.TabLoadingStateChanged, {\n isLoading: true,\n tabId: this.#id,\n });\n };\n\n #loadHandler = () => {\n this.emit(TabEvents.TabLoadingStateChanged, {\n isLoading: false,\n tabId: this.#id,\n });\n this.#executeScriptsOnLoad();\n };\n\n #frameNavigatedHandler = (frame: Frame) => this.#onFrameNavigated(frame);\n\n // #endregion\n\n // #region active status\n\n /**\n * @internal\n */\n async _active() {\n await this.#pptrPage.bringToFront();\n this.#status = 'active';\n }\n\n /**\n * @internal\n */\n async _inactive() {\n this.#status = 'inactive';\n }\n\n /**\n * @internal\n */\n async _checkActiveStatusWithRuntime() {\n try {\n await this.#pptrPage.waitForFunction(\n () => document.visibilityState === 'visible',\n {\n timeout: 1000,\n },\n );\n return true;\n } catch (error) {\n return false;\n }\n }\n\n // #endregion\n\n // #region dialog/keyboard/mouse\n\n get dialog() {\n return this.#tabDialog;\n }\n\n get keyboard() {\n return this.#keyboard;\n }\n\n get mouse() {\n return this.#mouse;\n }\n\n // #endregion\n\n // #region screenshot\n\n async screenshot<T extends TabScreenshotOptions>(\n options: T = {} as T,\n ): Promise<TabScreenshotResult<T>> {\n if (options.path) {\n const binaryImage = await this.#pptrPage.screenshot({\n path: options.path,\n type: options.type,\n quality: options.quality,\n fullPage: options.fullPage,\n });\n const meta = new BinaryImageParser(binaryImage);\n\n return {\n data: binaryImage,\n type: meta.getImageType()!,\n width: meta.getDimensions()!.width,\n height: meta.getDimensions()!.height,\n } as TabScreenshotResult<T>;\n }\n\n const base64Image = await this.#pptrPage.screenshot({\n encoding: 'base64',\n type: options.type,\n quality: options.quality,\n fullPage: options.fullPage,\n });\n const meta = new Base64ImageParser(base64Image);\n\n return {\n data: base64Image,\n type: meta.getImageType()!,\n width: meta.getDimensions()!.width,\n height: meta.getDimensions()!.height,\n } as TabScreenshotResult<T>;\n }\n\n // #endregion\n\n // #region navigation\n\n async getHistory() {\n // @ts-ignore\n const history = await (this.#pptrPage._client() as CDPSession).send(\n 'Page.getNavigationHistory',\n );\n const index = history.currentIndex;\n const length = history.entries.length;\n\n const canGoBack = length > 1 && index !== 0;\n const canGoForward = length > 1 && index < length - 1;\n\n return {\n index: index,\n canGoBack: canGoBack,\n canGoForward: canGoForward,\n history: history.entries.map((item) => ({\n url: item.url,\n title: item.title,\n })),\n };\n }\n\n async goto(\n url: string,\n options: NavigationOptions = {},\n ): Promise<NavigationResult> {\n // validate / normalize url before navigation\n const validated = validateNavigationUrl(url);\n if (validated.ignored) {\n return {\n success: false,\n url: validated.url,\n message: validated.message!,\n };\n }\n\n this.#setLoading(true);\n\n try {\n await this.#pptrPage.setViewport({\n width: this.#options.viewport.width,\n height: this.#options.viewport.height,\n deviceScaleFactor: this.#options.viewport.deviceScaleFactor,\n });\n await this.#pptrPage.goto(validated.url, {\n waitUntil: options.waitUntil,\n timeout: options.timeout,\n });\n\n return {\n success: true,\n url: validated.url,\n };\n } catch (error) {\n return {\n success: false,\n message: error instanceof Error ? error.message : String(error),\n url: validated.url,\n };\n } finally {\n this.#setLoading(false);\n }\n }\n\n #backMutex = new Mutex();\n async goBack(options: NavigationOptions = {}): Promise<NavigationResult> {\n using _ = await this.#backMutex.acquire();\n\n try {\n const { canGoBack } = await this.getHistory();\n\n if (!canGoBack) {\n return {\n success: false,\n url: this.#url,\n message: 'Cannot go back - no previous history entry',\n };\n }\n\n await this.#pptrPage.goBack({\n waitUntil: options.waitUntil,\n timeout: options.timeout,\n });\n\n return {\n success: true,\n url: this.#url,\n };\n } catch (error) {\n return {\n success: false,\n url: this.#url,\n message: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n #forwardMutex = new Mutex();\n async goForward(options: NavigationOptions = {}): Promise<NavigationResult> {\n using _ = await this.#forwardMutex.acquire();\n\n try {\n const { canGoForward } = await this.getHistory();\n\n if (!canGoForward) {\n return {\n success: false,\n url: this.#url,\n message: 'Cannot go forward - no next history entry',\n };\n }\n\n await this.#pptrPage.goForward({\n waitUntil: options.waitUntil,\n timeout: options.timeout,\n });\n\n return {\n success: true,\n url: this.#url,\n };\n } catch (error) {\n return {\n success: false,\n url: this.#url,\n message: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n #reloadMutex = new Mutex();\n async reload(options: NavigationOptions = {}): Promise<NavigationResult> {\n using _ = await this.#reloadMutex.acquire();\n\n if (this.#reloadAbortController) {\n this.#reloadAbortController.abort();\n }\n\n this.#reloadAbortController = new AbortController();\n this.#setLoading(true);\n\n try {\n await this.#pptrPage.reload({\n waitUntil: options.waitUntil,\n timeout: options.timeout,\n signal: this.#reloadAbortController.signal,\n });\n this.#setLoading(false);\n\n return {\n success: true,\n url: this.#url,\n };\n } catch (error) {\n this.#setLoading(false);\n\n return {\n success: false,\n url: this.#url,\n message: error instanceof Error ? error.message : String(error),\n };\n } finally {\n this.#reloadAbortController = null;\n }\n }\n\n /**\n * @internal\n */\n async _close() {\n this.#pptrPage.off('load', this.#loadHandler);\n this.#pptrPage.off('framenavigated', this.#frameNavigatedHandler);\n\n if (this.#reloadAbortController) {\n this.#reloadAbortController.abort();\n this.#reloadAbortController = null;\n }\n\n this.#tabDialog.cleanup();\n\n try {\n await this.#pptrPage.close();\n } catch (error) {\n // If the page has already been manually closed\n // (not controlled by pptr, usually upon receiving the 'targetdestroyed' event),\n // then it can be ignored directly.\n if (\n error instanceof Error &&\n error.message.includes('No target with given id found')\n ) {\n return;\n }\n\n throw error;\n }\n }\n\n async #onFrameNavigated(frame: Frame) {\n if (!frame.parentFrame()) {\n const oldUrl = this.#url;\n const newUrl = frame.url();\n\n this.#url = newUrl;\n\n if (oldUrl !== newUrl) {\n this.emit(TabEvents.TabUrlChanged, {\n tabId: this.#id,\n oldUrl: oldUrl,\n newUrl: newUrl,\n });\n }\n }\n }\n\n // #endregion\n\n // #region injectScript\n\n injectScriptOnCreate(script: string | string[]) {\n if (Array.isArray(script)) {\n this.#scriptsOnCreate.push(...script);\n } else {\n this.#scriptsOnCreate.push(script);\n }\n }\n\n injectScriptOnLoad(script: string | string[]) {\n if (Array.isArray(script)) {\n this.#scriptsOnLoad.push(...script);\n } else {\n this.#scriptsOnLoad.push(script);\n }\n }\n\n async #setupVisibilityTracking() {\n await this.#pptrPage.exposeFunction(\n '__agent_infra_visibility_change',\n (isVisible: boolean) => {\n this.emit(TabEvents.TabVisibilityChanged, {\n tabId: this.#id,\n isVisible,\n });\n },\n );\n }\n\n async #executeScriptsOnCreate() {\n try {\n const script = iife(this.#scriptsOnCreate.join('\\n'));\n await Promise.race([\n this.#pptrPage.evaluateOnNewDocument(script),\n this.#pptrPage.evaluate(script),\n ]);\n } catch (error) {\n console.warn('Failed to execute script on create:', error);\n }\n }\n\n async #executeScriptsOnLoad(): Promise<void> {\n try {\n const script = iife(this.#scriptsOnLoad.join('\\n'));\n await this.#pptrPage.evaluate(script);\n } catch (error) {\n console.warn('Failed to execute script on load:', error);\n }\n }\n\n // #endregion\n\n // #region private methods\n\n async #getTitle() {\n try {\n await delay(100);\n const pptrTitle = (await this.#pptrPage.title()).trim();\n if (pptrTitle) {\n return pptrTitle;\n }\n\n const domTitle = await this.#pptrPage.evaluate(() => {\n const titleElement = document.querySelector('title');\n return titleElement?.textContent?.trim() || '';\n });\n if (domTitle) {\n return domTitle;\n }\n\n return this.#url;\n } catch (error) {\n return '';\n }\n }\n\n async #getFavicon() {\n if (this.url === 'about:blank' || this.url.startsWith('chrome://')) {\n return '';\n }\n\n try {\n await delay(100);\n const favicon = await this.#pptrPage.evaluate(() => {\n const iconLink = document.querySelector(\n 'link[rel*=\"icon\"]',\n ) as HTMLLinkElement;\n if (iconLink && iconLink.href) {\n return iconLink.href;\n }\n\n // fallback\n if (\n window.location &&\n window.location.origin &&\n window.location.origin !== 'null' &&\n window.location.origin !== 'file://'\n ) {\n return `${window.location.origin}/favicon.ico`;\n }\n\n return '';\n });\n\n return favicon;\n } catch (error) {\n console.warn('Failed to get favicon:', error);\n return '';\n }\n }\n\n #setLoading(loading: boolean) {\n if (this.#isLoading === loading) {\n return;\n }\n\n // console.log('setLoading', loading, this.#url);\n\n this.#isLoading = loading;\n this.emit(TabEvents.TabLoadingStateChanged, {\n isLoading: loading,\n tabId: this.#id,\n });\n }\n}\n"],"names":["__webpack_require__","module","getter","definition","key","Object","obj","prop","Symbol","_id","_options","_status","_pptrPage","_url","_favicon","_title","_tabDialog","_keyboard","_mouse","_isLoading","_reloadAbortController","_scriptsOnCreate","_scriptsOnLoad","_dclHandler","_loadHandler","_frameNavigatedHandler","_backMutex","_forwardMutex","_reloadMutex","_onFrameNavigated","_setupVisibilityTracking","_executeScriptsOnCreate","_executeScriptsOnLoad","_getTitle","_getFavicon","setLoading","Tab","EventEmitter","visibilityScript","setupVisibilityTracking","executeScriptsOnCreate","getTitle","getFavicon","document","error","options","binaryImage","meta","BinaryImageParser","base64Image","Base64ImageParser","history","index","length","canGoBack","canGoForward","item","url","validated","validateNavigationUrl","Error","String","_","AbortController","script","Array","page","onFrameNavigated","executeScriptsOnLoad","disableWebdriver","TabEvents","frame","Mutex","TabDialog","Keyboard","Mouse","oldUrl","newUrl","isVisible","iife","Promise","console","delay","pptrTitle","domTitle","_titleElement_textContent","titleElement","favicon","iconLink","window","loading"],"mappings":"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"}
package/dist/tabs/tab.mjs CHANGED
@@ -2,6 +2,7 @@
2
2
  * Copyright (c) 2025 Bytedance, Inc. and its affiliates.
3
3
  * SPDX-License-Identifier: Apache-2.0
4
4
  */
5
+ import delay from "delay";
5
6
  import { EventEmitter } from "eventemitter3";
6
7
  import { Base64ImageParser, BinaryImageParser } from "@agent-infra/media-utils";
7
8
  import { disableWebdriver, visibilityScript } from "../injected-script/index.mjs";
@@ -109,8 +110,16 @@ function tab_ts_dispose_resources(env) {
109
110
  return next();
110
111
  })(env);
111
112
  }
112
- var _id = /*#__PURE__*/ new WeakMap(), _options = /*#__PURE__*/ new WeakMap(), _status = /*#__PURE__*/ new WeakMap(), _pptrPage = /*#__PURE__*/ new WeakMap(), _url = /*#__PURE__*/ new WeakMap(), _favicon = /*#__PURE__*/ new WeakMap(), _title = /*#__PURE__*/ new WeakMap(), _tabDialog = /*#__PURE__*/ new WeakMap(), _keyboard = /*#__PURE__*/ new WeakMap(), _mouse = /*#__PURE__*/ new WeakMap(), _isLoading = /*#__PURE__*/ new WeakMap(), _reloadAbortController = /*#__PURE__*/ new WeakMap(), _scriptsOnCreate = /*#__PURE__*/ new WeakMap(), _scriptsOnLoad = /*#__PURE__*/ new WeakMap(), _dclHandler = /*#__PURE__*/ new WeakMap(), _loadHandler = /*#__PURE__*/ new WeakMap(), _frameNavigatedHandler = /*#__PURE__*/ new WeakMap(), _backMutex = /*#__PURE__*/ new WeakMap(), _forwardMutex = /*#__PURE__*/ new WeakMap(), _reloadMutex = /*#__PURE__*/ new WeakMap(), _onFrameNavigated = /*#__PURE__*/ new WeakSet(), _setupVisibilityTracking = /*#__PURE__*/ new WeakSet(), _executeScriptsOnCreate = /*#__PURE__*/ new WeakSet(), _executeScriptsOnLoad = /*#__PURE__*/ new WeakSet(), _getFavicon = /*#__PURE__*/ new WeakSet(), _setLoading = /*#__PURE__*/ new WeakSet();
113
+ var _id = /*#__PURE__*/ new WeakMap(), _options = /*#__PURE__*/ new WeakMap(), _status = /*#__PURE__*/ new WeakMap(), _pptrPage = /*#__PURE__*/ new WeakMap(), _url = /*#__PURE__*/ new WeakMap(), _favicon = /*#__PURE__*/ new WeakMap(), _title = /*#__PURE__*/ new WeakMap(), _tabDialog = /*#__PURE__*/ new WeakMap(), _keyboard = /*#__PURE__*/ new WeakMap(), _mouse = /*#__PURE__*/ new WeakMap(), _isLoading = /*#__PURE__*/ new WeakMap(), _reloadAbortController = /*#__PURE__*/ new WeakMap(), _scriptsOnCreate = /*#__PURE__*/ new WeakMap(), _scriptsOnLoad = /*#__PURE__*/ new WeakMap(), _dclHandler = /*#__PURE__*/ new WeakMap(), _loadHandler = /*#__PURE__*/ new WeakMap(), _frameNavigatedHandler = /*#__PURE__*/ new WeakMap(), _backMutex = /*#__PURE__*/ new WeakMap(), _forwardMutex = /*#__PURE__*/ new WeakMap(), _reloadMutex = /*#__PURE__*/ new WeakMap(), _onFrameNavigated = /*#__PURE__*/ new WeakSet(), _setupVisibilityTracking = /*#__PURE__*/ new WeakSet(), _executeScriptsOnCreate = /*#__PURE__*/ new WeakSet(), _executeScriptsOnLoad = /*#__PURE__*/ new WeakSet(), _getTitle = /*#__PURE__*/ new WeakSet(), _getFavicon = /*#__PURE__*/ new WeakSet(), _setLoading = /*#__PURE__*/ new WeakSet();
113
114
  class Tab extends EventEmitter {
115
+ async init() {
116
+ if (_class_private_field_get(this, _options).injectVisibilityScript) {
117
+ _class_private_field_get(this, _scriptsOnCreate).push(visibilityScript);
118
+ await _class_private_method_get(this, _setupVisibilityTracking, setupVisibilityTracking).call(this);
119
+ }
120
+ await _class_private_method_get(this, _executeScriptsOnCreate, executeScriptsOnCreate).call(this);
121
+ if (_class_private_field_get(this, _options).userAgentInfo) await _class_private_field_get(this, _pptrPage).setUserAgent(_class_private_field_get(this, _options).userAgentInfo);
122
+ }
114
123
  get tabId() {
115
124
  return _class_private_field_get(this, _id);
116
125
  }
@@ -121,11 +130,11 @@ class Tab extends EventEmitter {
121
130
  return _class_private_field_get(this, _url);
122
131
  }
123
132
  async getTitle() {
124
- if (!_class_private_field_get(this, _title)) _class_private_field_set(this, _title, await _class_private_field_get(this, _pptrPage).title());
133
+ _class_private_field_set(this, _title, await _class_private_method_get(this, _getTitle, getTitle).call(this));
125
134
  return _class_private_field_get(this, _title);
126
135
  }
127
136
  async getFavicon() {
128
- if (!_class_private_field_get(this, _favicon)) _class_private_field_set(this, _favicon, await _class_private_method_get(this, _getFavicon, getFavicon).call(this));
137
+ _class_private_field_set(this, _favicon, await _class_private_method_get(this, _getFavicon, getFavicon).call(this));
129
138
  return _class_private_field_get(this, _favicon);
130
139
  }
131
140
  async _active() {
@@ -204,11 +213,9 @@ class Tab extends EventEmitter {
204
213
  const validated = validateNavigationUrl(url);
205
214
  if (validated.ignored) return {
206
215
  success: false,
207
- url: url,
216
+ url: validated.url,
208
217
  message: validated.message
209
218
  };
210
- _class_private_field_set(this, _url, validated.url);
211
- _class_private_field_set(this, _title, validated.url);
212
219
  _class_private_method_get(this, _setLoading, setLoading).call(this, true);
213
220
  try {
214
221
  await _class_private_field_get(this, _pptrPage).setViewport({
@@ -220,20 +227,18 @@ class Tab extends EventEmitter {
220
227
  waitUntil: options.waitUntil,
221
228
  timeout: options.timeout
222
229
  });
223
- _class_private_field_set(this, _title, await _class_private_field_get(this, _pptrPage).title());
224
- _class_private_field_set(this, _favicon, await _class_private_method_get(this, _getFavicon, getFavicon).call(this));
225
- _class_private_method_get(this, _setLoading, setLoading).call(this, false);
226
230
  return {
227
231
  success: true,
228
- url: _class_private_field_get(this, _url)
232
+ url: validated.url
229
233
  };
230
234
  } catch (error) {
231
- _class_private_method_get(this, _setLoading, setLoading).call(this, false);
232
235
  return {
233
236
  success: false,
234
237
  message: error instanceof Error ? error.message : String(error),
235
238
  url: validated.url
236
239
  };
240
+ } finally{
241
+ _class_private_method_get(this, _setLoading, setLoading).call(this, false);
237
242
  }
238
243
  }
239
244
  async goBack(options = {}) {
@@ -373,7 +378,7 @@ class Tab extends EventEmitter {
373
378
  else _class_private_field_get(this, _scriptsOnLoad).push(script);
374
379
  }
375
380
  constructor(page, options){
376
- super(), _class_private_method_init(this, _onFrameNavigated), _class_private_method_init(this, _setupVisibilityTracking), _class_private_method_init(this, _executeScriptsOnCreate), _class_private_method_init(this, _executeScriptsOnLoad), _class_private_method_init(this, _getFavicon), _class_private_method_init(this, _setLoading), _class_private_field_init(this, _id, {
381
+ super(), _class_private_method_init(this, _onFrameNavigated), _class_private_method_init(this, _setupVisibilityTracking), _class_private_method_init(this, _executeScriptsOnCreate), _class_private_method_init(this, _executeScriptsOnLoad), _class_private_method_init(this, _getTitle), _class_private_method_init(this, _getFavicon), _class_private_method_init(this, _setLoading), _class_private_field_init(this, _id, {
377
382
  writable: true,
378
383
  value: void 0
379
384
  }), _class_private_field_init(this, _options, {
@@ -412,8 +417,7 @@ class Tab extends EventEmitter {
412
417
  }), _class_private_field_init(this, _scriptsOnCreate, {
413
418
  writable: true,
414
419
  value: [
415
- disableWebdriver,
416
- visibilityScript
420
+ disableWebdriver
417
421
  ]
418
422
  }), _class_private_field_init(this, _scriptsOnLoad, {
419
423
  writable: true,
@@ -456,9 +460,6 @@ class Tab extends EventEmitter {
456
460
  _class_private_field_set(this, _tabDialog, new TabDialog(this));
457
461
  _class_private_field_set(this, _keyboard, new Keyboard(page, _class_private_field_get(this, _tabDialog), options.envInfo));
458
462
  _class_private_field_set(this, _mouse, new Mouse(page, _class_private_field_get(this, _tabDialog)));
459
- _class_private_method_get(this, _setupVisibilityTracking, setupVisibilityTracking).call(this);
460
- _class_private_method_get(this, _executeScriptsOnCreate, executeScriptsOnCreate).call(this);
461
- if (options.userAgentInfo) _class_private_field_get(this, _pptrPage).setUserAgent(options.userAgentInfo);
462
463
  _class_private_field_get(this, _pptrPage).on('domcontentloaded', _class_private_field_get(this, _dclHandler));
463
464
  _class_private_field_get(this, _pptrPage).on('load', _class_private_field_get(this, _loadHandler));
464
465
  _class_private_field_get(this, _pptrPage).on('framenavigated', _class_private_field_get(this, _frameNavigatedHandler));
@@ -468,27 +469,11 @@ async function onFrameNavigated(frame) {
468
469
  if (!frame.parentFrame()) {
469
470
  const oldUrl = _class_private_field_get(this, _url);
470
471
  const newUrl = frame.url();
471
- const [title, favicon, historyData] = await Promise.all([
472
- _class_private_field_get(this, _pptrPage).title().catch(()=>'Loading...'),
473
- _class_private_method_get(this, _getFavicon, getFavicon).call(this).catch(()=>''),
474
- this.getHistory().catch(()=>({
475
- index: 0,
476
- history: [],
477
- canGoBack: false,
478
- canGoForward: false
479
- }))
480
- ]);
481
472
  _class_private_field_set(this, _url, newUrl);
482
- _class_private_field_set(this, _title, title);
483
- _class_private_field_set(this, _favicon, favicon);
484
473
  if (oldUrl !== newUrl) this.emit(TabEvents.TabUrlChanged, {
485
474
  tabId: _class_private_field_get(this, _id),
486
475
  oldUrl: oldUrl,
487
- newUrl: newUrl,
488
- title: title,
489
- favicon: favicon,
490
- canGoBack: historyData.canGoBack,
491
- canGoForward: historyData.canGoForward
476
+ newUrl: newUrl
492
477
  });
493
478
  }
494
479
  }
@@ -503,8 +488,10 @@ async function setupVisibilityTracking() {
503
488
  async function executeScriptsOnCreate() {
504
489
  try {
505
490
  const script = iife(_class_private_field_get(this, _scriptsOnCreate).join('\n'));
506
- await _class_private_field_get(this, _pptrPage).evaluateOnNewDocument(script);
507
- await _class_private_field_get(this, _pptrPage).evaluate(script);
491
+ await Promise.race([
492
+ _class_private_field_get(this, _pptrPage).evaluateOnNewDocument(script),
493
+ _class_private_field_get(this, _pptrPage).evaluate(script)
494
+ ]);
508
495
  } catch (error) {
509
496
  console.warn("Failed to execute script on create:", error);
510
497
  }
@@ -517,9 +504,26 @@ async function executeScriptsOnLoad() {
517
504
  console.warn("Failed to execute script on load:", error);
518
505
  }
519
506
  }
507
+ async function getTitle() {
508
+ try {
509
+ await delay(100);
510
+ const pptrTitle = (await _class_private_field_get(this, _pptrPage).title()).trim();
511
+ if (pptrTitle) return pptrTitle;
512
+ const domTitle = await _class_private_field_get(this, _pptrPage).evaluate(()=>{
513
+ var _titleElement_textContent;
514
+ const titleElement = document.querySelector('title');
515
+ return (null == titleElement ? void 0 : null == (_titleElement_textContent = titleElement.textContent) ? void 0 : _titleElement_textContent.trim()) || '';
516
+ });
517
+ if (domTitle) return domTitle;
518
+ return _class_private_field_get(this, _url);
519
+ } catch (error) {
520
+ return '';
521
+ }
522
+ }
520
523
  async function getFavicon() {
521
524
  if ('about:blank' === this.url || this.url.startsWith('chrome://')) return '';
522
525
  try {
526
+ await delay(100);
523
527
  const favicon = await _class_private_field_get(this, _pptrPage).evaluate(()=>{
524
528
  const iconLink = document.querySelector('link[rel*="icon"]');
525
529
  if (iconLink && iconLink.href) return iconLink.href;