feat: replace primp with webclaw-tls, bump to v0.3.0

Replace primp dependency with our own TLS fingerprinting stack
(webclaw-tls). Perfect Chrome 146 JA4 + Akamai hash match.

- Remove primp entirely (zero references remaining)
- webclaw-fetch now uses webclaw-http from github.com/0xMassi/webclaw-tls
- Native + Mozilla root CAs (fixes HTTPS on cross-signed cert chains)
- Skip unknown certificate extensions (SCT tolerance)
- 99% bypass rate on 102 sites (was ~85% with primp)
- Fixes #5 (HTTPS broken — example.com and similar sites now work)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Valerio 2026-03-29 16:40:10 +02:00
parent 77e93441c0
commit f13cb83c73
8 changed files with 204 additions and 599 deletions

View file

@ -3,7 +3,7 @@ resolver = "2"
members = ["crates/*"]
[workspace.package]
version = "0.2.3"
version = "0.3.0"
edition = "2024"
license = "MIT"
repository = "https://github.com/0xMassi/webclaw"
@ -22,11 +22,13 @@ tracing-subscriber = { version = "0.3", features = ["env-filter"] }
clap = { version = "4", features = ["derive", "env"] }
dotenvy = "0.15"
# primp requires patched forks with TLS impersonation support.
# Must mirror all patches from primp's own Cargo.toml.
# TLS + HTTP/2 fingerprinting via webclaw-tls.
# rustls: TLS fingerprinting (JA4 match Chrome 146)
# h2: HTTP/2 SETTINGS ordering + pseudo-header order
# hyper/hyper-util/reqwest: passthrough for consistent dependency chain
[patch.crates-io]
reqwest = { git = "https://github.com/deedy5/primp", subdirectory = "crates/primp-reqwest" }
rustls = { git = "https://github.com/deedy5/primp", subdirectory = "crates/primp-rustls/rustls" }
h2 = { git = "https://github.com/deedy5/primp", subdirectory = "crates/primp-h2" }
hyper = { git = "https://github.com/deedy5/primp", subdirectory = "crates/primp-hyper" }
hyper-util = { git = "https://github.com/deedy5/primp", subdirectory = "crates/primp-hyper-util" }
rustls = { git = "https://github.com/0xMassi/webclaw-tls" }
h2 = { git = "https://github.com/0xMassi/webclaw-tls" }
hyper = { git = "https://github.com/0xMassi/webclaw-tls" }
hyper-util = { git = "https://github.com/0xMassi/webclaw-tls" }
reqwest = { git = "https://github.com/0xMassi/webclaw-tls" }