* fix(servarr): add timeout to Radarr/Sonarr API requests to prevent infinite loading
Adds a 5-second timeout to all Radarr/Sonarr API requests and displays a warning banner when
services are unreachable. This prevents the Recent Requests section and request list pages from
hanging indefinitely when a configured service has connection issues.
fix#2374
* fix(requests): only show service error banner to users with advanced permissions
Removes plex-api dependency and its type declarations. Then extends the ExternalApi class for
PlexAPI implementation to mimick the exact same old behaviour. This should resolve the security
vulnerabilities in transitive dependencies: form-data(critical), request (moderate, deprecated),
tough-cookie (moderate), xml2js (moderate). Plex-api itself is also no longer maintained.
* fix(jellyfin scanner): reduce jellyfin API calls during recently added scan
Significantly reduce number of API calls, addressing CPU spikes on Jellyfin 10.10+ servers.- Move
getSeasons() call outside the seasons loop (N calls to 1)- Request MediaSources via getEpisodes()
field parameter instead of individual getItemData() calls per episode (N calls to 1 per season)
Performance improvements (tested on library with 12 TV shows):- Scan duration: 43.7s to 9.1s - Peak
CPU: 277% to 115% - CPU spike duration: 36s to 2s Functionality is unchanged, all availability
statuses identicalbefore and after.
* fix: add getEpisodes overloads to remove unsafe type assertion
* refactor(jellyfin): use generics instead of overloads
---------
Co-authored-by: patrick-acland <[email protected]>
Replace X-Emby-Authorization with Authorization header to fix authentication failures when users
have <EnableLegacyAuthorization>false</EnableLegacyAuthorization> in their Jellyfin system.xml.
* fix: include video content in the blacklisted tags processing job
Modified the “blacklisted tags” job to include adult & video content, this correctly blacklists more
adult films that were always missed, even if they had the tag.
* refactor: remove dead code
* refactor: remove redundant explicit arguments
* fix(api): add a migration script to rename *arr tags with spaces
This PR adds a migration script that will run at the startup of the app to remove the spaces from
the *arr tags of Jellyseerr.
fix#1897
re #1913
re https://github.com/Radarr/Radarr/issues/11251
* fix: add error message to logs
* fix(blacklist): handle invalid keywords gracefully
* fix(blacklist): only remove keywords on 404 errors
* fix(blacklist): remove non-null assertion and add proper type annotation
* refactor(blacklist): return null instead of 404 for missing keywords
* fix(blacklist): add type annotation for validKeywords
* fix(selector): update type annotation for validKeywords
The previous way of adding Axios interceptors added a new interceptor each time, causing lags after
a while because of all the duplicate interceptors added.
fix#1787
* fix(jellyfin): use the same deviceId for admins
This PR will make Jellyseerr use the same deviceId for the admin user everytime he logins to
Jellyfin/Emby. The previous behavior with different deviceId was creating new entries on the media
at every request.
* fix: remove useless check
* fix(jellyfin): clean up Jellyfin sessions on Jellyseerr logout
* refactor(auth): remove deleteUserDevice method and handle device deletion directly in logout process
* refactor(auth): optimize logout route for Jellyfin/Emby
Only query database for Jellyfin/Emby users during logout to avoid unnecessary database queries for Plex/local users. This improves performance by skipping the device deletion process when it's not needed.