88from typing import TYPE_CHECKING
99
1010from music_assistant_client import MusicAssistantClient
11- from music_assistant_client .exceptions import CannotConnect , InvalidServerVersion
11+ from music_assistant_client .exceptions import (
12+ CannotConnect ,
13+ InvalidServerVersion ,
14+ MusicAssistantClientException ,
15+ )
1216from music_assistant_models .config_entries import PlayerConfig
1317from music_assistant_models .enums import EventType
14- from music_assistant_models .errors import ActionUnavailable , MusicAssistantError
18+ from music_assistant_models .errors import (
19+ ActionUnavailable ,
20+ AuthenticationFailed ,
21+ InvalidToken ,
22+ MusicAssistantError ,
23+ )
1524from music_assistant_models .player import Player
1625
1726from homeassistant .config_entries import ConfigEntry , ConfigEntryState
1827from homeassistant .const import CONF_URL , EVENT_HOMEASSISTANT_STOP , Platform
1928from homeassistant .core import Event , HomeAssistant
20- from homeassistant .exceptions import ConfigEntryNotReady
29+ from homeassistant .exceptions import ConfigEntryAuthFailed , ConfigEntryNotReady
2130from homeassistant .helpers import config_validation as cv , device_registry as dr
2231from homeassistant .helpers .aiohttp_client import async_get_clientsession
2332from homeassistant .helpers .issue_registry import (
2635 async_delete_issue ,
2736)
2837
29- from .const import ATTR_CONF_EXPOSE_PLAYER_TO_HA , DOMAIN , LOGGER
38+ from .const import ATTR_CONF_EXPOSE_PLAYER_TO_HA , CONF_TOKEN , DOMAIN , LOGGER
3039from .helpers import get_music_assistant_client
3140from .services import register_actions
3241
@@ -59,6 +68,7 @@ class MusicAssistantEntryData:
5968async def async_setup (hass : HomeAssistant , config : ConfigType ) -> bool :
6069 """Set up the Music Assistant component."""
6170 register_actions (hass )
71+
6272 return True
6373
6474
@@ -68,7 +78,9 @@ async def async_setup_entry( # noqa: C901
6878 """Set up Music Assistant from a config entry."""
6979 http_session = async_get_clientsession (hass , verify_ssl = False )
7080 mass_url = entry .data [CONF_URL ]
71- mass = MusicAssistantClient (mass_url , http_session )
81+ # Get token from config entry (for schema >= AUTH_SCHEMA_VERSION)
82+ token = entry .data .get (CONF_TOKEN )
83+ mass = MusicAssistantClient (mass_url , http_session , token = token )
7284
7385 try :
7486 async with asyncio .timeout (CONNECT_TIMEOUT ):
@@ -87,6 +99,14 @@ async def async_setup_entry( # noqa: C901
8799 translation_key = "invalid_server_version" ,
88100 )
89101 raise ConfigEntryNotReady (f"Invalid server version: { err } " ) from err
102+ except (AuthenticationFailed , InvalidToken ) as err :
103+ raise ConfigEntryAuthFailed (
104+ f"Authentication failed for { mass_url } : { err } "
105+ ) from err
106+ except MusicAssistantClientException as err :
107+ raise ConfigEntryNotReady (
108+ f"Failed to connect to music assistant server { mass_url } : { err } "
109+ ) from err
90110 except MusicAssistantError as err :
91111 LOGGER .exception ("Failed to connect to music assistant server" , exc_info = err )
92112 raise ConfigEntryNotReady (
0 commit comments