{"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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"}