diff --git a/media_manager/auth/config.py b/media_manager/auth/config.py index 1b028d1..4c502ba 100644 --- a/media_manager/auth/config.py +++ b/media_manager/auth/config.py @@ -7,7 +7,6 @@ class OpenIdConfig(BaseSettings): client_id: str = "" client_secret: str = "" configuration_endpoint: str = "" - name: str = "OpenID" enabled: bool = False @@ -18,7 +17,7 @@ class AuthConfig(BaseSettings): session_lifetime: int = 60 * 60 * 24 admin_emails: list[str] = [] email_password_resets: bool = False - openid_connect: OpenIdConfig = OpenIdConfig() + openid_connect: dict[str, OpenIdConfig] = {} @property def jwt_signing_key(self): diff --git a/media_manager/auth/oauth.py b/media_manager/auth/oauth.py index dd38bcf..22615a9 100644 --- a/media_manager/auth/oauth.py +++ b/media_manager/auth/oauth.py @@ -1,16 +1,20 @@ -from typing import Optional - +from media_manager.auth.users import ( + SECRET, + openid_cookie_auth_backend as backend, + get_user_manager, + openid_clients as oauth_clients, +) import jwt from fastapi import APIRouter, Depends, HTTPException, Request, status from httpx_oauth.integrations.fastapi import OAuth2AuthorizeCallback -from httpx_oauth.oauth2 import BaseOAuth2, OAuth2Token +from httpx_oauth.oauth2 import OAuth2Token from pydantic import BaseModel from fastapi_users import models -from fastapi_users.authentication import AuthenticationBackend, Strategy +from fastapi_users.authentication import Strategy from fastapi_users.exceptions import UserAlreadyExists from fastapi_users.jwt import SecretType, decode_jwt, generate_jwt -from fastapi_users.manager import BaseUserManager, UserManagerDependency +from fastapi_users.manager import BaseUserManager from fastapi_users.router.common import ErrorCode, ErrorModel STATE_TOKEN_AUDIENCE = "fastapi-users:oauth-state" @@ -27,128 +31,110 @@ def generate_state_token( return generate_jwt(data, secret, lifetime_seconds) -def get_oauth_router( - oauth_client: BaseOAuth2, - backend: AuthenticationBackend[models.UP, models.ID], - get_user_manager: UserManagerDependency[models.UP, models.ID], - state_secret: SecretType, - redirect_url: Optional[str] = None, - associate_by_email: bool = False, - is_verified_by_default: bool = False, -) -> APIRouter: - """Generate a router with the OAuth routes.""" - router = APIRouter() - callback_route_name = f"oauth:{oauth_client.name}.{backend.name}.callback" +router = APIRouter(prefix="/auth/oauth") - if redirect_url is not None: - oauth2_authorize_callback = OAuth2AuthorizeCallback( - oauth_client, - redirect_url=redirect_url, - ) - else: - oauth2_authorize_callback = OAuth2AuthorizeCallback( - oauth_client, - route_name=callback_route_name, - ) - @router.get( - "/authorize", - name=f"oauth:{oauth_client.name}.{backend.name}.authorize", - response_model=OAuth2AuthorizeResponse, +def get_authorize_callback(provider_name: str): + if provider_name not in oauth_clients: + raise HTTPException(status_code=status.HTTP_404_NOT_FOUND) + return OAuth2AuthorizeCallback( + oauth_clients[provider_name], + route_name="oauth:callback", + redirect_url=str(router.url_path_for("oauth:callback")), ) - async def authorize( - request: Request, scopes: list[str] = ["openid", "profile", "email"] - ) -> OAuth2AuthorizeResponse: - if redirect_url is not None: - authorize_redirect_url = redirect_url - else: - authorize_redirect_url = str(request.url_for(callback_route_name)) - state_data: dict[str, str] = {} - state = generate_state_token(state_data, state_secret) - authorization_url = await oauth_client.get_authorization_url( - authorize_redirect_url, - state, - scopes, - ) - return OAuth2AuthorizeResponse(authorization_url=authorization_url) +@router.get( + "/{openid_provider_name}/authorize", + response_model=OAuth2AuthorizeResponse, +) +async def authorize( + request: Request, + openid_provider_name: str, +) -> OAuth2AuthorizeResponse: + if openid_provider_name not in oauth_clients: + raise HTTPException(status_code=status.HTTP_404_NOT_FOUND) + oauth_client = oauth_clients[openid_provider_name] - @router.get( - "/callback", - name=callback_route_name, - description="The response varies based on the authentication backend used.", - responses={ - status.HTTP_400_BAD_REQUEST: { - "model": ErrorModel, - "content": { - "application/json": { - "examples": { - "INVALID_STATE_TOKEN": { - "summary": "Invalid state token.", - "value": None, - }, - ErrorCode.LOGIN_BAD_CREDENTIALS: { - "summary": "User is inactive.", - "value": {"detail": ErrorCode.LOGIN_BAD_CREDENTIALS}, - }, - } - } - }, - }, - }, + authorize_redirect_url = str(request.url_for("oauth:callback")) + state = generate_state_token({"provider_name": openid_provider_name}, SECRET) + authorization_url = await oauth_client.get_authorization_url( + authorize_redirect_url, + state, + ["openid", "profile", "email"], ) - async def callback( - request: Request, - access_token_state: tuple[OAuth2Token, str] = Depends( - oauth2_authorize_callback - ), - user_manager: BaseUserManager[models.UP, models.ID] = Depends(get_user_manager), - strategy: Strategy[models.UP, models.ID] = Depends(backend.get_strategy), - ): - token, state = access_token_state - account_id, account_email = await oauth_client.get_id_email( - token["access_token"] + + return OAuth2AuthorizeResponse(authorization_url=authorization_url) + + +@router.get( + "/callback", + name="oauth:callback", +) +async def callback( + request: Request, + user_manager: BaseUserManager[models.UP, models.ID] = Depends(get_user_manager), + strategy: Strategy[models.UP, models.ID] = Depends(backend.get_strategy), + access_token_state = None, +) -> None: + state_from_query = request.query_params.get("state") + if not state_from_query: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, detail="Missing state token" ) - if account_email is None: - raise HTTPException( - status_code=status.HTTP_400_BAD_REQUEST, - detail=ErrorCode.OAUTH_NOT_AVAILABLE_EMAIL, - ) + try: + state_data = decode_jwt(state_from_query, SECRET, [STATE_TOKEN_AUDIENCE]) + except jwt.DecodeError: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, detail="Invalid state token" + ) - try: - decode_jwt(state, state_secret, [STATE_TOKEN_AUDIENCE]) - except jwt.DecodeError: - raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST) + openid_provider_name = state_data.get("provider_name") + if not openid_provider_name or openid_provider_name not in oauth_clients: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail="Invalid provider name in state token", + ) - try: - user = await user_manager.oauth_callback( - oauth_client.name, - token["access_token"], - account_id, - account_email, - token.get("expires_at"), - token.get("refresh_token"), - request, - associate_by_email=associate_by_email, - is_verified_by_default=is_verified_by_default, - ) - except UserAlreadyExists: - raise HTTPException( - status_code=status.HTTP_400_BAD_REQUEST, - detail=ErrorCode.OAUTH_USER_ALREADY_EXISTS, - ) + authorize_callback = get_authorize_callback(openid_provider_name) + token, state = await authorize_callback(request) - if not user.is_active: - raise HTTPException( - status_code=status.HTTP_400_BAD_REQUEST, - detail=ErrorCode.LOGIN_BAD_CREDENTIALS, - ) + oauth_client = oauth_clients[openid_provider_name] - # Authenticate - response = await backend.login(strategy, user) - await user_manager.on_after_login(user, request, response) - return response + account_id, account_email = await oauth_client.get_id_email(token["access_token"]) - return router + if account_email is None: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=ErrorCode.OAUTH_NOT_AVAILABLE_EMAIL, + ) + + try: + user = await user_manager.oauth_callback( + oauth_client.name, + token["access_token"], + account_id, + account_email, + token.get("expires_at"), + token.get("refresh_token"), + request, + associate_by_email=True, + is_verified_by_default=True, + ) + except UserAlreadyExists: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=ErrorCode.OAUTH_USER_ALREADY_EXISTS, + ) + + if not user.is_active: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=ErrorCode.LOGIN_BAD_CREDENTIALS, + ) + + # Authenticate + response = await backend.login(strategy, user) + await user_manager.on_after_login(user, request, response) + return response diff --git a/media_manager/auth/router.py b/media_manager/auth/router.py index 68779c2..a7035c9 100644 --- a/media_manager/auth/router.py +++ b/media_manager/auth/router.py @@ -26,9 +26,10 @@ def get_all_users(db: DbSessionDependency) -> list[UserRead]: @auth_metadata_router.get("/auth/metadata", status_code=status.HTTP_200_OK) def get_auth_metadata() -> dict: - if oauth_config.enabled: - return { - "oauth_name": oauth_config.name, - } + if oauth_config: + provider_names = [ + name for name, config in oauth_config.items() if config.enabled + ] + return {"oauth_providers": provider_names} else: - return {"oauth_name": None} + return {"oauth_providers": []} diff --git a/media_manager/auth/users.py b/media_manager/auth/users.py index f47ceea..7d5ad05 100644 --- a/media_manager/auth/users.py +++ b/media_manager/auth/users.py @@ -28,18 +28,21 @@ config = AllEncompassingConfig().auth SECRET = config.token_secret LIFETIME = config.session_lifetime -if config.openid_connect.enabled: - openid_config = AllEncompassingConfig().auth.openid_connect - openid_client = OpenID( - base_scopes=["openid", "email", "profile"], - client_id=openid_config.client_id, - client_secret=openid_config.client_secret, - name=openid_config.name, - openid_configuration_endpoint=openid_config.configuration_endpoint, - ) - openid_client.base_scopes = ["openid", "email", "profile"] -else: - openid_client = None +openid_clients: dict[str, OpenID] = {} +if config.openid_connect: + log.info(f"got openid-config: {config.openid_connect}") + for name, openid_config in config.openid_connect.items(): + if openid_config.enabled: + log.info(f"Discovered OIDC provider: {name}") + client = OpenID( + base_scopes=["openid", "email", "profile"], + client_id=openid_config.client_id, + client_secret=openid_config.client_secret, + name=name, + openid_configuration_endpoint=openid_config.configuration_endpoint, + ) + client.base_scopes = ["openid", "email", "profile"] + openid_clients[name] = client class UserManager(UUIDIDMixin, BaseUserManager[User, uuid.UUID]): diff --git a/media_manager/config.py b/media_manager/config.py index ed066cb..0344f1c 100644 --- a/media_manager/config.py +++ b/media_manager/config.py @@ -48,7 +48,10 @@ class BasicConfig(BaseSettings): class AllEncompassingConfig(BaseSettings): model_config = SettingsConfigDict( - toml_file=config_path, case_sensitive=False, env_nested_delimiter="__", env_prefix="MEDIAMANAGER_" + toml_file=config_path, + case_sensitive=False, + env_nested_delimiter="__", + env_prefix="MEDIAMANAGER_", ) """ This class is used to load all configurations from the environment variables. diff --git a/media_manager/main.py b/media_manager/main.py index ea05a09..3d5df1c 100644 --- a/media_manager/main.py +++ b/media_manager/main.py @@ -66,12 +66,11 @@ from media_manager.movies.service import ( # noqa: E402 from media_manager.notification.router import router as notification_router # noqa: E402 import uvicorn # noqa: E402 from fastapi.staticfiles import StaticFiles # noqa: E402 -from media_manager.auth.users import openid_client # noqa: E402 from media_manager.auth.users import SECRET as AUTH_USERS_SECRET # noqa: E402 from media_manager.auth.router import users_router as custom_users_router # noqa: E402 from media_manager.auth.router import auth_metadata_router # noqa: E402 from media_manager.auth.schemas import UserCreate, UserRead, UserUpdate # noqa: E402 -from media_manager.auth.oauth import get_oauth_router # noqa: E402 +from media_manager.auth.oauth import router as openid_router # noqa: E402 from media_manager.auth.users import ( # noqa: E402 bearer_auth_backend, @@ -266,19 +265,7 @@ api_app.include_router( api_app.include_router(auth_metadata_router, tags=["openid"]) -if openid_client is not None: - api_app.include_router( - get_oauth_router( - oauth_client=openid_client, - backend=openid_cookie_auth_backend, - get_user_manager=fastapi_users.get_user_manager, - state_secret=AUTH_USERS_SECRET, - associate_by_email=True, - is_verified_by_default=True, - ), - prefix=f"/auth/cookie/{openid_client.name}", - tags=["openid"], - ) +api_app.include_router(openid_router, tags=["openid"]) api_app.include_router(tv_router.router, prefix="/tv", tags=["tv"]) api_app.include_router(torrent_router.router, prefix="/torrent", tags=["torrent"]) diff --git a/web/src/lib/api/api.d.ts b/web/src/lib/api/api.d.ts index 30175e3..4ab7acc 100644 --- a/web/src/lib/api/api.d.ts +++ b/web/src/lib/api/api.d.ts @@ -4,3784 +4,3769 @@ */ 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/cookie/OpenID/authorize': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** Oauth:Openid.Cookie.Authorize */ - get: operations['oauth_OpenID_cookie_authorize_api_v1_auth_cookie_OpenID_authorize_get']; - put?: never; - post?: never; - delete?: never; - options?: never; - head?: never; - patch?: never; - trace?: never; - }; - '/api/v1/auth/cookie/OpenID/callback': { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - /** - * Oauth:Openid.Cookie.Callback - * @description The response varies based on the authentication backend used. - */ - get: operations['oauth_OpenID_cookie_callback_api_v1_auth_cookie_OpenID_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/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/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/{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?: 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/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/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/{openid_provider_name}/authorize": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Authorize */ + get: operations["authorize_api_v1_auth_oauth__openid_provider_name__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:Callback */ + get: operations["oauth_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/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/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/{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?: 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/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/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: { - /** 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'][]; - }; - /** LibraryItem */ - LibraryItem: { - /** Name */ - name: string; - /** Path */ - path: string; - }; - /** 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; - }; - /** 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; - }; - /** PublicIndexerQueryResult */ - PublicIndexerQueryResult: { - /** Title */ - title: string; - quality: components['schemas']['Quality']; - /** - * Id - * Format: uuid - */ - id: string; - /** Seeders */ - seeders: number; - /** Flags */ - flags: string[]; - /** Season */ - season: number[]; - /** Size */ - size: number; - /** Usenet */ - usenet: boolean; - /** Age */ - age: number; - /** Score */ - score: number; - }; - /** 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: { + /** 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"][]; + }; + /** LibraryItem */ + LibraryItem: { + /** Name */ + name: string; + /** Path */ + path: string; + }; + /** 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; + }; + /** 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; + }; + /** PublicIndexerQueryResult */ + PublicIndexerQueryResult: { + /** Title */ + title: string; + quality: components["schemas"]["Quality"]; + /** + * Id + * Format: uuid + */ + id: string; + /** Seeders */ + seeders: number; + /** Flags */ + flags: string[]; + /** Season */ + season: number[]; + /** Size */ + size: number; + /** Usenet */ + usenet: boolean; + /** Age */ + age: number; + /** Score */ + score: number; + }; + /** 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': { - [key: string]: unknown; - }; - }; - }; - }; - }; - oauth_OpenID_cookie_authorize_api_v1_auth_cookie_OpenID_authorize_get: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: { - content: { - 'application/json': string[]; - }; - }; - 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_OpenID_cookie_callback_api_v1_auth_cookie_OpenID_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 Show already exists */ - 409: { - headers: { - [name: string]: unknown; - }; - content: { - 'application/json': string; - }; - }; - /** @description Validation Error */ - 422: { - headers: { - [name: string]: unknown; - }; - content: { - 'application/json': components['schemas']['HTTPValidationError']; - }; - }; - }; - }; - 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_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: 'Live Action' | 'Default'; - }; - 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']['PublicIndexerQueryResult'][]; - }; - }; - /** @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_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']; - }; - }; - }; - }; - 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_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 Movie already exists */ - 409: { - headers: { - [name: string]: unknown; - }; - content: { - 'application/json': string; - }; - }; - /** @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']['PublicIndexerQueryResult'][]; - }; - }; - /** @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: 'Documentary' | 'Default'; - }; - 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": { + [key: string]: unknown; + }; + }; + }; + }; + }; + authorize_api_v1_auth_oauth__openid_provider_name__authorize_get: { + parameters: { + query?: never; + header?: never; + path: { + openid_provider_name: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": string[]; + }; + }; + 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_callback_api_v1_auth_oauth_callback_get: { + parameters: { + query?: { + access_token_state?: unknown; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": unknown; + }; + }; + /** @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 Show already exists */ + 409: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + 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_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: "Live Action" | "Default"; + }; + 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"]["PublicIndexerQueryResult"][]; + }; + }; + /** @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_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"]; + }; + }; + }; + }; + 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_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 Movie already exists */ + 409: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string; + }; + }; + /** @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"]["PublicIndexerQueryResult"][]; + }; + }; + /** @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: "Documentary" | "Default"; + }; + 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/login-card.svelte b/web/src/lib/components/login-card.svelte index 87bf6e6..4c8600f 100644 --- a/web/src/lib/components/login-card.svelte +++ b/web/src/lib/components/login-card.svelte @@ -62,7 +62,7 @@ } async function handleOauth() { - const { response, data } = await client.GET('/api/v1/auth/cookie/OpenID/authorize', { + const { response, data } = await client.GET(`/api/v1/auth/cookie/${oauthProvider.oauth_name}/authorize`, { params: { query: { scopes: 'email'