brave-real-browser-mcp-server 2.14.8 → 2.14.10

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.
@@ -1,4 +1,3 @@
1
- // @ts-nocheck
2
1
  import { getPageInstance } from '../browser-manager.js';
3
2
  /**
4
3
  * Keyword Search - Advanced keyword search in page content
@@ -19,7 +18,7 @@ export async function handleKeywordSearch(args) {
19
18
  keywordList.forEach(keyword => {
20
19
  const flags = caseSens ? 'g' : 'gi';
21
20
  const pattern = whole ? `\\b${keyword}\\b` : keyword;
22
- const regex = new RegExp(pattern, flags);
21
+ //const regex = new RegExp(pattern, flags);
23
22
  const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT, null);
24
23
  let node;
25
24
  while (node = walker.nextNode()) {
@@ -61,7 +60,7 @@ export async function handleKeywordSearch(args) {
61
60
  matchesByKeyword: grouped,
62
61
  allMatches: allMatches.slice(0, 100) // Limit to first 100
63
62
  };
64
- }, keywords, caseSensitive, wholeWord, context);
63
+ }, Array.isArray(keywords) ? keywords : [keywords], caseSensitive, wholeWord, context);
65
64
  const resultText = `✅ Keyword Search Results\n\nTotal Matches: ${results.totalMatches}\n\nKeywords searched: ${Array.isArray(keywords) ? keywords.join(', ') : keywords}\n\nMatches by keyword:\n${JSON.stringify(results.matchesByKeyword, null, 2)}\n\nFirst 100 matches:\n${JSON.stringify(results.allMatches, null, 2)}`;
66
65
  return {
67
66
  content: [
@@ -74,12 +73,7 @@ export async function handleKeywordSearch(args) {
74
73
  }
75
74
  catch (error) {
76
75
  return {
77
- content: [
78
- {
79
- type: 'text',
80
- text: `❌ Keyword search failed: ${error.message}`,
81
- },
82
- ],
76
+ content: [{ type: 'text', text: `❌ Keyword search failed: ${error.message}` }],
83
77
  isError: true,
84
78
  };
85
79
  }
@@ -109,14 +103,16 @@ export async function handleRegexPatternMatcher(args) {
109
103
  const regex = new RegExp(pat, flgs);
110
104
  const matches = [];
111
105
  let match;
112
- while ((match = regex.exec(content)) !== null) {
106
+ // Safety check for infinite loop
107
+ let count = 0;
108
+ while ((match = regex.exec(content)) !== null && count < 1000) {
109
+ count++;
113
110
  matches.push({
114
111
  match: match[0],
115
112
  index: match.index,
116
113
  groups: match.slice(1),
117
114
  context: content.substring(Math.max(0, match.index - 50), Math.min(content.length, match.index + match[0].length + 50))
118
115
  });
119
- // Prevent infinite loop for zero-width matches
120
116
  if (match.index === regex.lastIndex) {
121
117
  regex.lastIndex++;
122
118
  }
@@ -130,24 +126,11 @@ export async function handleRegexPatternMatcher(args) {
130
126
  }, pattern, flags, selector || '');
131
127
  const resultText = `✅ Regex Pattern Matcher Results\n\nPattern: ${results.pattern}\nFlags: ${results.flags}\nTotal Matches: ${results.totalMatches}\n\nMatches (first 100):\n${JSON.stringify(results.matches, null, 2)}`;
132
128
  return {
133
- content: [
134
- {
135
- type: 'text',
136
- text: resultText,
137
- },
138
- ],
129
+ content: [{ type: 'text', text: resultText }],
139
130
  };
140
131
  }
141
132
  catch (error) {
142
- return {
143
- content: [
144
- {
145
- type: 'text',
146
- text: `❌ Regex pattern matcher failed: ${error.message}`,
147
- },
148
- ],
149
- isError: true,
150
- };
133
+ return { content: [{ type: 'text', text: `❌ Regex pattern matcher failed: ${error.message}` }], isError: true };
151
134
  }
152
135
  }
153
136
  /**
@@ -205,24 +188,11 @@ export async function handleXPathSupport(args) {
205
188
  }, xpath, returnType);
206
189
  const resultText = `✅ XPath Query Results\n\nXPath: ${xpath}\nElements Found: ${results.count}\n\nElements:\n${JSON.stringify(results.elements, null, 2)}`;
207
190
  return {
208
- content: [
209
- {
210
- type: 'text',
211
- text: resultText,
212
- },
213
- ],
191
+ content: [{ type: 'text', text: resultText }],
214
192
  };
215
193
  }
216
194
  catch (error) {
217
- return {
218
- content: [
219
- {
220
- type: 'text',
221
- text: `❌ XPath query failed: ${error.message}`,
222
- },
223
- ],
224
- isError: true,
225
- };
195
+ return { content: [{ type: 'text', text: `❌ XPath query failed: ${error.message}` }], isError: true };
226
196
  }
227
197
  }
228
198
  /**
@@ -285,24 +255,11 @@ export async function handleAdvancedCSSSelectors(args) {
285
255
  }, selector, operation, returnType);
286
256
  const resultText = `✅ Advanced CSS Selector Results\n\nSelector: ${selector}\nOperation: ${operation}\nElements Found: ${results.count}\n\nElements (first 10):\n${JSON.stringify(results.elements.slice(0, 10), null, 2)}`;
287
257
  return {
288
- content: [
289
- {
290
- type: 'text',
291
- text: resultText,
292
- },
293
- ],
258
+ content: [{ type: 'text', text: resultText }],
294
259
  };
295
260
  }
296
261
  catch (error) {
297
- return {
298
- content: [
299
- {
300
- type: 'text',
301
- text: `❌ CSS selector query failed: ${error.message}`,
302
- },
303
- ],
304
- isError: true,
305
- };
262
+ return { content: [{ type: 'text', text: `❌ CSS selector query failed: ${error.message}` }], isError: true };
306
263
  }
307
264
  }
308
265
  /**
@@ -419,23 +376,10 @@ export async function handleVisualElementFinder(args) {
419
376
  }, criteria);
420
377
  const resultText = `✅ Visual Element Finder Results\n\nCriteria: ${JSON.stringify(criteria, null, 2)}\nTotal Matches: ${results.totalMatches}\n\nTop Matches:\n${JSON.stringify(results.topMatches, null, 2)}`;
421
378
  return {
422
- content: [
423
- {
424
- type: 'text',
425
- text: resultText,
426
- },
427
- ],
379
+ content: [{ type: 'text', text: resultText }],
428
380
  };
429
381
  }
430
382
  catch (error) {
431
- return {
432
- content: [
433
- {
434
- type: 'text',
435
- text: `❌ Visual element finder failed: ${error.message}`,
436
- },
437
- ],
438
- isError: true,
439
- };
383
+ return { content: [{ type: 'text', text: `❌ Visual element finder failed: ${error.message}` }], isError: true };
440
384
  }
441
385
  }
package/dist/index.js CHANGED
@@ -25,19 +25,19 @@ import { handleClick, handleType, handleSolveCaptcha, handleRandomScroll, } from
25
25
  import { handleGetContent, handleFindSelector, } from "./handlers/content-handlers.js";
26
26
  import { handleSaveContentAsMarkdown } from "./handlers/file-handlers.js";
27
27
  // Import new data extraction handlers
28
- import { handleScrapeTable, handleExtractList, handleExtractJSON, handleScrapeMetaTags, handleExtractSchema, } from "./handlers/data-extraction-handlers.js";
28
+ import { handleExtractList, handleExtractJSON, handleScrapeMetaTags, handleExtractSchema, } from "./handlers/data-extraction-handlers.js";
29
29
  // Import multi-element handlers
30
- import { handleBatchElementScraper, handleNestedDataExtraction, handleAttributeHarvester, handleImageScraper, handleLinkHarvester, handleMediaExtractor, } from "./handlers/multi-element-handlers.js";
30
+ import { handleBatchElementScraper, handleNestedDataExtraction, handleAttributeHarvester, handleLinkHarvester, handleMediaExtractor, } from "./handlers/multi-element-handlers.js";
31
31
  // Import pagination handlers
32
- import { handleAutoPagination, handleInfiniteScroll, handleMultiPageScraper, handleSitemapParser, handleBreadcrumbNavigator, } from "./handlers/pagination-handlers.js";
32
+ import { handleMultiPageScraper, handleBreadcrumbNavigator, } from "./handlers/pagination-handlers.js";
33
33
  // Import data processing handlers
34
- import { handleSmartTextCleaner, handleHTMLToText, handleContactExtractor, handleSchemaValidator, handleRequiredFieldsChecker, handleDuplicateRemover, } from "./handlers/data-processing-handlers.js";
34
+ import { handleHTMLToText, handleDuplicateRemover, } from "./handlers/data-processing-handlers.js";
35
35
  // Import AI-powered handlers
36
- import { handleSmartSelectorGenerator, handleContentClassification, handleSentimentAnalysis, handleSummaryGenerator, handleTranslationSupport, } from "./handlers/ai-powered-handlers.js";
36
+ import { handleSmartSelectorGenerator, handleContentClassification, } from "./handlers/ai-powered-handlers.js";
37
37
  // Import search & filter handlers
38
38
  import { handleKeywordSearch, handleRegexPatternMatcher, handleXPathSupport, handleAdvancedCSSSelectors, handleVisualElementFinder, } from "./handlers/search-filter-handlers.js";
39
39
  // Import data quality handlers
40
- import { handleDataDeduplication, handleMissingDataHandler, handleDataTypeValidator, handleOutlierDetection, handleConsistencyChecker, } from "./handlers/data-quality-handlers.js";
40
+ import { handleDataDeduplication, handleDataTypeValidator, handleOutlierDetection, } from "./handlers/data-quality-handlers.js";
41
41
  // Import captcha handlers
42
42
  import { handleOCREngine, handleAudioCaptchaSolver, handlePuzzleCaptchaHandler, } from "./handlers/captcha-handlers.js";
43
43
  // Import visual tools handlers
@@ -45,7 +45,7 @@ import { handleFullPageScreenshot, handleElementScreenshot, handleVideoRecording
45
45
  // Import smart data extractors
46
46
  import { handleHtmlElementsExtractor, handleTagsFinder, handleLinksFinder, handleXpathLinks, handleAjaxExtractor, handleFetchXHR, handleNetworkRecorder, handleRegexPatternFinder, handleIframeExtractor, handleEmbedPageExtractor, handleImageExtractorAdvanced, handleVideoSourceExtractor, handleVideoPlayerExtractor, handleVideoPlayerHosterFinder, handleOriginalVideoHosterFinder, handleUrlRedirectTracer, handleUserAgentExtractor, } from "./handlers/smart-data-extractors.js";
47
47
  // Import dynamic session handlers
48
- import { handleShadowDOMExtractor, handleCookieManager, handleSessionPersistence, handleFormAutoFill, handleAjaxContentWaiter, handleModalPopupHandler, handleLoginSessionManager, } from "./handlers/dynamic-session-handlers.js";
48
+ import { handleShadowDOMExtractor, handleCookieManager, handleFormAutoFill, handleAjaxContentWaiter, } from "./handlers/dynamic-session-handlers.js";
49
49
  // Import monitoring & reporting handlers
50
50
  import { handleProgressTracker, handleDataQualityMetrics, } from "./handlers/monitoring-reporting-handlers.js";
51
51
  // Import advanced video & media handlers
@@ -138,9 +138,6 @@ export async function executeToolByName(name, args) {
138
138
  result = await handleSaveContentAsMarkdown(args);
139
139
  break;
140
140
  // Smart Data Extractors
141
- case TOOL_NAMES.SCRAPE_TABLE:
142
- result = await handleScrapeTable(args || {});
143
- break;
144
141
  case TOOL_NAMES.EXTRACT_LIST:
145
142
  result = await handleExtractList(args || {});
146
143
  break;
@@ -164,9 +161,6 @@ export async function executeToolByName(name, args) {
164
161
  result = await handleAttributeHarvester(args);
165
162
  break;
166
163
  // Content Type Specific
167
- case TOOL_NAMES.IMAGE_SCRAPER:
168
- result = await handleImageScraper(args || {});
169
- break;
170
164
  case TOOL_NAMES.LINK_HARVESTER:
171
165
  result = await handleLinkHarvester(args || {});
172
166
  break;
@@ -174,38 +168,17 @@ export async function executeToolByName(name, args) {
174
168
  result = await handleMediaExtractor(args || {});
175
169
  break;
176
170
  // Pagination Tools
177
- case TOOL_NAMES.AUTO_PAGINATION:
178
- result = await handleAutoPagination(args || {});
179
- break;
180
- case TOOL_NAMES.INFINITE_SCROLL:
181
- result = await handleInfiniteScroll(args || {});
182
- break;
171
+ // Pagination Tools
183
172
  case TOOL_NAMES.MULTI_PAGE_SCRAPER:
184
173
  result = await handleMultiPageScraper(args);
185
174
  break;
186
- case TOOL_NAMES.SITEMAP_PARSER:
187
- result = await handleSitemapParser(args || {});
188
- break;
189
175
  case TOOL_NAMES.BREADCRUMB_NAVIGATOR:
190
176
  result = await handleBreadcrumbNavigator(args || {});
191
177
  break;
192
178
  // Data Processing Tools
193
- case TOOL_NAMES.SMART_TEXT_CLEANER:
194
- result = await handleSmartTextCleaner(args);
195
- break;
196
179
  case TOOL_NAMES.HTML_TO_TEXT:
197
180
  result = await handleHTMLToText(args);
198
181
  break;
199
- case TOOL_NAMES.CONTACT_EXTRACTOR:
200
- result = await handleContactExtractor(args);
201
- break;
202
- // Data Validation Tools
203
- case TOOL_NAMES.SCHEMA_VALIDATOR:
204
- result = await handleSchemaValidator(args);
205
- break;
206
- case TOOL_NAMES.REQUIRED_FIELDS_CHECKER:
207
- result = await handleRequiredFieldsChecker(args);
208
- break;
209
182
  case TOOL_NAMES.DUPLICATE_REMOVER:
210
183
  result = await handleDuplicateRemover(args);
211
184
  break;
@@ -216,15 +189,6 @@ export async function executeToolByName(name, args) {
216
189
  case TOOL_NAMES.CONTENT_CLASSIFICATION:
217
190
  result = await handleContentClassification(args);
218
191
  break;
219
- case TOOL_NAMES.SENTIMENT_ANALYSIS:
220
- result = await handleSentimentAnalysis(args);
221
- break;
222
- case TOOL_NAMES.SUMMARY_GENERATOR:
223
- result = await handleSummaryGenerator(args);
224
- break;
225
- case TOOL_NAMES.TRANSLATION_SUPPORT:
226
- result = await handleTranslationSupport(args);
227
- break;
228
192
  // Search & Filter Tools
229
193
  case TOOL_NAMES.KEYWORD_SEARCH:
230
194
  result = await handleKeywordSearch(args);
@@ -245,18 +209,12 @@ export async function executeToolByName(name, args) {
245
209
  case TOOL_NAMES.DATA_DEDUPLICATION:
246
210
  result = await handleDataDeduplication(args);
247
211
  break;
248
- case TOOL_NAMES.MISSING_DATA_HANDLER:
249
- result = await handleMissingDataHandler(args);
250
- break;
251
212
  case TOOL_NAMES.DATA_TYPE_VALIDATOR:
252
213
  result = await handleDataTypeValidator(args);
253
214
  break;
254
215
  case TOOL_NAMES.OUTLIER_DETECTION:
255
216
  result = await handleOutlierDetection(args);
256
217
  break;
257
- case TOOL_NAMES.CONSISTENCY_CHECKER:
258
- result = await handleConsistencyChecker(args);
259
- break;
260
218
  // Advanced Captcha Handling
261
219
  case TOOL_NAMES.OCR_ENGINE:
262
220
  result = await handleOCREngine(args);
@@ -339,21 +297,12 @@ export async function executeToolByName(name, args) {
339
297
  case "cookie_manager":
340
298
  result = await handleCookieManager(args);
341
299
  break;
342
- case "session_persistence":
343
- result = await handleSessionPersistence(args);
344
- break;
345
300
  case "form_auto_fill":
346
301
  result = await handleFormAutoFill(args);
347
302
  break;
348
303
  case "ajax_content_waiter":
349
304
  result = await handleAjaxContentWaiter(args);
350
305
  break;
351
- case "modal_popup_handler":
352
- result = await handleModalPopupHandler(args);
353
- break;
354
- case "login_session_manager":
355
- result = await handleLoginSessionManager(args);
356
- break;
357
306
  // Monitoring & Reporting
358
307
  case "progress_tracker":
359
308
  result = await handleProgressTracker(args || {});
@@ -8,8 +8,18 @@ import { handleNavigate, handleWait } from './handlers/navigation-handlers.js';
8
8
  import { handleClick, handleType, handlePressKey, handleSolveCaptcha, handleRandomScroll } from './handlers/interaction-handlers.js';
9
9
  import { handleGetContent, handleFindSelector } from './handlers/content-handlers.js';
10
10
  import { handleSaveContentAsMarkdown } from './handlers/file-handlers.js';
11
- import { handleScrapeTable, handleExtractList, handleExtractJSON, handleScrapeMetaTags, handleExtractSchema } from './handlers/data-extraction-handlers.js';
12
- import { handleBatchElementScraper, handleNestedDataExtraction, handleAttributeHarvester, handleImageScraper, handleLinkHarvester, handleMediaExtractor, } from './handlers/multi-element-handlers.js';
11
+ import { handleExtractList, handleExtractJSON, handleScrapeMetaTags, handleExtractSchema } from './handlers/data-extraction-handlers.js';
12
+ import { handleBatchElementScraper, handleNestedDataExtraction, handleAttributeHarvester, handleLinkHarvester, handleMediaExtractor, } from './handlers/multi-element-handlers.js';
13
+ import { handleMultiPageScraper, handleBreadcrumbNavigator } from './handlers/advanced-scraping-handlers.js';
14
+ import { handleHtmlElementsExtractor, handleTagsFinder, handleLinksFinder, handleXpathLinks, handleShadowDomExtractor, handleIframeExtractor, handleEmbedPageExtractor } from './handlers/dom-handlers.js';
15
+ import { handleNetworkRecorder, handleAjaxExtractor, handleFetchXhr, handleApiFinder } from './handlers/network-handlers.js';
16
+ import { handleHtmlToText, handleDuplicateRemover } from './handlers/data-transform-handlers.js';
17
+ import { handleConsistencyChecker } from './handlers/data-quality-handlers.js';
18
+ import { handleSmartSelectorGenerator, handleContentClassification, handleSentimentAnalysis, handleSummaryGenerator, handleTranslationSupport } from './handlers/ai-powered-handlers.js';
19
+ import { handleKeywordSearch, handleRegexPatternMatcher, handleXPathSupport, handleAdvancedCSSSelectors, handleVisualElementFinder } from './handlers/search-filter-handlers.js';
20
+ import { handleVideoSourceExtractor, handleVideoPlayerFinder, handleStreamDetector, handleRedirectTracer, handleVideoDownloadLinkFinder } from './handlers/advanced-video-media-handlers.js';
21
+ import { handleOCREngine, handleAudioCaptchaSolver, handlePuzzleCaptchaHandler } from './handlers/captcha-handlers.js';
22
+ import { handleAdvancedVideoExtraction, handleDeobfuscateJS, handleMultiLayerRedirectTrace, handleAdProtectionDetector } from './handlers/advanced-extraction-handlers.js';
13
23
  export async function createMcpServer() {
14
24
  const server = new Server(SERVER_INFO, { capabilities: CAPABILITIES });
15
25
  // Register initialize handler
@@ -76,9 +86,6 @@ export async function createMcpServer() {
76
86
  result = await handleSaveContentAsMarkdown(args);
77
87
  break;
78
88
  // Smart Data Extractors
79
- case TOOL_NAMES.SCRAPE_TABLE:
80
- result = await handleScrapeTable(args || {});
81
- break;
82
89
  case TOOL_NAMES.EXTRACT_LIST:
83
90
  result = await handleExtractList(args || {});
84
91
  break;
@@ -102,15 +109,135 @@ export async function createMcpServer() {
102
109
  result = await handleAttributeHarvester(args);
103
110
  break;
104
111
  // Content Type Specific
105
- case TOOL_NAMES.IMAGE_SCRAPER:
106
- result = await handleImageScraper(args || {});
107
- break;
108
112
  case TOOL_NAMES.LINK_HARVESTER:
109
113
  result = await handleLinkHarvester(args || {});
110
114
  break;
111
115
  case TOOL_NAMES.MEDIA_EXTRACTOR:
112
116
  result = await handleMediaExtractor(args || {});
113
117
  break;
118
+ // Phase 1: Pagination & Navigation
119
+ case TOOL_NAMES.MULTI_PAGE_SCRAPER:
120
+ result = await handleMultiPageScraper(args);
121
+ break;
122
+ case TOOL_NAMES.BREADCRUMB_NAVIGATOR:
123
+ result = await handleBreadcrumbNavigator(args);
124
+ break;
125
+ // Phase 1: DOM & HTML
126
+ case TOOL_NAMES.HTML_ELEMENTS_EXTRACTOR:
127
+ result = await handleHtmlElementsExtractor(args);
128
+ break;
129
+ case TOOL_NAMES.TAGS_FINDER:
130
+ result = await handleTagsFinder(args);
131
+ break;
132
+ case TOOL_NAMES.LINKS_FINDER:
133
+ result = await handleLinksFinder(args);
134
+ break;
135
+ case TOOL_NAMES.XPATH_LINKS:
136
+ result = await handleXpathLinks(args);
137
+ break;
138
+ case TOOL_NAMES.SHADOW_DOM_EXTRACTOR:
139
+ result = await handleShadowDomExtractor(args);
140
+ break;
141
+ case TOOL_NAMES.IFRAME_EXTRACTOR:
142
+ result = await handleIframeExtractor();
143
+ break;
144
+ case TOOL_NAMES.EMBED_PAGE_EXTRACTOR:
145
+ result = await handleEmbedPageExtractor();
146
+ break;
147
+ // Phase 1: Network Tools
148
+ case TOOL_NAMES.NETWORK_RECORDER:
149
+ result = await handleNetworkRecorder(args);
150
+ break;
151
+ case TOOL_NAMES.AJAX_EXTRACTOR:
152
+ result = await handleAjaxExtractor(args);
153
+ break;
154
+ case TOOL_NAMES.FETCH_XHR:
155
+ result = await handleFetchXhr(args);
156
+ break;
157
+ case TOOL_NAMES.API_FINDER:
158
+ result = await handleApiFinder(args);
159
+ break;
160
+ // Phase 1: Data Transform
161
+ case TOOL_NAMES.HTML_TO_TEXT:
162
+ result = await handleHtmlToText(args);
163
+ break;
164
+ case TOOL_NAMES.DUPLICATE_REMOVER:
165
+ result = await handleDuplicateRemover(args);
166
+ break;
167
+ // Phase 2: AI & Smart Features
168
+ case TOOL_NAMES.SMART_SELECTOR_GENERATOR:
169
+ result = await handleSmartSelectorGenerator(args);
170
+ break;
171
+ case TOOL_NAMES.CONTENT_CLASSIFICATION:
172
+ result = await handleContentClassification(args);
173
+ break;
174
+ case TOOL_NAMES.SENTIMENT_ANALYSIS:
175
+ result = await handleSentimentAnalysis(args);
176
+ break;
177
+ case TOOL_NAMES.SUMMARY_GENERATOR:
178
+ result = await handleSummaryGenerator(args);
179
+ break;
180
+ case TOOL_NAMES.TRANSLATION_SUPPORT:
181
+ result = await handleTranslationSupport(args);
182
+ break;
183
+ // Phase 2: Search & Filter
184
+ case TOOL_NAMES.KEYWORD_SEARCH:
185
+ result = await handleKeywordSearch(args);
186
+ break;
187
+ case TOOL_NAMES.REGEX_PATTERN_MATCHER:
188
+ result = await handleRegexPatternMatcher(args);
189
+ break;
190
+ case TOOL_NAMES.XPATH_SUPPORT:
191
+ result = await handleXPathSupport(args);
192
+ break;
193
+ case TOOL_NAMES.ADVANCED_CSS_SELECTORS:
194
+ result = await handleAdvancedCSSSelectors(args);
195
+ break;
196
+ case TOOL_NAMES.VISUAL_ELEMENT_FINDER:
197
+ result = await handleVisualElementFinder(args);
198
+ break;
199
+ // Phase 3: Media & Video
200
+ case TOOL_NAMES.VIDEO_SOURCE_EXTRACTOR:
201
+ result = await handleVideoSourceExtractor(args);
202
+ break;
203
+ case TOOL_NAMES.VIDEO_PLAYER_FINDER:
204
+ result = await handleVideoPlayerFinder(args);
205
+ break;
206
+ case TOOL_NAMES.STREAM_DETECTOR:
207
+ result = await handleStreamDetector(args);
208
+ break;
209
+ case TOOL_NAMES.REDIRECT_TRACER:
210
+ result = await handleRedirectTracer(args);
211
+ break;
212
+ case TOOL_NAMES.VIDEO_DOWNLOAD_LINK_FINDER:
213
+ result = await handleVideoDownloadLinkFinder(args);
214
+ break;
215
+ // Phase 4: Captcha & Security
216
+ case TOOL_NAMES.OCR_ENGINE:
217
+ result = await handleOCREngine(args);
218
+ break;
219
+ case TOOL_NAMES.AUDIO_CAPTCHA_SOLVER:
220
+ result = await handleAudioCaptchaSolver(args);
221
+ break;
222
+ case TOOL_NAMES.PUZZLE_CAPTCHA_HANDLER:
223
+ result = await handlePuzzleCaptchaHandler(args);
224
+ break;
225
+ // Advanced Extraction (Security/Bypass)
226
+ case "advanced_video_extraction":
227
+ result = await handleAdvancedVideoExtraction(args);
228
+ break;
229
+ case "deobfuscate_js":
230
+ result = await handleDeobfuscateJS(args);
231
+ break;
232
+ case "multi_layer_redirect_trace":
233
+ result = await handleMultiLayerRedirectTrace(args);
234
+ break;
235
+ case "ad_protection_detector":
236
+ result = await handleAdProtectionDetector(args);
237
+ break;
238
+ case "consistency_checker":
239
+ result = await handleConsistencyChecker(args);
240
+ break;
114
241
  default:
115
242
  throw new Error(`Unknown tool: ${name}`);
116
243
  }