v1.1.0-beta.046 - fix(downloads): decrypt creds in active-downloads + stop slow-import re-entry loop
🔓 Active-downloads poller used encrypted credentials
- /api/admin/active-downloads called SABnzbd/qBittorrent with client.pass/apiKey straight from the DB, but those are encrypted at rest (beta.038) — auth failed, the poller "timed out", and the queue sat at 0%
- Decrypt into a local copy before use (same pattern as download-clients.ts); completes the beta.043 decrypt-at-use pass, which missed this route
🔁 Slow Node conversion re-triggered the importer → duplicate files
- The 60s download checker's DB lock has a 55s staleness window; a large CBR→CBZ WebP conversion runs in-process for minutes, so the lock expired and the next tick re-fired importRequest on the still-DOWNLOADING request — each pass copying a _ duplicate. (rust-engine ran this conversion in the Rust engine, so the race never surfaced.)
- Add an in-process guard so a new cycle can't start while a prior import is in flight; the request reaches COMPLETED before the next cycle, so it's no longer re-matched
✅ Verification
- tsc --noEmit clean; vitest 221/221. NOTE: the live download→import flow can't be exercised in CI — verify on the deploy