// file myteamspeak_integration_common.proto package com.teamspeak.myteamspeak.proto.integration; message UserIntegrationSubscriptionInfoRequestData { .com.teamspeak.myteamspeak.proto.integration.IntegrationInfo integrations = 1; bytes signature = 2; uint64 timestamp = 3; string virtualserver_id = 4; } message IntegrationResponse { bytes integration_id = 1; .com.teamspeak.myteamspeak.proto.integration.IntegrationType type = 2; string special_information = 3; uint64 cache_valid_timestamp = 4; .com.teamspeak.myteamspeak.proto.integration.ResponseSpecifier response_specifier = 5; } message IntegrationResponseListData { repeated .com.teamspeak.myteamspeak.proto.integration.IntegrationResponse list = 1; } message IntegrationResponseList { .com.teamspeak.myteamspeak.proto.integration.IntegrationResponseListData data = 1; bytes signature = 2; bytes signing_certificate = 3; uint64 timestamp = 4; } message IntegrationInfo { repeated .com.teamspeak.myteamspeak.proto.integration.IntegrationInfo.Entry entry = 1; message Entry { bytes integration_id = 1; .com.teamspeak.myteamspeak.proto.integration.IntegrationType type = 2; } } message ResponseSpecifier { .com.teamspeak.myteamspeak.proto.integration.SpecifierType specifier_type = 1; string value = 2; } enum SpecifierType { SPECIFIER_TYPE_INVALID = 0; SUBSCRIPTION_TYPE = 1; RELATIONSHIP_TYPE = 2; TEST_RESPONSE_TYPE = 100; ANOTHER_TEST_RESPONSE_TYPE = 101; } enum IntegrationType { INTEGRATION_TYPE_INVALID = 0; TWITCH = 1; TEST_INTEGRATION = 100; } enum IntegrationBindingStatus { STATUS_INVALID = 0; STATUS_NOT_BOUND = 1; STATUS_BOUND = 2; STATUS_BINDING_IN_PROGRESS = 3; } enum IntegrationError { INTEGRATION_ERROR_INVALID = 0; INTEGRATION_ERROR_OK = 1; INTEGRATION_ERROR_INVALID_USER = 2; INTEGRATION_ERROR_INVALID_INTEGRATION = 3; INTEGRATION_ERROR_INVALID_INTEGRATION_ID = 4; INTEGRATION_ERROR_INVALID_PARAMETER = 5; INTEGRATION_ERROR_INTERNAL = 6; INTEGRATION_INFO_NOT_PRESENT_YET = 7; INTEGRATION_ERROR_SESSION_EXPIRED = 8; INTEGRATION_ERROR_SERVER_NOT_REACHABLE = 9; INTEGRATION_ERROR_PENDING_PROCESS = 10; INTEGRATION_ERROR_INVALID_TIMESTAMP = 11; } // file myteamspeak_integration_user.proto package com.teamspeak.myteamspeak.proto.integration; import "myteamspeak_integration_common.proto"; message RequestIntegrationUserStatus { string session = 1; } message IntegrationUserDataEntry { .com.teamspeak.myteamspeak.proto.integration.IntegrationBindingStatus binding_status = 1; string integration_text = 4; .com.teamspeak.myteamspeak.proto.integration.IntegrationType type = 5; bytes integration_id = 6; } message IntegrationUserData { repeated .com.teamspeak.myteamspeak.proto.integration.IntegrationUserDataEntry integrations = 1; } message IntegrationStatusUserResponse { .com.teamspeak.myteamspeak.proto.integration.IntegrationError error = 1; .com.teamspeak.myteamspeak.proto.integration.IntegrationUserData data = 2; } message RequestBindData { string session = 1; .com.teamspeak.myteamspeak.proto.integration.RequestBind data = 2; } message RequestBind { bytes integration_id = 1; .com.teamspeak.myteamspeak.proto.integration.IntegrationType type = 2; bytes virtualserver_key = 3; bytes signature = 4; uint64 timestamp = 5; string virtualserver_id = 6; } message RequestUnbindData { string session = 1; .com.teamspeak.myteamspeak.proto.integration.RequestUnbind data = 2; } message RequestUnbind { bytes integration_id = 1; bytes signature = 2; uint64 timestamp = 3; string virtualserver_id = 4; } message RequestBindResponse { .com.teamspeak.myteamspeak.proto.integration.IntegrationError error = 1; } message UserIntegrationSubscriptionInfoRequest { string session_id = 1; .com.teamspeak.myteamspeak.proto.integration.UserIntegrationSubscriptionInfoRequestData data = 2; } message UserIntegrationSubscriptionInfoResponse { .com.teamspeak.myteamspeak.proto.integration.IntegrationError error = 1; uint32 seconds_to_wait = 2; .com.teamspeak.myteamspeak.proto.integration.IntegrationResponseList integration_response = 3; } service IntegrationUserService { rpc getIntegrationUserStatus(.com.teamspeak.myteamspeak.proto.integration.RequestIntegrationUserStatus) returns (.com.teamspeak.myteamspeak.proto.integration.IntegrationStatusUserResponse); rpc requestBindIntegration(.com.teamspeak.myteamspeak.proto.integration.RequestBindData) returns (.com.teamspeak.myteamspeak.proto.integration.RequestBindResponse); rpc requestUnbindIntegration(.com.teamspeak.myteamspeak.proto.integration.RequestUnbindData) returns (.com.teamspeak.myteamspeak.proto.integration.RequestBindResponse); rpc getUserIntegrationSubscriptionInfo(.com.teamspeak.myteamspeak.proto.integration.UserIntegrationSubscriptionInfoRequest) returns (.com.teamspeak.myteamspeak.proto.integration.UserIntegrationSubscriptionInfoResponse); } // file myteamspeak_addon.proto package com.teamspeak.myteamspeak.proto.addon; message GetDownload { string addonUUID = 1; int32 currentVersion = 2; .com.teamspeak.myteamspeak.proto.addon.Platform platform = 3; .com.teamspeak.myteamspeak.proto.addon.ClientApi clientapi = 4; .com.teamspeak.myteamspeak.proto.addon.ClientApi minClientapi = 5; } message Download { .com.teamspeak.myteamspeak.proto.addon.FileData downloadInfo = 1; int32 currentVersion = 2; .com.teamspeak.myteamspeak.proto.addon.ReturnCode returnCode = 3; repeated string addonList = 4; string hostUrl = 5; } message ClientApi { int32 plugin = 1; int32 style = 2; int32 soundpack = 3; int32 translation = 4; int32 iconpack = 5; } message FileData { string url = 1; int32 size = 2; string sha1 = 3; } enum ApiType { UNKNOWN_APITYPE = 0; PLUGIN = 1; STYLE = 2; SOUNDPACK = 3; TRANSLATION = 4; ICONPACK = 5; GROUPADDON = 6; } enum ReturnCode { UNKNOWN_RETURNCODE = 0; ADDON_NOT_FOUND = 1; PLATFORM_NOT_FOUND = 2; UPTODATE = 3; UPDATE = 4; GROUP = 5; } enum Platform { UNKNOWN_PLATFORM = 0; WINDOWS_X86 = 1; WINDOWS_X86_64 = 2; LINUX_X86 = 3; LINUX_X86_64 = 4; OSX_X86 = 5; OSX_X86_64 = 6; } enum Status { UNKNOWN_STATUS = 0; DRAFT = 1; PENDING = 2; APPROVED = 3; REJECTED = 4; REVIEW = 5; TRASHED = 6; } service UserAddonService { rpc requestDownload(.com.teamspeak.myteamspeak.proto.addon.GetDownload) returns (.com.teamspeak.myteamspeak.proto.addon.Download); } // file myteamspeak_common.proto package com.teamspeak.myteamspeak.proto; import "myteamspeak_avatar_common.proto"; import "synchronization_common.proto"; message Limits { uint32 limitID = 1; int32 value = 2; } message LoginData { string email = 1; string password = 2; bool skipSession = 3; .com.teamspeak.myteamspeak.proto.LoginOrigin origin = 4; .com.teamspeak.myteamspeak.proto.synchronization.Sync_Version sync_version = 5; } message MyTeamSpeakIdData { bytes user_public_key = 1; .com.teamspeak.myteamspeak.proto.MyTeamSpeakIdData.UserPrivateKey user_private_key = 2; uint64 account_creation_time = 3; bytes my_teamspeak_id = 4; bytes public_signature = 5; message UserPrivateKey { bytes encrypted_user_private_key = 1; bytes decrypted_user_private_key = 2; } } message MyTSUserCertificate { bytes cert = 1; } message LoginSession { bytes key = 1; string session = 2; string uuid = 4; repeated .com.teamspeak.myteamspeak.proto.Limits limits = 3; int64 purge = 6; .com.teamspeak.myteamspeak.proto.AddonDevStatus addon_dev = 7; string username = 8; .com.teamspeak.myteamspeak.proto.ErrorCommon error = 5; .com.teamspeak.myteamspeak.proto.MyTeamSpeakIdData myts_id_data = 9; .com.teamspeak.myteamspeak.proto.MyTSUserCertificate mytsid_user_cert = 10; .com.teamspeak.myteamspeak.proto.AvatarData user_avatar = 11; string push_token = 12; .com.teamspeak.myteamspeak.proto.Permissions permission = 13; .com.teamspeak.myteamspeak.proto.UserData user_data = 14; .com.teamspeak.myteamspeak.proto.LoginSession.AlternativeLoginInformation alternative_login_info = 16; message AlternativeLoginInformation { string renewal_token = 1; } } message Session { string session = 1; } message EncryptionKey { .com.teamspeak.myteamspeak.proto.LoginData LoginData = 1; bytes key = 2; } message EncryptionKeyResult { bool success = 1; .com.teamspeak.myteamspeak.proto.ErrorCommon errorcode = 2; string error = 3; } message LoginStatus { .com.teamspeak.myteamspeak.proto.ErrorCommon error = 1; string uuid = 2; } message Permissions { repeated string permission = 1; } message UserData { string description = 1; } message AuthTokenRequest { string email = 1; string password = 2; } message AuthTokenReply { string auth_token = 1; .com.teamspeak.myteamspeak.proto.ErrorCommon error = 3; } message AuthTokenLogin { string auth_token = 1; string device_description = 2; } message RenewalTokenLogin { string renewal_token = 1; string auth_token = 2; } message AuthToken { string id = 1; string mytsid = 2; } message RenewalToken { string token = 1; .com.teamspeak.myteamspeak.proto.AuthToken auth_token = 2; } enum AddonDevStatus { UNKNOWN_ADDONDEVSTATUS = 0; REQUESTED = 1; CONFIRMATION_PENDING = 2; CONFIRMED = 5; APPROVED = 3; REJECTED = 4; BANNED = 6; } enum LoginOrigin { CLIENT = 0; WEBSITE = 1; } enum ErrorCommon { UNKNOWN_ERRORCOMMON = 0; ERROR_FE_UNKNOWN_METHOD = 100; ERROR_FE_UNKNOWN_DATA = 101; ERROR_SESSION_OK = 102; ERROR_SESSION_EXPIRED = 103; ERROR_SESSION_SERVER_OFFLINE = 104; ERROR_LOGIN_OK = 200; ERROR_LOGIN_OFFLINE = 201; ERROR_LOGIN_FAILED = 202; ERROR_LOGIN_EMAIL_PENDING = 203; ERROR_SESSION_DELETED_OK = 204; ERROR_PUSH_TOKEN_CREATION = 205; ERROR_AUTH_TOKEN_INVALID = 206; ERRIR_RENEWAL_TOKEN_INVALID = 207; } // file myteamspeak_integration_static_info.proto package com.teamspeak.myteamspeak.proto.integration; import "myteamspeak_integration_common.proto"; message StaticIntegrationResponseInformation { .com.teamspeak.myteamspeak.proto.integration.ResponseType type = 1; string response_type_name = 2; repeated string possible_values = 3; } message StaticIntegrationInformation { string integration_name = 1; string integration_icon = 2; .com.teamspeak.myteamspeak.proto.integration.IntegrationType type = 3; uint32 version = 4; repeated .com.teamspeak.myteamspeak.proto.integration.StaticIntegrationResponseInformation available_responses = 5; } message StaticIntegrationInformationList { repeated .com.teamspeak.myteamspeak.proto.integration.StaticIntegrationInformation static_integrations = 1; } enum ResponseType { invalid = 0; SUBSCRIPTION = 1; RELATIONSHIP = 2; TEST_RESPONSE = 100; ANOTHER_TEST_RESPONSE = 101; } // file myteamspeak_login.proto package com.teamspeak.myteamspeak.proto.login; import "myteamspeak_common.proto"; message requestExpireTime { string uuid = 1; } message replyExpireTime { int64 purge = 1; } message AuthTokenListRequest { string email = 1; string password = 2; } message AuthTokenListReply { repeated .com.teamspeak.myteamspeak.proto.login.AuthTokenListReply.Entry entries = 1; message Entry { uint64 creation = 1; string device_description = 2; string id = 3; } } message AuthTokenExpireRequest { string email = 1; string password = 2; repeated string id = 3; } message AuthTokenExpireReply { bool success = 1; string error_msg = 2; } message AccountStatusInfo { string email = 1; string reason = 2; } message AccountStatusReply { bool success = 1; string error_msg = 2; } message AccountEmail { string email = 1; } message SuspensionReasonForUserReply { string client_id = 1; repeated .com.teamspeak.myteamspeak.proto.login.SuspensionReasonForUserReply.Reason reasons = 2; message Reason { string email = 1; int64 timestamp = 2; string reason = 3; } } service LoginService { rpc session(.com.teamspeak.myteamspeak.proto.Session) returns (.com.teamspeak.myteamspeak.proto.LoginStatus); rpc deleteSession(.com.teamspeak.myteamspeak.proto.Session) returns (.com.teamspeak.myteamspeak.proto.LoginStatus); rpc login(.com.teamspeak.myteamspeak.proto.LoginData) returns (.com.teamspeak.myteamspeak.proto.LoginSession); rpc requestAuthToken(.com.teamspeak.myteamspeak.proto.AuthTokenRequest) returns (.com.teamspeak.myteamspeak.proto.AuthTokenReply); rpc loginWithAuthToken(.com.teamspeak.myteamspeak.proto.AuthTokenLogin) returns (.com.teamspeak.myteamspeak.proto.LoginSession); rpc loginWithRenewalToken(.com.teamspeak.myteamspeak.proto.RenewalTokenLogin) returns (.com.teamspeak.myteamspeak.proto.LoginSession); rpc getAuthTokenList(.com.teamspeak.myteamspeak.proto.login.AuthTokenListRequest) returns (.com.teamspeak.myteamspeak.proto.login.AuthTokenListReply); rpc expireAuthTokenAccess(.com.teamspeak.myteamspeak.proto.login.AuthTokenExpireRequest) returns (.com.teamspeak.myteamspeak.proto.login.AuthTokenExpireReply); rpc deleteAccount(.com.teamspeak.myteamspeak.proto.login.AccountStatusInfo) returns (.com.teamspeak.myteamspeak.proto.login.AccountStatusReply); rpc suspendAccount(.com.teamspeak.myteamspeak.proto.login.AccountStatusInfo) returns (.com.teamspeak.myteamspeak.proto.login.AccountStatusReply); rpc reactivateAccount(.com.teamspeak.myteamspeak.proto.login.AccountStatusInfo) returns (.com.teamspeak.myteamspeak.proto.login.AccountStatusReply); rpc listSuspensionReasonForUser(.com.teamspeak.myteamspeak.proto.login.AccountEmail) returns (.com.teamspeak.myteamspeak.proto.login.SuspensionReasonForUserReply); } // file myteamspeak_user.proto package com.teamspeak.myteamspeak.proto.user; import "google/protobuf/any.proto"; import "myteamspeak_avatar_common.proto"; message BackupKeyData { .com.teamspeak.myteamspeak.proto.user.ReturnCode returncode = 1; bytes backupkey = 2; } message UserData { .com.teamspeak.myteamspeak.proto.user.UserLogin login = 1; string username = 2; bytes key = 3; bytes backupkey = 4; .com.teamspeak.myteamspeak.proto.user.UserImg image = 5; .com.teamspeak.myteamspeak.proto.user.UserLogin login_old = 6; bool force_key_overwrite = 8; bool delete_mytsid_data = 9; string session = 10; } message UserLogin { string email = 1; string password = 2; } message UserImg { } message Session { string session = 1; } message BadgeCode { string code = 1; string session = 2; } message UserBadge { string uuid = 1; int64 received = 2; } message SignedUserBadge { .com.teamspeak.myteamspeak.proto.user.UserBadge badge = 1; bytes sign = 2; uint64 sign_timestamp = 3; } message UserBadgesSignedResponse { .com.teamspeak.myteamspeak.proto.user.UserBadgesSignedList list = 1; .com.teamspeak.myteamspeak.proto.user.ErrorReturnCode error_code = 2; } message UserBadgesSignedList { repeated .com.teamspeak.myteamspeak.proto.user.SignedUserBadge badges = 1; } message UserBadgesList { repeated .com.teamspeak.myteamspeak.proto.user.UserBadge badges = 1; .com.teamspeak.myteamspeak.proto.user.ErrorReturnCode error_code = 2; } message RedeemBadgeCodeResponse { bool success = 1; string error = 2; .com.teamspeak.myteamspeak.proto.user.ErrorReturnCode error_code = 3; string badge_uuid = 4; } message ReturnCode { bool success = 1; string error = 2; .com.teamspeak.myteamspeak.proto.user.ErrorReturnCode error_code = 3; string client_id = 4; } message NewUserPublicKeyData { .com.teamspeak.myteamspeak.proto.user.Session session = 1; bytes user_public_key = 2; bytes proof = 3; bytes encrypted_user_private_key = 4; } message NewUserPublicKeyDataResponse { uint64 account_creation_time = 1; bytes myts_id = 2; bytes public_signature = 3; .com.teamspeak.myteamspeak.proto.user.ErrorReturnCode error = 4; } message AvatarRequestID { .google.protobuf.Any key = 1; message MYTSKey { bytes id = 1; } message KIDKey { string id = 1; } } message RequestContactsAvatarInfoRequest { string session = 1; repeated .com.teamspeak.myteamspeak.proto.user.AvatarRequestID id = 2; } message RequestContactsAvatarInfoResponse { repeated .com.teamspeak.myteamspeak.proto.user.RequestContactsAvatarInfoResponse.AvatarInfoMap data = 1; .com.teamspeak.myteamspeak.proto.user.ErrorReturnCode error_code = 2; message AvatarInfoMap { .com.teamspeak.myteamspeak.proto.user.AvatarRequestID id = 1; .com.teamspeak.myteamspeak.proto.AvatarData info = 2; } } message SpawnVoiceServerLocationRequest { string session = 1; string ip_address = 2; } message SpawnVoiceServerLocationResponse { .com.teamspeak.myteamspeak.proto.user.ReturnCode return_code = 1; repeated .com.teamspeak.myteamspeak.proto.user.SpawnVoiceServerLocation possible_location = 2; } message SpawnVoiceServerLocation { repeated string address = 1; string status = 2; int64 connected_clients = 3; int64 used_slots = 4; int64 used_channels = 5; int64 used_server = 6; } message SpawnedVoiceServerListResponse { .com.teamspeak.myteamspeak.proto.user.ReturnCode return_code = 2; repeated .com.teamspeak.myteamspeak.proto.user.VoiceServerPayload payload = 3; } message SpawnedVoiceServer { string server_uid = 1; repeated string address = 2; } message VoiceServerRequest { string session = 1; .com.teamspeak.myteamspeak.proto.user.VoiceServerPayload payload = 2; } message VoiceServerResponse { .com.teamspeak.myteamspeak.proto.user.ReturnCode return_code = 1; .com.teamspeak.myteamspeak.proto.user.VoiceServerPayload payload = 2; } message VoiceServerOperation { string operation = 1; .com.teamspeak.myteamspeak.proto.user.VoiceServerPayload payload = 2; } message VoiceServerPayload { string virtualserver_uuid = 1; string virtualserver_name = 2; string virtualserver_welcomemessage = 3; uint32 virtualserver_maxclients = 4; string virtualserver_password = 5; string virtualserver_hostname = 6; uint32 virtualserver_port = 7; string virtualserver_token = 8; string virtualserver_status = 9; uint32 virtualserver_uptime = 10; uint32 virtualserver_clientsonline = 11; uint32 virtualserver_total_ping = 12; string virtualserver_location = 13; string virtualserver_unique_identifier = 14; } message RequestUploadAvatarRequest { string session = 1; repeated .com.teamspeak.myteamspeak.proto.user.RequestUploadAvatarRequest.AvatarImageMap image_names = 2; message AvatarImageMap { .com.teamspeak.myteamspeak.proto.AvatarState state = 1; string name = 2; } } message RequestUploadAvatarResponse { .com.teamspeak.myteamspeak.proto.AvatarError error = 1; } message RequestDeleteAvatarInfoRequest { string session = 1; repeated .com.teamspeak.myteamspeak.proto.AvatarState images = 2; } message AvatarSignedUrlRequest { string session = 1; repeated string file_names = 2; } message AvatarSignedUrlResponse { .com.teamspeak.myteamspeak.proto.user.ReturnCode return_code = 1; repeated .com.teamspeak.myteamspeak.proto.user.AvatarSignedUrlResponse.SignedUrl signed_urls = 2; message SignedUrl { string file_name = 1; string signed_url = 2; } } message EmailChange { string email = 1; string session = 2; string validationKey = 3; bytes key = 4; string newPw = 5; string currentPw = 6; } message ResetAccountRequest { string session = 1; bytes key = 2; bytes backup_key = 3; .com.teamspeak.myteamspeak.proto.user.NewUserPublicKeyData myts_id = 4; } message UpdateUserDescriptionRequest { string session = 1; string description = 2; } message UploadFileRequest { string session = 1; string user_id = 2; string room_id = 3; } message DownloadFileRequest { string session = 1; string user_id = 2; string room_id = 3; string file_id = 4; } message FileInfo { bool success = 1; .com.teamspeak.myteamspeak.proto.user.ErrorReturnCode error = 2; string user_id = 3; string room_id = 4; string file_id = 5; string signed_url = 6; } message OtpSecretResponse { string otp_secret = 1; bytes otp_qr_code_image = 2; string otp_qr_code_mime_type = 3; .com.teamspeak.myteamspeak.proto.user.ReturnCode return_code = 4; } message UpdateTwoFactorAuthTypeRequest { string session = 1; .com.teamspeak.myteamspeak.proto.user.AuthType auth_type = 2; } message TwoFactorAuthTypeResponse { .com.teamspeak.myteamspeak.proto.user.AuthType auth_type = 1; .com.teamspeak.myteamspeak.proto.user.ReturnCode return_code = 2; } message RegisterFirebasePush { string session = 1; string deviceToken = 2; } enum AuthType { NONE = 0; OTP = 1; } enum ErrorReturnCode { UNKNOWN_ERRORRETURNCODE = 0; ERROR_MISSING_REQUIRED_FIELD = 100; ERROR_EMAIL_ALREADY_TAKEN = 101; ERROR_UUID_COLLISION = 102; ERROR_DATABASE = 103; ERROR_LOGIN_FAILED = 104; ERROR_EMPTY_KEY = 105; ERROR_EMAIL_INVALID = 106; ERROR_NOT_ALLOWED = 107; ERROR_USERNAME_ALREADY_TAKEN = 108; ERROR_SESSION_EXPIRED = 109; ERROR_CODE_INVALID = 110; ERROR_USERNAME_INVALID = 111; ERROR_BADGE_ALREADY_PRESENT = 112; ERROR_KEY_ALREADY_PRESENT = 113; ERROR_INVALID_KEY = 114; ERROR_INVALID_PROOF = 115; ERROR_INTERNAL = 116; ERROR_QUOTA_EXCEEDED = 117; ERROR_CHANGE_EMAIL_FAILED = 118; ERROR_CHANGE_EMAIL_FAILED_MISSING_FIELD = 119; ERROR_CHANGE_EMAIL_FAILED_FUNCTIONAL_EMAIL_FORMAT = 120; ERROR_CHANGE_EMAIL_FAILED_FUNCTIONAL_EQUAL_EMAIL = 121; ERROR_CHANGE_EMAIL_FAILED_FUNCTIONAL_TARGET_EXISTS = 122; ERROR_CHANGE_EMAIL_FAILED_FUNCTIONAL_ALREADY_PENDING = 123; ERROR_VOICE_SERVER_START_FAILED = 127; ERROR_VOICE_SERVER_STOP_FAILED = 128; ERROR_VOICE_SERVER_READ_FAILED = 129; ERROR_VOICE_SERVER_TOO_MANY_REQUESTS = 130; ERROR_VOICE_SERVER_CREATE_FAILED = 131; ERROR_VOICE_SERVER_DELETE_FAILED = 132; } service UserAccountService { rpc addUser(.com.teamspeak.myteamspeak.proto.user.UserData) returns (.com.teamspeak.myteamspeak.proto.user.ReturnCode); rpc updateUser(.com.teamspeak.myteamspeak.proto.user.UserData) returns (.com.teamspeak.myteamspeak.proto.user.ReturnCode); rpc getBackupKey(.com.teamspeak.myteamspeak.proto.user.UserLogin) returns (.com.teamspeak.myteamspeak.proto.user.BackupKeyData); rpc getBadges(.com.teamspeak.myteamspeak.proto.user.Session) returns (.com.teamspeak.myteamspeak.proto.user.UserBadgesList); rpc redeemBadgeCode(.com.teamspeak.myteamspeak.proto.user.BadgeCode) returns (.com.teamspeak.myteamspeak.proto.user.RedeemBadgeCodeResponse); rpc setNewUserPublicKey(.com.teamspeak.myteamspeak.proto.user.NewUserPublicKeyData) returns (.com.teamspeak.myteamspeak.proto.user.NewUserPublicKeyDataResponse); rpc requestContactsAvatar(.com.teamspeak.myteamspeak.proto.user.RequestContactsAvatarInfoRequest) returns (.com.teamspeak.myteamspeak.proto.user.RequestContactsAvatarInfoResponse); rpc getSignedBadges(.com.teamspeak.myteamspeak.proto.user.Session) returns (.com.teamspeak.myteamspeak.proto.user.UserBadgesSignedResponse); rpc requestVoiceServer(.com.teamspeak.myteamspeak.proto.user.VoiceServerRequest) returns (.com.teamspeak.myteamspeak.proto.user.VoiceServerResponse); rpc requestVoiceServerLocation(.com.teamspeak.myteamspeak.proto.user.SpawnVoiceServerLocationRequest) returns (.com.teamspeak.myteamspeak.proto.user.SpawnVoiceServerLocationResponse); rpc deleteSpawnedVoiceServer(.com.teamspeak.myteamspeak.proto.user.VoiceServerRequest) returns (.com.teamspeak.myteamspeak.proto.user.ReturnCode); rpc listSpawnedVoiceServer(.com.teamspeak.myteamspeak.proto.user.Session) returns (.com.teamspeak.myteamspeak.proto.user.SpawnedVoiceServerListResponse); rpc startVoiceServer(.com.teamspeak.myteamspeak.proto.user.VoiceServerRequest) returns (.com.teamspeak.myteamspeak.proto.user.VoiceServerResponse); rpc stopVoiceServer(.com.teamspeak.myteamspeak.proto.user.VoiceServerRequest) returns (.com.teamspeak.myteamspeak.proto.user.VoiceServerResponse); rpc readVoiceServerStatus(.com.teamspeak.myteamspeak.proto.user.VoiceServerRequest) returns (.com.teamspeak.myteamspeak.proto.user.VoiceServerResponse); rpc requestAvatarSignedUrl(.com.teamspeak.myteamspeak.proto.user.AvatarSignedUrlRequest) returns (.com.teamspeak.myteamspeak.proto.user.AvatarSignedUrlResponse); rpc requestUploadAvatar(.com.teamspeak.myteamspeak.proto.user.RequestUploadAvatarRequest) returns (.com.teamspeak.myteamspeak.proto.user.RequestUploadAvatarResponse); rpc requestDeleteAvatar(.com.teamspeak.myteamspeak.proto.user.RequestDeleteAvatarInfoRequest) returns (.com.teamspeak.myteamspeak.proto.user.ReturnCode); rpc changeEmail(.com.teamspeak.myteamspeak.proto.user.EmailChange) returns (.com.teamspeak.myteamspeak.proto.user.ReturnCode); rpc resetAccount(.com.teamspeak.myteamspeak.proto.user.ResetAccountRequest) returns (.com.teamspeak.myteamspeak.proto.user.ReturnCode); rpc updateUserDescription(.com.teamspeak.myteamspeak.proto.user.UpdateUserDescriptionRequest) returns (.com.teamspeak.myteamspeak.proto.user.ReturnCode); rpc requestUploadFile(.com.teamspeak.myteamspeak.proto.user.UploadFileRequest) returns (.com.teamspeak.myteamspeak.proto.user.FileInfo); rpc requestDownloadFile(.com.teamspeak.myteamspeak.proto.user.DownloadFileRequest) returns (.com.teamspeak.myteamspeak.proto.user.FileInfo); rpc generateOtpSetupSecret(.com.teamspeak.myteamspeak.proto.user.Session) returns (.com.teamspeak.myteamspeak.proto.user.OtpSecretResponse); rpc updateTwoFactorAuthType(.com.teamspeak.myteamspeak.proto.user.UpdateTwoFactorAuthTypeRequest) returns (.com.teamspeak.myteamspeak.proto.user.ReturnCode); rpc getTwoFactorAuthType(.com.teamspeak.myteamspeak.proto.user.Session) returns (.com.teamspeak.myteamspeak.proto.user.TwoFactorAuthTypeResponse); rpc registerFirebasePush(.com.teamspeak.myteamspeak.proto.user.RegisterFirebasePush) returns (.com.teamspeak.myteamspeak.proto.user.ReturnCode); } // file synchronization_common.proto package com.teamspeak.myteamspeak.proto.synchronization; message Sync_Request_ItemClasses { string session = 1; repeated .com.teamspeak.myteamspeak.proto.synchronization.Sync_ItemClasses_Data classes = 2; string globalversion = 3; .com.teamspeak.myteamspeak.proto.synchronization.Sync_Version sync_version = 4; } message Sync_Reply_ItemClasses { .com.teamspeak.myteamspeak.proto.synchronization.SyncStatus status = 1; repeated .com.teamspeak.myteamspeak.proto.synchronization.Sync_ItemClasses_Data classes = 2; string globalversion = 3; } message Sync_ItemClasses_Data { .com.teamspeak.myteamspeak.proto.synchronization.Item_Class itemclass = 1; string version = 2; repeated .com.teamspeak.myteamspeak.proto.synchronization.Sync_ItemClasses_Data_Detail detail = 3; bool not_in_db = 4; } message Sync_ItemClasses_Data_Detail { string item_uuid = 1; string item_version = 2; bytes item_blob = 3; bool item_delte_on_server = 4; } enum SyncStatus { UNKNOWN_SYNCSTATUS = 0; ERROR_FE_UNKNOWN_METHOD = 100; ERROR_FE_UNKNOWN_DATA = 101; ERROR_SESSION_EXPIRED = 102; ERROR_CRITICAL = 103; IN_SYNC = 300; NOT_IN_SYNC = 301; NOT_IN_DB = 302; COLLISION = 303; OVERLIMIT = 304; } enum Item_Class { BOOKMARK = 0; IDENTITY = 1; WHISPER_LIST = 2; HOTKEY_PROFILE = 3; ADD_ON = 4; CONFIG = 5; ITEM_FOLDER = 6; ROOM_CATEGORY = 7; } enum Sync_Version { DEFAULT = 0; V1_1 = 1; } // file myteamspeak_messenger_connector_client.proto package com.teamspeak.myteamspeak.proto.messengerconnector; import "google/protobuf/any.proto"; message RequestCreateMessengerAccountRequest { string session = 1; } message RequestCreateMessengerAccountReply { .com.teamspeak.myteamspeak.proto.messengerconnector.MessengerConnectorReturnCodesClient return_code = 1; } message InformContactsAvatarHasChangedRequest { string client_id = 1; } message UsernameHasChangedRequest { string client_id = 1; string username = 2; } message GenericMessageWrapper { .google.protobuf.Any message = 1; } enum MessengerConnectorReturnCodesClient { ERROR_MESSENGER_CLIENT_CODE_INVALID = 0; SUCCESS_ACCOUNT_CREATED = 1; ERROR_ACCOUNT_CREATION_FAILED = 100; ERROR_ACCOUNT_ALREADY_EXISTS = 101; } service MessengerConnectorClientService { rpc requestCreateMessengerAccount(.com.teamspeak.myteamspeak.proto.messengerconnector.RequestCreateMessengerAccountRequest) returns (.com.teamspeak.myteamspeak.proto.messengerconnector.RequestCreateMessengerAccountReply); } // file myteamspeak_avatar_common.proto package com.teamspeak.myteamspeak.proto; import "google/protobuf/any.proto"; message AvatarData { .com.teamspeak.myteamspeak.proto.AvatarInfo info = 1; uint64 timestamp = 2; bytes sign = 3; .google.protobuf.Any optional = 4; } message OptionalAvatarDataContactInfo { bytes mytsid = 1; bytes user_cert = 2; } message AvatarInfo { repeated .com.teamspeak.myteamspeak.proto.AvatarInfo.AvatarMap map = 1; message AvatarMap { .com.teamspeak.myteamspeak.proto.AvatarState state = 1; string name = 2; } } enum AvatarError { AVATAR_ERROR_INVALID = 0; AVATAR_ERROR_OK = 1; AVATAR_ERROR_CRITICAL = 2; AVATAR_SESSION_INVALID = 3; } enum AvatarState { AVATAR_STATE_INVALID = 0; AVATAR_STATE_DND = 1; AVATAR_STATE_ONLINE = 2; AVATAR_STATE_AWAY = 3; AVATAR_STATE_OFFLINE = 4; } // file myteamspeak_push.proto package com.teamspeak.myteamspeak.proto.push; import "google/protobuf/any.proto"; message IntermediateData { string uuid = 1; .google.protobuf.Any payload = 2; } message PushNotification { .google.protobuf.Any payload = 1; } message SimpleNotification { .com.teamspeak.myteamspeak.proto.push.SimpleNotificationType type = 1; bool relogin_neccessary = 2; } message ContactAvatarChanged { repeated string kid = 1; } message TsChatAvatarChanged { repeated bytes mytsid = 1; } message AuthTokenUsed { string id_hash = 1; } enum SimpleNotificationType { SIMPLE_NOTIFICATION_TYPE_INVALID = 0; SIMPLE_NOTIFICATION_SYNC_DATA_CHANGED = 1; SIMPLE_NOTIFICATION_SESSION_EXPIRED = 2; SIMPLE_NOTIFICATION_CONTACT_HOMEBASE_CHANGED = 3; } // file myteamspeak_tschat.proto package com.teamspeak.myteamspeak.proto.tschat; message GroupSessionRequest { .com.teamspeak.myteamspeak.proto.tschat.AuthenticatedUser user = 1; repeated .com.teamspeak.myteamspeak.proto.tschat.GroupSession group_sessions = 2; } message GroupSessionResponse { .com.teamspeak.myteamspeak.proto.tschat.ErrorHandling error = 1; repeated .com.teamspeak.myteamspeak.proto.tschat.GroupSession group_sessions = 2; } message GroupSession { string room_id = 1; string shared_session_id = 2; string cipher_text = 3; } message AuthenticatedUser { string session = 1; string matrix_id = 2; } message Contact { string ts_chat_identifier = 1; string note = 2; string matrix_id = 3; repeated .com.teamspeak.myteamspeak.proto.tschat.MxidHistory matrix_id_history = 4; } message MxidHistory { string matrix_id = 1; uint64 initiation_timestamp = 2; } message ContactList { repeated .com.teamspeak.myteamspeak.proto.tschat.Contact contacts = 1; .com.teamspeak.myteamspeak.proto.tschat.ErrorHandling error_handling = 2; } message ChatCredentials { string domain = 1; string username = 2; string password = 3; } message CreateAccountResponse { .com.teamspeak.myteamspeak.proto.tschat.ErrorHandling error_handling = 1; .com.teamspeak.myteamspeak.proto.tschat.ChatCredentials chat_credentials = 2; } message MoveRequest { .com.teamspeak.myteamspeak.proto.tschat.AuthenticatedUser user = 1; string new_matrix_id = 2; } message ContactRequest { .com.teamspeak.myteamspeak.proto.tschat.AuthenticatedUser user = 1; .com.teamspeak.myteamspeak.proto.tschat.Contact contact = 2; } message ContactRequestList { .com.teamspeak.myteamspeak.proto.tschat.AuthenticatedUser user = 1; repeated .com.teamspeak.myteamspeak.proto.tschat.Contact contacts = 2; } message IdentifierRequest { .com.teamspeak.myteamspeak.proto.tschat.AuthenticatedUser user = 1; .com.teamspeak.myteamspeak.proto.tschat.TschatIdentifierMapping ts_chat_identifier_mapping = 2; } message TschatIdentifierMapping { string ts_chat_identifier = 1; string matrix_id = 2; bool primary = 3; } message TschatIdentifierList { repeated .com.teamspeak.myteamspeak.proto.tschat.TschatIdentifierMapping ts_chat_identifier_mapping = 1; .com.teamspeak.myteamspeak.proto.tschat.ErrorHandling error_handling = 2; } message TschatIdentifierTagList { repeated string tag = 1; } message MatrixIdentifierToken { bytes signature = 1; bytes sign_certificate = 2; uint64 timestamp = 3; .com.teamspeak.myteamspeak.proto.tschat.TschatIdentifierTagList tags = 4; } message SignedAllowedIdentifier { .com.teamspeak.myteamspeak.proto.tschat.MatrixIdentifierToken token = 1; .com.teamspeak.myteamspeak.proto.tschat.ErrorHandling error = 2; } message ErrorHandling { .com.teamspeak.myteamspeak.proto.tschat.ChatRequestReturnCode return_code = 1; string message = 2; } enum ChatRequestReturnCode { CHATREQUESTRETURNCODE_ERROR_UNKNOWN = 0; CHATREQUESTRETURNCODE_SUCCESS = 1; CHATREQUESTRETURNCODE_CONNECTION = 2; CHATREQUESTRETURNCODE_INTERNAL = 3; CHATREQUESTRETURNCODE_REQUEST = 4; CHATREQUESTRETURNCODE_SESSION_EXPIRED = 5; } service ChatRequests { rpc createAccount(.com.teamspeak.myteamspeak.proto.tschat.AuthenticatedUser) returns (.com.teamspeak.myteamspeak.proto.tschat.CreateAccountResponse); rpc moveHome(.com.teamspeak.myteamspeak.proto.tschat.MoveRequest) returns (.com.teamspeak.myteamspeak.proto.tschat.ErrorHandling); rpc getContactList(.com.teamspeak.myteamspeak.proto.tschat.AuthenticatedUser) returns (.com.teamspeak.myteamspeak.proto.tschat.ContactList); rpc updateContact(.com.teamspeak.myteamspeak.proto.tschat.ContactRequest) returns (.com.teamspeak.myteamspeak.proto.tschat.ErrorHandling); rpc updateContactList(.com.teamspeak.myteamspeak.proto.tschat.ContactRequestList) returns (.com.teamspeak.myteamspeak.proto.tschat.ErrorHandling); rpc removeContact(.com.teamspeak.myteamspeak.proto.tschat.ContactRequest) returns (.com.teamspeak.myteamspeak.proto.tschat.ErrorHandling); rpc setPrimaryIdentifier(.com.teamspeak.myteamspeak.proto.tschat.IdentifierRequest) returns (.com.teamspeak.myteamspeak.proto.tschat.TschatIdentifierList); rpc addIdentifier(.com.teamspeak.myteamspeak.proto.tschat.IdentifierRequest) returns (.com.teamspeak.myteamspeak.proto.tschat.TschatIdentifierList); rpc removeIdentifier(.com.teamspeak.myteamspeak.proto.tschat.IdentifierRequest) returns (.com.teamspeak.myteamspeak.proto.tschat.TschatIdentifierList); rpc getActiveIdentifierList(.com.teamspeak.myteamspeak.proto.tschat.AuthenticatedUser) returns (.com.teamspeak.myteamspeak.proto.tschat.TschatIdentifierList); rpc getAllowedIdentifierList(.com.teamspeak.myteamspeak.proto.tschat.AuthenticatedUser) returns (.com.teamspeak.myteamspeak.proto.tschat.TschatIdentifierList); rpc getGroupSessionData(.com.teamspeak.myteamspeak.proto.tschat.GroupSessionRequest) returns (.com.teamspeak.myteamspeak.proto.tschat.GroupSessionResponse); rpc uploadGroupSessionData(.com.teamspeak.myteamspeak.proto.tschat.GroupSessionRequest) returns (.com.teamspeak.myteamspeak.proto.tschat.ErrorHandling); rpc clearAllGroupSessions(.com.teamspeak.myteamspeak.proto.tschat.AuthenticatedUser) returns (.com.teamspeak.myteamspeak.proto.tschat.ErrorHandling); rpc clearGroupSessions(.com.teamspeak.myteamspeak.proto.tschat.GroupSessionRequest) returns (.com.teamspeak.myteamspeak.proto.tschat.ErrorHandling); rpc requestSignedAllowedIdentifierList(.com.teamspeak.myteamspeak.proto.tschat.AuthenticatedUser) returns (.com.teamspeak.myteamspeak.proto.tschat.SignedAllowedIdentifier); } // file Sync_Serializing.proto package com.teamspeak.sync.proto; import "synchronization_common.proto"; message Bookmark_Data { string name = 1; string address = 2; uint32 port = 3; string nickname = 4; string phonetic_nickname = 5; string identity = 6; string server_password = 7; string default_channel = 8; string default_channel_password = 9; uint64 default_channel_id = 10; string capture_profile = 11; string playback_profile = 12; string hotkey_profile = 13; bool autoconnect = 14; string server_uid = 15; string server_icon = 16; string sound_pack = 17; bool show_server_query_clients = 18; .com.teamspeak.sync.proto.Bookmark_Data.SubscriptionMode subscription_mode = 19; repeated uint64 subscribed_channel_ids = 20; repeated .com.teamspeak.sync.proto.Bookmark_Data.ChannelPassword channel_passwords = 21; bool send_mytsid_on_server = 22; bool announce_to_chat = 23; string resolved_server_nickname = 24; message ChannelPassword { uint64 channel_id = 1; string password = 2; } enum SubscriptionMode { Undefined = 0; All = 1; Current = 2; } } message Identity_Data { string unique_identity = 1; string id_name = 2; string nickname = 3; string phonetic_nickname = 4; bool is_default = 5; } message Whisper_list_data { string uuid = 1; string name = 2; .com.teamspeak.sync.proto.Whisper_list_data.WhisperListType type = 3; int32 groupType = 4; int32 groupTargetMode = 5; uint64 targetGroupID = 6; string targetGroupName = 7; string targetServerUid = 8; string targetServerName = 9; repeated .com.teamspeak.sync.proto.Whisper_list_data.WhisperEntry whisperListEntries = 10; message WhisperEntry { .com.teamspeak.sync.proto.Whisper_list_data.WhisperEntry.WhisperEntryType type = 1; string name = 2; string uid = 3; enum WhisperEntryType { WET_INVALID = 0; WET_CLIENT = 1; WET_CHANNEL = 2; } } enum WhisperListType { WLT_INVALID = 0; WLT_LIST = 1; WLT_PREDEFINED = 2; } } message HotkeyProfile_data { string uuid = 1; string name = 2; repeated .com.teamspeak.sync.proto.HotkeyProfile_data.Hotkey hotkeys = 3; bool is_default = 4; message Hotkey { .com.teamspeak.sync.proto.HotkeyProfile_data.Hotkey.OS os = 3; int32 event_type = 4; string event_uuid = 5; string event_mode = 6; repeated .com.teamspeak.sync.proto.HotkeyProfile_data.Hotkey.KeyDef keys = 7; uint32 action_type = 8; string action_uuid = 9; bool action_discard = 10; string action_mode = 11; string action_flag = 12; string action_description = 13; string action_plugin = 14; string action_away_message = 15; string action_soundpack = 16; string action_plugincommand = 17; string action_plugindescription = 18; string action_deviceuid = 19; string action_devicename = 20; string action_target = 21; bool action_auto = 22; string action_profiles = 23; bool action_active_tab = 24; message KeyDef { string identifier = 1; string key = 2; } enum OS { Windows = 0; OSX = 1; Linux = 2; } } } message Add_on_data { string uuid = 1; bool enabled = 2; } message Chat_Credentials { string domain = 1; string username = 2; string password = 3; } message Config_data { int32 default_subscribe_mode = 1; repeated string user_badges = 2; bool show_user_badges = 3; bytes global_presence_token = 4; .com.teamspeak.sync.proto.Chat_Credentials tschat_credentials = 5; repeated .com.teamspeak.sync.proto.TSCHAT_DE_Data tschat_de_data = 7; } message Item_Folder { string folder_name = 1; .com.teamspeak.myteamspeak.proto.synchronization.Item_Class folder_type = 2; } message Room_Category { string name = 1; repeated string ids = 2; } message Item_Data { // oneof item_content string item_uuid = 2; string sync_version_uuid = 3; .com.teamspeak.sync.proto.Item_Data.Manipulation_Flag manipulated = 4; string last_known_version = 5; uint32 item_type = 6; string parent = 7; string sort_order = 8; uint64 timestamp = 9; .com.teamspeak.sync.proto.Bookmark_Data bookmark = 16; [oneof 0] .com.teamspeak.sync.proto.Identity_Data identity = 17; [oneof 0] .com.teamspeak.sync.proto.Whisper_list_data whisperlist = 18; [oneof 0] .com.teamspeak.sync.proto.HotkeyProfile_data hotkeyprofile = 19; [oneof 0] .com.teamspeak.sync.proto.Add_on_data add_on = 20; [oneof 0] .com.teamspeak.sync.proto.Config_data config = 21; [oneof 0] .com.teamspeak.sync.proto.Item_Folder item_folder = 22; [oneof 0] .com.teamspeak.sync.proto.Room_Category room_category = 23; [oneof 0] enum Manipulation_Flag { ITEM_ADDED = 0; ITEM_CHANGED = 1; ITEM_DELETED = 2; ITEM_NOT_MANIPULATED = 3; } } message TSCHAT_DE_Data { string url = 1; string identity = 2; string username = 3; string server_id = 4; string address = 5; string port = 6; string name = 7; } // file Account_Serializing.proto package com.teamspeak.account.proto; import "myteamspeak_common.proto"; import "myteamspeak_integration_common.proto"; import "myteamspeak_avatar_common.proto"; import "myteamspeak_tschat.proto"; message Account_Session { string id = 1; } message Account_Data { string email = 1; string password = 2; string uuid = 3; string user_name = 4; bytes encryption_password = 5; string global_items_uuid = 10; string class_bookmark_version_uuid = 11; string class_identity_version_uuid = 12; string class_add_on_version_uuid = 13; string class_config_version_uuid = 14; string class_hotkey_profile_version_uuid = 15; string class_whisper_list_version_uuid = 16; string class_item_folder_version_uuid = 17; string class_item_room_category_version_uuid = 18; .com.teamspeak.account.proto.Account_Session session = 50; repeated .com.teamspeak.myteamspeak.proto.Limits limits = 51; bytes key = 52; bytes backup_ed_key = 53; .com.teamspeak.myteamspeak.proto.MyTeamSpeakIdData myteamspeakid_data = 54; repeated .com.teamspeak.account.proto.Account_Data.IntegrationCache integration_cache = 55; .com.teamspeak.myteamspeak.proto.MyTSUserCertificate myteamspeakid_user_certificate = 56; .com.teamspeak.myteamspeak.proto.AvatarData avatar_data = 57; string push_token = 58; .com.teamspeak.account.proto.Permissions permissions = 59; .com.teamspeak.myteamspeak.proto.tschat.MatrixIdentifierToken identifier_token = 61; .com.teamspeak.account.proto.Account_Data.AuthTokenCache auth_token_cache = 62; string firebase_device_token = 63; message IntegrationCache { repeated string user_integration_id = 1; .com.teamspeak.myteamspeak.proto.integration.IntegrationResponseList integration_cache = 2; } message AuthTokenCache { string auth_token = 1; string renewal_token = 2; } } message TS_Sync_Account { string passphrase = 1; } message Permissions { repeated string permission = 1; } message MyTSID_Verification_Token { bytes verification_sign = 1; uint64 sign_timestamp = 2; bytes user_pub_key = 3; bytes pub_sign = 4; bytes pub_sign_cert = 5; uint64 ac_time = 6; bytes mytsid = 7; } message Auth_Token_Package { uint32 version = 1; string auth_token = 2; string encrypted_encryption_password = 3; string encryption_tag = 4; string iv = 5; } // file myteamspeak_synchronization.proto package com.teamspeak.myteamspeak.proto.synchronization; import "synchronization_common.proto"; service SynchronizationService { rpc requestServerItems(.com.teamspeak.myteamspeak.proto.synchronization.Sync_Request_ItemClasses) returns (.com.teamspeak.myteamspeak.proto.synchronization.Sync_Reply_ItemClasses); rpc synchronizeItems(.com.teamspeak.myteamspeak.proto.synchronization.Sync_Request_ItemClasses) returns (.com.teamspeak.myteamspeak.proto.synchronization.Sync_Reply_ItemClasses); }