librespot/protocol/proto/connect.proto
2024-12-16 22:57:12 +01:00

214 lines
5.3 KiB
Protocol Buffer

// Extracted from: Spotify 1.2.52.442 (windows)
syntax = "proto3";
package spotify.connectstate;
import "player.proto";
import "devices.proto";
import "media.proto";
option java_package = "com.spotify.connectstate.model";
option optimize_for = CODE_SIZE;
message ClusterUpdate {
Cluster cluster = 1;
ClusterUpdateReason update_reason = 2;
string ack_id = 3;
repeated string devices_that_changed = 4;
}
message Device {
DeviceInfo device_info = 1;
PlayerState player_state = 2;
PrivateDeviceInfo private_device_info = 3;
bytes transfer_data = 4;
}
message Cluster {
reserved 7;
int64 changed_timestamp_ms = 1;
string active_device_id = 2;
PlayerState player_state = 3;
map<string, DeviceInfo> device = 4;
bytes transfer_data = 5;
uint64 transfer_data_timestamp = 6;
bool need_full_player_state = 8;
int64 server_timestamp_ms = 9;
optional bool needs_state_updates = 10;
optional uint64 started_playing_at_timestamp = 11;
}
message PutStateRequest {
string callback_url = 1;
Device device = 2;
MemberType member_type = 3;
bool is_active = 4;
PutStateReason put_state_reason = 5;
uint32 message_id = 6;
string last_command_sent_by_device_id = 7;
uint32 last_command_message_id = 8;
uint64 started_playing_at = 9;
uint64 has_been_playing_for_ms = 11;
uint64 client_side_timestamp = 12;
bool only_write_player_state = 13;
}
message PrivateDeviceInfo {
string platform = 1;
}
message DeviceInfo {
reserved 5;
bool can_play = 1;
uint32 volume = 2;
string name = 3;
Capabilities capabilities = 4;
string device_software_version = 6;
devices.DeviceType device_type = 7;
string spirc_version = 9;
string device_id = 10;
bool is_private_session = 11;
bool is_social_connect = 12;
string client_id = 13;
string brand = 14;
string model = 15;
map<string, string> metadata_map = 16;
string product_id = 17;
string deduplication_id = 18;
uint32 selected_alias_id = 19;
map<string, devices.DeviceAlias> device_aliases = 20;
bool is_offline = 21;
string public_ip = 22;
string license = 23;
bool is_group = 25;
bool is_dynamic_device = 26;
repeated string disallow_playback_reasons = 27;
repeated string disallow_transfer_reasons = 28;
optional AudioOutputDeviceInfo audio_output_device_info = 24;
}
message AudioOutputDeviceInfo {
optional AudioOutputDeviceType audio_output_device_type = 1;
optional string device_name = 2;
}
message Capabilities {
reserved "supported_contexts";
reserved "supports_lossless_audio";
reserved 1;
reserved 4;
reserved 24;
bool can_be_player = 2;
bool restrict_to_local = 3;
bool gaia_eq_connect_id = 5;
bool supports_logout = 6;
bool is_observable = 7;
int32 volume_steps = 8;
repeated string supported_types = 9;
bool command_acks = 10;
bool supports_rename = 11;
bool hidden = 12;
bool disable_volume = 13;
bool connect_disabled = 14;
bool supports_playlist_v2 = 15;
bool is_controllable = 16;
bool supports_external_episodes = 17;
bool supports_set_backend_metadata = 18;
bool supports_transfer_command = 19;
bool supports_command_request = 20;
bool is_voice_enabled = 21;
bool needs_full_player_state = 22;
bool supports_gzip_pushes = 23;
bool supports_set_options_command = 25;
CapabilitySupportDetails supports_hifi = 26;
string connect_capabilities = 27;
bool supports_rooms = 28;
bool supports_dj = 29;
common.media.AudioQuality supported_audio_quality = 30;
}
message CapabilitySupportDetails {
bool fully_supported = 1;
bool user_eligible = 2;
bool device_supported = 3;
}
message ConnectCommandOptions {
int32 message_id = 1;
uint32 target_alias_id = 3;
}
message ConnectLoggingParams {
repeated string interaction_ids = 1;
repeated string page_instance_ids = 2;
}
message LogoutCommand {
ConnectCommandOptions command_options = 1;
}
message SetVolumeCommand {
int32 volume = 1;
ConnectCommandOptions command_options = 2;
ConnectLoggingParams logging_params = 3;
string connection_type = 4;
}
message RenameCommand {
string rename_to = 1;
ConnectCommandOptions command_options = 2;
}
message SetBackendMetadataCommand {
map<string, string> metadata = 1;
}
enum AudioOutputDeviceType {
UNKNOWN_AUDIO_OUTPUT_DEVICE_TYPE = 0;
BUILT_IN_SPEAKER = 1;
LINE_OUT = 2;
BLUETOOTH = 3;
AIRPLAY = 4;
AUTOMOTIVE = 5;
CAR_PROJECTED = 6;
}
enum PutStateReason {
UNKNOWN_PUT_STATE_REASON = 0;
SPIRC_HELLO = 1;
SPIRC_NOTIFY = 2;
NEW_DEVICE = 3;
PLAYER_STATE_CHANGED = 4;
VOLUME_CHANGED = 5;
PICKER_OPENED = 6;
BECAME_INACTIVE = 7;
ALIAS_CHANGED = 8;
NEW_CONNECTION = 9;
PULL_PLAYBACK = 10;
AUDIO_DRIVER_INFO_CHANGED = 11;
PUT_STATE_RATE_LIMITED = 12;
BACKEND_METADATA_APPLIED = 13;
}
enum MemberType {
SPIRC_V2 = 0;
SPIRC_V3 = 1;
CONNECT_STATE = 2;
CONNECT_STATE_EXTENDED = 5;
ACTIVE_DEVICE_TRACKER = 6;
PLAY_TOKEN = 7;
}
enum ClusterUpdateReason {
UNKNOWN_CLUSTER_UPDATE_REASON = 0;
DEVICES_DISAPPEARED = 1;
DEVICE_STATE_CHANGED = 2;
NEW_DEVICE_APPEARED = 3;
DEVICE_VOLUME_CHANGED = 4;
DEVICE_ALIAS_CHANGED = 5;
DEVICE_NEW_CONNECTION = 6;
}