From 266d81688c9a4c6d3fc1f00d987df78c0cdcefaf Mon Sep 17 00:00:00 2001 From: aasmoe Date: Tue, 9 Dec 2025 10:29:05 +0000 Subject: [PATCH 01/12] feat: Add multi-language metadata support - Add primary_languages config setting (ISO 639-1 codes) - Fetch metadata in original language when in primary_languages - Display original titles in search results for configured languages - Download language-specific posters when available --- config.example.toml | 7 ++ media_manager/metadataProvider/config.py | 3 + media_manager/metadataProvider/tmdb.py | 116 +++++++++++++++++++---- metadata_relay/app/tmdb.py | 12 +-- 4 files changed, 115 insertions(+), 23 deletions(-) diff --git a/config.example.toml b/config.example.toml index ed5f1b6..d762a1e 100644 --- a/config.example.toml +++ b/config.example.toml @@ -86,6 +86,13 @@ enabled = false api_key = "" user = "" +[metadata] +# Primary languages for metadata fetching (ISO 639-1 codes) +# When a TV show or movie's original language matches one of these languages, +# MediaManager will display the original title and fetch metadata in that language. +# Examples: ["en", "no", "da"] +primary_languages = ["en"] + [torrents] # qBittorrent settings [torrents.qbittorrent] diff --git a/media_manager/metadataProvider/config.py b/media_manager/metadataProvider/config.py index 1997612..0dd31b9 100644 --- a/media_manager/metadataProvider/config.py +++ b/media_manager/metadataProvider/config.py @@ -12,3 +12,6 @@ class TvdbConfig(BaseSettings): class MetadataProviderConfig(BaseSettings): tvdb: TvdbConfig = TvdbConfig() tmdb: TmdbConfig = TmdbConfig() + # ISO 639-1 language codes (e.g., ["en", "no", "sv"]) + # When media's original language matches one of these, original title and metadata will be used + primary_languages: list[str] = ["en"] diff --git a/media_manager/metadataProvider/tmdb.py b/media_manager/metadataProvider/tmdb.py index 45f27ea..b2cb672 100644 --- a/media_manager/metadataProvider/tmdb.py +++ b/media_manager/metadataProvider/tmdb.py @@ -22,12 +22,28 @@ class TmdbMetadataProvider(AbstractMetadataProvider): name = "tmdb" def __init__(self): - config = AllEncompassingConfig().metadata.tmdb - self.url = config.tmdb_relay_url + config = AllEncompassingConfig() + self.url = config.metadata.tmdb.tmdb_relay_url + self.primary_languages = config.metadata.primary_languages - def __get_show_metadata(self, id: int) -> dict: + def __get_language_param(self, original_language: str | None) -> str: + """ + Determine the language parameter to use for TMDB API calls. + Returns the original language if it's in primary_languages, otherwise returns English. + + :param original_language: The original language code (ISO 639-1) of the media + :return: Language parameter (ISO 639-1 format, e.g., 'en', 'no') + """ + if original_language and original_language in self.primary_languages: + return original_language + return "en" + + def __get_show_metadata(self, id: int, language: str = "en") -> dict: try: - response = requests.get(url=f"{self.url}/tv/shows/{id}") + response = requests.get( + url=f"{self.url}/tv/shows/{id}", + params={"language": language} + ) response.raise_for_status() return response.json() except requests.RequestException as e: @@ -39,10 +55,11 @@ class TmdbMetadataProvider(AbstractMetadataProvider): ) raise - def __get_season_metadata(self, show_id: int, season_number: int) -> dict: + def __get_season_metadata(self, show_id: int, season_number: int, language: str = "en") -> dict: try: response = requests.get( - url=f"{self.url}/tv/shows/{show_id}/{season_number}" + url=f"{self.url}/tv/shows/{show_id}/{season_number}", + params={"language": language} ) response.raise_for_status() return response.json() @@ -87,9 +104,12 @@ class TmdbMetadataProvider(AbstractMetadataProvider): ) raise - def __get_movie_metadata(self, id: int) -> dict: + def __get_movie_metadata(self, id: int, language: str = "en") -> dict: try: - response = requests.get(url=f"{self.url}/movies/{id}") + response = requests.get( + url=f"{self.url}/movies/{id}", + params={"language": language} + ) response.raise_for_status() return response.json() except requests.RequestException as e: @@ -132,7 +152,17 @@ class TmdbMetadataProvider(AbstractMetadataProvider): raise def download_show_poster_image(self, show: Show) -> bool: + # First fetch to get original_language show_metadata = self.__get_show_metadata(show.external_id) + original_language = show_metadata.get("original_language") + + # Determine which language to use + language = self.__get_language_param(original_language) + + # Fetch metadata in the appropriate language to get localized poster + if language != "en": + show_metadata = self.__get_show_metadata(show.external_id, language=language) + # downloading the poster # all pictures from TMDB should already be jpeg, so no need to convert if show_metadata["poster_path"] is not None: @@ -159,12 +189,23 @@ class TmdbMetadataProvider(AbstractMetadataProvider): :return: returns a ShowMetadata object :rtype: ShowMetadata """ + show_metadata = self.__get_show_metadata(id) + original_language = show_metadata.get("original_language") + + # Determine which language to use for metadata + language = self.__get_language_param(original_language) + + # Fetch show metadata in the appropriate language + show_metadata = self.__get_show_metadata(id, language=language) + season_list = [] # inserting all the metadata into the objects for season in show_metadata["seasons"]: season_metadata = self.__get_season_metadata( - show_id=show_metadata["id"], season_number=season["season_number"] + show_id=show_metadata["id"], + season_number=season["season_number"], + language=language ) episode_list = [] @@ -231,11 +272,21 @@ class TmdbMetadataProvider(AbstractMetadataProvider): ) else: poster_url = None + + # Determine which name to use based on primary_languages + original_language = result.get("original_language") + original_name = result.get("original_name") + display_name = result["name"] + + # Use original name if language is in primary_languages + if original_language and original_language in self.primary_languages: + display_name = original_name + formatted_results.append( MetaDataProviderSearchResult( poster_path=poster_url, overview=result["overview"], - name=result["name"], + name=display_name, external_id=result["id"], year=media_manager.metadataProvider.utils.get_year_from_date( result["first_air_date"] @@ -243,6 +294,7 @@ class TmdbMetadataProvider(AbstractMetadataProvider): metadata_provider=self.name, added=False, vote_average=result["vote_average"], + original_language=original_language, ) ) except Exception as e: @@ -252,12 +304,21 @@ class TmdbMetadataProvider(AbstractMetadataProvider): def get_movie_metadata(self, id: int = None) -> Movie: """ - :param id: the external id of the show + :param id: the external id of the movie :type id: int - :return: returns a ShowMetadata object - :rtype: ShowMetadata + :return: returns a Movie object + :rtype: Movie """ + movie_metadata = self.__get_movie_metadata(id=id) + original_language = movie_metadata.get("original_language") + + # Determine which language to use for metadata + language = self.__get_language_param(original_language) + + # Fetch movie metadata in the appropriate language + movie_metadata = self.__get_movie_metadata(id=id, language=language) + year = media_manager.metadataProvider.utils.get_year_from_date( movie_metadata["release_date"] ) @@ -300,11 +361,21 @@ class TmdbMetadataProvider(AbstractMetadataProvider): ) else: poster_url = None + + # Determine which name to use based on primary_languages + original_language = result.get("original_language") + original_title = result.get("original_title") + display_name = result["title"] + + # Use original title if language is in primary_languages + if original_language and original_language in self.primary_languages and original_title: + display_name = original_title + formatted_results.append( MetaDataProviderSearchResult( poster_path=poster_url, overview=result["overview"], - name=result["title"], + name=display_name, external_id=result["id"], year=media_manager.metadataProvider.utils.get_year_from_date( result["release_date"] @@ -312,6 +383,7 @@ class TmdbMetadataProvider(AbstractMetadataProvider): metadata_provider=self.name, added=False, vote_average=result["vote_average"], + original_language=original_language, ) ) except Exception as e: @@ -319,7 +391,17 @@ class TmdbMetadataProvider(AbstractMetadataProvider): return formatted_results def download_movie_poster_image(self, movie: Movie) -> bool: + # First fetch to get original_language movie_metadata = self.__get_movie_metadata(id=movie.external_id) + original_language = movie_metadata.get("original_language") + + # Determine which language to use + language = self.__get_language_param(original_language) + + # Fetch metadata in the appropriate language to get localized poster + if language != "en": + movie_metadata = self.__get_movie_metadata(id=movie.external_id, language=language) + # downloading the poster # all pictures from TMDB should already be jpeg, so no need to convert if movie_metadata["poster_path"] is not None: @@ -329,11 +411,11 @@ class TmdbMetadataProvider(AbstractMetadataProvider): if media_manager.metadataProvider.utils.download_poster_image( storage_path=self.storage_path, poster_url=poster_url, id=movie.id ): - log.info("Successfully downloaded poster image for show " + movie.name) + log.info("Successfully downloaded poster image for movie " + movie.name) else: - log.warning(f"download for image of show {movie.name} failed") + log.warning(f"download for image of movie {movie.name} failed") return False else: - log.warning(f"image for show {movie.name} could not be downloaded") + log.warning(f"image for movie {movie.name} could not be downloaded") return False return True diff --git a/metadata_relay/app/tmdb.py b/metadata_relay/app/tmdb.py index d2b3afc..053cb91 100644 --- a/metadata_relay/app/tmdb.py +++ b/metadata_relay/app/tmdb.py @@ -24,12 +24,12 @@ else: return Search().tv(page=page, query=query, include_adult=True) @router.get("/tv/shows/{show_id}") - async def get_tmdb_show(show_id: int): - return TV(show_id).info() + async def get_tmdb_show(show_id: int, language: str = "en"): + return TV(show_id).info(language=language) @router.get("/tv/shows/{show_id}/{season_number}") - async def get_tmdb_season(season_number: int, show_id: int): - return TV_Seasons(season_number=season_number, tv_id=show_id).info() + async def get_tmdb_season(season_number: int, show_id: int, language: str = "en"): + return TV_Seasons(season_number=season_number, tv_id=show_id).info(language=language) @router.get("/movies/trending") async def get_tmdb_trending_movies(): @@ -40,5 +40,5 @@ else: return Search().movie(page=page, query=query, include_adult=True) @router.get("/movies/{movie_id}") - async def get_tmdb_movie(movie_id: int): - return Movies(movie_id).info() + async def get_tmdb_movie(movie_id: int, language: str = "en"): + return Movies(movie_id).info(language=language) From 1caff774120b3944ae29c0b897ffb5d664021c78 Mon Sep 17 00:00:00 2001 From: aasmoe Date: Thu, 11 Dec 2025 21:22:33 +0000 Subject: [PATCH 02/12] WIP: current progress --- media_manager/metadataProvider/config.py | 6 +- media_manager/metadataProvider/tmdb.py | 77 +++++++++++++++--------- media_manager/movies/router.py | 2 + media_manager/movies/service.py | 5 +- media_manager/tv/router.py | 3 +- media_manager/tv/service.py | 7 ++- metadata_relay/app/tmdb.py | 16 ++--- 7 files changed, 69 insertions(+), 47 deletions(-) diff --git a/media_manager/metadataProvider/config.py b/media_manager/metadataProvider/config.py index 0dd31b9..67de5ec 100644 --- a/media_manager/metadataProvider/config.py +++ b/media_manager/metadataProvider/config.py @@ -3,7 +3,8 @@ from pydantic_settings import BaseSettings class TmdbConfig(BaseSettings): tmdb_relay_url: str = "https://metadata-relay.dorninger.co/tmdb" - + primary_languages: list[str] = [] # ISO 639-1 language codes + default_language: str = "en" # ISO 639-1 language codes class TvdbConfig(BaseSettings): tvdb_relay_url: str = "https://metadata-relay.dorninger.co/tvdb" @@ -12,6 +13,3 @@ class TvdbConfig(BaseSettings): class MetadataProviderConfig(BaseSettings): tvdb: TvdbConfig = TvdbConfig() tmdb: TmdbConfig = TmdbConfig() - # ISO 639-1 language codes (e.g., ["en", "no", "sv"]) - # When media's original language matches one of these, original title and metadata will be used - primary_languages: list[str] = ["en"] diff --git a/media_manager/metadataProvider/tmdb.py b/media_manager/metadataProvider/tmdb.py index b2cb672..3d91d54 100644 --- a/media_manager/metadataProvider/tmdb.py +++ b/media_manager/metadataProvider/tmdb.py @@ -24,21 +24,24 @@ class TmdbMetadataProvider(AbstractMetadataProvider): def __init__(self): config = AllEncompassingConfig() self.url = config.metadata.tmdb.tmdb_relay_url - self.primary_languages = config.metadata.primary_languages + self.primary_languages = config.metadata.tmdb.primary_languages + self.default_language = config.metadata.tmdb.default_language def __get_language_param(self, original_language: str | None) -> str: """ Determine the language parameter to use for TMDB API calls. - Returns the original language if it's in primary_languages, otherwise returns English. + Returns the original language if it's in primary_languages, otherwise returns default_language. :param original_language: The original language code (ISO 639-1) of the media :return: Language parameter (ISO 639-1 format, e.g., 'en', 'no') """ if original_language and original_language in self.primary_languages: return original_language - return "en" + return self.default_language - def __get_show_metadata(self, id: int, language: str = "en") -> dict: + def __get_show_metadata(self, id: int, language: str | None = None) -> dict: + if language is None: + language = self.default_language try: response = requests.get( url=f"{self.url}/tv/shows/{id}", @@ -55,7 +58,9 @@ class TmdbMetadataProvider(AbstractMetadataProvider): ) raise - def __get_season_metadata(self, show_id: int, season_number: int, language: str = "en") -> dict: + def __get_season_metadata(self, show_id: int, season_number: int, language: str | None = None) -> dict: + if language is None: + language = self.default_language try: response = requests.get( url=f"{self.url}/tv/shows/{show_id}/{season_number}", @@ -77,7 +82,7 @@ class TmdbMetadataProvider(AbstractMetadataProvider): def __search_tv(self, query: str, page: int) -> dict: try: response = requests.get( - url=f"{self.url}/tv/search", params={"query": query, "page": page} + url=f"{self.url}/tv/search", params={"query": query, "page": page, "language": self.default_language} ) response.raise_for_status() return response.json() @@ -92,7 +97,7 @@ class TmdbMetadataProvider(AbstractMetadataProvider): def __get_trending_tv(self) -> dict: try: - response = requests.get(url=f"{self.url}/tv/trending") + response = requests.get(url=f"{self.url}/tv/trending", params={"language": self.default_language}) response.raise_for_status() return response.json() except requests.RequestException as e: @@ -104,7 +109,9 @@ class TmdbMetadataProvider(AbstractMetadataProvider): ) raise - def __get_movie_metadata(self, id: int, language: str = "en") -> dict: + def __get_movie_metadata(self, id: int, language: str | None = None) -> dict: + if language is None: + language = self.default_language try: response = requests.get( url=f"{self.url}/movies/{id}", @@ -124,7 +131,7 @@ class TmdbMetadataProvider(AbstractMetadataProvider): def __search_movie(self, query: str, page: int) -> dict: try: response = requests.get( - url=f"{self.url}/movies/search", params={"query": query, "page": page} + url=f"{self.url}/movies/search", params={"query": query, "page": page, "language": self.default_language} ) response.raise_for_status() return response.json() @@ -139,7 +146,7 @@ class TmdbMetadataProvider(AbstractMetadataProvider): def __get_trending_movies(self) -> dict: try: - response = requests.get(url=f"{self.url}/movies/trending") + response = requests.get(url=f"{self.url}/movies/trending", params={"language": self.default_language}) response.raise_for_status() return response.json() except requests.RequestException as e: @@ -160,7 +167,7 @@ class TmdbMetadataProvider(AbstractMetadataProvider): language = self.__get_language_param(original_language) # Fetch metadata in the appropriate language to get localized poster - if language != "en": + if language != self.default_language: show_metadata = self.__get_show_metadata(show.external_id, language=language) # downloading the poster @@ -181,20 +188,23 @@ class TmdbMetadataProvider(AbstractMetadataProvider): return False return True - def get_show_metadata(self, id: int = None) -> Show: + def get_show_metadata(self, id: int = None, language: str | None = None) -> Show: """ :param id: the external id of the show :type id: int - :return: returns a ShowMetadata object - :rtype: ShowMetadata + :param language: optional language code (ISO 639-1) to fetch metadata in + :type language: str | None + :return: returns a Show object + :rtype: Show """ - - show_metadata = self.__get_show_metadata(id) - original_language = show_metadata.get("original_language") + # If language not provided, fetch once to determine original language + if language is None: + show_metadata = self.__get_show_metadata(id) + language = show_metadata.get("original_language") # Determine which language to use for metadata - language = self.__get_language_param(original_language) + language = self.__get_language_param(language) # Fetch show metadata in the appropriate language show_metadata = self.__get_show_metadata(id, language=language) @@ -278,14 +288,17 @@ class TmdbMetadataProvider(AbstractMetadataProvider): original_name = result.get("original_name") display_name = result["name"] - # Use original name if language is in primary_languages + overview = result["overview"] + # Use original name if language is in primary_languages and skip overview if original_language and original_language in self.primary_languages: display_name = original_name + overview = None + formatted_results.append( MetaDataProviderSearchResult( poster_path=poster_url, - overview=result["overview"], + overview=overview, name=display_name, external_id=result["id"], year=media_manager.metadataProvider.utils.get_year_from_date( @@ -301,20 +314,24 @@ class TmdbMetadataProvider(AbstractMetadataProvider): log.warning(f"Error processing search result: {e}") return formatted_results - def get_movie_metadata(self, id: int = None) -> Movie: + def get_movie_metadata(self, id: int = None, language: str | None = None) -> Movie: """ + Get movie metadata with language-aware fetching. :param id: the external id of the movie :type id: int + :param language: optional language code (ISO 639-1) to fetch metadata in + :type language: str | None :return: returns a Movie object :rtype: Movie """ - - movie_metadata = self.__get_movie_metadata(id=id) - original_language = movie_metadata.get("original_language") + # If language not provided, fetch once to determine original language + if language is None: + movie_metadata = self.__get_movie_metadata(id=id) + language = movie_metadata.get("original_language") # Determine which language to use for metadata - language = self.__get_language_param(original_language) + language = self.__get_language_param(language) # Fetch movie metadata in the appropriate language movie_metadata = self.__get_movie_metadata(id=id, language=language) @@ -367,14 +384,16 @@ class TmdbMetadataProvider(AbstractMetadataProvider): original_title = result.get("original_title") display_name = result["title"] - # Use original title if language is in primary_languages - if original_language and original_language in self.primary_languages and original_title: + overview = result["overview"] + # Use original name if language is in primary_languages and skip overview + if original_language and original_language in self.primary_languages: display_name = original_title + overview = None formatted_results.append( MetaDataProviderSearchResult( poster_path=poster_url, - overview=result["overview"], + overview=overview, name=display_name, external_id=result["id"], year=media_manager.metadataProvider.utils.get_year_from_date( @@ -399,7 +418,7 @@ class TmdbMetadataProvider(AbstractMetadataProvider): language = self.__get_language_param(original_language) # Fetch metadata in the appropriate language to get localized poster - if language != "en": + if language != self.default_language: movie_metadata = self.__get_movie_metadata(id=movie.external_id, language=language) # downloading the poster diff --git a/media_manager/movies/router.py b/media_manager/movies/router.py index c3eed06..26559af 100644 --- a/media_manager/movies/router.py +++ b/media_manager/movies/router.py @@ -55,11 +55,13 @@ def add_a_movie( movie_service: movie_service_dep, metadata_provider: metadata_provider_dep, movie_id: int, + language: str | None = None, ): try: movie = movie_service.add_movie( external_id=movie_id, metadata_provider=metadata_provider, + language=language, ) except ValueError: movie = movie_service.get_movie_by_external_id( diff --git a/media_manager/movies/service.py b/media_manager/movies/service.py index 8ce269d..a4a6c04 100644 --- a/media_manager/movies/service.py +++ b/media_manager/movies/service.py @@ -60,15 +60,16 @@ class MovieService: self.notification_service = notification_service def add_movie( - self, external_id: int, metadata_provider: AbstractMetadataProvider + self, external_id: int, metadata_provider: AbstractMetadataProvider, language: str | None = None ) -> Movie | None: """ Add a new movie to the database. :param external_id: The ID of the movie in the metadata provider's system. :param metadata_provider: The name of the metadata provider. + :param language: Optional language code (ISO 639-1) to fetch metadata in. """ - movie_with_metadata = metadata_provider.get_movie_metadata(id=external_id) + movie_with_metadata = metadata_provider.get_movie_metadata(id=external_id, language=language) saved_movie = self.movie_repository.save_movie(movie=movie_with_metadata) metadata_provider.download_movie_poster_image(movie=saved_movie) return saved_movie diff --git a/media_manager/tv/router.py b/media_manager/tv/router.py index 16956f4..0a2d902 100644 --- a/media_manager/tv/router.py +++ b/media_manager/tv/router.py @@ -59,12 +59,13 @@ router = APIRouter() }, ) def add_a_show( - tv_service: tv_service_dep, metadata_provider: metadata_provider_dep, show_id: int + tv_service: tv_service_dep, metadata_provider: metadata_provider_dep, show_id: int, language: str | None = None ): try: show = tv_service.add_show( external_id=show_id, metadata_provider=metadata_provider, + language=language, ) except MediaAlreadyExists: show = tv_service.get_show_by_external_id( diff --git a/media_manager/tv/service.py b/media_manager/tv/service.py index 33e2454..0bf633c 100644 --- a/media_manager/tv/service.py +++ b/media_manager/tv/service.py @@ -66,15 +66,16 @@ class TvService: self.notification_service = notification_service def add_show( - self, external_id: int, metadata_provider: AbstractMetadataProvider + self, external_id: int, metadata_provider: AbstractMetadataProvider, language: str | None = None ) -> Show | None: """ Add a new show to the database. - :param external_id: The ID of the show in the metadata provider\\\'s system. + :param external_id: The ID of the show in the metadata provider\'s system. :param metadata_provider: The name of the metadata provider. + :param language: Optional language code (ISO 639-1) to fetch metadata in. """ - show_with_metadata = metadata_provider.get_show_metadata(id=external_id) + show_with_metadata = metadata_provider.get_show_metadata(id=external_id, language=language) saved_show = self.tv_repository.save_show(show=show_with_metadata) metadata_provider.download_show_poster_image(show=saved_show) return saved_show diff --git a/metadata_relay/app/tmdb.py b/metadata_relay/app/tmdb.py index 053cb91..c5e24e3 100644 --- a/metadata_relay/app/tmdb.py +++ b/metadata_relay/app/tmdb.py @@ -16,12 +16,12 @@ else: tmdbsimple.API_KEY = tmdb_api_key @router.get("/tv/trending") - async def get_tmdb_trending_tv(): - return Trending(media_type="tv").info() + async def get_tmdb_trending_tv(language: str = "en"): + return Trending(media_type="tv").info(language=language) @router.get("/tv/search") - async def search_tmdb_tv(query: str, page: int = 1): - return Search().tv(page=page, query=query, include_adult=True) + async def search_tmdb_tv(query: str, page: int = 1, language: str = "en"): + return Search().tv(page=page, query=query, include_adult=True, language=language) @router.get("/tv/shows/{show_id}") async def get_tmdb_show(show_id: int, language: str = "en"): @@ -32,12 +32,12 @@ else: return TV_Seasons(season_number=season_number, tv_id=show_id).info(language=language) @router.get("/movies/trending") - async def get_tmdb_trending_movies(): - return Trending(media_type="movie").info() + async def get_tmdb_trending_movies(language: str = "en"): + return Trending(media_type="movie").info(language=language) @router.get("/movies/search") - async def search_tmdb_movies(query: str, page: int = 1): - return Search().movie(page=page, query=query, include_adult=True) + async def search_tmdb_movies(query: str, page: int = 1, language: str = "en"): + return Search().movie(page=page, query=query, include_adult=True, language=language) @router.get("/movies/{movie_id}") async def get_tmdb_movie(movie_id: int, language: str = "en"): From 68f9d71bfa5066b5ba3489fb509a78a031f3a1cf Mon Sep 17 00:00:00 2001 From: aasmoe Date: Thu, 11 Dec 2025 22:28:52 +0000 Subject: [PATCH 03/12] feat: wire up original_language to be passed when adding shows/movies - Add original_language field to MetaDataProviderSearchResult schema - Update frontend to pass original_language as language parameter when adding media - This ensures media metadata is fetched in the correct language based on original_language --- media_manager/metadataProvider/schemas.py | 1 + web/src/lib/components/add-media-card.svelte | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/media_manager/metadataProvider/schemas.py b/media_manager/metadataProvider/schemas.py index db0633a..f22767a 100644 --- a/media_manager/metadataProvider/schemas.py +++ b/media_manager/metadataProvider/schemas.py @@ -10,3 +10,4 @@ class MetaDataProviderSearchResult(BaseModel): metadata_provider: str added: bool vote_average: float | None = None + original_language: str | None = None diff --git a/web/src/lib/components/add-media-card.svelte b/web/src/lib/components/add-media-card.svelte index e4d667d..faffa73 100644 --- a/web/src/lib/components/add-media-card.svelte +++ b/web/src/lib/components/add-media-card.svelte @@ -23,7 +23,8 @@ params: { query: { show_id: result.external_id, - metadata_provider: result.metadata_provider as 'tmdb' | 'tvdb' + metadata_provider: result.metadata_provider as 'tmdb' | 'tvdb', + language: result.original_language ?? undefined } } }); @@ -33,7 +34,8 @@ params: { query: { movie_id: result.external_id, - metadata_provider: result.metadata_provider as 'tmdb' | 'tvdb' + metadata_provider: result.metadata_provider as 'tmdb' | 'tvdb', + language: result.original_language ?? undefined } } }); From 8695d26ad92bd3e84d877a2b5d09eca9bb829d68 Mon Sep 17 00:00:00 2001 From: aasmoe Date: Fri, 12 Dec 2025 17:52:33 +0000 Subject: [PATCH 04/12] Removed language parameter in favour of adding original_language to movie and show object. A couple of temporary workaround while there is no original_language column in db. --- media_manager/metadataProvider/tmdb.py | 24 ++++++++---------------- media_manager/movies/repository.py | 3 ++- media_manager/movies/schemas.py | 1 + media_manager/movies/service.py | 4 +++- media_manager/tv/schemas.py | 1 + media_manager/tv/service.py | 4 +++- 6 files changed, 18 insertions(+), 19 deletions(-) diff --git a/media_manager/metadataProvider/tmdb.py b/media_manager/metadataProvider/tmdb.py index 3d91d54..edd7fde 100644 --- a/media_manager/metadataProvider/tmdb.py +++ b/media_manager/metadataProvider/tmdb.py @@ -159,16 +159,11 @@ class TmdbMetadataProvider(AbstractMetadataProvider): raise def download_show_poster_image(self, show: Show) -> bool: - # First fetch to get original_language - show_metadata = self.__get_show_metadata(show.external_id) - original_language = show_metadata.get("original_language") - - # Determine which language to use - language = self.__get_language_param(original_language) + # Determine which language to use based on show's original_language + language = self.__get_language_param(show.original_language) # Fetch metadata in the appropriate language to get localized poster - if language != self.default_language: - show_metadata = self.__get_show_metadata(show.external_id, language=language) + show_metadata = self.__get_show_metadata(show.external_id, language=language) # downloading the poster # all pictures from TMDB should already be jpeg, so no need to convert @@ -250,6 +245,7 @@ class TmdbMetadataProvider(AbstractMetadataProvider): seasons=season_list, metadata_provider=self.name, ended=show_metadata["status"] in ENDED_STATUS, + original_language=show_metadata.get("original_language"), ) return show @@ -346,6 +342,7 @@ class TmdbMetadataProvider(AbstractMetadataProvider): overview=movie_metadata["overview"], year=year, metadata_provider=self.name, + original_language=movie_metadata.get("original_language"), ) return movie @@ -410,16 +407,11 @@ class TmdbMetadataProvider(AbstractMetadataProvider): return formatted_results def download_movie_poster_image(self, movie: Movie) -> bool: - # First fetch to get original_language - movie_metadata = self.__get_movie_metadata(id=movie.external_id) - original_language = movie_metadata.get("original_language") - - # Determine which language to use - language = self.__get_language_param(original_language) + # Determine which language to use based on movie's original_language + language = self.__get_language_param(movie.original_language) # Fetch metadata in the appropriate language to get localized poster - if language != self.default_language: - movie_metadata = self.__get_movie_metadata(id=movie.external_id, language=language) + movie_metadata = self.__get_movie_metadata(id=movie.external_id, language=language) # downloading the poster # all pictures from TMDB should already be jpeg, so no need to convert diff --git a/media_manager/movies/repository.py b/media_manager/movies/repository.py index d190673..63d4b3f 100644 --- a/media_manager/movies/repository.py +++ b/media_manager/movies/repository.py @@ -117,7 +117,8 @@ class MovieRepository: db_movie.year = movie.year else: # Insert new movie log.debug(f"Creating new movie: {movie.name}") - db_movie = Movie(**movie.model_dump()) + # HACK: Remove exclude once original_language column is added to database + db_movie = Movie(**movie.model_dump(exclude={'original_language'})) self.db.add(db_movie) try: diff --git a/media_manager/movies/schemas.py b/media_manager/movies/schemas.py index 1bcff18..3094988 100644 --- a/media_manager/movies/schemas.py +++ b/media_manager/movies/schemas.py @@ -23,6 +23,7 @@ class Movie(BaseModel): external_id: int metadata_provider: str library: str = "Default" + original_language: str | None = None class MovieFile(BaseModel): diff --git a/media_manager/movies/service.py b/media_manager/movies/service.py index a4a6c04..2a0707c 100644 --- a/media_manager/movies/service.py +++ b/media_manager/movies/service.py @@ -71,7 +71,9 @@ class MovieService: """ movie_with_metadata = metadata_provider.get_movie_metadata(id=external_id, language=language) saved_movie = self.movie_repository.save_movie(movie=movie_with_metadata) - metadata_provider.download_movie_poster_image(movie=saved_movie) + # HACK: Temporary workaround - using show_with_metadata instead of saved_show because + # original_language is not yet persisted to database. Once database has original_language column this shuold be changed back? + metadata_provider.download_movie_poster_image(movie=movie_with_metadata) return saved_movie def add_movie_request(self, movie_request: MovieRequest) -> MovieRequest: diff --git a/media_manager/tv/schemas.py b/media_manager/tv/schemas.py index cacb963..0996de5 100644 --- a/media_manager/tv/schemas.py +++ b/media_manager/tv/schemas.py @@ -55,6 +55,7 @@ class Show(BaseModel): continuous_download: bool = False library: str = "Default" + original_language: str | None = None seasons: list[Season] diff --git a/media_manager/tv/service.py b/media_manager/tv/service.py index 0bf633c..afe6e03 100644 --- a/media_manager/tv/service.py +++ b/media_manager/tv/service.py @@ -77,7 +77,9 @@ class TvService: """ show_with_metadata = metadata_provider.get_show_metadata(id=external_id, language=language) saved_show = self.tv_repository.save_show(show=show_with_metadata) - metadata_provider.download_show_poster_image(show=saved_show) + # HACK: Temporary workaround - using show_with_metadata instead of saved_show because + # original_language is not yet persisted to database. Once database has original_language column this shuold be changed back? + metadata_provider.download_show_poster_image(show=show_with_metadata) return saved_show def add_season_request(self, season_request: SeasonRequest) -> SeasonRequest: From fda59e49b20e50d727e9abffe8e59f10a19769a6 Mon Sep 17 00:00:00 2001 From: aasmoe Date: Sat, 13 Dec 2025 19:22:09 +0000 Subject: [PATCH 05/12] Pass language as a value in show and movie objects. DB migration to add original_langauge column. Removes workarounds --- ..._add_original_language_columns_to_show_.py | 42 +++++++++++++++++++ media_manager/movies/models.py | 1 + media_manager/movies/repository.py | 4 +- media_manager/movies/service.py | 7 ++-- media_manager/tv/models.py | 1 + media_manager/tv/repository.py | 2 + media_manager/tv/service.py | 7 ++-- 7 files changed, 54 insertions(+), 10 deletions(-) create mode 100644 alembic/versions/16e78af9e5bf_add_original_language_columns_to_show_.py diff --git a/alembic/versions/16e78af9e5bf_add_original_language_columns_to_show_.py b/alembic/versions/16e78af9e5bf_add_original_language_columns_to_show_.py new file mode 100644 index 0000000..bb08933 --- /dev/null +++ b/alembic/versions/16e78af9e5bf_add_original_language_columns_to_show_.py @@ -0,0 +1,42 @@ +"""add original_language columns to show and movie tables + +Revision ID: 16e78af9e5bf +Revises: eb0bd3cc1852 +Create Date: 2025-12-13 18:47:02.146038 + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision: str = '16e78af9e5bf' +down_revision: Union[str, None] = 'eb0bd3cc1852' +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + """Upgrade schema.""" + # Add original_language column to show table + op.add_column( + 'show', + sa.Column('original_language', sa.String(10), nullable=True) + ) + + # Add original_language column to movie table + op.add_column( + 'movie', + sa.Column('original_language', sa.String(10), nullable=True) + ) + + +def downgrade() -> None: + """Downgrade schema.""" + # Remove original_language column from movie table + op.drop_column('movie', 'original_language') + + # Remove original_language column from show table + op.drop_column('show', 'original_language') diff --git a/media_manager/movies/models.py b/media_manager/movies/models.py index 7db5f63..2a8c5c8 100644 --- a/media_manager/movies/models.py +++ b/media_manager/movies/models.py @@ -19,6 +19,7 @@ class Movie(Base): overview: Mapped[str] year: Mapped[int | None] library: Mapped[str] = mapped_column(default="") + original_language: Mapped[str | None] = mapped_column(default=None) movie_requests: Mapped[list["MovieRequest"]] = relationship( "MovieRequest", back_populates="movie", cascade="all, delete-orphan" ) diff --git a/media_manager/movies/repository.py b/media_manager/movies/repository.py index 63d4b3f..38e9ff4 100644 --- a/media_manager/movies/repository.py +++ b/media_manager/movies/repository.py @@ -115,10 +115,10 @@ class MovieRepository: db_movie.name = movie.name db_movie.overview = movie.overview db_movie.year = movie.year + db_movie.original_language = movie.original_language else: # Insert new movie log.debug(f"Creating new movie: {movie.name}") - # HACK: Remove exclude once original_language column is added to database - db_movie = Movie(**movie.model_dump(exclude={'original_language'})) + db_movie = Movie(**movie.model_dump()) self.db.add(db_movie) try: diff --git a/media_manager/movies/service.py b/media_manager/movies/service.py index 2a0707c..e9a59c2 100644 --- a/media_manager/movies/service.py +++ b/media_manager/movies/service.py @@ -71,9 +71,7 @@ class MovieService: """ movie_with_metadata = metadata_provider.get_movie_metadata(id=external_id, language=language) saved_movie = self.movie_repository.save_movie(movie=movie_with_metadata) - # HACK: Temporary workaround - using show_with_metadata instead of saved_show because - # original_language is not yet persisted to database. Once database has original_language column this shuold be changed back? - metadata_provider.download_movie_poster_image(movie=movie_with_metadata) + metadata_provider.download_movie_poster_image(movie=saved_movie) return saved_movie def add_movie_request(self, movie_request: MovieRequest) -> MovieRequest: @@ -643,7 +641,8 @@ class MovieService: """ log.debug(f"Found movie: {db_movie.name} for metadata update.") - fresh_movie_data = metadata_provider.get_movie_metadata(id=db_movie.external_id) + # Use stored original_language preference for metadata fetching + fresh_movie_data = metadata_provider.get_movie_metadata(id=db_movie.external_id, language=db_movie.original_language) if not fresh_movie_data: log.warning( f"Could not fetch fresh metadata for movie {db_movie.name} (External ID: {db_movie.external_id}) from {db_movie.metadata_provider}." diff --git a/media_manager/tv/models.py b/media_manager/tv/models.py index 6f34fe6..021fca2 100644 --- a/media_manager/tv/models.py +++ b/media_manager/tv/models.py @@ -21,6 +21,7 @@ class Show(Base): ended: Mapped[bool] = mapped_column(default=False) continuous_download: Mapped[bool] = mapped_column(default=False) library: Mapped[str] = mapped_column(default="") + original_language: Mapped[str | None] = mapped_column(default=None) seasons: Mapped[list["Season"]] = relationship( back_populates="show", cascade="all, delete" diff --git a/media_manager/tv/repository.py b/media_manager/tv/repository.py index 37b39f6..bce49a5 100644 --- a/media_manager/tv/repository.py +++ b/media_manager/tv/repository.py @@ -135,6 +135,7 @@ class TvRepository: db_show.name = show.name db_show.overview = show.overview db_show.year = show.year + db_show.original_language = show.original_language else: # Insert new show db_show = Show( id=show.id, @@ -144,6 +145,7 @@ class TvRepository: overview=show.overview, year=show.year, ended=show.ended, + original_language=show.original_language, seasons=[ Season( id=season.id, diff --git a/media_manager/tv/service.py b/media_manager/tv/service.py index afe6e03..2acc0ea 100644 --- a/media_manager/tv/service.py +++ b/media_manager/tv/service.py @@ -77,9 +77,7 @@ class TvService: """ show_with_metadata = metadata_provider.get_show_metadata(id=external_id, language=language) saved_show = self.tv_repository.save_show(show=show_with_metadata) - # HACK: Temporary workaround - using show_with_metadata instead of saved_show because - # original_language is not yet persisted to database. Once database has original_language column this shuold be changed back? - metadata_provider.download_show_poster_image(show=show_with_metadata) + metadata_provider.download_show_poster_image(show=saved_show) return saved_show def add_season_request(self, season_request: SeasonRequest) -> SeasonRequest: @@ -704,7 +702,8 @@ class TvService: log.debug(f"Found show: {db_show.name} for metadata update.") # old_poster_url = db_show.poster_url # poster_url removed from db_show - fresh_show_data = metadata_provider.get_show_metadata(id=db_show.external_id) + # Use stored original_language preference for metadata fetching + fresh_show_data = metadata_provider.get_show_metadata(id=db_show.external_id, language=db_show.original_language) if not fresh_show_data: log.warning( f"Could not fetch fresh metadata for show {db_show.name} (External ID: {db_show.external_id}) from {db_show.metadata_provider}." From b3a10df70cb28ad24db90388eca8bcccc10518f2 Mon Sep 17 00:00:00 2001 From: aasmoe Date: Sat, 13 Dec 2025 20:46:25 +0000 Subject: [PATCH 06/12] Update config.example.toml --- config.example.toml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/config.example.toml b/config.example.toml index d762a1e..3f44315 100644 --- a/config.example.toml +++ b/config.example.toml @@ -86,13 +86,6 @@ enabled = false api_key = "" user = "" -[metadata] -# Primary languages for metadata fetching (ISO 639-1 codes) -# When a TV show or movie's original language matches one of these languages, -# MediaManager will display the original title and fetch metadata in that language. -# Examples: ["en", "no", "da"] -primary_languages = ["en"] - [torrents] # qBittorrent settings [torrents.qbittorrent] @@ -179,5 +172,13 @@ rule_names = ["prefer_h265", "avoid_cam", "reject_non_freeleech"] [metadata.tmdb] tmdb_relay_url = "https://metadata-relay.dorninger.co/tmdb" +# If a show/movie original language is in this list, metadata will be fetched in that language +# Otherwise, the default_language will be used as fallback +# Format: ISO 639-1 codes (2 letters) +# Examples: "en" (English), "no" (Norwegian), "ru" (Russian), "es" (Spanish), "fr" (French), "de" (German) +# Full list: https://www.w3schools.com/tags/ref_language_codes.asp#:~:text=ISO%20639%2D1%20Language%20Codes +primary_languages = [""] +default_language = "en" + [metadata.tvdb] tvdb_relay_url = "https://metadata-relay.dorninger.co/tvdb" \ No newline at end of file From 5271acb51d446206980b6dd8ab46b46fb0c760be Mon Sep 17 00:00:00 2001 From: aasmoe Date: Sat, 13 Dec 2025 20:53:17 +0000 Subject: [PATCH 07/12] Use previous definition of config --- media_manager/metadataProvider/tmdb.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/media_manager/metadataProvider/tmdb.py b/media_manager/metadataProvider/tmdb.py index edd7fde..e15fcb7 100644 --- a/media_manager/metadataProvider/tmdb.py +++ b/media_manager/metadataProvider/tmdb.py @@ -22,10 +22,10 @@ class TmdbMetadataProvider(AbstractMetadataProvider): name = "tmdb" def __init__(self): - config = AllEncompassingConfig() - self.url = config.metadata.tmdb.tmdb_relay_url - self.primary_languages = config.metadata.tmdb.primary_languages - self.default_language = config.metadata.tmdb.default_language + config = AllEncompassingConfig().metadata.tmdb + self.url = config.tmdb_relay_url + self.primary_languages = config.primary_languages + self.default_language = config.default_language def __get_language_param(self, original_language: str | None) -> str: """ From 90dafbd2e5176185f92cb6dc4d6966ebd4b6869f Mon Sep 17 00:00:00 2001 From: aasmoe Date: Thu, 18 Dec 2025 11:22:36 +0000 Subject: [PATCH 08/12] update package-lock --- web/package-lock.json | 248 +++++++++++++++++++++++++----------------- 1 file changed, 150 insertions(+), 98 deletions(-) diff --git a/web/package-lock.json b/web/package-lock.json index d268f11..be59f21 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -134,9 +134,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.1.tgz", - "integrity": "sha512-HHB50pdsBX6k47S4u5g/CaLjqS3qwaOVE5ILsq64jyzgMhLuCuZ8rGzM9yhsAjfjkbgUPMzZEPa7DAp7yz6vuA==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", + "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", "cpu": [ "ppc64" ], @@ -146,14 +146,15 @@ "os": [ "aix" ], + "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/android-arm": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.1.tgz", - "integrity": "sha512-kFqa6/UcaTbGm/NncN9kzVOODjhZW8e+FRdSeypWe6j33gzclHtwlANs26JrupOntlcWmB0u8+8HZo8s7thHvg==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", + "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", "cpu": [ "arm" ], @@ -163,14 +164,15 @@ "os": [ "android" ], + "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/android-arm64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.1.tgz", - "integrity": "sha512-45fuKmAJpxnQWixOGCrS+ro4Uvb4Re9+UTieUY2f8AEc+t7d4AaZ6eUJ3Hva7dtrxAAWHtlEFsXFMAgNnGU9uQ==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", + "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", "cpu": [ "arm64" ], @@ -180,14 +182,15 @@ "os": [ "android" ], + "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/android-x64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.1.tgz", - "integrity": "sha512-LBEpOz0BsgMEeHgenf5aqmn/lLNTFXVfoWMUox8CtWWYK9X4jmQzWjoGoNb8lmAYml/tQ/Ysvm8q7szu7BoxRQ==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", + "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", "cpu": [ "x64" ], @@ -197,14 +200,15 @@ "os": [ "android" ], + "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.1.tgz", - "integrity": "sha512-veg7fL8eMSCVKL7IW4pxb54QERtedFDfY/ASrumK/SbFsXnRazxY4YykN/THYqFnFwJ0aVjiUrVG2PwcdAEqQQ==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", + "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", "cpu": [ "arm64" ], @@ -214,14 +218,15 @@ "os": [ "darwin" ], + "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.1.tgz", - "integrity": "sha512-+3ELd+nTzhfWb07Vol7EZ+5PTbJ/u74nC6iv4/lwIU99Ip5uuY6QoIf0Hn4m2HoV0qcnRivN3KSqc+FyCHjoVQ==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", + "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", "cpu": [ "x64" ], @@ -231,14 +236,15 @@ "os": [ "darwin" ], + "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.1.tgz", - "integrity": "sha512-/8Rfgns4XD9XOSXlzUDepG8PX+AVWHliYlUkFI3K3GB6tqbdjYqdhcb4BKRd7C0BhZSoaCxhv8kTcBrcZWP+xg==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", + "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", "cpu": [ "arm64" ], @@ -248,14 +254,15 @@ "os": [ "freebsd" ], + "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.1.tgz", - "integrity": "sha512-GITpD8dK9C+r+5yRT/UKVT36h/DQLOHdwGVwwoHidlnA168oD3uxA878XloXebK4Ul3gDBBIvEdL7go9gCUFzQ==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", + "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", "cpu": [ "x64" ], @@ -265,14 +272,15 @@ "os": [ "freebsd" ], + "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/linux-arm": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.1.tgz", - "integrity": "sha512-ieMID0JRZY/ZeCrsFQ3Y3NlHNCqIhTprJfDgSB3/lv5jJZ8FX3hqPyXWhe+gvS5ARMBJ242PM+VNz/ctNj//eA==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", + "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", "cpu": [ "arm" ], @@ -282,14 +290,15 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.1.tgz", - "integrity": "sha512-W9//kCrh/6in9rWIBdKaMtuTTzNj6jSeG/haWBADqLLa9P8O5YSRDzgD5y9QBok4AYlzS6ARHifAb75V6G670Q==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", + "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", "cpu": [ "arm64" ], @@ -299,14 +308,15 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.1.tgz", - "integrity": "sha512-VIUV4z8GD8rtSVMfAj1aXFahsi/+tcoXXNYmXgzISL+KB381vbSTNdeZHHHIYqFyXcoEhu9n5cT+05tRv13rlw==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", + "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", "cpu": [ "ia32" ], @@ -316,14 +326,15 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.1.tgz", - "integrity": "sha512-l4rfiiJRN7sTNI//ff65zJ9z8U+k6zcCg0LALU5iEWzY+a1mVZ8iWC1k5EsNKThZ7XCQ6YWtsZ8EWYm7r1UEsg==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", + "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", "cpu": [ "loong64" ], @@ -333,14 +344,15 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.1.tgz", - "integrity": "sha512-U0bEuAOLvO/DWFdygTHWY8C067FXz+UbzKgxYhXC0fDieFa0kDIra1FAhsAARRJbvEyso8aAqvPdNxzWuStBnA==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", + "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", "cpu": [ "mips64el" ], @@ -350,14 +362,15 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.1.tgz", - "integrity": "sha512-NzdQ/Xwu6vPSf/GkdmRNsOfIeSGnh7muundsWItmBsVpMoNPVpM61qNzAVY3pZ1glzzAxLR40UyYM23eaDDbYQ==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", + "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", "cpu": [ "ppc64" ], @@ -367,14 +380,15 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.1.tgz", - "integrity": "sha512-7zlw8p3IApcsN7mFw0O1Z1PyEk6PlKMu18roImfl3iQHTnr/yAfYv6s4hXPidbDoI2Q0pW+5xeoM4eTCC0UdrQ==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", + "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", "cpu": [ "riscv64" ], @@ -384,14 +398,15 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.1.tgz", - "integrity": "sha512-cGj5wli+G+nkVQdZo3+7FDKC25Uh4ZVwOAK6A06Hsvgr8WqBBuOy/1s+PUEd/6Je+vjfm6stX0kmib5b/O2Ykw==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", + "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", "cpu": [ "s390x" ], @@ -401,14 +416,15 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/linux-x64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.1.tgz", - "integrity": "sha512-z3H/HYI9MM0HTv3hQZ81f+AKb+yEoCRlUby1F80vbQ5XdzEMyY/9iNlAmhqiBKw4MJXwfgsh7ERGEOhrM1niMA==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", + "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", "cpu": [ "x64" ], @@ -418,14 +434,15 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.1.tgz", - "integrity": "sha512-wzC24DxAvk8Em01YmVXyjl96Mr+ecTPyOuADAvjGg+fyBpGmxmcr2E5ttf7Im8D0sXZihpxzO1isus8MdjMCXQ==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", + "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", "cpu": [ "arm64" ], @@ -435,14 +452,15 @@ "os": [ "netbsd" ], + "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.1.tgz", - "integrity": "sha512-1YQ8ybGi2yIXswu6eNzJsrYIGFpnlzEWRl6iR5gMgmsrR0FcNoV1m9k9sc3PuP5rUBLshOZylc9nqSgymI+TYg==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", + "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", "cpu": [ "x64" ], @@ -452,14 +470,15 @@ "os": [ "netbsd" ], + "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.1.tgz", - "integrity": "sha512-5Z+DzLCrq5wmU7RDaMDe2DVXMRm2tTDvX2KU14JJVBN2CT/qov7XVix85QoJqHltpvAOZUAc3ndU56HSMWrv8g==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", + "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", "cpu": [ "arm64" ], @@ -469,14 +488,15 @@ "os": [ "openbsd" ], + "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.1.tgz", - "integrity": "sha512-Q73ENzIdPF5jap4wqLtsfh8YbYSZ8Q0wnxplOlZUOyZy7B4ZKW8DXGWgTCZmF8VWD7Tciwv5F4NsRf6vYlZtqg==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", + "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", "cpu": [ "x64" ], @@ -486,14 +506,15 @@ "os": [ "openbsd" ], + "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/openharmony-arm64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.1.tgz", - "integrity": "sha512-ajbHrGM/XiK+sXM0JzEbJAen+0E+JMQZ2l4RR4VFwvV9JEERx+oxtgkpoKv1SevhjavK2z2ReHk32pjzktWbGg==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", + "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", "cpu": [ "arm64" ], @@ -503,14 +524,15 @@ "os": [ "openharmony" ], + "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.1.tgz", - "integrity": "sha512-IPUW+y4VIjuDVn+OMzHc5FV4GubIwPnsz6ubkvN8cuhEqH81NovB53IUlrlBkPMEPxvNnf79MGBoz8rZ2iW8HA==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", + "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", "cpu": [ "x64" ], @@ -520,14 +542,15 @@ "os": [ "sunos" ], + "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.1.tgz", - "integrity": "sha512-RIVRWiljWA6CdVu8zkWcRmGP7iRRIIwvhDKem8UMBjPql2TXM5PkDVvvrzMtj1V+WFPB4K7zkIGM7VzRtFkjdg==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", + "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", "cpu": [ "arm64" ], @@ -537,14 +560,15 @@ "os": [ "win32" ], + "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.1.tgz", - "integrity": "sha512-2BR5M8CPbptC1AK5JbJT1fWrHLvejwZidKx3UMSF0ecHMa+smhi16drIrCEggkgviBwLYd5nwrFLSl5Kho96RQ==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", + "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", "cpu": [ "ia32" ], @@ -554,14 +578,15 @@ "os": [ "win32" ], + "peer": true, "engines": { "node": ">=18" } }, "node_modules/@esbuild/win32-x64": { - "version": "0.27.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.1.tgz", - "integrity": "sha512-d5X6RMYv6taIymSk8JBP+nxv8DQAMY6A51GPgusqLdK9wBz5wWIXy1KjTck6HnjE9hqJzJRdk+1p/t5soSbCtw==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", + "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", "cpu": [ "x64" ], @@ -571,6 +596,7 @@ "os": [ "win32" ], + "peer": true, "engines": { "node": ">=18" } @@ -1974,7 +2000,6 @@ "integrity": "sha512-Vp3zX/qlwerQmHMP6x0Ry1oY7eKKRcOWGc2P59srOp4zcqyn+etJyQpELgOi4+ZSUgteX8Y387NuwruLgGXLUQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@standard-schema/spec": "^1.0.0", "@sveltejs/acorn-typescript": "^1.0.5", @@ -2014,7 +2039,6 @@ "integrity": "sha512-YZs/OSKOQAQCnJvM/P+F1URotNnYNeU3P2s4oIpzm1uFaqUEqRxUB0g5ejMjEb5Gjb9/PiBI5Ktrq4rUUF8UVQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@sveltejs/vite-plugin-svelte-inspector": "^5.0.0", "debug": "^4.4.1", @@ -2485,7 +2509,6 @@ "integrity": "sha512-N9lBGA9o9aqb1hVMc9hzySbhKibHmB+N3IpoShyV6HyQYRGIhlrO5rQgttypi+yEeKsKI4idxC8Jw6gXKD4THA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.49.0", "@typescript-eslint/types": "8.49.0", @@ -2732,7 +2755,6 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -2973,7 +2995,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -3086,7 +3107,6 @@ "integrity": "sha512-rXXekcjofVN1LTOSw+u4u9WXVEUvNBVjORW154q/IdmYWy1nMbOU9aNtZB0t8m+FJQ9q91jlr2f9CwwUFdFMRA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/validator": "^13.15.3", "libphonenumber-js": "^1.11.1", @@ -3270,8 +3290,7 @@ "resolved": "https://registry.npmjs.org/embla-carousel/-/embla-carousel-8.6.0.tgz", "integrity": "sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/embla-carousel-reactive-utils": { "version": "8.6.0", @@ -3311,6 +3330,50 @@ "node": ">=10.13.0" } }, + "node_modules/esbuild": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", + "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "peer": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.2", + "@esbuild/android-arm": "0.27.2", + "@esbuild/android-arm64": "0.27.2", + "@esbuild/android-x64": "0.27.2", + "@esbuild/darwin-arm64": "0.27.2", + "@esbuild/darwin-x64": "0.27.2", + "@esbuild/freebsd-arm64": "0.27.2", + "@esbuild/freebsd-x64": "0.27.2", + "@esbuild/linux-arm": "0.27.2", + "@esbuild/linux-arm64": "0.27.2", + "@esbuild/linux-ia32": "0.27.2", + "@esbuild/linux-loong64": "0.27.2", + "@esbuild/linux-mips64el": "0.27.2", + "@esbuild/linux-ppc64": "0.27.2", + "@esbuild/linux-riscv64": "0.27.2", + "@esbuild/linux-s390x": "0.27.2", + "@esbuild/linux-x64": "0.27.2", + "@esbuild/netbsd-arm64": "0.27.2", + "@esbuild/netbsd-x64": "0.27.2", + "@esbuild/openbsd-arm64": "0.27.2", + "@esbuild/openbsd-x64": "0.27.2", + "@esbuild/openharmony-arm64": "0.27.2", + "@esbuild/sunos-x64": "0.27.2", + "@esbuild/win32-arm64": "0.27.2", + "@esbuild/win32-ia32": "0.27.2", + "@esbuild/win32-x64": "0.27.2" + } + }, "node_modules/esbuild-runner": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/esbuild-runner/-/esbuild-runner-2.2.2.tgz", @@ -3366,7 +3429,6 @@ "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -4815,7 +4877,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -4956,7 +5017,6 @@ "integrity": "sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==", "dev": true, "license": "MIT", - "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -4973,7 +5033,6 @@ "integrity": "sha512-pn1ra/0mPObzqoIQn/vUTR3ZZI6UuZ0sHqMK5x2jMLGrs53h0sXhkVuDcrlssHwIMk7FYrMjHBPoUSyyEEDlBQ==", "dev": true, "license": "MIT", - "peer": true, "peerDependencies": { "prettier": "^3.0.0", "svelte": "^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0" @@ -5133,7 +5192,6 @@ "integrity": "sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -5386,7 +5444,6 @@ "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.45.8.tgz", "integrity": "sha512-1Jh7FwVh/2Uxg0T7SeE1qFKMhwYH45b2v53bcZpW7qHa6O8iU1ByEj56PF0IQ6dU4HE5gRkic6h+vx+tclHeiw==", "license": "MIT", - "peer": true, "dependencies": { "@jridgewell/remapping": "^2.3.4", "@jridgewell/sourcemap-codec": "^1.5.0", @@ -5560,7 +5617,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "devalue": "^5.3.2", "memoize-weak": "^1.0.2", @@ -5767,8 +5823,7 @@ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.17.tgz", "integrity": "sha512-j9Ee2YjuQqYT9bbRTfTZht9W/ytp5H+jJpZKiYdP/bpnXARAuELt9ofP0lPnmHjbga7SNQIxdTAXCmtKVYjN+Q==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/tapable": { "version": "2.3.0", @@ -5913,7 +5968,6 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -6056,7 +6110,6 @@ "integrity": "sha512-ITcnkFeR3+fI8P1wMgItjGrR10170d8auB4EpMLPqmx6uxElH3a/hHGQabSHKdqd4FXWO1nFIp9rRn7JQ34ACQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", @@ -6739,7 +6792,6 @@ "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", "dev": true, "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } From c3e9eec5f75aba17889c95d70c97dcd7a2b43b10 Mon Sep 17 00:00:00 2001 From: maxid Date: Fri, 19 Dec 2025 16:47:58 +0100 Subject: [PATCH 09/12] update package-lock.json --- web/package-lock.json | 92 ++++++++++--------------------------------- 1 file changed, 20 insertions(+), 72 deletions(-) diff --git a/web/package-lock.json b/web/package-lock.json index be59f21..96412f1 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -146,7 +146,6 @@ "os": [ "aix" ], - "peer": true, "engines": { "node": ">=18" } @@ -164,7 +163,6 @@ "os": [ "android" ], - "peer": true, "engines": { "node": ">=18" } @@ -182,7 +180,6 @@ "os": [ "android" ], - "peer": true, "engines": { "node": ">=18" } @@ -200,7 +197,6 @@ "os": [ "android" ], - "peer": true, "engines": { "node": ">=18" } @@ -218,7 +214,6 @@ "os": [ "darwin" ], - "peer": true, "engines": { "node": ">=18" } @@ -236,7 +231,6 @@ "os": [ "darwin" ], - "peer": true, "engines": { "node": ">=18" } @@ -254,7 +248,6 @@ "os": [ "freebsd" ], - "peer": true, "engines": { "node": ">=18" } @@ -272,7 +265,6 @@ "os": [ "freebsd" ], - "peer": true, "engines": { "node": ">=18" } @@ -290,7 +282,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=18" } @@ -308,7 +299,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=18" } @@ -326,7 +316,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=18" } @@ -344,7 +333,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=18" } @@ -362,7 +350,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=18" } @@ -380,7 +367,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=18" } @@ -398,7 +384,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=18" } @@ -416,7 +401,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=18" } @@ -434,7 +418,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=18" } @@ -452,7 +435,6 @@ "os": [ "netbsd" ], - "peer": true, "engines": { "node": ">=18" } @@ -470,7 +452,6 @@ "os": [ "netbsd" ], - "peer": true, "engines": { "node": ">=18" } @@ -488,7 +469,6 @@ "os": [ "openbsd" ], - "peer": true, "engines": { "node": ">=18" } @@ -506,7 +486,6 @@ "os": [ "openbsd" ], - "peer": true, "engines": { "node": ">=18" } @@ -524,7 +503,6 @@ "os": [ "openharmony" ], - "peer": true, "engines": { "node": ">=18" } @@ -542,7 +520,6 @@ "os": [ "sunos" ], - "peer": true, "engines": { "node": ">=18" } @@ -560,7 +537,6 @@ "os": [ "win32" ], - "peer": true, "engines": { "node": ">=18" } @@ -578,7 +554,6 @@ "os": [ "win32" ], - "peer": true, "engines": { "node": ">=18" } @@ -596,7 +571,6 @@ "os": [ "win32" ], - "peer": true, "engines": { "node": ">=18" } @@ -2000,6 +1974,7 @@ "integrity": "sha512-Vp3zX/qlwerQmHMP6x0Ry1oY7eKKRcOWGc2P59srOp4zcqyn+etJyQpELgOi4+ZSUgteX8Y387NuwruLgGXLUQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@standard-schema/spec": "^1.0.0", "@sveltejs/acorn-typescript": "^1.0.5", @@ -2039,6 +2014,7 @@ "integrity": "sha512-YZs/OSKOQAQCnJvM/P+F1URotNnYNeU3P2s4oIpzm1uFaqUEqRxUB0g5ejMjEb5Gjb9/PiBI5Ktrq4rUUF8UVQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@sveltejs/vite-plugin-svelte-inspector": "^5.0.0", "debug": "^4.4.1", @@ -2509,6 +2485,7 @@ "integrity": "sha512-N9lBGA9o9aqb1hVMc9hzySbhKibHmB+N3IpoShyV6HyQYRGIhlrO5rQgttypi+yEeKsKI4idxC8Jw6gXKD4THA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.49.0", "@typescript-eslint/types": "8.49.0", @@ -2755,6 +2732,7 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -2995,6 +2973,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -3107,6 +3086,7 @@ "integrity": "sha512-rXXekcjofVN1LTOSw+u4u9WXVEUvNBVjORW154q/IdmYWy1nMbOU9aNtZB0t8m+FJQ9q91jlr2f9CwwUFdFMRA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/validator": "^13.15.3", "libphonenumber-js": "^1.11.1", @@ -3290,7 +3270,8 @@ "resolved": "https://registry.npmjs.org/embla-carousel/-/embla-carousel-8.6.0.tgz", "integrity": "sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/embla-carousel-reactive-utils": { "version": "8.6.0", @@ -3330,50 +3311,6 @@ "node": ">=10.13.0" } }, - "node_modules/esbuild": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", - "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "peer": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.2", - "@esbuild/android-arm": "0.27.2", - "@esbuild/android-arm64": "0.27.2", - "@esbuild/android-x64": "0.27.2", - "@esbuild/darwin-arm64": "0.27.2", - "@esbuild/darwin-x64": "0.27.2", - "@esbuild/freebsd-arm64": "0.27.2", - "@esbuild/freebsd-x64": "0.27.2", - "@esbuild/linux-arm": "0.27.2", - "@esbuild/linux-arm64": "0.27.2", - "@esbuild/linux-ia32": "0.27.2", - "@esbuild/linux-loong64": "0.27.2", - "@esbuild/linux-mips64el": "0.27.2", - "@esbuild/linux-ppc64": "0.27.2", - "@esbuild/linux-riscv64": "0.27.2", - "@esbuild/linux-s390x": "0.27.2", - "@esbuild/linux-x64": "0.27.2", - "@esbuild/netbsd-arm64": "0.27.2", - "@esbuild/netbsd-x64": "0.27.2", - "@esbuild/openbsd-arm64": "0.27.2", - "@esbuild/openbsd-x64": "0.27.2", - "@esbuild/openharmony-arm64": "0.27.2", - "@esbuild/sunos-x64": "0.27.2", - "@esbuild/win32-arm64": "0.27.2", - "@esbuild/win32-ia32": "0.27.2", - "@esbuild/win32-x64": "0.27.2" - } - }, "node_modules/esbuild-runner": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/esbuild-runner/-/esbuild-runner-2.2.2.tgz", @@ -3429,6 +3366,7 @@ "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -4877,6 +4815,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -5017,6 +4956,7 @@ "integrity": "sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==", "dev": true, "license": "MIT", + "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -5033,6 +4973,7 @@ "integrity": "sha512-pn1ra/0mPObzqoIQn/vUTR3ZZI6UuZ0sHqMK5x2jMLGrs53h0sXhkVuDcrlssHwIMk7FYrMjHBPoUSyyEEDlBQ==", "dev": true, "license": "MIT", + "peer": true, "peerDependencies": { "prettier": "^3.0.0", "svelte": "^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0" @@ -5192,6 +5133,7 @@ "integrity": "sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -5444,6 +5386,7 @@ "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.45.8.tgz", "integrity": "sha512-1Jh7FwVh/2Uxg0T7SeE1qFKMhwYH45b2v53bcZpW7qHa6O8iU1ByEj56PF0IQ6dU4HE5gRkic6h+vx+tclHeiw==", "license": "MIT", + "peer": true, "dependencies": { "@jridgewell/remapping": "^2.3.4", "@jridgewell/sourcemap-codec": "^1.5.0", @@ -5617,6 +5560,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "devalue": "^5.3.2", "memoize-weak": "^1.0.2", @@ -5823,7 +5767,8 @@ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.17.tgz", "integrity": "sha512-j9Ee2YjuQqYT9bbRTfTZht9W/ytp5H+jJpZKiYdP/bpnXARAuELt9ofP0lPnmHjbga7SNQIxdTAXCmtKVYjN+Q==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/tapable": { "version": "2.3.0", @@ -5968,6 +5913,7 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -6110,6 +6056,7 @@ "integrity": "sha512-ITcnkFeR3+fI8P1wMgItjGrR10170d8auB4EpMLPqmx6uxElH3a/hHGQabSHKdqd4FXWO1nFIp9rRn7JQ34ACQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", @@ -6792,6 +6739,7 @@ "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", "dev": true, "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } From 157e8ee77d36488ad483e73bfcb643fa54b81ad4 Mon Sep 17 00:00:00 2001 From: maxid Date: Fri, 19 Dec 2025 16:48:10 +0100 Subject: [PATCH 10/12] format frontend code --- web/src/lib/api/api.d.ts | 8298 +++++++++-------- web/src/lib/components/add-media-card.svelte | 12 +- .../routes/dashboard/tv/add-show/+page.svelte | 2 +- 3 files changed, 4156 insertions(+), 4156 deletions(-) diff --git a/web/src/lib/api/api.d.ts b/web/src/lib/api/api.d.ts index 7d7ae11..8f19673 100644 --- a/web/src/lib/api/api.d.ts +++ b/web/src/lib/api/api.d.ts @@ -4,4158 +4,4160 @@ */ export interface paths { - "/api/v1/health": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** - * Hello World - * @description A simple endpoint to check if the API is running. - */ - get: operations["hello_world_api_v1_health_get"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/auth/jwt/login": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** Auth:Jwt.Login */ - post: operations["auth_jwt_login_api_v1_auth_jwt_login_post"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/auth/jwt/logout": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** Auth:Jwt.Logout */ - post: operations["auth_jwt_logout_api_v1_auth_jwt_logout_post"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/auth/cookie/login": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** Auth:Cookie.Login */ - post: operations["auth_cookie_login_api_v1_auth_cookie_login_post"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/auth/cookie/logout": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** Auth:Cookie.Logout */ - post: operations["auth_cookie_logout_api_v1_auth_cookie_logout_post"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/auth/register": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** Register:Register */ - post: operations["register_register_api_v1_auth_register_post"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/auth/forgot-password": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** Reset:Forgot Password */ - post: operations["reset_forgot_password_api_v1_auth_forgot_password_post"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/auth/reset-password": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** Reset:Reset Password */ - post: operations["reset_reset_password_api_v1_auth_reset_password_post"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/auth/request-verify-token": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** Verify:Request-Token */ - post: operations["verify_request_token_api_v1_auth_request_verify_token_post"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/auth/verify": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** Verify:Verify */ - post: operations["verify_verify_api_v1_auth_verify_post"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/users/all": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** Get All Users */ - get: operations["get_all_users_api_v1_users_all_get"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/users/me": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** Users:Current User */ - get: operations["users_current_user_api_v1_users_me_get"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - /** Users:Patch Current User */ - patch: operations["users_patch_current_user_api_v1_users_me_patch"]; - trace?: never; - }; - "/api/v1/users/{id}": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** Users:User */ - get: operations["users_user_api_v1_users__id__get"]; - put?: never; - post?: never; - /** Users:Delete User */ - delete: operations["users_delete_user_api_v1_users__id__delete"]; - options?: never; - head?: never; - /** Users:Patch User */ - patch: operations["users_patch_user_api_v1_users__id__patch"]; - trace?: never; - }; - "/api/v1/auth/metadata": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** Get Auth Metadata */ - get: operations["get_auth_metadata_api_v1_auth_metadata_get"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/auth/oauth/authorize": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** Oauth:Oauth2.Cookie.Authorize */ - get: operations["oauth_oauth2_cookie_authorize_api_v1_auth_oauth_authorize_get"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/auth/oauth/callback": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** - * Oauth:Oauth2.Cookie.Callback - * @description The response varies based on the authentication backend used. - */ - get: operations["oauth_oauth2_cookie_callback_api_v1_auth_oauth_callback_get"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/tv/shows": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** Get All Shows */ - get: operations["get_all_shows_api_v1_tv_shows_get"]; - put?: never; - /** Add A Show */ - post: operations["add_a_show_api_v1_tv_shows_post"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/tv/episodes/count": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** - * Get Total Count Of Downloaded Episodes - * @description Total number of episodes downloaded - */ - get: operations["get_total_count_of_downloaded_episodes_api_v1_tv_episodes_count_get"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/tv/shows/{show_id}": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** Get A Show */ - get: operations["get_a_show_api_v1_tv_shows__show_id__get"]; - put?: never; - post?: never; - /** Delete A Show */ - delete: operations["delete_a_show_api_v1_tv_shows__show_id__delete"]; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/tv/importable": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** - * Get All Importable Shows - * @description get a list of unknown shows that were detected in the tv directory and are importable - */ - get: operations["get_all_importable_shows_api_v1_tv_importable_get"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/tv/importable/{show_id}": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** - * Import Detected Show - * @description Import a detected show from the specified directory into the library. - */ - post: operations["import_detected_show_api_v1_tv_importable__show_id__post"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/tv/shows/torrents": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** - * Get Shows With Torrents - * @description get all shows that are associated with torrents - * :return: A list of shows with all their torrents - */ - get: operations["get_shows_with_torrents_api_v1_tv_shows_torrents_get"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/tv/shows/libraries": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** Get Available Libraries */ - get: operations["get_available_libraries_api_v1_tv_shows_libraries_get"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/tv/shows/{show_id}/metadata": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** - * Update Shows Metadata - * @description Updates a shows metadata. - */ - post: operations["update_shows_metadata_api_v1_tv_shows__show_id__metadata_post"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/tv/shows/{show_id}/continuousDownload": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** - * Set Continuous Download - * @description Toggles whether future seasons of a show will be downloaded. - */ - post: operations["set_continuous_download_api_v1_tv_shows__show_id__continuousDownload_post"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/tv/shows/{show_id}/torrents": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** Get A Shows Torrents */ - get: operations["get_a_shows_torrents_api_v1_tv_shows__show_id__torrents_get"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/tv/shows/{show_id}/library": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** - * Set Library - * @description Sets the library of a Show. - */ - post: operations["set_library_api_v1_tv_shows__show_id__library_post"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/tv/seasons/requests": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** Get Season Requests */ - get: operations["get_season_requests_api_v1_tv_seasons_requests_get"]; - /** Update Request */ - put: operations["update_request_api_v1_tv_seasons_requests_put"]; - /** - * Request A Season - * @description adds request flag to a season - */ - post: operations["request_a_season_api_v1_tv_seasons_requests_post"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/tv/seasons/requests/{request_id}": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post?: never; - /** Delete Season Request */ - delete: operations["delete_season_request_api_v1_tv_seasons_requests__request_id__delete"]; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/tv/seasons/requests/{season_request_id}": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - /** - * Authorize Request - * @description updates the request flag to true - */ - patch: operations["authorize_request_api_v1_tv_seasons_requests__season_request_id__patch"]; - trace?: never; - }; - "/api/v1/tv/seasons/{season_id}": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** Get Season */ - get: operations["get_season_api_v1_tv_seasons__season_id__get"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/tv/seasons/{season_id}/files": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** Get Season Files */ - get: operations["get_season_files_api_v1_tv_seasons__season_id__files_get"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/tv/torrents": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** Get Torrents For A Season */ - get: operations["get_torrents_for_a_season_api_v1_tv_torrents_get"]; - put?: never; - /** Download A Torrent */ - post: operations["download_a_torrent_api_v1_tv_torrents_post"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/tv/search": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** Search Metadata Providers For A Show */ - get: operations["search_metadata_providers_for_a_show_api_v1_tv_search_get"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/tv/recommended": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** Get Recommended Shows */ - get: operations["get_recommended_shows_api_v1_tv_recommended_get"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/torrent": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** Get All Torrents */ - get: operations["get_all_torrents_api_v1_torrent_get"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/torrent/{torrent_id}": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** Get Torrent */ - get: operations["get_torrent_api_v1_torrent__torrent_id__get"]; - put?: never; - post?: never; - /** Delete Torrent */ - delete: operations["delete_torrent_api_v1_torrent__torrent_id__delete"]; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/torrent/{torrent_id}/retry": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** Retry Torrent Download */ - post: operations["retry_torrent_download_api_v1_torrent__torrent_id__retry_post"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/torrent/{torrent_id}/status": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - /** Update Torrent Status */ - patch: operations["update_torrent_status_api_v1_torrent__torrent_id__status_patch"]; - trace?: never; - }; - "/api/v1/movies": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** Get All Movies */ - get: operations["get_all_movies_api_v1_movies_get"]; - put?: never; - /** Add A Movie */ - post: operations["add_a_movie_api_v1_movies_post"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/movies/importable": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** - * Get All Importable Movies - * @description get a list of unknown movies that were detected in the movie directory and are importable - */ - get: operations["get_all_importable_movies_api_v1_movies_importable_get"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/movies/importable/{movie_id}": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** - * Import Detected Movie - * @description get a list of unknown movies that were detected in the movie directory and are importable - */ - post: operations["import_detected_movie_api_v1_movies_importable__movie_id__post"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/movies/libraries": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** Get Available Libraries */ - get: operations["get_available_libraries_api_v1_movies_libraries_get"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/movies/search": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** Search For Movie */ - get: operations["search_for_movie_api_v1_movies_search_get"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/movies/recommended": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** Get Popular Movies */ - get: operations["get_popular_movies_api_v1_movies_recommended_get"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/movies/torrents": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** Get All Movies With Torrents */ - get: operations["get_all_movies_with_torrents_api_v1_movies_torrents_get"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/movies/requests": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** Get All Movie Requests */ - get: operations["get_all_movie_requests_api_v1_movies_requests_get"]; - put?: never; - /** Create Movie Request */ - post: operations["create_movie_request_api_v1_movies_requests_post"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/movies/requests/{movie_request_id}": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - /** Update Movie Request */ - put: operations["update_movie_request_api_v1_movies_requests__movie_request_id__put"]; - post?: never; - /** Delete Movie Request */ - delete: operations["delete_movie_request_api_v1_movies_requests__movie_request_id__delete"]; - options?: never; - head?: never; - /** - * Authorize Request - * @description updates the request flag to true - */ - patch: operations["authorize_request_api_v1_movies_requests__movie_request_id__patch"]; - trace?: never; - }; - "/api/v1/movies/{movie_id}": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** Get Movie By Id */ - get: operations["get_movie_by_id_api_v1_movies__movie_id__get"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/movies/{movie_id}/torrents": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** Get All Available Torrents For A Movie */ - get: operations["get_all_available_torrents_for_a_movie_api_v1_movies__movie_id__torrents_get"]; - put?: never; - /** Download Torrent For Movie */ - post: operations["download_torrent_for_movie_api_v1_movies__movie_id__torrents_post"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/movies/{movie_id}/files": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** Get Movie Files By Movie Id */ - get: operations["get_movie_files_by_movie_id_api_v1_movies__movie_id__files_get"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/movies/{movie_id}/library": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - /** - * Set Library - * @description Sets the library of a movie. - */ - post: operations["set_library_api_v1_movies__movie_id__library_post"]; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/notification": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** - * Get All Notifications - * @description Get all notifications. - */ - get: operations["get_all_notifications_api_v1_notification_get"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/notification/unread": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** - * Get Unread Notifications - * @description Get all unread notifications. - */ - get: operations["get_unread_notifications_api_v1_notification_unread_get"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/notification/{notification_id}": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** - * Get Notification - * @description Get a specific notification by ID. - */ - get: operations["get_notification_api_v1_notification__notification_id__get"]; - put?: never; - post?: never; - /** - * Delete Notification - * @description Delete a notification. - */ - delete: operations["delete_notification_api_v1_notification__notification_id__delete"]; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/api/v1/notification/{notification_id}/read": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - /** - * Mark Notification As Read - * @description Mark a notification as read. - */ - patch: operations["mark_notification_as_read_api_v1_notification__notification_id__read_patch"]; - trace?: never; - }; - "/api/v1/notification/{notification_id}/unread": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - get?: never; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - /** - * Mark Notification As Unread - * @description Mark a notification as unread. - */ - patch: operations["mark_notification_as_unread_api_v1_notification__notification_id__unread_patch"]; - trace?: never; - }; - "/": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** Root */ - get: operations["root__get"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/dashboard": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** Dashboard */ - get: operations["dashboard_dashboard_get"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - "/login": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** Login */ - get: operations["login_login_get"]; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; + '/api/v1/health': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Hello World + * @description A simple endpoint to check if the API is running. + */ + get: operations['hello_world_api_v1_health_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/auth/jwt/login': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Auth:Jwt.Login */ + post: operations['auth_jwt_login_api_v1_auth_jwt_login_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/auth/jwt/logout': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Auth:Jwt.Logout */ + post: operations['auth_jwt_logout_api_v1_auth_jwt_logout_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/auth/cookie/login': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Auth:Cookie.Login */ + post: operations['auth_cookie_login_api_v1_auth_cookie_login_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/auth/cookie/logout': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Auth:Cookie.Logout */ + post: operations['auth_cookie_logout_api_v1_auth_cookie_logout_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/auth/register': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Register:Register */ + post: operations['register_register_api_v1_auth_register_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/auth/forgot-password': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Reset:Forgot Password */ + post: operations['reset_forgot_password_api_v1_auth_forgot_password_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/auth/reset-password': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Reset:Reset Password */ + post: operations['reset_reset_password_api_v1_auth_reset_password_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/auth/request-verify-token': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Verify:Request-Token */ + post: operations['verify_request_token_api_v1_auth_request_verify_token_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/auth/verify': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Verify:Verify */ + post: operations['verify_verify_api_v1_auth_verify_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/users/all': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get All Users */ + get: operations['get_all_users_api_v1_users_all_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/users/me': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Users:Current User */ + get: operations['users_current_user_api_v1_users_me_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + /** Users:Patch Current User */ + patch: operations['users_patch_current_user_api_v1_users_me_patch']; + trace?: never; + }; + '/api/v1/users/{id}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Users:User */ + get: operations['users_user_api_v1_users__id__get']; + put?: never; + post?: never; + /** Users:Delete User */ + delete: operations['users_delete_user_api_v1_users__id__delete']; + options?: never; + head?: never; + /** Users:Patch User */ + patch: operations['users_patch_user_api_v1_users__id__patch']; + trace?: never; + }; + '/api/v1/auth/metadata': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get Auth Metadata */ + get: operations['get_auth_metadata_api_v1_auth_metadata_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/auth/oauth/authorize': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Oauth:Oauth2.Cookie.Authorize */ + get: operations['oauth_oauth2_cookie_authorize_api_v1_auth_oauth_authorize_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/auth/oauth/callback': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Oauth:Oauth2.Cookie.Callback + * @description The response varies based on the authentication backend used. + */ + get: operations['oauth_oauth2_cookie_callback_api_v1_auth_oauth_callback_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/tv/shows': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get All Shows */ + get: operations['get_all_shows_api_v1_tv_shows_get']; + put?: never; + /** Add A Show */ + post: operations['add_a_show_api_v1_tv_shows_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/tv/episodes/count': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Total Count Of Downloaded Episodes + * @description Total number of episodes downloaded + */ + get: operations['get_total_count_of_downloaded_episodes_api_v1_tv_episodes_count_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/tv/shows/{show_id}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get A Show */ + get: operations['get_a_show_api_v1_tv_shows__show_id__get']; + put?: never; + post?: never; + /** Delete A Show */ + delete: operations['delete_a_show_api_v1_tv_shows__show_id__delete']; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/tv/importable': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get All Importable Shows + * @description get a list of unknown shows that were detected in the tv directory and are importable + */ + get: operations['get_all_importable_shows_api_v1_tv_importable_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/tv/importable/{show_id}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Import Detected Show + * @description Import a detected show from the specified directory into the library. + */ + post: operations['import_detected_show_api_v1_tv_importable__show_id__post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/tv/shows/torrents': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Shows With Torrents + * @description get all shows that are associated with torrents + * :return: A list of shows with all their torrents + */ + get: operations['get_shows_with_torrents_api_v1_tv_shows_torrents_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/tv/shows/libraries': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get Available Libraries */ + get: operations['get_available_libraries_api_v1_tv_shows_libraries_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/tv/shows/{show_id}/metadata': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Update Shows Metadata + * @description Updates a shows metadata. + */ + post: operations['update_shows_metadata_api_v1_tv_shows__show_id__metadata_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/tv/shows/{show_id}/continuousDownload': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Set Continuous Download + * @description Toggles whether future seasons of a show will be downloaded. + */ + post: operations['set_continuous_download_api_v1_tv_shows__show_id__continuousDownload_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/tv/shows/{show_id}/torrents': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get A Shows Torrents */ + get: operations['get_a_shows_torrents_api_v1_tv_shows__show_id__torrents_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/tv/shows/{show_id}/library': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Set Library + * @description Sets the library of a Show. + */ + post: operations['set_library_api_v1_tv_shows__show_id__library_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/tv/seasons/requests': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get Season Requests */ + get: operations['get_season_requests_api_v1_tv_seasons_requests_get']; + /** Update Request */ + put: operations['update_request_api_v1_tv_seasons_requests_put']; + /** + * Request A Season + * @description adds request flag to a season + */ + post: operations['request_a_season_api_v1_tv_seasons_requests_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/tv/seasons/requests/{request_id}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** Delete Season Request */ + delete: operations['delete_season_request_api_v1_tv_seasons_requests__request_id__delete']; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/tv/seasons/requests/{season_request_id}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + /** + * Authorize Request + * @description updates the request flag to true + */ + patch: operations['authorize_request_api_v1_tv_seasons_requests__season_request_id__patch']; + trace?: never; + }; + '/api/v1/tv/seasons/{season_id}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get Season */ + get: operations['get_season_api_v1_tv_seasons__season_id__get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/tv/seasons/{season_id}/files': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get Season Files */ + get: operations['get_season_files_api_v1_tv_seasons__season_id__files_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/tv/torrents': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get Torrents For A Season */ + get: operations['get_torrents_for_a_season_api_v1_tv_torrents_get']; + put?: never; + /** Download A Torrent */ + post: operations['download_a_torrent_api_v1_tv_torrents_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/tv/search': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Search Metadata Providers For A Show */ + get: operations['search_metadata_providers_for_a_show_api_v1_tv_search_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/tv/recommended': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get Recommended Shows */ + get: operations['get_recommended_shows_api_v1_tv_recommended_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/torrent': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get All Torrents */ + get: operations['get_all_torrents_api_v1_torrent_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/torrent/{torrent_id}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get Torrent */ + get: operations['get_torrent_api_v1_torrent__torrent_id__get']; + put?: never; + post?: never; + /** Delete Torrent */ + delete: operations['delete_torrent_api_v1_torrent__torrent_id__delete']; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/torrent/{torrent_id}/retry': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Retry Torrent Download */ + post: operations['retry_torrent_download_api_v1_torrent__torrent_id__retry_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/torrent/{torrent_id}/status': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + /** Update Torrent Status */ + patch: operations['update_torrent_status_api_v1_torrent__torrent_id__status_patch']; + trace?: never; + }; + '/api/v1/movies': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get All Movies */ + get: operations['get_all_movies_api_v1_movies_get']; + put?: never; + /** Add A Movie */ + post: operations['add_a_movie_api_v1_movies_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/movies/importable': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get All Importable Movies + * @description get a list of unknown movies that were detected in the movie directory and are importable + */ + get: operations['get_all_importable_movies_api_v1_movies_importable_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/movies/importable/{movie_id}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Import Detected Movie + * @description get a list of unknown movies that were detected in the movie directory and are importable + */ + post: operations['import_detected_movie_api_v1_movies_importable__movie_id__post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/movies/libraries': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get Available Libraries */ + get: operations['get_available_libraries_api_v1_movies_libraries_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/movies/search': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Search For Movie */ + get: operations['search_for_movie_api_v1_movies_search_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/movies/recommended': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get Popular Movies */ + get: operations['get_popular_movies_api_v1_movies_recommended_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/movies/torrents': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get All Movies With Torrents */ + get: operations['get_all_movies_with_torrents_api_v1_movies_torrents_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/movies/requests': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get All Movie Requests */ + get: operations['get_all_movie_requests_api_v1_movies_requests_get']; + put?: never; + /** Create Movie Request */ + post: operations['create_movie_request_api_v1_movies_requests_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/movies/requests/{movie_request_id}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** Update Movie Request */ + put: operations['update_movie_request_api_v1_movies_requests__movie_request_id__put']; + post?: never; + /** Delete Movie Request */ + delete: operations['delete_movie_request_api_v1_movies_requests__movie_request_id__delete']; + options?: never; + head?: never; + /** + * Authorize Request + * @description updates the request flag to true + */ + patch: operations['authorize_request_api_v1_movies_requests__movie_request_id__patch']; + trace?: never; + }; + '/api/v1/movies/{movie_id}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get Movie By Id */ + get: operations['get_movie_by_id_api_v1_movies__movie_id__get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/movies/{movie_id}/torrents': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get All Available Torrents For A Movie */ + get: operations['get_all_available_torrents_for_a_movie_api_v1_movies__movie_id__torrents_get']; + put?: never; + /** Download Torrent For Movie */ + post: operations['download_torrent_for_movie_api_v1_movies__movie_id__torrents_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/movies/{movie_id}/files': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get Movie Files By Movie Id */ + get: operations['get_movie_files_by_movie_id_api_v1_movies__movie_id__files_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/movies/{movie_id}/library': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Set Library + * @description Sets the library of a movie. + */ + post: operations['set_library_api_v1_movies__movie_id__library_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/notification': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get All Notifications + * @description Get all notifications. + */ + get: operations['get_all_notifications_api_v1_notification_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/notification/unread': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Unread Notifications + * @description Get all unread notifications. + */ + get: operations['get_unread_notifications_api_v1_notification_unread_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/notification/{notification_id}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Notification + * @description Get a specific notification by ID. + */ + get: operations['get_notification_api_v1_notification__notification_id__get']; + put?: never; + post?: never; + /** + * Delete Notification + * @description Delete a notification. + */ + delete: operations['delete_notification_api_v1_notification__notification_id__delete']; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/api/v1/notification/{notification_id}/read': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + /** + * Mark Notification As Read + * @description Mark a notification as read. + */ + patch: operations['mark_notification_as_read_api_v1_notification__notification_id__read_patch']; + trace?: never; + }; + '/api/v1/notification/{notification_id}/unread': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + /** + * Mark Notification As Unread + * @description Mark a notification as unread. + */ + patch: operations['mark_notification_as_unread_api_v1_notification__notification_id__unread_patch']; + trace?: never; + }; + '/': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Root */ + get: operations['root__get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/dashboard': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Dashboard */ + get: operations['dashboard_dashboard_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/login': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Login */ + get: operations['login_login_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; } export type webhooks = Record; export interface components { - schemas: { - /** AuthMetadata */ - AuthMetadata: { - /** Oauth Providers */ - oauth_providers: string[]; - }; - /** BearerResponse */ - BearerResponse: { - /** Access Token */ - access_token: string; - /** Token Type */ - token_type: string; - }; - /** Body_auth_cookie_login_api_v1_auth_cookie_login_post */ - Body_auth_cookie_login_api_v1_auth_cookie_login_post: { - /** Grant Type */ - grant_type?: string | null; - /** Username */ - username: string; - /** - * Password - * Format: password - */ - password: string; - /** - * Scope - * @default - */ - scope: string; - /** Client Id */ - client_id?: string | null; - /** - * Client Secret - * Format: password - */ - client_secret?: string | null; - }; - /** Body_auth_jwt_login_api_v1_auth_jwt_login_post */ - Body_auth_jwt_login_api_v1_auth_jwt_login_post: { - /** Grant Type */ - grant_type?: string | null; - /** Username */ - username: string; - /** - * Password - * Format: password - */ - password: string; - /** - * Scope - * @default - */ - scope: string; - /** Client Id */ - client_id?: string | null; - /** - * Client Secret - * Format: password - */ - client_secret?: string | null; - }; - /** Body_reset_forgot_password_api_v1_auth_forgot_password_post */ - Body_reset_forgot_password_api_v1_auth_forgot_password_post: { - /** - * Email - * Format: email - */ - email: string; - }; - /** Body_reset_reset_password_api_v1_auth_reset_password_post */ - Body_reset_reset_password_api_v1_auth_reset_password_post: { - /** Token */ - token: string; - /** Password */ - password: string; - }; - /** Body_verify_request_token_api_v1_auth_request_verify_token_post */ - Body_verify_request_token_api_v1_auth_request_verify_token_post: { - /** - * Email - * Format: email - */ - email: string; - }; - /** Body_verify_verify_api_v1_auth_verify_post */ - Body_verify_verify_api_v1_auth_verify_post: { - /** Token */ - token: string; - }; - /** CreateMovieRequest */ - CreateMovieRequest: { - min_quality: components["schemas"]["Quality"]; - wanted_quality: components["schemas"]["Quality"]; - /** - * Movie Id - * Format: uuid - */ - movie_id: string; - }; - /** CreateSeasonRequest */ - CreateSeasonRequest: { - min_quality: components["schemas"]["Quality"]; - wanted_quality: components["schemas"]["Quality"]; - /** - * Season Id - * Format: uuid - */ - season_id: string; - }; - /** Episode */ - Episode: { - /** - * Id - * Format: uuid - */ - id?: string; - /** Number */ - number: number; - /** External Id */ - external_id: number; - /** Title */ - title: string; - }; - /** ErrorModel */ - ErrorModel: { - /** Detail */ - detail: string | { - [key: string]: string; - }; - }; - /** HTTPValidationError */ - HTTPValidationError: { - /** Detail */ - detail?: components["schemas"]["ValidationError"][]; - }; - /** IndexerQueryResult */ - IndexerQueryResult: { - /** - * Id - * Format: uuid - */ - id?: string; - /** Title */ - title: string; - /** Seeders */ - seeders: number; - /** Flags */ - flags: string[]; - /** Size */ - size: number; - /** Usenet */ - usenet: boolean; - /** Age */ - age: number; - /** - * Score - * @default 0 - */ - score: number; - /** Indexer */ - indexer: string | null; - readonly quality: components["schemas"]["Quality"]; - /** Season */ - readonly season: number[]; - }; - /** LibraryItem */ - LibraryItem: { - /** Name */ - name: string; - /** Path */ - path: string; - }; - /** MediaImportSuggestion */ - MediaImportSuggestion: { - /** - * Directory - * Format: path - */ - directory: string; - /** Candidates */ - candidates: components["schemas"]["MetaDataProviderSearchResult"][]; - }; - /** MetaDataProviderSearchResult */ - MetaDataProviderSearchResult: { - /** Poster Path */ - poster_path: string | null; - /** Overview */ - overview: string | null; - /** Name */ - name: string; - /** External Id */ - external_id: number; - /** Year */ - year: number | null; - /** Metadata Provider */ - metadata_provider: string; - /** Added */ - added: boolean; - /** Vote Average */ - vote_average?: number | null; - /** Id */ - id?: string | null; - }; - /** Movie */ - Movie: { - /** - * Id - * Format: uuid - */ - id?: string; - /** Name */ - name: string; - /** Overview */ - overview: string; - /** Year */ - year: number | null; - /** External Id */ - external_id: number; - /** Metadata Provider */ - metadata_provider: string; - /** - * Library - * @default Default - */ - library: string; - }; - /** MovieRequest */ - MovieRequest: { - min_quality: components["schemas"]["Quality"]; - wanted_quality: components["schemas"]["Quality"]; - /** - * Id - * Format: uuid - */ - id?: string; - /** - * Movie Id - * Format: uuid - */ - movie_id: string; - requested_by?: components["schemas"]["UserRead"] | null; - /** - * Authorized - * @default false - */ - authorized: boolean; - authorized_by?: components["schemas"]["UserRead"] | null; - }; - /** MovieRequestBase */ - MovieRequestBase: { - min_quality: components["schemas"]["Quality"]; - wanted_quality: components["schemas"]["Quality"]; - }; - /** MovieTorrent */ - MovieTorrent: { - /** - * Torrent Id - * Format: uuid - */ - torrent_id: string; - /** Torrent Title */ - torrent_title: string; - status: components["schemas"]["TorrentStatus"]; - quality: components["schemas"]["Quality"]; - /** Imported */ - imported: boolean; - /** File Path Suffix */ - file_path_suffix: string; - /** Usenet */ - usenet: boolean; - }; - /** Notification */ - Notification: { - /** - * Id - * Format: uuid - * @description Unique identifier for the notification - */ - id?: string; - /** - * Read - * @description Whether the notification has been read - * @default false - */ - read: boolean; - /** - * Message - * @description The content of the notification - */ - message: string; - /** - * Timestamp - * Format: date-time - * @description The timestamp of the notification - */ - timestamp?: string; - }; - /** OAuth2AuthorizeResponse */ - OAuth2AuthorizeResponse: { - /** Authorization Url */ - authorization_url: string; - }; - /** PublicMovie */ - PublicMovie: { - /** - * Id - * Format: uuid - */ - id?: string; - /** Name */ - name: string; - /** Overview */ - overview: string; - /** Year */ - year: number | null; - /** External Id */ - external_id: number; - /** Metadata Provider */ - metadata_provider: string; - /** - * Library - * @default Default - */ - library: string; - /** - * Downloaded - * @default false - */ - downloaded: boolean; - /** - * Torrents - * @default [] - */ - torrents: components["schemas"]["MovieTorrent"][]; - }; - /** PublicMovieFile */ - PublicMovieFile: { - /** - * Movie Id - * Format: uuid - */ - movie_id: string; - /** File Path Suffix */ - file_path_suffix: string; - quality: components["schemas"]["Quality"]; - /** Torrent Id */ - torrent_id?: string | null; - /** - * Downloaded - * @default false - */ - downloaded: boolean; - }; - /** PublicSeason */ - PublicSeason: { - /** - * Id - * Format: uuid - */ - id: string; - /** Number */ - number: number; - /** - * Downloaded - * @default false - */ - downloaded: boolean; - /** Name */ - name: string; - /** Overview */ - overview: string; - /** External Id */ - external_id: number; - /** Episodes */ - episodes: components["schemas"]["Episode"][]; - }; - /** PublicSeasonFile */ - PublicSeasonFile: { - /** - * Season Id - * Format: uuid - */ - season_id: string; - quality: components["schemas"]["Quality"]; - /** Torrent Id */ - torrent_id: string | null; - /** File Path Suffix */ - file_path_suffix: string; - /** - * Downloaded - * @default false - */ - downloaded: boolean; - }; - /** PublicShow */ - PublicShow: { - /** - * Id - * Format: uuid - */ - id: string; - /** Name */ - name: string; - /** Overview */ - overview: string; - /** Year */ - year: number | null; - /** External Id */ - external_id: number; - /** Metadata Provider */ - metadata_provider: string; - /** - * Ended - * @default false - */ - ended: boolean; - /** - * Continuous Download - * @default false - */ - continuous_download: boolean; - /** Library */ - library: string; - /** Seasons */ - seasons: components["schemas"]["PublicSeason"][]; - }; - /** - * Quality - * @enum {integer} - */ - Quality: 1 | 2 | 3 | 4 | 5; - /** RichMovieRequest */ - RichMovieRequest: { - min_quality: components["schemas"]["Quality"]; - wanted_quality: components["schemas"]["Quality"]; - /** - * Id - * Format: uuid - */ - id?: string; - /** - * Movie Id - * Format: uuid - */ - movie_id: string; - requested_by?: components["schemas"]["UserRead"] | null; - /** - * Authorized - * @default false - */ - authorized: boolean; - authorized_by?: components["schemas"]["UserRead"] | null; - movie: components["schemas"]["Movie"]; - }; - /** RichMovieTorrent */ - RichMovieTorrent: { - /** - * Movie Id - * Format: uuid - */ - movie_id: string; - /** Name */ - name: string; - /** Year */ - year: number | null; - /** Metadata Provider */ - metadata_provider: string; - /** Torrents */ - torrents: components["schemas"]["MovieTorrent"][]; - }; - /** RichSeasonRequest */ - RichSeasonRequest: { - min_quality: components["schemas"]["Quality"]; - wanted_quality: components["schemas"]["Quality"]; - /** - * Id - * Format: uuid - */ - id?: string; - /** - * Season Id - * Format: uuid - */ - season_id: string; - requested_by?: components["schemas"]["UserRead"] | null; - /** - * Authorized - * @default false - */ - authorized: boolean; - authorized_by?: components["schemas"]["UserRead"] | null; - show: components["schemas"]["Show"]; - season: components["schemas"]["Season"]; - }; - /** RichSeasonTorrent */ - RichSeasonTorrent: { - /** - * Torrent Id - * Format: uuid - */ - torrent_id: string; - /** Torrent Title */ - torrent_title: string; - status: components["schemas"]["TorrentStatus"]; - quality: components["schemas"]["Quality"]; - /** Imported */ - imported: boolean; - /** Usenet */ - usenet: boolean; - /** File Path Suffix */ - file_path_suffix: string; - /** Seasons */ - seasons: number[]; - }; - /** RichShowTorrent */ - RichShowTorrent: { - /** - * Show Id - * Format: uuid - */ - show_id: string; - /** Name */ - name: string; - /** Year */ - year: number | null; - /** Metadata Provider */ - metadata_provider: string; - /** Torrents */ - torrents: components["schemas"]["RichSeasonTorrent"][]; - }; - /** Season */ - Season: { - /** - * Id - * Format: uuid - */ - id?: string; - /** Number */ - number: number; - /** Name */ - name: string; - /** Overview */ - overview: string; - /** External Id */ - external_id: number; - /** Episodes */ - episodes: components["schemas"]["Episode"][]; - }; - /** Show */ - Show: { - /** - * Id - * Format: uuid - */ - id?: string; - /** Name */ - name: string; - /** Overview */ - overview: string; - /** Year */ - year: number | null; - /** - * Ended - * @default false - */ - ended: boolean; - /** External Id */ - external_id: number; - /** Metadata Provider */ - metadata_provider: string; - /** - * Continuous Download - * @default false - */ - continuous_download: boolean; - /** - * Library - * @default Default - */ - library: string; - /** Seasons */ - seasons: components["schemas"]["Season"][]; - }; - /** Torrent */ - Torrent: { - /** - * Id - * Format: uuid - */ - id?: string; - status: components["schemas"]["TorrentStatus"]; - /** Title */ - title: string; - quality: components["schemas"]["Quality"]; - /** Imported */ - imported: boolean; - /** Hash */ - hash: string; - /** - * Usenet - * @default false - */ - usenet: boolean; - }; - /** - * TorrentStatus - * @enum {integer} - */ - TorrentStatus: 1 | 2 | 3 | 4; - /** UpdateSeasonRequest */ - UpdateSeasonRequest: { - min_quality: components["schemas"]["Quality"]; - wanted_quality: components["schemas"]["Quality"]; - /** - * Id - * Format: uuid - */ - id: string; - }; - /** UserCreate */ - UserCreate: { - /** - * Email - * Format: email - */ - email: string; - /** Password */ - password: string; - /** - * Is Active - * @default true - */ - is_active: boolean | null; - /** - * Is Superuser - * @default false - */ - is_superuser: boolean | null; - /** - * Is Verified - * @default false - */ - is_verified: boolean | null; - }; - /** UserRead */ - UserRead: { - /** - * Id - * Format: uuid - */ - id: string; - /** - * Email - * Format: email - */ - email: string; - /** - * Is Active - * @default true - */ - is_active: boolean; - /** - * Is Superuser - * @default false - */ - is_superuser: boolean; - /** - * Is Verified - * @default false - */ - is_verified: boolean; - }; - /** UserUpdate */ - UserUpdate: { - /** Password */ - password?: string | null; - /** Email */ - email?: string | null; - /** Is Active */ - is_active?: boolean | null; - /** Is Superuser */ - is_superuser?: boolean | null; - /** Is Verified */ - is_verified?: boolean | null; - }; - /** ValidationError */ - ValidationError: { - /** Location */ - loc: (string | number)[]; - /** Message */ - msg: string; - /** Error Type */ - type: string; - }; - }; - responses: never; - parameters: never; - requestBodies: never; - headers: never; - pathItems: never; + schemas: { + /** AuthMetadata */ + AuthMetadata: { + /** Oauth Providers */ + oauth_providers: string[]; + }; + /** BearerResponse */ + BearerResponse: { + /** Access Token */ + access_token: string; + /** Token Type */ + token_type: string; + }; + /** Body_auth_cookie_login_api_v1_auth_cookie_login_post */ + Body_auth_cookie_login_api_v1_auth_cookie_login_post: { + /** Grant Type */ + grant_type?: string | null; + /** Username */ + username: string; + /** + * Password + * Format: password + */ + password: string; + /** + * Scope + * @default + */ + scope: string; + /** Client Id */ + client_id?: string | null; + /** + * Client Secret + * Format: password + */ + client_secret?: string | null; + }; + /** Body_auth_jwt_login_api_v1_auth_jwt_login_post */ + Body_auth_jwt_login_api_v1_auth_jwt_login_post: { + /** Grant Type */ + grant_type?: string | null; + /** Username */ + username: string; + /** + * Password + * Format: password + */ + password: string; + /** + * Scope + * @default + */ + scope: string; + /** Client Id */ + client_id?: string | null; + /** + * Client Secret + * Format: password + */ + client_secret?: string | null; + }; + /** Body_reset_forgot_password_api_v1_auth_forgot_password_post */ + Body_reset_forgot_password_api_v1_auth_forgot_password_post: { + /** + * Email + * Format: email + */ + email: string; + }; + /** Body_reset_reset_password_api_v1_auth_reset_password_post */ + Body_reset_reset_password_api_v1_auth_reset_password_post: { + /** Token */ + token: string; + /** Password */ + password: string; + }; + /** Body_verify_request_token_api_v1_auth_request_verify_token_post */ + Body_verify_request_token_api_v1_auth_request_verify_token_post: { + /** + * Email + * Format: email + */ + email: string; + }; + /** Body_verify_verify_api_v1_auth_verify_post */ + Body_verify_verify_api_v1_auth_verify_post: { + /** Token */ + token: string; + }; + /** CreateMovieRequest */ + CreateMovieRequest: { + min_quality: components['schemas']['Quality']; + wanted_quality: components['schemas']['Quality']; + /** + * Movie Id + * Format: uuid + */ + movie_id: string; + }; + /** CreateSeasonRequest */ + CreateSeasonRequest: { + min_quality: components['schemas']['Quality']; + wanted_quality: components['schemas']['Quality']; + /** + * Season Id + * Format: uuid + */ + season_id: string; + }; + /** Episode */ + Episode: { + /** + * Id + * Format: uuid + */ + id?: string; + /** Number */ + number: number; + /** External Id */ + external_id: number; + /** Title */ + title: string; + }; + /** ErrorModel */ + ErrorModel: { + /** Detail */ + detail: + | string + | { + [key: string]: string; + }; + }; + /** HTTPValidationError */ + HTTPValidationError: { + /** Detail */ + detail?: components['schemas']['ValidationError'][]; + }; + /** IndexerQueryResult */ + IndexerQueryResult: { + /** + * Id + * Format: uuid + */ + id?: string; + /** Title */ + title: string; + /** Seeders */ + seeders: number; + /** Flags */ + flags: string[]; + /** Size */ + size: number; + /** Usenet */ + usenet: boolean; + /** Age */ + age: number; + /** + * Score + * @default 0 + */ + score: number; + /** Indexer */ + indexer: string | null; + readonly quality: components['schemas']['Quality']; + /** Season */ + readonly season: number[]; + }; + /** LibraryItem */ + LibraryItem: { + /** Name */ + name: string; + /** Path */ + path: string; + }; + /** MediaImportSuggestion */ + MediaImportSuggestion: { + /** + * Directory + * Format: path + */ + directory: string; + /** Candidates */ + candidates: components['schemas']['MetaDataProviderSearchResult'][]; + }; + /** MetaDataProviderSearchResult */ + MetaDataProviderSearchResult: { + /** Poster Path */ + poster_path: string | null; + /** Overview */ + overview: string | null; + /** Name */ + name: string; + /** External Id */ + external_id: number; + /** Year */ + year: number | null; + /** Metadata Provider */ + metadata_provider: string; + /** Added */ + added: boolean; + /** Vote Average */ + vote_average?: number | null; + /** Id */ + id?: string | null; + }; + /** Movie */ + Movie: { + /** + * Id + * Format: uuid + */ + id?: string; + /** Name */ + name: string; + /** Overview */ + overview: string; + /** Year */ + year: number | null; + /** External Id */ + external_id: number; + /** Metadata Provider */ + metadata_provider: string; + /** + * Library + * @default Default + */ + library: string; + }; + /** MovieRequest */ + MovieRequest: { + min_quality: components['schemas']['Quality']; + wanted_quality: components['schemas']['Quality']; + /** + * Id + * Format: uuid + */ + id?: string; + /** + * Movie Id + * Format: uuid + */ + movie_id: string; + requested_by?: components['schemas']['UserRead'] | null; + /** + * Authorized + * @default false + */ + authorized: boolean; + authorized_by?: components['schemas']['UserRead'] | null; + }; + /** MovieRequestBase */ + MovieRequestBase: { + min_quality: components['schemas']['Quality']; + wanted_quality: components['schemas']['Quality']; + }; + /** MovieTorrent */ + MovieTorrent: { + /** + * Torrent Id + * Format: uuid + */ + torrent_id: string; + /** Torrent Title */ + torrent_title: string; + status: components['schemas']['TorrentStatus']; + quality: components['schemas']['Quality']; + /** Imported */ + imported: boolean; + /** File Path Suffix */ + file_path_suffix: string; + /** Usenet */ + usenet: boolean; + }; + /** Notification */ + Notification: { + /** + * Id + * Format: uuid + * @description Unique identifier for the notification + */ + id?: string; + /** + * Read + * @description Whether the notification has been read + * @default false + */ + read: boolean; + /** + * Message + * @description The content of the notification + */ + message: string; + /** + * Timestamp + * Format: date-time + * @description The timestamp of the notification + */ + timestamp?: string; + }; + /** OAuth2AuthorizeResponse */ + OAuth2AuthorizeResponse: { + /** Authorization Url */ + authorization_url: string; + }; + /** PublicMovie */ + PublicMovie: { + /** + * Id + * Format: uuid + */ + id?: string; + /** Name */ + name: string; + /** Overview */ + overview: string; + /** Year */ + year: number | null; + /** External Id */ + external_id: number; + /** Metadata Provider */ + metadata_provider: string; + /** + * Library + * @default Default + */ + library: string; + /** + * Downloaded + * @default false + */ + downloaded: boolean; + /** + * Torrents + * @default [] + */ + torrents: components['schemas']['MovieTorrent'][]; + }; + /** PublicMovieFile */ + PublicMovieFile: { + /** + * Movie Id + * Format: uuid + */ + movie_id: string; + /** File Path Suffix */ + file_path_suffix: string; + quality: components['schemas']['Quality']; + /** Torrent Id */ + torrent_id?: string | null; + /** + * Downloaded + * @default false + */ + downloaded: boolean; + }; + /** PublicSeason */ + PublicSeason: { + /** + * Id + * Format: uuid + */ + id: string; + /** Number */ + number: number; + /** + * Downloaded + * @default false + */ + downloaded: boolean; + /** Name */ + name: string; + /** Overview */ + overview: string; + /** External Id */ + external_id: number; + /** Episodes */ + episodes: components['schemas']['Episode'][]; + }; + /** PublicSeasonFile */ + PublicSeasonFile: { + /** + * Season Id + * Format: uuid + */ + season_id: string; + quality: components['schemas']['Quality']; + /** Torrent Id */ + torrent_id: string | null; + /** File Path Suffix */ + file_path_suffix: string; + /** + * Downloaded + * @default false + */ + downloaded: boolean; + }; + /** PublicShow */ + PublicShow: { + /** + * Id + * Format: uuid + */ + id: string; + /** Name */ + name: string; + /** Overview */ + overview: string; + /** Year */ + year: number | null; + /** External Id */ + external_id: number; + /** Metadata Provider */ + metadata_provider: string; + /** + * Ended + * @default false + */ + ended: boolean; + /** + * Continuous Download + * @default false + */ + continuous_download: boolean; + /** Library */ + library: string; + /** Seasons */ + seasons: components['schemas']['PublicSeason'][]; + }; + /** + * Quality + * @enum {integer} + */ + Quality: 1 | 2 | 3 | 4 | 5; + /** RichMovieRequest */ + RichMovieRequest: { + min_quality: components['schemas']['Quality']; + wanted_quality: components['schemas']['Quality']; + /** + * Id + * Format: uuid + */ + id?: string; + /** + * Movie Id + * Format: uuid + */ + movie_id: string; + requested_by?: components['schemas']['UserRead'] | null; + /** + * Authorized + * @default false + */ + authorized: boolean; + authorized_by?: components['schemas']['UserRead'] | null; + movie: components['schemas']['Movie']; + }; + /** RichMovieTorrent */ + RichMovieTorrent: { + /** + * Movie Id + * Format: uuid + */ + movie_id: string; + /** Name */ + name: string; + /** Year */ + year: number | null; + /** Metadata Provider */ + metadata_provider: string; + /** Torrents */ + torrents: components['schemas']['MovieTorrent'][]; + }; + /** RichSeasonRequest */ + RichSeasonRequest: { + min_quality: components['schemas']['Quality']; + wanted_quality: components['schemas']['Quality']; + /** + * Id + * Format: uuid + */ + id?: string; + /** + * Season Id + * Format: uuid + */ + season_id: string; + requested_by?: components['schemas']['UserRead'] | null; + /** + * Authorized + * @default false + */ + authorized: boolean; + authorized_by?: components['schemas']['UserRead'] | null; + show: components['schemas']['Show']; + season: components['schemas']['Season']; + }; + /** RichSeasonTorrent */ + RichSeasonTorrent: { + /** + * Torrent Id + * Format: uuid + */ + torrent_id: string; + /** Torrent Title */ + torrent_title: string; + status: components['schemas']['TorrentStatus']; + quality: components['schemas']['Quality']; + /** Imported */ + imported: boolean; + /** Usenet */ + usenet: boolean; + /** File Path Suffix */ + file_path_suffix: string; + /** Seasons */ + seasons: number[]; + }; + /** RichShowTorrent */ + RichShowTorrent: { + /** + * Show Id + * Format: uuid + */ + show_id: string; + /** Name */ + name: string; + /** Year */ + year: number | null; + /** Metadata Provider */ + metadata_provider: string; + /** Torrents */ + torrents: components['schemas']['RichSeasonTorrent'][]; + }; + /** Season */ + Season: { + /** + * Id + * Format: uuid + */ + id?: string; + /** Number */ + number: number; + /** Name */ + name: string; + /** Overview */ + overview: string; + /** External Id */ + external_id: number; + /** Episodes */ + episodes: components['schemas']['Episode'][]; + }; + /** Show */ + Show: { + /** + * Id + * Format: uuid + */ + id?: string; + /** Name */ + name: string; + /** Overview */ + overview: string; + /** Year */ + year: number | null; + /** + * Ended + * @default false + */ + ended: boolean; + /** External Id */ + external_id: number; + /** Metadata Provider */ + metadata_provider: string; + /** + * Continuous Download + * @default false + */ + continuous_download: boolean; + /** + * Library + * @default Default + */ + library: string; + /** Seasons */ + seasons: components['schemas']['Season'][]; + }; + /** Torrent */ + Torrent: { + /** + * Id + * Format: uuid + */ + id?: string; + status: components['schemas']['TorrentStatus']; + /** Title */ + title: string; + quality: components['schemas']['Quality']; + /** Imported */ + imported: boolean; + /** Hash */ + hash: string; + /** + * Usenet + * @default false + */ + usenet: boolean; + }; + /** + * TorrentStatus + * @enum {integer} + */ + TorrentStatus: 1 | 2 | 3 | 4; + /** UpdateSeasonRequest */ + UpdateSeasonRequest: { + min_quality: components['schemas']['Quality']; + wanted_quality: components['schemas']['Quality']; + /** + * Id + * Format: uuid + */ + id: string; + }; + /** UserCreate */ + UserCreate: { + /** + * Email + * Format: email + */ + email: string; + /** Password */ + password: string; + /** + * Is Active + * @default true + */ + is_active: boolean | null; + /** + * Is Superuser + * @default false + */ + is_superuser: boolean | null; + /** + * Is Verified + * @default false + */ + is_verified: boolean | null; + }; + /** UserRead */ + UserRead: { + /** + * Id + * Format: uuid + */ + id: string; + /** + * Email + * Format: email + */ + email: string; + /** + * Is Active + * @default true + */ + is_active: boolean; + /** + * Is Superuser + * @default false + */ + is_superuser: boolean; + /** + * Is Verified + * @default false + */ + is_verified: boolean; + }; + /** UserUpdate */ + UserUpdate: { + /** Password */ + password?: string | null; + /** Email */ + email?: string | null; + /** Is Active */ + is_active?: boolean | null; + /** Is Superuser */ + is_superuser?: boolean | null; + /** Is Verified */ + is_verified?: boolean | null; + }; + /** ValidationError */ + ValidationError: { + /** Location */ + loc: (string | number)[]; + /** Message */ + msg: string; + /** Error Type */ + type: string; + }; + }; + responses: never; + parameters: never; + requestBodies: never; + headers: never; + pathItems: never; } export type $defs = Record; export interface operations { - hello_world_api_v1_health_get: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": { - [key: string]: unknown; - }; - }; - }; - }; - }; - auth_jwt_login_api_v1_auth_jwt_login_post: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/x-www-form-urlencoded": components["schemas"]["Body_auth_jwt_login_api_v1_auth_jwt_login_post"]; - }; - }; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - /** - * @example { - * "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoiOTIyMWZmYzktNjQwZi00MzcyLTg2ZDMtY2U2NDJjYmE1NjAzIiwiYXVkIjoiZmFzdGFwaS11c2VyczphdXRoIiwiZXhwIjoxNTcxNTA0MTkzfQ.M10bjOe45I5Ncu_uXvOmVV8QxnL-nZfcH96U90JaocI", - * "token_type": "bearer" - * } - */ - "application/json": components["schemas"]["BearerResponse"]; - }; - }; - /** @description Bad Request */ - 400: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["ErrorModel"]; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - auth_jwt_logout_api_v1_auth_jwt_logout_post: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": unknown; - }; - }; - /** @description Missing token or inactive user. */ - 401: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - auth_cookie_login_api_v1_auth_cookie_login_post: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/x-www-form-urlencoded": components["schemas"]["Body_auth_cookie_login_api_v1_auth_cookie_login_post"]; - }; - }; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": unknown; - }; - }; - /** @description No Content */ - 204: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - /** @description Bad Request */ - 400: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["ErrorModel"]; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - auth_cookie_logout_api_v1_auth_cookie_logout_post: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": unknown; - }; - }; - /** @description No Content */ - 204: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - /** @description Missing token or inactive user. */ - 401: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - register_register_api_v1_auth_register_post: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["UserCreate"]; - }; - }; - responses: { - /** @description Successful Response */ - 201: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["UserRead"]; - }; - }; - /** @description Bad Request */ - 400: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["ErrorModel"]; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - reset_forgot_password_api_v1_auth_forgot_password_post: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["Body_reset_forgot_password_api_v1_auth_forgot_password_post"]; - }; - }; - responses: { - /** @description Successful Response */ - 202: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": unknown; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - reset_reset_password_api_v1_auth_reset_password_post: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["Body_reset_reset_password_api_v1_auth_reset_password_post"]; - }; - }; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": unknown; - }; - }; - /** @description Bad Request */ - 400: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["ErrorModel"]; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - verify_request_token_api_v1_auth_request_verify_token_post: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["Body_verify_request_token_api_v1_auth_request_verify_token_post"]; - }; - }; - responses: { - /** @description Successful Response */ - 202: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": unknown; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - verify_verify_api_v1_auth_verify_post: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["Body_verify_verify_api_v1_auth_verify_post"]; - }; - }; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["UserRead"]; - }; - }; - /** @description Bad Request */ - 400: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["ErrorModel"]; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - get_all_users_api_v1_users_all_get: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["UserRead"][]; - }; - }; - }; - }; - users_current_user_api_v1_users_me_get: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["UserRead"]; - }; - }; - /** @description Missing token or inactive user. */ - 401: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - }; - }; - users_patch_current_user_api_v1_users_me_patch: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["UserUpdate"]; - }; - }; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["UserRead"]; - }; - }; - /** @description Bad Request */ - 400: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["ErrorModel"]; - }; - }; - /** @description Missing token or inactive user. */ - 401: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - users_user_api_v1_users__id__get: { - parameters: { - query?: never; - header?: never; - path: { - id: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["UserRead"]; - }; - }; - /** @description Missing token or inactive user. */ - 401: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - /** @description Not a superuser. */ - 403: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - /** @description The user does not exist. */ - 404: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - users_delete_user_api_v1_users__id__delete: { - parameters: { - query?: never; - header?: never; - path: { - id: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 204: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - /** @description Missing token or inactive user. */ - 401: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - /** @description Not a superuser. */ - 403: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - /** @description The user does not exist. */ - 404: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - users_patch_user_api_v1_users__id__patch: { - parameters: { - query?: never; - header?: never; - path: { - id: string; - }; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["UserUpdate"]; - }; - }; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["UserRead"]; - }; - }; - /** @description Bad Request */ - 400: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["ErrorModel"]; - }; - }; - /** @description Missing token or inactive user. */ - 401: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - /** @description Not a superuser. */ - 403: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - /** @description The user does not exist. */ - 404: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - get_auth_metadata_api_v1_auth_metadata_get: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["AuthMetadata"]; - }; - }; - }; - }; - oauth_oauth2_cookie_authorize_api_v1_auth_oauth_authorize_get: { - parameters: { - query?: { - scopes?: string[]; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["OAuth2AuthorizeResponse"]; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - oauth_oauth2_cookie_callback_api_v1_auth_oauth_callback_get: { - parameters: { - query?: { - code?: string | null; - code_verifier?: string | null; - state?: string | null; - error?: string | null; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": unknown; - }; - }; - /** @description Bad Request */ - 400: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["ErrorModel"]; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - get_all_shows_api_v1_tv_shows_get: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["Show"][]; - }; - }; - }; - }; - add_a_show_api_v1_tv_shows_post: { - parameters: { - query: { - show_id: number; - metadata_provider?: "tmdb" | "tvdb"; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successfully created show */ - 201: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["Show"]; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - get_total_count_of_downloaded_episodes_api_v1_tv_episodes_count_get: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": number; - }; - }; - }; - }; - get_a_show_api_v1_tv_shows__show_id__get: { - parameters: { - query?: never; - header?: never; - path: { - /** @description The ID of the show */ - show_id: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["PublicShow"]; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - delete_a_show_api_v1_tv_shows__show_id__delete: { - parameters: { - query?: never; - header?: never; - path: { - /** @description The ID of the show */ - show_id: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 204: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - get_all_importable_shows_api_v1_tv_importable_get: { - parameters: { - query?: { - metadata_provider?: "tmdb" | "tvdb"; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["MediaImportSuggestion"][]; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - import_detected_show_api_v1_tv_importable__show_id__post: { - parameters: { - query: { - directory: string; - }; - header?: never; - path: { - /** @description The ID of the show */ - show_id: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 204: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - get_shows_with_torrents_api_v1_tv_shows_torrents_get: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["RichShowTorrent"][]; - }; - }; - }; - }; - get_available_libraries_api_v1_tv_shows_libraries_get: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["LibraryItem"][]; - }; - }; - }; - }; - update_shows_metadata_api_v1_tv_shows__show_id__metadata_post: { - parameters: { - query?: { - metadata_provider?: "tmdb" | "tvdb"; - }; - header?: never; - path: { - /** @description The ID of the show */ - show_id: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["PublicShow"]; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - set_continuous_download_api_v1_tv_shows__show_id__continuousDownload_post: { - parameters: { - query: { - continuous_download: boolean; - }; - header?: never; - path: { - /** @description The ID of the show */ - show_id: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["PublicShow"]; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - get_a_shows_torrents_api_v1_tv_shows__show_id__torrents_get: { - parameters: { - query?: never; - header?: never; - path: { - /** @description The ID of the show */ - show_id: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["RichShowTorrent"]; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - set_library_api_v1_tv_shows__show_id__library_post: { - parameters: { - query: { - library: string; - }; - header?: never; - path: { - /** @description The ID of the show */ - show_id: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 204: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - get_season_requests_api_v1_tv_seasons_requests_get: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["RichSeasonRequest"][]; - }; - }; - }; - }; - update_request_api_v1_tv_seasons_requests_put: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["UpdateSeasonRequest"]; - }; - }; - responses: { - /** @description Successful Response */ - 204: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - request_a_season_api_v1_tv_seasons_requests_post: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["CreateSeasonRequest"]; - }; - }; - responses: { - /** @description Successful Response */ - 204: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - delete_season_request_api_v1_tv_seasons_requests__request_id__delete: { - parameters: { - query?: never; - header?: never; - path: { - request_id: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 204: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - authorize_request_api_v1_tv_seasons_requests__season_request_id__patch: { - parameters: { - query?: { - authorized_status?: boolean; - }; - header?: never; - path: { - season_request_id: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 204: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - get_season_api_v1_tv_seasons__season_id__get: { - parameters: { - query?: never; - header?: never; - path: { - /** @description The ID of the season */ - season_id: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["Season"]; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - get_season_files_api_v1_tv_seasons__season_id__files_get: { - parameters: { - query?: never; - header?: never; - path: { - /** @description The ID of the season */ - season_id: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["PublicSeasonFile"][]; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - get_torrents_for_a_season_api_v1_tv_torrents_get: { - parameters: { - query: { - show_id: string; - season_number?: number; - search_query_override?: string; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["IndexerQueryResult"][]; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - download_a_torrent_api_v1_tv_torrents_post: { - parameters: { - query: { - public_indexer_result_id: string; - show_id: string; - override_file_path_suffix?: string; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["Torrent"]; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - search_metadata_providers_for_a_show_api_v1_tv_search_get: { - parameters: { - query: { - query: string; - metadata_provider?: "tmdb" | "tvdb"; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["MetaDataProviderSearchResult"][]; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - get_recommended_shows_api_v1_tv_recommended_get: { - parameters: { - query?: { - metadata_provider?: "tmdb" | "tvdb"; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["MetaDataProviderSearchResult"][]; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - get_all_torrents_api_v1_torrent_get: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["Torrent"][]; - }; - }; - }; - }; - get_torrent_api_v1_torrent__torrent_id__get: { - parameters: { - query?: never; - header?: never; - path: { - torrent_id: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["Torrent"]; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - delete_torrent_api_v1_torrent__torrent_id__delete: { - parameters: { - query?: { - delete_files?: boolean; - }; - header?: never; - path: { - torrent_id: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 204: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - retry_torrent_download_api_v1_torrent__torrent_id__retry_post: { - parameters: { - query?: never; - header?: never; - path: { - torrent_id: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 204: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - update_torrent_status_api_v1_torrent__torrent_id__status_patch: { - parameters: { - query?: { - state?: components["schemas"]["TorrentStatus"] | null; - imported?: boolean | null; - }; - header?: never; - path: { - torrent_id: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["Torrent"]; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - get_all_movies_api_v1_movies_get: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["PublicMovie"][]; - }; - }; - }; - }; - add_a_movie_api_v1_movies_post: { - parameters: { - query: { - movie_id: number; - metadata_provider?: "tmdb" | "tvdb"; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successfully created movie */ - 201: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["Movie"]; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - get_all_importable_movies_api_v1_movies_importable_get: { - parameters: { - query?: { - metadata_provider?: "tmdb" | "tvdb"; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["MediaImportSuggestion"][]; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - import_detected_movie_api_v1_movies_importable__movie_id__post: { - parameters: { - query: { - directory: string; - }; - header?: never; - path: { - movie_id: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 204: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - get_available_libraries_api_v1_movies_libraries_get: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["LibraryItem"][]; - }; - }; - }; - }; - search_for_movie_api_v1_movies_search_get: { - parameters: { - query: { - query: string; - metadata_provider?: "tmdb" | "tvdb"; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["MetaDataProviderSearchResult"][]; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - get_popular_movies_api_v1_movies_recommended_get: { - parameters: { - query?: { - metadata_provider?: "tmdb" | "tvdb"; - }; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["MetaDataProviderSearchResult"][]; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - get_all_movies_with_torrents_api_v1_movies_torrents_get: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["RichMovieTorrent"][]; - }; - }; - }; - }; - get_all_movie_requests_api_v1_movies_requests_get: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["RichMovieRequest"][]; - }; - }; - }; - }; - create_movie_request_api_v1_movies_requests_post: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["CreateMovieRequest"]; - }; - }; - responses: { - /** @description Successful Response */ - 201: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["MovieRequest"]; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - update_movie_request_api_v1_movies_requests__movie_request_id__put: { - parameters: { - query?: never; - header?: never; - path: { - movie_request_id: string; - }; - cookie?: never; - }; - requestBody: { - content: { - "application/json": components["schemas"]["MovieRequestBase"]; - }; - }; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["MovieRequest"]; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - delete_movie_request_api_v1_movies_requests__movie_request_id__delete: { - parameters: { - query?: never; - header?: never; - path: { - movie_request_id: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 204: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - authorize_request_api_v1_movies_requests__movie_request_id__patch: { - parameters: { - query?: { - authorized_status?: boolean; - }; - header?: never; - path: { - movie_request_id: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 204: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - get_movie_by_id_api_v1_movies__movie_id__get: { - parameters: { - query?: never; - header?: never; - path: { - movie_id: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["PublicMovie"]; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - get_all_available_torrents_for_a_movie_api_v1_movies__movie_id__torrents_get: { - parameters: { - query?: { - search_query_override?: string | null; - }; - header?: never; - path: { - movie_id: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["IndexerQueryResult"][]; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - download_torrent_for_movie_api_v1_movies__movie_id__torrents_post: { - parameters: { - query: { - public_indexer_result_id: string; - override_file_path_suffix?: string; - }; - header?: never; - path: { - movie_id: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 201: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["Torrent"]; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - get_movie_files_by_movie_id_api_v1_movies__movie_id__files_get: { - parameters: { - query?: never; - header?: never; - path: { - movie_id: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["PublicMovieFile"][]; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - set_library_api_v1_movies__movie_id__library_post: { - parameters: { - query: { - library: string; - }; - header?: never; - path: { - movie_id: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 204: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - get_all_notifications_api_v1_notification_get: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["Notification"][]; - }; - }; - }; - }; - get_unread_notifications_api_v1_notification_unread_get: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["Notification"][]; - }; - }; - }; - }; - get_notification_api_v1_notification__notification_id__get: { - parameters: { - query?: never; - header?: never; - path: { - notification_id: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["Notification"]; - }; - }; - /** @description Notification not found */ - 404: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - delete_notification_api_v1_notification__notification_id__delete: { - parameters: { - query?: never; - header?: never; - path: { - notification_id: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 204: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - /** @description Notification not found */ - 404: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - mark_notification_as_read_api_v1_notification__notification_id__read_patch: { - parameters: { - query?: never; - header?: never; - path: { - notification_id: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 204: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - /** @description Notification not found */ - 404: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - mark_notification_as_unread_api_v1_notification__notification_id__unread_patch: { - parameters: { - query?: never; - header?: never; - path: { - notification_id: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 204: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - /** @description Notification not found */ - 404: { - headers: { - [name: string]: unknown; - }; - content?: never; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["HTTPValidationError"]; - }; - }; - }; - }; - root__get: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": unknown; - }; - }; - }; - }; - dashboard_dashboard_get: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": unknown; - }; - }; - }; - }; - login_login_get: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: { - /** @description Successful Response */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": unknown; - }; - }; - }; - }; + hello_world_api_v1_health_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': { + [key: string]: unknown; + }; + }; + }; + }; + }; + auth_jwt_login_api_v1_auth_jwt_login_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + 'application/x-www-form-urlencoded': components['schemas']['Body_auth_jwt_login_api_v1_auth_jwt_login_post']; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + /** + * @example { + * "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoiOTIyMWZmYzktNjQwZi00MzcyLTg2ZDMtY2U2NDJjYmE1NjAzIiwiYXVkIjoiZmFzdGFwaS11c2VyczphdXRoIiwiZXhwIjoxNTcxNTA0MTkzfQ.M10bjOe45I5Ncu_uXvOmVV8QxnL-nZfcH96U90JaocI", + * "token_type": "bearer" + * } + */ + 'application/json': components['schemas']['BearerResponse']; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['ErrorModel']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + auth_jwt_logout_api_v1_auth_jwt_logout_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': unknown; + }; + }; + /** @description Missing token or inactive user. */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + auth_cookie_login_api_v1_auth_cookie_login_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + 'application/x-www-form-urlencoded': components['schemas']['Body_auth_cookie_login_api_v1_auth_cookie_login_post']; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': unknown; + }; + }; + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['ErrorModel']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + auth_cookie_logout_api_v1_auth_cookie_logout_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': unknown; + }; + }; + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Missing token or inactive user. */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + register_register_api_v1_auth_register_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['UserCreate']; + }; + }; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['UserRead']; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['ErrorModel']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + reset_forgot_password_api_v1_auth_forgot_password_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['Body_reset_forgot_password_api_v1_auth_forgot_password_post']; + }; + }; + responses: { + /** @description Successful Response */ + 202: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + reset_reset_password_api_v1_auth_reset_password_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['Body_reset_reset_password_api_v1_auth_reset_password_post']; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': unknown; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['ErrorModel']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + verify_request_token_api_v1_auth_request_verify_token_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['Body_verify_request_token_api_v1_auth_request_verify_token_post']; + }; + }; + responses: { + /** @description Successful Response */ + 202: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + verify_verify_api_v1_auth_verify_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['Body_verify_verify_api_v1_auth_verify_post']; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['UserRead']; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['ErrorModel']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + get_all_users_api_v1_users_all_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['UserRead'][]; + }; + }; + }; + }; + users_current_user_api_v1_users_me_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['UserRead']; + }; + }; + /** @description Missing token or inactive user. */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + users_patch_current_user_api_v1_users_me_patch: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['UserUpdate']; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['UserRead']; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['ErrorModel']; + }; + }; + /** @description Missing token or inactive user. */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + users_user_api_v1_users__id__get: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['UserRead']; + }; + }; + /** @description Missing token or inactive user. */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Not a superuser. */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description The user does not exist. */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + users_delete_user_api_v1_users__id__delete: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Missing token or inactive user. */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Not a superuser. */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description The user does not exist. */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + users_patch_user_api_v1_users__id__patch: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['UserUpdate']; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['UserRead']; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['ErrorModel']; + }; + }; + /** @description Missing token or inactive user. */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Not a superuser. */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description The user does not exist. */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + get_auth_metadata_api_v1_auth_metadata_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['AuthMetadata']; + }; + }; + }; + }; + oauth_oauth2_cookie_authorize_api_v1_auth_oauth_authorize_get: { + parameters: { + query?: { + scopes?: string[]; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['OAuth2AuthorizeResponse']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + oauth_oauth2_cookie_callback_api_v1_auth_oauth_callback_get: { + parameters: { + query?: { + code?: string | null; + code_verifier?: string | null; + state?: string | null; + error?: string | null; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': unknown; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['ErrorModel']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + get_all_shows_api_v1_tv_shows_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['Show'][]; + }; + }; + }; + }; + add_a_show_api_v1_tv_shows_post: { + parameters: { + query: { + show_id: number; + metadata_provider?: 'tmdb' | 'tvdb'; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successfully created show */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['Show']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + get_total_count_of_downloaded_episodes_api_v1_tv_episodes_count_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': number; + }; + }; + }; + }; + get_a_show_api_v1_tv_shows__show_id__get: { + parameters: { + query?: never; + header?: never; + path: { + /** @description The ID of the show */ + show_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['PublicShow']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + delete_a_show_api_v1_tv_shows__show_id__delete: { + parameters: { + query?: never; + header?: never; + path: { + /** @description The ID of the show */ + show_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + get_all_importable_shows_api_v1_tv_importable_get: { + parameters: { + query?: { + metadata_provider?: 'tmdb' | 'tvdb'; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['MediaImportSuggestion'][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + import_detected_show_api_v1_tv_importable__show_id__post: { + parameters: { + query: { + directory: string; + }; + header?: never; + path: { + /** @description The ID of the show */ + show_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + get_shows_with_torrents_api_v1_tv_shows_torrents_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['RichShowTorrent'][]; + }; + }; + }; + }; + get_available_libraries_api_v1_tv_shows_libraries_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['LibraryItem'][]; + }; + }; + }; + }; + update_shows_metadata_api_v1_tv_shows__show_id__metadata_post: { + parameters: { + query?: { + metadata_provider?: 'tmdb' | 'tvdb'; + }; + header?: never; + path: { + /** @description The ID of the show */ + show_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['PublicShow']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + set_continuous_download_api_v1_tv_shows__show_id__continuousDownload_post: { + parameters: { + query: { + continuous_download: boolean; + }; + header?: never; + path: { + /** @description The ID of the show */ + show_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['PublicShow']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + get_a_shows_torrents_api_v1_tv_shows__show_id__torrents_get: { + parameters: { + query?: never; + header?: never; + path: { + /** @description The ID of the show */ + show_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['RichShowTorrent']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + set_library_api_v1_tv_shows__show_id__library_post: { + parameters: { + query: { + library: string; + }; + header?: never; + path: { + /** @description The ID of the show */ + show_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + get_season_requests_api_v1_tv_seasons_requests_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['RichSeasonRequest'][]; + }; + }; + }; + }; + update_request_api_v1_tv_seasons_requests_put: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['UpdateSeasonRequest']; + }; + }; + responses: { + /** @description Successful Response */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + request_a_season_api_v1_tv_seasons_requests_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['CreateSeasonRequest']; + }; + }; + responses: { + /** @description Successful Response */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + delete_season_request_api_v1_tv_seasons_requests__request_id__delete: { + parameters: { + query?: never; + header?: never; + path: { + request_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + authorize_request_api_v1_tv_seasons_requests__season_request_id__patch: { + parameters: { + query?: { + authorized_status?: boolean; + }; + header?: never; + path: { + season_request_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + get_season_api_v1_tv_seasons__season_id__get: { + parameters: { + query?: never; + header?: never; + path: { + /** @description The ID of the season */ + season_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['Season']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + get_season_files_api_v1_tv_seasons__season_id__files_get: { + parameters: { + query?: never; + header?: never; + path: { + /** @description The ID of the season */ + season_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['PublicSeasonFile'][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + get_torrents_for_a_season_api_v1_tv_torrents_get: { + parameters: { + query: { + show_id: string; + season_number?: number; + search_query_override?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['IndexerQueryResult'][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + download_a_torrent_api_v1_tv_torrents_post: { + parameters: { + query: { + public_indexer_result_id: string; + show_id: string; + override_file_path_suffix?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['Torrent']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + search_metadata_providers_for_a_show_api_v1_tv_search_get: { + parameters: { + query: { + query: string; + metadata_provider?: 'tmdb' | 'tvdb'; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['MetaDataProviderSearchResult'][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + get_recommended_shows_api_v1_tv_recommended_get: { + parameters: { + query?: { + metadata_provider?: 'tmdb' | 'tvdb'; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['MetaDataProviderSearchResult'][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + get_all_torrents_api_v1_torrent_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['Torrent'][]; + }; + }; + }; + }; + get_torrent_api_v1_torrent__torrent_id__get: { + parameters: { + query?: never; + header?: never; + path: { + torrent_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['Torrent']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + delete_torrent_api_v1_torrent__torrent_id__delete: { + parameters: { + query?: { + delete_files?: boolean; + }; + header?: never; + path: { + torrent_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + retry_torrent_download_api_v1_torrent__torrent_id__retry_post: { + parameters: { + query?: never; + header?: never; + path: { + torrent_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + update_torrent_status_api_v1_torrent__torrent_id__status_patch: { + parameters: { + query?: { + state?: components['schemas']['TorrentStatus'] | null; + imported?: boolean | null; + }; + header?: never; + path: { + torrent_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['Torrent']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + get_all_movies_api_v1_movies_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['PublicMovie'][]; + }; + }; + }; + }; + add_a_movie_api_v1_movies_post: { + parameters: { + query: { + movie_id: number; + metadata_provider?: 'tmdb' | 'tvdb'; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successfully created movie */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['Movie']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + get_all_importable_movies_api_v1_movies_importable_get: { + parameters: { + query?: { + metadata_provider?: 'tmdb' | 'tvdb'; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['MediaImportSuggestion'][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + import_detected_movie_api_v1_movies_importable__movie_id__post: { + parameters: { + query: { + directory: string; + }; + header?: never; + path: { + movie_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + get_available_libraries_api_v1_movies_libraries_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['LibraryItem'][]; + }; + }; + }; + }; + search_for_movie_api_v1_movies_search_get: { + parameters: { + query: { + query: string; + metadata_provider?: 'tmdb' | 'tvdb'; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['MetaDataProviderSearchResult'][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + get_popular_movies_api_v1_movies_recommended_get: { + parameters: { + query?: { + metadata_provider?: 'tmdb' | 'tvdb'; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['MetaDataProviderSearchResult'][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + get_all_movies_with_torrents_api_v1_movies_torrents_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['RichMovieTorrent'][]; + }; + }; + }; + }; + get_all_movie_requests_api_v1_movies_requests_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['RichMovieRequest'][]; + }; + }; + }; + }; + create_movie_request_api_v1_movies_requests_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['CreateMovieRequest']; + }; + }; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['MovieRequest']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + update_movie_request_api_v1_movies_requests__movie_request_id__put: { + parameters: { + query?: never; + header?: never; + path: { + movie_request_id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['MovieRequestBase']; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['MovieRequest']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + delete_movie_request_api_v1_movies_requests__movie_request_id__delete: { + parameters: { + query?: never; + header?: never; + path: { + movie_request_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + authorize_request_api_v1_movies_requests__movie_request_id__patch: { + parameters: { + query?: { + authorized_status?: boolean; + }; + header?: never; + path: { + movie_request_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + get_movie_by_id_api_v1_movies__movie_id__get: { + parameters: { + query?: never; + header?: never; + path: { + movie_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['PublicMovie']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + get_all_available_torrents_for_a_movie_api_v1_movies__movie_id__torrents_get: { + parameters: { + query?: { + search_query_override?: string | null; + }; + header?: never; + path: { + movie_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['IndexerQueryResult'][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + download_torrent_for_movie_api_v1_movies__movie_id__torrents_post: { + parameters: { + query: { + public_indexer_result_id: string; + override_file_path_suffix?: string; + }; + header?: never; + path: { + movie_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['Torrent']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + get_movie_files_by_movie_id_api_v1_movies__movie_id__files_get: { + parameters: { + query?: never; + header?: never; + path: { + movie_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['PublicMovieFile'][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + set_library_api_v1_movies__movie_id__library_post: { + parameters: { + query: { + library: string; + }; + header?: never; + path: { + movie_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + get_all_notifications_api_v1_notification_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['Notification'][]; + }; + }; + }; + }; + get_unread_notifications_api_v1_notification_unread_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['Notification'][]; + }; + }; + }; + }; + get_notification_api_v1_notification__notification_id__get: { + parameters: { + query?: never; + header?: never; + path: { + notification_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['Notification']; + }; + }; + /** @description Notification not found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + delete_notification_api_v1_notification__notification_id__delete: { + parameters: { + query?: never; + header?: never; + path: { + notification_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Notification not found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + mark_notification_as_read_api_v1_notification__notification_id__read_patch: { + parameters: { + query?: never; + header?: never; + path: { + notification_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Notification not found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + mark_notification_as_unread_api_v1_notification__notification_id__unread_patch: { + parameters: { + query?: never; + header?: never; + path: { + notification_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Notification not found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + root__get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': unknown; + }; + }; + }; + }; + dashboard_dashboard_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': unknown; + }; + }; + }; + }; + login_login_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': unknown; + }; + }; + }; + }; } diff --git a/web/src/lib/components/add-media-card.svelte b/web/src/lib/components/add-media-card.svelte index ac34be8..397bdba 100644 --- a/web/src/lib/components/add-media-card.svelte +++ b/web/src/lib/components/add-media-card.svelte @@ -82,17 +82,15 @@ {:else} -