From a3bc9ab9f4f66ba115c72d98de4d2e8342a91500 Mon Sep 17 00:00:00 2001 From: ajnart Date: Sun, 7 Aug 2022 12:15:35 +0200 Subject: [PATCH] :label: Add type definitions for Movie/Tv/Request --- src/modules/overseerr/Movie.d.ts | 248 ++++++++++++++++++++ src/modules/overseerr/SearchResult.d.ts | 65 ++++++ src/modules/overseerr/TvShow.d.ts | 295 ++++++++++++++++++++++++ 3 files changed, 608 insertions(+) create mode 100644 src/modules/overseerr/Movie.d.ts create mode 100644 src/modules/overseerr/SearchResult.d.ts create mode 100644 src/modules/overseerr/TvShow.d.ts diff --git a/src/modules/overseerr/Movie.d.ts b/src/modules/overseerr/Movie.d.ts new file mode 100644 index 000000000..558bccbcc --- /dev/null +++ b/src/modules/overseerr/Movie.d.ts @@ -0,0 +1,248 @@ +export interface MovieResult { + id: number; + adult: boolean; + budget: number; + genres: Genre[]; + relatedVideos: RelatedVideo[]; + originalLanguage: string; + originalTitle: string; + popularity: number; + productionCompanies: ProductionCompany[]; + productionCountries: ProductionCountry[]; + releaseDate: Date; + releases: Releases; + revenue: number; + spokenLanguages: SpokenLanguage[]; + status: string; + title: string; + video: boolean; + voteAverage: number; + voteCount: number; + backdropPath: string; + homepage: string; + imdbId: string; + overview: string; + posterPath: string; + runtime: number; + tagline: string; + credits: Credits; + collection: Collection; + externalIds: ExternalIDS; + mediaInfo: Media; + watchProviders: WatchProvider[]; +} + +export interface Collection { + id: number; + name: string; + posterPath: string; + backdropPath: string; +} + +export interface Credits { + cast: Cast[]; + crew: Crew[]; +} + +export interface Cast { + castId: number; + character: string; + creditId: string; + id: number; + name: string; + order: number; + gender: number; + profilePath: null | string; +} + +export interface Crew { + creditId: string; + department: Department; + id: number; + job: string; + name: string; + gender: number; + profilePath: null | string; +} + +export enum Department { + Art = 'Art', + Camera = 'Camera', + CostumeMakeUp = 'Costume & Make-Up', + Crew = 'Crew', + Directing = 'Directing', + Editing = 'Editing', + Production = 'Production', + Sound = 'Sound', + VisualEffects = 'Visual Effects', + Writing = 'Writing', +} + +export interface ExternalIDS { + facebookId: string; + imdbId: string; + instagramId: string; + twitterId: string; +} + +export interface Genre { + id: number; + name: string; +} + +export interface Request { + id: number; + status: number; + createdAt: Date; + updatedAt: Date; + type: string; + is4k: boolean; + serverId: number; + profileId: number; + rootFolder: string; + languageProfileId: null; + tags: any[]; + media: Media; + requestedBy: EdBy; + modifiedBy: EdBy; + seasons: any[]; + seasonCount: number; +} + +export interface Media { + downloadStatus: any[]; + downloadStatus4k: any[]; + id: number; + mediaType: string; + tmdbId: number; + tvdbId: null; + imdbId: null; + status: number; + status4k: number; + createdAt: Date; + updatedAt: Date; + lastSeasonChange: Date; + mediaAddedAt: Date; + serviceId: number; + serviceId4k: null; + externalServiceId: number; + externalServiceId4k: null; + externalServiceSlug: string; + externalServiceSlug4k: null; + ratingKey: string; + ratingKey4k: null; + requests?: Request[]; + issues?: any[]; + seasons: any[]; + plexUrl: string; + serviceUrl: string; +} + +export interface EdBy { + permissions: number; + id: number; + email: string; + plexUsername: string; + username: string; + recoveryLinkExpirationDate: null; + userType: number; + avatar: string; + movieQuotaLimit: null; + movieQuotaDays: null; + tvQuotaLimit: null; + tvQuotaDays: null; + createdAt: Date; + updatedAt: Date; + settings: Settings; + requestCount: number; + displayName: string; +} + +export interface Settings { + id: number; + locale: string; + region: string; + originalLanguage: null; + pgpKey: null; + discordId: string; + pushbulletAccessToken: null; + pushoverApplicationToken: null; + pushoverUserKey: null; + telegramChatId: null; + telegramSendSilently: null; + notificationTypes: NotificationTypes; +} + +export interface NotificationTypes { + discord: number; + email: number; + webpush: number; +} + +export interface ProductionCompany { + id: number; + name: string; + originCountry?: string; + logoPath: string; + displayPriority?: number; +} + +export interface ProductionCountry { + iso_3166_1: string; + name: string; +} + +export interface RelatedVideo { + site: string; + key: string; + name: string; + size: number; + type: string; + url: string; +} + +export interface Releases { + results: Result[]; +} + +export interface Result { + iso_3166_1: string; + release_dates: ReleaseDate[]; +} + +export interface ReleaseDate { + certification: string; + iso_639_1: ISO639_1 | null; + note: Note; + release_date: Date; + type: number; +} + +export enum ISO639_1 { + CS = 'cs', + Empty = '', +} + +export enum Note { + Empty = '', + HBOMax = 'HBO Max', + LosAngelesCalifornia = 'Los Angeles, California', + Starz = 'STARZ', + The4KUHDBluRayDVD = '4K UHD, Blu-ray & DVD', + TheMoreFunStuffVersion = 'The More Fun Stuff Version', + Tvod = 'TVOD', + VOD = 'VOD', +} + +export interface SpokenLanguage { + english_name: string; + iso_639_1: string; + name: string; +} + +export interface WatchProvider { + iso_3166_1: string; + link: string; + buy: ProductionCompany[]; + flatrate: ProductionCompany[]; +} diff --git a/src/modules/overseerr/SearchResult.d.ts b/src/modules/overseerr/SearchResult.d.ts new file mode 100644 index 000000000..89b3d3ade --- /dev/null +++ b/src/modules/overseerr/SearchResult.d.ts @@ -0,0 +1,65 @@ +export interface SearchResult { + page: number; + totalPages: number; + totalResults: number; + results: Result[]; +} + +export interface Result { + id: number; + mediaType: MediaType; + adult?: boolean; + genreIds: number[]; + originalLanguage: OriginalLanguage; + originalTitle?: string; + overview: string; + popularity: number; + releaseDate?: Date; + title?: string; + video?: boolean; + voteAverage: number; + voteCount: number; + backdropPath: null | string; + posterPath: string; + mediaInfo?: MediaInfo; + firstAirDate?: Date; + name?: string; + originCountry?: string[]; + originalName?: string; +} + +export interface MediaInfo { + downloadStatus: any[]; + downloadStatus4k: any[]; + id: number; + mediaType: MediaType; + tmdbId: number; + tvdbId: null; + imdbId: null; + status: number; + status4k: number; + createdAt: Date; + updatedAt: Date; + lastSeasonChange: Date; + mediaAddedAt: Date; + serviceId: number; + serviceId4k: null; + externalServiceId: number; + externalServiceId4k: null; + externalServiceSlug: string; + externalServiceSlug4k: null; + ratingKey: string; + ratingKey4k: null; + seasons: any[]; + plexUrl: string; + serviceUrl: string; +} + +export enum MediaType { + Movie = 'movie', + Tv = 'tv', +} + +export enum OriginalLanguage { + En = 'en', +} diff --git a/src/modules/overseerr/TvShow.d.ts b/src/modules/overseerr/TvShow.d.ts new file mode 100644 index 000000000..f9c3bd64a --- /dev/null +++ b/src/modules/overseerr/TvShow.d.ts @@ -0,0 +1,295 @@ +export interface TvShowResult { + createdBy: CreatedBy[]; + episodeRunTime: number[]; + firstAirDate: Date; + genres: Genre[]; + relatedVideos: RelatedVideo[]; + homepage: string; + id: number; + inProduction: boolean; + languages: string[]; + lastAirDate: Date; + name: string; + networks: Network[]; + numberOfEpisodes: number; + numberOfSeasons: number; + originCountry: string[]; + originalLanguage: string; + originalName: string; + tagline: string; + overview: string; + popularity: number; + productionCompanies: Network[]; + productionCountries: ProductionCountry[]; + contentRatings: ContentRatings; + spokenLanguages: SpokenLanguage[]; + seasons: TvShowResultSeason[]; + status: string; + type: string; + voteAverage: number; + voteCount: number; + backdropPath: string; + lastEpisodeToAir: LastEpisodeToAir; + posterPath: string; + credits: Credits; + externalIds: ExternalIDS; + keywords: Genre[]; + mediaInfo: Media; + watchProviders: WatchProvider[]; +} + +export interface ContentRatings { + results: Result[]; +} + +export interface Result { + iso_3166_1: string; + rating: string; +} + +export interface CreatedBy { + id: number; + credit_id: string; + name: string; + gender: number; + profile_path: string; +} + +export interface Credits { + cast: Cast[]; + crew: Crew[]; +} + +export interface Cast { + character: string; + creditId: string; + id: number; + name: string; + order: number; + gender: number; + profilePath: null | string; +} + +export interface Crew { + creditId: string; + department: string; + id: number; + job: string; + name: string; + gender: number; + profilePath: string; +} + +export interface ExternalIDS { + facebookId: string; + freebaseId: null; + freebaseMid: string; + imdbId: string; + instagramId: string; + tvdbId: number; + tvrageId: number; + twitterId: string; +} + +export interface Genre { + id: number; + name: string; +} + +export interface LastEpisodeToAir { + id: number; + airDate: Date; + episodeNumber: number; + name: string; + overview: string; + productionCode: string; + seasonNumber: number; + showId: number; + voteAverage: number; + stillPath: string; +} + +export interface Request { + id: number; + status: number; + createdAt: Date; + updatedAt: Date; + type: Type; + is4k: boolean; + serverId: null; + profileId: null; + rootFolder: null; + languageProfileId: null; + tags: null; + media: Media; + requestedBy: EdBy; + modifiedBy: EdBy; + seasons: MediaInfoSeason[]; + seasonCount: number; +} + +export interface Media { + downloadStatus: DownloadStatus[]; + downloadStatus4k: any[]; + id: number; + mediaType: Type; + tmdbId: number; + tvdbId: number; + imdbId: null; + status: number; + status4k: number; + createdAt: Date; + updatedAt: Date; + lastSeasonChange: Date; + mediaAddedAt: Date; + serviceId: number; + serviceId4k: null; + externalServiceId: number; + externalServiceId4k: null; + externalServiceSlug: string; + externalServiceSlug4k: null; + ratingKey: string; + ratingKey4k: null; + requests?: Request[]; + issues?: any[]; + seasons: MediaInfoSeason[]; + plexUrl: string; + serviceUrl: string; +} + +export interface EdBy { + permissions: number; + id: number; + email: string; + plexUsername: string; + username: string; + recoveryLinkExpirationDate: null; + userType: number; + avatar: string; + movieQuotaLimit: null; + movieQuotaDays: null; + tvQuotaLimit: null; + tvQuotaDays: null; + createdAt: Date; + updatedAt: Date; + settings: Settings; + requestCount: number; + displayName: string; +} + +export interface Settings { + id: number; + locale: string; + region: string; + originalLanguage: null; + pgpKey: null; + discordId: string; + pushbulletAccessToken: null; + pushoverApplicationToken: null; + pushoverUserKey: null; + telegramChatId: null; + telegramSendSilently: null; + notificationTypes: NotificationTypes; +} + +export interface NotificationTypes { + discord: number; + email: number; + webpush: number; +} + +export interface MediaInfoSeason { + id: number; + seasonNumber: number; + status: number; + status4k?: number; + createdAt: Date; + updatedAt: Date; +} + +export enum Type { + Tv = 'tv', +} + +export interface DownloadStatus { + externalId: number; + estimatedCompletionTime: Date; + mediaType: Type; + size: number; + sizeLeft: number; + status: Status; + timeLeft: string; + title: string; +} + +export enum Status { + Completed = 'completed', + Downloading = 'downloading', +} + +export interface Network { + id: number; + name: Name; + originCountry?: string; + logoPath: LogoPath | null; + displayPriority?: number; +} + +export enum LogoPath { + HbifXPpM55B1FL5WPo7T72VzN78PNG = '/hbifXPpM55B1fL5wPo7t72vzN78.png', + KhiCshsZBdtUUYOr4VLoCtuqCEqPNG = '/khiCshsZBdtUUYOr4VLoCtuqCEq.png', + O9ExgOSLF3OTwR6T3DJOuwOKJgqJpg = '/o9ExgOSLF3OTwR6T3DJOuwOKJgq.jpg', + PEURlLlr8JggOwK53FJ5WdQl05YJpg = '/peURlLlr8jggOwK53fJ5wdQl05y.jpg', + T2YyOv40HZeVlLjYsCSPHnWLk4WJpg = '/t2yyOv40HZeVlLjYsCsPHnWLk4W.jpg', + TBEdFQDwx5LEVr8WpSEXQSIirVqJpg = '/tbEdFQDwx5LEVr8WpSeXQSIirVq.jpg', + The5NyLm42TmCqCMOZFvH4FcoSNKEWJpg = '/5NyLm42TmCqCMOZFvH4fcoSNKEW.jpg', + WwemzKWzjKYJFfCeiB57Q3R4BcmPNG = '/wwemzKWzjKYJFfCeiB57q3r4Bcm.png', +} + +export enum Name { + AmazonVideo = 'Amazon Video', + AppleITunes = 'Apple iTunes', + Channel4 = 'Channel 4', + GooglePlayMovies = 'Google Play Movies', + HouseOfTomorrow = 'House of Tomorrow', + Ivi = 'Ivi', + Netflix = 'Netflix', + Zeppotron = 'Zeppotron', +} + +export interface ProductionCountry { + iso_3166_1: string; + name: string; +} + +export interface RelatedVideo { + site: string; + key: string; + name: string; + size: number; + type: string; + url: string; +} + +export interface TvShowResultSeason { + airDate: Date; + episodeCount: number; + id: number; + name: string; + overview: string; + seasonNumber: number; + posterPath: string; +} + +export interface SpokenLanguage { + englishName: string; + iso_639_1: string; + name: string; +} + +export interface WatchProvider { + iso_3166_1: string; + link: string; + buy: Network[]; + flatrate: Network[]; +}