@agent-infra/browser 0.1.6 → 0.2.0-alpha.4

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 (186) hide show
  1. package/README.md +35 -52
  2. package/README.zh-CN.md +57 -0
  3. package/dist/actions/index.d.ts +3 -0
  4. package/dist/actions/index.d.ts.map +1 -0
  5. package/dist/actions/index.js +46 -0
  6. package/dist/actions/index.js.map +1 -0
  7. package/dist/actions/index.mjs +7 -0
  8. package/dist/actions/key-map.d.ts +28 -0
  9. package/dist/actions/key-map.d.ts.map +1 -0
  10. package/dist/actions/key-map.js +409 -0
  11. package/dist/actions/key-map.js.map +1 -0
  12. package/dist/actions/key-map.mjs +369 -0
  13. package/dist/actions/key-map.mjs.map +1 -0
  14. package/dist/actions/keyboard.d.ts +21 -0
  15. package/dist/actions/keyboard.d.ts.map +1 -0
  16. package/dist/actions/keyboard.js +196 -0
  17. package/dist/actions/keyboard.js.map +1 -0
  18. package/dist/actions/keyboard.mjs +152 -0
  19. package/dist/actions/keyboard.mjs.map +1 -0
  20. package/dist/actions/keyboard.test.d.ts +2 -0
  21. package/dist/actions/keyboard.test.d.ts.map +1 -0
  22. package/dist/actions/mouse.d.ts +19 -0
  23. package/dist/actions/mouse.d.ts.map +1 -0
  24. package/dist/actions/mouse.js +173 -0
  25. package/dist/actions/mouse.js.map +1 -0
  26. package/dist/actions/mouse.mjs +136 -0
  27. package/dist/actions/mouse.mjs.map +1 -0
  28. package/dist/browser/base.d.ts +47 -0
  29. package/dist/browser/base.d.ts.map +1 -0
  30. package/dist/browser/base.js +156 -0
  31. package/dist/browser/base.js.map +1 -0
  32. package/dist/browser/base.mjs +122 -0
  33. package/dist/browser/base.mjs.map +1 -0
  34. package/dist/browser/browser.d.ts +23 -0
  35. package/dist/browser/browser.d.ts.map +1 -0
  36. package/dist/browser/browser.js +183 -0
  37. package/dist/browser/browser.js.map +1 -0
  38. package/dist/browser/browser.mjs +149 -0
  39. package/dist/browser/browser.mjs.map +1 -0
  40. package/dist/env.d.ts +4 -0
  41. package/dist/env.d.ts.map +1 -0
  42. package/dist/env.js +96 -0
  43. package/dist/env.js.map +1 -0
  44. package/dist/env.mjs +62 -0
  45. package/dist/env.mjs.map +1 -0
  46. package/dist/index.node.d.ts +7 -0
  47. package/dist/index.node.d.ts.map +1 -0
  48. package/dist/index.node.js +106 -0
  49. package/dist/index.node.js.map +1 -0
  50. package/dist/index.node.mjs +10 -0
  51. package/dist/index.web.d.ts +7 -0
  52. package/dist/index.web.d.ts.map +1 -0
  53. package/dist/{index.js → index.web.js} +33 -20
  54. package/dist/index.web.js.map +1 -0
  55. package/dist/index.web.mjs +10 -0
  56. package/dist/injected-script/index.d.ts +3 -0
  57. package/dist/injected-script/index.d.ts.map +1 -0
  58. package/dist/injected-script/index.js +46 -0
  59. package/dist/injected-script/index.js.map +1 -0
  60. package/dist/injected-script/index.mjs +7 -0
  61. package/dist/injected-script/visibility.d.ts +2 -0
  62. package/dist/injected-script/visibility.d.ts.map +1 -0
  63. package/dist/injected-script/visibility.js +66 -0
  64. package/dist/injected-script/visibility.js.map +1 -0
  65. package/dist/injected-script/visibility.mjs +32 -0
  66. package/dist/injected-script/visibility.mjs.map +1 -0
  67. package/dist/injected-script/webdriver.d.ts +2 -0
  68. package/dist/injected-script/webdriver.d.ts.map +1 -0
  69. package/dist/injected-script/webdriver.js +71 -0
  70. package/dist/injected-script/webdriver.js.map +1 -0
  71. package/dist/injected-script/webdriver.mjs +37 -0
  72. package/dist/injected-script/webdriver.mjs.map +1 -0
  73. package/dist/polyfills/index.d.ts +2 -0
  74. package/dist/polyfills/index.d.ts.map +1 -0
  75. package/dist/polyfills/index.js +66 -0
  76. package/dist/polyfills/index.js.map +1 -0
  77. package/dist/polyfills/index.mjs +5 -0
  78. package/dist/polyfills/withResolvers.d.ts +2 -0
  79. package/dist/polyfills/withResolvers.d.ts.map +1 -0
  80. package/dist/polyfills/withResolvers.js +37 -0
  81. package/dist/polyfills/withResolvers.js.map +1 -0
  82. package/dist/polyfills/withResolvers.mjs +19 -0
  83. package/dist/polyfills/withResolvers.mjs.map +1 -0
  84. package/dist/tabs/dialog.d.ts +14 -0
  85. package/dist/tabs/dialog.d.ts.map +1 -0
  86. package/dist/tabs/dialog.js +175 -0
  87. package/dist/tabs/dialog.js.map +1 -0
  88. package/dist/tabs/dialog.mjs +141 -0
  89. package/dist/tabs/dialog.mjs.map +1 -0
  90. package/dist/tabs/index.d.ts +3 -0
  91. package/dist/tabs/index.d.ts.map +1 -0
  92. package/dist/tabs/index.js +46 -0
  93. package/dist/tabs/index.js.map +1 -0
  94. package/dist/tabs/index.mjs +7 -0
  95. package/dist/tabs/tab.d.ts +50 -0
  96. package/dist/tabs/tab.d.ts.map +1 -0
  97. package/dist/tabs/tab.js +579 -0
  98. package/dist/tabs/tab.js.map +1 -0
  99. package/dist/tabs/tab.mjs +545 -0
  100. package/dist/tabs/tab.mjs.map +1 -0
  101. package/dist/tabs/tabs.d.ts +21 -0
  102. package/dist/tabs/tabs.d.ts.map +1 -0
  103. package/dist/tabs/tabs.js +458 -0
  104. package/dist/tabs/tabs.js.map +1 -0
  105. package/dist/tabs/tabs.mjs +424 -0
  106. package/dist/tabs/tabs.mjs.map +1 -0
  107. package/dist/types/actions.d.ts +26 -0
  108. package/dist/types/actions.d.ts.map +1 -0
  109. package/dist/types/actions.js +24 -0
  110. package/dist/types/actions.js.map +1 -0
  111. package/dist/types/browser.d.ts +7 -0
  112. package/dist/types/browser.d.ts.map +1 -0
  113. package/dist/types/browser.js +24 -0
  114. package/dist/types/browser.js.map +1 -0
  115. package/dist/types/browser.mjs +4 -0
  116. package/dist/types/dialog.d.ts +7 -0
  117. package/dist/types/dialog.d.ts.map +1 -0
  118. package/dist/types/dialog.js +24 -0
  119. package/dist/types/dialog.js.map +1 -0
  120. package/dist/types/dialog.mjs +4 -0
  121. package/dist/types/env.d.ts +8 -0
  122. package/dist/types/env.d.ts.map +1 -0
  123. package/dist/{types.js → types/env.js} +1 -1
  124. package/dist/types/env.js.map +1 -0
  125. package/dist/types/env.mjs +4 -0
  126. package/dist/types/index.d.ts +6 -0
  127. package/dist/types/index.d.ts.map +1 -0
  128. package/dist/types/index.js +102 -0
  129. package/dist/types/index.js.map +1 -0
  130. package/dist/types/index.mjs +9 -0
  131. package/dist/types/tabs.d.ts +98 -0
  132. package/dist/types/tabs.d.ts.map +1 -0
  133. package/dist/types/tabs.js +48 -0
  134. package/dist/types/tabs.js.map +1 -0
  135. package/dist/types/tabs.mjs +14 -0
  136. package/dist/types/tabs.mjs.map +1 -0
  137. package/dist/utils/iife.d.ts +2 -0
  138. package/dist/utils/iife.d.ts.map +1 -0
  139. package/dist/utils/iife.js +48 -0
  140. package/dist/utils/iife.js.map +1 -0
  141. package/dist/utils/iife.mjs +14 -0
  142. package/dist/utils/iife.mjs.map +1 -0
  143. package/dist/utils/index.d.ts +4 -0
  144. package/dist/utils/index.d.ts.map +1 -0
  145. package/dist/utils/index.js +50 -0
  146. package/dist/utils/index.js.map +1 -0
  147. package/dist/utils/index.mjs +8 -0
  148. package/dist/utils/mutex.d.ts +21 -0
  149. package/dist/utils/mutex.d.ts.map +1 -0
  150. package/dist/utils/mutex.js +133 -0
  151. package/dist/utils/mutex.js.map +1 -0
  152. package/dist/utils/mutex.mjs +99 -0
  153. package/dist/utils/mutex.mjs.map +1 -0
  154. package/dist/utils/url.d.ts +7 -0
  155. package/dist/utils/url.d.ts.map +1 -0
  156. package/dist/utils/url.js +76 -0
  157. package/dist/utils/url.js.map +1 -0
  158. package/dist/utils/url.mjs +42 -0
  159. package/dist/utils/url.mjs.map +1 -0
  160. package/package.json +21 -13
  161. package/dist/base-browser.d.ts +0 -94
  162. package/dist/base-browser.d.ts.map +0 -1
  163. package/dist/base-browser.js +0 -189
  164. package/dist/base-browser.js.map +0 -1
  165. package/dist/base-browser.mjs +0 -155
  166. package/dist/base-browser.mjs.map +0 -1
  167. package/dist/index.d.ts +0 -15
  168. package/dist/index.d.ts.map +0 -1
  169. package/dist/index.js.map +0 -1
  170. package/dist/index.mjs +0 -8
  171. package/dist/local-browser.d.ts +0 -19
  172. package/dist/local-browser.d.ts.map +0 -1
  173. package/dist/local-browser.js +0 -134
  174. package/dist/local-browser.js.map +0 -1
  175. package/dist/local-browser.mjs +0 -100
  176. package/dist/local-browser.mjs.map +0 -1
  177. package/dist/remote-browser.d.ts +0 -49
  178. package/dist/remote-browser.d.ts.map +0 -1
  179. package/dist/remote-browser.js +0 -89
  180. package/dist/remote-browser.js.map +0 -1
  181. package/dist/remote-browser.mjs +0 -55
  182. package/dist/remote-browser.mjs.map +0 -1
  183. package/dist/types.d.ts +0 -158
  184. package/dist/types.d.ts.map +0 -1
  185. package/dist/types.js.map +0 -1
  186. /package/dist/{types.mjs → types/actions.mjs} +0 -0
@@ -0,0 +1,579 @@
1
+ /**
2
+ * Copyright (c) 2025 Bytedance, Inc. and its affiliates.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ "use strict";
6
+ var __webpack_require__ = {};
7
+ (()=>{
8
+ __webpack_require__.d = (exports1, definition)=>{
9
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
10
+ enumerable: true,
11
+ get: definition[key]
12
+ });
13
+ };
14
+ })();
15
+ (()=>{
16
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
17
+ })();
18
+ (()=>{
19
+ __webpack_require__.r = (exports1)=>{
20
+ if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
21
+ value: 'Module'
22
+ });
23
+ Object.defineProperty(exports1, '__esModule', {
24
+ value: true
25
+ });
26
+ };
27
+ })();
28
+ var __webpack_exports__ = {};
29
+ __webpack_require__.r(__webpack_exports__);
30
+ __webpack_require__.d(__webpack_exports__, {
31
+ Tab: ()=>Tab
32
+ });
33
+ const external_eventemitter3_namespaceObject = require("eventemitter3");
34
+ const media_utils_namespaceObject = require("@agent-infra/media-utils");
35
+ const index_js_namespaceObject = require("../injected-script/index.js");
36
+ const external_utils_index_js_namespaceObject = require("../utils/index.js");
37
+ const external_dialog_js_namespaceObject = require("./dialog.js");
38
+ const external_actions_index_js_namespaceObject = require("../actions/index.js");
39
+ const external_types_index_js_namespaceObject = require("../types/index.js");
40
+ function _check_private_redeclaration(obj, privateCollection) {
41
+ if (privateCollection.has(obj)) throw new TypeError("Cannot initialize the same private elements twice on an object");
42
+ }
43
+ function _class_apply_descriptor_get(receiver, descriptor) {
44
+ if (descriptor.get) return descriptor.get.call(receiver);
45
+ return descriptor.value;
46
+ }
47
+ function _class_apply_descriptor_set(receiver, descriptor, value) {
48
+ if (descriptor.set) descriptor.set.call(receiver, value);
49
+ else {
50
+ if (!descriptor.writable) throw new TypeError("attempted to set read only private field");
51
+ descriptor.value = value;
52
+ }
53
+ }
54
+ function _class_extract_field_descriptor(receiver, privateMap, action) {
55
+ if (!privateMap.has(receiver)) throw new TypeError("attempted to " + action + " private field on non-instance");
56
+ return privateMap.get(receiver);
57
+ }
58
+ function _class_private_field_get(receiver, privateMap) {
59
+ var descriptor = _class_extract_field_descriptor(receiver, privateMap, "get");
60
+ return _class_apply_descriptor_get(receiver, descriptor);
61
+ }
62
+ function _class_private_field_init(obj, privateMap, value) {
63
+ _check_private_redeclaration(obj, privateMap);
64
+ privateMap.set(obj, value);
65
+ }
66
+ function _class_private_field_set(receiver, privateMap, value) {
67
+ var descriptor = _class_extract_field_descriptor(receiver, privateMap, "set");
68
+ _class_apply_descriptor_set(receiver, descriptor, value);
69
+ return value;
70
+ }
71
+ function _class_private_method_get(receiver, privateSet, fn) {
72
+ if (!privateSet.has(receiver)) throw new TypeError("attempted to get private field on non-instance");
73
+ return fn;
74
+ }
75
+ function _class_private_method_init(obj, privateSet) {
76
+ _check_private_redeclaration(obj, privateSet);
77
+ privateSet.add(obj);
78
+ }
79
+ function _ts_add_disposable_resource(env, value, async) {
80
+ if (null != value) {
81
+ if ("object" != typeof value && "function" != typeof value) throw new TypeError("Object expected.");
82
+ var dispose, inner;
83
+ if (async) {
84
+ if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
85
+ dispose = value[Symbol.asyncDispose];
86
+ }
87
+ if (void 0 === dispose) {
88
+ if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
89
+ dispose = value[Symbol.dispose];
90
+ if (async) inner = dispose;
91
+ }
92
+ if ("function" != typeof dispose) throw new TypeError("Object not disposable.");
93
+ if (inner) dispose = function() {
94
+ try {
95
+ inner.call(this);
96
+ } catch (e) {
97
+ return Promise.reject(e);
98
+ }
99
+ };
100
+ env.stack.push({
101
+ value: value,
102
+ dispose: dispose,
103
+ async: async
104
+ });
105
+ } else if (async) env.stack.push({
106
+ async: true
107
+ });
108
+ return value;
109
+ }
110
+ function tab_ts_dispose_resources(env) {
111
+ var _SuppressedError = "function" == typeof SuppressedError ? SuppressedError : function(error, suppressed, message) {
112
+ var e = new Error(message);
113
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
114
+ };
115
+ return (tab_ts_dispose_resources = function(env) {
116
+ function fail(e) {
117
+ env.error = env.hasError ? new _SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
118
+ env.hasError = true;
119
+ }
120
+ var r, s = 0;
121
+ function next() {
122
+ while(r = env.stack.pop())try {
123
+ if (!r.async && 1 === s) return s = 0, env.stack.push(r), Promise.resolve().then(next);
124
+ if (r.dispose) {
125
+ var result = r.dispose.call(r.value);
126
+ if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) {
127
+ fail(e);
128
+ return next();
129
+ });
130
+ } else s |= 1;
131
+ } catch (e) {
132
+ fail(e);
133
+ }
134
+ if (1 === s) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
135
+ if (env.hasError) throw env.error;
136
+ }
137
+ return next();
138
+ })(env);
139
+ }
140
+ var _id = /*#__PURE__*/ new WeakMap(), _options = /*#__PURE__*/ new WeakMap(), _status = /*#__PURE__*/ new WeakMap(), _pptrPage = /*#__PURE__*/ new WeakMap(), _url = /*#__PURE__*/ new WeakMap(), _favicon = /*#__PURE__*/ new WeakMap(), _title = /*#__PURE__*/ new WeakMap(), _tabDialog = /*#__PURE__*/ new WeakMap(), _keyboard = /*#__PURE__*/ new WeakMap(), _mouse = /*#__PURE__*/ new WeakMap(), _isLoading = /*#__PURE__*/ new WeakMap(), _reloadAbortController = /*#__PURE__*/ new WeakMap(), _scriptsOnCreate = /*#__PURE__*/ new WeakMap(), _scriptsOnLoad = /*#__PURE__*/ new WeakMap(), _dclHandler = /*#__PURE__*/ new WeakMap(), _loadHandler = /*#__PURE__*/ new WeakMap(), _frameNavigatedHandler = /*#__PURE__*/ new WeakMap(), _backMutex = /*#__PURE__*/ new WeakMap(), _forwardMutex = /*#__PURE__*/ new WeakMap(), _reloadMutex = /*#__PURE__*/ new WeakMap(), _onFrameNavigated = /*#__PURE__*/ new WeakSet(), _setupVisibilityTracking = /*#__PURE__*/ new WeakSet(), _executeScriptsOnCreate = /*#__PURE__*/ new WeakSet(), _executeScriptsOnLoad = /*#__PURE__*/ new WeakSet(), _getFavicon = /*#__PURE__*/ new WeakSet(), _setLoading = /*#__PURE__*/ new WeakSet();
141
+ class Tab extends external_eventemitter3_namespaceObject.EventEmitter {
142
+ get tabId() {
143
+ return _class_private_field_get(this, _id);
144
+ }
145
+ get page() {
146
+ return _class_private_field_get(this, _pptrPage);
147
+ }
148
+ get url() {
149
+ return _class_private_field_get(this, _url);
150
+ }
151
+ async getTitle() {
152
+ if (!_class_private_field_get(this, _title)) _class_private_field_set(this, _title, await _class_private_field_get(this, _pptrPage).title());
153
+ return _class_private_field_get(this, _title);
154
+ }
155
+ async getFavicon() {
156
+ if (!_class_private_field_get(this, _favicon)) _class_private_field_set(this, _favicon, await _class_private_method_get(this, _getFavicon, getFavicon).call(this));
157
+ return _class_private_field_get(this, _favicon);
158
+ }
159
+ async _active() {
160
+ await _class_private_field_get(this, _pptrPage).bringToFront();
161
+ _class_private_field_set(this, _status, 'active');
162
+ }
163
+ async _inactive() {
164
+ _class_private_field_set(this, _status, 'inactive');
165
+ }
166
+ async _checkActiveStatusWithRuntime() {
167
+ try {
168
+ await _class_private_field_get(this, _pptrPage).waitForFunction(()=>'visible' === document.visibilityState, {
169
+ timeout: 1000
170
+ });
171
+ return true;
172
+ } catch (error) {
173
+ return false;
174
+ }
175
+ }
176
+ get dialog() {
177
+ return _class_private_field_get(this, _tabDialog);
178
+ }
179
+ get keyboard() {
180
+ return _class_private_field_get(this, _keyboard);
181
+ }
182
+ get mouse() {
183
+ return _class_private_field_get(this, _mouse);
184
+ }
185
+ async screenshot(options = {}) {
186
+ if (options.path) {
187
+ const binaryImage = await _class_private_field_get(this, _pptrPage).screenshot({
188
+ path: options.path,
189
+ type: options.type,
190
+ quality: options.quality,
191
+ fullPage: options.fullPage
192
+ });
193
+ const meta = new media_utils_namespaceObject.BinaryImageParser(binaryImage);
194
+ return {
195
+ data: binaryImage,
196
+ type: meta.getImageType(),
197
+ width: meta.getDimensions().width,
198
+ height: meta.getDimensions().height
199
+ };
200
+ }
201
+ const base64Image = await _class_private_field_get(this, _pptrPage).screenshot({
202
+ encoding: 'base64',
203
+ type: options.type,
204
+ quality: options.quality,
205
+ fullPage: options.fullPage
206
+ });
207
+ const meta = new media_utils_namespaceObject.Base64ImageParser(base64Image);
208
+ return {
209
+ data: base64Image,
210
+ type: meta.getImageType(),
211
+ width: meta.getDimensions().width,
212
+ height: meta.getDimensions().height
213
+ };
214
+ }
215
+ async getHistory() {
216
+ const history = await _class_private_field_get(this, _pptrPage)._client().send('Page.getNavigationHistory');
217
+ const index = history.currentIndex;
218
+ const length = history.entries.length;
219
+ const canGoBack = length > 1 && 0 !== index;
220
+ const canGoForward = length > 1 && index < length - 1;
221
+ return {
222
+ index: index,
223
+ canGoBack: canGoBack,
224
+ canGoForward: canGoForward,
225
+ history: history.entries.map((item)=>({
226
+ url: item.url,
227
+ title: item.title
228
+ }))
229
+ };
230
+ }
231
+ async goto(url, options = {}) {
232
+ const validated = (0, external_utils_index_js_namespaceObject.validateNavigationUrl)(url);
233
+ if (validated.ignored) return {
234
+ success: false,
235
+ url: url,
236
+ message: validated.message
237
+ };
238
+ _class_private_field_set(this, _url, validated.url);
239
+ _class_private_field_set(this, _title, validated.url);
240
+ _class_private_method_get(this, _setLoading, setLoading).call(this, true);
241
+ try {
242
+ await _class_private_field_get(this, _pptrPage).setViewport({
243
+ width: _class_private_field_get(this, _options).viewport.width,
244
+ height: _class_private_field_get(this, _options).viewport.height,
245
+ deviceScaleFactor: _class_private_field_get(this, _options).viewport.deviceScaleFactor
246
+ });
247
+ await _class_private_field_get(this, _pptrPage).goto(validated.url, {
248
+ waitUntil: options.waitUntil,
249
+ timeout: options.timeout
250
+ });
251
+ _class_private_field_set(this, _title, await _class_private_field_get(this, _pptrPage).title());
252
+ _class_private_field_set(this, _favicon, await _class_private_method_get(this, _getFavicon, getFavicon).call(this));
253
+ _class_private_method_get(this, _setLoading, setLoading).call(this, false);
254
+ return {
255
+ success: true,
256
+ url: _class_private_field_get(this, _url)
257
+ };
258
+ } catch (error) {
259
+ _class_private_method_get(this, _setLoading, setLoading).call(this, false);
260
+ return {
261
+ success: false,
262
+ message: error instanceof Error ? error.message : String(error),
263
+ url: validated.url
264
+ };
265
+ }
266
+ }
267
+ async goBack(options = {}) {
268
+ const env = {
269
+ stack: [],
270
+ error: void 0,
271
+ hasError: false
272
+ };
273
+ try {
274
+ _ts_add_disposable_resource(env, await _class_private_field_get(this, _backMutex).acquire(), false);
275
+ try {
276
+ const { canGoBack } = await this.getHistory();
277
+ if (!canGoBack) return {
278
+ success: false,
279
+ url: _class_private_field_get(this, _url),
280
+ message: 'Cannot go back - no previous history entry'
281
+ };
282
+ await _class_private_field_get(this, _pptrPage).goBack({
283
+ waitUntil: options.waitUntil,
284
+ timeout: options.timeout
285
+ });
286
+ return {
287
+ success: true,
288
+ url: _class_private_field_get(this, _url)
289
+ };
290
+ } catch (error) {
291
+ return {
292
+ success: false,
293
+ url: _class_private_field_get(this, _url),
294
+ message: error instanceof Error ? error.message : String(error)
295
+ };
296
+ }
297
+ } catch (e) {
298
+ env.error = e;
299
+ env.hasError = true;
300
+ } finally{
301
+ tab_ts_dispose_resources(env);
302
+ }
303
+ }
304
+ async goForward(options = {}) {
305
+ const env = {
306
+ stack: [],
307
+ error: void 0,
308
+ hasError: false
309
+ };
310
+ try {
311
+ _ts_add_disposable_resource(env, await _class_private_field_get(this, _forwardMutex).acquire(), false);
312
+ try {
313
+ const { canGoForward } = await this.getHistory();
314
+ if (!canGoForward) return {
315
+ success: false,
316
+ url: _class_private_field_get(this, _url),
317
+ message: 'Cannot go forward - no next history entry'
318
+ };
319
+ await _class_private_field_get(this, _pptrPage).goForward({
320
+ waitUntil: options.waitUntil,
321
+ timeout: options.timeout
322
+ });
323
+ return {
324
+ success: true,
325
+ url: _class_private_field_get(this, _url)
326
+ };
327
+ } catch (error) {
328
+ return {
329
+ success: false,
330
+ url: _class_private_field_get(this, _url),
331
+ message: error instanceof Error ? error.message : String(error)
332
+ };
333
+ }
334
+ } catch (e) {
335
+ env.error = e;
336
+ env.hasError = true;
337
+ } finally{
338
+ tab_ts_dispose_resources(env);
339
+ }
340
+ }
341
+ async reload(options = {}) {
342
+ const env = {
343
+ stack: [],
344
+ error: void 0,
345
+ hasError: false
346
+ };
347
+ try {
348
+ _ts_add_disposable_resource(env, await _class_private_field_get(this, _reloadMutex).acquire(), false);
349
+ if (_class_private_field_get(this, _reloadAbortController)) _class_private_field_get(this, _reloadAbortController).abort();
350
+ _class_private_field_set(this, _reloadAbortController, new AbortController());
351
+ _class_private_method_get(this, _setLoading, setLoading).call(this, true);
352
+ try {
353
+ await _class_private_field_get(this, _pptrPage).reload({
354
+ waitUntil: options.waitUntil,
355
+ timeout: options.timeout,
356
+ signal: _class_private_field_get(this, _reloadAbortController).signal
357
+ });
358
+ _class_private_method_get(this, _setLoading, setLoading).call(this, false);
359
+ return {
360
+ success: true,
361
+ url: _class_private_field_get(this, _url)
362
+ };
363
+ } catch (error) {
364
+ _class_private_method_get(this, _setLoading, setLoading).call(this, false);
365
+ return {
366
+ success: false,
367
+ url: _class_private_field_get(this, _url),
368
+ message: error instanceof Error ? error.message : String(error)
369
+ };
370
+ } finally{
371
+ _class_private_field_set(this, _reloadAbortController, null);
372
+ }
373
+ } catch (e) {
374
+ env.error = e;
375
+ env.hasError = true;
376
+ } finally{
377
+ tab_ts_dispose_resources(env);
378
+ }
379
+ }
380
+ async _close() {
381
+ _class_private_field_get(this, _pptrPage).off('load', _class_private_field_get(this, _loadHandler));
382
+ _class_private_field_get(this, _pptrPage).off('framenavigated', _class_private_field_get(this, _frameNavigatedHandler));
383
+ if (_class_private_field_get(this, _reloadAbortController)) {
384
+ _class_private_field_get(this, _reloadAbortController).abort();
385
+ _class_private_field_set(this, _reloadAbortController, null);
386
+ }
387
+ _class_private_field_get(this, _tabDialog).cleanup();
388
+ try {
389
+ await _class_private_field_get(this, _pptrPage).close();
390
+ } catch (error) {
391
+ if (error instanceof Error && error.message.includes('No target with given id found')) return;
392
+ throw error;
393
+ }
394
+ }
395
+ injectScriptOnCreate(script) {
396
+ if (Array.isArray(script)) _class_private_field_get(this, _scriptsOnCreate).push(...script);
397
+ else _class_private_field_get(this, _scriptsOnCreate).push(script);
398
+ }
399
+ injectScriptOnLoad(script) {
400
+ if (Array.isArray(script)) _class_private_field_get(this, _scriptsOnLoad).push(...script);
401
+ else _class_private_field_get(this, _scriptsOnLoad).push(script);
402
+ }
403
+ constructor(page, options){
404
+ super(), _class_private_method_init(this, _onFrameNavigated), _class_private_method_init(this, _setupVisibilityTracking), _class_private_method_init(this, _executeScriptsOnCreate), _class_private_method_init(this, _executeScriptsOnLoad), _class_private_method_init(this, _getFavicon), _class_private_method_init(this, _setLoading), _class_private_field_init(this, _id, {
405
+ writable: true,
406
+ value: void 0
407
+ }), _class_private_field_init(this, _options, {
408
+ writable: true,
409
+ value: void 0
410
+ }), _class_private_field_init(this, _status, {
411
+ writable: true,
412
+ value: void 0
413
+ }), _class_private_field_init(this, _pptrPage, {
414
+ writable: true,
415
+ value: void 0
416
+ }), _class_private_field_init(this, _url, {
417
+ writable: true,
418
+ value: 'about:blank'
419
+ }), _class_private_field_init(this, _favicon, {
420
+ writable: true,
421
+ value: ''
422
+ }), _class_private_field_init(this, _title, {
423
+ writable: true,
424
+ value: ''
425
+ }), _class_private_field_init(this, _tabDialog, {
426
+ writable: true,
427
+ value: void 0
428
+ }), _class_private_field_init(this, _keyboard, {
429
+ writable: true,
430
+ value: void 0
431
+ }), _class_private_field_init(this, _mouse, {
432
+ writable: true,
433
+ value: void 0
434
+ }), _class_private_field_init(this, _isLoading, {
435
+ writable: true,
436
+ value: false
437
+ }), _class_private_field_init(this, _reloadAbortController, {
438
+ writable: true,
439
+ value: null
440
+ }), _class_private_field_init(this, _scriptsOnCreate, {
441
+ writable: true,
442
+ value: [
443
+ index_js_namespaceObject.disableWebdriver,
444
+ index_js_namespaceObject.visibilityScript
445
+ ]
446
+ }), _class_private_field_init(this, _scriptsOnLoad, {
447
+ writable: true,
448
+ value: []
449
+ }), _class_private_field_init(this, _dclHandler, {
450
+ writable: true,
451
+ value: ()=>{
452
+ this.emit(external_types_index_js_namespaceObject.TabEvents.TabLoadingStateChanged, {
453
+ isLoading: true,
454
+ tabId: _class_private_field_get(this, _id)
455
+ });
456
+ }
457
+ }), _class_private_field_init(this, _loadHandler, {
458
+ writable: true,
459
+ value: ()=>{
460
+ this.emit(external_types_index_js_namespaceObject.TabEvents.TabLoadingStateChanged, {
461
+ isLoading: false,
462
+ tabId: _class_private_field_get(this, _id)
463
+ });
464
+ _class_private_method_get(this, _executeScriptsOnLoad, executeScriptsOnLoad).call(this);
465
+ }
466
+ }), _class_private_field_init(this, _frameNavigatedHandler, {
467
+ writable: true,
468
+ value: (frame)=>_class_private_method_get(this, _onFrameNavigated, onFrameNavigated).call(this, frame)
469
+ }), _class_private_field_init(this, _backMutex, {
470
+ writable: true,
471
+ value: new external_utils_index_js_namespaceObject.Mutex()
472
+ }), _class_private_field_init(this, _forwardMutex, {
473
+ writable: true,
474
+ value: new external_utils_index_js_namespaceObject.Mutex()
475
+ }), _class_private_field_init(this, _reloadMutex, {
476
+ writable: true,
477
+ value: new external_utils_index_js_namespaceObject.Mutex()
478
+ });
479
+ _class_private_field_set(this, _pptrPage, page);
480
+ _class_private_field_set(this, _options, options);
481
+ _class_private_field_set(this, _id, options.tabId || page.target()._targetId);
482
+ _class_private_field_set(this, _url, page.url());
483
+ _class_private_field_set(this, _status, 'active');
484
+ _class_private_field_set(this, _tabDialog, new external_dialog_js_namespaceObject.TabDialog(this));
485
+ _class_private_field_set(this, _keyboard, new external_actions_index_js_namespaceObject.Keyboard(page, _class_private_field_get(this, _tabDialog), options.envInfo));
486
+ _class_private_field_set(this, _mouse, new external_actions_index_js_namespaceObject.Mouse(page, _class_private_field_get(this, _tabDialog)));
487
+ _class_private_method_get(this, _setupVisibilityTracking, setupVisibilityTracking).call(this);
488
+ _class_private_method_get(this, _executeScriptsOnCreate, executeScriptsOnCreate).call(this);
489
+ if (options.userAgentInfo) _class_private_field_get(this, _pptrPage).setUserAgent(options.userAgentInfo);
490
+ _class_private_field_get(this, _pptrPage).on('domcontentloaded', _class_private_field_get(this, _dclHandler));
491
+ _class_private_field_get(this, _pptrPage).on('load', _class_private_field_get(this, _loadHandler));
492
+ _class_private_field_get(this, _pptrPage).on('framenavigated', _class_private_field_get(this, _frameNavigatedHandler));
493
+ }
494
+ }
495
+ async function onFrameNavigated(frame) {
496
+ if (!frame.parentFrame()) {
497
+ const oldUrl = _class_private_field_get(this, _url);
498
+ const newUrl = frame.url();
499
+ const [title, favicon, historyData] = await Promise.all([
500
+ _class_private_field_get(this, _pptrPage).title().catch(()=>'Loading...'),
501
+ _class_private_method_get(this, _getFavicon, getFavicon).call(this).catch(()=>''),
502
+ this.getHistory().catch(()=>({
503
+ index: 0,
504
+ history: [],
505
+ canGoBack: false,
506
+ canGoForward: false
507
+ }))
508
+ ]);
509
+ _class_private_field_set(this, _url, newUrl);
510
+ _class_private_field_set(this, _title, title);
511
+ _class_private_field_set(this, _favicon, favicon);
512
+ if (oldUrl !== newUrl) this.emit(external_types_index_js_namespaceObject.TabEvents.TabUrlChanged, {
513
+ tabId: _class_private_field_get(this, _id),
514
+ oldUrl: oldUrl,
515
+ newUrl: newUrl,
516
+ title: title,
517
+ favicon: favicon,
518
+ canGoBack: historyData.canGoBack,
519
+ canGoForward: historyData.canGoForward
520
+ });
521
+ }
522
+ }
523
+ async function setupVisibilityTracking() {
524
+ await _class_private_field_get(this, _pptrPage).exposeFunction('__agent_infra_visibility_change', (isVisible)=>{
525
+ this.emit(external_types_index_js_namespaceObject.TabEvents.TabVisibilityChanged, {
526
+ tabId: _class_private_field_get(this, _id),
527
+ isVisible
528
+ });
529
+ });
530
+ }
531
+ async function executeScriptsOnCreate() {
532
+ try {
533
+ const script = (0, external_utils_index_js_namespaceObject.iife)(_class_private_field_get(this, _scriptsOnCreate).join('\n'));
534
+ await _class_private_field_get(this, _pptrPage).evaluateOnNewDocument(script);
535
+ await _class_private_field_get(this, _pptrPage).evaluate(script);
536
+ } catch (error) {
537
+ console.warn("Failed to execute script on create:", error);
538
+ }
539
+ }
540
+ async function executeScriptsOnLoad() {
541
+ try {
542
+ const script = (0, external_utils_index_js_namespaceObject.iife)(_class_private_field_get(this, _scriptsOnLoad).join('\n'));
543
+ await _class_private_field_get(this, _pptrPage).evaluate(script);
544
+ } catch (error) {
545
+ console.warn("Failed to execute script on load:", error);
546
+ }
547
+ }
548
+ async function getFavicon() {
549
+ if ('about:blank' === this.url || this.url.startsWith('chrome://')) return '';
550
+ try {
551
+ const favicon = await _class_private_field_get(this, _pptrPage).evaluate(()=>{
552
+ const iconLink = document.querySelector('link[rel*="icon"]');
553
+ if (iconLink && iconLink.href) return iconLink.href;
554
+ if (window.location && window.location.origin && 'null' !== window.location.origin && 'file://' !== window.location.origin) return `${window.location.origin}/favicon.ico`;
555
+ return '';
556
+ });
557
+ return favicon;
558
+ } catch (error) {
559
+ console.warn('Failed to get favicon:', error);
560
+ return '';
561
+ }
562
+ }
563
+ function setLoading(loading) {
564
+ if (_class_private_field_get(this, _isLoading) === loading) return;
565
+ _class_private_field_set(this, _isLoading, loading);
566
+ this.emit(external_types_index_js_namespaceObject.TabEvents.TabLoadingStateChanged, {
567
+ isLoading: loading,
568
+ tabId: _class_private_field_get(this, _id)
569
+ });
570
+ }
571
+ exports.Tab = __webpack_exports__.Tab;
572
+ for(var __webpack_i__ in __webpack_exports__)if (-1 === [
573
+ "Tab"
574
+ ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
575
+ Object.defineProperty(exports, '__esModule', {
576
+ value: true
577
+ });
578
+
579
+ //# sourceMappingURL=tab.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tabs/tab.js","sources":["webpack://@agent-infra/browser/webpack/runtime/define_property_getters","webpack://@agent-infra/browser/webpack/runtime/has_own_property","webpack://@agent-infra/browser/webpack/runtime/make_namespace_object","webpack://@agent-infra/browser/./src/tabs/tab.ts"],"sourcesContent":["__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/*\n * Copyright (c) 2025 Bytedance, Inc. and its affiliates.\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { EventEmitter } from 'eventemitter3';\nimport { BinaryImageParser, Base64ImageParser } from '@agent-infra/media-utils';\nimport { disableWebdriver, visibilityScript } from '../injected-script';\nimport { iife, Mutex, validateNavigationUrl } from '../utils';\nimport { TabDialog } from './dialog';\nimport { Mouse, Keyboard } from '../actions';\n\nimport type { Page, Frame, CDPSession } from 'puppeteer-core';\nimport {\n TabEvents,\n type NavigationOptions,\n type NavigationResult,\n type TabEventsMap,\n type TabOptions,\n type TabScreenshotOptions,\n type TabScreenshotResult,\n} from '../types';\n\nexport class Tab extends EventEmitter<TabEventsMap> {\n #id: string;\n #options: TabOptions;\n // eslint-disable-next-line no-unused-private-class-members\n #status: 'active' | 'inactive';\n\n #pptrPage: Page;\n\n #url = 'about:blank';\n #favicon = '';\n #title = '';\n\n #tabDialog: TabDialog;\n #keyboard: Keyboard;\n #mouse: Mouse;\n\n #isLoading = false;\n #reloadAbortController: AbortController | null = null;\n\n #scriptsOnCreate: string[] = [disableWebdriver, visibilityScript];\n #scriptsOnLoad: string[] = [];\n\n constructor(page: Page, options: TabOptions) {\n super();\n this.#pptrPage = page;\n this.#options = options;\n\n // CdpTarget has _targetId\n // @ts-ignore\n this.#id = options.tabId || page.target()._targetId; // tabId is tagetId\n this.#url = page.url();\n\n this.#status = 'active';\n this.#tabDialog = new TabDialog(this);\n this.#keyboard = new Keyboard(page, this.#tabDialog, options.envInfo);\n this.#mouse = new Mouse(page, this.#tabDialog);\n\n this.#setupVisibilityTracking();\n this.#executeScriptsOnCreate();\n\n // Set user agent if provided\n if (options.userAgentInfo) {\n this.#pptrPage.setUserAgent(options.userAgentInfo);\n }\n\n // page events: https://pptr.dev/api/puppeteer.pageevent\n this.#pptrPage.on('domcontentloaded', this.#dclHandler);\n this.#pptrPage.on('load', this.#loadHandler);\n this.#pptrPage.on('framenavigated', this.#frameNavigatedHandler);\n }\n\n // #region meta info\n\n get tabId() {\n return this.#id;\n }\n\n get page() {\n return this.#pptrPage;\n }\n\n get url() {\n return this.#url;\n }\n\n async getTitle() {\n if (!this.#title) {\n this.#title = await this.#pptrPage.title();\n }\n\n return this.#title;\n }\n\n async getFavicon() {\n if (!this.#favicon) {\n this.#favicon = await this.#getFavicon();\n }\n\n return this.#favicon;\n }\n\n // #endregion\n\n // #region events handler\n\n #dclHandler = () => {\n this.emit(TabEvents.TabLoadingStateChanged, {\n isLoading: true,\n tabId: this.#id,\n });\n };\n\n #loadHandler = () => {\n this.emit(TabEvents.TabLoadingStateChanged, {\n isLoading: false,\n tabId: this.#id,\n });\n this.#executeScriptsOnLoad();\n };\n\n #frameNavigatedHandler = (frame: Frame) => this.#onFrameNavigated(frame);\n\n // #endregion\n\n // #region active status\n\n /**\n * @internal\n */\n async _active() {\n await this.#pptrPage.bringToFront();\n this.#status = 'active';\n }\n\n /**\n * @internal\n */\n async _inactive() {\n this.#status = 'inactive';\n }\n\n /**\n * @internal\n */\n async _checkActiveStatusWithRuntime() {\n try {\n await this.#pptrPage.waitForFunction(\n () => document.visibilityState === 'visible',\n {\n timeout: 1000,\n },\n );\n return true;\n } catch (error) {\n return false;\n }\n }\n\n // #endregion\n\n // #region dialog/keyboard/mouse\n\n get dialog() {\n return this.#tabDialog;\n }\n\n get keyboard() {\n return this.#keyboard;\n }\n\n get mouse() {\n return this.#mouse;\n }\n\n // #endregion\n\n // #region screenshot\n\n async screenshot<T extends TabScreenshotOptions>(\n options: T = {} as T,\n ): Promise<TabScreenshotResult<T>> {\n if (options.path) {\n const binaryImage = await this.#pptrPage.screenshot({\n path: options.path,\n type: options.type,\n quality: options.quality,\n fullPage: options.fullPage,\n });\n const meta = new BinaryImageParser(binaryImage);\n\n return {\n data: binaryImage,\n type: meta.getImageType()!,\n width: meta.getDimensions()!.width,\n height: meta.getDimensions()!.height,\n } as TabScreenshotResult<T>;\n }\n\n const base64Image = await this.#pptrPage.screenshot({\n encoding: 'base64',\n type: options.type,\n quality: options.quality,\n fullPage: options.fullPage,\n });\n const meta = new Base64ImageParser(base64Image);\n\n return {\n data: base64Image,\n type: meta.getImageType()!,\n width: meta.getDimensions()!.width,\n height: meta.getDimensions()!.height,\n } as TabScreenshotResult<T>;\n }\n\n // #endregion\n\n // #region navigation\n\n async getHistory() {\n // @ts-ignore\n const history = await (this.#pptrPage._client() as CDPSession).send(\n 'Page.getNavigationHistory',\n );\n const index = history.currentIndex;\n const length = history.entries.length;\n\n const canGoBack = length > 1 && index !== 0;\n const canGoForward = length > 1 && index < length - 1;\n\n return {\n index: index,\n canGoBack: canGoBack,\n canGoForward: canGoForward,\n history: history.entries.map((item) => ({\n url: item.url,\n title: item.title,\n })),\n };\n }\n\n async goto(\n url: string,\n options: NavigationOptions = {},\n ): Promise<NavigationResult> {\n // validate / normalize url before navigation\n const validated = validateNavigationUrl(url);\n if (validated.ignored) {\n return {\n success: false,\n url: url,\n message: validated.message!,\n };\n }\n\n this.#url = validated.url;\n this.#title = validated.url;\n\n this.#setLoading(true);\n\n try {\n await this.#pptrPage.setViewport({\n width: this.#options.viewport.width,\n height: this.#options.viewport.height,\n deviceScaleFactor: this.#options.viewport.deviceScaleFactor,\n });\n await this.#pptrPage.goto(validated.url, {\n waitUntil: options.waitUntil,\n timeout: options.timeout,\n });\n\n this.#title = await this.#pptrPage.title();\n this.#favicon = await this.#getFavicon();\n\n this.#setLoading(false);\n\n return {\n success: true,\n url: this.#url,\n };\n } catch (error) {\n this.#setLoading(false);\n return {\n success: false,\n message: error instanceof Error ? error.message : String(error),\n url: validated.url,\n };\n }\n }\n\n #backMutex = new Mutex();\n async goBack(options: NavigationOptions = {}): Promise<NavigationResult> {\n using _ = await this.#backMutex.acquire();\n\n try {\n const { canGoBack } = await this.getHistory();\n\n if (!canGoBack) {\n return {\n success: false,\n url: this.#url,\n message: 'Cannot go back - no previous history entry',\n };\n }\n\n await this.#pptrPage.goBack({\n waitUntil: options.waitUntil,\n timeout: options.timeout,\n });\n\n return {\n success: true,\n url: this.#url,\n };\n } catch (error) {\n return {\n success: false,\n url: this.#url,\n message: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n #forwardMutex = new Mutex();\n async goForward(options: NavigationOptions = {}): Promise<NavigationResult> {\n using _ = await this.#forwardMutex.acquire();\n\n try {\n const { canGoForward } = await this.getHistory();\n\n if (!canGoForward) {\n return {\n success: false,\n url: this.#url,\n message: 'Cannot go forward - no next history entry',\n };\n }\n\n await this.#pptrPage.goForward({\n waitUntil: options.waitUntil,\n timeout: options.timeout,\n });\n\n return {\n success: true,\n url: this.#url,\n };\n } catch (error) {\n return {\n success: false,\n url: this.#url,\n message: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n #reloadMutex = new Mutex();\n async reload(options: NavigationOptions = {}): Promise<NavigationResult> {\n using _ = await this.#reloadMutex.acquire();\n\n if (this.#reloadAbortController) {\n this.#reloadAbortController.abort();\n }\n\n this.#reloadAbortController = new AbortController();\n this.#setLoading(true);\n\n try {\n await this.#pptrPage.reload({\n waitUntil: options.waitUntil,\n timeout: options.timeout,\n signal: this.#reloadAbortController.signal,\n });\n this.#setLoading(false);\n\n return {\n success: true,\n url: this.#url,\n };\n } catch (error) {\n this.#setLoading(false);\n\n return {\n success: false,\n url: this.#url,\n message: error instanceof Error ? error.message : String(error),\n };\n } finally {\n this.#reloadAbortController = null;\n }\n }\n\n /**\n * @internal\n */\n async _close() {\n this.#pptrPage.off('load', this.#loadHandler);\n this.#pptrPage.off('framenavigated', this.#frameNavigatedHandler);\n\n if (this.#reloadAbortController) {\n this.#reloadAbortController.abort();\n this.#reloadAbortController = null;\n }\n\n this.#tabDialog.cleanup();\n\n try {\n await this.#pptrPage.close();\n } catch (error) {\n // If the page has already been manually closed\n // (not controlled by pptr, usually upon receiving the 'targetdestroyed' event),\n // then it can be ignored directly.\n if (\n error instanceof Error &&\n error.message.includes('No target with given id found')\n ) {\n return;\n }\n\n throw error;\n }\n }\n\n async #onFrameNavigated(frame: Frame) {\n if (!frame.parentFrame()) {\n const oldUrl = this.#url;\n const newUrl = frame.url();\n const [title, favicon, historyData] = await Promise.all([\n this.#pptrPage.title().catch(() => 'Loading...'),\n this.#getFavicon().catch(() => ''),\n this.getHistory().catch(() => ({\n index: 0,\n history: [],\n canGoBack: false,\n canGoForward: false,\n })),\n ]);\n\n this.#url = newUrl;\n this.#title = title;\n this.#favicon = favicon;\n\n if (oldUrl !== newUrl) {\n this.emit(TabEvents.TabUrlChanged, {\n tabId: this.#id,\n oldUrl: oldUrl,\n newUrl: newUrl,\n title: title,\n favicon: favicon,\n canGoBack: historyData.canGoBack,\n canGoForward: historyData.canGoForward,\n });\n }\n }\n }\n\n // #endregion\n\n // #region injectScript\n\n injectScriptOnCreate(script: string | string[]) {\n if (Array.isArray(script)) {\n this.#scriptsOnCreate.push(...script);\n } else {\n this.#scriptsOnCreate.push(script);\n }\n }\n\n injectScriptOnLoad(script: string | string[]) {\n if (Array.isArray(script)) {\n this.#scriptsOnLoad.push(...script);\n } else {\n this.#scriptsOnLoad.push(script);\n }\n }\n\n async #setupVisibilityTracking() {\n await this.#pptrPage.exposeFunction(\n '__agent_infra_visibility_change',\n (isVisible: boolean) => {\n this.emit(TabEvents.TabVisibilityChanged, {\n tabId: this.#id,\n isVisible,\n });\n },\n );\n }\n\n async #executeScriptsOnCreate() {\n try {\n const script = iife(this.#scriptsOnCreate.join('\\n'));\n await this.#pptrPage.evaluateOnNewDocument(script);\n await this.#pptrPage.evaluate(script);\n } catch (error) {\n console.warn('Failed to execute script on create:', error);\n }\n }\n\n async #executeScriptsOnLoad(): Promise<void> {\n try {\n const script = iife(this.#scriptsOnLoad.join('\\n'));\n await this.#pptrPage.evaluate(script);\n } catch (error) {\n console.warn('Failed to execute script on load:', error);\n }\n }\n\n // #endregion\n\n async #getFavicon() {\n if (this.url === 'about:blank' || this.url.startsWith('chrome://')) {\n return '';\n }\n\n try {\n const favicon = await this.#pptrPage.evaluate(() => {\n const iconLink = document.querySelector(\n 'link[rel*=\"icon\"]',\n ) as HTMLLinkElement;\n if (iconLink && iconLink.href) {\n return iconLink.href;\n }\n\n // fallback\n if (\n window.location &&\n window.location.origin &&\n window.location.origin !== 'null' &&\n window.location.origin !== 'file://'\n ) {\n return `${window.location.origin}/favicon.ico`;\n }\n\n return '';\n });\n\n return favicon;\n } catch (error) {\n console.warn('Failed to get favicon:', error);\n return '';\n }\n }\n\n #setLoading(loading: boolean) {\n if (this.#isLoading === loading) {\n return;\n }\n\n // console.log('setLoading', loading, this.#url);\n\n this.#isLoading = loading;\n this.emit(TabEvents.TabLoadingStateChanged, {\n isLoading: loading,\n tabId: this.#id,\n });\n }\n}\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","_id","_options","_status","_pptrPage","_url","_favicon","_title","_tabDialog","_keyboard","_mouse","_isLoading","_reloadAbortController","_scriptsOnCreate","_scriptsOnLoad","_dclHandler","_loadHandler","_frameNavigatedHandler","_backMutex","_forwardMutex","_reloadMutex","_onFrameNavigated","_setupVisibilityTracking","_executeScriptsOnCreate","_executeScriptsOnLoad","_getFavicon","setLoading","Tab","EventEmitter","getFavicon","document","error","options","binaryImage","meta","BinaryImageParser","base64Image","Base64ImageParser","history","index","length","canGoBack","canGoForward","item","url","validated","validateNavigationUrl","Error","String","_","AbortController","script","Array","page","onFrameNavigated","setupVisibilityTracking","executeScriptsOnCreate","executeScriptsOnLoad","disableWebdriver","visibilityScript","TabEvents","frame","Mutex","TabDialog","Keyboard","Mouse","oldUrl","newUrl","title","favicon","historyData","Promise","isVisible","iife","console","iconLink","window","loading"],"mappings":"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"}