first commit
This commit is contained in:
168
proto/authentication.proto
Normal file
168
proto/authentication.proto
Normal file
@@ -0,0 +1,168 @@
|
||||
syntax = "proto2";
|
||||
|
||||
package spotify;
|
||||
option java_package = "com.spotify";
|
||||
|
||||
message ClientResponseEncrypted {
|
||||
required LoginCredentials login_credentials = 0xa;
|
||||
optional AccountCreation account_creation = 0x14;
|
||||
optional FingerprintResponseUnion fingerprint_response = 0x1e;
|
||||
optional PeerTicketUnion peer_ticket = 0x28;
|
||||
required SystemInfo system_info = 0x32;
|
||||
optional string platform_model = 0x3c;
|
||||
optional string version_string = 0x46;
|
||||
optional LibspotifyAppKey appkey = 0x50;
|
||||
optional ClientInfo client_info = 0x5a;
|
||||
}
|
||||
|
||||
message LoginCredentials {
|
||||
optional string username = 0xa;
|
||||
required AuthenticationType typ = 0x14;
|
||||
optional bytes auth_data = 0x1e;
|
||||
}
|
||||
|
||||
enum AuthenticationType {
|
||||
AUTHENTICATION_USER_PASS = 0x0;
|
||||
AUTHENTICATION_STORED_SPOTIFY_CREDENTIALS = 0x1;
|
||||
AUTHENTICATION_STORED_FACEBOOK_CREDENTIALS = 0x2;
|
||||
AUTHENTICATION_SPOTIFY_TOKEN = 0x3;
|
||||
AUTHENTICATION_FACEBOOK_TOKEN = 0x4;
|
||||
}
|
||||
|
||||
enum AccountCreation {
|
||||
ACCOUNT_CREATION_ALWAYS_PROMPT = 0x1;
|
||||
ACCOUNT_CREATION_ALWAYS_CREATE = 0x3;
|
||||
}
|
||||
|
||||
message FingerprintResponseUnion {
|
||||
optional FingerprintGrainResponse grain = 0xa;
|
||||
optional FingerprintHmacRipemdResponse hmac_ripemd = 0x14;
|
||||
}
|
||||
|
||||
message FingerprintGrainResponse {
|
||||
required bytes encrypted_key = 0xa;
|
||||
}
|
||||
|
||||
message FingerprintHmacRipemdResponse {
|
||||
required bytes hmac = 0xa;
|
||||
}
|
||||
|
||||
message PeerTicketUnion {
|
||||
optional PeerTicketPublicKey public_key = 0xa;
|
||||
optional PeerTicketOld old_ticket = 0x14;
|
||||
}
|
||||
|
||||
message PeerTicketPublicKey {
|
||||
required bytes public_key = 0xa;
|
||||
}
|
||||
|
||||
message PeerTicketOld {
|
||||
required bytes peer_ticket = 0xa;
|
||||
required bytes peer_ticket_signature = 0x14;
|
||||
}
|
||||
|
||||
message SystemInfo {
|
||||
required CpuFamily cpu_family = 0xa;
|
||||
optional uint32 cpu_subtype = 0x14;
|
||||
optional uint32 cpu_ext = 0x1e;
|
||||
optional Brand brand = 0x28;
|
||||
optional uint32 brand_flags = 0x32;
|
||||
required Os os = 0x3c;
|
||||
optional uint32 os_version = 0x46;
|
||||
optional uint32 os_ext = 0x50;
|
||||
optional string system_information_string = 0x5a;
|
||||
optional string device_id = 0x64;
|
||||
}
|
||||
|
||||
enum CpuFamily {
|
||||
CPU_UNKNOWN = 0x0;
|
||||
CPU_X86 = 0x1;
|
||||
CPU_X86_64 = 0x2;
|
||||
CPU_PPC = 0x3;
|
||||
CPU_PPC_64 = 0x4;
|
||||
CPU_ARM = 0x5;
|
||||
CPU_IA64 = 0x6;
|
||||
CPU_SH = 0x7;
|
||||
CPU_MIPS = 0x8;
|
||||
CPU_BLACKFIN = 0x9;
|
||||
}
|
||||
|
||||
enum Brand {
|
||||
BRAND_UNBRANDED = 0x0;
|
||||
BRAND_INQ = 0x1;
|
||||
BRAND_HTC = 0x2;
|
||||
BRAND_NOKIA = 0x3;
|
||||
}
|
||||
|
||||
enum Os {
|
||||
OS_UNKNOWN = 0x0;
|
||||
OS_WINDOWS = 0x1;
|
||||
OS_OSX = 0x2;
|
||||
OS_IPHONE = 0x3;
|
||||
OS_S60 = 0x4;
|
||||
OS_LINUX = 0x5;
|
||||
OS_WINDOWS_CE = 0x6;
|
||||
OS_ANDROID = 0x7;
|
||||
OS_PALM = 0x8;
|
||||
OS_FREEBSD = 0x9;
|
||||
OS_BLACKBERRY = 0xa;
|
||||
OS_SONOS = 0xb;
|
||||
OS_LOGITECH = 0xc;
|
||||
OS_WP7 = 0xd;
|
||||
OS_ONKYO = 0xe;
|
||||
OS_PHILIPS = 0xf;
|
||||
OS_WD = 0x10;
|
||||
OS_VOLVO = 0x11;
|
||||
OS_TIVO = 0x12;
|
||||
OS_AWOX = 0x13;
|
||||
OS_MEEGO = 0x14;
|
||||
OS_QNXNTO = 0x15;
|
||||
OS_BCO = 0x16;
|
||||
}
|
||||
|
||||
message LibspotifyAppKey {
|
||||
required uint32 version = 0x1;
|
||||
required bytes devkey = 0x2;
|
||||
required bytes signature = 0x3;
|
||||
required string useragent = 0x4;
|
||||
required bytes callback_hash = 0x5;
|
||||
}
|
||||
|
||||
message ClientInfo {
|
||||
optional bool limited = 0x1;
|
||||
optional ClientInfoFacebook fb = 0x2;
|
||||
optional string language = 0x3;
|
||||
}
|
||||
|
||||
message ClientInfoFacebook {
|
||||
optional string machine_id = 0x1;
|
||||
}
|
||||
|
||||
message APWelcome {
|
||||
required string canonical_username = 0xa;
|
||||
required AccountType account_type_logged_in = 0x14;
|
||||
required AccountType credentials_type_logged_in = 0x19;
|
||||
required AuthenticationType reusable_auth_credentials_type = 0x1e;
|
||||
required bytes reusable_auth_credentials = 0x28;
|
||||
optional bytes lfs_secret = 0x32;
|
||||
optional AccountInfo account_info = 0x3c;
|
||||
optional AccountInfoFacebook fb = 0x46;
|
||||
}
|
||||
|
||||
enum AccountType {
|
||||
Spotify = 0x0;
|
||||
Facebook = 0x1;
|
||||
}
|
||||
|
||||
message AccountInfo {
|
||||
optional AccountInfoSpotify spotify = 0x1;
|
||||
optional AccountInfoFacebook facebook = 0x2;
|
||||
}
|
||||
|
||||
message AccountInfoSpotify {
|
||||
}
|
||||
|
||||
message AccountInfoFacebook {
|
||||
optional string access_token = 0x1;
|
||||
optional string machine_id = 0x2;
|
||||
}
|
||||
14
proto/canvaz-meta.proto
Normal file
14
proto/canvaz-meta.proto
Normal file
@@ -0,0 +1,14 @@
|
||||
syntax = "proto3";
|
||||
|
||||
package com.spotify.canvaz;
|
||||
|
||||
option optimize_for = CODE_SIZE;
|
||||
option java_package = "com.spotify.canvaz";
|
||||
|
||||
enum Type {
|
||||
IMAGE = 0;
|
||||
VIDEO = 1;
|
||||
VIDEO_LOOPING = 2;
|
||||
VIDEO_LOOPING_RANDOM = 3;
|
||||
GIF = 4;
|
||||
}
|
||||
40
proto/canvaz.proto
Normal file
40
proto/canvaz.proto
Normal file
@@ -0,0 +1,40 @@
|
||||
syntax = "proto3";
|
||||
|
||||
package com.spotify.canvazcache;
|
||||
|
||||
import "canvaz-meta.proto";
|
||||
|
||||
option optimize_for = CODE_SIZE;
|
||||
option java_package = "com.spotify.canvaz";
|
||||
|
||||
message Artist {
|
||||
string uri = 1;
|
||||
string name = 2;
|
||||
string avatar = 3;
|
||||
}
|
||||
|
||||
message EntityCanvazResponse {
|
||||
repeated Canvaz canvases = 1;
|
||||
message Canvaz {
|
||||
string id = 1;
|
||||
string url = 2;
|
||||
string file_id = 3;
|
||||
canvaz.Type type = 4;
|
||||
string entity_uri = 5;
|
||||
Artist artist = 6;
|
||||
bool explicit = 7;
|
||||
string uploaded_by = 8;
|
||||
string etag = 9;
|
||||
string canvas_uri = 11;
|
||||
}
|
||||
|
||||
int64 ttl_in_seconds = 2;
|
||||
}
|
||||
|
||||
message EntityCanvazRequest {
|
||||
repeated Entity entities = 1;
|
||||
message Entity {
|
||||
string entity_uri = 1;
|
||||
string etag = 2;
|
||||
}
|
||||
}
|
||||
125
proto/client_token.proto
Normal file
125
proto/client_token.proto
Normal file
@@ -0,0 +1,125 @@
|
||||
syntax = "proto3";
|
||||
|
||||
package spotify.clienttoken.http.v0;
|
||||
|
||||
import "connectivity.proto";
|
||||
|
||||
option optimize_for = CODE_SIZE;
|
||||
option java_package = "com.spotify.clienttoken.http.v0";
|
||||
|
||||
message ClientTokenRequest {
|
||||
ClientTokenRequestType request_type = 1;
|
||||
|
||||
oneof request {
|
||||
ClientDataRequest client_data = 2;
|
||||
ChallengeAnswersRequest challenge_answers = 3;
|
||||
}
|
||||
}
|
||||
|
||||
message ClientDataRequest {
|
||||
string client_version = 1;
|
||||
string client_id = 2;
|
||||
|
||||
oneof data {
|
||||
data.v0.ConnectivitySdkData connectivity_sdk_data = 3;
|
||||
}
|
||||
}
|
||||
|
||||
message ChallengeAnswersRequest {
|
||||
string state = 1;
|
||||
repeated ChallengeAnswer answers = 2;
|
||||
}
|
||||
|
||||
message ClientTokenResponse {
|
||||
ClientTokenResponseType response_type = 1;
|
||||
|
||||
oneof response {
|
||||
GrantedTokenResponse granted_token = 2;
|
||||
ChallengesResponse challenges = 3;
|
||||
}
|
||||
}
|
||||
|
||||
message TokenDomain {
|
||||
string domain = 1;
|
||||
}
|
||||
|
||||
message GrantedTokenResponse {
|
||||
string token = 1;
|
||||
int32 expires_after_seconds = 2;
|
||||
int32 refresh_after_seconds = 3;
|
||||
repeated TokenDomain domains = 4;
|
||||
}
|
||||
|
||||
message ChallengesResponse {
|
||||
string state = 1;
|
||||
repeated Challenge challenges = 2;
|
||||
}
|
||||
|
||||
message ClientSecretParameters {
|
||||
string salt = 1;
|
||||
}
|
||||
|
||||
message EvaluateJSParameters {
|
||||
string code = 1;
|
||||
repeated string libraries = 2;
|
||||
}
|
||||
|
||||
message HashCashParameters {
|
||||
int32 length = 1;
|
||||
string prefix = 2;
|
||||
}
|
||||
|
||||
message Challenge {
|
||||
ChallengeType type = 1;
|
||||
|
||||
oneof parameters {
|
||||
ClientSecretParameters client_secret_parameters = 2;
|
||||
EvaluateJSParameters evaluate_js_parameters = 3;
|
||||
HashCashParameters evaluate_hashcash_parameters = 4;
|
||||
}
|
||||
}
|
||||
|
||||
message ClientSecretHMACAnswer {
|
||||
string hmac = 1;
|
||||
}
|
||||
|
||||
message EvaluateJSAnswer {
|
||||
string result = 1;
|
||||
}
|
||||
|
||||
message HashCashAnswer {
|
||||
string suffix = 1;
|
||||
}
|
||||
|
||||
message ChallengeAnswer {
|
||||
ChallengeType ChallengeType = 1;
|
||||
|
||||
oneof answer {
|
||||
ClientSecretHMACAnswer client_secret = 2;
|
||||
EvaluateJSAnswer evaluate_js = 3;
|
||||
HashCashAnswer hash_cash = 4;
|
||||
}
|
||||
}
|
||||
|
||||
message ClientTokenBadRequest {
|
||||
string message = 1;
|
||||
}
|
||||
|
||||
enum ClientTokenRequestType {
|
||||
REQUEST_UNKNOWN = 0;
|
||||
REQUEST_CLIENT_DATA_REQUEST = 1;
|
||||
REQUEST_CHALLENGE_ANSWERS_REQUEST = 2;
|
||||
}
|
||||
|
||||
enum ClientTokenResponseType {
|
||||
RESPONSE_UNKNOWN = 0;
|
||||
RESPONSE_GRANTED_TOKEN_RESPONSE = 1;
|
||||
RESPONSE_CHALLENGES_RESPONSE = 2;
|
||||
}
|
||||
|
||||
enum ChallengeType {
|
||||
CHALLENGE_UNKNOWN = 0;
|
||||
CHALLENGE_CLIENT_SECRET_HMAC = 1;
|
||||
CHALLENGE_EVALUATE_JS = 2;
|
||||
CHALLENGE_HASH_CASH = 3;
|
||||
}
|
||||
173
proto/connect.proto
Normal file
173
proto/connect.proto
Normal file
@@ -0,0 +1,173 @@
|
||||
syntax = "proto3";
|
||||
|
||||
package connectstate;
|
||||
import "player.proto";
|
||||
|
||||
|
||||
option optimize_for = CODE_SIZE;
|
||||
option java_package = "com.spotify.connectstate";
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
message Cluster {
|
||||
int64 timestamp = 1;
|
||||
string active_device_id = 2;
|
||||
PlayerState player_state = 3;
|
||||
map<string, DeviceInfo> device = 4;
|
||||
bytes transfer_data = 5;
|
||||
}
|
||||
|
||||
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 SubscribeRequest {
|
||||
string callback_url = 1;
|
||||
}
|
||||
|
||||
message DeviceInfo {
|
||||
bool can_play = 1;
|
||||
uint32 volume = 2;
|
||||
string name = 3;
|
||||
Capabilities capabilities = 4;
|
||||
string device_software_version = 6;
|
||||
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;
|
||||
}
|
||||
|
||||
message Capabilities {
|
||||
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;
|
||||
// reserved 1, "supported_contexts";
|
||||
}
|
||||
|
||||
message ConnectCommandOptions {
|
||||
int32 message_id = 1;
|
||||
}
|
||||
|
||||
message LogoutCommand {
|
||||
ConnectCommandOptions command_options = 1;
|
||||
}
|
||||
|
||||
message SetVolumeCommand {
|
||||
int32 volume = 1;
|
||||
ConnectCommandOptions command_options = 2;
|
||||
}
|
||||
|
||||
message RenameCommand {
|
||||
string rename_to = 1;
|
||||
ConnectCommandOptions command_options = 2;
|
||||
}
|
||||
|
||||
message SetBackendMetadataCommand {
|
||||
map<string, string> metadata = 1;
|
||||
}
|
||||
|
||||
enum SendCommandResult {
|
||||
UNKNOWN_SEND_COMMAND_RESULT = 0;
|
||||
SUCCESS = 1;
|
||||
DEVICE_NOT_FOUND = 2;
|
||||
CONTEXT_PLAYER_ERROR = 3;
|
||||
DEVICE_DISAPPEARED = 4;
|
||||
UPSTREAM_ERROR = 5;
|
||||
DEVICE_DOES_NOT_SUPPORT_COMMAND = 6;
|
||||
RATE_LIMITED = 7;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
enum MemberType {
|
||||
SPIRC_V2 = 0;
|
||||
SPIRC_V3 = 1;
|
||||
CONNECT_STATE = 2;
|
||||
}
|
||||
|
||||
enum ClusterUpdateReason {
|
||||
UNKNOWN_CLUSTER_UPDATE_REASON = 0;
|
||||
DEVICES_DISAPPEARED = 1;
|
||||
DEVICE_STATE_CHANGED = 2;
|
||||
NEW_DEVICE_APPEARED = 3;
|
||||
}
|
||||
|
||||
enum DeviceType {
|
||||
UNKNOWN = 0;
|
||||
COMPUTER = 1;
|
||||
TABLET = 2;
|
||||
SMARTPHONE = 3;
|
||||
SPEAKER = 4;
|
||||
TV = 5;
|
||||
AVR = 6;
|
||||
STB = 7;
|
||||
AUDIO_DONGLE = 8;
|
||||
GAME_CONSOLE = 9;
|
||||
CAST_VIDEO = 10;
|
||||
CAST_AUDIO = 11;
|
||||
AUTOMOBILE = 12;
|
||||
SMARTWATCH = 13;
|
||||
CHROMEBOOK = 14;
|
||||
UNKNOWN_SPOTIFY = 100;
|
||||
CAR_THING = 101;
|
||||
OBSERVER = 102;
|
||||
HOME_THING = 103;
|
||||
}
|
||||
51
proto/connectivity.proto
Normal file
51
proto/connectivity.proto
Normal file
@@ -0,0 +1,51 @@
|
||||
syntax = "proto3";
|
||||
|
||||
package spotify.clienttoken.data.v0;
|
||||
|
||||
option optimize_for = CODE_SIZE;
|
||||
option java_package = "com.spotify.clienttoken.data.v0";
|
||||
|
||||
message ConnectivitySdkData {
|
||||
PlatformSpecificData platform_specific_data = 1;
|
||||
string device_id = 2;
|
||||
}
|
||||
|
||||
message PlatformSpecificData {
|
||||
oneof data {
|
||||
NativeAndroidData android = 1;
|
||||
NativeIOSData ios = 2;
|
||||
NativeWindowsData windows = 4;
|
||||
}
|
||||
}
|
||||
|
||||
message NativeAndroidData {
|
||||
int32 major_sdk_version = 1;
|
||||
int32 minor_sdk_version = 2;
|
||||
int32 patch_sdk_version = 3;
|
||||
uint32 api_version = 4;
|
||||
Screen screen_dimensions = 5;
|
||||
}
|
||||
|
||||
message NativeIOSData {
|
||||
int32 user_interface_idiom = 1;
|
||||
bool target_iphone_simulator = 2;
|
||||
string hw_machine = 3;
|
||||
string system_version = 4;
|
||||
string simulator_model_identifier = 5;
|
||||
}
|
||||
|
||||
message NativeWindowsData {
|
||||
int32 something1 = 1;
|
||||
int32 something3 = 3;
|
||||
int32 something4 = 4;
|
||||
int32 something6 = 6;
|
||||
int32 something7 = 7;
|
||||
int32 something8 = 8;
|
||||
bool something10 = 10;
|
||||
}
|
||||
|
||||
message Screen {
|
||||
int32 width = 1;
|
||||
int32 height = 2;
|
||||
int32 density = 3;
|
||||
}
|
||||
18
proto/context.proto
Normal file
18
proto/context.proto
Normal file
@@ -0,0 +1,18 @@
|
||||
syntax = "proto2";
|
||||
|
||||
package spotify.player.proto;
|
||||
|
||||
import "context_page.proto";
|
||||
import "restrictions.proto";
|
||||
|
||||
option optimize_for = CODE_SIZE;
|
||||
option java_package = "com.spotify.context";
|
||||
|
||||
message Context {
|
||||
optional string uri = 1;
|
||||
optional string url = 2;
|
||||
map<string, string> metadata = 3;
|
||||
optional Restrictions restrictions = 4;
|
||||
repeated ContextPage pages = 5;
|
||||
optional bool loading = 6;
|
||||
}
|
||||
16
proto/context_page.proto
Normal file
16
proto/context_page.proto
Normal file
@@ -0,0 +1,16 @@
|
||||
syntax = "proto2";
|
||||
|
||||
package spotify.player.proto;
|
||||
|
||||
import "context_track.proto";
|
||||
|
||||
option optimize_for = CODE_SIZE;
|
||||
option java_package = "com.spotify.context";
|
||||
|
||||
message ContextPage {
|
||||
optional string page_url = 1;
|
||||
optional string next_page_url = 2;
|
||||
map<string, string> metadata = 3;
|
||||
repeated ContextTrack tracks = 4;
|
||||
optional bool loading = 5;
|
||||
}
|
||||
18
proto/context_player_options.proto
Normal file
18
proto/context_player_options.proto
Normal file
@@ -0,0 +1,18 @@
|
||||
syntax = "proto2";
|
||||
|
||||
package spotify.player.proto;
|
||||
|
||||
option optimize_for = CODE_SIZE;
|
||||
option java_package = "com.spotify.context";
|
||||
|
||||
message ContextPlayerOptions {
|
||||
optional bool shuffling_context = 1;
|
||||
optional bool repeating_context = 2;
|
||||
optional bool repeating_track = 3;
|
||||
}
|
||||
|
||||
message ContextPlayerOptionOverrides {
|
||||
optional bool shuffling_context = 1;
|
||||
optional bool repeating_context = 2;
|
||||
optional bool repeating_track = 3;
|
||||
}
|
||||
13
proto/context_track.proto
Normal file
13
proto/context_track.proto
Normal file
@@ -0,0 +1,13 @@
|
||||
syntax = "proto2";
|
||||
|
||||
package spotify.player.proto;
|
||||
|
||||
option optimize_for = CODE_SIZE;
|
||||
option java_package = "com.spotify.context";
|
||||
|
||||
message ContextTrack {
|
||||
optional string uri = 1;
|
||||
optional string uid = 2;
|
||||
optional bytes gid = 3;
|
||||
map<string, string> metadata = 4;
|
||||
}
|
||||
15
proto/explicit_content_pubsub.proto
Normal file
15
proto/explicit_content_pubsub.proto
Normal file
@@ -0,0 +1,15 @@
|
||||
syntax = "proto2";
|
||||
|
||||
package spotify.explicit_content.proto;
|
||||
|
||||
option optimize_for = CODE_SIZE;
|
||||
option java_package = "com.spotify.explicit";
|
||||
|
||||
message KeyValuePair {
|
||||
required string key = 1;
|
||||
required string value = 2;
|
||||
}
|
||||
|
||||
message UserAttributesUpdate {
|
||||
repeated KeyValuePair pairs = 1;
|
||||
}
|
||||
231
proto/keyexchange.proto
Normal file
231
proto/keyexchange.proto
Normal file
@@ -0,0 +1,231 @@
|
||||
syntax = "proto2";
|
||||
|
||||
package spotify;
|
||||
option java_package = "com.spotify";
|
||||
|
||||
message ClientHello {
|
||||
required BuildInfo build_info = 0xa;
|
||||
repeated Fingerprint fingerprints_supported = 0x14;
|
||||
repeated Cryptosuite cryptosuites_supported = 0x1e;
|
||||
repeated Powscheme powschemes_supported = 0x28;
|
||||
required LoginCryptoHelloUnion login_crypto_hello = 0x32;
|
||||
required bytes client_nonce = 0x3c;
|
||||
optional bytes padding = 0x46;
|
||||
optional FeatureSet feature_set = 0x50;
|
||||
}
|
||||
|
||||
|
||||
message BuildInfo {
|
||||
required Product product = 0xa;
|
||||
repeated ProductFlags product_flags = 0x14;
|
||||
required Platform platform = 0x1e;
|
||||
required uint64 version = 0x28;
|
||||
}
|
||||
|
||||
enum Product {
|
||||
PRODUCT_CLIENT = 0x0;
|
||||
PRODUCT_LIBSPOTIFY = 0x1;
|
||||
PRODUCT_MOBILE = 0x2;
|
||||
PRODUCT_PARTNER = 0x3;
|
||||
PRODUCT_LIBSPOTIFY_EMBEDDED = 0x5;
|
||||
}
|
||||
|
||||
enum ProductFlags {
|
||||
PRODUCT_FLAG_NONE = 0x0;
|
||||
PRODUCT_FLAG_DEV_BUILD = 0x1;
|
||||
}
|
||||
|
||||
enum Platform {
|
||||
PLATFORM_WIN32_X86 = 0x0;
|
||||
PLATFORM_OSX_X86 = 0x1;
|
||||
PLATFORM_LINUX_X86 = 0x2;
|
||||
PLATFORM_IPHONE_ARM = 0x3;
|
||||
PLATFORM_S60_ARM = 0x4;
|
||||
PLATFORM_OSX_PPC = 0x5;
|
||||
PLATFORM_ANDROID_ARM = 0x6;
|
||||
PLATFORM_WINDOWS_CE_ARM = 0x7;
|
||||
PLATFORM_LINUX_X86_64 = 0x8;
|
||||
PLATFORM_OSX_X86_64 = 0x9;
|
||||
PLATFORM_PALM_ARM = 0xa;
|
||||
PLATFORM_LINUX_SH = 0xb;
|
||||
PLATFORM_FREEBSD_X86 = 0xc;
|
||||
PLATFORM_FREEBSD_X86_64 = 0xd;
|
||||
PLATFORM_BLACKBERRY_ARM = 0xe;
|
||||
PLATFORM_SONOS = 0xf;
|
||||
PLATFORM_LINUX_MIPS = 0x10;
|
||||
PLATFORM_LINUX_ARM = 0x11;
|
||||
PLATFORM_LOGITECH_ARM = 0x12;
|
||||
PLATFORM_LINUX_BLACKFIN = 0x13;
|
||||
PLATFORM_WP7_ARM = 0x14;
|
||||
PLATFORM_ONKYO_ARM = 0x15;
|
||||
PLATFORM_QNXNTO_ARM = 0x16;
|
||||
PLATFORM_BCO_ARM = 0x17;
|
||||
}
|
||||
|
||||
enum Fingerprint {
|
||||
FINGERPRINT_GRAIN = 0x0;
|
||||
FINGERPRINT_HMAC_RIPEMD = 0x1;
|
||||
}
|
||||
|
||||
enum Cryptosuite {
|
||||
CRYPTO_SUITE_SHANNON = 0x0;
|
||||
CRYPTO_SUITE_RC4_SHA1_HMAC = 0x1;
|
||||
}
|
||||
|
||||
enum Powscheme {
|
||||
POW_HASH_CASH = 0x0;
|
||||
}
|
||||
|
||||
|
||||
message LoginCryptoHelloUnion {
|
||||
optional LoginCryptoDiffieHellmanHello diffie_hellman = 0xa;
|
||||
}
|
||||
|
||||
|
||||
message LoginCryptoDiffieHellmanHello {
|
||||
required bytes gc = 0xa;
|
||||
required uint32 server_keys_known = 0x14;
|
||||
}
|
||||
|
||||
|
||||
message FeatureSet {
|
||||
optional bool autoupdate2 = 0x1;
|
||||
optional bool current_location = 0x2;
|
||||
}
|
||||
|
||||
|
||||
message APResponseMessage {
|
||||
optional APChallenge challenge = 0xa;
|
||||
optional UpgradeRequiredMessage upgrade = 0x14;
|
||||
optional APLoginFailed login_failed = 0x1e;
|
||||
}
|
||||
|
||||
message APChallenge {
|
||||
required LoginCryptoChallengeUnion login_crypto_challenge = 0xa;
|
||||
required FingerprintChallengeUnion fingerprint_challenge = 0x14;
|
||||
required PoWChallengeUnion pow_challenge = 0x1e;
|
||||
required CryptoChallengeUnion crypto_challenge = 0x28;
|
||||
required bytes server_nonce = 0x32;
|
||||
optional bytes padding = 0x3c;
|
||||
}
|
||||
|
||||
message LoginCryptoChallengeUnion {
|
||||
optional LoginCryptoDiffieHellmanChallenge diffie_hellman = 0xa;
|
||||
}
|
||||
|
||||
message LoginCryptoDiffieHellmanChallenge {
|
||||
required bytes gs = 0xa;
|
||||
required int32 server_signature_key = 0x14;
|
||||
required bytes gs_signature = 0x1e;
|
||||
}
|
||||
|
||||
message FingerprintChallengeUnion {
|
||||
optional FingerprintGrainChallenge grain = 0xa;
|
||||
optional FingerprintHmacRipemdChallenge hmac_ripemd = 0x14;
|
||||
}
|
||||
|
||||
|
||||
message FingerprintGrainChallenge {
|
||||
required bytes kek = 0xa;
|
||||
}
|
||||
|
||||
|
||||
message FingerprintHmacRipemdChallenge {
|
||||
required bytes challenge = 0xa;
|
||||
}
|
||||
|
||||
|
||||
message PoWChallengeUnion {
|
||||
optional PoWHashCashChallenge hash_cash = 0xa;
|
||||
}
|
||||
|
||||
message PoWHashCashChallenge {
|
||||
optional bytes prefix = 0xa;
|
||||
optional int32 length = 0x14;
|
||||
optional int32 target = 0x1e;
|
||||
}
|
||||
|
||||
|
||||
message CryptoChallengeUnion {
|
||||
optional CryptoShannonChallenge shannon = 0xa;
|
||||
optional CryptoRc4Sha1HmacChallenge rc4_sha1_hmac = 0x14;
|
||||
}
|
||||
|
||||
|
||||
message CryptoShannonChallenge {
|
||||
}
|
||||
|
||||
|
||||
message CryptoRc4Sha1HmacChallenge {
|
||||
}
|
||||
|
||||
|
||||
message UpgradeRequiredMessage {
|
||||
required bytes upgrade_signed_part = 0xa;
|
||||
required bytes signature = 0x14;
|
||||
optional string http_suffix = 0x1e;
|
||||
}
|
||||
|
||||
message APLoginFailed {
|
||||
required ErrorCode error_code = 0xa;
|
||||
optional int32 retry_delay = 0x14;
|
||||
optional int32 expiry = 0x1e;
|
||||
optional string error_description = 0x28;
|
||||
}
|
||||
|
||||
enum ErrorCode {
|
||||
ProtocolError = 0x0;
|
||||
TryAnotherAP = 0x2;
|
||||
BadConnectionId = 0x5;
|
||||
TravelRestriction = 0x9;
|
||||
PremiumAccountRequired = 0xb;
|
||||
BadCredentials = 0xc;
|
||||
CouldNotValidateCredentials = 0xd;
|
||||
AccountExists = 0xe;
|
||||
ExtraVerificationRequired = 0xf;
|
||||
InvalidAppKey = 0x10;
|
||||
ApplicationBanned = 0x11;
|
||||
}
|
||||
|
||||
message ClientResponsePlaintext {
|
||||
required LoginCryptoResponseUnion login_crypto_response = 0xa;
|
||||
required PoWResponseUnion pow_response = 0x14;
|
||||
required CryptoResponseUnion crypto_response = 0x1e;
|
||||
}
|
||||
|
||||
|
||||
message LoginCryptoResponseUnion {
|
||||
optional LoginCryptoDiffieHellmanResponse diffie_hellman = 0xa;
|
||||
}
|
||||
|
||||
|
||||
message LoginCryptoDiffieHellmanResponse {
|
||||
required bytes hmac = 0xa;
|
||||
}
|
||||
|
||||
|
||||
message PoWResponseUnion {
|
||||
optional PoWHashCashResponse hash_cash = 0xa;
|
||||
}
|
||||
|
||||
|
||||
message PoWHashCashResponse {
|
||||
required bytes hash_suffix = 0xa;
|
||||
}
|
||||
|
||||
|
||||
message CryptoResponseUnion {
|
||||
optional CryptoShannonResponse shannon = 0xa;
|
||||
optional CryptoRc4Sha1HmacResponse rc4_sha1_hmac = 0x14;
|
||||
}
|
||||
|
||||
|
||||
message CryptoShannonResponse {
|
||||
optional int32 dummy = 0x1;
|
||||
}
|
||||
|
||||
|
||||
message CryptoRc4Sha1HmacResponse {
|
||||
optional int32 dummy = 0x1;
|
||||
}
|
||||
|
||||
49
proto/mercury.proto
Normal file
49
proto/mercury.proto
Normal file
@@ -0,0 +1,49 @@
|
||||
syntax = "proto2";
|
||||
|
||||
package spotify;
|
||||
option java_package = "com.spotify";
|
||||
|
||||
message MercuryMultiGetRequest {
|
||||
repeated MercuryRequest request = 0x1;
|
||||
}
|
||||
|
||||
message MercuryMultiGetReply {
|
||||
repeated MercuryReply reply = 0x1;
|
||||
}
|
||||
|
||||
message MercuryRequest {
|
||||
optional string uri = 0x1;
|
||||
optional string content_type = 0x2;
|
||||
optional bytes body = 0x3;
|
||||
optional bytes etag = 0x4;
|
||||
}
|
||||
|
||||
message MercuryReply {
|
||||
optional sint32 status_code = 0x1;
|
||||
optional string status_message = 0x2;
|
||||
optional CachePolicy cache_policy = 0x3;
|
||||
enum CachePolicy {
|
||||
CACHE_NO = 0x1;
|
||||
CACHE_PRIVATE = 0x2;
|
||||
CACHE_PUBLIC = 0x3;
|
||||
}
|
||||
optional sint32 ttl = 0x4;
|
||||
optional bytes etag = 0x5;
|
||||
optional string content_type = 0x6;
|
||||
optional bytes body = 0x7;
|
||||
}
|
||||
|
||||
|
||||
message Header {
|
||||
optional string uri = 0x01;
|
||||
optional string content_type = 0x02;
|
||||
optional string method = 0x03;
|
||||
optional sint32 status_code = 0x04;
|
||||
repeated UserField user_fields = 0x06;
|
||||
}
|
||||
|
||||
message UserField {
|
||||
optional string key = 0x01;
|
||||
optional bytes value = 0x02;
|
||||
}
|
||||
|
||||
279
proto/metadata.proto
Normal file
279
proto/metadata.proto
Normal file
@@ -0,0 +1,279 @@
|
||||
syntax = "proto2";
|
||||
|
||||
package spotify.metadata.proto;
|
||||
|
||||
option optimize_for = CODE_SIZE;
|
||||
option java_outer_classname = "Metadata";
|
||||
option java_package = "com.spotify.metadata";
|
||||
|
||||
message Artist {
|
||||
optional bytes gid = 1;
|
||||
optional string name = 2;
|
||||
optional sint32 popularity = 3;
|
||||
repeated TopTracks top_track = 4;
|
||||
repeated AlbumGroup album_group = 5;
|
||||
repeated AlbumGroup single_group = 6;
|
||||
repeated AlbumGroup compilation_group = 7;
|
||||
repeated AlbumGroup appears_on_group = 8;
|
||||
repeated string genre = 9;
|
||||
repeated ExternalId external_id = 10;
|
||||
repeated Image portrait = 11;
|
||||
repeated Biography biography = 12;
|
||||
repeated ActivityPeriod activity_period = 13;
|
||||
repeated Restriction restriction = 14;
|
||||
repeated Artist related = 15;
|
||||
optional bool is_portrait_album_cover = 16;
|
||||
optional ImageGroup portrait_group = 17;
|
||||
repeated SalePeriod sale_period = 18;
|
||||
repeated Availability availability = 20;
|
||||
}
|
||||
|
||||
message Album {
|
||||
optional bytes gid = 1;
|
||||
optional string name = 2;
|
||||
repeated Artist artist = 3;
|
||||
|
||||
optional Type type = 4;
|
||||
enum Type {
|
||||
ALBUM = 1;
|
||||
SINGLE = 2;
|
||||
COMPILATION = 3;
|
||||
EP = 4;
|
||||
AUDIOBOOK = 5;
|
||||
PODCAST = 6;
|
||||
}
|
||||
|
||||
optional string label = 5;
|
||||
optional Date date = 6;
|
||||
optional sint32 popularity = 7;
|
||||
repeated string genre = 8;
|
||||
repeated Image cover = 9;
|
||||
repeated ExternalId external_id = 10;
|
||||
repeated Disc disc = 11;
|
||||
repeated string review = 12;
|
||||
repeated Copyright copyright = 13;
|
||||
repeated Restriction restriction = 14;
|
||||
repeated Album related = 15;
|
||||
repeated SalePeriod sale_period = 16;
|
||||
optional ImageGroup cover_group = 17;
|
||||
optional string original_title = 18;
|
||||
optional string version_title = 19;
|
||||
optional string type_str = 20;
|
||||
repeated Availability availability = 23;
|
||||
}
|
||||
|
||||
message Track {
|
||||
optional bytes gid = 1;
|
||||
optional string name = 2;
|
||||
optional Album album = 3;
|
||||
repeated Artist artist = 4;
|
||||
optional sint32 number = 5;
|
||||
optional sint32 disc_number = 6;
|
||||
optional sint32 duration = 7;
|
||||
optional sint32 popularity = 8;
|
||||
optional bool explicit = 9;
|
||||
repeated ExternalId external_id = 10;
|
||||
repeated Restriction restriction = 11;
|
||||
repeated AudioFile file = 12;
|
||||
repeated Track alternative = 13;
|
||||
repeated SalePeriod sale_period = 14;
|
||||
repeated AudioFile preview = 15;
|
||||
repeated string tags = 16;
|
||||
optional int64 earliest_live_timestamp = 17;
|
||||
optional bool has_lyrics = 18;
|
||||
repeated Availability availability = 19;
|
||||
optional Licensor licensor = 21;
|
||||
}
|
||||
|
||||
message Show {
|
||||
optional bytes gid = 1;
|
||||
optional string name = 2;
|
||||
optional string description = 64;
|
||||
optional sint32 deprecated_popularity = 65 [deprecated = true];
|
||||
optional string publisher = 66;
|
||||
optional string language = 67;
|
||||
optional bool explicit = 68;
|
||||
optional ImageGroup cover_image = 69;
|
||||
repeated Episode episode = 70;
|
||||
repeated Copyright copyright = 71;
|
||||
repeated Restriction restriction = 72;
|
||||
repeated string keyword = 73;
|
||||
|
||||
optional MediaType media_type = 74;
|
||||
enum MediaType {
|
||||
MIXED = 0;
|
||||
AUDIO = 1;
|
||||
VIDEO = 2;
|
||||
}
|
||||
|
||||
optional ConsumptionOrder consumption_order = 75;
|
||||
enum ConsumptionOrder {
|
||||
SEQUENTIAL = 1;
|
||||
EPISODIC = 2;
|
||||
RECENT = 3;
|
||||
}
|
||||
|
||||
repeated Availability availability = 78;
|
||||
optional string trailer_uri = 83;
|
||||
}
|
||||
|
||||
message Episode {
|
||||
optional bytes gid = 1;
|
||||
optional string name = 2;
|
||||
optional sint32 duration = 7;
|
||||
repeated AudioFile audio = 12;
|
||||
optional string description = 64;
|
||||
optional sint32 number = 65;
|
||||
optional Date publish_time = 66;
|
||||
optional sint32 deprecated_popularity = 67 [deprecated = true];
|
||||
optional ImageGroup cover_image = 68;
|
||||
optional string language = 69;
|
||||
optional bool explicit = 70;
|
||||
optional Show show = 71;
|
||||
repeated VideoFile video = 72;
|
||||
repeated VideoFile video_preview = 73;
|
||||
repeated AudioFile audio_preview = 74;
|
||||
repeated Restriction restriction = 75;
|
||||
optional ImageGroup freeze_frame = 76;
|
||||
repeated string keyword = 77;
|
||||
optional bool allow_background_playback = 81;
|
||||
repeated Availability availability = 82;
|
||||
optional string external_url = 83;
|
||||
|
||||
optional .spotify.metadata.proto.Episode.EpisodeType type = 87;
|
||||
enum EpisodeType {
|
||||
FULL = 0;
|
||||
TRAILER = 1;
|
||||
BONUS = 2;
|
||||
}
|
||||
}
|
||||
|
||||
message Licensor {
|
||||
optional bytes uuid = 1;
|
||||
}
|
||||
|
||||
message TopTracks {
|
||||
optional string country = 1;
|
||||
repeated Track track = 2;
|
||||
}
|
||||
|
||||
message ActivityPeriod {
|
||||
optional sint32 start_year = 1;
|
||||
optional sint32 end_year = 2;
|
||||
optional sint32 decade = 3;
|
||||
}
|
||||
|
||||
message AlbumGroup {
|
||||
repeated Album album = 1;
|
||||
}
|
||||
|
||||
message Date {
|
||||
optional sint32 year = 1;
|
||||
optional sint32 month = 2;
|
||||
optional sint32 day = 3;
|
||||
optional sint32 hour = 4;
|
||||
optional sint32 minute = 5;
|
||||
}
|
||||
|
||||
message Image {
|
||||
optional bytes file_id = 1;
|
||||
|
||||
optional Size size = 2;
|
||||
enum Size {
|
||||
DEFAULT = 0;
|
||||
SMALL = 1;
|
||||
LARGE = 2;
|
||||
XLARGE = 3;
|
||||
}
|
||||
|
||||
optional sint32 width = 3;
|
||||
optional sint32 height = 4;
|
||||
}
|
||||
|
||||
message ImageGroup {
|
||||
repeated Image image = 1;
|
||||
}
|
||||
|
||||
message Biography {
|
||||
optional string text = 1;
|
||||
repeated Image portrait = 2;
|
||||
repeated ImageGroup portrait_group = 3;
|
||||
}
|
||||
|
||||
message Disc {
|
||||
optional sint32 number = 1;
|
||||
optional string name = 2;
|
||||
repeated Track track = 3;
|
||||
}
|
||||
|
||||
message Copyright {
|
||||
optional Type type = 1;
|
||||
enum Type {
|
||||
P = 0;
|
||||
C = 1;
|
||||
}
|
||||
|
||||
optional string text = 2;
|
||||
}
|
||||
|
||||
message Restriction {
|
||||
repeated Catalogue catalogue = 1;
|
||||
enum Catalogue {
|
||||
AD = 0;
|
||||
SUBSCRIPTION = 1;
|
||||
CATALOGUE_ALL = 2;
|
||||
SHUFFLE = 3;
|
||||
COMMERCIAL = 4;
|
||||
}
|
||||
|
||||
optional Type type = 4;
|
||||
enum Type {
|
||||
STREAMING = 0;
|
||||
}
|
||||
|
||||
repeated string catalogue_str = 5;
|
||||
|
||||
oneof country_restriction {
|
||||
string countries_allowed = 2;
|
||||
string countries_forbidden = 3;
|
||||
}
|
||||
}
|
||||
|
||||
message Availability {
|
||||
repeated string catalogue_str = 1;
|
||||
optional Date start = 2;
|
||||
}
|
||||
|
||||
message SalePeriod {
|
||||
repeated Restriction restriction = 1;
|
||||
optional Date start = 2;
|
||||
optional Date end = 3;
|
||||
}
|
||||
|
||||
message ExternalId {
|
||||
optional string type = 1;
|
||||
optional string id = 2;
|
||||
}
|
||||
|
||||
message AudioFile {
|
||||
optional bytes file_id = 1;
|
||||
|
||||
optional Format format = 2;
|
||||
enum Format {
|
||||
OGG_VORBIS_96 = 0;
|
||||
OGG_VORBIS_160 = 1;
|
||||
OGG_VORBIS_320 = 2;
|
||||
MP3_256 = 3;
|
||||
MP3_320 = 4;
|
||||
MP3_160 = 5;
|
||||
MP3_96 = 6;
|
||||
MP3_160_ENC = 7;
|
||||
AAC_24 = 8;
|
||||
AAC_48 = 9;
|
||||
AAC_24_NORM = 16;
|
||||
}
|
||||
}
|
||||
|
||||
message VideoFile {
|
||||
optional bytes file_id = 1;
|
||||
}
|
||||
16
proto/play_origin.proto
Normal file
16
proto/play_origin.proto
Normal file
@@ -0,0 +1,16 @@
|
||||
syntax = "proto2";
|
||||
|
||||
package spotify.player.proto;
|
||||
|
||||
option optimize_for = CODE_SIZE;
|
||||
option java_package = "com.spotify.context";
|
||||
|
||||
message PlayOrigin {
|
||||
optional string feature_identifier = 1;
|
||||
optional string feature_version = 2;
|
||||
optional string view_uri = 3;
|
||||
optional string external_referrer = 4;
|
||||
optional string referrer_identifier = 5;
|
||||
optional string device_identifier = 6;
|
||||
repeated string feature_classes = 7;
|
||||
}
|
||||
16
proto/playback.proto
Normal file
16
proto/playback.proto
Normal file
@@ -0,0 +1,16 @@
|
||||
syntax = "proto2";
|
||||
|
||||
package spotify.player.proto.transfer;
|
||||
|
||||
import "context_track.proto";
|
||||
|
||||
option optimize_for = CODE_SIZE;
|
||||
option java_package = "com.spotify.transfer";
|
||||
|
||||
message Playback {
|
||||
optional int64 timestamp = 1;
|
||||
optional int32 position_as_of_timestamp = 2;
|
||||
optional double playback_speed = 3;
|
||||
optional bool is_paused = 4;
|
||||
optional ContextTrack current_track = 5;
|
||||
}
|
||||
102
proto/player.proto
Normal file
102
proto/player.proto
Normal file
@@ -0,0 +1,102 @@
|
||||
syntax = "proto3";
|
||||
|
||||
package connectstate;
|
||||
|
||||
option optimize_for = CODE_SIZE;
|
||||
option java_package = "com.spotify.connectstate";
|
||||
|
||||
message PlayerState {
|
||||
int64 timestamp = 1;
|
||||
string context_uri = 2;
|
||||
string context_url = 3;
|
||||
Restrictions context_restrictions = 4;
|
||||
PlayOrigin play_origin = 5;
|
||||
ContextIndex index = 6;
|
||||
ProvidedTrack track = 7;
|
||||
string playback_id = 8;
|
||||
double playback_speed = 9;
|
||||
int64 position_as_of_timestamp = 10;
|
||||
int64 duration = 11;
|
||||
bool is_playing = 12;
|
||||
bool is_paused = 13;
|
||||
bool is_buffering = 14;
|
||||
bool is_system_initiated = 15;
|
||||
ContextPlayerOptions options = 16;
|
||||
Restrictions restrictions = 17;
|
||||
Suppressions suppressions = 18;
|
||||
repeated ProvidedTrack prev_tracks = 19;
|
||||
repeated ProvidedTrack next_tracks = 20;
|
||||
map<string, string> context_metadata = 21;
|
||||
map<string, string> page_metadata = 22;
|
||||
string session_id = 23;
|
||||
string queue_revision = 24;
|
||||
int64 position = 25;
|
||||
string entity_uri = 26;
|
||||
repeated ProvidedTrack reverse = 27;
|
||||
repeated ProvidedTrack future = 28;
|
||||
}
|
||||
|
||||
message ProvidedTrack {
|
||||
string uri = 1;
|
||||
string uid = 2;
|
||||
map<string, string> metadata = 3;
|
||||
repeated string removed = 4;
|
||||
repeated string blocked = 5;
|
||||
string provider = 6;
|
||||
Restrictions restrictions = 7;
|
||||
string album_uri = 8;
|
||||
repeated string disallow_reasons = 9;
|
||||
string artist_uri = 10;
|
||||
repeated string disallow_undecided = 11;
|
||||
}
|
||||
|
||||
message ContextIndex {
|
||||
uint32 page = 1;
|
||||
uint32 track = 2;
|
||||
}
|
||||
|
||||
message Restrictions {
|
||||
repeated string disallow_pausing_reasons = 1;
|
||||
repeated string disallow_resuming_reasons = 2;
|
||||
repeated string disallow_seeking_reasons = 3;
|
||||
repeated string disallow_peeking_prev_reasons = 4;
|
||||
repeated string disallow_peeking_next_reasons = 5;
|
||||
repeated string disallow_skipping_prev_reasons = 6;
|
||||
repeated string disallow_skipping_next_reasons = 7;
|
||||
repeated string disallow_toggling_repeat_context_reasons = 8;
|
||||
repeated string disallow_toggling_repeat_track_reasons = 9;
|
||||
repeated string disallow_toggling_shuffle_reasons = 10;
|
||||
repeated string disallow_set_queue_reasons = 11;
|
||||
repeated string disallow_interrupting_playback_reasons = 12;
|
||||
repeated string disallow_transferring_playback_reasons = 13;
|
||||
repeated string disallow_remote_control_reasons = 14;
|
||||
repeated string disallow_inserting_into_next_tracks_reasons = 15;
|
||||
repeated string disallow_inserting_into_context_tracks_reasons = 16;
|
||||
repeated string disallow_reordering_in_next_tracks_reasons = 17;
|
||||
repeated string disallow_reordering_in_context_tracks_reasons = 18;
|
||||
repeated string disallow_removing_from_next_tracks_reasons = 19;
|
||||
repeated string disallow_removing_from_context_tracks_reasons = 20;
|
||||
repeated string disallow_updating_context_reasons = 21;
|
||||
repeated string disallow_playing_reasons = 22;
|
||||
repeated string disallow_stopping_reasons = 23;
|
||||
}
|
||||
|
||||
message PlayOrigin {
|
||||
string feature_identifier = 1;
|
||||
string feature_version = 2;
|
||||
string view_uri = 3;
|
||||
string external_referrer = 4;
|
||||
string referrer_identifier = 5;
|
||||
string device_identifier = 6;
|
||||
repeated string feature_classes = 7;
|
||||
}
|
||||
|
||||
message ContextPlayerOptions {
|
||||
bool shuffling_context = 1;
|
||||
bool repeating_context = 2;
|
||||
bool repeating_track = 3;
|
||||
}
|
||||
|
||||
message Suppressions {
|
||||
repeated string providers = 1;
|
||||
}
|
||||
229
proto/playlist4_external.proto
Normal file
229
proto/playlist4_external.proto
Normal file
@@ -0,0 +1,229 @@
|
||||
syntax = "proto2";
|
||||
|
||||
package spotify.playlist4.proto;
|
||||
|
||||
option optimize_for = CODE_SIZE;
|
||||
option java_outer_classname = "Playlist4ApiProto";
|
||||
option java_package = "com.spotify.playlist4";
|
||||
|
||||
message Item {
|
||||
required string uri = 1;
|
||||
optional ItemAttributes attributes = 2;
|
||||
}
|
||||
|
||||
message MetaItem {
|
||||
optional bytes revision = 1;
|
||||
optional ListAttributes attributes = 2;
|
||||
optional int32 length = 3;
|
||||
optional int64 timestamp = 4;
|
||||
optional string owner_username = 5;
|
||||
}
|
||||
|
||||
message ListItems {
|
||||
required int32 pos = 1;
|
||||
required bool truncated = 2;
|
||||
repeated Item items = 3;
|
||||
repeated MetaItem meta_items = 4;
|
||||
}
|
||||
|
||||
message FormatListAttribute {
|
||||
optional string key = 1;
|
||||
optional string value = 2;
|
||||
}
|
||||
|
||||
message ListAttributes {
|
||||
optional string name = 1;
|
||||
optional string description = 2;
|
||||
optional bytes picture = 3;
|
||||
optional bool collaborative = 4;
|
||||
optional string pl3_version = 5;
|
||||
optional bool deleted_by_owner = 6;
|
||||
optional string client_id = 10;
|
||||
optional string format = 11;
|
||||
repeated FormatListAttribute format_attributes = 12;
|
||||
}
|
||||
|
||||
message ItemAttributes {
|
||||
optional string added_by = 1;
|
||||
optional int64 timestamp = 2;
|
||||
optional int64 seen_at = 9;
|
||||
optional bool public = 10;
|
||||
repeated FormatListAttribute format_attributes = 11;
|
||||
optional bytes item_id = 12;
|
||||
}
|
||||
|
||||
message Add {
|
||||
optional int32 from_index = 1;
|
||||
repeated Item items = 2;
|
||||
optional bool add_last = 4;
|
||||
optional bool add_first = 5;
|
||||
}
|
||||
|
||||
message Rem {
|
||||
optional int32 from_index = 1;
|
||||
optional int32 length = 2;
|
||||
repeated Item items = 3;
|
||||
optional bool items_as_key = 7;
|
||||
}
|
||||
|
||||
message Mov {
|
||||
required int32 from_index = 1;
|
||||
required int32 length = 2;
|
||||
required int32 to_index = 3;
|
||||
}
|
||||
|
||||
message ItemAttributesPartialState {
|
||||
required ItemAttributes values = 1;
|
||||
repeated ItemAttributeKind no_value = 2;
|
||||
}
|
||||
|
||||
message ListAttributesPartialState {
|
||||
required ListAttributes values = 1;
|
||||
repeated ListAttributeKind no_value = 2;
|
||||
}
|
||||
|
||||
message UpdateItemAttributes {
|
||||
required int32 index = 1;
|
||||
required ItemAttributesPartialState new_attributes = 2;
|
||||
optional ItemAttributesPartialState old_attributes = 3;
|
||||
}
|
||||
|
||||
message UpdateListAttributes {
|
||||
required ListAttributesPartialState new_attributes = 1;
|
||||
optional ListAttributesPartialState old_attributes = 2;
|
||||
}
|
||||
|
||||
message Op {
|
||||
required Kind kind = 1;
|
||||
enum Kind {
|
||||
KIND_UNKNOWN = 0;
|
||||
ADD = 2;
|
||||
REM = 3;
|
||||
MOV = 4;
|
||||
UPDATE_ITEM_ATTRIBUTES = 5;
|
||||
UPDATE_LIST_ATTRIBUTES = 6;
|
||||
}
|
||||
|
||||
optional Add add = 2;
|
||||
optional Rem rem = 3;
|
||||
optional Mov mov = 4;
|
||||
optional UpdateItemAttributes update_item_attributes = 5;
|
||||
optional UpdateListAttributes update_list_attributes = 6;
|
||||
}
|
||||
|
||||
message OpList {
|
||||
repeated Op ops = 1;
|
||||
}
|
||||
|
||||
message ChangeInfo {
|
||||
optional string user = 1;
|
||||
optional int64 timestamp = 2;
|
||||
optional bool admin = 3;
|
||||
optional bool undo = 4;
|
||||
optional bool redo = 5;
|
||||
optional bool merge = 6;
|
||||
optional bool compressed = 7;
|
||||
optional bool migration = 8;
|
||||
optional int32 split_id = 9;
|
||||
optional SourceInfo source = 10;
|
||||
}
|
||||
|
||||
message SourceInfo {
|
||||
optional Client client = 1;
|
||||
enum Client {
|
||||
CLIENT_UNKNOWN = 0;
|
||||
NATIVE_HERMES = 1;
|
||||
CLIENT = 2;
|
||||
PYTHON = 3;
|
||||
JAVA = 4;
|
||||
WEBPLAYER = 5;
|
||||
LIBSPOTIFY = 6;
|
||||
}
|
||||
|
||||
optional string app = 3;
|
||||
optional string source = 4;
|
||||
optional string version = 5;
|
||||
}
|
||||
|
||||
message Delta {
|
||||
optional bytes base_version = 1;
|
||||
repeated Op ops = 2;
|
||||
optional ChangeInfo info = 4;
|
||||
}
|
||||
|
||||
message Diff {
|
||||
required bytes from_revision = 1;
|
||||
repeated Op ops = 2;
|
||||
required bytes to_revision = 3;
|
||||
}
|
||||
|
||||
message ListChanges {
|
||||
optional bytes base_revision = 1;
|
||||
repeated Delta deltas = 2;
|
||||
optional bool want_resulting_revisions = 3;
|
||||
optional bool want_sync_result = 4;
|
||||
repeated int64 nonces = 6;
|
||||
}
|
||||
|
||||
message SelectedListContent {
|
||||
optional bytes revision = 1;
|
||||
optional int32 length = 2;
|
||||
optional ListAttributes attributes = 3;
|
||||
optional ListItems contents = 5;
|
||||
optional Diff diff = 6;
|
||||
optional Diff sync_result = 7;
|
||||
repeated bytes resulting_revisions = 8;
|
||||
optional bool multiple_heads = 9;
|
||||
optional bool up_to_date = 10;
|
||||
repeated int64 nonces = 14;
|
||||
optional int64 timestamp = 15;
|
||||
optional string owner_username = 16;
|
||||
}
|
||||
|
||||
message CreateListReply {
|
||||
required bytes uri = 1;
|
||||
optional bytes revision = 2;
|
||||
}
|
||||
|
||||
message ModifyReply {
|
||||
required bytes uri = 1;
|
||||
optional bytes revision = 2;
|
||||
}
|
||||
|
||||
message SubscribeRequest {
|
||||
repeated bytes uris = 1;
|
||||
}
|
||||
|
||||
message UnsubscribeRequest {
|
||||
repeated bytes uris = 1;
|
||||
}
|
||||
|
||||
message PlaylistModificationInfo {
|
||||
optional bytes uri = 1;
|
||||
optional bytes new_revision = 2;
|
||||
optional bytes parent_revision = 3;
|
||||
repeated Op ops = 4;
|
||||
}
|
||||
|
||||
enum ListAttributeKind {
|
||||
LIST_UNKNOWN = 0;
|
||||
LIST_NAME = 1;
|
||||
LIST_DESCRIPTION = 2;
|
||||
LIST_PICTURE = 3;
|
||||
LIST_COLLABORATIVE = 4;
|
||||
LIST_PL3_VERSION = 5;
|
||||
LIST_DELETED_BY_OWNER = 6;
|
||||
LIST_CLIENT_ID = 10;
|
||||
LIST_FORMAT = 11;
|
||||
LIST_FORMAT_ATTRIBUTES = 12;
|
||||
}
|
||||
|
||||
enum ItemAttributeKind {
|
||||
ITEM_UNKNOWN = 0;
|
||||
ITEM_ADDED_BY = 1;
|
||||
ITEM_TIMESTAMP = 2;
|
||||
ITEM_SEEN_AT = 9;
|
||||
ITEM_PUBLIC = 10;
|
||||
ITEM_FORMAT_ATTRIBUTES = 11;
|
||||
ITEM_ID = 12;
|
||||
}
|
||||
39
proto/playlist_annotate3.proto
Normal file
39
proto/playlist_annotate3.proto
Normal file
@@ -0,0 +1,39 @@
|
||||
syntax = "proto2";
|
||||
|
||||
package spotify_playlist_annotate3.proto;
|
||||
|
||||
option optimize_for = CODE_SIZE;
|
||||
option java_package = "com.spotify.playlist_annotate3";
|
||||
|
||||
message TakedownRequest {
|
||||
optional AbuseReportState abuse_report_state = 1;
|
||||
}
|
||||
|
||||
message AnnotateRequest {
|
||||
optional string description = 1;
|
||||
optional string image_uri = 2;
|
||||
}
|
||||
|
||||
message TranscodedPicture {
|
||||
optional string target_name = 1;
|
||||
optional string uri = 2;
|
||||
}
|
||||
|
||||
message PlaylistAnnotation {
|
||||
optional string description = 1;
|
||||
optional string picture = 2;
|
||||
optional RenderFeatures deprecated_render_features = 3 [default = NORMAL_FEATURES, deprecated = true];
|
||||
repeated TranscodedPicture transcoded_picture = 4;
|
||||
optional bool is_abuse_reporting_enabled = 6 [default = true];
|
||||
optional AbuseReportState abuse_report_state = 7 [default = OK];
|
||||
}
|
||||
|
||||
enum RenderFeatures {
|
||||
NORMAL_FEATURES = 1;
|
||||
EXTENDED_FEATURES = 2;
|
||||
}
|
||||
|
||||
enum AbuseReportState {
|
||||
OK = 0;
|
||||
TAKEN_DOWN = 1;
|
||||
}
|
||||
11
proto/pubsub.proto
Normal file
11
proto/pubsub.proto
Normal file
@@ -0,0 +1,11 @@
|
||||
syntax = "proto2";
|
||||
|
||||
package spotify;
|
||||
option java_package = "com.spotify";
|
||||
|
||||
message Subscription {
|
||||
optional string uri = 0x1;
|
||||
optional int32 expiry = 0x2;
|
||||
optional int32 status_code = 0x3;
|
||||
}
|
||||
|
||||
13
proto/queue.proto
Normal file
13
proto/queue.proto
Normal file
@@ -0,0 +1,13 @@
|
||||
syntax = "proto2";
|
||||
|
||||
package spotify.player.proto.transfer;
|
||||
|
||||
import "context_track.proto";
|
||||
|
||||
option optimize_for = CODE_SIZE;
|
||||
option java_package = "com.spotify.transfer";
|
||||
|
||||
message Queue {
|
||||
repeated ContextTrack tracks = 1;
|
||||
optional bool is_playing_queue = 2;
|
||||
}
|
||||
30
proto/restrictions.proto
Normal file
30
proto/restrictions.proto
Normal file
@@ -0,0 +1,30 @@
|
||||
syntax = "proto2";
|
||||
|
||||
package spotify.player.proto;
|
||||
|
||||
option optimize_for = CODE_SIZE;
|
||||
option java_package = "com.spotify.context";
|
||||
|
||||
message Restrictions {
|
||||
repeated string disallow_pausing_reasons = 1;
|
||||
repeated string disallow_resuming_reasons = 2;
|
||||
repeated string disallow_seeking_reasons = 3;
|
||||
repeated string disallow_peeking_prev_reasons = 4;
|
||||
repeated string disallow_peeking_next_reasons = 5;
|
||||
repeated string disallow_skipping_prev_reasons = 6;
|
||||
repeated string disallow_skipping_next_reasons = 7;
|
||||
repeated string disallow_toggling_repeat_context_reasons = 8;
|
||||
repeated string disallow_toggling_repeat_track_reasons = 9;
|
||||
repeated string disallow_toggling_shuffle_reasons = 10;
|
||||
repeated string disallow_set_queue_reasons = 11;
|
||||
repeated string disallow_interrupting_playback_reasons = 12;
|
||||
repeated string disallow_transferring_playback_reasons = 13;
|
||||
repeated string disallow_remote_control_reasons = 14;
|
||||
repeated string disallow_inserting_into_next_tracks_reasons = 15;
|
||||
repeated string disallow_inserting_into_context_tracks_reasons = 16;
|
||||
repeated string disallow_reordering_in_next_tracks_reasons = 17;
|
||||
repeated string disallow_reordering_in_context_tracks_reasons = 18;
|
||||
repeated string disallow_removing_from_next_tracks_reasons = 19;
|
||||
repeated string disallow_removing_from_context_tracks_reasons = 20;
|
||||
repeated string disallow_updating_context_reasons = 21;
|
||||
}
|
||||
17
proto/session.proto
Normal file
17
proto/session.proto
Normal file
@@ -0,0 +1,17 @@
|
||||
syntax = "proto2";
|
||||
|
||||
package spotify.player.proto.transfer;
|
||||
|
||||
import "context.proto";
|
||||
import "context_player_options.proto";
|
||||
import "play_origin.proto";
|
||||
|
||||
option optimize_for = CODE_SIZE;
|
||||
option java_package = "com.spotify.transfer";
|
||||
|
||||
message Session {
|
||||
optional PlayOrigin play_origin = 1;
|
||||
optional Context context = 2;
|
||||
optional string current_uid = 3;
|
||||
optional ContextPlayerOptionOverrides option_overrides = 4;
|
||||
}
|
||||
19
proto/spotify/login5/v3/challenges/code.proto
Normal file
19
proto/spotify/login5/v3/challenges/code.proto
Normal file
@@ -0,0 +1,19 @@
|
||||
syntax = "proto3";
|
||||
|
||||
package spotify.login5.v3.challenges;
|
||||
option java_package = "com.spotify.login5v3";
|
||||
|
||||
message CodeChallenge {
|
||||
enum Method {
|
||||
UNKNOWN = 0;
|
||||
SMS = 1;
|
||||
}
|
||||
.spotify.login5.v3.challenges.CodeChallenge.Method method = 1;
|
||||
int32 code_length = 2;
|
||||
int32 expires_in = 3;
|
||||
string canonical_phone_number = 4;
|
||||
}
|
||||
|
||||
message CodeSolution {
|
||||
string code = 1;
|
||||
}
|
||||
16
proto/spotify/login5/v3/challenges/hashcash.proto
Normal file
16
proto/spotify/login5/v3/challenges/hashcash.proto
Normal file
@@ -0,0 +1,16 @@
|
||||
syntax = "proto3";
|
||||
|
||||
package spotify.login5.v3.challenges;
|
||||
option java_package = "com.spotify.login5v3";
|
||||
|
||||
import "google/protobuf/duration.proto";
|
||||
|
||||
message HashcashChallenge {
|
||||
bytes prefix = 1;
|
||||
int32 length = 2;
|
||||
}
|
||||
|
||||
message HashcashSolution {
|
||||
bytes suffix = 1;
|
||||
.google.protobuf.Duration duration = 2;
|
||||
}
|
||||
9
proto/spotify/login5/v3/client_info.proto
Normal file
9
proto/spotify/login5/v3/client_info.proto
Normal file
@@ -0,0 +1,9 @@
|
||||
syntax = "proto3";
|
||||
|
||||
package spotify.login5.v3;
|
||||
option java_package = "com.spotify.login5v3";
|
||||
|
||||
message ClientInfo {
|
||||
string client_id = 1;
|
||||
string device_id = 2;
|
||||
}
|
||||
35
proto/spotify/login5/v3/credentials/credentials.proto
Normal file
35
proto/spotify/login5/v3/credentials/credentials.proto
Normal file
@@ -0,0 +1,35 @@
|
||||
syntax = "proto3";
|
||||
|
||||
package spotify.login5.v3.credentials;
|
||||
option java_package = "com.spotify.login5v3";
|
||||
|
||||
message StoredCredential {
|
||||
string username = 1;
|
||||
bytes data = 2;
|
||||
}
|
||||
|
||||
message Password {
|
||||
string id = 1;
|
||||
string password = 2;
|
||||
bytes padding = 3;
|
||||
}
|
||||
|
||||
message FacebookAccessToken {
|
||||
string fb_uid = 1;
|
||||
string access_token = 2;
|
||||
}
|
||||
|
||||
message OneTimeToken {
|
||||
string token = 1;
|
||||
}
|
||||
|
||||
message ParentChildCredential {
|
||||
string child_id = 1;
|
||||
.spotify.login5.v3.credentials.StoredCredential parent_stored_credential = 2;
|
||||
}
|
||||
|
||||
message AppleSignInCredential {
|
||||
string auth_code = 1;
|
||||
string redirect_uri = 2;
|
||||
string bundle_id = 3;
|
||||
}
|
||||
10
proto/spotify/login5/v3/identifiers/identifiers.proto
Normal file
10
proto/spotify/login5/v3/identifiers/identifiers.proto
Normal file
@@ -0,0 +1,10 @@
|
||||
syntax = "proto3";
|
||||
|
||||
package spotify.login5.v3.identifiers;
|
||||
option java_package = "com.spotify.login5v3";
|
||||
|
||||
message PhoneNumber {
|
||||
string number = 1;
|
||||
string iso_country_code = 2;
|
||||
string country_calling_code = 3;
|
||||
}
|
||||
75
proto/spotify/login5/v3/login5.proto
Normal file
75
proto/spotify/login5/v3/login5.proto
Normal file
@@ -0,0 +1,75 @@
|
||||
syntax = "proto3";
|
||||
|
||||
package spotify.login5.v3;
|
||||
option java_package = "com.spotify.login5v3";
|
||||
|
||||
import "spotify/login5/v3/client_info.proto";
|
||||
import "spotify/login5/v3/user_info.proto";
|
||||
import "spotify/login5/v3/challenges/code.proto";
|
||||
import "spotify/login5/v3/challenges/hashcash.proto";
|
||||
import "spotify/login5/v3/credentials/credentials.proto";
|
||||
import "spotify/login5/v3/identifiers/identifiers.proto";
|
||||
|
||||
enum LoginError {
|
||||
UNKNOWN_ERROR = 0;
|
||||
INVALID_CREDENTIALS = 1;
|
||||
BAD_REQUEST = 2;
|
||||
UNSUPPORTED_LOGIN_PROTOCOL = 3;
|
||||
TIMEOUT = 4;
|
||||
UNKNOWN_IDENTIFIER = 5;
|
||||
TOO_MANY_ATTEMPTS = 6;
|
||||
INVALID_PHONENUMBER = 7;
|
||||
TRY_AGAIN_LATER = 8;
|
||||
}
|
||||
|
||||
message Challenges {
|
||||
repeated .spotify.login5.v3.Challenge challenges = 1;
|
||||
}
|
||||
|
||||
message Challenge {
|
||||
.spotify.login5.v3.challenges.HashcashChallenge hashcash = 1;
|
||||
.spotify.login5.v3.challenges.CodeChallenge code = 2;
|
||||
}
|
||||
|
||||
message ChallengeSolutions {
|
||||
repeated .spotify.login5.v3.ChallengeSolution solutions = 1;
|
||||
}
|
||||
|
||||
message ChallengeSolution {
|
||||
.spotify.login5.v3.challenges.HashcashSolution hashcash = 1;
|
||||
.spotify.login5.v3.challenges.CodeSolution code = 2;
|
||||
}
|
||||
|
||||
message LoginRequest {
|
||||
.spotify.login5.v3.ClientInfo client_info = 1;
|
||||
bytes login_context = 2;
|
||||
.spotify.login5.v3.ChallengeSolutions challenge_solutions = 3;
|
||||
.spotify.login5.v3.credentials.StoredCredential stored_credential = 100;
|
||||
.spotify.login5.v3.credentials.Password password = 101;
|
||||
.spotify.login5.v3.credentials.FacebookAccessToken facebook_access_token = 102;
|
||||
.spotify.login5.v3.identifiers.PhoneNumber phone_number = 103;
|
||||
.spotify.login5.v3.credentials.OneTimeToken one_time_token = 104;
|
||||
.spotify.login5.v3.credentials.ParentChildCredential parent_child_credential = 105;
|
||||
.spotify.login5.v3.credentials.AppleSignInCredential apple_sign_in_credential = 106;
|
||||
}
|
||||
|
||||
message LoginOk {
|
||||
string username = 1;
|
||||
string access_token = 2;
|
||||
bytes stored_credential = 3;
|
||||
int32 access_token_expires_in = 4;
|
||||
}
|
||||
|
||||
message LoginResponse {
|
||||
enum Warnings {
|
||||
UNKNOWN_WARNING = 0;
|
||||
DEPRECATED_PROTOCOL_VERSION = 1;
|
||||
}
|
||||
.spotify.login5.v3.LoginOk ok = 1;
|
||||
.spotify.login5.v3.LoginError error = 2;
|
||||
.spotify.login5.v3.Challenges challenges = 3;
|
||||
repeated .spotify.login5.v3.LoginResponse.Warnings warnings = 4;
|
||||
bytes login_context = 5;
|
||||
string identifier_token = 6;
|
||||
.spotify.login5.v3.UserInfo user_info = 7;
|
||||
}
|
||||
21
proto/spotify/login5/v3/user_info.proto
Normal file
21
proto/spotify/login5/v3/user_info.proto
Normal file
@@ -0,0 +1,21 @@
|
||||
syntax = "proto3";
|
||||
|
||||
package spotify.login5.v3;
|
||||
option java_package = "com.spotify.login5v3";
|
||||
|
||||
message UserInfo {
|
||||
enum Gender {
|
||||
UNKNOWN = 0;
|
||||
MALE = 1;
|
||||
FEMALE = 2;
|
||||
NEUTRAL = 3;
|
||||
}
|
||||
string name = 1;
|
||||
string email = 2;
|
||||
bool email_verified = 3;
|
||||
string birthdate = 4;
|
||||
.spotify.login5.v3.UserInfo.Gender gender = 5;
|
||||
string phone_number = 6;
|
||||
bool phone_number_verified = 7;
|
||||
bool email_already_registered = 8;
|
||||
}
|
||||
18
proto/storage-resolve.proto
Normal file
18
proto/storage-resolve.proto
Normal file
@@ -0,0 +1,18 @@
|
||||
syntax = "proto3";
|
||||
|
||||
package spotify.download.proto;
|
||||
|
||||
option optimize_for = CODE_SIZE;
|
||||
option java_package = "com.spotify.storage";
|
||||
|
||||
message StorageResolveResponse {
|
||||
Result result = 1;
|
||||
enum Result {
|
||||
CDN = 0;
|
||||
STORAGE = 1;
|
||||
RESTRICTED = 3;
|
||||
}
|
||||
|
||||
repeated string cdnurl = 2;
|
||||
bytes fileid = 4;
|
||||
}
|
||||
19
proto/transfer_state.proto
Normal file
19
proto/transfer_state.proto
Normal file
@@ -0,0 +1,19 @@
|
||||
syntax = "proto2";
|
||||
|
||||
package spotify.player.proto.transfer;
|
||||
|
||||
import "context_player_options.proto";
|
||||
import "playback.proto";
|
||||
import "session.proto";
|
||||
import "queue.proto";
|
||||
|
||||
option optimize_for = CODE_SIZE;
|
||||
option java_package = "com.spotify.transfer";
|
||||
|
||||
message TransferState {
|
||||
optional ContextPlayerOptions options = 1;
|
||||
optional Playback playback = 2;
|
||||
optional Session current_session = 3;
|
||||
optional Queue queue = 4;
|
||||
optional int64 creation_timestamp = 5;
|
||||
}
|
||||
Reference in New Issue
Block a user