@@ -6,6 +6,7 @@ import { OMSSErrors } from '../core/errors.js'
66import { TMDBService } from '../services/tmdb.service.js'
77import { v4 as uuidv4 } from 'uuid'
88import { StremioService } from './stremio.service.js'
9+ import { ProxyService } from './proxy.service.js'
910
1011export class SourceService {
1112 private tmdbValidator : ReturnType < typeof createTMDBValidator >
@@ -277,15 +278,43 @@ export class SourceService {
277278 // Deduplicate sources by URL
278279 results . forEach ( ( r ) => {
279280 r . sources . forEach ( ( source ) => {
280- if ( ! allSourcesMap . has ( source . url ) ) {
281- allSourcesMap . set ( source . url , source )
281+ try {
282+ const urlObj = new URL ( source . url )
283+ const data = urlObj . searchParams . get ( 'data' )
284+ if ( ! data ) throw new Error ( 'Missing data parameter in source URL' )
285+
286+ const proxyData = ProxyService . decodeProxyData ( data )
287+
288+ // Use upstream URL as dedup key, but store the original source (with proxy URL)
289+ if ( ! allSourcesMap . has ( proxyData . url ) ) {
290+ allSourcesMap . set ( proxyData . url , source )
291+ }
292+ } catch ( error ) {
293+ console . warn ( `[SourceService] Failed to decode source URL: ${ source . url } ` , error )
294+ // Fallback: dedup by proxy URL itself
295+ if ( ! allSourcesMap . has ( source . url ) ) {
296+ allSourcesMap . set ( source . url , source )
297+ }
282298 }
283299 } )
284300
285301 // Deduplicate subtitles by URL
286302 r . subtitles . forEach ( ( subtitle ) => {
287- if ( ! allSubtitlesMap . has ( subtitle . url ) ) {
288- allSubtitlesMap . set ( subtitle . url , subtitle )
303+ try {
304+ const urlObj = new URL ( subtitle . url )
305+ const data = urlObj . searchParams . get ( 'data' )
306+ if ( ! data ) throw new Error ( 'Missing data parameter in subtitle URL' )
307+
308+ const proxyData = ProxyService . decodeProxyData ( data )
309+
310+ if ( ! allSubtitlesMap . has ( proxyData . url ) ) {
311+ allSubtitlesMap . set ( proxyData . url , subtitle )
312+ }
313+ } catch ( error ) {
314+ console . warn ( `[SourceService] Failed to decode subtitle URL: ${ subtitle . url } ` , error )
315+ if ( ! allSubtitlesMap . has ( subtitle . url ) ) {
316+ allSubtitlesMap . set ( subtitle . url , subtitle )
317+ }
289318 }
290319 } )
291320
0 commit comments