Dev 2.10.0 - #198
Conversation
qBittorrent 5.2.3RC returns 204 with an empty body on successful /api/v2/auth/login instead of the pre-5.2 200 "Ok." body, which was incorrectly treated as a failed login and surfaced as a generic "Connection failed" error. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
qBittorrent 5.2+ names its session cookie QBT_SID_<port> (its own
WebUI listen port baked into the name) instead of the legacy plain
SID, so the /SID=([^;]+)/ regex in login() never matched and auth
kept failing even after the 204-status fix. Widen it to match any
cookie whose name contains SID as a token.
Verified live against a 5.2+ instance that the server accepts the
session value back under any cookie name (only the value is
validated, not the name), so qbtFetch's Cookie: SID=${sid} header
needs no change.
… SID
qBittorrent 5.2+ rejects the session value when sent back under the wrong
cookie name (verified live: same SID value, QBT_SID_8080=<value> -> 200,
SID=<value> -> 403). login() now returns {name, value} captured from the
Set-Cookie regex match instead of just the value, and that pair is plumbed
through sidCache/getSession/withSessionRetry/qbtFetch so the Cookie header
uses the actual assigned name.
The regex-over-comma-joined-header approach could pick the wrong cookie (any name merely containing "SID", e.g. "SIDCC") and could bleed a cookie's value across a comma boundary into the next Set-Cookie entry when the SID cookie had no trailing attributes. getSetCookie() returns each Set-Cookie header as its own array element, so each is parsed as a single cookie and matched against an exact SID/QBT_SID_<port> name pattern.
fix(auth): support qBittorrent 5.2+ login and session cookie
Chore/bump next echarts
- New registry entry (UNIT3D platform)
- Uses existing Unit3dAdapter
- Fixed: was listed as Gazelle 'Unvalidated' — never worked
- New custom BTN JSON-RPC adapter (platform: 'btn')
- POST JSON-RPC to api.broadcasthe.net, maps Lumens→seedbonus
- Un-stucks the BTN entry — now fully functional
- New custom adapter (cookie + HTML scrape)
- Parses .tTipWrap/.tTip header stats and .up-stat cards
- Credential format: {cookies, userAgent} JSON
- New custom adapter (username/password login + HTML scrape)
- POSTs to /user/account/login/, captures tluid/tlpass cookies
- Parses .profile-*-details spans from profile page
- Credential format: {username, password} JSON
- 7 new files, 6 edited files
- All 2848 tests pass (78 new)
- TypeScript and biome lint clean
H1: mark Class, Lumens, Bonus, HnR, JoinDate as optional in BtnUserInfoResult. use nullish coalescing fallbacks in mapBtnResult so adapter degrades gracefully if BTN changes API response shape. H2: replace BigInt(parseInt()) with BigInt(string) to preserve full precision for byte values exceeding Number.MAX_SAFE_INTEGER. add test for missing optional fields scenario. Fixes: QA H1+H2
parseBytes: return 0n for ∞/Inf/-∞/-Inf values so UNIT3D trackers (e.g. zenith) that return infinite buffer don't crash the poll with 'Invalid byte format' error. iptorrents: inspect Location header on 302 rather than throwing session-expired on every redirect. iptorrents 302s logged-in users from / to /t — only throw when redirected to a login page. follow non-login redirects up to 3 hops. add 6 new tests (4 parseBytes ∞ variants, 2 ipt redirect). 2855 total tests pass, tsc clean. Fixes: 86bae41991a748
- H1: Handle infinity values case-insensitively (e.g. 'inf', 'INF'). - H2: Fix relative redirect resolution in IPTorrents fetchHtml. - Added tests for case-insensitive infinity and path-relative redirects. Fixes: 86bae41991a748
Postgres freeleech_tokens/seedbonus columns are INTEGER; parseFloat on BTN's Bonus/Lumens fields produced decimals once tokens accrued fractional values, causing every snapshot INSERT to throw and BTN to auto-pause after 4 consecutive failed polls (failing since 2026-07-26). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…x stale test Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…with placeholders
…ing unverified fields
…se their token cap
…abricating hitAndRuns
…pi_token query param
… one Reports client count and the number of untagged torrents so the empty state can distinguish no client, a connected client with nothing tagged, and a genuinely quiet day. Refs #157
…h the averaging toggle Refs #156
Bumps [@commitlint/config-conventional](https://github.com/conventional-changelog/commitlint/tree/HEAD/@commitlint/config-conventional) from 20.5.3 to 21.2.2. - [Release notes](https://github.com/conventional-changelog/commitlint/releases) - [Changelog](https://github.com/conventional-changelog/commitlint/blob/master/@commitlint/config-conventional/CHANGELOG.md) - [Commits](https://github.com/conventional-changelog/commitlint/commits/v21.2.2/@commitlint/config-conventional) --- updated-dependencies: - dependency-name: "@commitlint/config-conventional" dependency-version: 21.2.2 dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [react](https://github.com/react/react/tree/HEAD/packages/react) from 19.2.5 to 19.2.8. - [Release notes](https://github.com/react/react/releases) - [Changelog](https://github.com/react/react/blob/main/CHANGELOG.md) - [Commits](https://github.com/react/react/commits/v19.2.8/packages/react) --- updated-dependencies: - dependency-name: react dependency-version: 19.2.8 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com>
|
| GitGuardian id | GitGuardian status | Secret | Commit | Filename | |
|---|---|---|---|---|---|
| 36197941 | Triggered | Username Password | 4b40115 | src/app/api/clients/client-routes.test.ts | View secret |
🛠 Guidelines to remediate hardcoded secrets
- Understand the implications of revoking this secret by investigating where it is used in your code.
- Replace and store your secret safely. Learn here the best practices.
- Revoke and rotate this secret.
- If possible, rewrite git history. Rewriting git history is not a trivial act. You might completely break other contributing developers' workflow and you risk accidentally deleting legitimate data.
To avoid such incidents in the future consider
- following these best practices for managing and storing secrets including API keys and other credentials
- install secret detection on pre-commit to catch secret before it leaves your machine and ease remediation.
🦉 GitGuardian detects secrets in your source code to help developers and security teams secure the modern development process. You are seeing this because you or someone else with access to this repository has authorized GitGuardian to scan your pull request.
…development/react-19.2.8 chore(deps): bump react from 19.2.5 to 19.2.8
…development/commitlint/config-conventional-21.2.2 chore(deps-dev): bump @commitlint/config-conventional from 20.5.3 to 21.2.2
Knip Code AnalysisFound 128 total issues
View details
Use |
Aither (`aither`) — Warnings (2)
BroadcasTheNet (`broadcasthenet`) — Warnings (6)
FearNoPeer (`fearnopeer`) — Warnings (1)
HAWKE-UNO (`hawkeuno`) — Warnings (6)
IPTorrents (`iptorrents`) — Warnings (9)
Phoenix Project (`phoenixproject`) — Warnings (4)
REDacted (`redacted`) — Warnings (5)
seedpool (`seedpool`) — Warnings (8)
SkipTheCommercials (`skipthecommercials`) — Warnings (2)
TorrentLeech (`torrentleech`) — Warnings (8)
Upload.cx (`uploadcx`) — Warnings (2)
Zenith (`zenith`) — Warnings (9)
Allowed content categories: See |
|
✅ Security audit passed Passed (38/38)
Summary: 38/38 checks passed See |
No description provided.