UNPKG

@gui-agent/operator-aio

Version:
176 lines (175 loc) 6.46 kB
/** * Copyright (c) 2025 Bytedance, Inc. and its affiliates. * SPDX-License-Identifier: Apache-2.0 */ "use strict"; var __webpack_require__ = {}; (()=>{ __webpack_require__.d = (exports1, definition)=>{ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, { enumerable: true, get: definition[key] }); }; })(); (()=>{ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop); })(); (()=>{ __webpack_require__.r = (exports1)=>{ if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, { value: 'Module' }); Object.defineProperty(exports1, '__esModule', { value: true }); }; })(); var __webpack_exports__ = {}; __webpack_require__.r(__webpack_exports__); __webpack_require__.d(__webpack_exports__, { AIOBrowser: ()=>AIOBrowser }); const browser_namespaceObject = require("@agent-infra/browser"); const logger_namespaceObject = require("@agent-infra/logger"); const sandbox_namespaceObject = require("@agent-infra/sandbox"); function _define_property(obj, key, value) { if (key in obj) Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); else obj[key] = value; return obj; } class AIOBrowser { async launch(options) { this.logger.info('Launching browser with options:', options); try { await this.browser.launch(options); this.logger.success('Browser launched successfully'); } catch (error) { this.logger.error('Failed to launch browser:', error); throw error; } } async close() { this.logger.info('Closing browser'); try { await this.browser.close(); this.logger.success('Browser closed successfully'); } catch (error) { this.logger.error('Failed to close browser:', error); throw error; } } async createPage() { this.logger.info('Creating new page'); try { const page = await this.browser.createPage(); this.logger.success('New page created successfully'); return page; } catch (error) { this.logger.error('Failed to create new page:', error); throw error; } } async handleNavigate(inputs) { const page = await this.getActivePage(); let { url } = inputs; if (!/^https?:\/\//i.test(url)) url = 'https://' + url; this.logger.info(`Navigating to: ${url}`); await page.goto(url, { waitUntil: [] }); this.logger.info('Navigation completed'); } async handleNavigateBack() { const page = await this.getActivePage(); this.logger.info("handleNavigateBack"); await page.goBack(); this.logger.info('handleNavigateBack completed'); } async getActiveUrl() { this.logger.info('Getting active page URL'); const pages = await this.browser.getBrowser().pages(); try { for (const page of pages){ const isVisible = await page.waitForFunction(()=>'visible' === document.visibilityState, { timeout: 1000 }); if (isVisible) return page.url(); } } catch (error) { this.logger.error('Failed to get active page URL:', error); } return ''; } async getActivePage() { this.logger.info('Getting active page'); const pages = await this.browser.getBrowser().pages(); try { for (const page of pages){ const isVisible = await page.waitForFunction(()=>'visible' === document.visibilityState, { timeout: 1000 }); if (isVisible) { this.logger.success('Active visible page retrieved successfully'); return page; } } this.logger.success('Active original page retrieved successfully'); return this.browser.getActivePage(); } catch (error) { this.logger.error('Failed to get active page:', error); throw error; } } async evaluateOnNewPage(options) { this.logger.info('Evaluating function on new page with URL:', options.url); try { const result = await this.browser.evaluateOnNewPage(options); this.logger.success('Function evaluated successfully on new page'); return result; } catch (error) { this.logger.error('Failed to evaluate function on new page:', error); throw error; } } async isBrowserAlive() { try { return await this.browser.isBrowserAlive(); } catch (error) { this.logger.error('Error checking if browser is alive:', error); return false; } } static async create(options) { const aioClient = new sandbox_namespaceObject.AioClient({ baseUrl: options.baseURl }); const cdpVersionResponse = await (null == aioClient ? void 0 : aioClient.cdpVersion()); const cdpVersion = (null == cdpVersionResponse ? void 0 : cdpVersionResponse.data) || cdpVersionResponse; const cdpUrl = null == cdpVersion ? void 0 : cdpVersion.webSocketDebuggerUrl; return new AIOBrowser(cdpUrl, options.logger); } constructor(cdpUrl, logger){ _define_property(this, "browser", void 0); _define_property(this, "logger", void 0); this.logger = (logger ?? logger_namespaceObject.defaultLogger).spawn('[AIOBrowser]'); this.browser = new browser_namespaceObject.RemoteBrowser({ wsEndpoint: cdpUrl, logger: this.logger }); this.logger.info('AIOBrowser constructed with cdpUrl:', cdpUrl); } } exports.AIOBrowser = __webpack_exports__.AIOBrowser; for(var __webpack_i__ in __webpack_exports__)if (-1 === [ "AIOBrowser" ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__]; Object.defineProperty(exports, '__esModule', { value: true }); //# sourceMappingURL=AIOBrowser.js.map