v1.1.0-beta.044 - feat(search/download): Anna's Archive source, GetComics hoster split + solver, archive covers, stronger Discover filters
🧱 Search/download lib layer
- getcomics.ts: split into getcomics_direct (comicfiles CDN) + getcomics_main (/dls/, Cloudflare-gated); selectable solver (FlareSolverr/Byparr) + timeout; hoster-pref helpers
- hosters/annas-archive (+ new searchAnnasArchive scraper ported from the engine), rootz/vikingfile messages; search-engine/metron/manga-detector refinements
🔎 Anna's Archive (first-class source)
- Interactive: search/interactive adds an Anna's leg to main's in-process Prowlarr+GetComics aggregation (opt-in), returned as { prowlarr, getcomics, annas_archive }
- Manual: request/manual annas_archive branch streams the /md5/ link via HosterEngine; admin/config premium-key enable-gate; admin/test key test; Settings/Setup UI
- Automation: opt-in fallback — surfaces Anna's best match to the manual queue (MANUAL_DDL) rather than auto-downloading a possible mismatch
⬇️ GetComics download resilience
- download-clients streams getcomics_direct/getcomics_main directly (not via HosterEngine); request/retry re-streams with the IDOR ownership gate. Cloudflare-gated /dls/ degrade to MANUAL_DDL (auto-FlareSolverr streaming was engine-only)
🎨 Archive covers (Node)
- New /api/library/archive-cover extracts a CBZ/CBR/CB7 first-page cover in-process (adm-zip + unrar/unar CLI + sharp) — admin-only, path-safe
🚫 Stronger Discover filters
- containsWord (word-boundary, hyphen/phrase-safe) on the Discover publisher+keyword block filter, backed by the recommended lists + Apply-Recommended UI
✅ Verification
- tsc clean; vitest 221/221 across 64 files; next build ✓ (79/79 static pages)
- Kept main's in-process search/download/queue/scanner backends + tests — no engine-forwarder rewrites; converter.test intact