op_fetch_url backed JS fetch() and XHR with a plain reqwest/rustls client, so in stealth mode scripted requests carried a non-browser TLS fingerprint and none of the Chrome client hints the main navigation sends. Bot managers that score subresource requests (the AWS WAF challenge verify call, Akamai sensors) read that as a script and reject it. Add StealthHttpClient::send_single and a stealth_fetch_all path that op_fetch_url uses when a stealth client is installed, preserving the redirect, SSRF, and CORS handling so JS-level requests share the navigation's Chrome TLS fingerprint and sec-ch-ua client hints. The reqwest path is unchanged for non-stealth. Adds a stealth feature to obscura-js gated on obscura-net/stealth.
33 lines
852 B
TOML
33 lines
852 B
TOML
[package]
|
|
name = "obscura-js"
|
|
version.workspace = true
|
|
edition.workspace = true
|
|
|
|
[features]
|
|
default = []
|
|
# Builds obscura-net with its stealth (wreq) HTTP client and lets scripted
|
|
# fetch()/XHR be routed through it so JS-level requests carry the same Chrome
|
|
# TLS fingerprint and client hints as stealth navigation.
|
|
stealth = ["obscura-net/stealth"]
|
|
|
|
[build-dependencies]
|
|
deno_core = "0.350"
|
|
|
|
[dependencies]
|
|
obscura-dom = { workspace = true }
|
|
obscura-net = { workspace = true }
|
|
deno_core = "0.350"
|
|
tokio = { workspace = true }
|
|
serde = { workspace = true }
|
|
serde_json = { workspace = true }
|
|
url = { workspace = true }
|
|
tracing = { workspace = true }
|
|
thiserror = { workspace = true }
|
|
anyhow = { workspace = true }
|
|
reqwest = { workspace = true }
|
|
html5ever = { workspace = true }
|
|
deno_error = "0.6"
|
|
base64 = { workspace = true }
|
|
sha1 = "0.10"
|
|
sha2 = "0.10"
|