import { ApiClient } from '../../../core/http/ApiClient'; import type { Movie } from '../../models'; import { ItemsEndpoint } from './endpoints/ItemsEndpoint'; export class JellyfinClient extends ApiClient { private readonly endpoint = new ItemsEndpoint(); constructor( baseUrl: string, private readonly apiKey: string, private readonly userId: string ) { super(baseUrl); } protected buildHeaders(): Record { return { ...super.buildHeaders(), Authorization: `MediaBrowser Token="${this.apiKey}"`, }; } getFavoriteMovies(): Promise { return this.request(this.endpoint, { userId: this.userId, query: { IncludeItemTypes: 'Movie', Recursive: 'true', IsFavorite: 'true', Fields: 'ProviderIds,Genres,CommunityRating,UserData', }, }); } getRecentlyWatched(): Promise { return this.request(this.endpoint, { userId: this.userId, query: { IncludeItemTypes: 'Movie', Recursive: 'true', Filters: 'IsPlayed', SortBy: 'DatePlayed', SortOrder: 'Descending', Limit: '50', Fields: 'ProviderIds,Genres,CommunityRating,UserData', }, }); } getAllMovies(): Promise { return this.request(this.endpoint, { userId: this.userId, query: { IncludeItemTypes: 'Movie', Recursive: 'true', Fields: 'ProviderIds', Limit: '10000', }, }); } }