browser-use 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (259) hide show
  1. package/README.md +295 -686
  2. package/dist/actor/element.d.ts +19 -0
  3. package/dist/actor/element.js +46 -0
  4. package/dist/actor/index.d.ts +4 -0
  5. package/dist/actor/index.js +4 -0
  6. package/dist/actor/mouse.d.ts +19 -0
  7. package/dist/actor/mouse.js +39 -0
  8. package/dist/actor/page.d.ts +29 -0
  9. package/dist/actor/page.js +88 -0
  10. package/dist/actor/utils.d.ts +4 -0
  11. package/dist/actor/utils.js +35 -0
  12. package/dist/agent/cloud-events.d.ts +18 -0
  13. package/dist/agent/cloud-events.js +65 -2
  14. package/dist/agent/gif.d.ts +1 -0
  15. package/dist/agent/gif.js +24 -2
  16. package/dist/agent/judge.d.ts +17 -0
  17. package/dist/agent/judge.js +197 -0
  18. package/dist/agent/message-manager/service.d.ts +12 -4
  19. package/dist/agent/message-manager/service.js +205 -39
  20. package/dist/agent/message-manager/utils.js +0 -1
  21. package/dist/agent/message-manager/views.d.ts +4 -0
  22. package/dist/agent/message-manager/views.js +11 -7
  23. package/dist/agent/prompts.d.ts +24 -3
  24. package/dist/agent/prompts.js +274 -59
  25. package/dist/agent/service.d.ts +99 -41
  26. package/dist/agent/service.js +2266 -472
  27. package/dist/agent/variable-detector.d.ts +12 -0
  28. package/dist/agent/variable-detector.js +211 -0
  29. package/dist/agent/views.d.ts +237 -18
  30. package/dist/agent/views.js +446 -33
  31. package/dist/browser/cloud/cloud.d.ts +20 -0
  32. package/dist/browser/cloud/cloud.js +129 -0
  33. package/dist/browser/cloud/index.d.ts +2 -0
  34. package/dist/browser/cloud/index.js +2 -0
  35. package/dist/browser/cloud/views.d.ts +41 -0
  36. package/dist/browser/cloud/views.js +35 -0
  37. package/dist/browser/events.d.ts +345 -0
  38. package/dist/browser/events.js +566 -0
  39. package/dist/browser/extensions.js +17 -17
  40. package/dist/browser/index.d.ts +4 -0
  41. package/dist/browser/index.js +4 -0
  42. package/dist/browser/profile.d.ts +8 -2
  43. package/dist/browser/profile.js +79 -12
  44. package/dist/browser/session-manager.d.ts +85 -0
  45. package/dist/browser/session-manager.js +208 -0
  46. package/dist/browser/session.d.ts +100 -8
  47. package/dist/browser/session.js +1097 -58
  48. package/dist/browser/types.d.ts +0 -2
  49. package/dist/browser/views.d.ts +39 -0
  50. package/dist/browser/views.js +32 -0
  51. package/dist/browser/watchdogs/aboutblank-watchdog.d.ts +12 -0
  52. package/dist/browser/watchdogs/aboutblank-watchdog.js +131 -0
  53. package/dist/browser/watchdogs/base.d.ts +21 -0
  54. package/dist/browser/watchdogs/base.js +81 -0
  55. package/dist/browser/watchdogs/cdp-session-watchdog.d.ts +14 -0
  56. package/dist/browser/watchdogs/cdp-session-watchdog.js +177 -0
  57. package/dist/browser/watchdogs/crash-watchdog.d.ts +38 -0
  58. package/dist/browser/watchdogs/crash-watchdog.js +296 -0
  59. package/dist/browser/watchdogs/default-action-watchdog.d.ts +49 -0
  60. package/dist/browser/watchdogs/default-action-watchdog.js +212 -0
  61. package/dist/browser/watchdogs/dom-watchdog.d.ts +8 -0
  62. package/dist/browser/watchdogs/dom-watchdog.js +31 -0
  63. package/dist/browser/watchdogs/downloads-watchdog.d.ts +77 -0
  64. package/dist/browser/watchdogs/downloads-watchdog.js +409 -0
  65. package/dist/browser/watchdogs/har-recording-watchdog.d.ts +19 -0
  66. package/dist/browser/watchdogs/har-recording-watchdog.js +317 -0
  67. package/dist/browser/watchdogs/index.d.ts +15 -0
  68. package/dist/browser/watchdogs/index.js +15 -0
  69. package/dist/browser/watchdogs/local-browser-watchdog.d.ts +10 -0
  70. package/dist/browser/watchdogs/local-browser-watchdog.js +32 -0
  71. package/dist/browser/watchdogs/permissions-watchdog.d.ts +8 -0
  72. package/dist/browser/watchdogs/permissions-watchdog.js +73 -0
  73. package/dist/browser/watchdogs/popups-watchdog.d.ts +13 -0
  74. package/dist/browser/watchdogs/popups-watchdog.js +77 -0
  75. package/dist/browser/watchdogs/recording-watchdog.d.ts +27 -0
  76. package/dist/browser/watchdogs/recording-watchdog.js +249 -0
  77. package/dist/browser/watchdogs/screenshot-watchdog.d.ts +6 -0
  78. package/dist/browser/watchdogs/screenshot-watchdog.js +13 -0
  79. package/dist/browser/watchdogs/security-watchdog.d.ts +10 -0
  80. package/dist/browser/watchdogs/security-watchdog.js +84 -0
  81. package/dist/browser/watchdogs/storage-state-watchdog.d.ts +24 -0
  82. package/dist/browser/watchdogs/storage-state-watchdog.js +288 -0
  83. package/dist/cli.d.ts +7 -2
  84. package/dist/cli.js +182 -25
  85. package/dist/code-use/formatting.d.ts +3 -0
  86. package/dist/code-use/formatting.js +18 -0
  87. package/dist/code-use/index.d.ts +6 -0
  88. package/dist/code-use/index.js +6 -0
  89. package/dist/code-use/namespace.d.ts +5 -0
  90. package/dist/code-use/namespace.js +81 -0
  91. package/dist/code-use/notebook-export.d.ts +3 -0
  92. package/dist/code-use/notebook-export.js +56 -0
  93. package/dist/code-use/service.d.ts +24 -0
  94. package/dist/code-use/service.js +104 -0
  95. package/dist/code-use/utils.d.ts +4 -0
  96. package/dist/code-use/utils.js +98 -0
  97. package/dist/code-use/views.d.ts +108 -0
  98. package/dist/code-use/views.js +165 -0
  99. package/dist/config.d.ts +13 -0
  100. package/dist/config.js +69 -3
  101. package/dist/controller/registry/service.d.ts +10 -1
  102. package/dist/controller/registry/service.js +266 -10
  103. package/dist/controller/registry/views.d.ts +4 -1
  104. package/dist/controller/registry/views.js +25 -2
  105. package/dist/controller/service.d.ts +10 -1
  106. package/dist/controller/service.js +1807 -268
  107. package/dist/controller/views.d.ts +78 -155
  108. package/dist/controller/views.js +61 -12
  109. package/dist/dom/history-tree-processor/service.d.ts +5 -0
  110. package/dist/dom/history-tree-processor/service.js +169 -14
  111. package/dist/dom/history-tree-processor/view.d.ts +7 -1
  112. package/dist/dom/history-tree-processor/view.js +10 -1
  113. package/dist/dom/markdown-extractor.d.ts +37 -0
  114. package/dist/dom/markdown-extractor.js +345 -0
  115. package/dist/dom/service.d.ts +3 -1
  116. package/dist/dom/service.js +76 -0
  117. package/dist/dom/views.d.ts +1 -0
  118. package/dist/dom/views.js +45 -0
  119. package/dist/event-bus.d.ts +107 -7
  120. package/dist/event-bus.js +313 -10
  121. package/dist/exceptions.d.ts +0 -3
  122. package/dist/exceptions.js +0 -7
  123. package/dist/filesystem/file-system.d.ts +18 -0
  124. package/dist/filesystem/file-system.js +503 -42
  125. package/dist/index.d.ts +7 -0
  126. package/dist/index.js +6 -0
  127. package/dist/integrations/gmail/actions.d.ts +3 -3
  128. package/dist/integrations/gmail/actions.js +4 -4
  129. package/dist/llm/anthropic/chat.d.ts +18 -1
  130. package/dist/llm/anthropic/chat.js +123 -55
  131. package/dist/llm/anthropic/serializer.d.ts +2 -0
  132. package/dist/llm/anthropic/serializer.js +81 -9
  133. package/dist/llm/aws/chat-anthropic.d.ts +17 -0
  134. package/dist/llm/aws/chat-anthropic.js +126 -26
  135. package/dist/llm/aws/chat-bedrock.d.ts +28 -1
  136. package/dist/llm/aws/chat-bedrock.js +161 -34
  137. package/dist/llm/aws/serializer.d.ts +13 -1
  138. package/dist/llm/aws/serializer.js +56 -17
  139. package/dist/llm/azure/chat.d.ts +53 -2
  140. package/dist/llm/azure/chat.js +366 -54
  141. package/dist/llm/base.d.ts +2 -0
  142. package/dist/llm/browser-use/chat.d.ts +40 -0
  143. package/dist/llm/browser-use/chat.js +305 -0
  144. package/dist/llm/browser-use/index.d.ts +1 -0
  145. package/dist/llm/browser-use/index.js +1 -0
  146. package/dist/llm/cerebras/chat.d.ts +39 -0
  147. package/dist/llm/cerebras/chat.js +178 -0
  148. package/dist/llm/cerebras/index.d.ts +2 -0
  149. package/dist/llm/cerebras/index.js +2 -0
  150. package/dist/llm/cerebras/serializer.d.ts +7 -0
  151. package/dist/llm/cerebras/serializer.js +82 -0
  152. package/dist/llm/deepseek/chat.d.ts +19 -2
  153. package/dist/llm/deepseek/chat.js +138 -25
  154. package/dist/llm/google/chat.d.ts +46 -2
  155. package/dist/llm/google/chat.js +267 -64
  156. package/dist/llm/google/serializer.d.ts +9 -1
  157. package/dist/llm/google/serializer.js +141 -34
  158. package/dist/llm/groq/chat.d.ts +21 -2
  159. package/dist/llm/groq/chat.js +125 -26
  160. package/dist/llm/groq/parser.js +3 -1
  161. package/dist/llm/mistral/chat.d.ts +43 -0
  162. package/dist/llm/mistral/chat.js +154 -0
  163. package/dist/llm/mistral/index.d.ts +2 -0
  164. package/dist/llm/mistral/index.js +2 -0
  165. package/dist/llm/mistral/schema.d.ts +8 -0
  166. package/dist/llm/mistral/schema.js +27 -0
  167. package/dist/llm/models.d.ts +2 -0
  168. package/dist/llm/models.js +317 -0
  169. package/dist/llm/ollama/chat.d.ts +13 -1
  170. package/dist/llm/ollama/chat.js +110 -19
  171. package/dist/llm/ollama/serializer.d.ts +1 -0
  172. package/dist/llm/ollama/serializer.js +34 -12
  173. package/dist/llm/openai/chat.d.ts +16 -0
  174. package/dist/llm/openai/chat.js +94 -44
  175. package/dist/llm/openai/like.d.ts +5 -3
  176. package/dist/llm/openai/like.js +7 -3
  177. package/dist/llm/openai/responses-serializer.d.ts +18 -0
  178. package/dist/llm/openai/responses-serializer.js +72 -0
  179. package/dist/llm/openrouter/chat.d.ts +28 -2
  180. package/dist/llm/openrouter/chat.js +115 -29
  181. package/dist/llm/schema.d.ts +11 -1
  182. package/dist/llm/schema.js +81 -1
  183. package/dist/llm/vercel/chat.d.ts +50 -0
  184. package/dist/llm/vercel/chat.js +276 -0
  185. package/dist/llm/vercel/index.d.ts +1 -0
  186. package/dist/llm/vercel/index.js +1 -0
  187. package/dist/llm/vercel/serializer.d.ts +5 -0
  188. package/dist/llm/vercel/serializer.js +7 -0
  189. package/dist/llm/views.d.ts +2 -1
  190. package/dist/llm/views.js +3 -1
  191. package/dist/logging-config.d.ts +2 -0
  192. package/dist/logging-config.js +82 -29
  193. package/dist/mcp/client.d.ts +10 -5
  194. package/dist/mcp/client.js +14 -9
  195. package/dist/mcp/controller.d.ts +42 -3
  196. package/dist/mcp/controller.js +56 -31
  197. package/dist/mcp/server.d.ts +14 -0
  198. package/dist/mcp/server.js +255 -52
  199. package/dist/observability.js +10 -4
  200. package/dist/sandbox/index.d.ts +2 -0
  201. package/dist/sandbox/index.js +2 -0
  202. package/dist/sandbox/sandbox.d.ts +19 -0
  203. package/dist/sandbox/sandbox.js +140 -0
  204. package/dist/sandbox/views.d.ts +67 -0
  205. package/dist/sandbox/views.js +121 -0
  206. package/dist/skill-cli/index.d.ts +3 -0
  207. package/dist/skill-cli/index.js +3 -0
  208. package/dist/skill-cli/protocol.d.ts +30 -0
  209. package/dist/skill-cli/protocol.js +48 -0
  210. package/dist/skill-cli/server.d.ts +11 -0
  211. package/dist/skill-cli/server.js +85 -0
  212. package/dist/skill-cli/sessions.d.ts +24 -0
  213. package/dist/skill-cli/sessions.js +47 -0
  214. package/dist/skills/index.d.ts +3 -0
  215. package/dist/skills/index.js +3 -0
  216. package/dist/skills/service.d.ts +27 -0
  217. package/dist/skills/service.js +266 -0
  218. package/dist/skills/utils.d.ts +6 -0
  219. package/dist/skills/utils.js +53 -0
  220. package/dist/skills/views.d.ts +40 -0
  221. package/dist/skills/views.js +10 -0
  222. package/dist/sync/auth.js +8 -3
  223. package/dist/sync/service.d.ts +6 -6
  224. package/dist/sync/service.js +54 -89
  225. package/dist/telemetry/views.d.ts +20 -6
  226. package/dist/telemetry/views.js +23 -5
  227. package/dist/tokens/custom-pricing.d.ts +2 -0
  228. package/dist/tokens/custom-pricing.js +22 -0
  229. package/dist/tokens/index.d.ts +2 -0
  230. package/dist/tokens/index.js +2 -0
  231. package/dist/tokens/mappings.d.ts +1 -0
  232. package/dist/tokens/mappings.js +3 -0
  233. package/dist/tokens/service.js +27 -8
  234. package/dist/tools/extraction/index.d.ts +2 -0
  235. package/dist/tools/extraction/index.js +2 -0
  236. package/dist/tools/extraction/schema-utils.d.ts +6 -0
  237. package/dist/tools/extraction/schema-utils.js +237 -0
  238. package/dist/tools/extraction/views.d.ts +7 -0
  239. package/dist/tools/index.d.ts +5 -0
  240. package/dist/tools/index.js +5 -0
  241. package/dist/tools/registry/index.d.ts +2 -0
  242. package/dist/tools/registry/index.js +2 -0
  243. package/dist/tools/registry/service.d.ts +1 -0
  244. package/dist/tools/registry/service.js +1 -0
  245. package/dist/tools/registry/views.d.ts +1 -0
  246. package/dist/tools/registry/views.js +1 -0
  247. package/dist/tools/service.d.ts +2 -0
  248. package/dist/tools/service.js +1 -0
  249. package/dist/tools/utils.d.ts +2 -0
  250. package/dist/tools/utils.js +57 -0
  251. package/dist/tools/views.d.ts +1 -0
  252. package/dist/tools/views.js +1 -0
  253. package/dist/utils.d.ts +10 -1
  254. package/dist/utils.js +70 -3
  255. package/package.json +87 -26
  256. package/dist/dom/playground/process-dom.js +0 -5
  257. package/dist/dom/playground/test-accessibility.d.ts +0 -44
  258. package/dist/dom/playground/test-accessibility.js +0 -111
  259. /package/dist/{dom/playground/process-dom.d.ts → tools/extraction/views.js} +0 -0
@@ -0,0 +1,20 @@
1
+ import { CloudBrowserResponse, type CreateBrowserRequest } from './views.js';
2
+ export interface CloudBrowserClientOptions {
3
+ api_base_url?: string;
4
+ api_key?: string | null;
5
+ fetch_impl?: typeof fetch;
6
+ }
7
+ export declare class CloudBrowserClient {
8
+ private readonly api_base_url;
9
+ private readonly explicit_api_key;
10
+ private readonly fetch_impl;
11
+ current_session_id: string | null;
12
+ constructor(options?: CloudBrowserClientOptions);
13
+ private _resolve_api_key;
14
+ private _auth_headers;
15
+ private _create_request_body;
16
+ private _request_json;
17
+ create_browser(request: CreateBrowserRequest, extra_headers?: Record<string, string>): Promise<CloudBrowserResponse>;
18
+ stop_browser(session_id?: string | null, extra_headers?: Record<string, string>): Promise<CloudBrowserResponse>;
19
+ close(): Promise<void>;
20
+ }
@@ -0,0 +1,129 @@
1
+ import { CONFIG } from '../../config.js';
2
+ import { createLogger } from '../../logging-config.js';
3
+ import { DeviceAuthClient } from '../../sync/auth.js';
4
+ import { CloudBrowserAuthError, CloudBrowserError, CloudBrowserResponse, MAX_PAID_USER_SESSION_TIMEOUT, } from './views.js';
5
+ const logger = createLogger('browser_use.browser.cloud');
6
+ const stripTrailingSlash = (input) => input.replace(/\/+$/, '');
7
+ const normalizeTimeout = (timeout) => {
8
+ if (timeout == null) {
9
+ return null;
10
+ }
11
+ const integerTimeout = Math.floor(timeout);
12
+ if (!Number.isFinite(integerTimeout) || integerTimeout < 1) {
13
+ return null;
14
+ }
15
+ return Math.min(integerTimeout, MAX_PAID_USER_SESSION_TIMEOUT);
16
+ };
17
+ export class CloudBrowserClient {
18
+ api_base_url;
19
+ explicit_api_key;
20
+ fetch_impl;
21
+ current_session_id = null;
22
+ constructor(options = {}) {
23
+ this.api_base_url = stripTrailingSlash(options.api_base_url ?? CONFIG.BROWSER_USE_CLOUD_API_URL);
24
+ this.explicit_api_key = options.api_key ?? null;
25
+ this.fetch_impl = options.fetch_impl ?? fetch;
26
+ }
27
+ _resolve_api_key() {
28
+ if (this.explicit_api_key && this.explicit_api_key.trim()) {
29
+ return this.explicit_api_key.trim();
30
+ }
31
+ const fromEnv = process.env.BROWSER_USE_API_KEY?.trim();
32
+ if (fromEnv) {
33
+ return fromEnv;
34
+ }
35
+ const authClient = new DeviceAuthClient(this.api_base_url);
36
+ const fromAuthConfig = authClient.api_token?.trim();
37
+ if (fromAuthConfig) {
38
+ return fromAuthConfig;
39
+ }
40
+ return null;
41
+ }
42
+ _auth_headers(extra_headers = {}) {
43
+ const api_key = this._resolve_api_key();
44
+ if (!api_key) {
45
+ throw new CloudBrowserAuthError('No authentication token found. Set BROWSER_USE_API_KEY to use cloud browser.');
46
+ }
47
+ return {
48
+ 'X-Browser-Use-API-Key': api_key,
49
+ 'Content-Type': 'application/json',
50
+ ...extra_headers,
51
+ };
52
+ }
53
+ _create_request_body(request) {
54
+ const profile_id = request.profile_id ?? request.cloud_profile_id ?? null;
55
+ const proxy_country_code = request.proxy_country_code ?? request.cloud_proxy_country_code ?? null;
56
+ const timeout = normalizeTimeout(request.timeout ?? request.cloud_timeout ?? null);
57
+ return {
58
+ ...(profile_id ? { profile_id: String(profile_id) } : {}),
59
+ ...(proxy_country_code
60
+ ? { proxy_country_code: String(proxy_country_code) }
61
+ : {}),
62
+ ...(timeout ? { timeout } : {}),
63
+ };
64
+ }
65
+ async _request_json(path, init, extra_headers = {}) {
66
+ const response = await this.fetch_impl(`${this.api_base_url}${path}`, {
67
+ ...init,
68
+ headers: this._auth_headers(extra_headers),
69
+ });
70
+ const text = await response.text();
71
+ let payload = null;
72
+ if (text) {
73
+ try {
74
+ payload = JSON.parse(text);
75
+ }
76
+ catch {
77
+ payload = text;
78
+ }
79
+ }
80
+ if (!response.ok) {
81
+ const errorDetails = payload && typeof payload === 'object'
82
+ ? JSON.stringify(payload)
83
+ : String(payload ?? '');
84
+ if (response.status === 401 || response.status === 403) {
85
+ throw new CloudBrowserAuthError(`Cloud browser authentication failed (${response.status})`);
86
+ }
87
+ throw new CloudBrowserError(`Cloud browser request failed (${response.status}): ${errorDetails}`);
88
+ }
89
+ return payload;
90
+ }
91
+ async create_browser(request, extra_headers = {}) {
92
+ logger.info('🌤️ Creating cloud browser instance...');
93
+ const payload = await this._request_json('/api/v2/browsers', {
94
+ method: 'POST',
95
+ body: JSON.stringify(this._create_request_body(request)),
96
+ }, extra_headers);
97
+ const browser_response = new CloudBrowserResponse(payload);
98
+ this.current_session_id = browser_response.id;
99
+ logger.info(`🌤️ Cloud browser created: ${browser_response.id}`);
100
+ return browser_response;
101
+ }
102
+ async stop_browser(session_id = null, extra_headers = {}) {
103
+ const target_session_id = session_id ?? this.current_session_id;
104
+ if (!target_session_id) {
105
+ throw new CloudBrowserError('No session ID provided and no active cloud browser session found');
106
+ }
107
+ const payload = await this._request_json(`/api/v2/browsers/${encodeURIComponent(target_session_id)}`, {
108
+ method: 'PATCH',
109
+ body: JSON.stringify({ action: 'stop' }),
110
+ }, extra_headers);
111
+ const browser_response = new CloudBrowserResponse(payload);
112
+ if (browser_response.id === this.current_session_id) {
113
+ this.current_session_id = null;
114
+ }
115
+ logger.info(`🌤️ Cloud browser stopped: ${browser_response.id}`);
116
+ return browser_response;
117
+ }
118
+ async close() {
119
+ if (!this.current_session_id) {
120
+ return;
121
+ }
122
+ try {
123
+ await this.stop_browser(this.current_session_id);
124
+ }
125
+ catch (error) {
126
+ logger.debug(`Failed to stop cloud browser during close: ${error.message}`);
127
+ }
128
+ }
129
+ }
@@ -0,0 +1,2 @@
1
+ export * from './views.js';
2
+ export * from './cloud.js';
@@ -0,0 +1,2 @@
1
+ export * from './views.js';
2
+ export * from './cloud.js';
@@ -0,0 +1,41 @@
1
+ export type ProxyCountryCode = 'us' | 'uk' | 'fr' | 'it' | 'jp' | 'au' | 'de' | 'fi' | 'ca' | 'in' | string;
2
+ export declare const MAX_FREE_USER_SESSION_TIMEOUT = 15;
3
+ export declare const MAX_PAID_USER_SESSION_TIMEOUT = 240;
4
+ export interface CreateBrowserRequest {
5
+ cloud_profile_id?: string | null;
6
+ cloud_proxy_country_code?: ProxyCountryCode | null;
7
+ cloud_timeout?: number | null;
8
+ profile_id?: string | null;
9
+ proxy_country_code?: ProxyCountryCode | null;
10
+ timeout?: number | null;
11
+ }
12
+ export interface CloudBrowserResponsePayload {
13
+ id: string;
14
+ status: string;
15
+ liveUrl?: string;
16
+ live_url?: string;
17
+ cdpUrl?: string;
18
+ cdp_url?: string;
19
+ timeoutAt?: string;
20
+ timeout_at?: string;
21
+ startedAt?: string;
22
+ started_at?: string;
23
+ finishedAt?: string | null;
24
+ finished_at?: string | null;
25
+ }
26
+ export declare class CloudBrowserResponse {
27
+ id: string;
28
+ status: string;
29
+ liveUrl: string;
30
+ cdpUrl: string;
31
+ timeoutAt: string;
32
+ startedAt: string;
33
+ finishedAt: string | null;
34
+ constructor(payload: CloudBrowserResponsePayload);
35
+ }
36
+ export declare class CloudBrowserError extends Error {
37
+ constructor(message: string);
38
+ }
39
+ export declare class CloudBrowserAuthError extends CloudBrowserError {
40
+ constructor(message: string);
41
+ }
@@ -0,0 +1,35 @@
1
+ export const MAX_FREE_USER_SESSION_TIMEOUT = 15;
2
+ export const MAX_PAID_USER_SESSION_TIMEOUT = 240;
3
+ export class CloudBrowserResponse {
4
+ id;
5
+ status;
6
+ liveUrl;
7
+ cdpUrl;
8
+ timeoutAt;
9
+ startedAt;
10
+ finishedAt;
11
+ constructor(payload) {
12
+ if (!payload?.id || !payload?.status) {
13
+ throw new CloudBrowserError('Invalid cloud browser response: missing id or status');
14
+ }
15
+ this.id = String(payload.id);
16
+ this.status = String(payload.status);
17
+ this.liveUrl = String(payload.liveUrl ?? payload.live_url ?? '');
18
+ this.cdpUrl = String(payload.cdpUrl ?? payload.cdp_url ?? '');
19
+ this.timeoutAt = String(payload.timeoutAt ?? payload.timeout_at ?? '');
20
+ this.startedAt = String(payload.startedAt ?? payload.started_at ?? '');
21
+ this.finishedAt = payload.finishedAt ?? payload.finished_at ?? null;
22
+ }
23
+ }
24
+ export class CloudBrowserError extends Error {
25
+ constructor(message) {
26
+ super(message);
27
+ this.name = 'CloudBrowserError';
28
+ }
29
+ }
30
+ export class CloudBrowserAuthError extends CloudBrowserError {
31
+ constructor(message) {
32
+ super(message);
33
+ this.name = 'CloudBrowserAuthError';
34
+ }
35
+ }
@@ -0,0 +1,345 @@
1
+ import type { DOMElementNode } from '../dom/views.js';
2
+ import { EventBusEvent, type EventBusEventInit } from '../event-bus.js';
3
+ import { BrowserStateSummary } from './views.js';
4
+ export type TargetID = string;
5
+ export type WaitUntilState = 'load' | 'domcontentloaded' | 'networkidle' | 'commit';
6
+ export type MouseButton = 'left' | 'right' | 'middle';
7
+ export declare abstract class BrowserEvent<TResult = unknown> extends EventBusEvent<TResult> {
8
+ protected constructor(eventType: string, init?: EventBusEventInit<TResult>);
9
+ }
10
+ export declare class ElementSelectedEvent<TResult = unknown, TNode = DOMElementNode> extends BrowserEvent<TResult> {
11
+ node: TNode;
12
+ constructor(eventType: string, init: EventBusEventInit<TResult> & {
13
+ node: TNode;
14
+ });
15
+ }
16
+ export declare class NavigateToUrlEvent extends BrowserEvent<void> {
17
+ url: string;
18
+ wait_until: WaitUntilState;
19
+ timeout_ms: number | null;
20
+ new_tab: boolean;
21
+ constructor(init: EventBusEventInit<void> & {
22
+ url: string;
23
+ wait_until?: WaitUntilState;
24
+ timeout_ms?: number | null;
25
+ new_tab?: boolean;
26
+ });
27
+ }
28
+ export declare class ClickElementEvent extends ElementSelectedEvent<Record<string, unknown> | null> {
29
+ button: MouseButton;
30
+ constructor(init: EventBusEventInit<Record<string, unknown> | null> & {
31
+ node: DOMElementNode;
32
+ button?: MouseButton;
33
+ });
34
+ }
35
+ export declare class ClickCoordinateEvent extends BrowserEvent<Record<string, unknown>> {
36
+ coordinate_x: number;
37
+ coordinate_y: number;
38
+ button: MouseButton;
39
+ force: boolean;
40
+ constructor(init: EventBusEventInit<Record<string, unknown>> & {
41
+ coordinate_x: number;
42
+ coordinate_y: number;
43
+ button?: MouseButton;
44
+ force?: boolean;
45
+ });
46
+ }
47
+ export declare class TypeTextEvent extends ElementSelectedEvent<Record<string, unknown> | null> {
48
+ text: string;
49
+ clear: boolean;
50
+ is_sensitive: boolean;
51
+ sensitive_key_name: string | null;
52
+ constructor(init: EventBusEventInit<Record<string, unknown> | null> & {
53
+ node: DOMElementNode;
54
+ text: string;
55
+ clear?: boolean;
56
+ is_sensitive?: boolean;
57
+ sensitive_key_name?: string | null;
58
+ });
59
+ }
60
+ export declare class ScrollEvent extends ElementSelectedEvent<void, DOMElementNode | null> {
61
+ direction: 'up' | 'down' | 'left' | 'right';
62
+ amount: number;
63
+ constructor(init: EventBusEventInit<void> & {
64
+ direction: 'up' | 'down' | 'left' | 'right';
65
+ amount: number;
66
+ node?: DOMElementNode | null;
67
+ });
68
+ }
69
+ export declare class SwitchTabEvent extends BrowserEvent<TargetID> {
70
+ target_id: TargetID | null;
71
+ constructor(init?: EventBusEventInit<TargetID> & {
72
+ target_id?: TargetID | null;
73
+ });
74
+ }
75
+ export declare class CloseTabEvent extends BrowserEvent<void> {
76
+ target_id: TargetID;
77
+ constructor(init: EventBusEventInit<void> & {
78
+ target_id: TargetID;
79
+ });
80
+ }
81
+ export declare class ScreenshotEvent extends BrowserEvent<string> {
82
+ full_page: boolean;
83
+ clip: Record<string, number> | null;
84
+ constructor(init?: EventBusEventInit<string> & {
85
+ full_page?: boolean;
86
+ clip?: Record<string, number> | null;
87
+ });
88
+ }
89
+ export declare class BrowserStateRequestEvent extends BrowserEvent<BrowserStateSummary> {
90
+ include_dom: boolean;
91
+ include_screenshot: boolean;
92
+ include_recent_events: boolean;
93
+ constructor(init?: EventBusEventInit<BrowserStateSummary> & {
94
+ include_dom?: boolean;
95
+ include_screenshot?: boolean;
96
+ include_recent_events?: boolean;
97
+ });
98
+ }
99
+ export declare class GoBackEvent extends BrowserEvent<void> {
100
+ constructor(init?: EventBusEventInit<void>);
101
+ }
102
+ export declare class GoForwardEvent extends BrowserEvent<void> {
103
+ constructor(init?: EventBusEventInit<void>);
104
+ }
105
+ export declare class RefreshEvent extends BrowserEvent<void> {
106
+ constructor(init?: EventBusEventInit<void>);
107
+ }
108
+ export declare class WaitEvent extends BrowserEvent<void> {
109
+ seconds: number;
110
+ max_seconds: number;
111
+ constructor(init?: EventBusEventInit<void> & {
112
+ seconds?: number;
113
+ max_seconds?: number;
114
+ });
115
+ }
116
+ export declare class SendKeysEvent extends BrowserEvent<void> {
117
+ keys: string;
118
+ constructor(init: EventBusEventInit<void> & {
119
+ keys: string;
120
+ });
121
+ }
122
+ export declare class UploadFileEvent extends ElementSelectedEvent<void> {
123
+ file_path: string;
124
+ constructor(init: EventBusEventInit<void> & {
125
+ node: DOMElementNode;
126
+ file_path: string;
127
+ });
128
+ }
129
+ export declare class GetDropdownOptionsEvent extends ElementSelectedEvent<Record<string, string>> {
130
+ constructor(init: EventBusEventInit<Record<string, string>> & {
131
+ node: DOMElementNode;
132
+ });
133
+ }
134
+ export declare class SelectDropdownOptionEvent extends ElementSelectedEvent<Record<string, string>> {
135
+ text: string;
136
+ constructor(init: EventBusEventInit<Record<string, string>> & {
137
+ node: DOMElementNode;
138
+ text: string;
139
+ });
140
+ }
141
+ export declare class ScrollToTextEvent extends BrowserEvent<void> {
142
+ text: string;
143
+ direction: 'up' | 'down';
144
+ constructor(init: EventBusEventInit<void> & {
145
+ text: string;
146
+ direction?: 'up' | 'down';
147
+ });
148
+ }
149
+ export declare class BrowserStartEvent extends BrowserEvent<void> {
150
+ cdp_url: string | null;
151
+ launch_options: Record<string, unknown>;
152
+ constructor(init?: EventBusEventInit<void> & {
153
+ cdp_url?: string | null;
154
+ launch_options?: Record<string, unknown>;
155
+ });
156
+ }
157
+ export declare class BrowserStopEvent extends BrowserEvent<void> {
158
+ force: boolean;
159
+ constructor(init?: EventBusEventInit<void> & {
160
+ force?: boolean;
161
+ });
162
+ }
163
+ export interface BrowserLaunchResult {
164
+ cdp_url: string;
165
+ }
166
+ export declare class BrowserLaunchEvent extends BrowserEvent<BrowserLaunchResult> {
167
+ constructor(init?: EventBusEventInit<BrowserLaunchResult>);
168
+ }
169
+ export declare class BrowserKillEvent extends BrowserEvent<void> {
170
+ constructor(init?: EventBusEventInit<void>);
171
+ }
172
+ export declare class BrowserConnectedEvent extends BrowserEvent<void> {
173
+ cdp_url: string;
174
+ constructor(init: EventBusEventInit<void> & {
175
+ cdp_url: string;
176
+ });
177
+ }
178
+ export declare class BrowserStoppedEvent extends BrowserEvent<void> {
179
+ reason: string | null;
180
+ constructor(init?: EventBusEventInit<void> & {
181
+ reason?: string | null;
182
+ });
183
+ }
184
+ export declare class TabCreatedEvent extends BrowserEvent<void> {
185
+ target_id: TargetID;
186
+ url: string;
187
+ constructor(init: EventBusEventInit<void> & {
188
+ target_id: TargetID;
189
+ url: string;
190
+ });
191
+ }
192
+ export declare class TabClosedEvent extends BrowserEvent<void> {
193
+ target_id: TargetID;
194
+ constructor(init: EventBusEventInit<void> & {
195
+ target_id: TargetID;
196
+ });
197
+ }
198
+ export declare class AgentFocusChangedEvent extends BrowserEvent<void> {
199
+ target_id: TargetID;
200
+ url: string;
201
+ constructor(init: EventBusEventInit<void> & {
202
+ target_id: TargetID;
203
+ url: string;
204
+ });
205
+ }
206
+ export declare class TargetCrashedEvent extends BrowserEvent<void> {
207
+ target_id: TargetID;
208
+ error: string;
209
+ constructor(init: EventBusEventInit<void> & {
210
+ target_id: TargetID;
211
+ error: string;
212
+ });
213
+ }
214
+ export declare class NavigationStartedEvent extends BrowserEvent<void> {
215
+ target_id: TargetID;
216
+ url: string;
217
+ constructor(init: EventBusEventInit<void> & {
218
+ target_id: TargetID;
219
+ url: string;
220
+ });
221
+ }
222
+ export declare class NavigationCompleteEvent extends BrowserEvent<void> {
223
+ target_id: TargetID;
224
+ url: string;
225
+ status: number | null;
226
+ error_message: string | null;
227
+ loading_status: string | null;
228
+ constructor(init: EventBusEventInit<void> & {
229
+ target_id: TargetID;
230
+ url: string;
231
+ status?: number | null;
232
+ error_message?: string | null;
233
+ loading_status?: string | null;
234
+ });
235
+ }
236
+ export declare class BrowserErrorEvent extends BrowserEvent<void> {
237
+ error_type: string;
238
+ message: string;
239
+ details: Record<string, unknown>;
240
+ constructor(init: EventBusEventInit<void> & {
241
+ error_type: string;
242
+ message: string;
243
+ details?: Record<string, unknown>;
244
+ });
245
+ }
246
+ export declare class SaveStorageStateEvent extends BrowserEvent<void> {
247
+ path: string | null;
248
+ constructor(init?: EventBusEventInit<void> & {
249
+ path?: string | null;
250
+ });
251
+ }
252
+ export declare class StorageStateSavedEvent extends BrowserEvent<void> {
253
+ path: string;
254
+ cookies_count: number;
255
+ origins_count: number;
256
+ constructor(init: EventBusEventInit<void> & {
257
+ path: string;
258
+ cookies_count: number;
259
+ origins_count: number;
260
+ });
261
+ }
262
+ export declare class LoadStorageStateEvent extends BrowserEvent<void> {
263
+ path: string | null;
264
+ constructor(init?: EventBusEventInit<void> & {
265
+ path?: string | null;
266
+ });
267
+ }
268
+ export declare class StorageStateLoadedEvent extends BrowserEvent<void> {
269
+ path: string;
270
+ cookies_count: number;
271
+ origins_count: number;
272
+ constructor(init: EventBusEventInit<void> & {
273
+ path: string;
274
+ cookies_count: number;
275
+ origins_count: number;
276
+ });
277
+ }
278
+ export declare class DownloadStartedEvent extends BrowserEvent<void> {
279
+ guid: string;
280
+ url: string;
281
+ suggested_filename: string;
282
+ auto_download: boolean;
283
+ constructor(init: EventBusEventInit<void> & {
284
+ guid: string;
285
+ url: string;
286
+ suggested_filename: string;
287
+ auto_download?: boolean;
288
+ });
289
+ }
290
+ export declare class DownloadProgressEvent extends BrowserEvent<void> {
291
+ guid: string;
292
+ received_bytes: number;
293
+ total_bytes: number;
294
+ state: string;
295
+ constructor(init: EventBusEventInit<void> & {
296
+ guid: string;
297
+ received_bytes: number;
298
+ total_bytes: number;
299
+ state: string;
300
+ });
301
+ }
302
+ export declare class FileDownloadedEvent extends BrowserEvent<void> {
303
+ guid: string | null;
304
+ url: string;
305
+ path: string;
306
+ file_name: string;
307
+ file_size: number;
308
+ file_type: string | null;
309
+ mime_type: string | null;
310
+ from_cache: boolean;
311
+ auto_download: boolean;
312
+ constructor(init: EventBusEventInit<void> & {
313
+ guid?: string | null;
314
+ url: string;
315
+ path: string;
316
+ file_name: string;
317
+ file_size: number;
318
+ file_type?: string | null;
319
+ mime_type?: string | null;
320
+ from_cache?: boolean;
321
+ auto_download?: boolean;
322
+ });
323
+ }
324
+ export declare class AboutBlankDVDScreensaverShownEvent extends BrowserEvent<void> {
325
+ target_id: TargetID;
326
+ error: string | null;
327
+ constructor(init: EventBusEventInit<void> & {
328
+ target_id: TargetID;
329
+ error?: string | null;
330
+ });
331
+ }
332
+ export declare class DialogOpenedEvent extends BrowserEvent<void> {
333
+ dialog_type: string;
334
+ message: string;
335
+ url: string;
336
+ frame_id: string | null;
337
+ constructor(init: EventBusEventInit<void> & {
338
+ dialog_type: string;
339
+ message: string;
340
+ url: string;
341
+ frame_id?: string | null;
342
+ });
343
+ }
344
+ export declare const BROWSER_EVENT_CLASSES: readonly [typeof ElementSelectedEvent, typeof NavigateToUrlEvent, typeof ClickElementEvent, typeof ClickCoordinateEvent, typeof TypeTextEvent, typeof ScrollEvent, typeof SwitchTabEvent, typeof CloseTabEvent, typeof ScreenshotEvent, typeof BrowserStateRequestEvent, typeof GoBackEvent, typeof GoForwardEvent, typeof RefreshEvent, typeof WaitEvent, typeof SendKeysEvent, typeof UploadFileEvent, typeof GetDropdownOptionsEvent, typeof SelectDropdownOptionEvent, typeof ScrollToTextEvent, typeof BrowserStartEvent, typeof BrowserStopEvent, typeof BrowserLaunchEvent, typeof BrowserKillEvent, typeof BrowserConnectedEvent, typeof BrowserStoppedEvent, typeof TabCreatedEvent, typeof TabClosedEvent, typeof AgentFocusChangedEvent, typeof TargetCrashedEvent, typeof NavigationStartedEvent, typeof NavigationCompleteEvent, typeof BrowserErrorEvent, typeof SaveStorageStateEvent, typeof StorageStateSavedEvent, typeof LoadStorageStateEvent, typeof StorageStateLoadedEvent, typeof DownloadStartedEvent, typeof DownloadProgressEvent, typeof FileDownloadedEvent, typeof AboutBlankDVDScreensaverShownEvent, typeof DialogOpenedEvent];
345
+ export declare const BROWSER_EVENT_NAMES: string[];