/
/
1"""Constants for the Yandex Ynison plugin."""
2
3from __future__ import annotations
4
5from typing import Final
6
7from ya_passport_auth.ma import BORROW_SOURCE_OWN
8
9# Ynison WebSocket endpoints
10YNISON_REDIRECT_URL: Final[str] = (
11 "wss://ynison.music.yandex.ru/redirector.YnisonRedirectService/GetRedirectToYnison"
12)
13YNISON_STATE_PATH: Final[str] = "/ynison_state.YnisonStateService/PutYnisonState"
14
15# Origin header required by Ynison
16YNISON_ORIGIN: Final[str] = "https://music.yandex.ru"
17
18# Configuration keys
19CONF_TOKEN: Final[str] = "token"
20CONF_X_TOKEN: Final[str] = "x_token"
21CONF_ACCOUNT_LOGIN: Final[str] = "account_login"
22CONF_REMEMBER_SESSION: Final[str] = "remember_session"
23CONF_YM_INSTANCE: Final[str] = "ym_instance"
24CONF_MASS_PLAYER_ID: Final[str] = "mass_player_id"
25CONF_PUBLISH_NAME: Final[str] = "publish_name"
26CONF_ALLOW_PLAYER_SWITCH: Final[str] = "allow_player_switch"
27CONF_DEVICE_ID: Final[str] = "device_id"
28CONF_OUTPUT_SAMPLE_RATE: Final[str] = "output_sample_rate"
29CONF_OUTPUT_BIT_DEPTH: Final[str] = "output_bit_depth"
30
31# Action keys (own-mode QR auth flow)
32CONF_ACTION_AUTH_QR: Final[str] = "auth_qr"
33CONF_ACTION_CLEAR_AUTH: Final[str] = "clear_auth"
34
35# Special value for "auto" config options
36OUTPUT_AUTO: Final[str] = "auto"
37
38# Sentinel value for CONF_YM_INSTANCE â use own manually entered token
39# Sentinel for "use own credentials" â canonical value lives in the shared
40# auth layer (same literal the plugin has always persisted).
41YM_INSTANCE_OWN: Final[str] = BORROW_SOURCE_OWN
42
43# Player selection
44PLAYER_ID_AUTO: Final[str] = "__auto__"
45
46# yandex_music provider config keys (read via provider.config.get_value)
47YANDEX_MUSIC_CONF_QUALITY: Final[str] = "quality"
48YANDEX_MUSIC_CONF_TOKEN: Final[str] = "token"
49YANDEX_MUSIC_CONF_X_TOKEN: Final[str] = "x_token"
50YANDEX_MUSIC_LOSSLESS_QUALITIES: Final[frozenset[str]] = frozenset({"superb", "lossless"})
51
52# Defaults
53DEFAULT_DISPLAY_NAME: Final[str] = "Music Assistant"
54DEFAULT_APP_NAME: Final[str] = "Music Assistant"
55DEFAULT_APP_VERSION: Final[str] = "1.0.0"
56
57# Device types (from Ynison protobuf DeviceType enum)
58DEVICE_TYPE_WEB: Final[str] = "WEB"
59
60# Reconnect settings â indexed by attempt number; attempts past the tuple
61# saturate at the last entry (so reconnect continues forever at 60 s intervals).
62RECONNECT_DELAYS: Final[tuple[float, ...]] = (5.0, 10.0, 30.0, 60.0)
63
64# WebSocket timeouts
65WS_CONNECT_TIMEOUT: Final[float] = 15.0
66WS_HEARTBEAT: Final[float] = 30.0
67
68# Ynison error codes that require immediate reconnection
69YNISON_ERROR_REBALANCED: Final[str] = "300100001"
70YNISON_ERROR_NOT_SERVED: Final[str] = "300100002"
71YNISON_RECONNECT_ERROR_CODES: Final[frozenset[str]] = frozenset(
72 {
73 YNISON_ERROR_REBALANCED,
74 YNISON_ERROR_NOT_SERVED,
75 }
76)
77