cloakbrowser 0.3.5 → 0.3.7
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.
- package/README.md +57 -14
- package/dist/playwright.d.ts +5 -0
- package/dist/playwright.d.ts.map +1 -1
- package/dist/playwright.js +26 -4
- package/dist/playwright.js.map +1 -1
- package/dist/puppeteer.d.ts.map +1 -1
- package/dist/puppeteer.js +25 -5
- package/dist/puppeteer.js.map +1 -1
- package/dist/types.d.ts +13 -3
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -9,13 +9,14 @@
|
|
|
9
9
|
|
|
10
10
|
**Stealth Chromium that passes every bot detection test.**
|
|
11
11
|
|
|
12
|
-
Drop-in Playwright/Puppeteer replacement. Same API — just swap the import.
|
|
12
|
+
Drop-in Playwright/Puppeteer replacement. Same API, same code — just swap the import. **3 lines of code, 30 seconds to unblock.**
|
|
13
13
|
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
14
|
+
- **26 source-level C++ patches** — canvas, WebGL, audio, fonts, GPU, screen, automation signals
|
|
15
|
+
- **0.9 reCAPTCHA v3 score** — human-level, server-verified
|
|
16
|
+
- **Passes Cloudflare Turnstile**, FingerprintJS, BrowserScan — tested against 30+ detection sites
|
|
17
|
+
- **`npm install cloakbrowser`** — binary auto-downloads, auto-updates, zero config
|
|
18
|
+
- **Free and open source** — no subscriptions, no usage limits
|
|
19
|
+
- **Works with any framework** — also tested with Selenium, undetected-chromedriver, browser-use, Crawl4AI, and agent-browser
|
|
19
20
|
|
|
20
21
|
## Install
|
|
21
22
|
|
|
@@ -67,6 +68,11 @@ const browser = await launch({
|
|
|
67
68
|
proxy: 'http://user:pass@proxy:8080',
|
|
68
69
|
});
|
|
69
70
|
|
|
71
|
+
// With proxy object (bypass, separate auth fields)
|
|
72
|
+
const browser = await launch({
|
|
73
|
+
proxy: { server: 'http://proxy:8080', bypass: '.google.com', username: 'user', password: 'pass' },
|
|
74
|
+
});
|
|
75
|
+
|
|
70
76
|
// Headed mode (visible browser window)
|
|
71
77
|
const browser = await launch({ headless: false });
|
|
72
78
|
|
|
@@ -92,10 +98,10 @@ const context = await launchContext({
|
|
|
92
98
|
userAgent: 'Custom UA',
|
|
93
99
|
viewport: { width: 1920, height: 1080 },
|
|
94
100
|
locale: 'en-US',
|
|
95
|
-
|
|
101
|
+
timezone: 'America/New_York',
|
|
96
102
|
});
|
|
97
103
|
|
|
98
|
-
// Persistent profile —
|
|
104
|
+
// Persistent profile — stay logged in, bypass incognito detection, load extensions
|
|
99
105
|
const ctx = await launchPersistentContext({
|
|
100
106
|
userDataDir: './chrome-profile',
|
|
101
107
|
headless: false,
|
|
@@ -156,6 +162,9 @@ if (newVersion) console.log(`Updated to ${newVersion}`);
|
|
|
156
162
|
| **BrowserScan** | DETECTED | **NORMAL** (4/4) |
|
|
157
163
|
| **bot.incolumitas.com** | 13 fails | **1 fail** |
|
|
158
164
|
| `navigator.webdriver` | `true` | **`false`** |
|
|
165
|
+
| CDP detection | Detected | **Not detected** |
|
|
166
|
+
| TLS fingerprint | Mismatch | **Identical to Chrome** |
|
|
167
|
+
| | | **Tested against 30+ detection sites** |
|
|
159
168
|
|
|
160
169
|
## Configuration
|
|
161
170
|
|
|
@@ -181,12 +190,12 @@ const page = await browser.newPage();
|
|
|
181
190
|
|
|
182
191
|
## Platforms
|
|
183
192
|
|
|
184
|
-
| Platform | Status |
|
|
185
|
-
|
|
186
|
-
| Linux x86_64 | ✅
|
|
187
|
-
| macOS arm64 (Apple Silicon) | ✅
|
|
188
|
-
| macOS x86_64 (Intel) | ✅
|
|
189
|
-
| Windows x86_64 | ✅
|
|
193
|
+
| Platform | Chromium | Patches | Status |
|
|
194
|
+
|---|---|---|---|
|
|
195
|
+
| Linux x86_64 | 145 | 26 | ✅ Latest |
|
|
196
|
+
| macOS arm64 (Apple Silicon) | 145 | 26 | ✅ Latest |
|
|
197
|
+
| macOS x86_64 (Intel) | 145 | 26 | ✅ Latest |
|
|
198
|
+
| Windows x86_64 | 145 | 26 | ✅ Latest |
|
|
190
199
|
|
|
191
200
|
## Requirements
|
|
192
201
|
|
|
@@ -195,6 +204,21 @@ const page = await browser.newPage();
|
|
|
195
204
|
|
|
196
205
|
## Troubleshooting
|
|
197
206
|
|
|
207
|
+
**Site detects incognito / private browsing mode**
|
|
208
|
+
|
|
209
|
+
By default, `launch()` opens an incognito context. Some sites (like BrowserScan) detect this. Use `launchPersistentContext()` instead — it runs with a real user profile:
|
|
210
|
+
|
|
211
|
+
```javascript
|
|
212
|
+
import { launchPersistentContext } from 'cloakbrowser';
|
|
213
|
+
|
|
214
|
+
const ctx = await launchPersistentContext({
|
|
215
|
+
userDataDir: './my-profile',
|
|
216
|
+
headless: false,
|
|
217
|
+
});
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
This also gives you cookie and localStorage persistence across sessions.
|
|
221
|
+
|
|
198
222
|
**reCAPTCHA v3 scores are low (0.1–0.3)**
|
|
199
223
|
|
|
200
224
|
Avoid `page.waitForTimeout()` — it sends CDP protocol commands that reCAPTCHA detects. Use native sleep instead:
|
|
@@ -213,8 +237,25 @@ Other tips for maximizing reCAPTCHA scores:
|
|
|
213
237
|
- **Spend 15+ seconds on the page** before triggering reCAPTCHA — short visits score lower
|
|
214
238
|
- **Space out requests** — back-to-back `grecaptcha.execute()` calls from the same session get penalized. Wait 30+ seconds between pages with reCAPTCHA
|
|
215
239
|
- **Use a fixed fingerprint seed** (`--fingerprint=12345`) for consistent device identity across sessions
|
|
240
|
+
- **Use `page.type()` instead of `page.fill()`** for form filling — `fill()` sets values directly without keyboard events, which reCAPTCHA's behavioral analysis flags. `type()` with a delay simulates real keystrokes:
|
|
241
|
+
```javascript
|
|
242
|
+
await page.type('#email', 'user@example.com', { delay: 50 });
|
|
243
|
+
```
|
|
216
244
|
- **Minimize `page.evaluate()` calls** before the reCAPTCHA check fires — each one sends CDP traffic
|
|
217
245
|
|
|
246
|
+
**New update broke something? Roll back to the previous version**
|
|
247
|
+
When auto-update downloads a newer binary, the previous version stays in `~/.cloakbrowser/`. Point `CLOAKBROWSER_BINARY_PATH` to the older cached binary:
|
|
248
|
+
```bash
|
|
249
|
+
# Linux
|
|
250
|
+
export CLOAKBROWSER_BINARY_PATH=~/.cloakbrowser/chromium-145.0.7632.109/chrome
|
|
251
|
+
|
|
252
|
+
# macOS
|
|
253
|
+
export CLOAKBROWSER_BINARY_PATH=~/.cloakbrowser/chromium-145.0.7632.109/Chromium.app/Contents/MacOS/Chromium
|
|
254
|
+
|
|
255
|
+
# Windows
|
|
256
|
+
set CLOAKBROWSER_BINARY_PATH=%USERPROFILE%\.cloakbrowser\chromium-145.0.7632.109\chrome.exe
|
|
257
|
+
```
|
|
258
|
+
|
|
218
259
|
## Links
|
|
219
260
|
|
|
220
261
|
- 🌐 [Website](https://cloakbrowser.dev)
|
|
@@ -227,3 +268,5 @@ Other tips for maximizing reCAPTCHA scores:
|
|
|
227
268
|
|
|
228
269
|
- **Wrapper code** (this repository) — MIT. See [LICENSE](https://github.com/CloakHQ/CloakBrowser/blob/main/LICENSE).
|
|
229
270
|
- **CloakBrowser binary** (compiled Chromium) — free to use, no redistribution. See [BINARY-LICENSE.md](https://github.com/CloakHQ/CloakBrowser/blob/main/BINARY-LICENSE.md).
|
|
271
|
+
|
|
272
|
+
Use against financial, banking, healthcare, or government authentication systems without authorization is expressly prohibited.
|
package/dist/playwright.d.ts
CHANGED
|
@@ -4,6 +4,11 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import type { Browser, BrowserContext } from "playwright-core";
|
|
6
6
|
import type { LaunchOptions, LaunchContextOptions, LaunchPersistentContextOptions } from "./types.js";
|
|
7
|
+
/** @internal Migrate deprecated timezoneId → timezone, warn once. Exported for testing. */
|
|
8
|
+
export declare function migrateTimezoneId<T extends {
|
|
9
|
+
timezone?: string;
|
|
10
|
+
timezoneId?: string;
|
|
11
|
+
}>(options: T): T;
|
|
7
12
|
/**
|
|
8
13
|
* Launch stealth Chromium browser via Playwright.
|
|
9
14
|
*
|
package/dist/playwright.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playwright.d.ts","sourceRoot":"","sources":["../src/playwright.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,8BAA8B,EAAE,MAAM,YAAY,CAAC;AAKtG;;;;;;;;;;;;GAYG;AACH,wBAAsB,MAAM,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"playwright.d.ts","sourceRoot":"","sources":["../src/playwright.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,8BAA8B,EAAE,MAAM,YAAY,CAAC;AAKtG,2FAA2F;AAC3F,wBAAgB,iBAAiB,CAAC,CAAC,SAAS;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAQrG;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,MAAM,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,CAmB1E;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,aAAa,CACjC,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,cAAc,CAAC,CA+BzB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,8BAA8B,GACtC,OAAO,CAAC,cAAc,CAAC,CAyBzB;AAsBD,6CAA6C;AAC7C,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,EAAE,CAElE"}
|
package/dist/playwright.js
CHANGED
|
@@ -5,6 +5,16 @@
|
|
|
5
5
|
import { DEFAULT_VIEWPORT, getDefaultStealthArgs } from "./config.js";
|
|
6
6
|
import { ensureBinary } from "./download.js";
|
|
7
7
|
import { parseProxyUrl } from "./proxy.js";
|
|
8
|
+
/** @internal Migrate deprecated timezoneId → timezone, warn once. Exported for testing. */
|
|
9
|
+
export function migrateTimezoneId(options) {
|
|
10
|
+
if (options.timezoneId != null) {
|
|
11
|
+
console.warn("[cloakbrowser] timezoneId is deprecated, use timezone instead");
|
|
12
|
+
const merged = { ...options, timezone: options.timezone ?? options.timezoneId };
|
|
13
|
+
delete merged.timezoneId;
|
|
14
|
+
return merged;
|
|
15
|
+
}
|
|
16
|
+
return options;
|
|
17
|
+
}
|
|
8
18
|
/**
|
|
9
19
|
* Launch stealth Chromium browser via Playwright.
|
|
10
20
|
*
|
|
@@ -28,7 +38,9 @@ export async function launch(options = {}) {
|
|
|
28
38
|
headless: options.headless ?? true,
|
|
29
39
|
args,
|
|
30
40
|
ignoreDefaultArgs: ["--enable-automation"],
|
|
31
|
-
...(options.proxy
|
|
41
|
+
...(options.proxy
|
|
42
|
+
? { proxy: typeof options.proxy === "string" ? parseProxyUrl(options.proxy) : options.proxy }
|
|
43
|
+
: {}),
|
|
32
44
|
...options.launchOptions,
|
|
33
45
|
});
|
|
34
46
|
return browser;
|
|
@@ -50,9 +62,13 @@ export async function launch(options = {}) {
|
|
|
50
62
|
* ```
|
|
51
63
|
*/
|
|
52
64
|
export async function launchContext(options = {}) {
|
|
65
|
+
options = migrateTimezoneId(options);
|
|
53
66
|
// Resolve geoip BEFORE launch() to avoid double-resolution
|
|
54
67
|
const resolved = await maybeResolveGeoip(options);
|
|
55
|
-
|
|
68
|
+
// Skip --fingerprint-timezone binary flag: it only applies to the default
|
|
69
|
+
// context and interferes with Playwright's timezoneId on new contexts.
|
|
70
|
+
// Timezone is set via browser.newContext(timezoneId: ...) below instead.
|
|
71
|
+
const browser = await launch({ ...options, ...resolved, geoip: false, timezone: undefined });
|
|
56
72
|
let context;
|
|
57
73
|
try {
|
|
58
74
|
context = await browser.newContext({
|
|
@@ -97,6 +113,7 @@ export async function launchContext(options = {}) {
|
|
|
97
113
|
* ```
|
|
98
114
|
*/
|
|
99
115
|
export async function launchPersistentContext(options) {
|
|
116
|
+
options = migrateTimezoneId(options);
|
|
100
117
|
const { chromium } = await import("playwright-core");
|
|
101
118
|
const binaryPath = process.env.CLOAKBROWSER_BINARY_PATH || (await ensureBinary());
|
|
102
119
|
const resolved = await maybeResolveGeoip(options);
|
|
@@ -106,7 +123,9 @@ export async function launchPersistentContext(options) {
|
|
|
106
123
|
headless: options.headless ?? true,
|
|
107
124
|
args,
|
|
108
125
|
ignoreDefaultArgs: ["--enable-automation"],
|
|
109
|
-
...(options.proxy
|
|
126
|
+
...(options.proxy
|
|
127
|
+
? { proxy: typeof options.proxy === "string" ? parseProxyUrl(options.proxy) : options.proxy }
|
|
128
|
+
: {}),
|
|
110
129
|
...(options.userAgent ? { userAgent: options.userAgent } : {}),
|
|
111
130
|
viewport: options.viewport ?? DEFAULT_VIEWPORT,
|
|
112
131
|
...(resolved.locale ? { locale: resolved.locale } : {}),
|
|
@@ -125,7 +144,10 @@ async function maybeResolveGeoip(options) {
|
|
|
125
144
|
if (options.timezone && options.locale)
|
|
126
145
|
return { timezone: options.timezone, locale: options.locale };
|
|
127
146
|
const { resolveProxyGeo } = await import("./geoip.js");
|
|
128
|
-
const
|
|
147
|
+
const proxyUrl = typeof options.proxy === "string" ? options.proxy : options.proxy.server;
|
|
148
|
+
if (!proxyUrl)
|
|
149
|
+
return { timezone: options.timezone, locale: options.locale };
|
|
150
|
+
const { timezone: geoTz, locale: geoLocale } = await resolveProxyGeo(proxyUrl);
|
|
129
151
|
return {
|
|
130
152
|
timezone: options.timezone ?? geoTz ?? undefined,
|
|
131
153
|
locale: options.locale ?? geoLocale ?? undefined,
|
package/dist/playwright.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playwright.js","sourceRoot":"","sources":["../src/playwright.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,UAAyB,EAAE;IACtD,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAErD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,CAAC,MAAM,YAAY,EAAE,CAAC,CAAC;IAClF,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,IAAI,GAAG,SAAS,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC;IAEpD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QACpC,cAAc,EAAE,UAAU;QAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,IAAI;QAClC,IAAI;QACJ,iBAAiB,EAAE,CAAC,qBAAqB,CAAC;QAC1C,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"playwright.js","sourceRoot":"","sources":["../src/playwright.ts"],"names":[],"mappings":"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"}
|
package/dist/puppeteer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"puppeteer.d.ts","sourceRoot":"","sources":["../src/puppeteer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAKhD;;;;;;;;;;;;GAYG;AACH,wBAAsB,MAAM,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"puppeteer.d.ts","sourceRoot":"","sources":["../src/puppeteer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAKhD;;;;;;;;;;;;GAYG;AACH,wBAAsB,MAAM,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,CAuD1E"}
|
package/dist/puppeteer.js
CHANGED
|
@@ -28,10 +28,27 @@ export async function launch(options = {}) {
|
|
|
28
28
|
// so we strip them and use page.authenticate() instead.
|
|
29
29
|
let proxyAuth;
|
|
30
30
|
if (options.proxy) {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
31
|
+
if (typeof options.proxy === "string") {
|
|
32
|
+
const { server, username, password } = parseProxyUrl(options.proxy);
|
|
33
|
+
args.push(`--proxy-server=${server}`);
|
|
34
|
+
if (username) {
|
|
35
|
+
proxyAuth = { username, password: password ?? "" };
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
// Strip any inline credentials from the server URL — Chromium's
|
|
40
|
+
// --proxy-server doesn't support them; use page.authenticate() instead.
|
|
41
|
+
const parsed = parseProxyUrl(options.proxy.server);
|
|
42
|
+
args.push(`--proxy-server=${parsed.server}`);
|
|
43
|
+
if (options.proxy.bypass) {
|
|
44
|
+
args.push(`--proxy-bypass-list=${options.proxy.bypass}`);
|
|
45
|
+
}
|
|
46
|
+
// Explicit username/password fields take precedence over inline creds
|
|
47
|
+
const username = options.proxy.username ?? parsed.username;
|
|
48
|
+
const password = options.proxy.password ?? parsed.password;
|
|
49
|
+
if (username) {
|
|
50
|
+
proxyAuth = { username, password: password ?? "" };
|
|
51
|
+
}
|
|
35
52
|
}
|
|
36
53
|
}
|
|
37
54
|
const browser = await puppeteer.default.launch({
|
|
@@ -62,7 +79,10 @@ async function maybeResolveGeoip(options) {
|
|
|
62
79
|
if (options.timezone && options.locale)
|
|
63
80
|
return { timezone: options.timezone, locale: options.locale };
|
|
64
81
|
const { resolveProxyGeo } = await import("./geoip.js");
|
|
65
|
-
const
|
|
82
|
+
const proxyUrl = typeof options.proxy === "string" ? options.proxy : options.proxy.server;
|
|
83
|
+
if (!proxyUrl)
|
|
84
|
+
return { timezone: options.timezone, locale: options.locale };
|
|
85
|
+
const { timezone: geoTz, locale: geoLocale } = await resolveProxyGeo(proxyUrl);
|
|
66
86
|
return {
|
|
67
87
|
timezone: options.timezone ?? geoTz ?? undefined,
|
|
68
88
|
locale: options.locale ?? geoLocale ?? undefined,
|
package/dist/puppeteer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"puppeteer.js","sourceRoot":"","sources":["../src/puppeteer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,UAAyB,EAAE;IACtD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAEjD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,CAAC,MAAM,YAAY,EAAE,CAAC,CAAC;IAClF,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,IAAI,GAAG,SAAS,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC;IAEpD,+DAA+D;IAC/D,iEAAiE;IACjE,wDAAwD;IACxD,IAAI,SAA6D,CAAC;IAClE,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"puppeteer.js","sourceRoot":"","sources":["../src/puppeteer.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -4,8 +4,18 @@
|
|
|
4
4
|
export interface LaunchOptions {
|
|
5
5
|
/** Run in headless mode (default: true). */
|
|
6
6
|
headless?: boolean;
|
|
7
|
-
/**
|
|
8
|
-
|
|
7
|
+
/**
|
|
8
|
+
* Proxy server — URL string or Playwright proxy object.
|
|
9
|
+
* String: 'http://user:pass@proxy:8080' (credentials auto-extracted).
|
|
10
|
+
* Object: { server: "http://proxy:8080", bypass: ".google.com", ... }
|
|
11
|
+
* — passed directly to Playwright.
|
|
12
|
+
*/
|
|
13
|
+
proxy?: string | {
|
|
14
|
+
server: string;
|
|
15
|
+
bypass?: string;
|
|
16
|
+
username?: string;
|
|
17
|
+
password?: string;
|
|
18
|
+
};
|
|
9
19
|
/** Additional Chromium CLI arguments. */
|
|
10
20
|
args?: string[];
|
|
11
21
|
/** Include default stealth fingerprint args (default: true). Set false to use custom --fingerprint flags. */
|
|
@@ -29,7 +39,7 @@ export interface LaunchContextOptions extends LaunchOptions {
|
|
|
29
39
|
};
|
|
30
40
|
/** Browser locale, e.g. "en-US". */
|
|
31
41
|
locale?: string;
|
|
32
|
-
/**
|
|
42
|
+
/** @deprecated Use `timezone` (inherited from LaunchOptions) instead. */
|
|
33
43
|
timezoneId?: string;
|
|
34
44
|
/** Color scheme preference — 'light', 'dark', or 'no-preference'. */
|
|
35
45
|
colorScheme?: "light" | "dark" | "no-preference";
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,aAAa;IAC5B,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,aAAa;IAC5B,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3F,yCAAyC;IACzC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,6GAA6G;IAC7G,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,uFAAuF;IACvF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kFAAkF;IAClF,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,oEAAoE;IACpE,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,oBAAqB,SAAQ,aAAa;IACzD,gCAAgC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qBAAqB;IACrB,QAAQ,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,oCAAoC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qEAAqE;IACrE,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,eAAe,CAAC;CAClD;AAED,MAAM,WAAW,8BAA+B,SAAQ,oBAAoB;IAC1E,0DAA0D;IAC1D,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cloakbrowser",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.7",
|
|
4
4
|
"description": "Stealth Chromium that passes every bot detection test. Drop-in Playwright/Puppeteer replacement with source-level fingerprint patches.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|