15 Commits
Author SHA1 Message Date
germondai 693d81b84e chore(deps): refresh release dependencies 2026-08-10 19:21:02 +02:00
germondai 097565a19f chore(release): prepare v1.3.1 2026-08-02 15:51:35 +02:00
germondai 3a3226ed20 chore(release): prepare v1.3.0 dependencies 2026-08-02 03:07:04 +02:00
germondai f08f5a2b44 chore(release): prepare v1.2.0 2026-07-26 16:18:47 +02:00
germondai 2840af1d13 chore(release): bump all packages to v1.1.0 2026-07-22 23:13:17 +02:00
GermondandGitHub 28eda7ca57 Merge branch 'dev' into feat/mitm-proxy-mode 2026-07-22 16:38:18 +02:00
germondai 6223a4e593 perf: release v1.0.1 - slimmer image, faster boot, firefox telemetry/dead-feature prefs 2026-07-21 18:31:26 +02:00
aziz66andClaude Fable 5 aa719dd1fa feat(proxy): browser-backed MITM forward-proxy mode
The FlareSolverr /v1 contract only returns cookies + user-agent. Clients like
Prowlarr take those and re-fetch the target with their own HTTP stack, which is
re-challenged on sites whose Cloudflare clearance is bound to the solving
browser's connection fingerprint (e.g. 1337x) — no cookie is portable to a
plain HTTP client, so those indexers can't be used at all.

Add an optional HTTP(S) forward proxy (MITM_PROXY_ENABLED). Point such a client's
proxy at it (per-indexer HTTP proxy in Prowlarr) and every request — search and
the .torrent/magnet grab — is transparently re-issued through the browser pool,
returning the RAW response bytes so binary downloads pass through intact.

- ca.ts: self-generated CA (persisted) + on-demand per-host leaf certs
- server.ts: per-host loopback-TLS termination (Bun's node:tls can't drive a
  handshake via emit("connection") or honor SNICallback, so one listening TLS
  server per host is the reliable path); raw-byte capture via page.goto response
  body, with the download-event path for binaries; scrape() fallback solves CF
- /proxy-ca.crt route to fetch the CA for the client's trust store
- New env: MITM_PROXY_{ENABLED,PORT,CA_DIR,MAX_TIER,DEBUG}

Off by default; localhost-only by design (a MITM proxy can impersonate any host
to a client that trusts its CA).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 01:13:45 +04:00
germondai 040c7352fb chore(deps): bump typescript to v7 and update workspace dependencies 2026-07-10 19:19:35 +02:00
germondai ad7764eeb6 test(tiers): cover header sanitiser and tier1 post support 2026-07-06 01:12:30 +02:00
germondai f397a4455f fix(api): re-add memoirist and camoufox-js as explicit deps for production install 2026-06-30 16:02:38 +02:00
germondai df79859ebe chore(api): drop @elysiajs/cors, restrict api to non-browser clients 2026-06-29 20:39:52 +02:00
germondai 5c84b33808 feat(api): add CORS support and expose custom headers on /v1 and /scrape 2026-06-26 22:05:41 +02:00
germondai 65accc03ae perf(docker): shrink api image from 1.8 GB to 1.2 GB 2026-06-26 18:49:53 +02:00
germondai 54352625a9 chore: update dependency lockfile 2026-06-26 09:20:00 +02:00