import { BaseEndpoint } from './base'; import { AggregateCredits, AlternativeTitles, AppendToResponse, AppendToResponseTvKey, ChangeOption, Changes, ContentRatings, Credits, EpisodeGroups, ExternalIds, Images, Keywords, LanguageOption, LatestTvShows, OnTheAir, PageOption, PopularTvShows, Recommendations, Reviews, ScreenedTheatrically, SeasonDetails, SimilarTvShows, TimezoneOption, TopRatedTvShows, Translations, TvShowImageOptions, TvShowVideoOptions, TvShowChangeValue, TvShowDetails, TvShowsAiringToday, Videos, WatchProviders, } from '../types'; const BASE_TV = '/tv'; export class TvShowsEndpoint extends BaseEndpoint { constructor(protected readonly accessToken: string) { super(accessToken); } async details( id: number, appendToResponse?: T, language?: string ) { const options = { append_to_response: appendToResponse ? appendToResponse.join(',') : undefined, language: language, }; return await this.api.get>( `${BASE_TV}/${id}`, options ); } async alternativeTitles(id: number): Promise { return await this.api.get( `${BASE_TV}/${id}/alternative_titles` ); } async changes( id: number, options?: ChangeOption ): Promise> { return await this.api.get>( `${BASE_TV}/${id}/changes`, options ); } async contentRatings(id: number): Promise { return await this.api.get( `${BASE_TV}/${id}/content_ratings` ); } async aggregateCredits(id: number, options?: LanguageOption): Promise { return await this.api.get( `${BASE_TV}/${id}/aggregate_credits`, options ); } async credits(id: number, options?: LanguageOption): Promise { return await this.api.get(`${BASE_TV}/${id}/credits`, options); } async season(tvId: number, seasonNumber: number): Promise { return await this.api.get( `${BASE_TV}/${tvId}/season/${seasonNumber}` ); } async episodeGroups(id: number): Promise { return await this.api.get(`${BASE_TV}/${id}/episode_groups`); } async externalIds(id: number): Promise { return await this.api.get(`${BASE_TV}/${id}/external_ids`); } async images(id: number, options?: TvShowImageOptions): Promise { const computedOptions = { include_image_language: options?.include_image_language?.join(','), language: options?.language, }; return await this.api.get(`${BASE_TV}/${id}/images`, computedOptions); } async keywords(id: number): Promise { return await this.api.get(`${BASE_TV}/${id}/keywords`); } async recommendations( id: number, options?: LanguageOption & PageOption ): Promise { return await this.api.get( `${BASE_TV}/${id}/recommendations`, options ); } async reviews(id: number, options?: LanguageOption & PageOption): Promise { return await this.api.get(`${BASE_TV}/${id}/reviews`, options); } async screenedTheatrically(id: number): Promise { return await this.api.get( `${BASE_TV}/${id}/screened_theatrically` ); } async similar(id: number, options?: LanguageOption & PageOption): Promise { return await this.api.get( `${BASE_TV}/${id}/similar`, options ); } async translations(id: number): Promise { return await this.api.get(`${BASE_TV}/${id}/translations`); } async videos(id: number, options?: TvShowVideoOptions): Promise { const computedOptions = { include_video_language: options?.include_video_language?.join(','), language: options?.language, }; return await this.api.get(`${BASE_TV}/${id}/videos`, computedOptions); } /** * Powered by JustWatch * @param id */ async watchProviders(id: number): Promise { return await this.api.get( `${BASE_TV}/${id}/watch/providers` ); } async latest(): Promise { return await this.api.get(`${BASE_TV}/latest`); } async onTheAir( options?: PageOption & LanguageOption & TimezoneOption ): Promise { return await this.api.get(`${BASE_TV}/on_the_air`, options); } async airingToday( options?: PageOption & LanguageOption & TimezoneOption ): Promise { return await this.api.get( `${BASE_TV}/airing_today`, options ); } async popular( options?: PageOption & LanguageOption ): Promise { return await this.api.get(`${BASE_TV}/popular`, options); } async topRated( options?: PageOption & LanguageOption ): Promise { return await this.api.get(`${BASE_TV}/top_rated`, options); } }