Files
hottub/Cargo.toml
Simon 29d526b5fc proxy pool: spread rule34video enrichment over checked public proxies
Rework the unused ALL_PROXIES list into util/proxy_pool.rs:
- hourly sweep of the public lists, TLS-verified cloudflare trace checks,
  >=2 successes with a median under 1.5s, one proxy per exit IP; proxies
  that show our own IP are dropped, two failures in a row evict
- per-site sets checked against a site URL (rule34video: robots.txt),
  round-robin, 10-min per-site cooldown on 429/challenge pages, live
  request outcomes fed back
- started from main (PROXY_POOL=0 disables; PROXY_POOL_LISTS,
  PROXY_POOL_CONCURRENCY), /api/proxies shows its status without credentials
- wreq "socks" feature enabled: SOCKS proxies silently failed before

rule34video enrichment is back, through the pool: full detail pages
(1080p..360p formats, tags, artist), 8 concurrent, one 4s deadline per
listing; late pages keep running and land in the 2h detail cache, which
cached listings are re-merged with on every serve. No ready proxies means
no enrichment (no direct fallback). Requester::get_via sends a pooled
request with certificate checks, sharing the session's cookie jar.

Also adds an ignored live probe showing /embed/ shares the 429 limit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AEp724zDpCWNaSeCrMSvjx
2026-11-05 21:59:28 +00:00

73 lines
1.8 KiB
TOML

[package]
name = "hottub"
version = "0.1.0"
edition = "2024"
build = "build.rs"
[features]
debug = []
[dependencies]
cute = "0.3.0"
diesel = { version = "2.2.10", features = ["sqlite", "r2d2"] }
dotenvy = "0.15.7"
env_logger = "0.11.8"
error-chain = "0.12.4"
futures = "0.3.31"
htmlentity = "1.3.2"
ntex = { version = "3", features = ["tokio"] }
ntex-files = "3"
serde = "1.0.228"
serde_json = "1.0.145"
tokio = { version = "1.49", features = ["full"] }
wreq = { version = "6.0.0-rc.31", features = ["cookies", "multipart", "json", "gzip", "brotli", "deflate", "zstd", "socks"] }
wreq-util = "3.0.0-rc.14"
percent-encoding = "2.3.2"
capitalize = "0.3.4"
url = "2.5.7"
base64 = "0.22.1"
scraper = "0.26.0"
once_cell = "1.21.3"
rustc-hash = "2.1.1"
async-trait = "0.1"
regex = "1.12.2"
titlecase = "3.6.0"
dashmap = "6.1.0"
lru = "0.18.0"
rand = "0.10.0"
chrono = "0.4.44"
md5 = "0.8.0"
pbkdf2 = { version = "0.12", features = ["hmac"] }
hmac = "0.12"
sha2 = "0.10"
aes = "0.8"
aes-gcm = "0.10"
cbc = { version = "0.1", features = ["alloc"] }
hex = "0.4"
chromiumoxide = { version = "0.7", features = ["tokio-runtime"] }
playwright-rs = "0.17"
http-body-util = "0.1.5"
[lints.rust]
warnings = "warn"
unexpected_cfgs = "allow"
# Or keep it as a warning but whitelist the cfg:
# unexpected_cfgs = { level = "warn", check-cfg = ['cfg(has_error_description_deprecated)'] }
[profile.dev]
opt-level = 0
debug = 0
codegen-units = 256
incremental = true
[profile.release]
# Make release builds faster by trading some peak perf for compile time.
# - opt-level = 2: slightly less optimization than 3 but noticeably faster builds.
# - codegen-units > 1: enables parallel code generation across crates.
# - lto = false: disabling link-time optimization speeds up linking.
# - debug = 0: skip debug info to reduce build work.
opt-level = 3
codegen-units = 16
lto = false
debug = 0