real-browser-mcp-server 1.5.1 → 2.0.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 (106) hide show
  1. package/README.md +46 -41
  2. package/dist/lib/cjs/index.d.ts +14 -1
  3. package/dist/lib/cjs/index.d.ts.map +1 -1
  4. package/dist/lib/cjs/index.js +5 -3
  5. package/dist/lib/cjs/index.js.map +1 -1
  6. package/dist/lib/cjs/module/pageController.d.ts +7 -1
  7. package/dist/lib/cjs/module/pageController.d.ts.map +1 -1
  8. package/dist/lib/cjs/module/pageController.js +4 -23
  9. package/dist/lib/cjs/module/pageController.js.map +1 -1
  10. package/dist/lib/cjs/module/turnstile.d.ts +4 -1
  11. package/dist/lib/cjs/module/turnstile.d.ts.map +1 -1
  12. package/dist/lib/cjs/module/turnstile.js +14 -13
  13. package/dist/lib/cjs/module/turnstile.js.map +1 -1
  14. package/dist/lib/esm/index.d.mjs +11 -0
  15. package/dist/lib/esm/index.mjs +4 -0
  16. package/dist/lib/esm/module/pageController.d.mjs +3 -0
  17. package/dist/lib/esm/module/turnstile.d.mjs +3 -0
  18. package/dist/scripts/generate-esm.d.ts +2 -0
  19. package/dist/scripts/generate-esm.d.ts.map +1 -0
  20. package/dist/scripts/generate-esm.js +100 -0
  21. package/dist/scripts/generate-esm.js.map +1 -0
  22. package/dist/src/index.d.ts.map +1 -1
  23. package/dist/src/index.js +0 -1
  24. package/dist/src/index.js.map +1 -1
  25. package/dist/src/mcp/handlers/browser.d.ts +8 -7
  26. package/dist/src/mcp/handlers/browser.d.ts.map +1 -1
  27. package/dist/src/mcp/handlers/browser.js +4 -3
  28. package/dist/src/mcp/handlers/browser.js.map +1 -1
  29. package/dist/src/mcp/handlers/dom.d.ts +19 -18
  30. package/dist/src/mcp/handlers/dom.d.ts.map +1 -1
  31. package/dist/src/mcp/handlers/dom.js +7 -28
  32. package/dist/src/mcp/handlers/dom.js.map +1 -1
  33. package/dist/src/mcp/handlers/extract.js.map +1 -1
  34. package/dist/src/mcp/handlers/handler-utils.d.ts +14 -0
  35. package/dist/src/mcp/handlers/handler-utils.d.ts.map +1 -0
  36. package/dist/src/mcp/handlers/handler-utils.js +42 -0
  37. package/dist/src/mcp/handlers/handler-utils.js.map +1 -0
  38. package/dist/src/mcp/handlers/helpers.d.ts +0 -7
  39. package/dist/src/mcp/handlers/helpers.d.ts.map +1 -1
  40. package/dist/src/mcp/handlers/helpers.js +0 -15
  41. package/dist/src/mcp/handlers/helpers.js.map +1 -1
  42. package/dist/src/mcp/handlers/media-handlers.d.ts +2 -1
  43. package/dist/src/mcp/handlers/media-handlers.d.ts.map +1 -1
  44. package/dist/src/mcp/handlers/media-handlers.js +24 -8
  45. package/dist/src/mcp/handlers/media-handlers.js.map +1 -1
  46. package/dist/src/mcp/handlers/network-extractors.d.ts +2 -0
  47. package/dist/src/mcp/handlers/network-extractors.d.ts.map +1 -0
  48. package/dist/src/mcp/handlers/network-extractors.js +651 -0
  49. package/dist/src/mcp/handlers/network-extractors.js.map +1 -0
  50. package/dist/src/mcp/handlers/network-recorder.d.ts +119 -0
  51. package/dist/src/mcp/handlers/network-recorder.d.ts.map +1 -0
  52. package/dist/src/mcp/handlers/network-recorder.js +337 -0
  53. package/dist/src/mcp/handlers/network-recorder.js.map +1 -0
  54. package/dist/src/mcp/handlers/network.d.ts +30 -118
  55. package/dist/src/mcp/handlers/network.d.ts.map +1 -1
  56. package/dist/src/mcp/handlers/network.js +28 -1187
  57. package/dist/src/mcp/handlers/network.js.map +1 -1
  58. package/dist/src/mcp/handlers/state.d.ts +1 -0
  59. package/dist/src/mcp/handlers/state.d.ts.map +1 -1
  60. package/dist/src/mcp/handlers/state.js +17 -0
  61. package/dist/src/mcp/handlers/state.js.map +1 -1
  62. package/dist/src/mcp/handlers/utility-handlers.d.ts +8 -37
  63. package/dist/src/mcp/handlers/utility-handlers.d.ts.map +1 -1
  64. package/dist/src/mcp/handlers/utility-handlers.js +69 -31
  65. package/dist/src/mcp/handlers/utility-handlers.js.map +1 -1
  66. package/dist/src/mcp/handlers/vision-captcha.d.ts +221 -0
  67. package/dist/src/mcp/handlers/vision-captcha.d.ts.map +1 -0
  68. package/dist/src/mcp/handlers/vision-captcha.js +238 -0
  69. package/dist/src/mcp/handlers/vision-captcha.js.map +1 -0
  70. package/dist/src/mcp/handlers/vision-see-page.d.ts +32 -0
  71. package/dist/src/mcp/handlers/vision-see-page.d.ts.map +1 -0
  72. package/dist/src/mcp/handlers/vision-see-page.js +260 -0
  73. package/dist/src/mcp/handlers/vision-see-page.js.map +1 -0
  74. package/dist/src/mcp/handlers/vision.d.ts +50 -27
  75. package/dist/src/mcp/handlers/vision.d.ts.map +1 -1
  76. package/dist/src/mcp/handlers/vision.js +4 -606
  77. package/dist/src/mcp/handlers/vision.js.map +1 -1
  78. package/dist/src/mcp/index.d.ts.map +1 -1
  79. package/dist/src/mcp/index.js +11 -3
  80. package/dist/src/mcp/index.js.map +1 -1
  81. package/dist/src/shared/cache-manager.d.ts +0 -2
  82. package/dist/src/shared/cache-manager.d.ts.map +1 -1
  83. package/dist/src/shared/cache-manager.js +1 -3
  84. package/dist/src/shared/cache-manager.js.map +1 -1
  85. package/dist/src/shared/lib-core.d.ts +2 -1
  86. package/dist/src/shared/lib-core.d.ts.map +1 -1
  87. package/dist/src/shared/lib-core.js +5 -38
  88. package/dist/src/shared/lib-core.js.map +1 -1
  89. package/dist/src/shared/tools.d.ts.map +1 -1
  90. package/dist/src/shared/tools.js +6 -18
  91. package/dist/src/shared/tools.js.map +1 -1
  92. package/dist/src/types.d.ts +25 -6
  93. package/dist/src/types.d.ts.map +1 -1
  94. package/dist/test/cjs/test.js +29 -33
  95. package/dist/test/cjs/test.js.map +1 -1
  96. package/dist/test/mcp/smoke-test.d.ts.map +1 -1
  97. package/dist/test/mcp/smoke-test.js +9 -3
  98. package/dist/test/mcp/smoke-test.js.map +1 -1
  99. package/dist/test/unit/handler-test.d.ts +3 -0
  100. package/dist/test/unit/handler-test.d.ts.map +1 -0
  101. package/dist/test/unit/handler-test.js +133 -0
  102. package/dist/test/unit/handler-test.js.map +1 -0
  103. package/lib/esm/module/pageController.mjs +4 -22
  104. package/lib/esm/module/turnstile.mjs +16 -13
  105. package/package.json +5 -4
  106. package/typings.d.ts +5 -40
@@ -0,0 +1,221 @@
1
+ import type { SolveCaptchaParams } from '../../types';
2
+ export declare function solveCaptcha(params?: SolveCaptchaParams): Promise<{
3
+ success: boolean;
4
+ error: string | undefined;
5
+ requiresVision?: undefined;
6
+ fallback?: undefined;
7
+ formResult?: undefined;
8
+ mcpContent?: undefined;
9
+ type?: undefined;
10
+ detectedType?: undefined;
11
+ solved?: undefined;
12
+ submitted?: undefined;
13
+ submitMessage?: undefined;
14
+ method?: undefined;
15
+ attempts?: undefined;
16
+ } | {
17
+ success: boolean;
18
+ error: string;
19
+ requiresVision: boolean;
20
+ fallback: {
21
+ captchaSelector: string;
22
+ inputSelector: string | null;
23
+ submit: boolean;
24
+ guidance: string;
25
+ };
26
+ formResult: {
27
+ success: boolean;
28
+ filledCount: number;
29
+ filledFields: {
30
+ field: string;
31
+ selector: any;
32
+ matchScore: number;
33
+ }[];
34
+ unfilledFields: string[];
35
+ totalFields: number;
36
+ pageInfo: any;
37
+ } | null;
38
+ mcpContent?: undefined;
39
+ type?: undefined;
40
+ detectedType?: undefined;
41
+ solved?: undefined;
42
+ submitted?: undefined;
43
+ submitMessage?: undefined;
44
+ method?: undefined;
45
+ attempts?: undefined;
46
+ } | {
47
+ success: boolean;
48
+ mcpContent: ({
49
+ type: string;
50
+ text: string;
51
+ data?: undefined;
52
+ mimeType?: undefined;
53
+ } | {
54
+ type: string;
55
+ data: any;
56
+ mimeType: string;
57
+ text?: undefined;
58
+ })[];
59
+ error?: undefined;
60
+ requiresVision?: undefined;
61
+ fallback?: undefined;
62
+ formResult?: undefined;
63
+ type?: undefined;
64
+ detectedType?: undefined;
65
+ solved?: undefined;
66
+ submitted?: undefined;
67
+ submitMessage?: undefined;
68
+ method?: undefined;
69
+ attempts?: undefined;
70
+ } | {
71
+ success: boolean;
72
+ error: any;
73
+ type: string;
74
+ formResult: {
75
+ success: boolean;
76
+ filledCount: number;
77
+ filledFields: {
78
+ field: string;
79
+ selector: any;
80
+ matchScore: number;
81
+ }[];
82
+ unfilledFields: string[];
83
+ totalFields: number;
84
+ pageInfo: any;
85
+ } | null;
86
+ requiresVision?: undefined;
87
+ fallback?: undefined;
88
+ mcpContent?: undefined;
89
+ detectedType?: undefined;
90
+ solved?: undefined;
91
+ submitted?: undefined;
92
+ submitMessage?: undefined;
93
+ method?: undefined;
94
+ attempts?: undefined;
95
+ } | {
96
+ success: boolean;
97
+ error: string;
98
+ formResult: {
99
+ success: boolean;
100
+ filledCount: number;
101
+ filledFields: {
102
+ field: string;
103
+ selector: any;
104
+ matchScore: number;
105
+ }[];
106
+ unfilledFields: string[];
107
+ totalFields: number;
108
+ pageInfo: any;
109
+ } | null;
110
+ requiresVision?: undefined;
111
+ fallback?: undefined;
112
+ mcpContent?: undefined;
113
+ type?: undefined;
114
+ detectedType?: undefined;
115
+ solved?: undefined;
116
+ submitted?: undefined;
117
+ submitMessage?: undefined;
118
+ method?: undefined;
119
+ attempts?: undefined;
120
+ } | {
121
+ success: boolean;
122
+ error: string;
123
+ detectedType: string;
124
+ formResult: {
125
+ success: boolean;
126
+ filledCount: number;
127
+ filledFields: {
128
+ field: string;
129
+ selector: any;
130
+ matchScore: number;
131
+ }[];
132
+ unfilledFields: string[];
133
+ totalFields: number;
134
+ pageInfo: any;
135
+ } | null;
136
+ requiresVision?: undefined;
137
+ fallback?: undefined;
138
+ mcpContent?: undefined;
139
+ type?: undefined;
140
+ solved?: undefined;
141
+ submitted?: undefined;
142
+ submitMessage?: undefined;
143
+ method?: undefined;
144
+ attempts?: undefined;
145
+ } | {
146
+ success: boolean;
147
+ type: string;
148
+ solved: boolean;
149
+ formResult: {
150
+ success: boolean;
151
+ filledCount: number;
152
+ filledFields: {
153
+ field: string;
154
+ selector: any;
155
+ matchScore: number;
156
+ }[];
157
+ unfilledFields: string[];
158
+ totalFields: number;
159
+ pageInfo: any;
160
+ } | null;
161
+ submitted: boolean;
162
+ submitMessage: any;
163
+ error?: undefined;
164
+ requiresVision?: undefined;
165
+ fallback?: undefined;
166
+ mcpContent?: undefined;
167
+ detectedType?: undefined;
168
+ method?: undefined;
169
+ attempts?: undefined;
170
+ } | {
171
+ success: boolean;
172
+ type: string;
173
+ solved: boolean;
174
+ formResult: {
175
+ success: boolean;
176
+ filledCount: number;
177
+ filledFields: {
178
+ field: string;
179
+ selector: any;
180
+ matchScore: number;
181
+ }[];
182
+ unfilledFields: string[];
183
+ totalFields: number;
184
+ pageInfo: any;
185
+ } | null;
186
+ error?: undefined;
187
+ requiresVision?: undefined;
188
+ fallback?: undefined;
189
+ mcpContent?: undefined;
190
+ detectedType?: undefined;
191
+ submitted?: undefined;
192
+ submitMessage?: undefined;
193
+ method?: undefined;
194
+ attempts?: undefined;
195
+ } | {
196
+ success: boolean;
197
+ type: string;
198
+ solved: boolean;
199
+ method: string;
200
+ attempts: number;
201
+ formResult: {
202
+ success: boolean;
203
+ filledCount: number;
204
+ filledFields: {
205
+ field: string;
206
+ selector: any;
207
+ matchScore: number;
208
+ }[];
209
+ unfilledFields: string[];
210
+ totalFields: number;
211
+ pageInfo: any;
212
+ } | null;
213
+ error?: undefined;
214
+ requiresVision?: undefined;
215
+ fallback?: undefined;
216
+ mcpContent?: undefined;
217
+ detectedType?: undefined;
218
+ submitted?: undefined;
219
+ submitMessage?: undefined;
220
+ }>;
221
+ //# sourceMappingURL=vision-captcha.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vision-captcha.d.ts","sourceRoot":"","sources":["../../../../src/mcp/handlers/vision-captcha.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtD,wBAAsB,YAAY,CAAC,MAAM,GAAE,kBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0PjE"}
@@ -0,0 +1,238 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.solveCaptcha = solveCaptcha;
4
+ const state_1 = require("./state");
5
+ const helpers_1 = require("./helpers");
6
+ async function solveCaptcha(params = {}) {
7
+ const { page } = (0, state_1.requireBrowser)();
8
+ const { type = 'auto', timeout = 30000, captchaSelector, inputSelector, refreshSelector, lang = 'eng', expectedLength, allowedChars, maxRetries = 3, iframe = null, iframeSelector = null, analyzeFirst = true, autoRetry = true, formData, formSelector, submit = false, humanLike = true, aiMatch = true, preferTextFallback = false, } = params;
9
+ let targetFrame = page;
10
+ if (iframe !== null && iframe !== undefined || iframeSelector) {
11
+ const resolved = await helpers_1.helpersHandlers._resolveIframeContext(page, iframe, iframeSelector);
12
+ if (resolved.success) {
13
+ targetFrame = resolved.targetFrame;
14
+ (0, state_1.notifyProgress)('solve_captcha', 'progress', `🎯 Targeting iframe ${iframe ?? iframeSelector}...`);
15
+ }
16
+ else {
17
+ return { success: false, error: resolved.error };
18
+ }
19
+ }
20
+ let formResult = null;
21
+ if (formData && Object.keys(formData).length > 0) {
22
+ (0, state_1.notifyProgress)('solve_captcha', 'started', `📋 Smart Form + Captcha Mode: Filling ${Object.keys(formData).length} fields...`);
23
+ formResult = await helpers_1.helpersHandlers._fillFormFields(targetFrame, formData, formSelector, humanLike, aiMatch);
24
+ }
25
+ else {
26
+ (0, state_1.notifyProgress)('solve_captcha', 'started', `🎯 100% Accuracy Mode: Solving ${type} captcha...`);
27
+ }
28
+ let detectedJsType = null;
29
+ if (type === 'auto') {
30
+ detectedJsType = await page.evaluate(() => {
31
+ if (document.title.includes('Just a moment') ||
32
+ document.querySelector('#challenge-stage') !== null ||
33
+ document.querySelector('.cf-turnstile') !== null ||
34
+ document.querySelector('input[name="cf-turnstile-response"]') !== null)
35
+ return 'turnstile';
36
+ return null;
37
+ });
38
+ if (detectedJsType)
39
+ (0, state_1.notifyProgress)('solve_captcha', 'progress', `🔍 Auto-detected JS captcha type: ${detectedJsType}`);
40
+ }
41
+ let pageAnalysis = null;
42
+ let detectedCaptchaSelector = captchaSelector;
43
+ let detectedInputSelector = inputSelector;
44
+ if (analyzeFirst) {
45
+ (0, state_1.notifyProgress)('solve_captcha', 'progress', '🔍 Analyzing page structure...');
46
+ pageAnalysis = await targetFrame.evaluate(() => {
47
+ const result = { captchas: [], captchaInputs: [], forms: [] };
48
+ const captchaSelectors = [
49
+ 'img[src*="captcha"]', 'img[alt*="captcha"]', 'img[id*="captcha"]',
50
+ '.captcha-image', '#captcha_image', '#captchaImg', '.captcha',
51
+ 'img[src*="Captcha"]', 'canvas[id*="captcha"]'
52
+ ];
53
+ captchaSelectors.forEach(sel => {
54
+ document.querySelectorAll(sel).forEach((el) => {
55
+ if (el.offsetParent !== null) {
56
+ result.captchas.push({
57
+ selector: el.id ? `#${el.id}` : sel, src: el.src || null,
58
+ width: el.width, height: el.height, isInsideForm: el.closest('form') !== null
59
+ });
60
+ }
61
+ });
62
+ });
63
+ const inputSelectors = [
64
+ 'input[name*="captcha"]', 'input[id*="captcha"]', '#fcaptcha_code',
65
+ 'input[placeholder*="captcha"]', 'input[placeholder*="Enter"]', '#captchaInput', '.captcha-input'
66
+ ];
67
+ inputSelectors.forEach(sel => {
68
+ document.querySelectorAll(sel).forEach((el) => {
69
+ if (el.offsetParent !== null && el.type !== 'hidden') {
70
+ result.captchaInputs.push({
71
+ selector: el.id ? `#${el.id}` : (el.name ? `[name="${el.name}"]` : sel),
72
+ placeholder: el.placeholder, maxLength: el.maxLength > 0 ? el.maxLength : null,
73
+ });
74
+ }
75
+ });
76
+ });
77
+ document.querySelectorAll('form').forEach(form => {
78
+ const hasCaptcha = form.querySelector('img[src*="captcha"], input[name*="captcha"]');
79
+ if (hasCaptcha) {
80
+ result.forms.push({
81
+ id: form.id || null, action: form.action,
82
+ submitBtn: form.querySelector('button[type="submit"], input[type="submit"]')?.id || null,
83
+ });
84
+ }
85
+ });
86
+ return result;
87
+ });
88
+ if (!captchaSelector && pageAnalysis.captchas.length > 0) {
89
+ detectedCaptchaSelector = pageAnalysis.captchas[0].selector;
90
+ (0, state_1.notifyProgress)('solve_captcha', 'progress', `📍 Auto-detected captcha: ${detectedCaptchaSelector}`);
91
+ }
92
+ if (!inputSelector && pageAnalysis.captchaInputs.length > 0) {
93
+ detectedInputSelector = pageAnalysis.captchaInputs[0].selector;
94
+ if (!expectedLength && pageAnalysis.captchaInputs[0].maxLength) {
95
+ params.expectedLength = pageAnalysis.captchaInputs[0].maxLength;
96
+ }
97
+ (0, state_1.notifyProgress)('solve_captcha', 'progress', `📍 Auto-detected input: ${detectedInputSelector}`);
98
+ }
99
+ }
100
+ if (type === 'text' || type === 'image' || (type === 'auto' && detectedCaptchaSelector && !detectedJsType)) {
101
+ if (!detectedCaptchaSelector)
102
+ return { success: false, error: 'captchaSelector not provided and could not auto-detect' };
103
+ const effectiveMaxRetries = autoRetry ? maxRetries : 1;
104
+ for (let attempt = 1; attempt <= effectiveMaxRetries; attempt++) {
105
+ try {
106
+ (0, state_1.notifyProgress)('solve_captcha', 'progress', `📸 Capturing CAPTCHA image... (attempt ${attempt}/${effectiveMaxRetries})`);
107
+ if (attempt > 1 && refreshSelector) {
108
+ try {
109
+ (0, state_1.notifyProgress)('solve_captcha', 'progress', '🔄 Refreshing CAPTCHA...');
110
+ await targetFrame.click(refreshSelector);
111
+ await new Promise(r => setTimeout(r, 1500));
112
+ }
113
+ catch (refreshErr) {
114
+ (0, state_1.notifyProgress)('solve_captcha', 'progress', `⚠️ Could not refresh captcha: ${refreshErr.message}`);
115
+ }
116
+ }
117
+ let targetHandle = null;
118
+ if (detectedInputSelector) {
119
+ try {
120
+ const containerHandle = await targetFrame.evaluateHandle((sel) => {
121
+ const input = document.querySelector(sel);
122
+ if (!input)
123
+ return null;
124
+ return input.closest('form') || input.closest('div.captcha-wrapper') || input.parentElement?.parentElement || input.parentElement;
125
+ }, detectedInputSelector);
126
+ if (containerHandle && await containerHandle.evaluate((n) => n !== null))
127
+ targetHandle = containerHandle.asElement();
128
+ }
129
+ catch (e) { }
130
+ }
131
+ if (!targetHandle && detectedCaptchaSelector) {
132
+ try {
133
+ targetHandle = await targetFrame.waitForSelector(detectedCaptchaSelector, { timeout: 5000 });
134
+ }
135
+ catch (e) { }
136
+ }
137
+ if (!targetHandle)
138
+ return { success: false, error: 'Could not find elements to capture' };
139
+ await targetHandle.evaluate((el) => el.scrollIntoView({ behavior: 'smooth', block: 'center' }));
140
+ await new Promise(r => setTimeout(r, 500));
141
+ let captchaImageBase64 = null;
142
+ try {
143
+ const captchaEl = await targetFrame.$(detectedCaptchaSelector);
144
+ if (captchaEl)
145
+ captchaImageBase64 = (await captchaEl.screenshot()).toString('base64');
146
+ }
147
+ catch (e) { }
148
+ const screenshotBase64 = (await targetHandle.screenshot()).toString('base64');
149
+ const langHint = lang !== 'eng' ? `\nध्यान दें: टेक्स्ट ${lang === 'hin' ? 'हिन्दी' : lang} भाषा में हो सकता है।` : '';
150
+ (0, state_1.notifyProgress)('solve_captcha', 'progress', '📤 CAPTCHA इमेज AI IDE एजेंट को भेज रहे हैं...');
151
+ const instructions = `[कार्रवाई आवश्यक: CAPTCHA हल करें]\n\nCAPTCHA इमेज सफलतापूर्वक कैप्चर की गई (संलग्न देखें)।${langHint}\n\n1. अपनी Vision क्षमता से इमेज में दिखे टेक्स्ट/अक्षर पढ़ें।\n2. टेक्स्ट मिलने पर \`type\` टूल से selector \`${detectedInputSelector || '<input_selector>'}\` में भरें।\n3. सबमिट अनुरोध: ${submit ? 'हाँ — फॉर्म सबमिट भी करें' : 'नहीं'}।\n\nनोट: अगर वर्तमान model image input support नहीं करता, तो vision-capable model use करें या \`preferTextFallback: true\` के साथ text-only guidance लें।\n\nइस CAPTCHA के लिए \`solve_captcha\` दोबारा न बुलाएं, इमेज पहले ही मिल चुकी है।`;
152
+ if (preferTextFallback) {
153
+ return {
154
+ success: false,
155
+ error: 'This captcha requires image interpretation. Text-only fallback guidance returned because preferTextFallback is enabled.',
156
+ requiresVision: true,
157
+ fallback: {
158
+ captchaSelector: detectedCaptchaSelector, inputSelector: detectedInputSelector || null, submit,
159
+ guidance: 'Use a vision-capable model to read the captcha image, or solve it manually and continue with type/click tools.'
160
+ },
161
+ formResult
162
+ };
163
+ }
164
+ return {
165
+ success: true,
166
+ mcpContent: [
167
+ { type: 'text', text: instructions },
168
+ { type: 'image', data: captchaImageBase64 || screenshotBase64, mimeType: 'image/png' }
169
+ ]
170
+ };
171
+ }
172
+ catch (err) {
173
+ (0, state_1.notifyProgress)('solve_captcha', 'error', `Vision capture error (attempt ${attempt}): ${err.message}`);
174
+ if (attempt >= effectiveMaxRetries)
175
+ return { success: false, error: err.message, type: 'vision_capture', formResult };
176
+ }
177
+ }
178
+ return { success: false, error: 'All captcha solving attempts exhausted', formResult };
179
+ }
180
+ const effectiveType = type !== 'auto' ? type : (detectedJsType || 'turnstile');
181
+ if (effectiveType === 'recaptcha' || effectiveType === 'hcaptcha') {
182
+ return { success: false, error: `${effectiveType} solving is not supported. Use a third-party service (e.g. 2Captcha, AntiCaptcha).`, detectedType: effectiveType, formResult };
183
+ }
184
+ const start = Date.now();
185
+ let attempts = 0;
186
+ while (Date.now() - start < timeout) {
187
+ attempts++;
188
+ if (attempts % 3 === 1) {
189
+ try {
190
+ await page.evaluate(() => {
191
+ const coordinates = [];
192
+ document.querySelectorAll('div').forEach(item => {
193
+ try {
194
+ const rect = item.getBoundingClientRect();
195
+ const css = window.getComputedStyle(item);
196
+ if (rect.width > 290 && rect.width <= 310 && !item.querySelector('*')) {
197
+ if (css.margin === '0px' && css.padding === '0px')
198
+ coordinates.push({ x: rect.x, y: rect.y, h: rect.height });
199
+ }
200
+ }
201
+ catch (_) { }
202
+ });
203
+ return coordinates;
204
+ }).then(async (coords) => {
205
+ for (const item of coords)
206
+ await page.mouse.click(item.x + 30, item.y + item.h / 2);
207
+ });
208
+ }
209
+ catch (_) { }
210
+ }
211
+ const turnstileToken = await page.evaluate(() => {
212
+ const input = document.querySelector('input[name="cf-turnstile-response"]');
213
+ return input && input.value ? input.value : null;
214
+ });
215
+ if (turnstileToken) {
216
+ (0, state_1.notifyProgress)('solve_captcha', 'completed', `✅ Turnstile solved after ${attempts} checks`, { type: 'turnstile', attempts });
217
+ if (submit) {
218
+ (0, state_1.notifyProgress)('solve_captcha', 'progress', '🚀 Submitting form...');
219
+ const submitResult = await helpers_1.helpersHandlers._submitForm(targetFrame);
220
+ return { success: true, type: 'turnstile', solved: true, formResult, submitted: submitResult.success, submitMessage: submitResult.message };
221
+ }
222
+ return { success: true, type: 'turnstile', solved: true, formResult };
223
+ }
224
+ const stillOnChallenge = await page.evaluate(() => {
225
+ return document.title.includes('Just a moment') || document.querySelector('#challenge-stage') !== null;
226
+ });
227
+ if (!stillOnChallenge && attempts > 3) {
228
+ (0, state_1.notifyProgress)('solve_captcha', 'completed', `✅ Cloudflare WAF challenge passed after ${attempts} checks (page redirected)`);
229
+ return { success: true, type: 'cloudflare_waf', solved: true, method: 'challenge_redirect', attempts, formResult };
230
+ }
231
+ if (attempts % 10 === 0)
232
+ (0, state_1.notifyProgress)('solve_captcha', 'progress', `Still solving... (${attempts} checks)`, { attempts });
233
+ await new Promise(r => setTimeout(r, 1000));
234
+ }
235
+ (0, state_1.notifyProgress)('solve_captcha', 'error', 'Captcha solving timeout');
236
+ return { success: false, error: 'Captcha solving timeout', type: effectiveType, formResult };
237
+ }
238
+ //# sourceMappingURL=vision-captcha.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vision-captcha.js","sourceRoot":"","sources":["../../../../src/mcp/handlers/vision-captcha.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import type { SeePageParams } from '../../types';
2
+ export declare function seePage(params?: SeePageParams): Promise<{
3
+ success: boolean;
4
+ error: string;
5
+ } | {
6
+ success: boolean;
7
+ url: any;
8
+ title: any;
9
+ viewport: any;
10
+ scroll: {
11
+ y: any;
12
+ pageHeight: any;
13
+ };
14
+ visibleInteractiveElements: number;
15
+ domText: string | undefined;
16
+ mutationsSinceLastCheck: any[] | undefined;
17
+ elements: any[];
18
+ savedTo: string | null;
19
+ mcpContent: ({
20
+ type: string;
21
+ data: string;
22
+ mimeType: string;
23
+ text?: undefined;
24
+ } | {
25
+ type: string;
26
+ text: string;
27
+ data?: undefined;
28
+ mimeType?: undefined;
29
+ })[];
30
+ error?: undefined;
31
+ }>;
32
+ //# sourceMappingURL=vision-see-page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vision-see-page.d.ts","sourceRoot":"","sources":["../../../../src/mcp/handlers/vision-see-page.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,wBAAsB,OAAO,CAAC,MAAM,GAAE,aAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8NvD"}