@brightdata/cli 0.1.3 → 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.
Files changed (92) hide show
  1. package/README.md +410 -1
  2. package/dist/__tests__/browser/connection.test.d.ts +2 -0
  3. package/dist/__tests__/browser/connection.test.d.ts.map +1 -0
  4. package/dist/__tests__/browser/connection.test.js +168 -0
  5. package/dist/__tests__/browser/connection.test.js.map +1 -0
  6. package/dist/__tests__/browser/daemon.test.d.ts +2 -0
  7. package/dist/__tests__/browser/daemon.test.d.ts.map +1 -0
  8. package/dist/__tests__/browser/daemon.test.js +586 -0
  9. package/dist/__tests__/browser/daemon.test.js.map +1 -0
  10. package/dist/__tests__/browser/entrypoint.test.d.ts +2 -0
  11. package/dist/__tests__/browser/entrypoint.test.d.ts.map +1 -0
  12. package/dist/__tests__/browser/entrypoint.test.js +53 -0
  13. package/dist/__tests__/browser/entrypoint.test.js.map +1 -0
  14. package/dist/__tests__/browser/ipc.test.d.ts +2 -0
  15. package/dist/__tests__/browser/ipc.test.d.ts.map +1 -0
  16. package/dist/__tests__/browser/ipc.test.js +199 -0
  17. package/dist/__tests__/browser/ipc.test.js.map +1 -0
  18. package/dist/__tests__/browser/lifecycle.test.d.ts +2 -0
  19. package/dist/__tests__/browser/lifecycle.test.d.ts.map +1 -0
  20. package/dist/__tests__/browser/lifecycle.test.js +176 -0
  21. package/dist/__tests__/browser/lifecycle.test.js.map +1 -0
  22. package/dist/__tests__/browser/snapshot.test.d.ts +2 -0
  23. package/dist/__tests__/browser/snapshot.test.d.ts.map +1 -0
  24. package/dist/__tests__/browser/snapshot.test.js +202 -0
  25. package/dist/__tests__/browser/snapshot.test.js.map +1 -0
  26. package/dist/__tests__/commands/add-mcp.test.d.ts +2 -0
  27. package/dist/__tests__/commands/add-mcp.test.d.ts.map +1 -0
  28. package/dist/__tests__/commands/add-mcp.test.js +138 -0
  29. package/dist/__tests__/commands/add-mcp.test.js.map +1 -0
  30. package/dist/__tests__/commands/browser.test.d.ts +2 -0
  31. package/dist/__tests__/commands/browser.test.d.ts.map +1 -0
  32. package/dist/__tests__/commands/browser.test.js +431 -0
  33. package/dist/__tests__/commands/browser.test.js.map +1 -0
  34. package/dist/__tests__/utils/browser-credentials.test.d.ts +2 -0
  35. package/dist/__tests__/utils/browser-credentials.test.d.ts.map +1 -0
  36. package/dist/__tests__/utils/browser-credentials.test.js +81 -0
  37. package/dist/__tests__/utils/browser-credentials.test.js.map +1 -0
  38. package/dist/__tests__/utils/mcp-config.test.d.ts +2 -0
  39. package/dist/__tests__/utils/mcp-config.test.d.ts.map +1 -0
  40. package/dist/__tests__/utils/mcp-config.test.js +154 -0
  41. package/dist/__tests__/utils/mcp-config.test.js.map +1 -0
  42. package/dist/browser/connection.d.ts +24 -0
  43. package/dist/browser/connection.d.ts.map +1 -0
  44. package/dist/browser/connection.js +55 -0
  45. package/dist/browser/connection.js.map +1 -0
  46. package/dist/browser/daemon.d.ts +130 -0
  47. package/dist/browser/daemon.d.ts.map +1 -0
  48. package/dist/browser/daemon.js +645 -0
  49. package/dist/browser/daemon.js.map +1 -0
  50. package/dist/browser/entrypoint.d.ts +20 -0
  51. package/dist/browser/entrypoint.d.ts.map +1 -0
  52. package/dist/browser/entrypoint.js +46 -0
  53. package/dist/browser/entrypoint.js.map +1 -0
  54. package/dist/browser/interaction.d.ts +32 -0
  55. package/dist/browser/interaction.d.ts.map +1 -0
  56. package/dist/browser/interaction.js +215 -0
  57. package/dist/browser/interaction.js.map +1 -0
  58. package/dist/browser/ipc.d.ts +52 -0
  59. package/dist/browser/ipc.d.ts.map +1 -0
  60. package/dist/browser/ipc.js +254 -0
  61. package/dist/browser/ipc.js.map +1 -0
  62. package/dist/browser/lifecycle.d.ts +31 -0
  63. package/dist/browser/lifecycle.d.ts.map +1 -0
  64. package/dist/browser/lifecycle.js +202 -0
  65. package/dist/browser/lifecycle.js.map +1 -0
  66. package/dist/browser/screenshot.d.ts +19 -0
  67. package/dist/browser/screenshot.d.ts.map +1 -0
  68. package/dist/browser/screenshot.js +44 -0
  69. package/dist/browser/screenshot.js.map +1 -0
  70. package/dist/browser/snapshot.d.ts +48 -0
  71. package/dist/browser/snapshot.d.ts.map +1 -0
  72. package/dist/browser/snapshot.js +490 -0
  73. package/dist/browser/snapshot.js.map +1 -0
  74. package/dist/commands/add-mcp.d.ts +18 -0
  75. package/dist/commands/add-mcp.d.ts.map +1 -0
  76. package/dist/commands/add-mcp.js +196 -0
  77. package/dist/commands/add-mcp.js.map +1 -0
  78. package/dist/commands/browser.d.ts +62 -0
  79. package/dist/commands/browser.d.ts.map +1 -0
  80. package/dist/commands/browser.js +615 -0
  81. package/dist/commands/browser.js.map +1 -0
  82. package/dist/index.js +40 -21
  83. package/dist/index.js.map +1 -1
  84. package/dist/utils/browser-credentials.d.ts +5 -0
  85. package/dist/utils/browser-credentials.d.ts.map +1 -0
  86. package/dist/utils/browser-credentials.js +53 -0
  87. package/dist/utils/browser-credentials.js.map +1 -0
  88. package/dist/utils/mcp-config.d.ts +15 -0
  89. package/dist/utils/mcp-config.d.ts.map +1 -0
  90. package/dist/utils/mcp-config.js +87 -0
  91. package/dist/utils/mcp-config.js.map +1 -0
  92. package/package.json +2 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entrypoint.test.js","sourceRoot":"","sources":["../../../src/__tests__/browser/entrypoint.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ipc.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ipc.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/browser/ipc.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,199 @@
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
+ const fs_1 = __importDefault(require("fs"));
7
+ const net_1 = __importDefault(require("net"));
8
+ const os_1 = __importDefault(require("os"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const vitest_1 = require("vitest");
11
+ const daemon_1 = require("../../browser/daemon");
12
+ const ipc_1 = require("../../browser/ipc");
13
+ const mk_tmp_dir = () => fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'bdata-ipc-'));
14
+ const close_server = async (server) => {
15
+ await new Promise(resolve => server.close(() => resolve(undefined)));
16
+ };
17
+ const listen_unix = async (server, socket_path) => {
18
+ await new Promise((resolve, reject) => {
19
+ server.once('error', reject);
20
+ server.listen(socket_path, () => resolve(undefined));
21
+ });
22
+ };
23
+ const listen_tcp = async (server, port) => {
24
+ await new Promise((resolve, reject) => {
25
+ server.once('error', reject);
26
+ server.listen(port, '127.0.0.1', () => resolve(undefined));
27
+ });
28
+ };
29
+ (0, vitest_1.describe)('browser/ipc', () => {
30
+ let tmp_dir = '';
31
+ let daemon = null;
32
+ let servers = [];
33
+ (0, vitest_1.beforeEach)(() => {
34
+ tmp_dir = mk_tmp_dir();
35
+ daemon = null;
36
+ servers = [];
37
+ });
38
+ (0, vitest_1.afterEach)(async () => {
39
+ if (daemon)
40
+ await daemon.stop();
41
+ await Promise.all(servers.map(close_server));
42
+ fs_1.default.rmSync(tmp_dir, { recursive: true, force: true });
43
+ });
44
+ (0, vitest_1.it)('validates requests, responses, and platform-specific paths', () => {
45
+ (0, vitest_1.expect)(() => (0, ipc_1.parse_daemon_request)({ id: '', action: 'ping' }))
46
+ .toThrow('Daemon request id must be a non-empty string.');
47
+ (0, vitest_1.expect)((0, ipc_1.parse_daemon_request)({
48
+ id: ' req-1 ',
49
+ action: ' ping ',
50
+ params: { ok: true },
51
+ })).toEqual({
52
+ id: 'req-1',
53
+ action: 'ping',
54
+ params: { ok: true },
55
+ });
56
+ (0, vitest_1.expect)(() => (0, ipc_1.parse_daemon_response)({ id: 'r1', success: 'yes' }))
57
+ .toThrow('Daemon response success must be a boolean.');
58
+ (0, vitest_1.expect)((0, ipc_1.parse_daemon_response)({
59
+ id: ' res-1 ',
60
+ success: true,
61
+ data: { pong: true },
62
+ })).toEqual({
63
+ id: 'res-1',
64
+ success: true,
65
+ data: { pong: true },
66
+ error: undefined,
67
+ });
68
+ (0, vitest_1.expect)((0, ipc_1.get_daemon_base_dir)({
69
+ env: { XDG_RUNTIME_DIR: '/run/user/1000' },
70
+ home_dir: '/home/tester',
71
+ platform: 'linux',
72
+ })).toBe('/run/user/1000/brightdata-cli');
73
+ (0, vitest_1.expect)((0, ipc_1.get_daemon_base_dir)({
74
+ home_dir: '/Users/tester',
75
+ platform: 'darwin',
76
+ })).toBe('/Users/tester/Library/Application Support/brightdata-cli');
77
+ (0, vitest_1.expect)((0, ipc_1.get_daemon_transport)('shop', {
78
+ home_dir: 'C:\\Users\\tester',
79
+ platform: 'win32',
80
+ })).toMatchObject({
81
+ kind: 'tcp',
82
+ host: '127.0.0.1',
83
+ port: (0, ipc_1.get_port_for_session)('shop'),
84
+ });
85
+ });
86
+ (0, vitest_1.it)('sends commands to a real daemon over the unix socket transport', async () => {
87
+ if (process.platform == 'win32')
88
+ return;
89
+ daemon = new daemon_1.BrowserDaemon({
90
+ cdp_endpoint: 'wss://example.test',
91
+ daemon_dir: tmp_dir,
92
+ idle_timeout_ms: 0,
93
+ session_name: 'ipc-real',
94
+ });
95
+ await daemon.start();
96
+ const response = await (0, ipc_1.send_command)('ipc-real', {
97
+ id: 'req-1',
98
+ action: 'status',
99
+ }, {
100
+ daemon_dir: tmp_dir,
101
+ timeout_ms: 1_000,
102
+ });
103
+ (0, vitest_1.expect)(response).toMatchObject({
104
+ id: 'req-1',
105
+ success: true,
106
+ data: {
107
+ connected: false,
108
+ session_name: 'ipc-real',
109
+ },
110
+ });
111
+ });
112
+ (0, vitest_1.it)('connects and reads line-delimited responses over the tcp transport', async () => {
113
+ const session_name = 'tcp-demo';
114
+ const transport = (0, ipc_1.get_daemon_transport)(session_name, {
115
+ home_dir: 'C:\\Users\\tester',
116
+ platform: 'win32',
117
+ });
118
+ if (transport.kind != 'tcp')
119
+ return;
120
+ const server = net_1.default.createServer(socket => {
121
+ socket.setEncoding('utf8');
122
+ let buffer = '';
123
+ socket.on('data', chunk => {
124
+ buffer += chunk;
125
+ const newline_index = buffer.indexOf('\n');
126
+ if (newline_index < 0)
127
+ return;
128
+ const request = (0, ipc_1.parse_daemon_request)(JSON.parse(buffer.slice(0, newline_index)));
129
+ socket.write(JSON.stringify({
130
+ id: request.id,
131
+ success: true,
132
+ data: { action: request.action },
133
+ }) + '\n');
134
+ });
135
+ });
136
+ servers.push(server);
137
+ await listen_tcp(server, transport.port);
138
+ const response = await (0, ipc_1.send_command)(session_name, {
139
+ id: 'req-2',
140
+ action: 'ping',
141
+ }, {
142
+ home_dir: 'C:\\Users\\tester',
143
+ platform: 'win32',
144
+ timeout_ms: 1_000,
145
+ });
146
+ (0, vitest_1.expect)(response).toEqual({
147
+ id: 'req-2',
148
+ success: true,
149
+ data: { action: 'ping' },
150
+ error: undefined,
151
+ });
152
+ });
153
+ (0, vitest_1.it)('reads a single line from a connected socket', async () => {
154
+ if (process.platform == 'win32')
155
+ return;
156
+ const transport = (0, ipc_1.get_daemon_transport)('ipc-line', { daemon_dir: tmp_dir });
157
+ if (transport.kind != 'unix')
158
+ return;
159
+ const server = net_1.default.createServer(socket => {
160
+ socket.write('{"id":"req-3","success":true}');
161
+ setTimeout(() => socket.write('\nextra'), 5);
162
+ });
163
+ servers.push(server);
164
+ await listen_unix(server, transport.socket_path);
165
+ const socket = await (0, ipc_1.connect_socket)('ipc-line', {
166
+ daemon_dir: tmp_dir,
167
+ timeout_ms: 1_000,
168
+ });
169
+ const line = await (0, ipc_1.read_line)(socket);
170
+ socket.destroy();
171
+ (0, vitest_1.expect)(line).toBe('{"id":"req-3","success":true}');
172
+ });
173
+ (0, vitest_1.it)('rejects mismatched daemon response ids', async () => {
174
+ if (process.platform == 'win32')
175
+ return;
176
+ const transport = (0, ipc_1.get_daemon_transport)('ipc-bad-id', { daemon_dir: tmp_dir });
177
+ if (transport.kind != 'unix')
178
+ return;
179
+ const server = net_1.default.createServer(socket => {
180
+ socket.setEncoding('utf8');
181
+ socket.once('data', () => {
182
+ socket.write(JSON.stringify({
183
+ id: 'unexpected',
184
+ success: true,
185
+ }) + '\n');
186
+ });
187
+ });
188
+ servers.push(server);
189
+ await listen_unix(server, transport.socket_path);
190
+ await (0, vitest_1.expect)((0, ipc_1.send_command)('ipc-bad-id', {
191
+ id: 'req-4',
192
+ action: 'status',
193
+ }, {
194
+ daemon_dir: tmp_dir,
195
+ timeout_ms: 1_000,
196
+ })).rejects.toThrow('Browser daemon response id mismatch: expected "req-4", got "unexpected".');
197
+ });
198
+ });
199
+ //# sourceMappingURL=ipc.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ipc.test.js","sourceRoot":"","sources":["../../../src/__tests__/browser/ipc.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=lifecycle.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/browser/lifecycle.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,176 @@
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
+ const fs_1 = __importDefault(require("fs"));
7
+ const net_1 = __importDefault(require("net"));
8
+ const os_1 = __importDefault(require("os"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const events_1 = require("events");
11
+ const vitest_1 = require("vitest");
12
+ const daemon_1 = require("../../browser/daemon");
13
+ const lifecycle_1 = require("../../browser/lifecycle");
14
+ class Mock_child extends events_1.EventEmitter {
15
+ unref = vitest_1.vi.fn();
16
+ kill = vitest_1.vi.fn(() => true);
17
+ }
18
+ const mk_tmp_dir = () => fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'bdata-lifecycle-'));
19
+ const close_server = async (server) => {
20
+ await new Promise(resolve => server.close(() => resolve(undefined)));
21
+ };
22
+ (0, vitest_1.describe)('browser/lifecycle', () => {
23
+ let tmp_dir = '';
24
+ let servers = [];
25
+ (0, vitest_1.beforeEach)(() => {
26
+ tmp_dir = mk_tmp_dir();
27
+ servers = [];
28
+ });
29
+ (0, vitest_1.afterEach)(async () => {
30
+ vitest_1.vi.clearAllMocks();
31
+ await Promise.all(servers.map(close_server));
32
+ fs_1.default.rmSync(tmp_dir, { recursive: true, force: true });
33
+ });
34
+ (0, vitest_1.it)('removes stale socket and pid files', () => {
35
+ const pid_path = path_1.default.join(tmp_dir, 'demo.pid');
36
+ const socket_path = path_1.default.join(tmp_dir, 'demo.sock');
37
+ fs_1.default.writeFileSync(pid_path, '1');
38
+ fs_1.default.writeFileSync(socket_path, '');
39
+ (0, lifecycle_1.cleanup_stale_files)('demo', { daemon_dir: tmp_dir });
40
+ (0, vitest_1.expect)(fs_1.default.existsSync(pid_path)).toBe(false);
41
+ (0, vitest_1.expect)(fs_1.default.existsSync(socket_path)).toBe(false);
42
+ });
43
+ (0, vitest_1.it)('checks daemon liveness via a connectable unix socket', async () => {
44
+ if (process.platform == 'win32')
45
+ return;
46
+ const socket_path = path_1.default.join(tmp_dir, 'alive.sock');
47
+ const server = net_1.default.createServer(socket => socket.end());
48
+ servers.push(server);
49
+ await new Promise((resolve, reject) => {
50
+ server.once('error', reject);
51
+ server.listen(socket_path, () => resolve());
52
+ });
53
+ await (0, vitest_1.expect)((0, lifecycle_1.is_daemon_alive)('alive', {
54
+ daemon_dir: tmp_dir,
55
+ timeout_ms: 250,
56
+ })).resolves.toBe(true);
57
+ await (0, vitest_1.expect)((0, lifecycle_1.is_daemon_alive)('missing', {
58
+ daemon_dir: tmp_dir,
59
+ timeout_ms: 250,
60
+ })).resolves.toBe(false);
61
+ });
62
+ (0, vitest_1.it)('waits until the daemon becomes connectable', async () => {
63
+ let attempts = 0;
64
+ let now = 0;
65
+ await (0, lifecycle_1.wait_for_daemon)('demo', 250, { daemon_dir: tmp_dir }, {
66
+ current_time: () => now,
67
+ is_daemon_alive: async () => {
68
+ attempts++;
69
+ return attempts >= 3;
70
+ },
71
+ pause: async (ms) => {
72
+ now += ms;
73
+ },
74
+ });
75
+ (0, vitest_1.expect)(attempts).toBe(3);
76
+ (0, vitest_1.expect)(now).toBe(200);
77
+ });
78
+ (0, vitest_1.it)('times out when the daemon never becomes connectable', async () => {
79
+ let now = 0;
80
+ await (0, vitest_1.expect)((0, lifecycle_1.wait_for_daemon)('demo', 150, { daemon_dir: tmp_dir }, {
81
+ current_time: () => now,
82
+ is_daemon_alive: async () => false,
83
+ pause: async (ms) => {
84
+ now += ms;
85
+ },
86
+ })).rejects.toThrow(`Timed out waiting for browser daemon session "demo" to start at ${path_1.default.join(tmp_dir, 'demo.sock')}.`);
87
+ });
88
+ (0, vitest_1.it)('spawns a detached daemon with the expected environment and waits for readiness', async () => {
89
+ const child = new Mock_child();
90
+ const spawn_process = vitest_1.vi.fn(() => child);
91
+ const wait_for_ready = vitest_1.vi.fn(async () => undefined);
92
+ const stale_pid_path = path_1.default.join(tmp_dir, 'demo.pid');
93
+ const stale_socket_path = path_1.default.join(tmp_dir, 'demo.sock');
94
+ fs_1.default.writeFileSync(stale_pid_path, '999');
95
+ fs_1.default.writeFileSync(stale_socket_path, '');
96
+ await (0, lifecycle_1.ensure_daemon)('demo', {
97
+ cdp_endpoint: 'wss://example.test',
98
+ daemon_dir: tmp_dir,
99
+ exec_path: '/usr/bin/node',
100
+ idle_timeout_ms: 4_321,
101
+ startup_timeout_ms: 1_234,
102
+ }, {
103
+ is_daemon_alive: async () => false,
104
+ resolve_daemon_script: () => '/tmp/daemon-entry.js',
105
+ spawn_process: spawn_process,
106
+ wait_for_daemon: wait_for_ready,
107
+ });
108
+ (0, vitest_1.expect)(fs_1.default.existsSync(stale_pid_path)).toBe(false);
109
+ (0, vitest_1.expect)(fs_1.default.existsSync(stale_socket_path)).toBe(false);
110
+ (0, vitest_1.expect)(spawn_process).toHaveBeenCalledWith('/usr/bin/node', ['/tmp/daemon-entry.js', '--daemon'], vitest_1.expect.objectContaining({
111
+ detached: true,
112
+ stdio: 'ignore',
113
+ windowsHide: true,
114
+ env: vitest_1.expect.objectContaining({
115
+ BRIGHTDATA_CDP_ENDPOINT: 'wss://example.test',
116
+ BRIGHTDATA_DAEMON: '1',
117
+ BRIGHTDATA_DAEMON_DIR: tmp_dir,
118
+ BRIGHTDATA_IDLE_TIMEOUT_MS: '4321',
119
+ BRIGHTDATA_SESSION: 'demo',
120
+ }),
121
+ }));
122
+ (0, vitest_1.expect)(child.unref).toHaveBeenCalledTimes(1);
123
+ (0, vitest_1.expect)(wait_for_ready).toHaveBeenCalledWith('demo', 1_234, vitest_1.expect.objectContaining({ transport: vitest_1.expect.any(Object) }), vitest_1.expect.any(Object));
124
+ });
125
+ (0, vitest_1.it)('skips spawning when the daemon is already alive', async () => {
126
+ const spawn_process = vitest_1.vi.fn();
127
+ await (0, lifecycle_1.ensure_daemon)('demo', {
128
+ cdp_endpoint: 'wss://example.test',
129
+ daemon_dir: tmp_dir,
130
+ }, {
131
+ is_daemon_alive: async () => true,
132
+ spawn_process: spawn_process,
133
+ });
134
+ (0, vitest_1.expect)(spawn_process).not.toHaveBeenCalled();
135
+ });
136
+ (0, vitest_1.it)('cleans up and kills the child when startup fails', async () => {
137
+ const child = new Mock_child();
138
+ const spawn_process = vitest_1.vi.fn(() => child);
139
+ const stale_pid_path = path_1.default.join(tmp_dir, 'demo.pid');
140
+ fs_1.default.writeFileSync(stale_pid_path, '999');
141
+ await (0, vitest_1.expect)((0, lifecycle_1.ensure_daemon)('demo', {
142
+ cdp_endpoint: 'wss://example.test',
143
+ daemon_dir: tmp_dir,
144
+ exec_path: '/usr/bin/node',
145
+ }, {
146
+ is_daemon_alive: async () => false,
147
+ resolve_daemon_script: () => '/tmp/daemon-entry.js',
148
+ spawn_process: spawn_process,
149
+ wait_for_daemon: async () => {
150
+ throw new Error('startup failed');
151
+ },
152
+ })).rejects.toThrow('startup failed');
153
+ (0, vitest_1.expect)(child.kill).toHaveBeenCalledTimes(1);
154
+ (0, vitest_1.expect)(fs_1.default.existsSync(stale_pid_path)).toBe(false);
155
+ });
156
+ (0, vitest_1.it)('uses the daemon idle timeout default when none is provided', async () => {
157
+ const child = new Mock_child();
158
+ const spawn_process = vitest_1.vi.fn(() => child);
159
+ await (0, lifecycle_1.ensure_daemon)('demo', {
160
+ cdp_endpoint: 'wss://example.test',
161
+ daemon_dir: tmp_dir,
162
+ exec_path: '/usr/bin/node',
163
+ }, {
164
+ is_daemon_alive: async () => false,
165
+ resolve_daemon_script: () => '/tmp/daemon-entry.js',
166
+ spawn_process: spawn_process,
167
+ wait_for_daemon: async () => undefined,
168
+ });
169
+ (0, vitest_1.expect)(spawn_process).toHaveBeenCalledWith('/usr/bin/node', ['/tmp/daemon-entry.js', '--daemon'], vitest_1.expect.objectContaining({
170
+ env: vitest_1.expect.objectContaining({
171
+ BRIGHTDATA_IDLE_TIMEOUT_MS: String(daemon_1.DEFAULT_DAEMON_IDLE_TIMEOUT_MS),
172
+ }),
173
+ }));
174
+ });
175
+ });
176
+ //# sourceMappingURL=lifecycle.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.test.js","sourceRoot":"","sources":["../../../src/__tests__/browser/lifecycle.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=snapshot.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/browser/snapshot.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,202 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const snapshot_1 = require("../../browser/snapshot");
5
+ class Mock_snapshot_page {
6
+ args = [];
7
+ payload_factory;
8
+ title_value;
9
+ url_value;
10
+ constructor(payload_factory, title_value = 'Example Domain', url_value = 'https://example.com') {
11
+ this.payload_factory = payload_factory;
12
+ this.title_value = title_value;
13
+ this.url_value = url_value;
14
+ }
15
+ async evaluate(_fn, arg) {
16
+ this.args.push(arg);
17
+ return this.payload_factory(arg);
18
+ }
19
+ async title() {
20
+ return this.title_value;
21
+ }
22
+ url() {
23
+ return this.url_value;
24
+ }
25
+ }
26
+ const create_snapshot_payload = () => ({
27
+ nodes: [
28
+ {
29
+ children: [],
30
+ level: 1,
31
+ name: 'Welcome',
32
+ role: 'heading',
33
+ },
34
+ {
35
+ children: [
36
+ {
37
+ children: [],
38
+ interactive: true,
39
+ name: 'Pricing',
40
+ ref: 'e1',
41
+ role: 'link',
42
+ },
43
+ ],
44
+ role: 'navigation',
45
+ },
46
+ {
47
+ children: [
48
+ {
49
+ children: [],
50
+ interactive: true,
51
+ name: 'Buy',
52
+ ref: 'e2',
53
+ role: 'button',
54
+ },
55
+ {
56
+ children: [
57
+ {
58
+ children: [],
59
+ interactive: true,
60
+ name: 'Nested Link',
61
+ ref: 'e3',
62
+ role: 'link',
63
+ },
64
+ ],
65
+ role: 'group',
66
+ },
67
+ ],
68
+ role: 'main',
69
+ },
70
+ {
71
+ children: [],
72
+ interactive: true,
73
+ placeholder: 'Search...',
74
+ ref: 'e4',
75
+ role: 'textbox',
76
+ },
77
+ ],
78
+ refs: [
79
+ { ref: 'e1', selector: `[${snapshot_1.DOM_REF_ATTRIBUTE}="e1"]` },
80
+ { ref: 'e2', selector: `[${snapshot_1.DOM_REF_ATTRIBUTE}="e2"]` },
81
+ { ref: 'e3', selector: `[${snapshot_1.DOM_REF_ATTRIBUTE}="e3"]` },
82
+ { ref: 'e4', selector: `[${snapshot_1.DOM_REF_ATTRIBUTE}="e4"]` },
83
+ ],
84
+ });
85
+ (0, vitest_1.describe)('browser/snapshot', () => {
86
+ (0, vitest_1.it)('formats snapshot trees with refs and attributes', () => {
87
+ const nodes = [
88
+ {
89
+ children: [
90
+ {
91
+ children: [],
92
+ name: 'Pricing',
93
+ ref: 'e1',
94
+ role: 'link',
95
+ },
96
+ ],
97
+ role: 'main',
98
+ },
99
+ {
100
+ children: [],
101
+ level: 1,
102
+ name: 'Welcome',
103
+ role: 'heading',
104
+ },
105
+ {
106
+ children: [],
107
+ placeholder: 'Search...',
108
+ ref: 'e2',
109
+ role: 'textbox',
110
+ },
111
+ ];
112
+ (0, vitest_1.expect)((0, snapshot_1.format_snapshot_text)({
113
+ nodes,
114
+ title: 'Example Domain',
115
+ url: 'https://example.com',
116
+ })).toBe([
117
+ 'Page: Example Domain',
118
+ 'URL: https://example.com',
119
+ '',
120
+ '- main',
121
+ ' - link "Pricing" [ref=e1]',
122
+ '- heading "Welcome" [level=1]',
123
+ '- textbox [ref=e2, placeholder="Search..."]',
124
+ ].join('\n'));
125
+ });
126
+ (0, vitest_1.it)('applies compact and depth filters and prunes hidden refs', async () => {
127
+ const page = new Mock_snapshot_page(() => create_snapshot_payload());
128
+ const snapshot = await (0, snapshot_1.capture_snapshot)(page, {
129
+ compact: true,
130
+ depth: 1,
131
+ });
132
+ (0, vitest_1.expect)(page.args).toEqual([{ attr_name: snapshot_1.DOM_REF_ATTRIBUTE, selector: undefined }]);
133
+ (0, vitest_1.expect)(snapshot.refs).toEqual([
134
+ { ref: 'e1', selector: `[${snapshot_1.DOM_REF_ATTRIBUTE}="e1"]` },
135
+ { ref: 'e2', selector: `[${snapshot_1.DOM_REF_ATTRIBUTE}="e2"]` },
136
+ { ref: 'e4', selector: `[${snapshot_1.DOM_REF_ATTRIBUTE}="e4"]` },
137
+ ]);
138
+ (0, vitest_1.expect)(snapshot.depth).toBe(1);
139
+ (0, vitest_1.expect)(snapshot.snapshot).toBe([
140
+ 'Page: Example Domain',
141
+ 'URL: https://example.com',
142
+ '',
143
+ '- navigation',
144
+ ' - link "Pricing" [ref=e1]',
145
+ '- main',
146
+ ' - button "Buy" [ref=e2]',
147
+ '- textbox [ref=e4, placeholder="Search..."]',
148
+ ].join('\n'));
149
+ });
150
+ (0, vitest_1.it)('renders interactive snapshots as a flat list and forwards selector scope', async () => {
151
+ const page = new Mock_snapshot_page(arg => {
152
+ (0, vitest_1.expect)(arg.selector).toBe('#checkout');
153
+ return create_snapshot_payload();
154
+ });
155
+ const snapshot = await (0, snapshot_1.capture_snapshot)(page, {
156
+ interactive: true,
157
+ selector: '#checkout',
158
+ });
159
+ (0, vitest_1.expect)(page.args).toEqual([
160
+ { attr_name: snapshot_1.DOM_REF_ATTRIBUTE, selector: '#checkout' },
161
+ ]);
162
+ (0, vitest_1.expect)(snapshot.interactive).toBe(true);
163
+ (0, vitest_1.expect)(snapshot.selector).toBe('#checkout');
164
+ (0, vitest_1.expect)(snapshot.refs).toEqual([
165
+ { ref: 'e1', selector: `[${snapshot_1.DOM_REF_ATTRIBUTE}="e1"]` },
166
+ { ref: 'e2', selector: `[${snapshot_1.DOM_REF_ATTRIBUTE}="e2"]` },
167
+ { ref: 'e3', selector: `[${snapshot_1.DOM_REF_ATTRIBUTE}="e3"]` },
168
+ { ref: 'e4', selector: `[${snapshot_1.DOM_REF_ATTRIBUTE}="e4"]` },
169
+ ]);
170
+ (0, vitest_1.expect)(snapshot.snapshot).toBe([
171
+ 'Page: Example Domain',
172
+ 'URL: https://example.com',
173
+ '',
174
+ '- link "Pricing" [ref=e1]',
175
+ '- button "Buy" [ref=e2]',
176
+ '- link "Nested Link" [ref=e3]',
177
+ '- textbox [ref=e4, placeholder="Search..."]',
178
+ ].join('\n'));
179
+ });
180
+ (0, vitest_1.it)('renders an interactive empty-state when no visible interactive nodes are captured', async () => {
181
+ const page = new Mock_snapshot_page(() => ({
182
+ nodes: [
183
+ {
184
+ children: [],
185
+ name: 'Welcome',
186
+ role: 'heading',
187
+ },
188
+ ],
189
+ refs: [],
190
+ }), 'Blank', 'about:blank');
191
+ const snapshot = await (0, snapshot_1.capture_snapshot)(page, {
192
+ interactive: true,
193
+ });
194
+ (0, vitest_1.expect)(snapshot.snapshot).toBe([
195
+ 'Page: Blank',
196
+ 'URL: about:blank',
197
+ '',
198
+ '(no interactive elements)',
199
+ ].join('\n'));
200
+ });
201
+ });
202
+ //# sourceMappingURL=snapshot.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot.test.js","sourceRoot":"","sources":["../../../src/__tests__/browser/snapshot.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=add-mcp.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-mcp.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/commands/add-mcp.test.ts"],"names":[],"mappings":""}