@cogitator-ai/browser 0.1.5 → 0.2.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 (107) hide show
  1. package/README.md +58 -32
  2. package/dist/index.d.ts +6 -4
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +3 -3
  5. package/dist/index.js.map +1 -1
  6. package/dist/session.d.ts +18 -0
  7. package/dist/session.d.ts.map +1 -1
  8. package/dist/session.js +201 -72
  9. package/dist/session.js.map +1 -1
  10. package/dist/stealth/evasions.d.ts +7 -1
  11. package/dist/stealth/evasions.d.ts.map +1 -1
  12. package/dist/stealth/evasions.js +159 -64
  13. package/dist/stealth/evasions.js.map +1 -1
  14. package/dist/stealth/human-like.d.ts +27 -3
  15. package/dist/stealth/human-like.d.ts.map +1 -1
  16. package/dist/stealth/human-like.js +76 -23
  17. package/dist/stealth/human-like.js.map +1 -1
  18. package/dist/stealth/index.d.ts +8 -2
  19. package/dist/stealth/index.d.ts.map +1 -1
  20. package/dist/stealth/index.js +10 -6
  21. package/dist/stealth/index.js.map +1 -1
  22. package/dist/stealth/user-agents.d.ts.map +1 -1
  23. package/dist/stealth/user-agents.js +33 -34
  24. package/dist/stealth/user-agents.js.map +1 -1
  25. package/dist/tools/extraction.d.ts.map +1 -1
  26. package/dist/tools/extraction.js +37 -27
  27. package/dist/tools/extraction.js.map +1 -1
  28. package/dist/tools/index.d.ts +1 -1
  29. package/dist/tools/index.d.ts.map +1 -1
  30. package/dist/tools/index.js +4 -3
  31. package/dist/tools/index.js.map +1 -1
  32. package/dist/tools/interaction.d.ts +10 -2
  33. package/dist/tools/interaction.d.ts.map +1 -1
  34. package/dist/tools/interaction.js +86 -42
  35. package/dist/tools/interaction.js.map +1 -1
  36. package/dist/tools/navigation.d.ts +6 -4
  37. package/dist/tools/navigation.d.ts.map +1 -1
  38. package/dist/tools/navigation.js +9 -4
  39. package/dist/tools/navigation.js.map +1 -1
  40. package/dist/tools/network.d.ts +29 -26
  41. package/dist/tools/network.d.ts.map +1 -1
  42. package/dist/tools/network.js +394 -102
  43. package/dist/tools/network.js.map +1 -1
  44. package/dist/tools/vision.d.ts +10 -6
  45. package/dist/tools/vision.d.ts.map +1 -1
  46. package/dist/tools/vision.js +66 -19
  47. package/dist/tools/vision.js.map +1 -1
  48. package/dist/utils/human-mode.d.ts +5 -0
  49. package/dist/utils/human-mode.d.ts.map +1 -0
  50. package/dist/utils/human-mode.js +10 -0
  51. package/dist/utils/human-mode.js.map +1 -0
  52. package/dist/utils/page-helpers.d.ts +1 -0
  53. package/dist/utils/page-helpers.d.ts.map +1 -1
  54. package/dist/utils/page-helpers.js +82 -22
  55. package/dist/utils/page-helpers.js.map +1 -1
  56. package/dist/utils/schemas.d.ts +7 -2
  57. package/dist/utils/schemas.d.ts.map +1 -1
  58. package/dist/utils/schemas.js +43 -16
  59. package/dist/utils/schemas.js.map +1 -1
  60. package/dist/utils/selectors.d.ts.map +1 -1
  61. package/dist/utils/selectors.js +27 -10
  62. package/dist/utils/selectors.js.map +1 -1
  63. package/package.json +4 -4
  64. package/dist/__tests__/browser-tools.test.d.ts +0 -2
  65. package/dist/__tests__/browser-tools.test.d.ts.map +0 -1
  66. package/dist/__tests__/browser-tools.test.js +0 -120
  67. package/dist/__tests__/browser-tools.test.js.map +0 -1
  68. package/dist/__tests__/extraction.test.d.ts +0 -2
  69. package/dist/__tests__/extraction.test.d.ts.map +0 -1
  70. package/dist/__tests__/extraction.test.js +0 -267
  71. package/dist/__tests__/extraction.test.js.map +0 -1
  72. package/dist/__tests__/interaction.test.d.ts +0 -2
  73. package/dist/__tests__/interaction.test.d.ts.map +0 -1
  74. package/dist/__tests__/interaction.test.js +0 -376
  75. package/dist/__tests__/interaction.test.js.map +0 -1
  76. package/dist/__tests__/navigation.test.d.ts +0 -2
  77. package/dist/__tests__/navigation.test.d.ts.map +0 -1
  78. package/dist/__tests__/navigation.test.js +0 -235
  79. package/dist/__tests__/navigation.test.js.map +0 -1
  80. package/dist/__tests__/network.test.d.ts +0 -2
  81. package/dist/__tests__/network.test.d.ts.map +0 -1
  82. package/dist/__tests__/network.test.js +0 -508
  83. package/dist/__tests__/network.test.js.map +0 -1
  84. package/dist/__tests__/page-helpers.test.d.ts +0 -2
  85. package/dist/__tests__/page-helpers.test.d.ts.map +0 -1
  86. package/dist/__tests__/page-helpers.test.js +0 -321
  87. package/dist/__tests__/page-helpers.test.js.map +0 -1
  88. package/dist/__tests__/schemas.test.d.ts +0 -2
  89. package/dist/__tests__/schemas.test.d.ts.map +0 -1
  90. package/dist/__tests__/schemas.test.js +0 -518
  91. package/dist/__tests__/schemas.test.js.map +0 -1
  92. package/dist/__tests__/selectors.test.d.ts +0 -2
  93. package/dist/__tests__/selectors.test.d.ts.map +0 -1
  94. package/dist/__tests__/selectors.test.js +0 -157
  95. package/dist/__tests__/selectors.test.js.map +0 -1
  96. package/dist/__tests__/session.test.d.ts +0 -2
  97. package/dist/__tests__/session.test.d.ts.map +0 -1
  98. package/dist/__tests__/session.test.js +0 -325
  99. package/dist/__tests__/session.test.js.map +0 -1
  100. package/dist/__tests__/stealth.test.d.ts +0 -2
  101. package/dist/__tests__/stealth.test.d.ts.map +0 -1
  102. package/dist/__tests__/stealth.test.js +0 -353
  103. package/dist/__tests__/stealth.test.js.map +0 -1
  104. package/dist/__tests__/vision.test.d.ts +0 -2
  105. package/dist/__tests__/vision.test.d.ts.map +0 -1
  106. package/dist/__tests__/vision.test.js +0 -226
  107. package/dist/__tests__/vision.test.js.map +0 -1
package/dist/session.js CHANGED
@@ -1,4 +1,4 @@
1
- import { applyStealthToContext, getRandomUserAgent } from './stealth/index.js';
1
+ import { applyStealthToContext, getStealthLaunchOptions } from './stealth/index.js';
2
2
  const DEFAULT_VIEWPORT = { width: 1280, height: 720 };
3
3
  const DEFAULT_TIMEOUT = 30_000;
4
4
  const DEFAULT_ACTION_TIMEOUT = 10_000;
@@ -9,13 +9,30 @@ const DEFAULT_STEALTH_CONFIG = {
9
9
  blockWebDriver: true,
10
10
  evasionScripts: [],
11
11
  };
12
+ function toPlaywrightCookies(cookies) {
13
+ return cookies.map((cookie) => cookie.domain && !cookie.path ? { ...cookie, path: '/' } : cookie);
14
+ }
15
+ function isCookieRecord(value) {
16
+ if (typeof value !== 'object' || value === null)
17
+ return false;
18
+ const record = value;
19
+ if (typeof record.name !== 'string' || typeof record.value !== 'string')
20
+ return false;
21
+ return typeof record.url === 'string' || typeof record.domain === 'string';
22
+ }
12
23
  export class BrowserSession {
13
24
  _config;
14
25
  _browser = null;
15
26
  _context = null;
16
27
  _pages = [];
17
28
  _activePageIndex = 0;
29
+ _starting = null;
30
+ _startListeners = new Set();
18
31
  constructor(config) {
32
+ const maxPages = config?.pool?.maxPages;
33
+ if (maxPages !== undefined && (!Number.isInteger(maxPages) || maxPages < 1)) {
34
+ throw new Error(`pool.maxPages must be a positive integer, got ${maxPages}`);
35
+ }
19
36
  this._config = {
20
37
  headless: true,
21
38
  browser: 'chromium',
@@ -28,6 +45,9 @@ export class BrowserSession {
28
45
  get config() {
29
46
  return this._config;
30
47
  }
48
+ get started() {
49
+ return this._context !== null;
50
+ }
31
51
  get stealthEnabled() {
32
52
  return !!this._config.stealth;
33
53
  }
@@ -36,109 +56,96 @@ export class BrowserSession {
36
56
  return null;
37
57
  if (this._config.stealth === true)
38
58
  return { ...DEFAULT_STEALTH_CONFIG };
39
- return this._config.stealth;
59
+ return { ...DEFAULT_STEALTH_CONFIG, ...this._config.stealth };
40
60
  }
41
61
  async ensureStarted() {
42
- if (!this._browser)
43
- await this.start();
62
+ if (this._context)
63
+ return;
64
+ if (this._starting) {
65
+ await this._starting;
66
+ return;
67
+ }
68
+ await this.start();
44
69
  }
45
70
  get page() {
71
+ this._pruneClosedPages();
46
72
  if (!this._pages.length) {
47
- throw new Error('BrowserSession not started');
48
- }
49
- if (this._pages[this._activePageIndex].isClosed()) {
50
- const openIdx = this._pages.findIndex((p) => !p.isClosed());
51
- if (openIdx === -1) {
52
- throw new Error('All pages are closed');
53
- }
54
- this._activePageIndex = openIdx;
73
+ throw new Error(this._context ? 'All pages are closed' : 'BrowserSession not started');
55
74
  }
56
75
  return this._pages[this._activePageIndex];
57
76
  }
58
77
  get tabs() {
78
+ this._pruneClosedPages();
59
79
  return [...this._pages];
60
80
  }
81
+ get activeTabIndex() {
82
+ this._pruneClosedPages();
83
+ return this._activePageIndex;
84
+ }
61
85
  get browser() {
62
86
  return this._browser;
63
87
  }
64
88
  get context() {
65
89
  return this._context;
66
90
  }
91
+ onStart(listener) {
92
+ this._startListeners.add(listener);
93
+ if (this._context)
94
+ listener(this._context);
95
+ return () => {
96
+ this._startListeners.delete(listener);
97
+ };
98
+ }
67
99
  async start() {
68
- if (this._browser) {
100
+ if (this._context || this._starting) {
69
101
  throw new Error('Session already started. Call close() first.');
70
102
  }
71
- const pw = await import('playwright');
72
- const launchOptions = {
73
- headless: this._config.headless,
74
- };
75
- if (this._config.proxy) {
76
- launchOptions.proxy = this._resolveProxy(this._config.proxy);
77
- }
78
- const browserType = this._config.browser ?? 'chromium';
79
- this._browser = await pw[browserType].launch(launchOptions);
80
- const contextOptions = {
81
- viewport: this._config.viewport,
82
- };
83
- if (this._config.locale)
84
- contextOptions.locale = this._config.locale;
85
- if (this._config.timezone)
86
- contextOptions.timezoneId = this._config.timezone;
87
- if (this._config.geolocation)
88
- contextOptions.geolocation = this._config.geolocation;
89
- if (this._config.userAgent) {
90
- contextOptions.userAgent = this._config.userAgent;
91
- }
92
- else if (this.stealthEnabled) {
93
- contextOptions.userAgent = getRandomUserAgent(browserType);
103
+ this._starting = this._launch();
104
+ try {
105
+ await this._starting;
94
106
  }
95
- this._context = await this._browser.newContext(contextOptions);
96
- if (this.stealthEnabled) {
97
- await applyStealthToContext(this._context, this.stealthConfig);
98
- }
99
- this._context.setDefaultNavigationTimeout(this._config.timeout);
100
- this._context.setDefaultTimeout(this._config.actionTimeout);
101
- const firstPage = await this._context.newPage();
102
- this._pages = [firstPage];
103
- this._activePageIndex = 0;
104
- if (this._config.cookies?.length) {
105
- await this._context.addCookies(this._config.cookies);
107
+ finally {
108
+ this._starting = null;
106
109
  }
107
110
  }
108
111
  async newTab(url) {
109
112
  if (!this._context) {
110
113
  throw new Error('BrowserSession not started');
111
114
  }
115
+ const maxPages = this._config.pool?.maxPages;
116
+ if (maxPages !== undefined && this.tabs.length >= maxPages) {
117
+ throw new Error(`Tab limit reached: pool.maxPages is ${maxPages}`);
118
+ }
112
119
  const page = await this._context.newPage();
120
+ this._trackPage(page);
121
+ this._activePageIndex = this._pages.indexOf(page);
113
122
  if (url) {
114
- await page.goto(url, { timeout: this._config.timeout });
123
+ try {
124
+ await page.goto(url, { timeout: this._config.timeout });
125
+ }
126
+ catch (error) {
127
+ this._untrackPage(page);
128
+ await page.close().catch(() => undefined);
129
+ throw error;
130
+ }
115
131
  }
116
- this._pages.push(page);
117
- this._activePageIndex = this._pages.length - 1;
118
132
  return page;
119
133
  }
120
134
  switchTab(index) {
121
- if (index < 0 || index >= this._pages.length) {
122
- throw new Error(`Tab index ${index} out of range [0..${this._pages.length - 1}]`);
123
- }
135
+ this._pruneClosedPages();
136
+ this._assertTabIndex(index);
124
137
  this._activePageIndex = index;
125
138
  }
126
139
  async closeTab(index) {
140
+ this._pruneClosedPages();
127
141
  const idx = index ?? this._activePageIndex;
128
142
  if (this._pages.length <= 1) {
129
143
  throw new Error('Cannot close the last tab');
130
144
  }
131
- if (idx < 0 || idx >= this._pages.length) {
132
- throw new Error(`Tab index ${idx} out of range [0..${this._pages.length - 1}]`);
133
- }
134
- await this._pages[idx].close();
135
- this._pages.splice(idx, 1);
136
- if (this._activePageIndex >= this._pages.length) {
137
- this._activePageIndex = this._pages.length - 1;
138
- }
139
- else if (this._activePageIndex > idx) {
140
- this._activePageIndex--;
141
- }
145
+ this._assertTabIndex(idx);
146
+ const page = this._pages[idx];
147
+ await page.close();
148
+ this._untrackPage(page);
142
149
  }
143
150
  async getCookies() {
144
151
  if (!this._context) {
@@ -150,7 +157,7 @@ export class BrowserSession {
150
157
  if (!this._context) {
151
158
  throw new Error('BrowserSession not started');
152
159
  }
153
- await this._context.addCookies(cookies);
160
+ await this._context.addCookies(toPlaywrightCookies(cookies));
154
161
  }
155
162
  async saveCookies(filePath) {
156
163
  const { writeFile } = await import('node:fs/promises');
@@ -161,21 +168,143 @@ export class BrowserSession {
161
168
  const { readFile } = await import('node:fs/promises');
162
169
  const data = await readFile(filePath, 'utf-8');
163
170
  const parsed = JSON.parse(data);
164
- const cookies = parsed.filter((c) => typeof c === 'object' &&
165
- c !== null &&
166
- typeof c.name === 'string' &&
167
- typeof c.value === 'string');
168
- await this.setCookies(cookies);
171
+ if (!Array.isArray(parsed)) {
172
+ throw new Error(`Cookie file ${filePath} must contain a JSON array of cookies`);
173
+ }
174
+ await this.setCookies(parsed.filter(isCookieRecord));
169
175
  }
170
176
  async close() {
171
- if (!this._browser)
177
+ if (this._starting) {
178
+ await this._starting.catch(() => undefined);
179
+ }
180
+ const browser = this._browser;
181
+ const context = this._context;
182
+ if (!browser && !context)
172
183
  return;
173
- await this._browser.close();
184
+ this._reset();
185
+ if (browser) {
186
+ await browser.close();
187
+ }
188
+ else if (context) {
189
+ await context.close();
190
+ }
191
+ }
192
+ async [Symbol.asyncDispose]() {
193
+ await this.close();
194
+ }
195
+ async _launch() {
196
+ const pw = await import('playwright');
197
+ const browserType = this._config.browser;
198
+ const launcher = pw[browserType];
199
+ const stealth = this.stealthConfig;
200
+ const launchOptions = { headless: this._config.headless };
201
+ if (this._config.proxy) {
202
+ launchOptions.proxy = this._resolveProxy(this._config.proxy);
203
+ }
204
+ const contextOptions = { viewport: this._config.viewport };
205
+ if (this._config.locale)
206
+ contextOptions.locale = this._config.locale;
207
+ if (this._config.timezone)
208
+ contextOptions.timezoneId = this._config.timezone;
209
+ if (this._config.geolocation) {
210
+ contextOptions.geolocation = this._config.geolocation;
211
+ contextOptions.permissions = ['geolocation'];
212
+ }
213
+ if (this._config.userAgent) {
214
+ contextOptions.userAgent = this._config.userAgent;
215
+ }
216
+ else if (stealth) {
217
+ Object.assign(contextOptions, getStealthLaunchOptions(stealth, browserType));
218
+ }
219
+ let browser = null;
220
+ let context = null;
221
+ try {
222
+ if (this._config.persistentContext) {
223
+ context = await launcher.launchPersistentContext(this._config.persistentContext, {
224
+ ...launchOptions,
225
+ ...contextOptions,
226
+ });
227
+ }
228
+ else {
229
+ browser = await launcher.launch(launchOptions);
230
+ context = await browser.newContext(contextOptions);
231
+ }
232
+ if (stealth) {
233
+ await applyStealthToContext(context, stealth, {
234
+ userAgent: contextOptions.userAgent,
235
+ locale: contextOptions.locale,
236
+ });
237
+ }
238
+ context.setDefaultNavigationTimeout(this._config.timeout);
239
+ context.setDefaultTimeout(this._config.actionTimeout);
240
+ if (this._config.cookies?.length) {
241
+ await context.addCookies(toPlaywrightCookies(this._config.cookies));
242
+ }
243
+ const existingPages = context.pages();
244
+ const initialPages = existingPages.length ? existingPages : [await context.newPage()];
245
+ this._browser = browser;
246
+ this._context = context;
247
+ this._pages = [...initialPages];
248
+ this._activePageIndex = 0;
249
+ const activeContext = context;
250
+ activeContext.on('page', (page) => {
251
+ if (this._context === activeContext)
252
+ this._trackPage(page);
253
+ });
254
+ activeContext.on('close', () => {
255
+ if (this._context === activeContext)
256
+ this._reset();
257
+ });
258
+ for (const listener of this._startListeners) {
259
+ listener(activeContext);
260
+ }
261
+ }
262
+ catch (error) {
263
+ this._reset();
264
+ if (browser) {
265
+ await browser.close().catch(() => undefined);
266
+ }
267
+ else if (context) {
268
+ await context.close().catch(() => undefined);
269
+ }
270
+ throw error;
271
+ }
272
+ }
273
+ _reset() {
174
274
  this._browser = null;
175
275
  this._context = null;
176
276
  this._pages = [];
177
277
  this._activePageIndex = 0;
178
278
  }
279
+ _trackPage(page) {
280
+ if (!this._pages.includes(page)) {
281
+ this._pages.push(page);
282
+ }
283
+ }
284
+ _untrackPage(page) {
285
+ const idx = this._pages.indexOf(page);
286
+ if (idx === -1)
287
+ return;
288
+ this._pages.splice(idx, 1);
289
+ if (this._activePageIndex > idx || this._activePageIndex >= this._pages.length) {
290
+ this._activePageIndex = Math.max(0, this._activePageIndex - 1);
291
+ }
292
+ }
293
+ _assertTabIndex(index) {
294
+ if (!Number.isInteger(index) || index < 0 || index >= this._pages.length) {
295
+ throw new Error(`Tab index ${index} out of range [0..${this._pages.length - 1}]`);
296
+ }
297
+ }
298
+ _pruneClosedPages() {
299
+ if (!this._pages.some((p) => p.isClosed()))
300
+ return;
301
+ const active = this._pages[this._activePageIndex];
302
+ this._pages = this._pages.filter((p) => !p.isClosed());
303
+ this._activePageIndex =
304
+ active && !active.isClosed()
305
+ ? this._pages.indexOf(active)
306
+ : Math.min(this._activePageIndex, Math.max(0, this._pages.length - 1));
307
+ }
179
308
  _resolveProxy(proxy) {
180
309
  if (typeof proxy === 'string') {
181
310
  return { server: proxy };
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,8 @@
1
- export declare function getEvasionScripts(): string[];
1
+ export interface EvasionScriptsOptions {
2
+ blockWebDriver?: boolean;
3
+ fingerprintRandomization?: boolean;
4
+ userAgent?: string;
5
+ locale?: string;
6
+ }
7
+ export declare function getEvasionScripts(options?: EvasionScriptsOptions): string[];
2
8
  //# sourceMappingURL=evasions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"evasions.d.ts","sourceRoot":"","sources":["../../src/stealth/evasions.ts"],"names":[],"mappings":"AAAA,wBAAgB,iBAAiB,IAAI,MAAM,EAAE,CAuF5C"}
1
+ {"version":3,"file":"evasions.d.ts","sourceRoot":"","sources":["../../src/stealth/evasions.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAmKD,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,qBAA0B,GAAG,MAAM,EAAE,CAsB/E"}
@@ -1,32 +1,132 @@
1
- export function getEvasionScripts() {
2
- return [
3
- `Object.defineProperty(navigator, 'webdriver', { get: () => false });`,
4
- `Object.defineProperty(navigator, 'plugins', {
5
- get: () => {
6
- const plugins = [
7
- { name: 'Chrome PDF Plugin', filename: 'internal-pdf-viewer', description: 'Portable Document Format' },
8
- { name: 'Chrome PDF Viewer', filename: 'mhjfbmdgcfjbbpaeojofohoefgiehjai', description: '' },
9
- { name: 'Native Client', filename: 'internal-nacl-plugin', description: '' },
10
- ];
11
- const pluginArray = Object.create(PluginArray.prototype);
12
- for (let i = 0; i < plugins.length; i++) {
13
- const p = Object.create(Plugin.prototype);
14
- Object.defineProperties(p, {
15
- name: { value: plugins[i].name },
16
- filename: { value: plugins[i].filename },
17
- description: { value: plugins[i].description },
18
- length: { value: 0 },
19
- });
20
- pluginArray[i] = p;
21
- }
22
- Object.defineProperty(pluginArray, 'length', { value: plugins.length });
23
- return pluginArray;
24
- }
25
- });`,
26
- `Object.defineProperty(navigator, 'languages', { get: () => ['en-US', 'en'] });`,
27
- `{
28
- const origToDataURL = HTMLCanvasElement.prototype.toDataURL;
29
- HTMLCanvasElement.prototype.toDataURL = function(...args) {
1
+ const WEBDRIVER_EVASION = `Object.defineProperty(Navigator.prototype, 'webdriver', { get: () => false, configurable: true });`;
2
+ const PLUGINS_EVASION = `Object.defineProperty(Navigator.prototype, 'plugins', {
3
+ configurable: true,
4
+ get: () => {
5
+ const pluginData = [
6
+ { name: 'Chrome PDF Plugin', filename: 'internal-pdf-viewer', description: 'Portable Document Format' },
7
+ { name: 'Chrome PDF Viewer', filename: 'mhjfbmdgcfjbbpaeojofohoefgiehjai', description: '' },
8
+ { name: 'Native Client', filename: 'internal-nacl-plugin', description: '' },
9
+ ];
10
+ const pluginArray = typeof PluginArray !== 'undefined' ? Object.create(PluginArray.prototype) : {};
11
+ for (let i = 0; i < pluginData.length; i++) {
12
+ const plugin = typeof Plugin !== 'undefined' ? Object.create(Plugin.prototype) : {};
13
+ Object.defineProperties(plugin, {
14
+ name: { value: pluginData[i].name },
15
+ filename: { value: pluginData[i].filename },
16
+ description: { value: pluginData[i].description },
17
+ length: { value: 0 },
18
+ });
19
+ pluginArray[i] = plugin;
20
+ }
21
+ Object.defineProperty(pluginArray, 'length', { value: pluginData.length });
22
+ return pluginArray;
23
+ }
24
+ });`;
25
+ function languagesForLocale(locale) {
26
+ if (!locale)
27
+ return ['en-US', 'en'];
28
+ const base = locale.split('-')[0];
29
+ return base && base !== locale ? [locale, base] : [locale];
30
+ }
31
+ function createLanguagesEvasion(locale) {
32
+ return `{
33
+ const languages = Object.freeze(${JSON.stringify(languagesForLocale(locale))});
34
+ Object.defineProperty(Navigator.prototype, 'languages', { get: () => languages, configurable: true });
35
+ }`;
36
+ }
37
+ function platformForUserAgent(userAgent) {
38
+ if (userAgent.includes('iPhone'))
39
+ return { platform: 'iPhone', uaPlatform: 'iOS' };
40
+ if (userAgent.includes('iPad'))
41
+ return { platform: 'iPad', uaPlatform: 'iOS' };
42
+ if (userAgent.includes('Windows'))
43
+ return { platform: 'Win32', uaPlatform: 'Windows' };
44
+ if (userAgent.includes('Android'))
45
+ return { platform: 'Linux armv8l', uaPlatform: 'Android' };
46
+ if (/Macintosh|Mac OS X/.test(userAgent))
47
+ return { platform: 'MacIntel', uaPlatform: 'macOS' };
48
+ if (/Linux|X11/.test(userAgent))
49
+ return { platform: 'Linux x86_64', uaPlatform: 'Linux' };
50
+ return null;
51
+ }
52
+ function createPlatformEvasion(userAgent) {
53
+ const target = platformForUserAgent(userAgent);
54
+ if (!target)
55
+ return null;
56
+ return `{
57
+ const platform = ${JSON.stringify(target.platform)};
58
+ const uaPlatform = ${JSON.stringify(target.uaPlatform)};
59
+ Object.defineProperty(Navigator.prototype, 'platform', { get: () => platform, configurable: true });
60
+ if (typeof NavigatorUAData !== 'undefined') {
61
+ Object.defineProperty(NavigatorUAData.prototype, 'platform', { get: () => uaPlatform, configurable: true });
62
+ const getHighEntropyValues = NavigatorUAData.prototype.getHighEntropyValues;
63
+ NavigatorUAData.prototype.getHighEntropyValues = function(hints) {
64
+ return getHighEntropyValues.call(this, hints).then((values) => ({ ...values, platform: uaPlatform }));
65
+ };
66
+ }
67
+ }`;
68
+ }
69
+ const WEBGL_EVASION = `{
70
+ const getParameter = WebGLRenderingContext.prototype.getParameter;
71
+ WebGLRenderingContext.prototype.getParameter = function(param) {
72
+ if (param === 37445) return 'Intel Inc.';
73
+ if (param === 37446) return 'Intel Iris OpenGL Engine';
74
+ return getParameter.call(this, param);
75
+ };
76
+ if (typeof WebGL2RenderingContext !== 'undefined') {
77
+ const getParameter2 = WebGL2RenderingContext.prototype.getParameter;
78
+ WebGL2RenderingContext.prototype.getParameter = function(param) {
79
+ if (param === 37445) return 'Intel Inc.';
80
+ if (param === 37446) return 'Intel Iris OpenGL Engine';
81
+ return getParameter2.call(this, param);
82
+ };
83
+ }
84
+ }`;
85
+ const CHROME_EVASION = `if (!window.chrome) {
86
+ window.chrome = {
87
+ runtime: { connect: () => {}, sendMessage: () => {} },
88
+ loadTimes: () => ({}),
89
+ csi: () => ({}),
90
+ };
91
+ }`;
92
+ const PERMISSIONS_EVASION = `if (typeof Permissions !== 'undefined') {
93
+ const origQuery = Permissions.prototype.query;
94
+ Permissions.prototype.query = function(desc) {
95
+ if (desc.name === 'notifications') {
96
+ const status = typeof PermissionStatus !== 'undefined'
97
+ ? Object.create(PermissionStatus.prototype)
98
+ : {};
99
+ Object.defineProperties(status, {
100
+ state: { value: 'denied', enumerable: true },
101
+ onchange: { value: null, enumerable: true },
102
+ });
103
+ return Promise.resolve(status);
104
+ }
105
+ return origQuery.call(this, desc);
106
+ };
107
+ }`;
108
+ function createCanvasEvasion() {
109
+ const seed = (Math.random() * 0xffffffff) >>> 0;
110
+ return `{
111
+ const origToDataURL = HTMLCanvasElement.prototype.toDataURL;
112
+ const canvasNoiseSeed = ${seed};
113
+ const createNoise = (seed) => {
114
+ let a = seed >>> 0;
115
+ return () => {
116
+ a |= 0;
117
+ a = (a + 0x6d2b79f5) | 0;
118
+ let t = Math.imul(a ^ (a >>> 15), 1 | a);
119
+ t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;
120
+ return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
121
+ };
122
+ };
123
+ const jitterChannel = (value, noise) => {
124
+ const jitter = Math.floor(noise() * 3) - 1;
125
+ return Math.min(255, Math.max(0, value + jitter));
126
+ };
127
+ HTMLCanvasElement.prototype.toDataURL = function(...args) {
128
+ try {
129
+ if (this.width > 0 && this.height > 0) {
30
130
  const context = this.getContext('2d');
31
131
  if (context) {
32
132
  const temp = document.createElement('canvas');
@@ -36,48 +136,43 @@ export function getEvasionScripts() {
36
136
  if (tempCtx) {
37
137
  tempCtx.drawImage(this, 0, 0);
38
138
  const imageData = tempCtx.getImageData(0, 0, temp.width, temp.height);
139
+ const noise = createNoise(
140
+ canvasNoiseSeed ^ Math.imul(this.width, 0x9e3779b9) ^ Math.imul(this.height, 0x85ebca6b)
141
+ );
39
142
  for (let i = 0; i < imageData.data.length; i += 4) {
40
- imageData.data[i] ^= 1;
143
+ imageData.data[i] = jitterChannel(imageData.data[i], noise);
144
+ imageData.data[i + 1] = jitterChannel(imageData.data[i + 1], noise);
145
+ imageData.data[i + 2] = jitterChannel(imageData.data[i + 2], noise);
41
146
  }
42
147
  tempCtx.putImageData(imageData, 0, 0);
43
148
  return origToDataURL.apply(temp, args);
44
149
  }
45
150
  }
46
- return origToDataURL.apply(this, args);
47
- };
48
- }`,
49
- `{
50
- const getParameter = WebGLRenderingContext.prototype.getParameter;
51
- WebGLRenderingContext.prototype.getParameter = function(param) {
52
- if (param === 37445) return 'Intel Inc.';
53
- if (param === 37446) return 'Intel Iris OpenGL Engine';
54
- return getParameter.call(this, param);
55
- };
56
- if (typeof WebGL2RenderingContext !== 'undefined') {
57
- const getParameter2 = WebGL2RenderingContext.prototype.getParameter;
58
- WebGL2RenderingContext.prototype.getParameter = function(param) {
59
- if (param === 37445) return 'Intel Inc.';
60
- if (param === 37446) return 'Intel Iris OpenGL Engine';
61
- return getParameter2.call(this, param);
62
- };
63
151
  }
64
- }`,
65
- `if (!window.chrome) {
66
- window.chrome = {
67
- runtime: { connect: () => {}, sendMessage: () => {} },
68
- loadTimes: () => ({}),
69
- csi: () => ({}),
70
- };
71
- }`,
72
- `{
73
- const origQuery = Permissions.prototype.query;
74
- Permissions.prototype.query = function(desc) {
75
- if (desc.name === 'notifications') {
76
- return Promise.resolve({ state: 'denied', onchange: null });
77
- }
78
- return origQuery.call(this, desc);
79
- };
80
- }`,
152
+ } catch {
153
+ }
154
+ return origToDataURL.apply(this, args);
155
+ };
156
+ }`;
157
+ }
158
+ export function getEvasionScripts(options = {}) {
159
+ const includeWebdriver = options.blockWebDriver !== false;
160
+ const includeFingerprint = options.fingerprintRandomization !== false;
161
+ const evasions = [
162
+ { kind: 'webdriver', script: WEBDRIVER_EVASION },
163
+ { kind: 'fingerprint', script: PLUGINS_EVASION },
164
+ { kind: 'fingerprint', script: createLanguagesEvasion(options.locale) },
165
+ { kind: 'fingerprint', script: createCanvasEvasion() },
166
+ { kind: 'fingerprint', script: WEBGL_EVASION },
167
+ { kind: 'fingerprint', script: CHROME_EVASION },
168
+ { kind: 'webdriver', script: PERMISSIONS_EVASION },
81
169
  ];
170
+ const platformEvasion = options.userAgent ? createPlatformEvasion(options.userAgent) : null;
171
+ if (platformEvasion) {
172
+ evasions.push({ kind: 'fingerprint', script: platformEvasion });
173
+ }
174
+ return evasions
175
+ .filter((evasion) => (evasion.kind === 'webdriver' ? includeWebdriver : includeFingerprint))
176
+ .map((evasion) => evasion.script);
82
177
  }
83
178
  //# sourceMappingURL=evasions.js.map