import { BaseEndpoint } from './base'; import { AlternativeTitles, ChangeOptions, Credits, ExternalIds, Images, Keywords, LatestMovie, MovieChanges, MovieDetails, MovieLists, MoviesPlayingNow, PopularMovies, Recommendations, ReleaseDates, Reviews, SimilarMovies, TopRatedMovies, Translations, UpcomingMovies, Videos, WatchProviders, } from '../types'; import querystring from 'querystring'; 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 = querystring.encode(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?: {page?: number}): Promise{ const params = querystring.encode(options); return await this.api.get(`${BASE_MOVIE}/${id}/lists?${params}`); } async recommendations(id: number, options?: {page?: number}): Promise{ const params = querystring.encode(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?: {page?: number}): Promise{ const params = querystring.encode(options); return await this.api.get(`${BASE_MOVIE}/${id}/reviews?${params}`); } async similar(id: number, options?: {page?: number}): Promise{ const params = querystring.encode(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?: {page?: number, region?: string, language?: string}): Promise{ const params = querystring.encode(options); return await this.api.get(`${BASE_MOVIE}/now_playing?${params}`); } async popular(options?: {page?: number}): Promise{ const params = querystring.encode(options); return await this.api.get(`${BASE_MOVIE}/popular?${params}`); } async topRated(options?: {page?: number, region?: string, language?: string}): Promise{ const params = querystring.encode(options); return await this.api.get(`${BASE_MOVIE}/top_rated?${params}`); } async upcoming(options?: {page?: number, region?: string, language?: string}): Promise{ const params = querystring.encode(options); return await this.api.get(`${BASE_MOVIE}/upcoming?${params}`); } }