@@ -5,7 +5,7 @@ import https from 'https';
55import { getItemConnectionInfo } from '../utils/config-lookup' ;
66import { decrypt , isEncrypted } from '../utils/crypto' ;
77
8- export const jellyseerrRoute = Router ( ) ;
8+ export const jellyseerRoute = Router ( ) ;
99
1010// Configure HTTPS agent to allow self-signed certificates
1111const httpsAgent = new https . Agent ( {
@@ -53,7 +53,7 @@ const getApiKey = (req: Request): string | null => {
5353} ;
5454
5555// Search for movies and TV shows
56- jellyseerrRoute . get ( '/search' , async ( req : Request , res : Response ) => {
56+ jellyseerRoute . get ( '/search' , async ( req : Request , res : Response ) => {
5757 console . log ( 'Jellyseerr search request' ) ;
5858 try {
5959 const baseUrl = getBaseUrl ( req ) ;
@@ -76,12 +76,6 @@ jellyseerrRoute.get('/search', async (req: Request, res: Response) => {
7676 return ;
7777 }
7878
79- console . log ( 'Jellyseerr search request:' , {
80- baseUrl,
81- query,
82- hasApiKey : ! ! apiKey
83- } ) ;
84-
8579 // Simple search call without pagination for now
8680 const encodedQuery = encodeURIComponent ( query . trim ( ) ) ;
8781 const response = await axios . get ( `${ baseUrl } /api/v1/search?query=${ encodedQuery } ` , {
@@ -92,9 +86,6 @@ jellyseerrRoute.get('/search', async (req: Request, res: Response) => {
9286 httpsAgent : httpsAgent
9387 } ) ;
9488
95- console . log ( 'Jellyseerr search response status:' , response . status ) ;
96- console . log ( 'Jellyseerr search results count:' , response . data ?. results ?. length || 0 ) ;
97-
9889 res . json ( {
9990 success : true ,
10091 data : response . data
@@ -104,13 +95,13 @@ jellyseerrRoute.get('/search', async (req: Request, res: Response) => {
10495 console . error ( 'Jellyseerr search error:' , error . message ) ;
10596 res . status ( error . response ?. status || 500 ) . json ( {
10697 success : false ,
107- error : error . response ?. data ?. message || error . message || 'Failed to search Jellyseerr '
98+ error : error . response ?. data ?. message || error . message || 'Failed to search'
10899 } ) ;
109100 }
110101} ) ;
111102
112103// Get pending requests
113- jellyseerrRoute . get ( '/requests' , async ( req : Request , res : Response ) => {
104+ jellyseerRoute . get ( '/requests' , async ( req : Request , res : Response ) => {
114105 console . log ( 'Jellyseerr requests request' ) ;
115106 try {
116107 const baseUrl = getBaseUrl ( req ) ;
@@ -189,7 +180,7 @@ jellyseerrRoute.get('/requests', async (req: Request, res: Response) => {
189180} ) ;
190181
191182// Request a movie or TV show
192- jellyseerrRoute . post ( '/request' , async ( req : Request , res : Response ) => {
183+ jellyseerRoute . post ( '/request' , async ( req : Request , res : Response ) => {
193184 console . log ( 'Jellyseerr request creation' ) ;
194185 try {
195186 const baseUrl = getBaseUrl ( req ) ;
@@ -218,10 +209,18 @@ jellyseerrRoute.post('/request', async (req: Request, res: Response) => {
218209 } ;
219210
220211 // Add seasons for TV shows
221- if ( mediaType === 'tv' && seasons ) {
222- requestBody . seasons = seasons ;
212+ if ( mediaType === 'tv' ) {
213+ if ( seasons && seasons . length > 0 ) {
214+ requestBody . seasons = seasons ;
215+ } else {
216+ // If no seasons specified, don't include the seasons field
217+ // This will let Jellyseerr handle the default behavior
218+ console . warn ( 'No seasons specified for TV show request' ) ;
219+ }
223220 }
224221
222+ console . log ( 'Jellyseerr API URL:' , `${ baseUrl } /api/v1/request` ) ;
223+
225224 const response = await axios . post ( `${ baseUrl } /api/v1/request` , requestBody , {
226225 headers : {
227226 'X-Api-Key' : apiKey ,
@@ -238,6 +237,7 @@ jellyseerrRoute.post('/request', async (req: Request, res: Response) => {
238237
239238 } catch ( error : any ) {
240239 console . error ( 'Jellyseerr request creation error:' , error . message ) ;
240+ console . error ( 'Error response status:' , error . response ?. status ) ;
241241 res . status ( error . response ?. status || 500 ) . json ( {
242242 success : false ,
243243 error : error . response ?. data ?. message || error . message || 'Failed to create request'
@@ -246,7 +246,7 @@ jellyseerrRoute.post('/request', async (req: Request, res: Response) => {
246246} ) ;
247247
248248// Approve a request
249- jellyseerrRoute . post ( '/request/:id/approve' , async ( req : Request , res : Response ) => {
249+ jellyseerRoute . post ( '/request/:id/approve' , async ( req : Request , res : Response ) => {
250250 console . log ( 'Jellyseerr request approval' ) ;
251251 try {
252252 const baseUrl = getBaseUrl ( req ) ;
@@ -285,7 +285,7 @@ jellyseerrRoute.post('/request/:id/approve', async (req: Request, res: Response)
285285} ) ;
286286
287287// Decline a request
288- jellyseerrRoute . post ( '/request/:id/decline' , async ( req : Request , res : Response ) => {
288+ jellyseerRoute . post ( '/request/:id/decline' , async ( req : Request , res : Response ) => {
289289 console . log ( 'Jellyseerr request decline' ) ;
290290 try {
291291 const baseUrl = getBaseUrl ( req ) ;
@@ -323,8 +323,54 @@ jellyseerrRoute.post('/request/:id/decline', async (req: Request, res: Response)
323323 }
324324} ) ;
325325
326+ // Get TV show details including seasons
327+ jellyseerRoute . get ( '/tv/:tmdbId' , async ( req : Request , res : Response ) => {
328+ console . log ( 'Jellyseerr TV show details request' ) ;
329+ try {
330+ const baseUrl = getBaseUrl ( req ) ;
331+ const apiKey = getApiKey ( req ) ;
332+ const { tmdbId } = req . params ;
333+
334+ if ( ! apiKey ) {
335+ res . status ( 400 ) . json ( {
336+ success : false ,
337+ error : 'API key is required or could not be decrypted'
338+ } ) ;
339+ return ;
340+ }
341+
342+ if ( ! tmdbId ) {
343+ res . status ( 400 ) . json ( {
344+ success : false ,
345+ error : 'tmdbId parameter is required'
346+ } ) ;
347+ return ;
348+ }
349+
350+ const response = await axios . get ( `${ baseUrl } /api/v1/tv/${ tmdbId } ` , {
351+ headers : {
352+ 'X-Api-Key' : apiKey
353+ } ,
354+ timeout : 10000 ,
355+ httpsAgent : httpsAgent
356+ } ) ;
357+
358+ res . json ( {
359+ success : true ,
360+ data : response . data
361+ } ) ;
362+
363+ } catch ( error : any ) {
364+ console . error ( 'Jellyseerr TV show details error:' , error . message ) ;
365+ res . status ( error . response ?. status || 500 ) . json ( {
366+ success : false ,
367+ error : error . response ?. data ?. message || error . message || 'Failed to get TV show details'
368+ } ) ;
369+ }
370+ } ) ;
371+
326372// Get system status
327- jellyseerrRoute . get ( '/status' , async ( req : Request , res : Response ) => {
373+ jellyseerRoute . get ( '/status' , async ( req : Request , res : Response ) => {
328374 console . log ( 'Jellyseerr status request' ) ;
329375 try {
330376 const baseUrl = getBaseUrl ( req ) ;
0 commit comments