@framers/agentos-ext-stealth-browser 1.0.0 → 1.1.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 (39) hide show
  1. package/LICENSE +96 -21
  2. package/dist/StealthBrowserService.d.ts +101 -0
  3. package/dist/StealthBrowserService.d.ts.map +1 -0
  4. package/dist/StealthBrowserService.js +558 -0
  5. package/dist/StealthBrowserService.js.map +1 -0
  6. package/dist/index.d.ts +115 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +139 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/tools/click.d.ts +39 -0
  11. package/dist/tools/click.d.ts.map +1 -0
  12. package/dist/tools/click.js +72 -0
  13. package/dist/tools/click.js.map +1 -0
  14. package/dist/tools/navigate.d.ts +43 -0
  15. package/dist/tools/navigate.d.ts.map +1 -0
  16. package/dist/tools/navigate.js +142 -0
  17. package/dist/tools/navigate.js.map +1 -0
  18. package/dist/tools/scrape.d.ts +40 -0
  19. package/dist/tools/scrape.d.ts.map +1 -0
  20. package/dist/tools/scrape.js +88 -0
  21. package/dist/tools/scrape.js.map +1 -0
  22. package/dist/tools/screenshot.d.ts +41 -0
  23. package/dist/tools/screenshot.d.ts.map +1 -0
  24. package/dist/tools/screenshot.js +85 -0
  25. package/dist/tools/screenshot.js.map +1 -0
  26. package/dist/tools/snapshot.d.ts +39 -0
  27. package/dist/tools/snapshot.d.ts.map +1 -0
  28. package/dist/tools/snapshot.js +68 -0
  29. package/dist/tools/snapshot.js.map +1 -0
  30. package/dist/tools/type.d.ts +41 -0
  31. package/dist/tools/type.d.ts.map +1 -0
  32. package/dist/tools/type.js +88 -0
  33. package/dist/tools/type.js.map +1 -0
  34. package/dist/types.d.ts +175 -0
  35. package/dist/types.d.ts.map +1 -0
  36. package/dist/types.js +7 -0
  37. package/dist/types.js.map +1 -0
  38. package/manifest.json +3 -3
  39. package/package.json +10 -6
@@ -0,0 +1,558 @@
1
+ // @ts-nocheck
2
+ /**
3
+ * Stealth Browser Service
4
+ *
5
+ * Manages browser lifecycle using puppeteer-extra with the stealth plugin
6
+ * to bypass anti-bot detection on protected sites (Amazon, eBay, LinkedIn, etc.).
7
+ *
8
+ * The stealth plugin handles:
9
+ * - navigator.webdriver removal
10
+ * - chrome.runtime injection
11
+ * - iframe contentWindow proxy
12
+ * - media codecs spoofing
13
+ * - navigator.plugins injection
14
+ * - WebGL vendor spoofing
15
+ * - navigator.languages injection
16
+ * - window.chrome injection
17
+ * - Permission API spoofing
18
+ *
19
+ * @module @framers/agentos-ext-stealth-browser
20
+ */
21
+ // Dynamic imports for puppeteer-extra and plugins
22
+ let puppeteerExtra = null;
23
+ let StealthPlugin = null;
24
+ let cheerio = null;
25
+ /**
26
+ * Lazy load puppeteer-extra
27
+ */
28
+ async function getPuppeteerExtra() {
29
+ if (!puppeteerExtra) {
30
+ puppeteerExtra = (await import('puppeteer-extra')).default;
31
+ }
32
+ return puppeteerExtra;
33
+ }
34
+ /**
35
+ * Lazy load stealth plugin
36
+ */
37
+ async function getStealthPlugin() {
38
+ if (!StealthPlugin) {
39
+ const mod = await import('puppeteer-extra-plugin-stealth');
40
+ StealthPlugin = mod.default || mod;
41
+ }
42
+ return StealthPlugin;
43
+ }
44
+ /**
45
+ * Lazy load cheerio for HTML parsing
46
+ */
47
+ async function getCheerio() {
48
+ if (!cheerio) {
49
+ cheerio = await import('cheerio');
50
+ }
51
+ return cheerio;
52
+ }
53
+ /**
54
+ * Realistic user agents for rotation.
55
+ * Chrome 120+ on macOS and Windows to match common browser fingerprints.
56
+ */
57
+ const USER_AGENTS = [
58
+ // Chrome 120 on macOS Sonoma
59
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
60
+ // Chrome 121 on macOS Sonoma
61
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36',
62
+ // Chrome 122 on macOS Sonoma
63
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36',
64
+ // Chrome 120 on Windows 11
65
+ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
66
+ // Chrome 121 on Windows 11
67
+ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36',
68
+ // Chrome 122 on Windows 11
69
+ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36',
70
+ // Chrome 123 on macOS
71
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36',
72
+ // Chrome 123 on Windows
73
+ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36',
74
+ ];
75
+ /**
76
+ * Select a random user agent from the pool
77
+ */
78
+ function getRandomUserAgent() {
79
+ return USER_AGENTS[Math.floor(Math.random() * USER_AGENTS.length)];
80
+ }
81
+ /**
82
+ * Stealth browser service for managing anti-detection browser automation.
83
+ *
84
+ * Uses puppeteer-extra with the stealth plugin for comprehensive
85
+ * anti-fingerprinting and bot-detection bypass.
86
+ */
87
+ export class StealthBrowserService {
88
+ browser = null;
89
+ page = null;
90
+ config;
91
+ consoleMessages = [];
92
+ stealthInitialized = false;
93
+ constructor(config = {}) {
94
+ this.config = {
95
+ headless: true,
96
+ timeout: 30000,
97
+ viewport: { width: 1920, height: 1080 },
98
+ enableEvasions: true,
99
+ ...config,
100
+ };
101
+ }
102
+ /**
103
+ * Initialize stealth browser instance.
104
+ *
105
+ * Applies the stealth plugin to puppeteer-extra, then launches with
106
+ * extra anti-detection Chromium flags and a realistic user agent.
107
+ */
108
+ async initialize() {
109
+ if (this.browser)
110
+ return;
111
+ const pptr = await getPuppeteerExtra();
112
+ const StealthPluginFactory = await getStealthPlugin();
113
+ // Apply stealth plugin once
114
+ if (!this.stealthInitialized && this.config.enableEvasions !== false) {
115
+ pptr.use(StealthPluginFactory());
116
+ this.stealthInitialized = true;
117
+ }
118
+ // Find Chrome/Chromium executable
119
+ const executablePath = this.config.executablePath || this.findChromePath();
120
+ // Select user agent (custom or random from pool)
121
+ const userAgent = this.config.userAgent || getRandomUserAgent();
122
+ this.browser = await pptr.launch({
123
+ headless: this.config.headless ? 'new' : false,
124
+ executablePath,
125
+ args: [
126
+ // Sandbox / stability
127
+ '--no-sandbox',
128
+ '--disable-setuid-sandbox',
129
+ '--disable-dev-shm-usage',
130
+ // Anti-detection flags
131
+ '--disable-blink-features=AutomationControlled',
132
+ '--disable-infobars',
133
+ // Realistic window size
134
+ '--window-size=1920,1080',
135
+ // Reduce fingerprint surface
136
+ '--disable-features=IsolateOrigins,site-per-process',
137
+ '--disable-web-security',
138
+ '--allow-running-insecure-content',
139
+ // GPU / rendering
140
+ '--disable-gpu',
141
+ '--disable-software-rasterizer',
142
+ ],
143
+ ignoreDefaultArgs: ['--enable-automation'],
144
+ });
145
+ this.page = await this.browser.newPage();
146
+ // Set viewport
147
+ if (this.config.viewport) {
148
+ await this.page.setViewport(this.config.viewport);
149
+ }
150
+ // Set realistic user agent
151
+ await this.page.setUserAgent(userAgent);
152
+ // Remove webdriver property via page evaluate
153
+ await this.page.evaluateOnNewDocument(() => {
154
+ // Override navigator.webdriver
155
+ Object.defineProperty(navigator, 'webdriver', {
156
+ get: () => undefined,
157
+ });
158
+ // Override navigator.plugins to report realistic plugins
159
+ Object.defineProperty(navigator, 'plugins', {
160
+ get: () => [
161
+ { name: 'Chrome PDF Plugin', filename: 'internal-pdf-viewer' },
162
+ { name: 'Chrome PDF Viewer', filename: 'mhjfbmdgcfjbbpaeojofohoefgiehjai' },
163
+ { name: 'Native Client', filename: 'internal-nacl-plugin' },
164
+ ],
165
+ });
166
+ // Override navigator.languages
167
+ Object.defineProperty(navigator, 'languages', {
168
+ get: () => ['en-US', 'en'],
169
+ });
170
+ // Ensure chrome runtime exists (some detectors check for it)
171
+ if (!window.chrome) {
172
+ window.chrome = {
173
+ runtime: {
174
+ onMessage: { addListener: () => { }, removeListener: () => { } },
175
+ sendMessage: () => { },
176
+ connect: () => { },
177
+ },
178
+ };
179
+ }
180
+ // Override permissions API to report realistic values
181
+ const originalQuery = window.navigator.permissions?.query;
182
+ if (originalQuery) {
183
+ window.navigator.permissions.query = (parameters) => {
184
+ if (parameters.name === 'notifications') {
185
+ return Promise.resolve({ state: Notification.permission });
186
+ }
187
+ return originalQuery(parameters);
188
+ };
189
+ }
190
+ });
191
+ // Set extra HTTP headers for stealth
192
+ await this.page.setExtraHTTPHeaders({
193
+ 'Accept-Language': 'en-US,en;q=0.9',
194
+ 'Accept-Encoding': 'gzip, deflate, br',
195
+ 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8',
196
+ 'Sec-Fetch-Dest': 'document',
197
+ 'Sec-Fetch-Mode': 'navigate',
198
+ 'Sec-Fetch-Site': 'none',
199
+ 'Sec-Fetch-User': '?1',
200
+ 'Upgrade-Insecure-Requests': '1',
201
+ });
202
+ // Capture console messages
203
+ this.page.on('console', (msg) => {
204
+ this.consoleMessages.push(`[${msg.type()}] ${msg.text()}`);
205
+ // Keep only last 100 messages
206
+ if (this.consoleMessages.length > 100) {
207
+ this.consoleMessages.shift();
208
+ }
209
+ });
210
+ }
211
+ /**
212
+ * Find Chrome executable path based on OS
213
+ */
214
+ findChromePath() {
215
+ const platform = process.platform;
216
+ if (platform === 'win32') {
217
+ return 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe';
218
+ }
219
+ else if (platform === 'darwin') {
220
+ return '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome';
221
+ }
222
+ else {
223
+ // Linux
224
+ return '/usr/bin/google-chrome';
225
+ }
226
+ }
227
+ /**
228
+ * Navigate to a URL with stealth protections active.
229
+ */
230
+ async navigate(url, options) {
231
+ await this.initialize();
232
+ const startTime = Date.now();
233
+ this.consoleMessages = [];
234
+ try {
235
+ const response = await this.page.goto(url, {
236
+ waitUntil: options?.waitFor || 'networkidle2',
237
+ timeout: this.config.timeout,
238
+ });
239
+ const loadTime = Date.now() - startTime;
240
+ const [title, html, text] = await Promise.all([
241
+ this.page.title(),
242
+ this.page.content(),
243
+ this.page.evaluate(() => document.body?.innerText || ''),
244
+ ]);
245
+ return {
246
+ url: this.page.url(),
247
+ status: response?.status() || 200,
248
+ title,
249
+ html,
250
+ text,
251
+ loadTime,
252
+ consoleMessages: [...this.consoleMessages],
253
+ };
254
+ }
255
+ catch (error) {
256
+ const loadTime = Date.now() - startTime;
257
+ // Try to get whatever loaded before the timeout
258
+ let title = '';
259
+ let text = '';
260
+ try {
261
+ title = await this.page.title();
262
+ text = await this.page.evaluate(() => document.body?.innerText || '');
263
+ }
264
+ catch {
265
+ // Page may be in a broken state
266
+ }
267
+ return {
268
+ url: this.page.url() || url,
269
+ status: 0,
270
+ title,
271
+ text,
272
+ loadTime,
273
+ consoleMessages: [
274
+ ...this.consoleMessages,
275
+ `[error] Navigation failed: ${error.message}`,
276
+ ],
277
+ };
278
+ }
279
+ }
280
+ /**
281
+ * Scrape content using CSS selector
282
+ */
283
+ async scrape(selector) {
284
+ await this.initialize();
285
+ try {
286
+ const $ = (await getCheerio()).load(await this.page.content());
287
+ const elements = [];
288
+ $(selector).each((_, el) => {
289
+ const $el = $(el);
290
+ const attributes = {};
291
+ const attribs = el.attribs || {};
292
+ for (const [key, value] of Object.entries(attribs)) {
293
+ attributes[key] = String(value);
294
+ }
295
+ elements.push({
296
+ tag: el.tagName || 'unknown',
297
+ text: $el.text().trim(),
298
+ html: $el.html() || '',
299
+ attributes,
300
+ href: $el.attr('href'),
301
+ src: $el.attr('src'),
302
+ });
303
+ });
304
+ return {
305
+ selector,
306
+ count: elements.length,
307
+ elements,
308
+ };
309
+ }
310
+ catch (error) {
311
+ return {
312
+ selector,
313
+ count: 0,
314
+ elements: [],
315
+ };
316
+ }
317
+ }
318
+ /**
319
+ * Click on an element with optional human-like delay
320
+ */
321
+ async click(selector, options) {
322
+ await this.initialize();
323
+ try {
324
+ // Wait for element to be visible before clicking
325
+ await this.page.waitForSelector(selector, {
326
+ visible: true,
327
+ timeout: this.config.timeout,
328
+ });
329
+ const beforeUrl = this.page.url();
330
+ if (options?.waitForNavigation) {
331
+ await Promise.all([
332
+ this.page.waitForNavigation({ timeout: this.config.timeout }),
333
+ this.page.click(selector),
334
+ ]);
335
+ }
336
+ else {
337
+ await this.page.click(selector);
338
+ }
339
+ const afterUrl = this.page.url();
340
+ return {
341
+ success: true,
342
+ element: selector,
343
+ newUrl: beforeUrl !== afterUrl ? afterUrl : undefined,
344
+ contentChanged: beforeUrl !== afterUrl,
345
+ };
346
+ }
347
+ catch (error) {
348
+ return {
349
+ success: false,
350
+ element: selector,
351
+ contentChanged: false,
352
+ };
353
+ }
354
+ }
355
+ /**
356
+ * Type text into an input with optional human-like keystroke delay
357
+ */
358
+ async type(selector, text, options) {
359
+ await this.initialize();
360
+ try {
361
+ // Wait for element to be visible
362
+ await this.page.waitForSelector(selector, {
363
+ visible: true,
364
+ timeout: this.config.timeout,
365
+ });
366
+ if (options?.clear) {
367
+ await this.page.click(selector, { clickCount: 3 }); // Select all
368
+ await this.page.keyboard.press('Backspace');
369
+ }
370
+ // Default to a small human-like delay between keystrokes if none specified
371
+ const delay = options?.delay ?? 50;
372
+ await this.page.type(selector, text, { delay });
373
+ return {
374
+ success: true,
375
+ element: selector,
376
+ text,
377
+ };
378
+ }
379
+ catch (error) {
380
+ return {
381
+ success: false,
382
+ element: selector,
383
+ text,
384
+ };
385
+ }
386
+ }
387
+ /**
388
+ * Take a screenshot
389
+ */
390
+ async screenshot(options) {
391
+ await this.initialize();
392
+ const format = options?.format || 'png';
393
+ const screenshotOptions = {
394
+ type: format,
395
+ encoding: 'base64',
396
+ fullPage: options?.fullPage || false,
397
+ };
398
+ if (format === 'jpeg' || format === 'webp') {
399
+ screenshotOptions.quality = options?.quality || 80;
400
+ }
401
+ let data;
402
+ if (options?.selector) {
403
+ const element = await this.page.$(options.selector);
404
+ if (!element) {
405
+ throw new Error(`Element not found: ${options.selector}`);
406
+ }
407
+ data = await element.screenshot(screenshotOptions);
408
+ }
409
+ else {
410
+ data = await this.page.screenshot(screenshotOptions);
411
+ }
412
+ const viewport = this.page.viewport();
413
+ return {
414
+ data,
415
+ format,
416
+ width: viewport?.width || 1920,
417
+ height: viewport?.height || 1080,
418
+ size: Math.ceil((data.length * 3) / 4),
419
+ };
420
+ }
421
+ /**
422
+ * Get page snapshot with accessibility tree
423
+ */
424
+ async getSnapshot() {
425
+ await this.initialize();
426
+ const [url, title, accessibilityTree] = await Promise.all([
427
+ this.page.url(),
428
+ this.page.title(),
429
+ this.page.evaluate(() => {
430
+ const elements = [];
431
+ const links = [];
432
+ const forms = [];
433
+ const interactable = [];
434
+ let refCounter = 0;
435
+ function generateRef() {
436
+ return `e${refCounter++}`;
437
+ }
438
+ // Get all interactive elements
439
+ const interactiveElements = document.querySelectorAll('a, button, input, select, textarea, [role="button"], [role="link"], [tabindex]');
440
+ interactiveElements.forEach((el) => {
441
+ const ref = generateRef();
442
+ const rect = el.getBoundingClientRect();
443
+ const visible = rect.width > 0 && rect.height > 0;
444
+ const label = el.innerText?.slice(0, 100) ||
445
+ el.getAttribute('aria-label') ||
446
+ el.getAttribute('title') ||
447
+ el.getAttribute('placeholder') ||
448
+ el.getAttribute('name') ||
449
+ '';
450
+ const element = {
451
+ ref,
452
+ type: el.tagName.toLowerCase(),
453
+ label: label.trim(),
454
+ role: el.getAttribute('role') || undefined,
455
+ visible,
456
+ };
457
+ if (el.tagName === 'INPUT' || el.tagName === 'TEXTAREA') {
458
+ element.value = el.value;
459
+ }
460
+ elements.push(element);
461
+ // Track links
462
+ if (el.tagName === 'A') {
463
+ links.push({
464
+ text: label.trim().slice(0, 100),
465
+ href: el.href,
466
+ ref,
467
+ });
468
+ }
469
+ // Track interactable
470
+ if (['BUTTON', 'A', 'INPUT', 'SELECT', 'TEXTAREA'].includes(el.tagName)) {
471
+ interactable.push({
472
+ ref,
473
+ type: el.tagName.toLowerCase(),
474
+ label: label.trim().slice(0, 50),
475
+ });
476
+ }
477
+ });
478
+ // Get forms
479
+ document.querySelectorAll('form').forEach((form) => {
480
+ const fields = [];
481
+ form.querySelectorAll('input, select, textarea').forEach((field) => {
482
+ fields.push(field.getAttribute('name') ||
483
+ field.getAttribute('id') ||
484
+ field.tagName.toLowerCase());
485
+ });
486
+ forms.push({
487
+ id: form.id || undefined,
488
+ action: form.action || undefined,
489
+ fields,
490
+ });
491
+ });
492
+ return { elements, links, forms, interactable };
493
+ }),
494
+ ]);
495
+ return {
496
+ url,
497
+ title,
498
+ elements: accessibilityTree.elements,
499
+ links: accessibilityTree.links,
500
+ forms: accessibilityTree.forms,
501
+ interactable: accessibilityTree.interactable,
502
+ };
503
+ }
504
+ /**
505
+ * Execute arbitrary JavaScript in page context
506
+ */
507
+ async evaluate(fn) {
508
+ await this.initialize();
509
+ return this.page.evaluate(fn);
510
+ }
511
+ /**
512
+ * Wait for selector to appear
513
+ */
514
+ async waitForSelector(selector, timeout) {
515
+ await this.initialize();
516
+ try {
517
+ await this.page.waitForSelector(selector, {
518
+ timeout: timeout || this.config.timeout,
519
+ });
520
+ return true;
521
+ }
522
+ catch {
523
+ return false;
524
+ }
525
+ }
526
+ /**
527
+ * Get current URL
528
+ */
529
+ async getCurrentUrl() {
530
+ await this.initialize();
531
+ return this.page.url();
532
+ }
533
+ /**
534
+ * Go back in history
535
+ */
536
+ async goBack() {
537
+ await this.initialize();
538
+ await this.page.goBack({ waitUntil: 'networkidle2' });
539
+ }
540
+ /**
541
+ * Go forward in history
542
+ */
543
+ async goForward() {
544
+ await this.initialize();
545
+ await this.page.goForward({ waitUntil: 'networkidle2' });
546
+ }
547
+ /**
548
+ * Close browser and clean up resources
549
+ */
550
+ async close() {
551
+ if (this.browser) {
552
+ await this.browser.close();
553
+ this.browser = null;
554
+ this.page = null;
555
+ }
556
+ }
557
+ }
558
+ //# sourceMappingURL=StealthBrowserService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StealthBrowserService.js","sourceRoot":"","sources":["../src/StealthBrowserService.ts"],"names":[],"mappings":"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"}