@brightdata/cli 0.1.4 → 0.1.5
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.
- package/README.md +354 -0
- package/dist/__tests__/browser/connection.test.d.ts +2 -0
- package/dist/__tests__/browser/connection.test.d.ts.map +1 -0
- package/dist/__tests__/browser/connection.test.js +168 -0
- package/dist/__tests__/browser/connection.test.js.map +1 -0
- package/dist/__tests__/browser/daemon.test.d.ts +2 -0
- package/dist/__tests__/browser/daemon.test.d.ts.map +1 -0
- package/dist/__tests__/browser/daemon.test.js +586 -0
- package/dist/__tests__/browser/daemon.test.js.map +1 -0
- package/dist/__tests__/browser/entrypoint.test.d.ts +2 -0
- package/dist/__tests__/browser/entrypoint.test.d.ts.map +1 -0
- package/dist/__tests__/browser/entrypoint.test.js +53 -0
- package/dist/__tests__/browser/entrypoint.test.js.map +1 -0
- package/dist/__tests__/browser/ipc.test.d.ts +2 -0
- package/dist/__tests__/browser/ipc.test.d.ts.map +1 -0
- package/dist/__tests__/browser/ipc.test.js +199 -0
- package/dist/__tests__/browser/ipc.test.js.map +1 -0
- package/dist/__tests__/browser/lifecycle.test.d.ts +2 -0
- package/dist/__tests__/browser/lifecycle.test.d.ts.map +1 -0
- package/dist/__tests__/browser/lifecycle.test.js +176 -0
- package/dist/__tests__/browser/lifecycle.test.js.map +1 -0
- package/dist/__tests__/browser/snapshot.test.d.ts +2 -0
- package/dist/__tests__/browser/snapshot.test.d.ts.map +1 -0
- package/dist/__tests__/browser/snapshot.test.js +202 -0
- package/dist/__tests__/browser/snapshot.test.js.map +1 -0
- package/dist/__tests__/commands/browser.test.d.ts +2 -0
- package/dist/__tests__/commands/browser.test.d.ts.map +1 -0
- package/dist/__tests__/commands/browser.test.js +431 -0
- package/dist/__tests__/commands/browser.test.js.map +1 -0
- package/dist/__tests__/utils/browser-credentials.test.d.ts +2 -0
- package/dist/__tests__/utils/browser-credentials.test.d.ts.map +1 -0
- package/dist/__tests__/utils/browser-credentials.test.js +81 -0
- package/dist/__tests__/utils/browser-credentials.test.js.map +1 -0
- package/dist/browser/connection.d.ts +24 -0
- package/dist/browser/connection.d.ts.map +1 -0
- package/dist/browser/connection.js +55 -0
- package/dist/browser/connection.js.map +1 -0
- package/dist/browser/daemon.d.ts +130 -0
- package/dist/browser/daemon.d.ts.map +1 -0
- package/dist/browser/daemon.js +645 -0
- package/dist/browser/daemon.js.map +1 -0
- package/dist/browser/entrypoint.d.ts +20 -0
- package/dist/browser/entrypoint.d.ts.map +1 -0
- package/dist/browser/entrypoint.js +46 -0
- package/dist/browser/entrypoint.js.map +1 -0
- package/dist/browser/interaction.d.ts +32 -0
- package/dist/browser/interaction.d.ts.map +1 -0
- package/dist/browser/interaction.js +215 -0
- package/dist/browser/interaction.js.map +1 -0
- package/dist/browser/ipc.d.ts +52 -0
- package/dist/browser/ipc.d.ts.map +1 -0
- package/dist/browser/ipc.js +254 -0
- package/dist/browser/ipc.js.map +1 -0
- package/dist/browser/lifecycle.d.ts +31 -0
- package/dist/browser/lifecycle.d.ts.map +1 -0
- package/dist/browser/lifecycle.js +202 -0
- package/dist/browser/lifecycle.js.map +1 -0
- package/dist/browser/screenshot.d.ts +19 -0
- package/dist/browser/screenshot.d.ts.map +1 -0
- package/dist/browser/screenshot.js +44 -0
- package/dist/browser/screenshot.js.map +1 -0
- package/dist/browser/snapshot.d.ts +48 -0
- package/dist/browser/snapshot.d.ts.map +1 -0
- package/dist/browser/snapshot.js +490 -0
- package/dist/browser/snapshot.js.map +1 -0
- package/dist/commands/browser.d.ts +62 -0
- package/dist/commands/browser.d.ts.map +1 -0
- package/dist/commands/browser.js +615 -0
- package/dist/commands/browser.js.map +1 -0
- package/dist/index.js +39 -25
- package/dist/index.js.map +1 -1
- package/dist/utils/browser-credentials.d.ts +5 -0
- package/dist/utils/browser-credentials.d.ts.map +1 -0
- package/dist/utils/browser-credentials.js +53 -0
- package/dist/utils/browser-credentials.js.map +1 -0
- package/package.json +2 -1
|
@@ -0,0 +1,615 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.list_browser_sessions = exports.handle_browser_type = exports.handle_browser_status = exports.handle_browser_snapshot = exports.handle_browser_sessions = exports.handle_browser_select = exports.handle_browser_scroll = exports.handle_browser_screenshot = exports.handle_browser_reload = exports.handle_browser_open = exports.handle_browser_network = exports.handle_browser_hover = exports.handle_browser_get_text = exports.handle_browser_get_html = exports.handle_browser_forward = exports.handle_browser_fill = exports.handle_browser_cookies = exports.handle_browser_close = exports.handle_browser_click = exports.handle_browser_check = exports.handle_browser_back = exports.get_browser_session_names = exports.create_browser_command = exports.browser_command = void 0;
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const commander_1 = require("commander");
|
|
10
|
+
const daemon_1 = require("../browser/daemon");
|
|
11
|
+
const ipc_1 = require("../browser/ipc");
|
|
12
|
+
const lifecycle_1 = require("../browser/lifecycle");
|
|
13
|
+
const auth_1 = require("../utils/auth");
|
|
14
|
+
const browser_credentials_1 = require("../utils/browser-credentials");
|
|
15
|
+
const output_1 = require("../utils/output");
|
|
16
|
+
const spinner_1 = require("../utils/spinner");
|
|
17
|
+
const OPEN_ONLY_FLAGS = [
|
|
18
|
+
{
|
|
19
|
+
key: 'country',
|
|
20
|
+
label: '--country',
|
|
21
|
+
message: 'Use it with "brightdata browser open" when starting a session.',
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
key: 'zone',
|
|
25
|
+
label: '--zone',
|
|
26
|
+
message: 'Use it with "brightdata browser open" when starting a session.',
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
key: 'idleTimeout',
|
|
30
|
+
label: '--idle-timeout',
|
|
31
|
+
message: 'Use it with "brightdata browser open" when starting a session.',
|
|
32
|
+
},
|
|
33
|
+
];
|
|
34
|
+
const SNAPSHOT_ONLY_FLAGS = [
|
|
35
|
+
{
|
|
36
|
+
key: 'compact',
|
|
37
|
+
label: '--compact',
|
|
38
|
+
message: 'Use it with "brightdata browser snapshot".',
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
key: 'interactive',
|
|
42
|
+
label: '--interactive',
|
|
43
|
+
message: 'Use it with "brightdata browser snapshot".',
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
key: 'depth',
|
|
47
|
+
label: '--depth',
|
|
48
|
+
message: 'Use it with "brightdata browser snapshot".',
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
key: 'selector',
|
|
52
|
+
label: '--selector',
|
|
53
|
+
message: 'Use it with "brightdata browser snapshot".',
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
key: 'wrap',
|
|
57
|
+
label: '--wrap',
|
|
58
|
+
message: 'Use it with "brightdata browser snapshot".',
|
|
59
|
+
},
|
|
60
|
+
];
|
|
61
|
+
const SCREENSHOT_ONLY_FLAGS = [
|
|
62
|
+
{
|
|
63
|
+
key: 'base64',
|
|
64
|
+
label: '--base64',
|
|
65
|
+
message: 'Use it with "brightdata browser screenshot".',
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
key: 'fullPage',
|
|
69
|
+
label: '--full-page',
|
|
70
|
+
message: 'Use it with "brightdata browser screenshot".',
|
|
71
|
+
},
|
|
72
|
+
];
|
|
73
|
+
const UNIMPLEMENTED_FLAGS = [
|
|
74
|
+
{
|
|
75
|
+
key: 'headed',
|
|
76
|
+
label: '--headed',
|
|
77
|
+
message: 'Headed browser mode is not implemented yet.',
|
|
78
|
+
},
|
|
79
|
+
];
|
|
80
|
+
const create_request_id = (action) => `browser-${action}-${Date.now()}`;
|
|
81
|
+
const parse_timeout_ms = (raw, label) => {
|
|
82
|
+
const normalized = raw?.trim();
|
|
83
|
+
if (!normalized)
|
|
84
|
+
return undefined;
|
|
85
|
+
const parsed = Number(normalized);
|
|
86
|
+
if (!Number.isFinite(parsed) || parsed < 0) {
|
|
87
|
+
(0, output_1.fail)(`${label} must be a non-negative number of milliseconds.`);
|
|
88
|
+
return undefined;
|
|
89
|
+
}
|
|
90
|
+
return Math.floor(parsed);
|
|
91
|
+
};
|
|
92
|
+
const parse_snapshot_depth = (raw) => {
|
|
93
|
+
const normalized = raw?.trim();
|
|
94
|
+
if (!normalized)
|
|
95
|
+
return undefined;
|
|
96
|
+
const parsed = Number(normalized);
|
|
97
|
+
if (!Number.isInteger(parsed) || parsed < 0) {
|
|
98
|
+
(0, output_1.fail)('Snapshot depth must be a non-negative integer.');
|
|
99
|
+
return undefined;
|
|
100
|
+
}
|
|
101
|
+
return parsed;
|
|
102
|
+
};
|
|
103
|
+
const parse_snapshot_selector = (raw) => {
|
|
104
|
+
if (raw === undefined)
|
|
105
|
+
return undefined;
|
|
106
|
+
const normalized = raw.trim();
|
|
107
|
+
if (!normalized) {
|
|
108
|
+
(0, output_1.fail)('Snapshot selector cannot be empty.');
|
|
109
|
+
return undefined;
|
|
110
|
+
}
|
|
111
|
+
return normalized;
|
|
112
|
+
};
|
|
113
|
+
const parse_screenshot_path = (raw, label = 'Screenshot path') => {
|
|
114
|
+
if (raw === undefined)
|
|
115
|
+
return undefined;
|
|
116
|
+
const normalized = raw.trim();
|
|
117
|
+
if (!normalized) {
|
|
118
|
+
(0, output_1.fail)(`${label} cannot be empty.`);
|
|
119
|
+
return undefined;
|
|
120
|
+
}
|
|
121
|
+
return path_1.default.resolve(normalized);
|
|
122
|
+
};
|
|
123
|
+
const has_flag_value = (value) => {
|
|
124
|
+
if (typeof value == 'boolean')
|
|
125
|
+
return value;
|
|
126
|
+
if (typeof value == 'string')
|
|
127
|
+
return !!value.trim();
|
|
128
|
+
return value !== undefined && value !== null;
|
|
129
|
+
};
|
|
130
|
+
const is_structured_output_requested = (opts) => {
|
|
131
|
+
return !!(opts.json || opts.pretty || opts.output);
|
|
132
|
+
};
|
|
133
|
+
const assert_flags_not_set = (opts, command_name, flags) => {
|
|
134
|
+
for (const flag of flags) {
|
|
135
|
+
if (!has_flag_value(opts[flag.key]))
|
|
136
|
+
continue;
|
|
137
|
+
(0, output_1.fail)(`${flag.label} is not supported by "${command_name}". ${flag.message}`);
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
const assert_standard_session_flags = (opts, command_name) => {
|
|
141
|
+
assert_flags_not_set(opts, command_name, OPEN_ONLY_FLAGS);
|
|
142
|
+
assert_flags_not_set(opts, command_name, SNAPSHOT_ONLY_FLAGS);
|
|
143
|
+
assert_flags_not_set(opts, command_name, SCREENSHOT_ONLY_FLAGS);
|
|
144
|
+
assert_flags_not_set(opts, command_name, UNIMPLEMENTED_FLAGS);
|
|
145
|
+
};
|
|
146
|
+
const assert_snapshot_flags = (opts, command_name) => {
|
|
147
|
+
assert_flags_not_set(opts, command_name, OPEN_ONLY_FLAGS);
|
|
148
|
+
assert_flags_not_set(opts, command_name, SCREENSHOT_ONLY_FLAGS);
|
|
149
|
+
assert_flags_not_set(opts, command_name, UNIMPLEMENTED_FLAGS);
|
|
150
|
+
};
|
|
151
|
+
const assert_screenshot_flags = (opts, command_name) => {
|
|
152
|
+
assert_flags_not_set(opts, command_name, OPEN_ONLY_FLAGS);
|
|
153
|
+
assert_flags_not_set(opts, command_name, SNAPSHOT_ONLY_FLAGS);
|
|
154
|
+
assert_flags_not_set(opts, command_name, UNIMPLEMENTED_FLAGS);
|
|
155
|
+
};
|
|
156
|
+
const get_session_name = (session) => {
|
|
157
|
+
return (0, ipc_1.normalize_session_name)(session ?? ipc_1.DEFAULT_SESSION_NAME);
|
|
158
|
+
};
|
|
159
|
+
const get_browser_zone = (zone) => {
|
|
160
|
+
const resolved = zone?.trim()
|
|
161
|
+
|| process.env['BRIGHTDATA_BROWSER_ZONE']?.trim()
|
|
162
|
+
|| browser_credentials_1.DEFAULT_BROWSER_ZONE;
|
|
163
|
+
if (!resolved) {
|
|
164
|
+
(0, output_1.fail)('Browser zone cannot be empty.');
|
|
165
|
+
return browser_credentials_1.DEFAULT_BROWSER_ZONE;
|
|
166
|
+
}
|
|
167
|
+
return resolved;
|
|
168
|
+
};
|
|
169
|
+
const get_print_opts = (opts) => ({
|
|
170
|
+
json: opts.json,
|
|
171
|
+
output: opts.output,
|
|
172
|
+
pretty: opts.pretty,
|
|
173
|
+
});
|
|
174
|
+
const get_ipc_opts = (opts) => ({
|
|
175
|
+
daemon_dir: opts.daemonDir,
|
|
176
|
+
timeout_ms: parse_timeout_ms(opts.timeout, 'Browser timeout'),
|
|
177
|
+
});
|
|
178
|
+
const get_snapshot_params = (opts) => ({
|
|
179
|
+
compact: opts.compact === true,
|
|
180
|
+
depth: parse_snapshot_depth(opts.depth),
|
|
181
|
+
interactive: opts.interactive === true,
|
|
182
|
+
selector: parse_snapshot_selector(opts.selector),
|
|
183
|
+
wrap: opts.wrap === true,
|
|
184
|
+
});
|
|
185
|
+
const is_raw_screenshot_output_path = (file_path, opts) => {
|
|
186
|
+
return file_path === undefined
|
|
187
|
+
&& !!opts.output
|
|
188
|
+
&& !opts.base64
|
|
189
|
+
&& !opts.json
|
|
190
|
+
&& !opts.pretty;
|
|
191
|
+
};
|
|
192
|
+
const get_screenshot_params = (file_path, opts) => ({
|
|
193
|
+
base64: opts.base64 === true,
|
|
194
|
+
full_page: opts.fullPage === true,
|
|
195
|
+
path: parse_screenshot_path(file_path, 'Screenshot path')
|
|
196
|
+
?? parse_screenshot_path(is_raw_screenshot_output_path(file_path, opts)
|
|
197
|
+
? opts.output
|
|
198
|
+
: undefined, 'Screenshot output path'),
|
|
199
|
+
});
|
|
200
|
+
const get_action_opts = (opts, command) => ({
|
|
201
|
+
...command.optsWithGlobals(),
|
|
202
|
+
...opts,
|
|
203
|
+
});
|
|
204
|
+
const send_browser_action = async (session_name, action, opts, params) => {
|
|
205
|
+
const response = await (0, lifecycle_1.send_command)(session_name, {
|
|
206
|
+
id: create_request_id(action),
|
|
207
|
+
action,
|
|
208
|
+
params,
|
|
209
|
+
}, get_ipc_opts(opts));
|
|
210
|
+
if (!response.success)
|
|
211
|
+
(0, output_1.fail)(response.error ?? `Browser command "${action}" failed.`);
|
|
212
|
+
return response.data;
|
|
213
|
+
};
|
|
214
|
+
const ensure_active_session = async (session_name, opts) => {
|
|
215
|
+
const active = await (0, lifecycle_1.is_daemon_alive)(session_name, get_ipc_opts(opts));
|
|
216
|
+
if (active)
|
|
217
|
+
return;
|
|
218
|
+
(0, output_1.fail)(`No active browser session "${session_name}". `
|
|
219
|
+
+ `Use 'brightdata browser open <url>' first.`);
|
|
220
|
+
};
|
|
221
|
+
const resolve_active_session = async (opts, command_name) => {
|
|
222
|
+
assert_standard_session_flags(opts, command_name);
|
|
223
|
+
const session_name = get_session_name(opts.session);
|
|
224
|
+
await ensure_active_session(session_name, opts);
|
|
225
|
+
return session_name;
|
|
226
|
+
};
|
|
227
|
+
const print_navigation_result = (message, data, opts) => {
|
|
228
|
+
if (is_structured_output_requested(opts)) {
|
|
229
|
+
(0, output_1.print)(data, get_print_opts(opts));
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
(0, output_1.success)(message);
|
|
233
|
+
(0, output_1.info)(`Title: ${data.title ?? 'Unknown'}`);
|
|
234
|
+
(0, output_1.info)(`URL: ${data.url ?? 'Unknown'}`);
|
|
235
|
+
};
|
|
236
|
+
const get_browser_session_names = (opts = {}) => {
|
|
237
|
+
const base_dir = (0, ipc_1.get_daemon_base_dir)({ daemon_dir: opts.daemonDir });
|
|
238
|
+
if (!fs_1.default.existsSync(base_dir))
|
|
239
|
+
return [];
|
|
240
|
+
const sessions = new Set();
|
|
241
|
+
for (const entry of fs_1.default.readdirSync(base_dir)) {
|
|
242
|
+
const match = entry.match(/^(.+)\.(pid|sock|port)$/);
|
|
243
|
+
if (match)
|
|
244
|
+
sessions.add(match[1]);
|
|
245
|
+
}
|
|
246
|
+
return Array.from(sessions).sort();
|
|
247
|
+
};
|
|
248
|
+
exports.get_browser_session_names = get_browser_session_names;
|
|
249
|
+
const list_browser_sessions = async (opts = {}) => {
|
|
250
|
+
const sessions = get_browser_session_names(opts);
|
|
251
|
+
const active_sessions = [];
|
|
252
|
+
for (const session_name of sessions) {
|
|
253
|
+
if (!await (0, lifecycle_1.is_daemon_alive)(session_name, get_ipc_opts(opts)))
|
|
254
|
+
continue;
|
|
255
|
+
const response = await (0, lifecycle_1.send_command)(session_name, {
|
|
256
|
+
id: create_request_id('status'),
|
|
257
|
+
action: 'status',
|
|
258
|
+
}, get_ipc_opts(opts));
|
|
259
|
+
if (response.success)
|
|
260
|
+
active_sessions.push(response.data);
|
|
261
|
+
}
|
|
262
|
+
return active_sessions;
|
|
263
|
+
};
|
|
264
|
+
exports.list_browser_sessions = list_browser_sessions;
|
|
265
|
+
const handle_browser_open = async (url, opts) => {
|
|
266
|
+
assert_flags_not_set(opts, 'brightdata browser open', SNAPSHOT_ONLY_FLAGS);
|
|
267
|
+
assert_flags_not_set(opts, 'brightdata browser open', SCREENSHOT_ONLY_FLAGS);
|
|
268
|
+
assert_flags_not_set(opts, 'brightdata browser open', UNIMPLEMENTED_FLAGS);
|
|
269
|
+
const api_key = (0, auth_1.ensure_authenticated)(opts.apiKey);
|
|
270
|
+
const session_name = get_session_name(opts.session);
|
|
271
|
+
const zone = get_browser_zone(opts.zone);
|
|
272
|
+
const idle_timeout_ms = parse_timeout_ms(opts.idleTimeout, 'Browser idle timeout');
|
|
273
|
+
const spinner = (0, spinner_1.start)(`Opening browser session "${session_name}"...`);
|
|
274
|
+
try {
|
|
275
|
+
await (0, browser_credentials_1.ensure_browser_zone)(api_key, zone);
|
|
276
|
+
const cdp_endpoint = await (0, browser_credentials_1.get_cdp_endpoint)(api_key, zone, opts.country);
|
|
277
|
+
await (0, lifecycle_1.ensure_daemon)(session_name, {
|
|
278
|
+
cdp_endpoint,
|
|
279
|
+
daemon_dir: opts.daemonDir,
|
|
280
|
+
idle_timeout_ms,
|
|
281
|
+
});
|
|
282
|
+
const data = await send_browser_action(session_name, 'navigate', opts, { url, cdp_endpoint });
|
|
283
|
+
spinner.stop();
|
|
284
|
+
print_navigation_result(`Navigated to ${url}`, data, opts);
|
|
285
|
+
}
|
|
286
|
+
catch (error) {
|
|
287
|
+
spinner.stop();
|
|
288
|
+
(0, output_1.fail)(error.message);
|
|
289
|
+
}
|
|
290
|
+
};
|
|
291
|
+
exports.handle_browser_open = handle_browser_open;
|
|
292
|
+
const handle_browser_navigation_action = async (action, message, opts) => {
|
|
293
|
+
const session_name = await resolve_active_session(opts, `brightdata browser ${action}`);
|
|
294
|
+
const data = await send_browser_action(session_name, action, opts);
|
|
295
|
+
print_navigation_result(message, data, opts);
|
|
296
|
+
};
|
|
297
|
+
const handle_browser_back = async (opts) => {
|
|
298
|
+
await handle_browser_navigation_action('back', 'Navigated back.', opts);
|
|
299
|
+
};
|
|
300
|
+
exports.handle_browser_back = handle_browser_back;
|
|
301
|
+
const handle_browser_forward = async (opts) => {
|
|
302
|
+
await handle_browser_navigation_action('forward', 'Navigated forward.', opts);
|
|
303
|
+
};
|
|
304
|
+
exports.handle_browser_forward = handle_browser_forward;
|
|
305
|
+
const handle_browser_reload = async (opts) => {
|
|
306
|
+
await handle_browser_navigation_action('reload', 'Reloaded page.', opts);
|
|
307
|
+
};
|
|
308
|
+
exports.handle_browser_reload = handle_browser_reload;
|
|
309
|
+
const handle_browser_snapshot = async (opts) => {
|
|
310
|
+
assert_snapshot_flags(opts, 'brightdata browser snapshot');
|
|
311
|
+
const session_name = get_session_name(opts.session);
|
|
312
|
+
await ensure_active_session(session_name, opts);
|
|
313
|
+
const data = await send_browser_action(session_name, 'snapshot', opts, get_snapshot_params(opts));
|
|
314
|
+
if (opts.json || opts.pretty) {
|
|
315
|
+
(0, output_1.print)(data, get_print_opts(opts));
|
|
316
|
+
return;
|
|
317
|
+
}
|
|
318
|
+
(0, output_1.print)(data.snapshot ?? '', { output: opts.output });
|
|
319
|
+
};
|
|
320
|
+
exports.handle_browser_snapshot = handle_browser_snapshot;
|
|
321
|
+
const handle_browser_screenshot = async (file_path, opts) => {
|
|
322
|
+
assert_screenshot_flags(opts, 'brightdata browser screenshot');
|
|
323
|
+
const session_name = get_session_name(opts.session);
|
|
324
|
+
await ensure_active_session(session_name, opts);
|
|
325
|
+
const data = await send_browser_action(session_name, 'screenshot', opts, get_screenshot_params(file_path, opts));
|
|
326
|
+
if (opts.json || opts.pretty) {
|
|
327
|
+
(0, output_1.print)(data, get_print_opts(opts));
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
330
|
+
if (opts.base64) {
|
|
331
|
+
(0, output_1.print)(data.base64 ?? '', { output: opts.output });
|
|
332
|
+
return;
|
|
333
|
+
}
|
|
334
|
+
(0, output_1.print)(data.path ?? '', is_raw_screenshot_output_path(file_path, opts)
|
|
335
|
+
? {}
|
|
336
|
+
: { output: opts.output });
|
|
337
|
+
};
|
|
338
|
+
exports.handle_browser_screenshot = handle_browser_screenshot;
|
|
339
|
+
const handle_browser_fill = async (ref, value, opts) => {
|
|
340
|
+
assert_standard_session_flags(opts, 'brightdata browser fill');
|
|
341
|
+
const session_name = get_session_name(opts.session);
|
|
342
|
+
await ensure_active_session(session_name, opts);
|
|
343
|
+
await send_browser_action(session_name, 'fill', opts, { ref, value });
|
|
344
|
+
};
|
|
345
|
+
exports.handle_browser_fill = handle_browser_fill;
|
|
346
|
+
const handle_browser_get_text = async (selector, opts) => {
|
|
347
|
+
assert_standard_session_flags(opts, 'brightdata browser get text');
|
|
348
|
+
const session_name = get_session_name(opts.session);
|
|
349
|
+
await ensure_active_session(session_name, opts);
|
|
350
|
+
const data = await send_browser_action(session_name, 'get_text', opts, selector ? { selector } : undefined);
|
|
351
|
+
if (opts.json || opts.pretty) {
|
|
352
|
+
(0, output_1.print)(data, get_print_opts(opts));
|
|
353
|
+
return;
|
|
354
|
+
}
|
|
355
|
+
(0, output_1.print)(data.text ?? '', { output: opts.output });
|
|
356
|
+
};
|
|
357
|
+
exports.handle_browser_get_text = handle_browser_get_text;
|
|
358
|
+
const handle_browser_get_html = async (selector, opts) => {
|
|
359
|
+
assert_standard_session_flags(opts, 'brightdata browser get html');
|
|
360
|
+
const session_name = get_session_name(opts.session);
|
|
361
|
+
await ensure_active_session(session_name, opts);
|
|
362
|
+
const data = await send_browser_action(session_name, 'get_html', opts, selector ? { selector } : undefined);
|
|
363
|
+
if (opts.json || opts.pretty) {
|
|
364
|
+
(0, output_1.print)(data, get_print_opts(opts));
|
|
365
|
+
return;
|
|
366
|
+
}
|
|
367
|
+
(0, output_1.print)(data.html ?? '', { output: opts.output });
|
|
368
|
+
};
|
|
369
|
+
exports.handle_browser_get_html = handle_browser_get_html;
|
|
370
|
+
const handle_browser_click = async (ref, opts) => {
|
|
371
|
+
assert_standard_session_flags(opts, 'brightdata browser click');
|
|
372
|
+
const session_name = get_session_name(opts.session);
|
|
373
|
+
await ensure_active_session(session_name, opts);
|
|
374
|
+
await send_browser_action(session_name, 'click', opts, { ref });
|
|
375
|
+
};
|
|
376
|
+
exports.handle_browser_click = handle_browser_click;
|
|
377
|
+
const handle_browser_type = async (ref, text, opts) => {
|
|
378
|
+
assert_standard_session_flags(opts, 'brightdata browser type');
|
|
379
|
+
const session_name = get_session_name(opts.session);
|
|
380
|
+
await ensure_active_session(session_name, opts);
|
|
381
|
+
await send_browser_action(session_name, 'type', opts, {
|
|
382
|
+
ref,
|
|
383
|
+
text,
|
|
384
|
+
append: opts.append === true,
|
|
385
|
+
submit: opts.submit === true,
|
|
386
|
+
});
|
|
387
|
+
};
|
|
388
|
+
exports.handle_browser_type = handle_browser_type;
|
|
389
|
+
const handle_browser_select = async (ref, value, opts) => {
|
|
390
|
+
assert_standard_session_flags(opts, 'brightdata browser select');
|
|
391
|
+
const session_name = get_session_name(opts.session);
|
|
392
|
+
await ensure_active_session(session_name, opts);
|
|
393
|
+
await send_browser_action(session_name, 'select', opts, { ref, value });
|
|
394
|
+
};
|
|
395
|
+
exports.handle_browser_select = handle_browser_select;
|
|
396
|
+
const handle_browser_check = async (ref, checked, opts) => {
|
|
397
|
+
const cmd = checked ? 'check' : 'uncheck';
|
|
398
|
+
assert_standard_session_flags(opts, `brightdata browser ${cmd}`);
|
|
399
|
+
const session_name = get_session_name(opts.session);
|
|
400
|
+
await ensure_active_session(session_name, opts);
|
|
401
|
+
await send_browser_action(session_name, cmd, opts, { ref });
|
|
402
|
+
};
|
|
403
|
+
exports.handle_browser_check = handle_browser_check;
|
|
404
|
+
const handle_browser_hover = async (ref, opts) => {
|
|
405
|
+
assert_standard_session_flags(opts, 'brightdata browser hover');
|
|
406
|
+
const session_name = get_session_name(opts.session);
|
|
407
|
+
await ensure_active_session(session_name, opts);
|
|
408
|
+
await send_browser_action(session_name, 'hover', opts, { ref });
|
|
409
|
+
};
|
|
410
|
+
exports.handle_browser_hover = handle_browser_hover;
|
|
411
|
+
const handle_browser_scroll = async (opts) => {
|
|
412
|
+
assert_standard_session_flags(opts, 'brightdata browser scroll');
|
|
413
|
+
const session_name = get_session_name(opts.session);
|
|
414
|
+
await ensure_active_session(session_name, opts);
|
|
415
|
+
const params = {};
|
|
416
|
+
if (opts.direction)
|
|
417
|
+
params['direction'] = opts.direction;
|
|
418
|
+
if (opts.distance)
|
|
419
|
+
params['distance'] = Number(opts.distance);
|
|
420
|
+
if (opts.ref)
|
|
421
|
+
params['ref'] = opts.ref;
|
|
422
|
+
await send_browser_action(session_name, 'scroll', opts, params);
|
|
423
|
+
};
|
|
424
|
+
exports.handle_browser_scroll = handle_browser_scroll;
|
|
425
|
+
const handle_browser_status = async (opts) => {
|
|
426
|
+
const session_name = await resolve_active_session(opts, 'brightdata browser status');
|
|
427
|
+
const data = await send_browser_action(session_name, 'status', opts);
|
|
428
|
+
(0, output_1.print)(data, get_print_opts(opts));
|
|
429
|
+
};
|
|
430
|
+
exports.handle_browser_status = handle_browser_status;
|
|
431
|
+
const format_network_requests = (requests) => {
|
|
432
|
+
if (!requests.length)
|
|
433
|
+
return 'No network requests captured.';
|
|
434
|
+
const lines = [`Network Requests (${requests.length} total):`];
|
|
435
|
+
for (const req of requests) {
|
|
436
|
+
const method = String(req['method'] ?? 'GET').toUpperCase();
|
|
437
|
+
const url = String(req['url'] ?? '');
|
|
438
|
+
const status = req['status'] !== undefined
|
|
439
|
+
? ` => [${req['status']}]`
|
|
440
|
+
: '';
|
|
441
|
+
lines.push(`[${method}] ${url}${status}`);
|
|
442
|
+
}
|
|
443
|
+
return lines.join('\n');
|
|
444
|
+
};
|
|
445
|
+
const handle_browser_network = async (opts) => {
|
|
446
|
+
const session_name = await resolve_active_session(opts, 'brightdata browser network');
|
|
447
|
+
const data = await send_browser_action(session_name, 'network', opts);
|
|
448
|
+
if (opts.json || opts.pretty) {
|
|
449
|
+
(0, output_1.print)(data.requests ?? [], get_print_opts(opts));
|
|
450
|
+
return;
|
|
451
|
+
}
|
|
452
|
+
(0, output_1.print)(format_network_requests(data.requests ?? []), { output: opts.output });
|
|
453
|
+
};
|
|
454
|
+
exports.handle_browser_network = handle_browser_network;
|
|
455
|
+
const handle_browser_cookies = async (opts) => {
|
|
456
|
+
const session_name = await resolve_active_session(opts, 'brightdata browser cookies');
|
|
457
|
+
const data = await send_browser_action(session_name, 'cookies', opts);
|
|
458
|
+
(0, output_1.print)(data.cookies ?? [], get_print_opts(opts));
|
|
459
|
+
};
|
|
460
|
+
exports.handle_browser_cookies = handle_browser_cookies;
|
|
461
|
+
const handle_browser_sessions = async (opts = {}) => {
|
|
462
|
+
assert_standard_session_flags(opts, 'brightdata browser sessions');
|
|
463
|
+
if (has_flag_value(opts.session)) {
|
|
464
|
+
(0, output_1.fail)('--session is not supported by "brightdata browser sessions". '
|
|
465
|
+
+ 'This command lists all active sessions.');
|
|
466
|
+
}
|
|
467
|
+
const sessions = await list_browser_sessions(opts);
|
|
468
|
+
(0, output_1.print)(sessions, get_print_opts(opts));
|
|
469
|
+
};
|
|
470
|
+
exports.handle_browser_sessions = handle_browser_sessions;
|
|
471
|
+
const handle_browser_close = async (opts = {}) => {
|
|
472
|
+
assert_standard_session_flags(opts, 'brightdata browser close');
|
|
473
|
+
if (opts.all && has_flag_value(opts.session)) {
|
|
474
|
+
(0, output_1.fail)('--session cannot be combined with '
|
|
475
|
+
+ '"brightdata browser close --all".');
|
|
476
|
+
}
|
|
477
|
+
if (opts.all) {
|
|
478
|
+
const sessions = get_browser_session_names(opts);
|
|
479
|
+
let closed_sessions = 0;
|
|
480
|
+
for (const session_name of sessions) {
|
|
481
|
+
if (!await (0, lifecycle_1.is_daemon_alive)(session_name, get_ipc_opts(opts)))
|
|
482
|
+
continue;
|
|
483
|
+
await send_browser_action(session_name, 'close', opts);
|
|
484
|
+
closed_sessions++;
|
|
485
|
+
}
|
|
486
|
+
if (is_structured_output_requested(opts)) {
|
|
487
|
+
(0, output_1.print)({ closed_sessions }, get_print_opts(opts));
|
|
488
|
+
return;
|
|
489
|
+
}
|
|
490
|
+
if (!closed_sessions) {
|
|
491
|
+
(0, output_1.info)('No active browser sessions.');
|
|
492
|
+
return;
|
|
493
|
+
}
|
|
494
|
+
(0, output_1.success)(`Closed ${closed_sessions} browser session${closed_sessions == 1 ? '' : 's'}.`);
|
|
495
|
+
return;
|
|
496
|
+
}
|
|
497
|
+
const session_name = get_session_name(opts.session);
|
|
498
|
+
if (!await (0, lifecycle_1.is_daemon_alive)(session_name, get_ipc_opts(opts))) {
|
|
499
|
+
if (is_structured_output_requested(opts)) {
|
|
500
|
+
(0, output_1.print)({ closed: false, session_name }, get_print_opts(opts));
|
|
501
|
+
return;
|
|
502
|
+
}
|
|
503
|
+
(0, output_1.info)(`No active browser session "${session_name}".`);
|
|
504
|
+
return;
|
|
505
|
+
}
|
|
506
|
+
const data = await send_browser_action(session_name, 'close', opts);
|
|
507
|
+
if (is_structured_output_requested(opts)) {
|
|
508
|
+
(0, output_1.print)({ session_name, ...data }, get_print_opts(opts));
|
|
509
|
+
return;
|
|
510
|
+
}
|
|
511
|
+
(0, output_1.success)(`Closed browser session "${session_name}".`);
|
|
512
|
+
};
|
|
513
|
+
exports.handle_browser_close = handle_browser_close;
|
|
514
|
+
const create_session_command = (name, description, action) => {
|
|
515
|
+
return new commander_1.Command(name)
|
|
516
|
+
.description(description)
|
|
517
|
+
.action(async (opts, command) => action(get_action_opts(opts, command)));
|
|
518
|
+
};
|
|
519
|
+
const create_browser_command = () => {
|
|
520
|
+
const browser = new commander_1.Command('browser')
|
|
521
|
+
.description('Control Bright Data browser sessions')
|
|
522
|
+
.option('-k, --api-key <key>', 'Override API key')
|
|
523
|
+
.option('-o, --output <path>', 'Write output to file')
|
|
524
|
+
.option('--json', 'Force JSON output')
|
|
525
|
+
.option('--pretty', 'Pretty-print JSON output')
|
|
526
|
+
.option('--session <name>', `Browser session name (default: ${ipc_1.DEFAULT_SESSION_NAME})`)
|
|
527
|
+
.option('--country <code>', 'ISO country code for geo-targeting (e.g. us, de)')
|
|
528
|
+
.option('--zone <name>', `Browser zone name (default: ${browser_credentials_1.DEFAULT_BROWSER_ZONE})`)
|
|
529
|
+
.option('--compact', 'Include only interactive elements and their ancestors')
|
|
530
|
+
.option('--interactive', 'Include only interactive elements as a flat list')
|
|
531
|
+
.option('--depth <n>', 'Limit snapshot depth to a non-negative integer')
|
|
532
|
+
.option('--selector <sel>', 'Scope snapshots to a CSS selector subtree')
|
|
533
|
+
.option('--wrap', 'Wrap snapshot output in AI-safe content boundaries')
|
|
534
|
+
.option('--full-page', 'Capture the full scrollable page in screenshots')
|
|
535
|
+
.option('--base64', 'Include base64-encoded screenshot data in the response')
|
|
536
|
+
.option('--timeout <ms>', `Command timeout in milliseconds (default: ${ipc_1.DEFAULT_IPC_TIMEOUT_MS})`)
|
|
537
|
+
.option('--headed', 'Request headed browser mode when supported')
|
|
538
|
+
.option('--idle-timeout <ms>', 'Daemon idle timeout in milliseconds '
|
|
539
|
+
+ `(default: ${daemon_1.DEFAULT_DAEMON_IDLE_TIMEOUT_MS})`);
|
|
540
|
+
browser.addCommand(new commander_1.Command('open')
|
|
541
|
+
.description('Navigate to a URL in the Bright Data browser')
|
|
542
|
+
.argument('<url>', 'URL to navigate to')
|
|
543
|
+
.action(async (url, opts, command) => handle_browser_open(url, get_action_opts(opts, command))));
|
|
544
|
+
browser.addCommand(create_session_command('snapshot', 'Capture a text snapshot of the current page', handle_browser_snapshot));
|
|
545
|
+
browser.addCommand(new commander_1.Command('screenshot')
|
|
546
|
+
.description('Capture a PNG screenshot of the current page')
|
|
547
|
+
.argument('[path]', 'Where to save the PNG screenshot')
|
|
548
|
+
.action(async (file_path, opts, command) => handle_browser_screenshot(file_path, get_action_opts(opts, command))));
|
|
549
|
+
browser.addCommand(create_session_command('back', 'Navigate back in the active browser session', handle_browser_back));
|
|
550
|
+
browser.addCommand(create_session_command('forward', 'Navigate forward in the active browser session', handle_browser_forward));
|
|
551
|
+
browser.addCommand(create_session_command('reload', 'Reload the current page in the active browser session', handle_browser_reload));
|
|
552
|
+
browser.addCommand(new commander_1.Command('fill')
|
|
553
|
+
.description('Fill a form field by its snapshot ref')
|
|
554
|
+
.argument('<ref>', 'Element ref from snapshot (e.g. e1)')
|
|
555
|
+
.argument('<value>', 'Value to fill')
|
|
556
|
+
.action(async (ref, value, opts, command) => handle_browser_fill(ref, value, get_action_opts(opts, command))));
|
|
557
|
+
const get_cmd = new commander_1.Command('get')
|
|
558
|
+
.description('Get page content');
|
|
559
|
+
get_cmd.addCommand(new commander_1.Command('text')
|
|
560
|
+
.description('Get text content of the page or a CSS selector')
|
|
561
|
+
.argument('[selector]', 'CSS selector to scope the text extraction')
|
|
562
|
+
.action(async (selector, opts, command) => handle_browser_get_text(selector, get_action_opts(opts, command))));
|
|
563
|
+
get_cmd.addCommand(new commander_1.Command('html')
|
|
564
|
+
.description('Get HTML content of the page or a CSS selector')
|
|
565
|
+
.argument('[selector]', 'CSS selector to scope the HTML extraction')
|
|
566
|
+
.action(async (selector, opts, command) => handle_browser_get_html(selector, get_action_opts(opts, command))));
|
|
567
|
+
browser.addCommand(get_cmd);
|
|
568
|
+
browser.addCommand(new commander_1.Command('click')
|
|
569
|
+
.description('Click an element by its snapshot ref')
|
|
570
|
+
.argument('<ref>', 'Element ref from snapshot (e.g. e1)')
|
|
571
|
+
.action(async (ref, opts, command) => handle_browser_click(ref, get_action_opts(opts, command))));
|
|
572
|
+
browser.addCommand(new commander_1.Command('type')
|
|
573
|
+
.description('Type text into an element by its snapshot ref')
|
|
574
|
+
.argument('<ref>', 'Element ref from snapshot (e.g. e1)')
|
|
575
|
+
.argument('<text>', 'Text to type')
|
|
576
|
+
.option('--append', 'Append to existing value instead of replacing it')
|
|
577
|
+
.option('--submit', 'Press Enter after typing')
|
|
578
|
+
.action(async (ref, text, opts, command) => handle_browser_type(ref, text, get_action_opts(opts, command))));
|
|
579
|
+
browser.addCommand(new commander_1.Command('select')
|
|
580
|
+
.description('Select a dropdown option by its label')
|
|
581
|
+
.argument('<ref>', 'Element ref from snapshot (e.g. e1)')
|
|
582
|
+
.argument('<value>', 'Option label to select')
|
|
583
|
+
.action(async (ref, value, opts, command) => handle_browser_select(ref, value, get_action_opts(opts, command))));
|
|
584
|
+
browser.addCommand(new commander_1.Command('check')
|
|
585
|
+
.description('Check a checkbox or radio button by its snapshot ref')
|
|
586
|
+
.argument('<ref>', 'Element ref from snapshot (e.g. e1)')
|
|
587
|
+
.action(async (ref, opts, command) => handle_browser_check(ref, true, get_action_opts(opts, command))));
|
|
588
|
+
browser.addCommand(new commander_1.Command('uncheck')
|
|
589
|
+
.description('Uncheck a checkbox by its snapshot ref')
|
|
590
|
+
.argument('<ref>', 'Element ref from snapshot (e.g. e1)')
|
|
591
|
+
.action(async (ref, opts, command) => handle_browser_check(ref, false, get_action_opts(opts, command))));
|
|
592
|
+
browser.addCommand(new commander_1.Command('hover')
|
|
593
|
+
.description('Hover over an element by its snapshot ref')
|
|
594
|
+
.argument('<ref>', 'Element ref from snapshot (e.g. e1)')
|
|
595
|
+
.action(async (ref, opts, command) => handle_browser_hover(ref, get_action_opts(opts, command))));
|
|
596
|
+
browser.addCommand(new commander_1.Command('scroll')
|
|
597
|
+
.description('Scroll the page or scroll an element into view')
|
|
598
|
+
.option('--direction <dir>', 'Scroll direction: up, down, left, right (default: down)')
|
|
599
|
+
.option('--distance <px>', 'Pixels to scroll (default: 300)')
|
|
600
|
+
.option('--ref <ref>', 'Scroll this element into view instead of the viewport')
|
|
601
|
+
.action(async (opts, command) => handle_browser_scroll(get_action_opts(opts, command))));
|
|
602
|
+
browser.addCommand(create_session_command('status', 'Show the current state of a browser session', handle_browser_status));
|
|
603
|
+
browser.addCommand(create_session_command('network', 'Show tracked network requests for a browser session', handle_browser_network));
|
|
604
|
+
browser.addCommand(create_session_command('cookies', 'Show cookies for the active browser session', handle_browser_cookies));
|
|
605
|
+
browser.addCommand(new commander_1.Command('close')
|
|
606
|
+
.description('Close one or all active browser sessions')
|
|
607
|
+
.option('--all', 'Close all active browser sessions')
|
|
608
|
+
.action(async (opts, command) => handle_browser_close(get_action_opts(opts, command))));
|
|
609
|
+
browser.addCommand(create_session_command('sessions', 'List active browser daemon sessions', handle_browser_sessions));
|
|
610
|
+
return browser;
|
|
611
|
+
};
|
|
612
|
+
exports.create_browser_command = create_browser_command;
|
|
613
|
+
const browser_command = create_browser_command();
|
|
614
|
+
exports.browser_command = browser_command;
|
|
615
|
+
//# sourceMappingURL=browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/commands/browser.ts"],"names":[],"mappings":"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"}
|