real-browser-mcp-server 1.4.5 → 1.5.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 (69) hide show
  1. package/README.md +6 -10
  2. package/dist/lib/cjs/index.js +2 -381
  3. package/dist/lib/cjs/index.js.map +1 -1
  4. package/dist/src/index.d.ts.map +1 -1
  5. package/dist/src/index.js +1 -20
  6. package/dist/src/index.js.map +1 -1
  7. package/dist/src/mcp/handlers/browser.d.ts.map +1 -1
  8. package/dist/src/mcp/handlers/browser.js +3 -2
  9. package/dist/src/mcp/handlers/browser.js.map +1 -1
  10. package/dist/src/mcp/handlers/dom.d.ts +7 -80
  11. package/dist/src/mcp/handlers/dom.d.ts.map +1 -1
  12. package/dist/src/mcp/handlers/dom.js +46 -190
  13. package/dist/src/mcp/handlers/dom.js.map +1 -1
  14. package/dist/src/mcp/handlers/extract.d.ts +47 -22
  15. package/dist/src/mcp/handlers/extract.d.ts.map +1 -1
  16. package/dist/src/mcp/handlers/extract.js +66 -269
  17. package/dist/src/mcp/handlers/extract.js.map +1 -1
  18. package/dist/src/mcp/handlers/helpers.d.ts +18 -3
  19. package/dist/src/mcp/handlers/helpers.d.ts.map +1 -1
  20. package/dist/src/mcp/handlers/helpers.js +56 -176
  21. package/dist/src/mcp/handlers/helpers.js.map +1 -1
  22. package/dist/src/mcp/handlers/index.d.ts.map +1 -1
  23. package/dist/src/mcp/handlers/index.js +1 -3
  24. package/dist/src/mcp/handlers/index.js.map +1 -1
  25. package/dist/src/mcp/handlers/media-handlers.d.ts +5 -6
  26. package/dist/src/mcp/handlers/media-handlers.d.ts.map +1 -1
  27. package/dist/src/mcp/handlers/media-handlers.js +1 -69
  28. package/dist/src/mcp/handlers/media-handlers.js.map +1 -1
  29. package/dist/src/mcp/handlers/network.d.ts +95 -12
  30. package/dist/src/mcp/handlers/network.d.ts.map +1 -1
  31. package/dist/src/mcp/handlers/network.js +178 -49
  32. package/dist/src/mcp/handlers/network.js.map +1 -1
  33. package/dist/src/mcp/handlers/utility-handlers.d.ts +36 -102
  34. package/dist/src/mcp/handlers/utility-handlers.d.ts.map +1 -1
  35. package/dist/src/mcp/handlers/utility-handlers.js +93 -177
  36. package/dist/src/mcp/handlers/utility-handlers.js.map +1 -1
  37. package/dist/src/mcp/handlers/vision.d.ts +143 -41
  38. package/dist/src/mcp/handlers/vision.d.ts.map +1 -1
  39. package/dist/src/mcp/handlers/vision.js +155 -88
  40. package/dist/src/mcp/handlers/vision.js.map +1 -1
  41. package/dist/src/mcp/index.d.ts.map +1 -1
  42. package/dist/src/mcp/index.js +2 -13
  43. package/dist/src/mcp/index.js.map +1 -1
  44. package/dist/src/mcp/server.d.ts.map +1 -1
  45. package/dist/src/mcp/server.js +1 -5
  46. package/dist/src/mcp/server.js.map +1 -1
  47. package/dist/src/shared/colors.d.ts +12 -0
  48. package/dist/src/shared/colors.d.ts.map +1 -0
  49. package/dist/src/shared/colors.js +15 -0
  50. package/dist/src/shared/colors.js.map +1 -0
  51. package/dist/src/shared/lib-core.d.ts +17 -0
  52. package/dist/src/shared/lib-core.d.ts.map +1 -0
  53. package/dist/src/shared/lib-core.js +421 -0
  54. package/dist/src/shared/lib-core.js.map +1 -0
  55. package/dist/src/shared/tools.d.ts.map +1 -1
  56. package/dist/src/shared/tools.js +90 -132
  57. package/dist/src/shared/tools.js.map +1 -1
  58. package/dist/test/cjs/test.js +61 -104
  59. package/dist/test/cjs/test.js.map +1 -1
  60. package/lib/esm/index.mjs +2 -396
  61. package/package.json +1 -1
  62. package/dist/src/mcp/handlers/form-handlers.d.ts +0 -9
  63. package/dist/src/mcp/handlers/form-handlers.d.ts.map +0 -1
  64. package/dist/src/mcp/handlers/form-handlers.js +0 -56
  65. package/dist/src/mcp/handlers/form-handlers.js.map +0 -1
  66. package/dist/src/mcp/tools.d.ts +0 -8
  67. package/dist/src/mcp/tools.d.ts.map +0 -1
  68. package/dist/src/mcp/tools.js +0 -19
  69. package/dist/src/mcp/tools.js.map +0 -1
@@ -0,0 +1,421 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.loadEnvFile = loadEnvFile;
37
+ exports.getDefaultHeadless = getDefaultHeadless;
38
+ exports.setupRealPage = setupRealPage;
39
+ exports.getBraveExecutablePath = getBraveExecutablePath;
40
+ exports.applyUserAgentOverride = applyUserAgentOverride;
41
+ exports.createConnect = createConnect;
42
+ // @ts-nocheck
43
+ const patchright_1 = require("patchright");
44
+ const ghost_cursor_patchright_1 = require("ghost-cursor-patchright");
45
+ const adblocker_playwright_1 = require("@ghostery/adblocker-playwright");
46
+ const fs = __importStar(require("fs"));
47
+ const path = __importStar(require("path"));
48
+ const state_1 = require("../mcp/handlers/state");
49
+ let adBlockerInstance = null;
50
+ let adBlockerPromise = null;
51
+ function getAdBlocker() {
52
+ if (!adBlockerPromise) {
53
+ const cachePath = path.join(__dirname, 'adblocker.bin');
54
+ adBlockerPromise = adblocker_playwright_1.PlaywrightBlocker.fromPrebuiltAdsAndTracking(fetch, {
55
+ path: cachePath,
56
+ read: fs.promises.readFile,
57
+ write: fs.promises.writeFile,
58
+ }).then(blocker => {
59
+ adBlockerInstance = blocker;
60
+ return blocker;
61
+ }).catch(err => {
62
+ console.error('[adblocker] Failed to initialize adblocker:', err.message);
63
+ return null;
64
+ });
65
+ }
66
+ return adBlockerPromise;
67
+ }
68
+ function loadEnvFile() {
69
+ const envPaths = [
70
+ path.join(process.cwd(), '.env'),
71
+ ];
72
+ let currentDir = process.cwd();
73
+ for (let i = 0; i < 5; i++) {
74
+ const envPath = path.join(currentDir, '.env');
75
+ if (fs.existsSync(envPath) && !envPaths.includes(envPath)) {
76
+ envPaths.push(envPath);
77
+ }
78
+ const parentDir = path.dirname(currentDir);
79
+ if (parentDir === currentDir)
80
+ break;
81
+ currentDir = parentDir;
82
+ }
83
+ for (const envPath of envPaths) {
84
+ try {
85
+ if (fs.existsSync(envPath)) {
86
+ const envContent = fs.readFileSync(envPath, 'utf-8');
87
+ envContent.split('\n').forEach(line => {
88
+ const trimmed = line.trim();
89
+ if (trimmed && !trimmed.startsWith('#')) {
90
+ const [key, ...valueParts] = trimmed.split('=');
91
+ const value = valueParts.join('=').replace(/^["']|["']$/g, '');
92
+ if (key && !process.env[key]) {
93
+ process.env[key] = value;
94
+ }
95
+ }
96
+ });
97
+ break;
98
+ }
99
+ }
100
+ catch (error) {
101
+ // Silently ignore .env loading errors
102
+ }
103
+ }
104
+ }
105
+ function getDefaultHeadless() {
106
+ return (0, state_1.getHeadlessFromEnv)();
107
+ }
108
+ function setupRealPage(browser, page) {
109
+ if (page._setupApplied)
110
+ return page;
111
+ page._setupApplied = true;
112
+ // Enable ad blocker
113
+ if (adBlockerInstance) {
114
+ adBlockerInstance.enableBlockingInPage(page).catch(() => { });
115
+ }
116
+ else {
117
+ getAdBlocker().then(blocker => {
118
+ if (blocker) {
119
+ blocker.enableBlockingInPage(page).catch(() => { });
120
+ }
121
+ });
122
+ }
123
+ // Human-like smooth scrolling with 60FPS Cubic Ease-Out physics
124
+ page.realScroll = async (deltaY, duration = 600) => {
125
+ try {
126
+ const stepDelay = 15; // ~60 FPS
127
+ const steps = Math.max(10, Math.floor(duration / stepDelay));
128
+ const easeOutCubic = (t) => 1 - Math.pow(1 - t, 3);
129
+ let currentScroll = 0;
130
+ for (let i = 1; i <= steps; i++) {
131
+ const t = i / steps;
132
+ const targetScroll = deltaY * easeOutCubic(t);
133
+ const diff = targetScroll - currentScroll;
134
+ await page.mouse.wheel(0, diff);
135
+ currentScroll = targetScroll;
136
+ await new Promise(r => setTimeout(r, stepDelay));
137
+ }
138
+ }
139
+ catch (e) {
140
+ // Fallback to native window scroll in case of wheel errors
141
+ try {
142
+ await page.evaluate((y) => window.scrollBy({ top: y, behavior: 'smooth' }), deltaY);
143
+ }
144
+ catch (_) { }
145
+ }
146
+ };
147
+ // Ghost Cursor integration - Bézier curve human-like mouse movement
148
+ try {
149
+ const cursor = (0, ghost_cursor_patchright_1.createCursor)(page);
150
+ page.realCursor = {
151
+ move: async (selector, options = {}) => {
152
+ try {
153
+ await cursor.actions.move(selector, options);
154
+ }
155
+ catch (e) {
156
+ // Fallback to native hover if ghost-cursor fails
157
+ try {
158
+ await page.hover(selector);
159
+ }
160
+ catch (_) { }
161
+ }
162
+ }
163
+ };
164
+ page.realClick = async (selector, options = {}) => {
165
+ try {
166
+ await cursor.actions.click({ target: selector, ...options });
167
+ }
168
+ catch (e) {
169
+ // Fallback to native click if ghost-cursor fails
170
+ await page.click(selector, options);
171
+ }
172
+ };
173
+ }
174
+ catch (e) {
175
+ // Fallback if ghost-cursor-patchright fails to initialize
176
+ if (!page.realClick) {
177
+ page.realClick = async (selector, options) => {
178
+ await page.click(selector, options);
179
+ };
180
+ }
181
+ if (!page.realCursor) {
182
+ page.realCursor = {
183
+ move: async (selector) => {
184
+ try {
185
+ await page.hover(selector);
186
+ }
187
+ catch (_) { }
188
+ }
189
+ };
190
+ }
191
+ }
192
+ return page;
193
+ }
194
+ function getBraveExecutablePath() {
195
+ if (process.env.BRAVE_PATH && fs.existsSync(process.env.BRAVE_PATH)) {
196
+ return process.env.BRAVE_PATH;
197
+ }
198
+ const platform = process.platform;
199
+ const { execSync } = require('child_process');
200
+ // Try automatic scanning via CLI / registry query
201
+ if (platform === 'win32') {
202
+ const regQueries = [
203
+ 'reg query "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\brave.exe" /ve',
204
+ 'reg query "HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\brave.exe" /ve',
205
+ 'reg query "HKEY_LOCAL_MACHINE\\SOFTWARE\\Clients\\StartMenuInternet\\Brave-Browser\\shell\\open\\command" /ve'
206
+ ];
207
+ for (const cmd of regQueries) {
208
+ try {
209
+ const output = execSync(cmd, { stdio: ['ignore', 'pipe', 'ignore'] }).toString();
210
+ const match = output.match(/REG_SZ\s+(.*)/);
211
+ if (match && match[1]) {
212
+ let p = match[1].trim().replace(/^"|"$/g, '');
213
+ if (!p.toLowerCase().endsWith('.exe')) {
214
+ const exeIndex = p.toLowerCase().indexOf('.exe');
215
+ if (exeIndex !== -1) {
216
+ p = p.substring(0, exeIndex + 4).replace(/^"|"$/g, '');
217
+ }
218
+ }
219
+ if (fs.existsSync(p))
220
+ return p;
221
+ }
222
+ }
223
+ catch (e) { }
224
+ }
225
+ try {
226
+ const output = execSync('where brave.exe', { stdio: ['ignore', 'pipe', 'ignore'] }).toString().trim().split('\r\n')[0];
227
+ if (output && fs.existsSync(output))
228
+ return output;
229
+ }
230
+ catch (e) { }
231
+ }
232
+ else if (platform === 'darwin') {
233
+ try {
234
+ const output = execSync('mdfind "kMDItemCFBundleIdentifier == \'com.brave.Browser\'"', { stdio: ['ignore', 'pipe', 'ignore'] }).toString().trim().split('\n')[0];
235
+ if (output) {
236
+ const p = path.join(output, 'Contents', 'MacOS', 'Brave Browser');
237
+ if (fs.existsSync(p))
238
+ return p;
239
+ }
240
+ }
241
+ catch (e) { }
242
+ }
243
+ else {
244
+ try {
245
+ const output = execSync('which brave-browser || which brave', { stdio: ['ignore', 'pipe', 'ignore'] }).toString().trim();
246
+ if (output && fs.existsSync(output))
247
+ return output;
248
+ }
249
+ catch (e) { }
250
+ }
251
+ // Fallback to hardcoded common paths
252
+ let paths = [];
253
+ if (platform === 'win32') {
254
+ paths = [
255
+ path.join(process.env.PROGRAMFILES || 'C:\\Program Files', 'BraveSoftware', 'Brave-Browser', 'Application', 'brave.exe'),
256
+ path.join(process.env['PROGRAMFILES(X86)'] || 'C:\\Program Files (x86)', 'BraveSoftware', 'Brave-Browser', 'Application', 'brave.exe'),
257
+ path.join(process.env.LOCALAPPDATA || '', 'BraveSoftware', 'Brave-Browser', 'Application', 'brave.exe')
258
+ ].filter(p => p);
259
+ }
260
+ else if (platform === 'darwin') {
261
+ paths = [
262
+ '/Applications/Brave Browser.app/Contents/MacOS/Brave Browser'
263
+ ];
264
+ }
265
+ else {
266
+ paths = [
267
+ '/usr/bin/brave-browser',
268
+ '/usr/bin/brave',
269
+ '/usr/bin/brave-browser-stable',
270
+ '/usr/bin/brave-browser-beta',
271
+ '/usr/bin/brave-browser-nightly',
272
+ '/usr/local/bin/brave-browser',
273
+ '/usr/local/bin/brave'
274
+ ];
275
+ }
276
+ for (const p of paths) {
277
+ if (p && fs.existsSync(p)) {
278
+ return p;
279
+ }
280
+ }
281
+ return null;
282
+ }
283
+ async function applyUserAgentOverride(page, userAgent, userAgentMetadata) {
284
+ try {
285
+ const client = await page.context().newCDPSession(page);
286
+ await client.send('Emulation.setUserAgentOverride', {
287
+ userAgent: userAgent,
288
+ userAgentMetadata: userAgentMetadata
289
+ });
290
+ }
291
+ catch (e) {
292
+ // Ignore errors
293
+ }
294
+ }
295
+ function createConnect(pageController) {
296
+ return async function connect({ args = [], headless = getDefaultHeadless(), proxy = {}, contextOptions = {}, turnstile = false, executablePath = undefined, } = {}) {
297
+ let playwrightProxy = undefined;
298
+ if (proxy && proxy.host && proxy.port) {
299
+ playwrightProxy = {
300
+ server: `${proxy.host}:${proxy.port}`
301
+ };
302
+ if (proxy.username && proxy.password) {
303
+ playwrightProxy.username = proxy.username;
304
+ playwrightProxy.password = proxy.password;
305
+ }
306
+ }
307
+ // 1. Launch a temporary browser to retrieve the native user agent and properties
308
+ const tempBrowser = await patchright_1.chromium.launch({
309
+ headless: true,
310
+ args: ['--no-sandbox', '--disable-setuid-sandbox'],
311
+ ...(executablePath ? { executablePath } : {}),
312
+ });
313
+ const tempContext = await tempBrowser.newContext();
314
+ const tempPage = await tempContext.newPage();
315
+ let nativeUa = '';
316
+ let isBrave = false;
317
+ try {
318
+ nativeUa = await tempPage.evaluate(() => navigator.userAgent);
319
+ isBrave = await tempPage.evaluate(() => typeof navigator.brave !== 'undefined');
320
+ }
321
+ catch (e) {
322
+ nativeUa = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/148.0.0.0 Safari/537.36';
323
+ isBrave = executablePath && executablePath.toLowerCase().includes('brave');
324
+ }
325
+ await tempBrowser.close();
326
+ let modifiedUa = nativeUa.replace(/HeadlessChrome\//g, 'Chrome/');
327
+ const chromeVersionMatch = modifiedUa.match(/Chrome\/([\d.]+)/);
328
+ const chromeVersion = chromeVersionMatch ? chromeVersionMatch[1] : '148.0.0.0';
329
+ const majorVersion = chromeVersion.split('.')[0];
330
+ const brands = [
331
+ { brand: 'Chromium', version: majorVersion },
332
+ { brand: 'Not/A)Brand', version: '99' }
333
+ ];
334
+ if (isBrave) {
335
+ brands.unshift({ brand: 'Brave', version: majorVersion });
336
+ }
337
+ else {
338
+ brands.unshift({ brand: 'Google Chrome', version: majorVersion });
339
+ }
340
+ let platformName = 'Windows';
341
+ if (nativeUa.includes('Macintosh') || nativeUa.includes('Mac OS X')) {
342
+ platformName = 'macOS';
343
+ }
344
+ else if (nativeUa.includes('Linux')) {
345
+ platformName = 'Linux';
346
+ }
347
+ const fullVersionList = [
348
+ { brand: 'Chromium', version: chromeVersion },
349
+ { brand: 'Not/A)Brand', version: '99.0.0.0' }
350
+ ];
351
+ if (isBrave) {
352
+ fullVersionList.unshift({ brand: 'Brave', version: chromeVersion });
353
+ }
354
+ else {
355
+ fullVersionList.unshift({ brand: 'Google Chrome', version: chromeVersion });
356
+ }
357
+ const userAgentMetadata = {
358
+ brands: brands,
359
+ fullVersionList: fullVersionList,
360
+ fullVersion: chromeVersion,
361
+ mobile: false,
362
+ platform: platformName,
363
+ platformVersion: platformName === 'macOS' ? '14.0.0' : platformName === 'Linux' ? '6.0.0' : '10.0.0',
364
+ architecture: 'x86',
365
+ model: '',
366
+ bitness: '64',
367
+ wow64: false
368
+ };
369
+ const chromiumArgs = [
370
+ `--user-agent=${modifiedUa}`,
371
+ '--disable-blink-features=AutomationControlled',
372
+ '--no-sandbox',
373
+ '--disable-setuid-sandbox',
374
+ ...args
375
+ ];
376
+ // If headless is true, we run with headless: false but pass '--headless=new' to args.
377
+ let launchHeadless = headless;
378
+ if (headless === true) {
379
+ launchHeadless = false;
380
+ if (!chromiumArgs.includes('--headless=new')) {
381
+ chromiumArgs.push('--headless=new');
382
+ }
383
+ }
384
+ const browser = await patchright_1.chromium.launch({
385
+ headless: launchHeadless,
386
+ args: chromiumArgs,
387
+ proxy: playwrightProxy,
388
+ ...(executablePath ? { executablePath } : {}),
389
+ });
390
+ // Ensure ad blocker is ready
391
+ await getAdBlocker();
392
+ const context = await browser.newContext({
393
+ viewport: null,
394
+ ...contextOptions,
395
+ });
396
+ let page = await context.newPage();
397
+ await applyUserAgentOverride(page, modifiedUa, userAgentMetadata);
398
+ setupRealPage(browser, page);
399
+ page = await pageController({
400
+ browser,
401
+ page,
402
+ proxy,
403
+ turnstile,
404
+ });
405
+ context.on('page', async (newPage) => {
406
+ await applyUserAgentOverride(newPage, modifiedUa, userAgentMetadata);
407
+ setupRealPage(browser, newPage);
408
+ await pageController({
409
+ browser,
410
+ page: newPage,
411
+ proxy,
412
+ turnstile,
413
+ });
414
+ });
415
+ return {
416
+ browser,
417
+ page,
418
+ };
419
+ };
420
+ }
421
+ //# sourceMappingURL=lib-core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lib-core.js","sourceRoot":"","sources":["../../../src/shared/lib-core.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/shared/tools.ts"],"names":[],"mappings":"AAynBA,OAAO,EAAE,CAAA"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/shared/tools.ts"],"names":[],"mappings":"AAilBA,OAAO,EAAE,CAAA"}