import { BaseEndpoint } from './base'; import { AlternativeTitles, ChangeOptions, Credits, ExternalIds, Images, Keywords, LanguageOption, LatestMovie, MovieChanges, MovieDetails, MovieLists, MoviesPlayingNow, PageOption, PopularMovies, Recommendations, RegionOption, ReleaseDates, Reviews, SimilarMovies, TopRatedMovies, Translations, UpcomingMovies, Videos, WatchProviders, } from '../types'; import { parseOptions } from '../utils'; const BASE_MOVIE = '/movie'; export class MoviesEndpoint extends BaseEndpoint { constructor(protected readonly accessToken: string) { super(accessToken); } async details(id: number): Promise { return await this.api.get(`${BASE_MOVIE}/${id}`); } async alternativeTitles(id: number): Promise { return await this.api.get( `${BASE_MOVIE}/${id}/alternative_titles` ); } async changes(id: number, options?: ChangeOptions): Promise { const params = parseOptions(options); return await this.api.get( `${BASE_MOVIE}/${id}/changes?${params}` ); } async credits(id: number): Promise { return await this.api.get(`${BASE_MOVIE}/${id}/credits`); } async externalIds(id: number): Promise { return await this.api.get(`${BASE_MOVIE}/${id}/external_ids`); } async images(id: number): Promise { return await this.api.get(`${BASE_MOVIE}/${id}/images`); } async keywords(id: number): Promise { return await this.api.get(`${BASE_MOVIE}/${id}/keywords`); } async lists( id: number, options?: LanguageOption | PageOption ): Promise { const params = parseOptions(options); return await this.api.get( `${BASE_MOVIE}/${id}/lists?${params}` ); } async recommendations( id: number, options?: PageOption ): Promise { const params = parseOptions(options); return await this.api.get( `${BASE_MOVIE}/${id}/recommendations?${params}` ); } async releaseDates(id: number): Promise { return await this.api.get( `${BASE_MOVIE}/${id}/release_dates` ); } async reviews(id: number, options?: PageOption): Promise { const params = parseOptions(options); return await this.api.get(`${BASE_MOVIE}/${id}/reviews?${params}`); } async similar(id: number, options?: PageOption): Promise { const params = parseOptions(options); return await this.api.get( `${BASE_MOVIE}/${id}/similar?${params}` ); } async translations(id: number): Promise { return await this.api.get(`${BASE_MOVIE}/${id}/translations`); } async videos(id: number): Promise { return await this.api.get(`${BASE_MOVIE}/${id}/videos`); } /** * Powered by JustWatch * @param id */ async watchProviders(id: number): Promise { return await this.api.get( `${BASE_MOVIE}/${id}/watch/providers` ); } async latest(): Promise { return await this.api.get(`${BASE_MOVIE}/latest`); } async nowPlaying( options?: PageOption & LanguageOption & RegionOption ): Promise { const params = parseOptions(options); return await this.api.get( `${BASE_MOVIE}/now_playing?${params}` ); } async popular(options?: PageOption): Promise { const params = parseOptions(options); return await this.api.get(`${BASE_MOVIE}/popular?${params}`); } async topRated( options?: PageOption & LanguageOption & RegionOption ): Promise { const params = parseOptions(options); return await this.api.get( `${BASE_MOVIE}/top_rated?${params}` ); } async upcoming( options?: PageOption & LanguageOption & RegionOption ): Promise { const params = parseOptions(options); return await this.api.get( `${BASE_MOVIE}/upcoming?${params}` ); } }