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

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