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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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
@@ -1 +1 @@
1
- {"version":3,"file":"tabs/tab.mjs","sources":["webpack://@agent-infra/browser/./src/tabs/tab.ts"],"sourcesContent":["/*\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":["_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.mjs","sources":["webpack://@agent-infra/browser/./src/tabs/tab.ts"],"sourcesContent":["/*\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":["_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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"}
@@ -8,7 +8,7 @@ export declare class Tabs<T extends Tab = Tab> {
8
8
  constructor(browser: Browser, options: TabsOptions);
9
9
  subscribe(callback: () => void): () => void;
10
10
  getSnapshot(): TabsState;
11
- protected createTabInstance(page: Page, options: TabOptions): T;
11
+ protected createTabInstance(page: Page, options: TabOptions): Promise<T>;
12
12
  protected initializeExistingTabs(): Promise<void>;
13
13
  createTab(): Promise<string>;
14
14
  activeTab(tabId: string): Promise<boolean>;
@@ -1 +1 @@
1
- {"version":3,"file":"tabs.d.ts","sourceRoot":"","sources":["../../src/tabs/tabs.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAG5B,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAU,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAIL,KAAK,UAAU,EACf,KAAK,SAAS,EAEd,KAAK,WAAW,EAEjB,MAAM,eAAe,CAAC;AAEvB,qBAAa,IAAI,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG;;IAO5B,KAAK,EAAE,SAAS,CAAC;WAGX,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW;gBAM9C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW;IAwBlD,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAI3C,WAAW,IAAI,SAAS;IAOxB,SAAS,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,GAAG,CAAC;cAM/C,sBAAsB;IAkFhC,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IA0D5B,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAMhD,YAAY,IAAI,CAAC,GAAG,IAAI;IAkDlB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQ/C,aAAa,IAAI,MAAM;IAKvB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAIxB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAkH/B"}
1
+ {"version":3,"file":"tabs.d.ts","sourceRoot":"","sources":["../../src/tabs/tabs.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAG5B,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAU,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAIL,KAAK,UAAU,EACf,KAAK,SAAS,EAEd,KAAK,WAAW,EAEjB,MAAM,eAAe,CAAC;AAEvB,qBAAa,IAAI,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG;;IAO5B,KAAK,EAAE,SAAS,CAAC;WAGX,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW;gBAM9C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW;IAwBlD,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAI3C,WAAW,IAAI,SAAS;cAOR,iBAAiB,CAC/B,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,CAAC,CAAC;cASG,sBAAsB;IAkFhC,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IA0D5B,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAMhD,YAAY,IAAI,CAAC,GAAG,IAAI;IAkDlB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQ/C,aAAa,IAAI,MAAM;IAKvB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAIxB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAqG/B"}
package/dist/tabs/tabs.js CHANGED
@@ -161,8 +161,10 @@ class Tabs {
161
161
  activeTabId: this.state.activeTabId
162
162
  };
163
163
  }
164
- createTabInstance(page, options) {
165
- return new external_tab_js_namespaceObject.Tab(page, options);
164
+ async createTabInstance(page, options) {
165
+ const tab = new external_tab_js_namespaceObject.Tab(page, options);
166
+ await tab.init();
167
+ return tab;
166
168
  }
167
169
  async initializeExistingTabs() {
168
170
  var _initedTabs_find;
@@ -170,7 +172,7 @@ class Tabs {
170
172
  if (0 === existingPages.length) return;
171
173
  const initTabTasks = existingPages.filter((pptrPage)=>!(0, index_js_namespaceObject.validateNavigationUrl)(pptrPage.url()).ignored).map(async (pptrPage)=>{
172
174
  const tabId = pptrPage.target()._targetId;
173
- const tab = this.createTabInstance(pptrPage, {
175
+ const tab = await this.createTabInstance(pptrPage, {
174
176
  tabId: tabId,
175
177
  ..._class_private_field_get(this, _options)
176
178
  });
@@ -287,7 +289,7 @@ async function createTab(targetId, pptrPage) {
287
289
  _ts_add_disposable_resource(env, await _class_private_field_get(this, _cteateMutex).acquire(), false);
288
290
  if (_class_private_field_get(this, _operations).creatingTargetIds.has(targetId)) return targetId;
289
291
  _class_private_field_get(this, _operations).creatingTargetIds.add(targetId);
290
- const tab = this.createTabInstance(pptrPage, {
292
+ const tab = await this.createTabInstance(pptrPage, {
291
293
  tabId: targetId,
292
294
  ..._class_private_field_get(this, _options)
293
295
  });
@@ -422,19 +424,7 @@ function setupTabEvents(tab, tabId) {
422
424
  };
423
425
  this.state.tabs.set(tabId, updatedTabMeta);
424
426
  });
425
- tab.on(tabs_js_namespaceObject.TabEvents.TabUrlChanged, (event)=>{
426
- const currentTabMeta = this.state.tabs.get(tabId);
427
- if (!currentTabMeta) return;
428
- const updatedTabMeta = {
429
- ...currentTabMeta,
430
- url: event.newUrl,
431
- title: event.title,
432
- favicon: event.favicon,
433
- canGoBack: event.canGoBack,
434
- canGoForward: event.canGoForward
435
- };
436
- this.state.tabs.set(tabId, updatedTabMeta);
437
- });
427
+ tab.on(tabs_js_namespaceObject.TabEvents.TabUrlChanged, (event)=>_class_private_method_get(this, _syncTabMeta, syncTabMeta).call(this, event.tabId));
438
428
  tab.on(tabs_js_namespaceObject.TabEvents.TabVisibilityChanged, (event)=>{
439
429
  if (event.isVisible) _class_private_method_get(this, _activeTab, tabs_activeTab).call(this, event.tabId);
440
430
  });
@@ -1 +1 @@
1
- {"version":3,"file":"tabs/tabs.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/tabs.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 { proxy, subscribe } from 'valtio';\nimport { proxyMap } from 'valtio/utils';\nimport { Tab } from './tab';\nimport { validateNavigationUrl, Mutex } from '../utils';\n\nimport type { Browser, Page, Target } from 'puppeteer-core';\nimport {\n TabEvents,\n type TabEventsMap,\n type TabMeta,\n type TabOptions,\n type TabsState,\n type TabsOperationTracker,\n type TabsOptions,\n type DialogMeta,\n} from '../types/tabs';\n\nexport class Tabs<T extends Tab = Tab> {\n #pptrBrowser: Browser;\n #tabs: Map<string, T>;\n #options: TabsOptions;\n\n #operations: TabsOperationTracker;\n\n public state: TabsState;\n #isIntentionalDestroy = false;\n\n static async create(browser: Browser, options: TabsOptions) {\n const tabs = new Tabs(browser, options);\n await tabs.initializeExistingTabs();\n return tabs;\n }\n\n constructor(browser: Browser, options: TabsOptions) {\n this.#pptrBrowser = browser;\n this.#options = options;\n\n this.#tabs = new Map<string, T>();\n this.state = proxy({\n tabs: proxyMap<string, TabMeta>(),\n activeTabId: null,\n });\n this.#operations = {\n creatingTargetIds: new Set<string>(),\n switchingTargetIds: new Set<string>(),\n closingTargetIds: new Set<string>(),\n };\n\n // tabs events\n this.#pptrBrowser.on('targetcreated', (target) =>\n this.#handleTargetCreated(target),\n );\n this.#pptrBrowser.on('targetdestroyed', (target) =>\n this.#handleTargetDestroyed(target),\n );\n }\n\n subscribe(callback: () => void): () => void {\n return subscribe(this.state, callback);\n }\n\n getSnapshot(): TabsState {\n return {\n tabs: new Map(this.state.tabs),\n activeTabId: this.state.activeTabId,\n };\n }\n\n protected createTabInstance(page: Page, options: TabOptions): T {\n return new Tab(page, options) as T;\n }\n\n // #region init ExistingTabs\n\n protected async initializeExistingTabs() {\n const existingPages = await this.#pptrBrowser.pages();\n\n // console.log('initializeExistingTabs', existingPages);\n\n if (existingPages.length === 0) {\n return;\n }\n\n // init all existing tabs\n const initTabTasks = existingPages\n .filter((pptrPage) => !validateNavigationUrl(pptrPage.url()).ignored) // not allowed chrome devtools frontend\n .map(async (pptrPage) => {\n // @ts-ignore\n const tabId = pptrPage.target()._targetId;\n const tab = this.createTabInstance(pptrPage, {\n tabId: tabId,\n ...this.#options,\n });\n\n this.#tabs.set(tabId, tab);\n this.#setupTabEvents(tab, tabId);\n await this.#syncTabMeta(tabId);\n\n const isActive = await tab._checkActiveStatusWithRuntime();\n return { tabId, pptrPage, isActive };\n });\n const initedTabs = await Promise.all(initTabTasks);\n\n // active tab\n let activeTabId = initedTabs.find((result) => result.isActive)?.tabId;\n if (!activeTabId) {\n activeTabId = initedTabs[0].tabId;\n }\n\n await this.#activeTab(activeTabId);\n }\n\n // #endregion\n\n // #region createTab\n\n #cteateMutex = new Mutex();\n async #createTab(targetId: string, pptrPage: Page) {\n using _ = await this.#cteateMutex.acquire();\n\n if (this.#operations.creatingTargetIds.has(targetId)) {\n return targetId;\n }\n this.#operations.creatingTargetIds.add(targetId);\n\n const tab = this.createTabInstance(pptrPage, {\n tabId: targetId,\n ...this.#options,\n });\n\n this.#tabs.set(targetId, tab);\n this.#setupTabEvents(tab, targetId);\n await this.#syncTabMeta(targetId);\n\n return targetId;\n }\n\n async #handleTargetCreated(target: Target) {\n if (target.type() !== 'page') {\n return;\n }\n const pptrPage = await target.page();\n if (!pptrPage) {\n return;\n }\n // @ts-ignore\n const targetId = target._targetId;\n\n console.log('handleTargetCreated', targetId);\n\n await this.#createTab(targetId, pptrPage);\n await this.#activeTab(targetId);\n\n return targetId;\n }\n\n async createTab(): Promise<string> {\n const pptrPage = await this.#pptrBrowser.newPage();\n // @ts-ignore\n const targetId = pptrPage.target()._targetId;\n\n await this.#createTab(targetId, pptrPage);\n await this.#activeTab(targetId);\n\n return targetId;\n }\n\n // #endregion\n\n // #region activeTab\n\n #activeMutex = new Mutex();\n async #activeTab(tabId: string) {\n using _ = await this.#activeMutex.acquire();\n\n // console.trace('#activeTab', tabId);\n\n // check lock\n if (this.#operations.switchingTargetIds.has(tabId)) {\n return false;\n }\n this.#operations.switchingTargetIds.add(tabId);\n\n // check tab existence\n const tab = this.#tabs.get(tabId);\n if (!tab) {\n this.#operations.switchingTargetIds.delete(tabId);\n return false;\n }\n if (this.state.activeTabId === tabId) {\n this.#operations.switchingTargetIds.delete(tabId);\n return true;\n }\n\n // active select tab\n this.state.activeTabId = tabId;\n await tab._active();\n await this.#syncTabMeta(this.state.activeTabId);\n\n // inactivate other tabs\n const inactivePromises = [];\n for (const [id, tabInstance] of this.#tabs) {\n if (id !== tabId) {\n inactivePromises.push(tabInstance._inactive());\n }\n }\n await Promise.all(inactivePromises);\n\n // release lock\n this.#operations.switchingTargetIds.delete(tabId);\n\n return true;\n }\n\n async activeTab(tabId: string): Promise<boolean> {\n console.log('public activeTab', tabId);\n\n return await this.#activeTab(tabId);\n }\n\n getActiveTab(): T | null {\n if (!this.state.activeTabId) return null;\n return this.#tabs.get(this.state.activeTabId) || null;\n }\n\n // #endregion\n\n // #region closeTab\n\n #closeMutex = new Mutex();\n async #closeTab(tabId: string): Promise<boolean> {\n using _ = await this.#closeMutex.acquire();\n\n // check\n if (this.#operations.closingTargetIds.has(tabId)) {\n return false;\n }\n this.#operations.closingTargetIds.add(tabId);\n\n // close tab\n const tab = this.#tabs.get(tabId);\n if (!tab) {\n return false;\n }\n await tab._close();\n this.#tabs.delete(tabId);\n this.state.tabs.delete(tabId);\n\n // fallback logic to prevent the browser from being closed directly\n if (this.state.activeTabId === tabId) {\n this.state.activeTabId = null;\n\n if (this.#tabs.size === 0 && !this.#isIntentionalDestroy) {\n await this.createTab();\n }\n }\n\n return true;\n }\n\n async #handleTargetDestroyed(target: Target) {\n if (target.type() !== 'page') {\n return;\n }\n\n // @ts-ignore\n const targetId = target._targetId;\n await this.#closeTab(targetId);\n }\n\n async closeTab(tabId: string): Promise<boolean> {\n return await this.#closeTab(tabId);\n }\n\n // #endregion\n\n // #region public methods\n\n getCurrentUrl(): string {\n const activeTab = this.getActiveTab();\n return activeTab ? activeTab.url : 'about:blank';\n }\n\n hasTab(tabId: string): boolean {\n return this.state.tabs.has(tabId);\n }\n\n async destroy(): Promise<void> {\n this.#isIntentionalDestroy = true;\n\n const closeTasks = Array.from(this.#tabs.keys()).map((tabId) =>\n this.closeTab(tabId),\n );\n await Promise.all(closeTasks);\n }\n\n // #endregion\n\n // #region private methods\n\n async #syncTabMeta(tabId: string, isLoading = false): Promise<void> {\n const tab = this.#tabs.get(tabId);\n if (!tab) return;\n\n const [title, favicon, historyData] = await Promise.all([\n tab.getTitle().catch(() => 'Loading...'),\n tab.getFavicon().catch(() => ''),\n tab.getHistory().catch(() => ({\n index: 0,\n history: [],\n canGoBack: false,\n canGoForward: false,\n })),\n ]);\n\n const tabMeta: TabMeta = {\n id: tabId,\n url: tab.url || 'about:blank',\n title: title,\n favicon: favicon,\n isLoading: isLoading,\n isActive: tabId === this.state.activeTabId,\n canGoBack: historyData.canGoBack,\n canGoForward: historyData.canGoForward,\n };\n\n // console.log('syncTabMeta', tabId, tabMeta);\n\n this.state.tabs.set(tabId, tabMeta);\n }\n\n #updateTabDialog(tabId: string, dialogMeta: DialogMeta | null): void {\n const currentTabMeta = this.state.tabs.get(tabId);\n if (!currentTabMeta) return;\n\n const updatedTabMeta: TabMeta = {\n ...currentTabMeta,\n dialog: dialogMeta || undefined,\n };\n\n this.state.tabs.set(tabId, updatedTabMeta);\n }\n\n #setupTabEvents(tab: Tab, tabId: string): void {\n tab.on(\n TabEvents.TabLoadingStateChanged,\n (event: TabEventsMap[TabEvents.TabLoadingStateChanged]) => {\n const currentTabMeta = this.state.tabs.get(tabId);\n if (!currentTabMeta) return;\n\n const updatedTabMeta: TabMeta = {\n ...currentTabMeta,\n isLoading: event.isLoading,\n };\n\n this.state.tabs.set(tabId, updatedTabMeta);\n },\n );\n tab.on(\n TabEvents.TabUrlChanged,\n (event: TabEventsMap[TabEvents.TabUrlChanged]) => {\n const currentTabMeta = this.state.tabs.get(tabId);\n if (!currentTabMeta) return;\n\n const updatedTabMeta: TabMeta = {\n ...currentTabMeta,\n url: event.newUrl,\n title: event.title,\n favicon: event.favicon,\n canGoBack: event.canGoBack,\n canGoForward: event.canGoForward,\n };\n\n this.state.tabs.set(tabId, updatedTabMeta);\n },\n );\n tab.on(\n TabEvents.TabVisibilityChanged,\n (event: TabEventsMap[TabEvents.TabVisibilityChanged]) => {\n if (event.isVisible) {\n this.#activeTab(event.tabId);\n }\n },\n );\n tab.on(\n TabEvents.TabDialogChanged,\n (event: TabEventsMap[TabEvents.TabDialogChanged]) => {\n if (event.isOpen) {\n this.#updateTabDialog(tabId, {\n type: event.type!,\n message: event.message!,\n defaultValue: event.defaultValue!,\n });\n } else {\n this.#updateTabDialog(tabId, null);\n }\n },\n );\n }\n\n // #endregion\n}\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","_pptrBrowser","_tabs","_options","_operations","_isIntentionalDestroy","_cteateMutex","_createTab","_handleTargetCreated","_activeMutex","_activeTab","_closeMutex","_closeTab","_handleTargetDestroyed","_syncTabMeta","updateTabDialog","setupTabEvents","Tabs","browser","options","tabs","callback","subscribe","Map","page","Tab","_initedTabs_find","existingPages","initTabTasks","pptrPage","validateNavigationUrl","tabId","tab","syncTabMeta","isActive","initedTabs","Promise","activeTabId","result","activeTab","targetId","createTab","console","closeTab","closeTasks","Array","handleTargetCreated","handleTargetDestroyed","Mutex","proxy","proxyMap","Set","target","_","inactivePromises","id","tabInstance","isLoading","title","favicon","historyData","tabMeta","dialogMeta","currentTabMeta","updatedTabMeta","undefined","TabEvents","event"],"mappings":"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"}
1
+ {"version":3,"file":"tabs/tabs.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/tabs.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 { proxy, subscribe } from 'valtio';\nimport { proxyMap } from 'valtio/utils';\nimport { Tab } from './tab';\nimport { validateNavigationUrl, Mutex } from '../utils';\n\nimport type { Browser, Page, Target } from 'puppeteer-core';\nimport {\n TabEvents,\n type TabEventsMap,\n type TabMeta,\n type TabOptions,\n type TabsState,\n type TabsOperationTracker,\n type TabsOptions,\n type DialogMeta,\n} from '../types/tabs';\n\nexport class Tabs<T extends Tab = Tab> {\n #pptrBrowser: Browser;\n #tabs: Map<string, T>;\n #options: TabsOptions;\n\n #operations: TabsOperationTracker;\n\n public state: TabsState;\n #isIntentionalDestroy = false;\n\n static async create(browser: Browser, options: TabsOptions) {\n const tabs = new Tabs(browser, options);\n await tabs.initializeExistingTabs();\n return tabs;\n }\n\n constructor(browser: Browser, options: TabsOptions) {\n this.#pptrBrowser = browser;\n this.#options = options;\n\n this.#tabs = new Map<string, T>();\n this.state = proxy({\n tabs: proxyMap<string, TabMeta>(),\n activeTabId: null,\n });\n this.#operations = {\n creatingTargetIds: new Set<string>(),\n switchingTargetIds: new Set<string>(),\n closingTargetIds: new Set<string>(),\n };\n\n // tabs events\n this.#pptrBrowser.on('targetcreated', (target) =>\n this.#handleTargetCreated(target),\n );\n this.#pptrBrowser.on('targetdestroyed', (target) =>\n this.#handleTargetDestroyed(target),\n );\n }\n\n subscribe(callback: () => void): () => void {\n return subscribe(this.state, callback);\n }\n\n getSnapshot(): TabsState {\n return {\n tabs: new Map(this.state.tabs),\n activeTabId: this.state.activeTabId,\n };\n }\n\n protected async createTabInstance(\n page: Page,\n options: TabOptions,\n ): Promise<T> {\n const tab = new Tab(page, options) as T;\n await tab.init();\n\n return tab;\n }\n\n // #region init ExistingTabs\n\n protected async initializeExistingTabs() {\n const existingPages = await this.#pptrBrowser.pages();\n\n // console.log('initializeExistingTabs', existingPages);\n\n if (existingPages.length === 0) {\n return;\n }\n\n // init all existing tabs\n const initTabTasks = existingPages\n .filter((pptrPage) => !validateNavigationUrl(pptrPage.url()).ignored) // not allowed chrome devtools frontend\n .map(async (pptrPage) => {\n // @ts-ignore\n const tabId = pptrPage.target()._targetId;\n const tab = await this.createTabInstance(pptrPage, {\n tabId: tabId,\n ...this.#options,\n });\n\n this.#tabs.set(tabId, tab);\n this.#setupTabEvents(tab, tabId);\n await this.#syncTabMeta(tabId);\n\n const isActive = await tab._checkActiveStatusWithRuntime();\n return { tabId, pptrPage, isActive };\n });\n const initedTabs = await Promise.all(initTabTasks);\n\n // active tab\n let activeTabId = initedTabs.find((result) => result.isActive)?.tabId;\n if (!activeTabId) {\n activeTabId = initedTabs[0].tabId;\n }\n\n await this.#activeTab(activeTabId);\n }\n\n // #endregion\n\n // #region createTab\n\n #cteateMutex = new Mutex();\n async #createTab(targetId: string, pptrPage: Page) {\n using _ = await this.#cteateMutex.acquire();\n\n if (this.#operations.creatingTargetIds.has(targetId)) {\n return targetId;\n }\n this.#operations.creatingTargetIds.add(targetId);\n\n const tab = await this.createTabInstance(pptrPage, {\n tabId: targetId,\n ...this.#options,\n });\n\n this.#tabs.set(targetId, tab);\n this.#setupTabEvents(tab, targetId);\n await this.#syncTabMeta(targetId);\n\n return targetId;\n }\n\n async #handleTargetCreated(target: Target) {\n if (target.type() !== 'page') {\n return;\n }\n const pptrPage = await target.page();\n if (!pptrPage) {\n return;\n }\n // @ts-ignore\n const targetId = target._targetId;\n\n console.log('handleTargetCreated', targetId);\n\n await this.#createTab(targetId, pptrPage);\n await this.#activeTab(targetId);\n\n return targetId;\n }\n\n async createTab(): Promise<string> {\n const pptrPage = await this.#pptrBrowser.newPage();\n // @ts-ignore\n const targetId = pptrPage.target()._targetId;\n\n await this.#createTab(targetId, pptrPage);\n await this.#activeTab(targetId);\n\n return targetId;\n }\n\n // #endregion\n\n // #region activeTab\n\n #activeMutex = new Mutex();\n async #activeTab(tabId: string) {\n using _ = await this.#activeMutex.acquire();\n\n // console.trace('#activeTab', tabId);\n\n // check lock\n if (this.#operations.switchingTargetIds.has(tabId)) {\n return false;\n }\n this.#operations.switchingTargetIds.add(tabId);\n\n // check tab existence\n const tab = this.#tabs.get(tabId);\n if (!tab) {\n this.#operations.switchingTargetIds.delete(tabId);\n return false;\n }\n if (this.state.activeTabId === tabId) {\n this.#operations.switchingTargetIds.delete(tabId);\n return true;\n }\n\n // active select tab\n this.state.activeTabId = tabId;\n await tab._active();\n await this.#syncTabMeta(this.state.activeTabId);\n\n // inactivate other tabs\n const inactivePromises = [];\n for (const [id, tabInstance] of this.#tabs) {\n if (id !== tabId) {\n inactivePromises.push(tabInstance._inactive());\n }\n }\n await Promise.all(inactivePromises);\n\n // release lock\n this.#operations.switchingTargetIds.delete(tabId);\n\n return true;\n }\n\n async activeTab(tabId: string): Promise<boolean> {\n console.log('public activeTab', tabId);\n\n return await this.#activeTab(tabId);\n }\n\n getActiveTab(): T | null {\n if (!this.state.activeTabId) return null;\n return this.#tabs.get(this.state.activeTabId) || null;\n }\n\n // #endregion\n\n // #region closeTab\n\n #closeMutex = new Mutex();\n async #closeTab(tabId: string): Promise<boolean> {\n using _ = await this.#closeMutex.acquire();\n\n // check\n if (this.#operations.closingTargetIds.has(tabId)) {\n return false;\n }\n this.#operations.closingTargetIds.add(tabId);\n\n // close tab\n const tab = this.#tabs.get(tabId);\n if (!tab) {\n return false;\n }\n await tab._close();\n this.#tabs.delete(tabId);\n this.state.tabs.delete(tabId);\n\n // fallback logic to prevent the browser from being closed directly\n if (this.state.activeTabId === tabId) {\n this.state.activeTabId = null;\n\n if (this.#tabs.size === 0 && !this.#isIntentionalDestroy) {\n await this.createTab();\n }\n }\n\n return true;\n }\n\n async #handleTargetDestroyed(target: Target) {\n if (target.type() !== 'page') {\n return;\n }\n\n // @ts-ignore\n const targetId = target._targetId;\n await this.#closeTab(targetId);\n }\n\n async closeTab(tabId: string): Promise<boolean> {\n return await this.#closeTab(tabId);\n }\n\n // #endregion\n\n // #region public methods\n\n getCurrentUrl(): string {\n const activeTab = this.getActiveTab();\n return activeTab ? activeTab.url : 'about:blank';\n }\n\n hasTab(tabId: string): boolean {\n return this.state.tabs.has(tabId);\n }\n\n async destroy(): Promise<void> {\n this.#isIntentionalDestroy = true;\n\n const closeTasks = Array.from(this.#tabs.keys()).map((tabId) =>\n this.closeTab(tabId),\n );\n await Promise.all(closeTasks);\n }\n\n // #endregion\n\n // #region private methods\n\n async #syncTabMeta(tabId: string, isLoading = false): Promise<void> {\n const tab = this.#tabs.get(tabId);\n if (!tab) return;\n\n const [title, favicon, historyData] = await Promise.all([\n tab.getTitle().catch(() => 'Loading...'),\n tab.getFavicon().catch(() => ''),\n tab.getHistory().catch(() => ({\n index: 0,\n history: [],\n canGoBack: false,\n canGoForward: false,\n })),\n ]);\n\n const tabMeta: TabMeta = {\n id: tabId,\n url: tab.url || 'about:blank',\n title: title,\n favicon: favicon,\n isLoading: isLoading,\n isActive: tabId === this.state.activeTabId,\n canGoBack: historyData.canGoBack,\n canGoForward: historyData.canGoForward,\n };\n\n // console.log('syncTabMeta', tabId, tabMeta);\n\n this.state.tabs.set(tabId, tabMeta);\n }\n\n #updateTabDialog(tabId: string, dialogMeta: DialogMeta | null): void {\n const currentTabMeta = this.state.tabs.get(tabId);\n if (!currentTabMeta) return;\n\n const updatedTabMeta: TabMeta = {\n ...currentTabMeta,\n dialog: dialogMeta || undefined,\n };\n\n this.state.tabs.set(tabId, updatedTabMeta);\n }\n\n #setupTabEvents(tab: Tab, tabId: string): void {\n tab.on(\n TabEvents.TabLoadingStateChanged,\n (event: TabEventsMap[TabEvents.TabLoadingStateChanged]) => {\n const currentTabMeta = this.state.tabs.get(tabId);\n if (!currentTabMeta) return;\n\n const updatedTabMeta: TabMeta = {\n ...currentTabMeta,\n isLoading: event.isLoading,\n };\n\n this.state.tabs.set(tabId, updatedTabMeta);\n },\n );\n tab.on(\n TabEvents.TabUrlChanged,\n (event: TabEventsMap[TabEvents.TabUrlChanged]) =>\n this.#syncTabMeta(event.tabId),\n );\n tab.on(\n TabEvents.TabVisibilityChanged,\n (event: TabEventsMap[TabEvents.TabVisibilityChanged]) => {\n if (event.isVisible) {\n this.#activeTab(event.tabId);\n }\n },\n );\n tab.on(\n TabEvents.TabDialogChanged,\n (event: TabEventsMap[TabEvents.TabDialogChanged]) => {\n if (event.isOpen) {\n this.#updateTabDialog(tabId, {\n type: event.type!,\n message: event.message!,\n defaultValue: event.defaultValue!,\n });\n } else {\n this.#updateTabDialog(tabId, null);\n }\n },\n );\n }\n\n // #endregion\n}\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","_pptrBrowser","_tabs","_options","_operations","_isIntentionalDestroy","_cteateMutex","_createTab","_handleTargetCreated","_activeMutex","_activeTab","_closeMutex","_closeTab","_handleTargetDestroyed","_syncTabMeta","updateTabDialog","setupTabEvents","Tabs","browser","options","tabs","callback","subscribe","Map","page","tab","Tab","_initedTabs_find","existingPages","initTabTasks","pptrPage","validateNavigationUrl","tabId","syncTabMeta","isActive","initedTabs","Promise","activeTabId","result","activeTab","targetId","createTab","console","closeTab","closeTasks","Array","handleTargetCreated","handleTargetDestroyed","Mutex","proxy","proxyMap","Set","target","_","inactivePromises","id","tabInstance","isLoading","title","favicon","historyData","tabMeta","dialogMeta","currentTabMeta","updatedTabMeta","undefined","TabEvents","event"],"mappings":"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"}
@@ -133,8 +133,10 @@ class Tabs {
133
133
  activeTabId: this.state.activeTabId
134
134
  };
135
135
  }
136
- createTabInstance(page, options) {
137
- return new Tab(page, options);
136
+ async createTabInstance(page, options) {
137
+ const tab = new Tab(page, options);
138
+ await tab.init();
139
+ return tab;
138
140
  }
139
141
  async initializeExistingTabs() {
140
142
  var _initedTabs_find;
@@ -142,7 +144,7 @@ class Tabs {
142
144
  if (0 === existingPages.length) return;
143
145
  const initTabTasks = existingPages.filter((pptrPage)=>!validateNavigationUrl(pptrPage.url()).ignored).map(async (pptrPage)=>{
144
146
  const tabId = pptrPage.target()._targetId;
145
- const tab = this.createTabInstance(pptrPage, {
147
+ const tab = await this.createTabInstance(pptrPage, {
146
148
  tabId: tabId,
147
149
  ..._class_private_field_get(this, _options)
148
150
  });
@@ -259,7 +261,7 @@ async function createTab(targetId, pptrPage) {
259
261
  _ts_add_disposable_resource(env, await _class_private_field_get(this, _cteateMutex).acquire(), false);
260
262
  if (_class_private_field_get(this, _operations).creatingTargetIds.has(targetId)) return targetId;
261
263
  _class_private_field_get(this, _operations).creatingTargetIds.add(targetId);
262
- const tab = this.createTabInstance(pptrPage, {
264
+ const tab = await this.createTabInstance(pptrPage, {
263
265
  tabId: targetId,
264
266
  ..._class_private_field_get(this, _options)
265
267
  });
@@ -394,19 +396,7 @@ function setupTabEvents(tab, tabId) {
394
396
  };
395
397
  this.state.tabs.set(tabId, updatedTabMeta);
396
398
  });
397
- tab.on(TabEvents.TabUrlChanged, (event)=>{
398
- const currentTabMeta = this.state.tabs.get(tabId);
399
- if (!currentTabMeta) return;
400
- const updatedTabMeta = {
401
- ...currentTabMeta,
402
- url: event.newUrl,
403
- title: event.title,
404
- favicon: event.favicon,
405
- canGoBack: event.canGoBack,
406
- canGoForward: event.canGoForward
407
- };
408
- this.state.tabs.set(tabId, updatedTabMeta);
409
- });
399
+ tab.on(TabEvents.TabUrlChanged, (event)=>_class_private_method_get(this, _syncTabMeta, syncTabMeta).call(this, event.tabId));
410
400
  tab.on(TabEvents.TabVisibilityChanged, (event)=>{
411
401
  if (event.isVisible) _class_private_method_get(this, _activeTab, tabs_activeTab).call(this, event.tabId);
412
402
  });
@@ -1 +1 @@
1
- {"version":3,"file":"tabs/tabs.mjs","sources":["webpack://@agent-infra/browser/./src/tabs/tabs.ts"],"sourcesContent":["/*\n * Copyright (c) 2025 Bytedance, Inc. and its affiliates.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { proxy, subscribe } from 'valtio';\nimport { proxyMap } from 'valtio/utils';\nimport { Tab } from './tab';\nimport { validateNavigationUrl, Mutex } from '../utils';\n\nimport type { Browser, Page, Target } from 'puppeteer-core';\nimport {\n TabEvents,\n type TabEventsMap,\n type TabMeta,\n type TabOptions,\n type TabsState,\n type TabsOperationTracker,\n type TabsOptions,\n type DialogMeta,\n} from '../types/tabs';\n\nexport class Tabs<T extends Tab = Tab> {\n #pptrBrowser: Browser;\n #tabs: Map<string, T>;\n #options: TabsOptions;\n\n #operations: TabsOperationTracker;\n\n public state: TabsState;\n #isIntentionalDestroy = false;\n\n static async create(browser: Browser, options: TabsOptions) {\n const tabs = new Tabs(browser, options);\n await tabs.initializeExistingTabs();\n return tabs;\n }\n\n constructor(browser: Browser, options: TabsOptions) {\n this.#pptrBrowser = browser;\n this.#options = options;\n\n this.#tabs = new Map<string, T>();\n this.state = proxy({\n tabs: proxyMap<string, TabMeta>(),\n activeTabId: null,\n });\n this.#operations = {\n creatingTargetIds: new Set<string>(),\n switchingTargetIds: new Set<string>(),\n closingTargetIds: new Set<string>(),\n };\n\n // tabs events\n this.#pptrBrowser.on('targetcreated', (target) =>\n this.#handleTargetCreated(target),\n );\n this.#pptrBrowser.on('targetdestroyed', (target) =>\n this.#handleTargetDestroyed(target),\n );\n }\n\n subscribe(callback: () => void): () => void {\n return subscribe(this.state, callback);\n }\n\n getSnapshot(): TabsState {\n return {\n tabs: new Map(this.state.tabs),\n activeTabId: this.state.activeTabId,\n };\n }\n\n protected createTabInstance(page: Page, options: TabOptions): T {\n return new Tab(page, options) as T;\n }\n\n // #region init ExistingTabs\n\n protected async initializeExistingTabs() {\n const existingPages = await this.#pptrBrowser.pages();\n\n // console.log('initializeExistingTabs', existingPages);\n\n if (existingPages.length === 0) {\n return;\n }\n\n // init all existing tabs\n const initTabTasks = existingPages\n .filter((pptrPage) => !validateNavigationUrl(pptrPage.url()).ignored) // not allowed chrome devtools frontend\n .map(async (pptrPage) => {\n // @ts-ignore\n const tabId = pptrPage.target()._targetId;\n const tab = this.createTabInstance(pptrPage, {\n tabId: tabId,\n ...this.#options,\n });\n\n this.#tabs.set(tabId, tab);\n this.#setupTabEvents(tab, tabId);\n await this.#syncTabMeta(tabId);\n\n const isActive = await tab._checkActiveStatusWithRuntime();\n return { tabId, pptrPage, isActive };\n });\n const initedTabs = await Promise.all(initTabTasks);\n\n // active tab\n let activeTabId = initedTabs.find((result) => result.isActive)?.tabId;\n if (!activeTabId) {\n activeTabId = initedTabs[0].tabId;\n }\n\n await this.#activeTab(activeTabId);\n }\n\n // #endregion\n\n // #region createTab\n\n #cteateMutex = new Mutex();\n async #createTab(targetId: string, pptrPage: Page) {\n using _ = await this.#cteateMutex.acquire();\n\n if (this.#operations.creatingTargetIds.has(targetId)) {\n return targetId;\n }\n this.#operations.creatingTargetIds.add(targetId);\n\n const tab = this.createTabInstance(pptrPage, {\n tabId: targetId,\n ...this.#options,\n });\n\n this.#tabs.set(targetId, tab);\n this.#setupTabEvents(tab, targetId);\n await this.#syncTabMeta(targetId);\n\n return targetId;\n }\n\n async #handleTargetCreated(target: Target) {\n if (target.type() !== 'page') {\n return;\n }\n const pptrPage = await target.page();\n if (!pptrPage) {\n return;\n }\n // @ts-ignore\n const targetId = target._targetId;\n\n console.log('handleTargetCreated', targetId);\n\n await this.#createTab(targetId, pptrPage);\n await this.#activeTab(targetId);\n\n return targetId;\n }\n\n async createTab(): Promise<string> {\n const pptrPage = await this.#pptrBrowser.newPage();\n // @ts-ignore\n const targetId = pptrPage.target()._targetId;\n\n await this.#createTab(targetId, pptrPage);\n await this.#activeTab(targetId);\n\n return targetId;\n }\n\n // #endregion\n\n // #region activeTab\n\n #activeMutex = new Mutex();\n async #activeTab(tabId: string) {\n using _ = await this.#activeMutex.acquire();\n\n // console.trace('#activeTab', tabId);\n\n // check lock\n if (this.#operations.switchingTargetIds.has(tabId)) {\n return false;\n }\n this.#operations.switchingTargetIds.add(tabId);\n\n // check tab existence\n const tab = this.#tabs.get(tabId);\n if (!tab) {\n this.#operations.switchingTargetIds.delete(tabId);\n return false;\n }\n if (this.state.activeTabId === tabId) {\n this.#operations.switchingTargetIds.delete(tabId);\n return true;\n }\n\n // active select tab\n this.state.activeTabId = tabId;\n await tab._active();\n await this.#syncTabMeta(this.state.activeTabId);\n\n // inactivate other tabs\n const inactivePromises = [];\n for (const [id, tabInstance] of this.#tabs) {\n if (id !== tabId) {\n inactivePromises.push(tabInstance._inactive());\n }\n }\n await Promise.all(inactivePromises);\n\n // release lock\n this.#operations.switchingTargetIds.delete(tabId);\n\n return true;\n }\n\n async activeTab(tabId: string): Promise<boolean> {\n console.log('public activeTab', tabId);\n\n return await this.#activeTab(tabId);\n }\n\n getActiveTab(): T | null {\n if (!this.state.activeTabId) return null;\n return this.#tabs.get(this.state.activeTabId) || null;\n }\n\n // #endregion\n\n // #region closeTab\n\n #closeMutex = new Mutex();\n async #closeTab(tabId: string): Promise<boolean> {\n using _ = await this.#closeMutex.acquire();\n\n // check\n if (this.#operations.closingTargetIds.has(tabId)) {\n return false;\n }\n this.#operations.closingTargetIds.add(tabId);\n\n // close tab\n const tab = this.#tabs.get(tabId);\n if (!tab) {\n return false;\n }\n await tab._close();\n this.#tabs.delete(tabId);\n this.state.tabs.delete(tabId);\n\n // fallback logic to prevent the browser from being closed directly\n if (this.state.activeTabId === tabId) {\n this.state.activeTabId = null;\n\n if (this.#tabs.size === 0 && !this.#isIntentionalDestroy) {\n await this.createTab();\n }\n }\n\n return true;\n }\n\n async #handleTargetDestroyed(target: Target) {\n if (target.type() !== 'page') {\n return;\n }\n\n // @ts-ignore\n const targetId = target._targetId;\n await this.#closeTab(targetId);\n }\n\n async closeTab(tabId: string): Promise<boolean> {\n return await this.#closeTab(tabId);\n }\n\n // #endregion\n\n // #region public methods\n\n getCurrentUrl(): string {\n const activeTab = this.getActiveTab();\n return activeTab ? activeTab.url : 'about:blank';\n }\n\n hasTab(tabId: string): boolean {\n return this.state.tabs.has(tabId);\n }\n\n async destroy(): Promise<void> {\n this.#isIntentionalDestroy = true;\n\n const closeTasks = Array.from(this.#tabs.keys()).map((tabId) =>\n this.closeTab(tabId),\n );\n await Promise.all(closeTasks);\n }\n\n // #endregion\n\n // #region private methods\n\n async #syncTabMeta(tabId: string, isLoading = false): Promise<void> {\n const tab = this.#tabs.get(tabId);\n if (!tab) return;\n\n const [title, favicon, historyData] = await Promise.all([\n tab.getTitle().catch(() => 'Loading...'),\n tab.getFavicon().catch(() => ''),\n tab.getHistory().catch(() => ({\n index: 0,\n history: [],\n canGoBack: false,\n canGoForward: false,\n })),\n ]);\n\n const tabMeta: TabMeta = {\n id: tabId,\n url: tab.url || 'about:blank',\n title: title,\n favicon: favicon,\n isLoading: isLoading,\n isActive: tabId === this.state.activeTabId,\n canGoBack: historyData.canGoBack,\n canGoForward: historyData.canGoForward,\n };\n\n // console.log('syncTabMeta', tabId, tabMeta);\n\n this.state.tabs.set(tabId, tabMeta);\n }\n\n #updateTabDialog(tabId: string, dialogMeta: DialogMeta | null): void {\n const currentTabMeta = this.state.tabs.get(tabId);\n if (!currentTabMeta) return;\n\n const updatedTabMeta: TabMeta = {\n ...currentTabMeta,\n dialog: dialogMeta || undefined,\n };\n\n this.state.tabs.set(tabId, updatedTabMeta);\n }\n\n #setupTabEvents(tab: Tab, tabId: string): void {\n tab.on(\n TabEvents.TabLoadingStateChanged,\n (event: TabEventsMap[TabEvents.TabLoadingStateChanged]) => {\n const currentTabMeta = this.state.tabs.get(tabId);\n if (!currentTabMeta) return;\n\n const updatedTabMeta: TabMeta = {\n ...currentTabMeta,\n isLoading: event.isLoading,\n };\n\n this.state.tabs.set(tabId, updatedTabMeta);\n },\n );\n tab.on(\n TabEvents.TabUrlChanged,\n (event: TabEventsMap[TabEvents.TabUrlChanged]) => {\n const currentTabMeta = this.state.tabs.get(tabId);\n if (!currentTabMeta) return;\n\n const updatedTabMeta: TabMeta = {\n ...currentTabMeta,\n url: event.newUrl,\n title: event.title,\n favicon: event.favicon,\n canGoBack: event.canGoBack,\n canGoForward: event.canGoForward,\n };\n\n this.state.tabs.set(tabId, updatedTabMeta);\n },\n );\n tab.on(\n TabEvents.TabVisibilityChanged,\n (event: TabEventsMap[TabEvents.TabVisibilityChanged]) => {\n if (event.isVisible) {\n this.#activeTab(event.tabId);\n }\n },\n );\n tab.on(\n TabEvents.TabDialogChanged,\n (event: TabEventsMap[TabEvents.TabDialogChanged]) => {\n if (event.isOpen) {\n this.#updateTabDialog(tabId, {\n type: event.type!,\n message: event.message!,\n defaultValue: event.defaultValue!,\n });\n } else {\n this.#updateTabDialog(tabId, null);\n }\n },\n );\n }\n\n // #endregion\n}\n"],"names":["_pptrBrowser","_tabs","_options","_operations","_isIntentionalDestroy","_cteateMutex","_createTab","_handleTargetCreated","_activeMutex","_activeTab","_closeMutex","_closeTab","_handleTargetDestroyed","_syncTabMeta","updateTabDialog","setupTabEvents","Tabs","browser","options","tabs","callback","subscribe","Map","page","Tab","_initedTabs_find","existingPages","initTabTasks","pptrPage","validateNavigationUrl","tabId","tab","syncTabMeta","isActive","initedTabs","Promise","activeTabId","result","activeTab","targetId","createTab","console","closeTab","closeTasks","Array","handleTargetCreated","handleTargetDestroyed","Mutex","proxy","proxyMap","Set","target","_","inactivePromises","id","tabInstance","isLoading","title","favicon","historyData","tabMeta","dialogMeta","currentTabMeta","updatedTabMeta","undefined","TabEvents","event"],"mappings":"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"}
1
+ {"version":3,"file":"tabs/tabs.mjs","sources":["webpack://@agent-infra/browser/./src/tabs/tabs.ts"],"sourcesContent":["/*\n * Copyright (c) 2025 Bytedance, Inc. and its affiliates.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { proxy, subscribe } from 'valtio';\nimport { proxyMap } from 'valtio/utils';\nimport { Tab } from './tab';\nimport { validateNavigationUrl, Mutex } from '../utils';\n\nimport type { Browser, Page, Target } from 'puppeteer-core';\nimport {\n TabEvents,\n type TabEventsMap,\n type TabMeta,\n type TabOptions,\n type TabsState,\n type TabsOperationTracker,\n type TabsOptions,\n type DialogMeta,\n} from '../types/tabs';\n\nexport class Tabs<T extends Tab = Tab> {\n #pptrBrowser: Browser;\n #tabs: Map<string, T>;\n #options: TabsOptions;\n\n #operations: TabsOperationTracker;\n\n public state: TabsState;\n #isIntentionalDestroy = false;\n\n static async create(browser: Browser, options: TabsOptions) {\n const tabs = new Tabs(browser, options);\n await tabs.initializeExistingTabs();\n return tabs;\n }\n\n constructor(browser: Browser, options: TabsOptions) {\n this.#pptrBrowser = browser;\n this.#options = options;\n\n this.#tabs = new Map<string, T>();\n this.state = proxy({\n tabs: proxyMap<string, TabMeta>(),\n activeTabId: null,\n });\n this.#operations = {\n creatingTargetIds: new Set<string>(),\n switchingTargetIds: new Set<string>(),\n closingTargetIds: new Set<string>(),\n };\n\n // tabs events\n this.#pptrBrowser.on('targetcreated', (target) =>\n this.#handleTargetCreated(target),\n );\n this.#pptrBrowser.on('targetdestroyed', (target) =>\n this.#handleTargetDestroyed(target),\n );\n }\n\n subscribe(callback: () => void): () => void {\n return subscribe(this.state, callback);\n }\n\n getSnapshot(): TabsState {\n return {\n tabs: new Map(this.state.tabs),\n activeTabId: this.state.activeTabId,\n };\n }\n\n protected async createTabInstance(\n page: Page,\n options: TabOptions,\n ): Promise<T> {\n const tab = new Tab(page, options) as T;\n await tab.init();\n\n return tab;\n }\n\n // #region init ExistingTabs\n\n protected async initializeExistingTabs() {\n const existingPages = await this.#pptrBrowser.pages();\n\n // console.log('initializeExistingTabs', existingPages);\n\n if (existingPages.length === 0) {\n return;\n }\n\n // init all existing tabs\n const initTabTasks = existingPages\n .filter((pptrPage) => !validateNavigationUrl(pptrPage.url()).ignored) // not allowed chrome devtools frontend\n .map(async (pptrPage) => {\n // @ts-ignore\n const tabId = pptrPage.target()._targetId;\n const tab = await this.createTabInstance(pptrPage, {\n tabId: tabId,\n ...this.#options,\n });\n\n this.#tabs.set(tabId, tab);\n this.#setupTabEvents(tab, tabId);\n await this.#syncTabMeta(tabId);\n\n const isActive = await tab._checkActiveStatusWithRuntime();\n return { tabId, pptrPage, isActive };\n });\n const initedTabs = await Promise.all(initTabTasks);\n\n // active tab\n let activeTabId = initedTabs.find((result) => result.isActive)?.tabId;\n if (!activeTabId) {\n activeTabId = initedTabs[0].tabId;\n }\n\n await this.#activeTab(activeTabId);\n }\n\n // #endregion\n\n // #region createTab\n\n #cteateMutex = new Mutex();\n async #createTab(targetId: string, pptrPage: Page) {\n using _ = await this.#cteateMutex.acquire();\n\n if (this.#operations.creatingTargetIds.has(targetId)) {\n return targetId;\n }\n this.#operations.creatingTargetIds.add(targetId);\n\n const tab = await this.createTabInstance(pptrPage, {\n tabId: targetId,\n ...this.#options,\n });\n\n this.#tabs.set(targetId, tab);\n this.#setupTabEvents(tab, targetId);\n await this.#syncTabMeta(targetId);\n\n return targetId;\n }\n\n async #handleTargetCreated(target: Target) {\n if (target.type() !== 'page') {\n return;\n }\n const pptrPage = await target.page();\n if (!pptrPage) {\n return;\n }\n // @ts-ignore\n const targetId = target._targetId;\n\n console.log('handleTargetCreated', targetId);\n\n await this.#createTab(targetId, pptrPage);\n await this.#activeTab(targetId);\n\n return targetId;\n }\n\n async createTab(): Promise<string> {\n const pptrPage = await this.#pptrBrowser.newPage();\n // @ts-ignore\n const targetId = pptrPage.target()._targetId;\n\n await this.#createTab(targetId, pptrPage);\n await this.#activeTab(targetId);\n\n return targetId;\n }\n\n // #endregion\n\n // #region activeTab\n\n #activeMutex = new Mutex();\n async #activeTab(tabId: string) {\n using _ = await this.#activeMutex.acquire();\n\n // console.trace('#activeTab', tabId);\n\n // check lock\n if (this.#operations.switchingTargetIds.has(tabId)) {\n return false;\n }\n this.#operations.switchingTargetIds.add(tabId);\n\n // check tab existence\n const tab = this.#tabs.get(tabId);\n if (!tab) {\n this.#operations.switchingTargetIds.delete(tabId);\n return false;\n }\n if (this.state.activeTabId === tabId) {\n this.#operations.switchingTargetIds.delete(tabId);\n return true;\n }\n\n // active select tab\n this.state.activeTabId = tabId;\n await tab._active();\n await this.#syncTabMeta(this.state.activeTabId);\n\n // inactivate other tabs\n const inactivePromises = [];\n for (const [id, tabInstance] of this.#tabs) {\n if (id !== tabId) {\n inactivePromises.push(tabInstance._inactive());\n }\n }\n await Promise.all(inactivePromises);\n\n // release lock\n this.#operations.switchingTargetIds.delete(tabId);\n\n return true;\n }\n\n async activeTab(tabId: string): Promise<boolean> {\n console.log('public activeTab', tabId);\n\n return await this.#activeTab(tabId);\n }\n\n getActiveTab(): T | null {\n if (!this.state.activeTabId) return null;\n return this.#tabs.get(this.state.activeTabId) || null;\n }\n\n // #endregion\n\n // #region closeTab\n\n #closeMutex = new Mutex();\n async #closeTab(tabId: string): Promise<boolean> {\n using _ = await this.#closeMutex.acquire();\n\n // check\n if (this.#operations.closingTargetIds.has(tabId)) {\n return false;\n }\n this.#operations.closingTargetIds.add(tabId);\n\n // close tab\n const tab = this.#tabs.get(tabId);\n if (!tab) {\n return false;\n }\n await tab._close();\n this.#tabs.delete(tabId);\n this.state.tabs.delete(tabId);\n\n // fallback logic to prevent the browser from being closed directly\n if (this.state.activeTabId === tabId) {\n this.state.activeTabId = null;\n\n if (this.#tabs.size === 0 && !this.#isIntentionalDestroy) {\n await this.createTab();\n }\n }\n\n return true;\n }\n\n async #handleTargetDestroyed(target: Target) {\n if (target.type() !== 'page') {\n return;\n }\n\n // @ts-ignore\n const targetId = target._targetId;\n await this.#closeTab(targetId);\n }\n\n async closeTab(tabId: string): Promise<boolean> {\n return await this.#closeTab(tabId);\n }\n\n // #endregion\n\n // #region public methods\n\n getCurrentUrl(): string {\n const activeTab = this.getActiveTab();\n return activeTab ? activeTab.url : 'about:blank';\n }\n\n hasTab(tabId: string): boolean {\n return this.state.tabs.has(tabId);\n }\n\n async destroy(): Promise<void> {\n this.#isIntentionalDestroy = true;\n\n const closeTasks = Array.from(this.#tabs.keys()).map((tabId) =>\n this.closeTab(tabId),\n );\n await Promise.all(closeTasks);\n }\n\n // #endregion\n\n // #region private methods\n\n async #syncTabMeta(tabId: string, isLoading = false): Promise<void> {\n const tab = this.#tabs.get(tabId);\n if (!tab) return;\n\n const [title, favicon, historyData] = await Promise.all([\n tab.getTitle().catch(() => 'Loading...'),\n tab.getFavicon().catch(() => ''),\n tab.getHistory().catch(() => ({\n index: 0,\n history: [],\n canGoBack: false,\n canGoForward: false,\n })),\n ]);\n\n const tabMeta: TabMeta = {\n id: tabId,\n url: tab.url || 'about:blank',\n title: title,\n favicon: favicon,\n isLoading: isLoading,\n isActive: tabId === this.state.activeTabId,\n canGoBack: historyData.canGoBack,\n canGoForward: historyData.canGoForward,\n };\n\n // console.log('syncTabMeta', tabId, tabMeta);\n\n this.state.tabs.set(tabId, tabMeta);\n }\n\n #updateTabDialog(tabId: string, dialogMeta: DialogMeta | null): void {\n const currentTabMeta = this.state.tabs.get(tabId);\n if (!currentTabMeta) return;\n\n const updatedTabMeta: TabMeta = {\n ...currentTabMeta,\n dialog: dialogMeta || undefined,\n };\n\n this.state.tabs.set(tabId, updatedTabMeta);\n }\n\n #setupTabEvents(tab: Tab, tabId: string): void {\n tab.on(\n TabEvents.TabLoadingStateChanged,\n (event: TabEventsMap[TabEvents.TabLoadingStateChanged]) => {\n const currentTabMeta = this.state.tabs.get(tabId);\n if (!currentTabMeta) return;\n\n const updatedTabMeta: TabMeta = {\n ...currentTabMeta,\n isLoading: event.isLoading,\n };\n\n this.state.tabs.set(tabId, updatedTabMeta);\n },\n );\n tab.on(\n TabEvents.TabUrlChanged,\n (event: TabEventsMap[TabEvents.TabUrlChanged]) =>\n this.#syncTabMeta(event.tabId),\n );\n tab.on(\n TabEvents.TabVisibilityChanged,\n (event: TabEventsMap[TabEvents.TabVisibilityChanged]) => {\n if (event.isVisible) {\n this.#activeTab(event.tabId);\n }\n },\n );\n tab.on(\n TabEvents.TabDialogChanged,\n (event: TabEventsMap[TabEvents.TabDialogChanged]) => {\n if (event.isOpen) {\n this.#updateTabDialog(tabId, {\n type: event.type!,\n message: event.message!,\n defaultValue: event.defaultValue!,\n });\n } else {\n this.#updateTabDialog(tabId, null);\n }\n },\n );\n }\n\n // #endregion\n}\n"],"names":["_pptrBrowser","_tabs","_options","_operations","_isIntentionalDestroy","_cteateMutex","_createTab","_handleTargetCreated","_activeMutex","_activeTab","_closeMutex","_closeTab","_handleTargetDestroyed","_syncTabMeta","updateTabDialog","setupTabEvents","Tabs","browser","options","tabs","callback","subscribe","Map","page","tab","Tab","_initedTabs_find","existingPages","initTabTasks","pptrPage","validateNavigationUrl","tabId","syncTabMeta","isActive","initedTabs","Promise","activeTabId","result","activeTab","targetId","createTab","console","closeTab","closeTasks","Array","handleTargetCreated","handleTargetDestroyed","Mutex","proxy","proxyMap","Set","target","_","inactivePromises","id","tabInstance","isLoading","title","favicon","historyData","tabMeta","dialogMeta","currentTabMeta","updatedTabMeta","undefined","TabEvents","event"],"mappings":"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"}
@@ -8,6 +8,7 @@ export interface TabsOptions {
8
8
  }
9
9
  export interface TabOptions extends TabsOptions {
10
10
  tabId: string;
11
+ injectVisibilityScript?: boolean;
11
12
  }
12
13
  export declare const enum TabEvents {
13
14
  TabLoadingStateChanged = "tabLoadingStateChanged",
@@ -22,12 +23,8 @@ export interface TabEventsMap {
22
23
  };
23
24
  [TabEvents.TabUrlChanged]: {
24
25
  tabId: string;
25
- title: string;
26
- favicon: string;
27
26
  oldUrl: string;
28
27
  newUrl: string;
29
- canGoBack: boolean;
30
- canGoForward: boolean;
31
28
  };
32
29
  [TabEvents.TabVisibilityChanged]: {
33
30
  tabId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"tabs.d.ts","sourceRoot":"","sources":["../../src/types/tabs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tabs.d.ts","sourceRoot":"","sources":["../../src/types/tabs.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types/tabs.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/types/tabs.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 type {\n Viewport,\n Protocol,\n PuppeteerLifeCycleEvent,\n ScreenshotOptions,\n} from 'puppeteer-core';\n\nimport type { EnvInfo } from './env';\nimport type { UserAgentInfo } from './browser';\n\nexport interface TabsOptions {\n viewport: Viewport;\n envInfo: EnvInfo;\n userAgentInfo?: UserAgentInfo;\n}\n\nexport interface TabOptions extends TabsOptions {\n tabId: string;\n}\n\nexport const enum TabEvents {\n TabLoadingStateChanged = 'tabLoadingStateChanged',\n TabUrlChanged = 'tabUrlChanged',\n TabVisibilityChanged = 'TabVisibilityChanged',\n TabDialogChanged = 'TabDialogChanged',\n}\n\nexport interface TabEventsMap {\n [TabEvents.TabLoadingStateChanged]: {\n tabId: string;\n isLoading: boolean;\n };\n [TabEvents.TabUrlChanged]: {\n tabId: string;\n title: string;\n favicon: string;\n oldUrl: string;\n newUrl: string;\n canGoBack: boolean;\n canGoForward: boolean;\n };\n [TabEvents.TabVisibilityChanged]: {\n tabId: string;\n isVisible: boolean;\n };\n [TabEvents.TabDialogChanged]: {\n tabId: string;\n isOpen: boolean;\n type?: Protocol.Page.DialogType;\n message?: string;\n defaultValue?: string;\n };\n}\n\nexport interface DialogMeta {\n type: Protocol.Page.DialogType;\n message: string;\n defaultValue: string;\n}\n\nexport interface TabMeta {\n id: string;\n title: string;\n url: string;\n favicon: string | null;\n isLoading: boolean;\n isActive: boolean;\n canGoBack: boolean;\n canGoForward: boolean;\n dialog?: DialogMeta;\n}\n\nexport interface TabsState {\n tabs: Map<string, TabMeta>;\n activeTabId: string | null;\n}\n\nexport interface TabsOperationTracker {\n creatingTargetIds: Set<string>;\n switchingTargetIds: Set<string>;\n closingTargetIds: Set<string>;\n}\n\nexport interface NavigationOptions {\n waitUntil?: PuppeteerLifeCycleEvent[];\n timeout?: number;\n}\n\nexport interface NavigationSuccessResult {\n success: true;\n url: string;\n}\nexport interface NavigationErrorResult {\n success: false;\n url: string;\n message: string;\n}\n\nexport type NavigationResult = NavigationSuccessResult | NavigationErrorResult;\n\nexport type TabScreenshotOptions = Pick<\n ScreenshotOptions,\n 'type' | 'quality' | 'fullPage' | 'path'\n>;\n\nexport interface BaseScreenshotResult {\n type: string;\n width: number;\n height: number;\n}\n\nexport interface ScreenshotResultWithPath extends BaseScreenshotResult {\n data: Uint8Array;\n}\n\nexport interface ScreenshotResultWithoutPath extends BaseScreenshotResult {\n data: string;\n}\n\nexport type TabScreenshotResult<T extends TabScreenshotOptions> = T extends {\n path: string;\n}\n ? ScreenshotResultWithPath\n : ScreenshotResultWithoutPath;\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","TabEvents"],"mappings":";;;;;;;IAAAA,oBAAoB,CAAC,GAAG,CAAC,UAASC;QACjC,IAAI,IAAIC,OAAOD,WACR,IAAGD,oBAAoB,CAAC,CAACC,YAAYC,QAAQ,CAACF,oBAAoB,CAAC,CAAC,UAASE,MACzEC,OAAO,cAAc,CAAC,UAASD,KAAK;YAAE,YAAY;YAAM,KAAKD,UAAU,CAACC,IAAI;QAAC;IAGzF;;;ICNAF,oBAAoB,CAAC,GAAG,CAACI,KAAKC,OAAUF,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAACC,KAAKC;;;ICClFL,oBAAoB,CAAC,GAAG,CAAC;QACxB,IAAG,AAAkB,eAAlB,OAAOM,UAA0BA,OAAO,WAAW,EACrDH,OAAO,cAAc,CAAC,UAASG,OAAO,WAAW,EAAE;YAAE,OAAO;QAAS;QAEtEH,OAAO,cAAc,CAAC,UAAS,cAAc;YAAE,OAAO;QAAK;IAC5D;;;;;;;ACkBO,IAAWI,YAAAA,WAAAA,GAAAA,SAAAA,SAAS;;;;;WAATA"}
1
+ {"version":3,"file":"types/tabs.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/types/tabs.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 type {\n Viewport,\n Protocol,\n PuppeteerLifeCycleEvent,\n ScreenshotOptions,\n} from 'puppeteer-core';\n\nimport type { EnvInfo } from './env';\nimport type { UserAgentInfo } from './browser';\n\nexport interface TabsOptions {\n viewport: Viewport;\n envInfo: EnvInfo;\n userAgentInfo?: UserAgentInfo;\n}\n\nexport interface TabOptions extends TabsOptions {\n tabId: string;\n injectVisibilityScript?: boolean;\n}\n\nexport const enum TabEvents {\n TabLoadingStateChanged = 'tabLoadingStateChanged',\n TabUrlChanged = 'tabUrlChanged',\n TabVisibilityChanged = 'TabVisibilityChanged',\n TabDialogChanged = 'TabDialogChanged',\n}\n\nexport interface TabEventsMap {\n [TabEvents.TabLoadingStateChanged]: {\n tabId: string;\n isLoading: boolean;\n };\n [TabEvents.TabUrlChanged]: {\n tabId: string;\n oldUrl: string;\n newUrl: string;\n };\n [TabEvents.TabVisibilityChanged]: {\n tabId: string;\n isVisible: boolean;\n };\n [TabEvents.TabDialogChanged]: {\n tabId: string;\n isOpen: boolean;\n type?: Protocol.Page.DialogType;\n message?: string;\n defaultValue?: string;\n };\n}\n\nexport interface DialogMeta {\n type: Protocol.Page.DialogType;\n message: string;\n defaultValue: string;\n}\n\nexport interface TabMeta {\n id: string;\n title: string;\n url: string;\n favicon: string | null;\n isLoading: boolean;\n isActive: boolean;\n canGoBack: boolean;\n canGoForward: boolean;\n dialog?: DialogMeta;\n}\n\nexport interface TabsState {\n tabs: Map<string, TabMeta>;\n activeTabId: string | null;\n}\n\nexport interface TabsOperationTracker {\n creatingTargetIds: Set<string>;\n switchingTargetIds: Set<string>;\n closingTargetIds: Set<string>;\n}\n\nexport interface NavigationOptions {\n waitUntil?: PuppeteerLifeCycleEvent[];\n timeout?: number;\n}\n\nexport interface NavigationSuccessResult {\n success: true;\n url: string;\n}\nexport interface NavigationErrorResult {\n success: false;\n url: string;\n message: string;\n}\n\nexport type NavigationResult = NavigationSuccessResult | NavigationErrorResult;\n\nexport type TabScreenshotOptions = Pick<\n ScreenshotOptions,\n 'type' | 'quality' | 'fullPage' | 'path'\n>;\n\nexport interface BaseScreenshotResult {\n type: string;\n width: number;\n height: number;\n}\n\nexport interface ScreenshotResultWithPath extends BaseScreenshotResult {\n data: Uint8Array;\n}\n\nexport interface ScreenshotResultWithoutPath extends BaseScreenshotResult {\n data: string;\n}\n\nexport type TabScreenshotResult<T extends TabScreenshotOptions> = T extends {\n path: string;\n}\n ? ScreenshotResultWithPath\n : ScreenshotResultWithoutPath;\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","TabEvents"],"mappings":";;;;;;;IAAAA,oBAAoB,CAAC,GAAG,CAAC,UAASC;QACjC,IAAI,IAAIC,OAAOD,WACR,IAAGD,oBAAoB,CAAC,CAACC,YAAYC,QAAQ,CAACF,oBAAoB,CAAC,CAAC,UAASE,MACzEC,OAAO,cAAc,CAAC,UAASD,KAAK;YAAE,YAAY;YAAM,KAAKD,UAAU,CAACC,IAAI;QAAC;IAGzF;;;ICNAF,oBAAoB,CAAC,GAAG,CAACI,KAAKC,OAAUF,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAACC,KAAKC;;;ICClFL,oBAAoB,CAAC,GAAG,CAAC;QACxB,IAAG,AAAkB,eAAlB,OAAOM,UAA0BA,OAAO,WAAW,EACrDH,OAAO,cAAc,CAAC,UAASG,OAAO,WAAW,EAAE;YAAE,OAAO;QAAS;QAEtEH,OAAO,cAAc,CAAC,UAAS,cAAc;YAAE,OAAO;QAAK;IAC5D;;;;;;;ACmBO,IAAWI,YAAAA,WAAAA,GAAAA,SAAAA,SAAS;;;;;WAATA"}
@@ -1 +1 @@
1
- {"version":3,"file":"types/tabs.mjs","sources":["webpack://@agent-infra/browser/./src/types/tabs.ts"],"sourcesContent":["/*\n * Copyright (c) 2025 Bytedance, Inc. and its affiliates.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport type {\n Viewport,\n Protocol,\n PuppeteerLifeCycleEvent,\n ScreenshotOptions,\n} from 'puppeteer-core';\n\nimport type { EnvInfo } from './env';\nimport type { UserAgentInfo } from './browser';\n\nexport interface TabsOptions {\n viewport: Viewport;\n envInfo: EnvInfo;\n userAgentInfo?: UserAgentInfo;\n}\n\nexport interface TabOptions extends TabsOptions {\n tabId: string;\n}\n\nexport const enum TabEvents {\n TabLoadingStateChanged = 'tabLoadingStateChanged',\n TabUrlChanged = 'tabUrlChanged',\n TabVisibilityChanged = 'TabVisibilityChanged',\n TabDialogChanged = 'TabDialogChanged',\n}\n\nexport interface TabEventsMap {\n [TabEvents.TabLoadingStateChanged]: {\n tabId: string;\n isLoading: boolean;\n };\n [TabEvents.TabUrlChanged]: {\n tabId: string;\n title: string;\n favicon: string;\n oldUrl: string;\n newUrl: string;\n canGoBack: boolean;\n canGoForward: boolean;\n };\n [TabEvents.TabVisibilityChanged]: {\n tabId: string;\n isVisible: boolean;\n };\n [TabEvents.TabDialogChanged]: {\n tabId: string;\n isOpen: boolean;\n type?: Protocol.Page.DialogType;\n message?: string;\n defaultValue?: string;\n };\n}\n\nexport interface DialogMeta {\n type: Protocol.Page.DialogType;\n message: string;\n defaultValue: string;\n}\n\nexport interface TabMeta {\n id: string;\n title: string;\n url: string;\n favicon: string | null;\n isLoading: boolean;\n isActive: boolean;\n canGoBack: boolean;\n canGoForward: boolean;\n dialog?: DialogMeta;\n}\n\nexport interface TabsState {\n tabs: Map<string, TabMeta>;\n activeTabId: string | null;\n}\n\nexport interface TabsOperationTracker {\n creatingTargetIds: Set<string>;\n switchingTargetIds: Set<string>;\n closingTargetIds: Set<string>;\n}\n\nexport interface NavigationOptions {\n waitUntil?: PuppeteerLifeCycleEvent[];\n timeout?: number;\n}\n\nexport interface NavigationSuccessResult {\n success: true;\n url: string;\n}\nexport interface NavigationErrorResult {\n success: false;\n url: string;\n message: string;\n}\n\nexport type NavigationResult = NavigationSuccessResult | NavigationErrorResult;\n\nexport type TabScreenshotOptions = Pick<\n ScreenshotOptions,\n 'type' | 'quality' | 'fullPage' | 'path'\n>;\n\nexport interface BaseScreenshotResult {\n type: string;\n width: number;\n height: number;\n}\n\nexport interface ScreenshotResultWithPath extends BaseScreenshotResult {\n data: Uint8Array;\n}\n\nexport interface ScreenshotResultWithoutPath extends BaseScreenshotResult {\n data: string;\n}\n\nexport type TabScreenshotResult<T extends TabScreenshotOptions> = T extends {\n path: string;\n}\n ? ScreenshotResultWithPath\n : ScreenshotResultWithoutPath;\n"],"names":["TabEvents"],"mappings":";;;;AAwBO,IAAWA,iBAASA,WAAAA,GAAAA,SAATA,SAAS;;;;;WAATA"}
1
+ {"version":3,"file":"types/tabs.mjs","sources":["webpack://@agent-infra/browser/./src/types/tabs.ts"],"sourcesContent":["/*\n * Copyright (c) 2025 Bytedance, Inc. and its affiliates.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport type {\n Viewport,\n Protocol,\n PuppeteerLifeCycleEvent,\n ScreenshotOptions,\n} from 'puppeteer-core';\n\nimport type { EnvInfo } from './env';\nimport type { UserAgentInfo } from './browser';\n\nexport interface TabsOptions {\n viewport: Viewport;\n envInfo: EnvInfo;\n userAgentInfo?: UserAgentInfo;\n}\n\nexport interface TabOptions extends TabsOptions {\n tabId: string;\n injectVisibilityScript?: boolean;\n}\n\nexport const enum TabEvents {\n TabLoadingStateChanged = 'tabLoadingStateChanged',\n TabUrlChanged = 'tabUrlChanged',\n TabVisibilityChanged = 'TabVisibilityChanged',\n TabDialogChanged = 'TabDialogChanged',\n}\n\nexport interface TabEventsMap {\n [TabEvents.TabLoadingStateChanged]: {\n tabId: string;\n isLoading: boolean;\n };\n [TabEvents.TabUrlChanged]: {\n tabId: string;\n oldUrl: string;\n newUrl: string;\n };\n [TabEvents.TabVisibilityChanged]: {\n tabId: string;\n isVisible: boolean;\n };\n [TabEvents.TabDialogChanged]: {\n tabId: string;\n isOpen: boolean;\n type?: Protocol.Page.DialogType;\n message?: string;\n defaultValue?: string;\n };\n}\n\nexport interface DialogMeta {\n type: Protocol.Page.DialogType;\n message: string;\n defaultValue: string;\n}\n\nexport interface TabMeta {\n id: string;\n title: string;\n url: string;\n favicon: string | null;\n isLoading: boolean;\n isActive: boolean;\n canGoBack: boolean;\n canGoForward: boolean;\n dialog?: DialogMeta;\n}\n\nexport interface TabsState {\n tabs: Map<string, TabMeta>;\n activeTabId: string | null;\n}\n\nexport interface TabsOperationTracker {\n creatingTargetIds: Set<string>;\n switchingTargetIds: Set<string>;\n closingTargetIds: Set<string>;\n}\n\nexport interface NavigationOptions {\n waitUntil?: PuppeteerLifeCycleEvent[];\n timeout?: number;\n}\n\nexport interface NavigationSuccessResult {\n success: true;\n url: string;\n}\nexport interface NavigationErrorResult {\n success: false;\n url: string;\n message: string;\n}\n\nexport type NavigationResult = NavigationSuccessResult | NavigationErrorResult;\n\nexport type TabScreenshotOptions = Pick<\n ScreenshotOptions,\n 'type' | 'quality' | 'fullPage' | 'path'\n>;\n\nexport interface BaseScreenshotResult {\n type: string;\n width: number;\n height: number;\n}\n\nexport interface ScreenshotResultWithPath extends BaseScreenshotResult {\n data: Uint8Array;\n}\n\nexport interface ScreenshotResultWithoutPath extends BaseScreenshotResult {\n data: string;\n}\n\nexport type TabScreenshotResult<T extends TabScreenshotOptions> = T extends {\n path: string;\n}\n ? ScreenshotResultWithPath\n : ScreenshotResultWithoutPath;\n"],"names":["TabEvents"],"mappings":";;;;AAyBO,IAAWA,iBAASA,WAAAA,GAAAA,SAATA,SAAS;;;;;WAATA"}
@@ -1 +1 @@
1
- {"version":3,"file":"iife.d.ts","sourceRoot":"","sources":["../../src/utils/iife.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,IAAI,GAAI,QAAQ,MAAM,WAM7B,CAAC"}
1
+ {"version":3,"file":"iife.d.ts","sourceRoot":"","sources":["../../src/utils/iife.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,IAAI,GAAI,QAAQ,MAAM,WAK7B,CAAC"}
@@ -31,10 +31,9 @@ __webpack_require__.d(__webpack_exports__, {
31
31
  iife: ()=>iife
32
32
  });
33
33
  const iife = (script)=>`(() => {
34
- if (window.__agent_infra_injected_script) {
35
- return;
34
+ if (!window.__agent_infra_browser) {
35
+ window.__agent_infra_browser = {};
36
36
  }
37
- window.__agent_infra_injected_script = true;
38
37
  ${script}
39
38
  })();`;
40
39
  exports.iife = __webpack_exports__.iife;
@@ -1 +1 @@
1
- {"version":3,"file":"utils/iife.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/utils/iife.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 */\nexport const iife = (script: string) => /* javascript */ `(() => {\n if (window.__agent_infra_injected_script) {\n return;\n }\n window.__agent_infra_injected_script = true;\n ${script}\n})();`;\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","iife","script"],"mappings":";;;;;;;IAAAA,oBAAoB,CAAC,GAAG,CAAC,UAASC;QACjC,IAAI,IAAIC,OAAOD,WACR,IAAGD,oBAAoB,CAAC,CAACC,YAAYC,QAAQ,CAACF,oBAAoB,CAAC,CAAC,UAASE,MACzEC,OAAO,cAAc,CAAC,UAASD,KAAK;YAAE,YAAY;YAAM,KAAKD,UAAU,CAACC,IAAI;QAAC;IAGzF;;;ICNAF,oBAAoB,CAAC,GAAG,CAACI,KAAKC,OAAUF,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAACC,KAAKC;;;ICClFL,oBAAoB,CAAC,GAAG,CAAC;QACxB,IAAG,AAAkB,eAAlB,OAAOM,UAA0BA,OAAO,WAAW,EACrDH,OAAO,cAAc,CAAC,UAASG,OAAO,WAAW,EAAE;YAAE,OAAO;QAAS;QAEtEH,OAAO,cAAc,CAAC,UAAS,cAAc;YAAE,OAAO;QAAK;IAC5D;;;;;;;ACFO,MAAMI,OAAO,CAACC,SAAoC,CAAC;;;;;EAKxD,EAAEA,OAAO;KACN,CAAC"}
1
+ {"version":3,"file":"utils/iife.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/utils/iife.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 */\nexport const iife = (script: string) => /* javascript */ `(() => {\n if (!window.__agent_infra_browser) {\n window.__agent_infra_browser = {};\n }\n ${script}\n})();`;\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","iife","script"],"mappings":";;;;;;;IAAAA,oBAAoB,CAAC,GAAG,CAAC,UAASC;QACjC,IAAI,IAAIC,OAAOD,WACR,IAAGD,oBAAoB,CAAC,CAACC,YAAYC,QAAQ,CAACF,oBAAoB,CAAC,CAAC,UAASE,MACzEC,OAAO,cAAc,CAAC,UAASD,KAAK;YAAE,YAAY;YAAM,KAAKD,UAAU,CAACC,IAAI;QAAC;IAGzF;;;ICNAF,oBAAoB,CAAC,GAAG,CAACI,KAAKC,OAAUF,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAACC,KAAKC;;;ICClFL,oBAAoB,CAAC,GAAG,CAAC;QACxB,IAAG,AAAkB,eAAlB,OAAOM,UAA0BA,OAAO,WAAW,EACrDH,OAAO,cAAc,CAAC,UAASG,OAAO,WAAW,EAAE;YAAE,OAAO;QAAS;QAEtEH,OAAO,cAAc,CAAC,UAAS,cAAc;YAAE,OAAO;QAAK;IAC5D;;;;;;;ACFO,MAAMI,OAAO,CAACC,SAAoC,CAAC;;;;EAIxD,EAAEA,OAAO;KACN,CAAC"}
@@ -3,10 +3,9 @@
3
3
  * SPDX-License-Identifier: Apache-2.0
4
4
  */
5
5
  const iife = (script)=>`(() => {
6
- if (window.__agent_infra_injected_script) {
7
- return;
6
+ if (!window.__agent_infra_browser) {
7
+ window.__agent_infra_browser = {};
8
8
  }
9
- window.__agent_infra_injected_script = true;
10
9
  ${script}
11
10
  })();`;
12
11
  export { iife };
@@ -1 +1 @@
1
- {"version":3,"file":"utils/iife.mjs","sources":["webpack://@agent-infra/browser/./src/utils/iife.ts"],"sourcesContent":["/*\n * Copyright (c) 2025 Bytedance, Inc. and its affiliates.\n * SPDX-License-Identifier: Apache-2.0\n */\nexport const iife = (script: string) => /* javascript */ `(() => {\n if (window.__agent_infra_injected_script) {\n return;\n }\n window.__agent_infra_injected_script = true;\n ${script}\n})();`;\n"],"names":["iife","script"],"mappings":";;;;AAIO,MAAMA,OAAO,CAACC,SAAoC,CAAC;;;;;EAKxD,EAAEA,OAAO;KACN,CAAC"}
1
+ {"version":3,"file":"utils/iife.mjs","sources":["webpack://@agent-infra/browser/./src/utils/iife.ts"],"sourcesContent":["/*\n * Copyright (c) 2025 Bytedance, Inc. and its affiliates.\n * SPDX-License-Identifier: Apache-2.0\n */\nexport const iife = (script: string) => /* javascript */ `(() => {\n if (!window.__agent_infra_browser) {\n window.__agent_infra_browser = {};\n }\n ${script}\n})();`;\n"],"names":["iife","script"],"mappings":";;;;AAIO,MAAMA,OAAO,CAACC,SAAoC,CAAC;;;;EAIxD,EAAEA,OAAO;KACN,CAAC"}