mirror of
https://github.com/CloakHQ/CloakBrowser.git
synced 2026-06-23 11:41:46 +02:00
release: v0.3.26 — Windows x64 upgraded to Chromium 146, SOCKS5 credential encoding, Lambda integration
This commit is contained in:
@@ -8,6 +8,16 @@ Changes are tagged: **[wrapper]** for Python/JS wrapper, **[binary]** for Chromi
|
|||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
## [0.3.26] — 2026-04-28
|
||||||
|
|
||||||
|
- **[binary]** Windows x64 upgraded to Chromium 146.0.7680.177.4 — 57 source-level fingerprint patches (up from 33 on 145.0.7632.159.7), now matches Linux. Includes all binary improvements from 0.3.18–0.3.25: native SOCKS5 proxy with UDP ASSOCIATE (QUIC/HTTP3), WebRTC IP spoofing, proxy signal removal, CDP input stealth, storage quota normalization, WebAuthn/AAC/window position patches, WebGL and canvas consistency fixes, expanded GPU model database
|
||||||
|
- **[wrapper]** Auto URL-encode SOCKS5 credentials containing special characters in string URLs (#157)
|
||||||
|
- **[wrapper]** AWS Lambda integration example with cold-start hardening and handler-side retry orchestration (#177, thanks [@AlexTech314](https://github.com/AlexTech314))
|
||||||
|
- **[docker]** Add emoji and extended font packages to resolve Kasada/Akamai canvas fingerprint blocks (#179)
|
||||||
|
- **[docs]** Add Font Setup on Linux section to README (#179)
|
||||||
|
- **[docs]** Add Deployment Integrations section to README (#177)
|
||||||
|
- **[meta]** Bump GitHub Actions dependencies (#178)
|
||||||
|
|
||||||
## [0.3.25] — 2026-04-16
|
## [0.3.25] — 2026-04-16
|
||||||
|
|
||||||
- **[wrapper]** Python: add `launch_context_async()` — async counterpart to `launch_context()`. Returns a BrowserContext with all kwargs forwarded to `browser.new_context()`, enabling `storage_state`, `permissions`, `extra_http_headers`, etc. without a persistent profile folder. Closes #141.
|
- **[wrapper]** Python: add `launch_context_async()` — async counterpart to `launch_context()`. Returns a BrowserContext with all kwargs forwarded to `browser.new_context()`, enabling `storage_state`, `permissions`, `extra_http_headers`, etc. without a persistent profile folder. Closes #141.
|
||||||
|
|||||||
@@ -128,7 +128,7 @@ Open [http://localhost:8080](http://localhost:8080). Create a profile. Click **L
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Latest: v0.3.25 (Chromium 146.0.7680.177.3)
|
## Latest: v0.3.26 (Chromium 146.0.7680.177.4)
|
||||||
|
|
||||||
- **`launch_context_async()`** — async counterpart to `launch_context()`. Forwards kwargs to `browser.new_context()` for `storage_state`, `permissions`, `extra_http_headers` without a persistent profile folder.
|
- **`launch_context_async()`** — async counterpart to `launch_context()`. Forwards kwargs to `browser.new_context()` for `storage_state`, `permissions`, `extra_http_headers` without a persistent profile folder.
|
||||||
- **JS `contextOptions` escape hatch** — forward arbitrary options (including `storageState`) to Playwright's `newContext()` from `launchContext()` / `launchPersistentContext()`.
|
- **JS `contextOptions` escape hatch** — forward arbitrary options (including `storageState`) to Playwright's `newContext()` from `launchContext()` / `launchPersistentContext()`.
|
||||||
@@ -739,11 +739,11 @@ browser = await launch_async(args=["--remote-debugging-port=9242"])
|
|||||||
|
|
||||||
| Platform | Chromium | Patches | Status |
|
| Platform | Chromium | Patches | Status |
|
||||||
|---|---|---|---|
|
|---|---|---|---|
|
||||||
| Linux x86_64 | 146 | 49 | ✅ Latest |
|
| Linux x86_64 | 146 | 57 | ✅ Latest |
|
||||||
| Linux arm64 (RPi, Graviton) | 146 | 49 | ✅ Latest |
|
| Linux arm64 (RPi, Graviton) | 146 | 57 | ✅ Latest |
|
||||||
| macOS arm64 (Apple Silicon) | 145 | 26 | ✅ |
|
| macOS arm64 (Apple Silicon) | 145 | 26 | ✅ |
|
||||||
| macOS x86_64 (Intel) | 145 | 26 | ✅ |
|
| macOS x86_64 (Intel) | 145 | 26 | ✅ |
|
||||||
| Windows x86_64 | 145 | 48 | ✅ |
|
| Windows x86_64 | 146 | 57 | ✅ Latest |
|
||||||
|
|
||||||
The wrapper auto-downloads the correct binary for your platform.
|
The wrapper auto-downloads the correct binary for your platform.
|
||||||
|
|
||||||
@@ -1142,9 +1142,9 @@ A: Yes. Pass `proxy="http://user:pass@host:port"` or `proxy="socks5://user:pass@
|
|||||||
|
|
||||||
| Feature | Status |
|
| Feature | Status |
|
||||||
|---------|--------|
|
|---------|--------|
|
||||||
| Linux x64 — Chromium 146 (49 patches) | ✅ Released |
|
| Linux x64 — Chromium 146 (57 patches) | ✅ Released |
|
||||||
| macOS arm64/x64 — Chromium 145 (26 patches) | ✅ Released |
|
| macOS arm64/x64 — Chromium 145 (26 patches) | ✅ Released |
|
||||||
| Windows x64 — Chromium 145 (33 patches) | ✅ Released |
|
| Windows x64 — Chromium 146 (57 patches) | ✅ Released |
|
||||||
| JavaScript/Puppeteer + Playwright support | ✅ Released |
|
| JavaScript/Puppeteer + Playwright support | ✅ Released |
|
||||||
| Fingerprint rotation per session | ✅ Released |
|
| Fingerprint rotation per session | ✅ Released |
|
||||||
| Built-in proxy rotation | 📋 Planned |
|
| Built-in proxy rotation | 📋 Planned |
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
__version__ = "0.3.25"
|
__version__ = "0.3.26"
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ PLATFORM_CHROMIUM_VERSIONS: dict[str, str] = {
|
|||||||
"linux-arm64": "146.0.7680.177.3",
|
"linux-arm64": "146.0.7680.177.3",
|
||||||
"darwin-arm64": "145.0.7632.109.2",
|
"darwin-arm64": "145.0.7632.109.2",
|
||||||
"darwin-x64": "145.0.7632.109.2",
|
"darwin-x64": "145.0.7632.109.2",
|
||||||
"windows-x64": "145.0.7632.159.7",
|
"windows-x64": "146.0.7680.177.4",
|
||||||
}
|
}
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "cloakbrowser",
|
"name": "cloakbrowser",
|
||||||
"version": "0.3.25",
|
"version": "0.3.26",
|
||||||
"description": "Stealth Chromium that passes every bot detection test. Drop-in Playwright/Puppeteer replacement with source-level fingerprint patches.",
|
"description": "Stealth Chromium that passes every bot detection test. Drop-in Playwright/Puppeteer replacement with source-level fingerprint patches.",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
|
|||||||
+1
-1
@@ -34,7 +34,7 @@ export const PLATFORM_CHROMIUM_VERSIONS: Record<string, string> = {
|
|||||||
"linux-arm64": "146.0.7680.177.3",
|
"linux-arm64": "146.0.7680.177.3",
|
||||||
"darwin-arm64": "145.0.7632.109.2",
|
"darwin-arm64": "145.0.7632.109.2",
|
||||||
"darwin-x64": "145.0.7632.109.2",
|
"darwin-x64": "145.0.7632.109.2",
|
||||||
"windows-x64": "145.0.7632.159.7",
|
"windows-x64": "146.0.7680.177.4",
|
||||||
};
|
};
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -4,6 +4,9 @@ import { DEFAULT_VIEWPORT, getChromiumVersion } from "../src/config.js";
|
|||||||
|
|
||||||
describe("binaryInfo", () => {
|
describe("binaryInfo", () => {
|
||||||
it("returns correct structure", () => {
|
it("returns correct structure", () => {
|
||||||
|
const orig = process.env.CLOAKBROWSER_CACHE_DIR;
|
||||||
|
process.env.CLOAKBROWSER_CACHE_DIR = `/tmp/cloakbrowser-test-${Date.now()}`;
|
||||||
|
try {
|
||||||
const info = binaryInfo();
|
const info = binaryInfo();
|
||||||
|
|
||||||
expect(info.version).toBe(getChromiumVersion());
|
expect(info.version).toBe(getChromiumVersion());
|
||||||
@@ -11,7 +14,10 @@ describe("binaryInfo", () => {
|
|||||||
expect(info.binaryPath).toBeTruthy();
|
expect(info.binaryPath).toBeTruthy();
|
||||||
expect(typeof info.installed).toBe("boolean");
|
expect(typeof info.installed).toBe("boolean");
|
||||||
expect(info.cacheDir).toContain("cloakbrowser");
|
expect(info.cacheDir).toContain("cloakbrowser");
|
||||||
expect(info.downloadUrl).toContain(".tar.gz");
|
} finally {
|
||||||
|
if (orig) process.env.CLOAKBROWSER_CACHE_DIR = orig;
|
||||||
|
else delete process.env.CLOAKBROWSER_CACHE_DIR;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -320,8 +320,14 @@ describe("download fallback", () => {
|
|||||||
|
|
||||||
describe("effective version", () => {
|
describe("effective version", () => {
|
||||||
it("returns platform version when no marker exists", () => {
|
it("returns platform version when no marker exists", () => {
|
||||||
// Default behavior — no marker file in test environment
|
const orig = process.env.CLOAKBROWSER_CACHE_DIR;
|
||||||
|
process.env.CLOAKBROWSER_CACHE_DIR = `/tmp/cloakbrowser-test-${Date.now()}`;
|
||||||
|
try {
|
||||||
expect(getEffectiveVersion()).toBe(getChromiumVersion());
|
expect(getEffectiveVersion()).toBe(getChromiumVersion());
|
||||||
|
} finally {
|
||||||
|
if (orig) process.env.CLOAKBROWSER_CACHE_DIR = orig;
|
||||||
|
else delete process.env.CLOAKBROWSER_CACHE_DIR;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user