The myTeamSpeak client protocol and its end-to-end encryption are reverse-engineered (docs/myteamspeak): an HTTP POST of a framed protobuf, a PBKDF2-HMAC-SHA512 login token and account key, an AES-GCM wrapped item key and AES-CTR items with a SHA-512 trailer. Options on desktop and Settings on Android gain a myTeamSpeak page: sign in and out, and the account's bookmarks and identities, each picked for import and marked when already here. The client stays signed in the way the official one does, keeping the derived token and key rather than the password; each read signs in afresh, and a sign-in the server no longer takes signs out. Nothing is written to the account. Items are the same Item_Data as the local TeamSpeak store, so they go through the existing decoder and importer; a bookmark chosen alone brings the identity it connects with, found by UUID or, as some name it, by the identity's name. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1214 lines
42 KiB
Protocol Buffer
1214 lines
42 KiB
Protocol Buffer
// 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);
|
|
}
|
|
|