real-browser-mcp-server 1.2.0 → 1.2.2

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 (120) hide show
  1. package/README.md +96 -9
  2. package/dist/lib/cjs/index.d.ts +2 -0
  3. package/dist/lib/cjs/index.d.ts.map +1 -0
  4. package/dist/lib/cjs/index.js +385 -0
  5. package/dist/lib/cjs/index.js.map +1 -0
  6. package/dist/lib/cjs/module/pageController.d.ts +2 -0
  7. package/dist/lib/cjs/module/pageController.d.ts.map +1 -0
  8. package/{lib → dist/lib}/cjs/module/pageController.js +28 -29
  9. package/dist/lib/cjs/module/pageController.js.map +1 -0
  10. package/dist/lib/cjs/module/turnstile.d.ts +2 -0
  11. package/dist/lib/cjs/module/turnstile.d.ts.map +1 -0
  12. package/{lib → dist/lib}/cjs/module/turnstile.js +24 -12
  13. package/dist/lib/cjs/module/turnstile.js.map +1 -0
  14. package/dist/src/index.d.ts +11 -0
  15. package/dist/src/index.d.ts.map +1 -0
  16. package/dist/src/index.js +118 -0
  17. package/dist/src/index.js.map +1 -0
  18. package/dist/src/mcp/handlers/browser.d.ts +30 -0
  19. package/dist/src/mcp/handlers/browser.d.ts.map +1 -0
  20. package/dist/src/mcp/handlers/browser.js +231 -0
  21. package/dist/src/mcp/handlers/browser.js.map +1 -0
  22. package/dist/src/mcp/handlers/dom.d.ts +134 -0
  23. package/dist/src/mcp/handlers/dom.d.ts.map +1 -0
  24. package/dist/src/mcp/handlers/dom.js +551 -0
  25. package/dist/src/mcp/handlers/dom.js.map +1 -0
  26. package/dist/src/mcp/handlers/extract.d.ts +59 -0
  27. package/dist/src/mcp/handlers/extract.d.ts.map +1 -0
  28. package/dist/src/mcp/handlers/extract.js +455 -0
  29. package/dist/src/mcp/handlers/extract.js.map +1 -0
  30. package/dist/src/mcp/handlers/form-handlers.d.ts +9 -0
  31. package/dist/src/mcp/handlers/form-handlers.d.ts.map +1 -0
  32. package/dist/src/mcp/handlers/form-handlers.js +56 -0
  33. package/dist/src/mcp/handlers/form-handlers.js.map +1 -0
  34. package/dist/src/mcp/handlers/helpers.d.ts +47 -0
  35. package/dist/src/mcp/handlers/helpers.d.ts.map +1 -0
  36. package/dist/src/mcp/handlers/helpers.js +515 -0
  37. package/dist/src/mcp/handlers/helpers.js.map +1 -0
  38. package/dist/src/mcp/handlers/index.d.ts +6 -0
  39. package/dist/src/mcp/handlers/index.d.ts.map +1 -0
  40. package/dist/src/mcp/handlers/index.js +61 -0
  41. package/dist/src/mcp/handlers/index.js.map +1 -0
  42. package/dist/src/mcp/handlers/media-handlers.d.ts +10 -0
  43. package/dist/src/mcp/handlers/media-handlers.d.ts.map +1 -0
  44. package/dist/src/mcp/handlers/media-handlers.js +535 -0
  45. package/dist/src/mcp/handlers/media-handlers.js.map +1 -0
  46. package/dist/src/mcp/handlers/network.d.ts +147 -0
  47. package/dist/src/mcp/handlers/network.d.ts.map +1 -0
  48. package/dist/src/mcp/handlers/network.js +1135 -0
  49. package/dist/src/mcp/handlers/network.js.map +1 -0
  50. package/dist/src/mcp/handlers/state.d.ts +34 -0
  51. package/dist/src/mcp/handlers/state.d.ts.map +1 -0
  52. package/dist/src/mcp/handlers/state.js +225 -0
  53. package/dist/src/mcp/handlers/state.js.map +1 -0
  54. package/dist/src/mcp/handlers/utility-handlers.d.ts +167 -0
  55. package/dist/src/mcp/handlers/utility-handlers.d.ts.map +1 -0
  56. package/dist/src/mcp/handlers/utility-handlers.js +280 -0
  57. package/dist/src/mcp/handlers/utility-handlers.js.map +1 -0
  58. package/dist/src/mcp/handlers/vision.d.ts +127 -0
  59. package/dist/src/mcp/handlers/vision.d.ts.map +1 -0
  60. package/dist/src/mcp/handlers/vision.js +483 -0
  61. package/dist/src/mcp/handlers/vision.js.map +1 -0
  62. package/dist/src/mcp/index.d.ts +3 -0
  63. package/dist/src/mcp/index.d.ts.map +1 -0
  64. package/dist/src/mcp/index.js +166 -0
  65. package/dist/src/mcp/index.js.map +1 -0
  66. package/dist/src/mcp/server.d.ts +2 -0
  67. package/dist/src/mcp/server.d.ts.map +1 -0
  68. package/dist/src/mcp/server.js +117 -0
  69. package/dist/src/mcp/server.js.map +1 -0
  70. package/dist/src/mcp/tools.d.ts +8 -0
  71. package/dist/src/mcp/tools.d.ts.map +1 -0
  72. package/{src → dist/src}/mcp/tools.js +12 -11
  73. package/dist/src/mcp/tools.js.map +1 -0
  74. package/dist/src/shared/cache-manager.d.ts +80 -0
  75. package/dist/src/shared/cache-manager.d.ts.map +1 -0
  76. package/dist/src/shared/cache-manager.js +221 -0
  77. package/dist/src/shared/cache-manager.js.map +1 -0
  78. package/dist/src/shared/tools.d.ts +2 -0
  79. package/dist/src/shared/tools.d.ts.map +1 -0
  80. package/dist/src/shared/tools.js +599 -0
  81. package/dist/src/shared/tools.js.map +1 -0
  82. package/dist/src/types.d.ts +365 -0
  83. package/dist/src/types.d.ts.map +1 -0
  84. package/dist/src/types.js +9 -0
  85. package/dist/src/types.js.map +1 -0
  86. package/dist/test/cjs/test.d.ts +11 -0
  87. package/dist/test/cjs/test.d.ts.map +1 -0
  88. package/dist/test/cjs/test.js +289 -0
  89. package/dist/test/cjs/test.js.map +1 -0
  90. package/dist/test/mcp/smoke-test.d.ts +29 -0
  91. package/dist/test/mcp/smoke-test.d.ts.map +1 -0
  92. package/dist/test/mcp/smoke-test.js +132 -0
  93. package/dist/test/mcp/smoke-test.js.map +1 -0
  94. package/lib/esm/index.mjs +232 -79
  95. package/lib/esm/module/pageController.mjs +21 -18
  96. package/lib/esm/module/turnstile.mjs +7 -0
  97. package/package.json +25 -15
  98. package/typings.d.ts +12 -6
  99. package/.github/ISSUE_TEMPLATE/general_issue.yaml +0 -58
  100. package/.github/SETUP.md +0 -111
  101. package/.github/workflows/publish.yml +0 -135
  102. package/Dockerfile +0 -79
  103. package/lib/cjs/adblocker.bin +0 -0
  104. package/lib/cjs/index.js +0 -249
  105. package/src/ai/action-parser.js +0 -274
  106. package/src/ai/core.js +0 -378
  107. package/src/ai/element-finder.js +0 -466
  108. package/src/ai/index.js +0 -82
  109. package/src/ai/page-analyzer.js +0 -304
  110. package/src/ai/selector-healer.js +0 -236
  111. package/src/index.js +0 -121
  112. package/src/mcp/handlers.js +0 -5071
  113. package/src/mcp/index.js +0 -190
  114. package/src/mcp/server.js +0 -144
  115. package/src/shared/tools.js +0 -618
  116. package/test/cjs/test.js +0 -259
  117. package/test/esm/package.json +0 -13
  118. package/test/esm/test.js +0 -226
  119. package/test/esm/test_option2.js +0 -46
  120. package/test/esm/test_playwright_ghost.js +0 -30
@@ -0,0 +1,515 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.helpersHandlers = void 0;
4
+ // Auto-generated helpers handlers
5
+ const state_1 = require("./state");
6
+ exports.helpersHandlers = {
7
+ async _handleBlockingModals(page) {
8
+ try {
9
+ const closed = await page.evaluate(() => {
10
+ // Selectors for common modal close buttons
11
+ const closeSelectors = [
12
+ // Bootstrap/Standard Modals
13
+ '.modal.show .btn-close',
14
+ '.modal.show .close',
15
+ '.modal.in .close',
16
+ '.modal-footer .btn-primary', // "OK" button usually
17
+ '.modal-footer .btn-secondary', // "Close" button
18
+ // Custom Overlays
19
+ '#modal-close',
20
+ '.popup-close',
21
+ '.overlay-close',
22
+ // Generic "X" buttons in overlays
23
+ 'div[role="dialog"] button[aria-label="Close"]',
24
+ 'div[role="dialog"] .close',
25
+ // SweetAlert / specific libraries
26
+ '.swal2-confirm',
27
+ '.swal2-cancel',
28
+ '.ui-dialog-titlebar-close',
29
+ // eCourts specific if known (generic fallback)
30
+ '.modal-header .close',
31
+ 'button[data-dismiss="modal"]'
32
+ ];
33
+ let clicked = false;
34
+ // Check if any modal is visible (display block/flex and opacity > 0)
35
+ const modals = document.querySelectorAll('.modal, .popup, .overlay, .dialog, [role="dialog"]');
36
+ for (const modal of modals) {
37
+ const style = window.getComputedStyle(modal);
38
+ if (style.display !== 'none' && style.visibility !== 'hidden' && style.opacity !== '0') {
39
+ // Modal is visible, find a close button inside
40
+ for (const selector of closeSelectors) {
41
+ const btn = modal.querySelector(selector);
42
+ if (btn && btn.offsetParent !== null) { // Visible button
43
+ btn.click();
44
+ clicked = true;
45
+ break; // Clicked one, break inner loop
46
+ }
47
+ }
48
+ if (clicked)
49
+ break; // Handled one modal, break outer loop
50
+ }
51
+ }
52
+ return clicked;
53
+ });
54
+ if (closed) {
55
+ // notifyProgress('helper', 'progress', '🧹 Auto-closed a blocking modal/popup');
56
+ await new Promise(r => setTimeout(r, 500)); // Wait for animation
57
+ }
58
+ return closed;
59
+ }
60
+ catch (e) {
61
+ return false;
62
+ }
63
+ },
64
+ async _analyzeFullPage(page) {
65
+ return await page.evaluate(() => {
66
+ const inputs = [];
67
+ const allInputs = document.querySelectorAll('input, textarea, select');
68
+ allInputs.forEach((el, index) => {
69
+ if (el.type === 'hidden' || el.offsetParent === null)
70
+ return;
71
+ // Find associated label
72
+ let label = '';
73
+ if (el.id) {
74
+ const labelEl = document.querySelector(`label[for="${el.id}"]`);
75
+ if (labelEl)
76
+ label = labelEl.textContent.trim();
77
+ }
78
+ if (!label) {
79
+ const parent = el.closest('label, .form-group, .field');
80
+ if (parent)
81
+ label = parent.textContent?.split('\n')[0]?.trim() || '';
82
+ }
83
+ inputs.push({
84
+ index,
85
+ tag: el.tagName.toLowerCase(),
86
+ type: el.type || 'text',
87
+ name: el.name || '',
88
+ id: el.id || '',
89
+ placeholder: el.placeholder || '',
90
+ label: label,
91
+ required: el.required,
92
+ value: el.value || '',
93
+ selector: el.id ? `#${el.id}` : (el.name ? `[name="${el.name}"]` : `input[type="${el.type}"]:nth-of-type(${index + 1})`)
94
+ });
95
+ });
96
+ // Detect captcha elements
97
+ const captcha = {
98
+ image: document.querySelector('img[src*="captcha"], img[id*="captcha"], .captcha-image')?.src || null,
99
+ input: document.querySelector('input[name*="captcha"], input[id*="captcha"]')?.id || null
100
+ };
101
+ // Detect submit button
102
+ const submitBtn = document.querySelector('button[type="submit"], input[type="submit"], button.submit');
103
+ return {
104
+ inputs,
105
+ captcha,
106
+ submitButton: submitBtn ? (submitBtn.id ? `#${submitBtn.id}` : 'button[type="submit"]') : null,
107
+ totalInputs: inputs.length
108
+ };
109
+ });
110
+ },
111
+ async _fillFormFields(page, formData, formSelector, humanLike = true, aiMatch = true) {
112
+ const targetForm = formSelector || 'form';
113
+ const fields = Object.keys(formData || {});
114
+ let filledCount = 0;
115
+ const filledFields = [];
116
+ const unfilledFields = [];
117
+ // First, analyze the full page
118
+ const pageInfo = await exports.helpersHandlers._analyzeFullPage(page);
119
+ (0, state_1.notifyProgress)('solve_captcha', 'progress', `🔍 Page analyzed: ${pageInfo.totalInputs} inputs found`);
120
+ for (const [field, value] of Object.entries(formData || {})) {
121
+ // Enhanced AI Field Matching - uses pageInfo for better matching
122
+ let bestMatch = null;
123
+ let bestScore = 0;
124
+ for (const input of pageInfo.inputs) {
125
+ let score = 0;
126
+ const fieldLower = field.toLowerCase();
127
+ // Exact matches
128
+ if (input.name.toLowerCase() === fieldLower)
129
+ score = 100;
130
+ else if (input.id.toLowerCase() === fieldLower)
131
+ score = 95;
132
+ // Partial matches
133
+ else if (input.name.toLowerCase().includes(fieldLower))
134
+ score = 80;
135
+ else if (input.id.toLowerCase().includes(fieldLower))
136
+ score = 75;
137
+ else if (input.placeholder.toLowerCase().includes(fieldLower))
138
+ score = 70;
139
+ else if (input.label.toLowerCase().includes(fieldLower))
140
+ score = 65;
141
+ // Type-based matching
142
+ else if (fieldLower.includes('email') && input.type === 'email')
143
+ score = 60;
144
+ else if (fieldLower.includes('pass') && input.type === 'password')
145
+ score = 60;
146
+ else if (fieldLower.includes('phone') && input.type === 'tel')
147
+ score = 60;
148
+ if (score > bestScore) {
149
+ bestScore = score;
150
+ bestMatch = input;
151
+ }
152
+ }
153
+ if (!bestMatch || bestScore < 50) {
154
+ unfilledFields.push(field);
155
+ continue;
156
+ }
157
+ try {
158
+ const element = await page.$(bestMatch.selector);
159
+ if (!element) {
160
+ unfilledFields.push(field);
161
+ continue;
162
+ }
163
+ // Focus element first (human-like)
164
+ await element.focus();
165
+ await new Promise(r => setTimeout(r, 100 + Math.random() * 150));
166
+ if (bestMatch.tag === 'select') {
167
+ // Smart Select
168
+ await page.evaluate(({ sel, val }) => {
169
+ const el = document.querySelector(sel);
170
+ if (!el)
171
+ return;
172
+ el.value = val;
173
+ if (el.value !== val) {
174
+ for (const opt of el.options) {
175
+ if (opt.text.toLowerCase().includes(val.toLowerCase())) {
176
+ el.value = opt.value;
177
+ break;
178
+ }
179
+ }
180
+ }
181
+ el.dispatchEvent(new Event('change', { bubbles: true }));
182
+ }, { sel: bestMatch.selector, val: String(value) });
183
+ }
184
+ else if (bestMatch.type === 'checkbox' || bestMatch.type === 'radio') {
185
+ if (value)
186
+ await element.click();
187
+ }
188
+ else {
189
+ // Text input - clear and type with human behavior
190
+ await element.click({ clickCount: 3 });
191
+ await page.keyboard.press('Backspace');
192
+ await new Promise(r => setTimeout(r, 50));
193
+ if (humanLike) {
194
+ // Human-like typing with variable delays
195
+ for (let i = 0; i < String(value).length; i++) {
196
+ const char = String(value)[i];
197
+ await page.keyboard.type(char);
198
+ // Variable delay based on character type
199
+ const delay = char === ' ' ? 80 : (30 + Math.random() * 70);
200
+ await new Promise(r => setTimeout(r, delay));
201
+ }
202
+ }
203
+ else {
204
+ await page.type(bestMatch.selector, String(value));
205
+ }
206
+ }
207
+ // Tab to next field (human-like navigation)
208
+ if (humanLike) {
209
+ await new Promise(r => setTimeout(r, 100 + Math.random() * 200));
210
+ await page.keyboard.press('Tab');
211
+ await new Promise(r => setTimeout(r, 50));
212
+ }
213
+ filledCount++;
214
+ filledFields.push({ field, selector: bestMatch.selector, matchScore: bestScore });
215
+ (0, state_1.notifyProgress)('solve_captcha', 'progress', `📝 Filled: ${field} (score: ${bestScore})`, { field, filledCount });
216
+ }
217
+ catch (e) {
218
+ unfilledFields.push(field);
219
+ }
220
+ }
221
+ return {
222
+ success: filledCount > 0,
223
+ filledCount,
224
+ filledFields,
225
+ unfilledFields,
226
+ totalFields: fields.length,
227
+ pageInfo
228
+ };
229
+ },
230
+ async _validateBeforeSubmit(page) {
231
+ return await page.evaluate(() => {
232
+ const errors = [];
233
+ const requiredFields = document.querySelectorAll('[required], .required input');
234
+ requiredFields.forEach(field => {
235
+ if (!field.value || field.value.trim() === '') {
236
+ const label = field.name || field.id || field.placeholder || 'Unknown';
237
+ errors.push({ field: label, error: 'Required field is empty' });
238
+ }
239
+ });
240
+ // Check for visible error messages
241
+ const errorMsgs = document.querySelectorAll('.error, .error-message, .invalid-feedback, [class*="error"]');
242
+ errorMsgs.forEach(el => {
243
+ if (el.offsetParent !== null && el.textContent.trim()) {
244
+ errors.push({ field: 'form', error: el.textContent.trim() });
245
+ }
246
+ });
247
+ return { valid: errors.length === 0, errors };
248
+ });
249
+ },
250
+ async _detectPostSubmitErrors(page) {
251
+ await new Promise(r => setTimeout(r, 1500)); // Wait for page response
252
+ return await page.evaluate(() => {
253
+ const errors = [];
254
+ // Check for error messages
255
+ const errorSelectors = [
256
+ '.error', '.error-message', '.alert-danger', '.invalid',
257
+ '[class*="error"]', '[class*="invalid"]', '.captcha-error'
258
+ ];
259
+ for (const sel of errorSelectors) {
260
+ document.querySelectorAll(sel).forEach(el => {
261
+ if (el.offsetParent !== null && el.textContent.trim()) {
262
+ errors.push(el.textContent.trim());
263
+ }
264
+ });
265
+ }
266
+ // Check if captcha input is still visible (might indicate wrong captcha)
267
+ const captchaInput = document.querySelector('input[name*="captcha"], input[id*="captcha"]');
268
+ if (captchaInput && captchaInput.offsetParent !== null && !captchaInput.value) {
269
+ errors.push('Captcha may have failed - input is empty');
270
+ }
271
+ return {
272
+ hasErrors: errors.length > 0,
273
+ errors: [...new Set(errors)].slice(0, 5) // Unique errors, max 5
274
+ };
275
+ });
276
+ },
277
+ async _solveWithVisionAPI(imageBase64, langHint = '') {
278
+ if (process.env.NVIDIA_API_KEY) {
279
+ try {
280
+ return await exports.helpersHandlers._solveWithNvidia(imageBase64, langHint);
281
+ }
282
+ catch (e) {
283
+ (0, state_1.notifyProgress)('solve_captcha', 'progress', `⚠️ NVIDIA API error: ${e.message}`);
284
+ }
285
+ }
286
+ if (process.env.OPENROUTER_API_KEY) {
287
+ try {
288
+ return await exports.helpersHandlers._solveWithOpenRouter(imageBase64, langHint);
289
+ }
290
+ catch (e) {
291
+ (0, state_1.notifyProgress)('solve_captcha', 'progress', `⚠️ OpenRouter API error: ${e.message}`);
292
+ }
293
+ }
294
+ return null; // No API configured — fallback to host LLM
295
+ },
296
+ async _solveWithNvidia(imageBase64, langHint = '') {
297
+ const https = require('https');
298
+ const apiKey = process.env.NVIDIA_API_KEY;
299
+ // NVIDIA vision models sorted by speed & reliability
300
+ const models = [
301
+ 'z-ai/glm-4.7',
302
+ 'deepseek-ai/deepseek-v4-pro',
303
+ 'meta/llama-3.2-11b-vision-instruct',
304
+ 'meta/llama-4-maverick-17b-128e-instruct',
305
+ 'microsoft/phi-4-multimodal-instruct'
306
+ ];
307
+ for (const model of models) {
308
+ (0, state_1.notifyProgress)('solve_captcha', 'progress', `🟢 NVIDIA: Trying ${model}...`);
309
+ const requestBody = JSON.stringify({
310
+ model,
311
+ messages: [{
312
+ role: 'user',
313
+ content: [
314
+ {
315
+ type: 'text',
316
+ text: 'This is a CAPTCHA image. Read ONLY the text/characters shown. Return ONLY the exact characters, nothing else.' + langHint
317
+ },
318
+ {
319
+ type: 'image_url',
320
+ image_url: { url: `data:image/png;base64,${imageBase64}` }
321
+ }
322
+ ]
323
+ }],
324
+ max_tokens: 30,
325
+ temperature: 0.1
326
+ });
327
+ try {
328
+ const result = await new Promise((resolve, reject) => {
329
+ const options = {
330
+ hostname: 'integrate.api.nvidia.com',
331
+ path: '/v1/chat/completions',
332
+ method: 'POST',
333
+ headers: {
334
+ 'Content-Type': 'application/json',
335
+ 'Authorization': `Bearer ${apiKey}`,
336
+ 'Content-Length': Buffer.byteLength(requestBody)
337
+ }
338
+ };
339
+ const req = https.request(options, (res) => {
340
+ let data = '';
341
+ res.on('data', (chunk) => data += chunk);
342
+ res.on('end', () => {
343
+ try {
344
+ const json = JSON.parse(data);
345
+ if (json.error) {
346
+ (0, state_1.notifyProgress)('solve_captcha', 'progress', `⏭️ NVIDIA ${model}: ${(json.error.message || '').substring(0, 60)}`);
347
+ return resolve(null); // Try next model
348
+ }
349
+ const text = json?.choices?.[0]?.message?.content?.trim();
350
+ if (!text)
351
+ return resolve(null);
352
+ const cleaned = text.replace(/[\s"'\n\r`]/g, '');
353
+ (0, state_1.notifyProgress)('solve_captcha', 'progress', `✨ NVIDIA [${model.split('/')[1]}] extracted: "${cleaned}"`);
354
+ resolve(cleaned || null);
355
+ }
356
+ catch (e) {
357
+ resolve(null);
358
+ }
359
+ });
360
+ });
361
+ req.on('error', () => resolve(null));
362
+ req.setTimeout(20000, () => { req.destroy(); resolve(null); });
363
+ req.write(requestBody);
364
+ req.end();
365
+ });
366
+ if (result)
367
+ return result;
368
+ }
369
+ catch (e) {
370
+ // Try next model
371
+ }
372
+ }
373
+ throw new Error('All NVIDIA models failed');
374
+ },
375
+ async _solveWithOpenRouter(imageBase64, langHint = '') {
376
+ const https = require('https');
377
+ const apiKey = process.env.OPENROUTER_API_KEY;
378
+ // Best free vision models on OpenRouter (auto-fallback)
379
+ const models = [
380
+ 'google/gemini-2.5-pro-free', // Insanely smart & free
381
+ 'meta-llama/llama-3.2-90b-vision-instruct:free',
382
+ 'qwen/qwen-vl-plus:free'
383
+ ];
384
+ for (const model of models) {
385
+ (0, state_1.notifyProgress)('solve_captcha', 'progress', `🟢 OpenRouter: Trying ${model}...`);
386
+ const requestBody = JSON.stringify({
387
+ model,
388
+ messages: [{
389
+ role: 'user',
390
+ content: [
391
+ { type: 'text', text: 'This is a CAPTCHA image. Read ONLY the text/characters shown. Return ONLY the exact characters, nothing else.' + langHint },
392
+ { type: 'image_url', image_url: { url: `data:image/png;base64,${imageBase64}` } }
393
+ ]
394
+ }],
395
+ max_tokens: 30,
396
+ temperature: 0.1
397
+ });
398
+ try {
399
+ const result = await new Promise((resolve, reject) => {
400
+ const options = {
401
+ hostname: 'openrouter.ai',
402
+ path: '/api/v1/chat/completions',
403
+ method: 'POST',
404
+ headers: {
405
+ 'Content-Type': 'application/json',
406
+ 'Authorization': `Bearer ${apiKey}`,
407
+ 'HTTP-Referer': 'https://github.com/brave-browser',
408
+ 'X-Title': 'Brave MCP',
409
+ 'Content-Length': Buffer.byteLength(requestBody)
410
+ }
411
+ };
412
+ const req = https.request(options, (res) => {
413
+ let data = '';
414
+ res.on('data', (chunk) => data += chunk);
415
+ res.on('end', () => {
416
+ try {
417
+ const json = JSON.parse(data);
418
+ if (json.error) {
419
+ (0, state_1.notifyProgress)('solve_captcha', 'progress', `⏭️ OpenRouter ${model}: ${(json.error.message || '').substring(0, 60)}`);
420
+ return resolve(null); // Try next model
421
+ }
422
+ const text = json?.choices?.[0]?.message?.content?.trim();
423
+ if (!text)
424
+ return resolve(null);
425
+ const cleaned = text.replace(/[\s"'\n\r`]/g, '');
426
+ (0, state_1.notifyProgress)('solve_captcha', 'progress', `✨ OpenRouter [${model.split('/')[1]}] extracted: "${cleaned}"`);
427
+ resolve(cleaned || null);
428
+ }
429
+ catch (e) {
430
+ resolve(null);
431
+ }
432
+ });
433
+ });
434
+ req.on('error', () => resolve(null));
435
+ req.setTimeout(20000, () => { req.destroy(); resolve(null); });
436
+ req.write(requestBody);
437
+ req.end();
438
+ });
439
+ if (result)
440
+ return result;
441
+ }
442
+ catch (e) {
443
+ // Try next model
444
+ }
445
+ }
446
+ throw new Error('All OpenRouter models failed');
447
+ },
448
+ async _submitForm(page, validateFirst = true, maxRetries = 1) {
449
+ try {
450
+ // Pre-submit validation
451
+ if (validateFirst) {
452
+ const validation = await exports.helpersHandlers._validateBeforeSubmit(page);
453
+ if (!validation.valid) {
454
+ (0, state_1.notifyProgress)('solve_captcha', 'warn', `⚠️ Validation failed: ${validation.errors.length} issue(s)`);
455
+ return { success: false, message: 'Pre-submit validation failed', errors: validation.errors };
456
+ }
457
+ (0, state_1.notifyProgress)('solve_captcha', 'progress', '✅ Pre-submit validation passed');
458
+ }
459
+ const submitSelector = await page.evaluate(() => {
460
+ const buttons = Array.from(document.querySelectorAll('button, input[type="submit"], input[type="button"], a.btn'));
461
+ const candidates = buttons.filter(b => {
462
+ const text = (b.innerText || b.value || '').toLowerCase();
463
+ return text.includes('submit') || text.includes('go') || text.includes('search') ||
464
+ text.includes('view') || text.includes('login') || text.includes('sign in') ||
465
+ text.includes('register') || text.includes('send');
466
+ });
467
+ const best = candidates.find(b => b.offsetParent !== null);
468
+ if (best) {
469
+ return best.id ? `#${best.id}` : (best.name ? `[name="${best.name}"]` : 'button[type="submit"]');
470
+ }
471
+ // Fallback to any submit button
472
+ const fallback = document.querySelector('button[type="submit"], input[type="submit"]');
473
+ return fallback ? (fallback.id ? `#${fallback.id}` : 'button[type="submit"]') : null;
474
+ });
475
+ if (!submitSelector) {
476
+ (0, state_1.notifyProgress)('solve_captcha', 'warn', '⚠️ Could not auto-detect submit button');
477
+ return { success: false, message: 'Could not auto-detect submit button' };
478
+ }
479
+ // Click submit button with human-like behavior
480
+ try {
481
+ const { createCursor } = require('ghost-cursor-patchright');
482
+ const cursor = createCursor(page);
483
+ await cursor.click(submitSelector);
484
+ }
485
+ catch (e) {
486
+ await page.click(submitSelector);
487
+ }
488
+ // Wait for response
489
+ try {
490
+ await page.waitForNavigation({ timeout: 5000, waitUntil: 'domcontentloaded' });
491
+ (0, state_1.notifyProgress)('solve_captcha', 'completed', '✅ Form submitted and navigation complete');
492
+ return { success: true, message: 'Form submitted and navigation complete', navigated: true };
493
+ }
494
+ catch (e) {
495
+ // No navigation - check for errors on same page
496
+ const postErrors = await exports.helpersHandlers._detectPostSubmitErrors(page);
497
+ if (postErrors.hasErrors) {
498
+ (0, state_1.notifyProgress)('solve_captcha', 'warn', `⚠️ Submit detected errors: ${postErrors.errors[0]}`);
499
+ return {
500
+ success: false,
501
+ message: 'Form submitted but errors detected',
502
+ errors: postErrors.errors,
503
+ needsRetry: postErrors.errors.some((e) => e.toLowerCase().includes('captcha'))
504
+ };
505
+ }
506
+ (0, state_1.notifyProgress)('solve_captcha', 'completed', '✅ Form submitted (no navigation detected)');
507
+ return { success: true, message: 'Form submitted (no navigation detected)', navigated: false };
508
+ }
509
+ }
510
+ catch (error) {
511
+ return { success: false, message: error.message };
512
+ }
513
+ }
514
+ };
515
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../src/mcp/handlers/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { setProgressCallback, notifyProgress, getHeadlessFromEnv, getState, requireBrowser, globalCache } from './state';
2
+ export declare const handlers: any;
3
+ export declare function executeTool(name: string, args?: any): Promise<any>;
4
+ export declare function cleanup(): Promise<void>;
5
+ export { getState, requireBrowser, setProgressCallback, notifyProgress, getHeadlessFromEnv, globalCache };
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/mcp/handlers/index.ts"],"names":[],"mappings":"AAUA,OAAO,EAAS,mBAAmB,EAAE,cAAc,EAAE,kBAAkB,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAChI,eAAO,MAAM,QAAQ,EAAE,GAUtB,CAAC;AAEF,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,GAAQ,gBAS7D;AAED,wBAAsB,OAAO,kBAc5B;AAED,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,mBAAmB,EAAE,cAAc,EAAE,kBAAkB,EAAE,WAAW,EAAE,CAAC"}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.globalCache = exports.getHeadlessFromEnv = exports.notifyProgress = exports.setProgressCallback = exports.requireBrowser = exports.getState = exports.handlers = void 0;
4
+ exports.executeTool = executeTool;
5
+ exports.cleanup = cleanup;
6
+ // Handler aggregation hub
7
+ const browser_1 = require("./browser");
8
+ const dom_1 = require("./dom");
9
+ const network_1 = require("./network");
10
+ const vision_1 = require("./vision");
11
+ const extract_1 = require("./extract");
12
+ const helpers_1 = require("./helpers");
13
+ const utility_handlers_1 = require("./utility-handlers");
14
+ const media_handlers_1 = require("./media-handlers");
15
+ const form_handlers_1 = require("./form-handlers");
16
+ const state_1 = require("./state");
17
+ Object.defineProperty(exports, "setProgressCallback", { enumerable: true, get: function () { return state_1.setProgressCallback; } });
18
+ Object.defineProperty(exports, "notifyProgress", { enumerable: true, get: function () { return state_1.notifyProgress; } });
19
+ Object.defineProperty(exports, "getHeadlessFromEnv", { enumerable: true, get: function () { return state_1.getHeadlessFromEnv; } });
20
+ Object.defineProperty(exports, "getState", { enumerable: true, get: function () { return state_1.getState; } });
21
+ Object.defineProperty(exports, "requireBrowser", { enumerable: true, get: function () { return state_1.requireBrowser; } });
22
+ Object.defineProperty(exports, "globalCache", { enumerable: true, get: function () { return state_1.globalCache; } });
23
+ exports.handlers = {
24
+ ...browser_1.browserHandlers,
25
+ ...dom_1.domHandlers,
26
+ ...network_1.networkHandlers,
27
+ ...vision_1.visionHandlers,
28
+ ...extract_1.extractHandlers,
29
+ ...helpers_1.helpersHandlers,
30
+ ...utility_handlers_1.utilityHandlers,
31
+ ...media_handlers_1.mediaHandlers,
32
+ ...form_handlers_1.formHandlers
33
+ };
34
+ async function executeTool(name, args = {}) {
35
+ if (exports.handlers[name]) {
36
+ try {
37
+ return await exports.handlers[name](args);
38
+ }
39
+ catch (error) {
40
+ return { success: false, error: error.message };
41
+ }
42
+ }
43
+ return { success: false, error: `Tool ${name} not implemented` };
44
+ }
45
+ async function cleanup() {
46
+ if (state_1.state.browserInstance) {
47
+ try {
48
+ await state_1.state.browserInstance.close();
49
+ }
50
+ catch (e) {
51
+ if (typeof state_1.state.browserInstance.process === 'function') {
52
+ state_1.state.browserInstance.process()?.kill('SIGKILL');
53
+ }
54
+ }
55
+ state_1.state.browserInstance = null;
56
+ state_1.state.pageInstance = null;
57
+ state_1.state.blockerInstance = null;
58
+ state_1.state.setupPageFn = null;
59
+ }
60
+ }
61
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/mcp/handlers/index.ts"],"names":[],"mappings":";;;AAuBA,kCASC;AAED,0BAcC;AAhDD,0BAA0B;AAC1B,uCAA4C;AAC5C,+BAAoC;AACpC,uCAA4C;AAC5C,qCAA0C;AAC1C,uCAA4C;AAC5C,uCAA4C;AAC5C,yDAAqD;AACrD,qDAAiD;AACjD,mDAA+C;AAC/C,mCAAgI;AAwC7F,oGAxCnB,2BAAmB,OAwCmB;AAAE,+FAxCnB,sBAAc,OAwCmB;AAAE,mGAxCnB,0BAAkB,OAwCmB;AAAjF,yFAxCgE,gBAAQ,OAwChE;AAAE,+FAxCgE,sBAAc,OAwChE;AAA2D,4FAxCO,mBAAW,OAwCP;AAvC1F,QAAA,QAAQ,GAAQ;IAC3B,GAAG,yBAAe;IAClB,GAAG,iBAAW;IACd,GAAG,yBAAe;IAClB,GAAG,uBAAc;IACjB,GAAG,yBAAe;IAClB,GAAG,yBAAe;IAClB,GAAG,kCAAe;IAClB,GAAG,8BAAa;IAChB,GAAG,4BAAY;CAChB,CAAC;AAEK,KAAK,UAAU,WAAW,CAAC,IAAY,EAAE,OAAY,EAAE;IAC5D,IAAI,gBAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnB,IAAI,CAAC;YACH,OAAO,MAAM,gBAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;QAClD,CAAC;IACH,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,IAAI,kBAAkB,EAAE,CAAC;AACnE,CAAC;AAEM,KAAK,UAAU,OAAO;IAC3B,IAAI,aAAK,CAAC,eAAe,EAAE,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,aAAK,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QACtC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,OAAQ,aAAK,CAAC,eAAuB,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;gBAChE,aAAK,CAAC,eAAuB,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;QACD,aAAK,CAAC,eAAe,GAAG,IAAI,CAAC;QAC7B,aAAK,CAAC,YAAY,GAAG,IAAI,CAAC;QAC1B,aAAK,CAAC,eAAe,GAAG,IAAI,CAAC;QAC7B,aAAK,CAAC,WAAW,GAAG,IAAI,CAAC;IAC3B,CAAC;AACH,CAAC"}
@@ -0,0 +1,10 @@
1
+ export declare const mediaHandlers: {
2
+ stream_extractor(params?: any): Promise<{
3
+ success: boolean;
4
+ streams: any;
5
+ totalCount: number;
6
+ }>;
7
+ player_api_hook(params?: any): Promise<any>;
8
+ media_extractor(params?: any): Promise<any>;
9
+ };
10
+ //# sourceMappingURL=media-handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-handlers.d.ts","sourceRoot":"","sources":["../../../../src/mcp/handlers/media-handlers.ts"],"names":[],"mappings":"AAsRA,eAAO,MAAM,aAAa;8BACO,GAAG;;;;;6BA8CJ,GAAG;6BAuCH,GAAG;CAuOlC,CAAC"}