492 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			Protocol Buffer
		
	
	
	
	
	
			
		
		
	
	
			492 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			Protocol Buffer
		
	
	
	
	
	
syntax = "proto3";
 | 
						|
 | 
						|
package proto;
 | 
						|
 | 
						|
option csharp_namespace = "DysonNetwork.Shared.Proto";
 | 
						|
 | 
						|
import "google/protobuf/timestamp.proto";
 | 
						|
import "google/protobuf/wrappers.proto";
 | 
						|
import "google/protobuf/field_mask.proto";
 | 
						|
import "google/protobuf/struct.proto";
 | 
						|
 | 
						|
import 'file.proto';
 | 
						|
import 'wallet.proto';
 | 
						|
 | 
						|
// Account represents a user account in the system
 | 
						|
message Account {
 | 
						|
    string id = 1;
 | 
						|
    string name = 2;
 | 
						|
    string nick = 3;
 | 
						|
    string language = 4;
 | 
						|
    string region = 18;
 | 
						|
    google.protobuf.Timestamp activated_at = 5;
 | 
						|
    bool is_superuser = 6;
 | 
						|
 | 
						|
    AccountProfile profile = 7;
 | 
						|
    optional SubscriptionReferenceObject perk_subscription = 16;
 | 
						|
    repeated AccountContact contacts = 8;
 | 
						|
    repeated AccountBadge badges = 9;
 | 
						|
    repeated AccountAuthFactor auth_factors = 10;
 | 
						|
    repeated AccountConnection connections = 11;
 | 
						|
    repeated Relationship outgoing_relationships = 12;
 | 
						|
    repeated Relationship incoming_relationships = 13;
 | 
						|
 | 
						|
    google.protobuf.Timestamp created_at = 14;
 | 
						|
    google.protobuf.Timestamp updated_at = 15;
 | 
						|
 | 
						|
    google.protobuf.StringValue automated_id = 17;
 | 
						|
}
 | 
						|
 | 
						|
// Enum for status attitude
 | 
						|
enum StatusAttitude {
 | 
						|
    STATUS_ATTITUDE_UNSPECIFIED = 0;
 | 
						|
    POSITIVE = 1;
 | 
						|
    NEGATIVE = 2;
 | 
						|
    NEUTRAL = 3;
 | 
						|
}
 | 
						|
 | 
						|
// AccountStatus represents the status of an account
 | 
						|
message AccountStatus {
 | 
						|
    string id = 1;
 | 
						|
    StatusAttitude attitude = 2;
 | 
						|
    bool is_online = 3;
 | 
						|
    bool is_customized = 4;
 | 
						|
    bool is_invisible = 5;
 | 
						|
    bool is_not_disturb = 6;
 | 
						|
    google.protobuf.StringValue label = 7;
 | 
						|
    google.protobuf.Timestamp cleared_at = 8;
 | 
						|
    string account_id = 9;
 | 
						|
    bytes meta = 10;
 | 
						|
}
 | 
						|
 | 
						|
message UsernameColor {
 | 
						|
    string type = 1;
 | 
						|
    google.protobuf.StringValue value = 2;
 | 
						|
    google.protobuf.StringValue direction = 3;
 | 
						|
    repeated string colors = 4;
 | 
						|
}
 | 
						|
 | 
						|
// Profile contains detailed information about a user
 | 
						|
message AccountProfile {
 | 
						|
    string id = 1;
 | 
						|
    google.protobuf.StringValue first_name = 2;
 | 
						|
    google.protobuf.StringValue middle_name = 3;
 | 
						|
    google.protobuf.StringValue last_name = 4;
 | 
						|
    google.protobuf.StringValue bio = 5;
 | 
						|
    google.protobuf.StringValue gender = 6;
 | 
						|
    google.protobuf.StringValue pronouns = 7;
 | 
						|
    google.protobuf.StringValue time_zone = 8;
 | 
						|
    google.protobuf.StringValue location = 9;
 | 
						|
    google.protobuf.Timestamp birthday = 10;
 | 
						|
    google.protobuf.Timestamp last_seen_at = 11;
 | 
						|
 | 
						|
    VerificationMark verification = 12;
 | 
						|
    BadgeReferenceObject active_badge = 13;
 | 
						|
 | 
						|
    int32 experience = 14;
 | 
						|
    int32 level = 15;
 | 
						|
    double leveling_progress = 16;
 | 
						|
    double social_credits = 17;
 | 
						|
    int32 social_credits_level = 18;
 | 
						|
 | 
						|
    CloudFile picture = 19;
 | 
						|
    CloudFile background = 20;
 | 
						|
 | 
						|
    string account_id = 21;
 | 
						|
 | 
						|
    google.protobuf.Timestamp created_at = 22;
 | 
						|
    google.protobuf.Timestamp updated_at = 23;
 | 
						|
    optional UsernameColor username_color = 24;
 | 
						|
}
 | 
						|
 | 
						|
// AccountContact represents a contact method for an account
 | 
						|
message AccountContact {
 | 
						|
    string id = 1;
 | 
						|
    AccountContactType type = 2;
 | 
						|
    google.protobuf.Timestamp verified_at = 3;
 | 
						|
    bool is_primary = 4;
 | 
						|
    string content = 5;
 | 
						|
    string account_id = 6;
 | 
						|
 | 
						|
    google.protobuf.Timestamp created_at = 7;
 | 
						|
    google.protobuf.Timestamp updated_at = 8;
 | 
						|
}
 | 
						|
 | 
						|
// Enum for contact types
 | 
						|
enum AccountContactType {
 | 
						|
    ACCOUNT_CONTACT_TYPE_UNSPECIFIED = 0;
 | 
						|
    EMAIL = 1;
 | 
						|
    PHONE_NUMBER = 2;
 | 
						|
    ADDRESS = 3;
 | 
						|
}
 | 
						|
 | 
						|
// AccountAuthFactor represents an authentication factor for an account
 | 
						|
message AccountAuthFactor {
 | 
						|
    string id = 1;
 | 
						|
    AccountAuthFactorType type = 2;
 | 
						|
    google.protobuf.StringValue secret = 3;  // Omitted from JSON serialization in original
 | 
						|
    map<string, google.protobuf.Value> config = 4;  // Omitted from JSON serialization in original
 | 
						|
    int32 trustworthy = 5;
 | 
						|
    google.protobuf.Timestamp enabled_at = 6;
 | 
						|
    google.protobuf.Timestamp expired_at = 7;
 | 
						|
    string account_id = 8;
 | 
						|
    map<string, google.protobuf.Value> created_response = 9;  // For initial setup
 | 
						|
 | 
						|
    google.protobuf.Timestamp created_at = 10;
 | 
						|
    google.protobuf.Timestamp updated_at = 11;
 | 
						|
}
 | 
						|
 | 
						|
// Enum for authentication factor types
 | 
						|
enum AccountAuthFactorType {
 | 
						|
    AUTH_FACTOR_TYPE_UNSPECIFIED = 0;
 | 
						|
    PASSWORD = 1;
 | 
						|
    EMAIL_CODE = 2;
 | 
						|
    IN_APP_CODE = 3;
 | 
						|
    TIMED_CODE = 4;
 | 
						|
    PIN_CODE = 5;
 | 
						|
}
 | 
						|
 | 
						|
// AccountBadge represents a badge associated with an account
 | 
						|
message AccountBadge {
 | 
						|
    string id = 1;  // Unique identifier for the badge
 | 
						|
    string type = 2;  // Type/category of the badge
 | 
						|
    google.protobuf.StringValue label = 3;  // Display name of the badge
 | 
						|
    google.protobuf.StringValue caption = 4;  // Optional description of the badge
 | 
						|
    map<string, google.protobuf.Value> meta = 5;  // Additional metadata for the badge
 | 
						|
    google.protobuf.Timestamp activated_at = 6;  // When the badge was activated
 | 
						|
    google.protobuf.Timestamp expired_at = 7;  // Optional expiration time
 | 
						|
    string account_id = 8;  // ID of the account this badge belongs to
 | 
						|
 | 
						|
    google.protobuf.Timestamp created_at = 9;
 | 
						|
    google.protobuf.Timestamp updated_at = 10;
 | 
						|
}
 | 
						|
 | 
						|
// AccountConnection represents a third-party connection for an account
 | 
						|
message AccountConnection {
 | 
						|
    string id = 1;
 | 
						|
    string provider = 2;
 | 
						|
    string provided_identifier = 3;
 | 
						|
    map<string, google.protobuf.Value> meta = 4;
 | 
						|
    google.protobuf.StringValue access_token = 5;  // Omitted from JSON serialization
 | 
						|
    google.protobuf.StringValue refresh_token = 6;  // Omitted from JSON serialization
 | 
						|
    google.protobuf.Timestamp last_used_at = 7;
 | 
						|
    string account_id = 8;
 | 
						|
 | 
						|
    google.protobuf.Timestamp created_at = 9;
 | 
						|
    google.protobuf.Timestamp updated_at = 10;
 | 
						|
}
 | 
						|
 | 
						|
// VerificationMark represents verification status
 | 
						|
message VerificationMark {
 | 
						|
    VerificationMarkType type = 1;
 | 
						|
    string title = 2;
 | 
						|
    string description = 3;
 | 
						|
    string verified_by = 4;
 | 
						|
 | 
						|
    google.protobuf.Timestamp created_at = 5;
 | 
						|
    google.protobuf.Timestamp updated_at = 6;
 | 
						|
}
 | 
						|
 | 
						|
enum VerificationMarkType {
 | 
						|
    VERIFICATION_MARK_TYPE_UNSPECIFIED = 0;
 | 
						|
    OFFICIAL = 1;
 | 
						|
    INDIVIDUAL = 2;
 | 
						|
    ORGANIZATION = 3;
 | 
						|
    GOVERNMENT = 4;
 | 
						|
    CREATOR = 5;
 | 
						|
    DEVELOPER = 6;
 | 
						|
    PARODY = 7;
 | 
						|
}
 | 
						|
 | 
						|
// BadgeReferenceObject represents a reference to a badge with minimal information
 | 
						|
message BadgeReferenceObject {
 | 
						|
    string id = 1;  // Unique identifier for the badge
 | 
						|
    string type = 2;  // Type/category of the badge
 | 
						|
    google.protobuf.StringValue label = 3;  // Display name of the badge
 | 
						|
    google.protobuf.StringValue caption = 4;  // Optional description of the badge
 | 
						|
    map<string, google.protobuf.Value> meta = 5;  // Additional metadata for the badge
 | 
						|
    google.protobuf.Timestamp activated_at = 6;  // When the badge was activated
 | 
						|
    google.protobuf.Timestamp expired_at = 7;  // Optional expiration time
 | 
						|
    string account_id = 8;  // ID of the account this badge belongs to
 | 
						|
}
 | 
						|
 | 
						|
// Relationship represents a connection between two accounts
 | 
						|
message Relationship {
 | 
						|
    string account_id = 1;
 | 
						|
    string related_id = 2;
 | 
						|
    optional Account account = 3;
 | 
						|
    optional Account related = 4;
 | 
						|
    int32 status = 5;
 | 
						|
 | 
						|
    google.protobuf.Timestamp created_at = 6;
 | 
						|
    google.protobuf.Timestamp updated_at = 7;
 | 
						|
}
 | 
						|
 | 
						|
// Leveling information
 | 
						|
message LevelingInfo {
 | 
						|
    int32 current_level = 1;
 | 
						|
    int32 current_experience = 2;
 | 
						|
    int32 next_level_experience = 3;
 | 
						|
    int32 previous_level_experience = 4;
 | 
						|
    double level_progress = 5;
 | 
						|
    repeated int32 experience_per_level = 6;
 | 
						|
}
 | 
						|
 | 
						|
// ActionLog represents a record of an action taken by a user
 | 
						|
message ActionLog {
 | 
						|
    string id = 1; // Unique identifier for the log entry
 | 
						|
    string action = 2; // The action that was performed, e.g., "user.login"
 | 
						|
    map<string, google.protobuf.Value> meta = 3; // Metadata associated with the action
 | 
						|
    google.protobuf.StringValue user_agent = 4; // User agent of the client
 | 
						|
    google.protobuf.StringValue ip_address = 5; // IP address of the client
 | 
						|
    google.protobuf.StringValue location = 6; // Geographic location of the client, derived from IP
 | 
						|
    string account_id = 7; // The account that performed the action
 | 
						|
    google.protobuf.StringValue session_id = 8; // The session in which the action was performed
 | 
						|
 | 
						|
    google.protobuf.Timestamp created_at = 9; // When the action log was created
 | 
						|
}
 | 
						|
 | 
						|
message GetAccountStatusBatchResponse {
 | 
						|
    repeated AccountStatus statuses = 1;
 | 
						|
}
 | 
						|
 | 
						|
// ====================================
 | 
						|
// Service Definitions
 | 
						|
// ====================================
 | 
						|
 | 
						|
// AccountService provides CRUD operations for user accounts and related entities
 | 
						|
service AccountService {
 | 
						|
    // Account Operations
 | 
						|
    rpc GetAccount(GetAccountRequest) returns (Account) {}
 | 
						|
    rpc GetBotAccount(GetBotAccountRequest) returns (Account) {}
 | 
						|
    rpc GetAccountBatch(GetAccountBatchRequest) returns (GetAccountBatchResponse) {}
 | 
						|
    rpc GetBotAccountBatch(GetBotAccountBatchRequest) returns (GetAccountBatchResponse) {}
 | 
						|
    rpc LookupAccountBatch(LookupAccountBatchRequest) returns (GetAccountBatchResponse) {}
 | 
						|
    rpc SearchAccount(SearchAccountRequest) returns (GetAccountBatchResponse) {}
 | 
						|
    rpc ListAccounts(ListAccountsRequest) returns (ListAccountsResponse) {}
 | 
						|
 | 
						|
    rpc GetAccountStatus(GetAccountRequest) returns (AccountStatus) {}
 | 
						|
    rpc GetAccountStatusBatch(GetAccountBatchRequest) returns (GetAccountStatusBatchResponse) {}
 | 
						|
 | 
						|
    // Profile Operations
 | 
						|
    rpc GetProfile(GetProfileRequest) returns (AccountProfile) {}
 | 
						|
 | 
						|
    // Contact Operations
 | 
						|
    rpc ListContacts(ListContactsRequest) returns (ListContactsResponse) {}
 | 
						|
 | 
						|
    // Badge Operations
 | 
						|
    rpc ListBadges(ListBadgesRequest) returns (ListBadgesResponse) {}
 | 
						|
 | 
						|
    // Authentication Factor Operations
 | 
						|
    rpc ListAuthFactors(ListAuthFactorsRequest) returns (ListAuthFactorsResponse) {}
 | 
						|
 | 
						|
    // Connection Operations
 | 
						|
    rpc ListConnections(ListConnectionsRequest) returns (ListConnectionsResponse) {}
 | 
						|
 | 
						|
    // Relationship Operations
 | 
						|
    rpc ListRelationships(ListRelationshipsRequest) returns (ListRelationshipsResponse) {}
 | 
						|
 | 
						|
    rpc GetRelationship(GetRelationshipRequest) returns (GetRelationshipResponse) {}
 | 
						|
    rpc HasRelationship(GetRelationshipRequest) returns (google.protobuf.BoolValue) {}
 | 
						|
    rpc ListFriends(ListRelationshipSimpleRequest) returns (ListRelationshipSimpleResponse) {}
 | 
						|
    rpc ListBlocked(ListRelationshipSimpleRequest) returns (ListRelationshipSimpleResponse) {}
 | 
						|
}
 | 
						|
 | 
						|
// ActionLogService provides operations for action logs
 | 
						|
service ActionLogService {
 | 
						|
    rpc CreateActionLog(CreateActionLogRequest) returns (CreateActionLogResponse) {}
 | 
						|
    rpc ListActionLogs(ListActionLogsRequest) returns (ListActionLogsResponse) {}
 | 
						|
}
 | 
						|
 | 
						|
// ====================================
 | 
						|
// Request/Response Messages
 | 
						|
// ====================================
 | 
						|
 | 
						|
// ActionLog Requests/Responses
 | 
						|
message CreateActionLogRequest {
 | 
						|
    string action = 1;
 | 
						|
    map<string, google.protobuf.Value> meta = 2;
 | 
						|
    google.protobuf.StringValue user_agent = 3;
 | 
						|
    google.protobuf.StringValue ip_address = 4;
 | 
						|
    google.protobuf.StringValue location = 5;
 | 
						|
    string account_id = 6;
 | 
						|
    google.protobuf.StringValue session_id = 7;
 | 
						|
}
 | 
						|
 | 
						|
message CreateActionLogResponse {
 | 
						|
    ActionLog action_log = 1;
 | 
						|
}
 | 
						|
 | 
						|
message ListActionLogsRequest {
 | 
						|
    string account_id = 1;
 | 
						|
    string action = 2;
 | 
						|
    int32 page_size = 3;
 | 
						|
    string page_token = 4;
 | 
						|
    string order_by = 5;
 | 
						|
}
 | 
						|
 | 
						|
message ListActionLogsResponse {
 | 
						|
    repeated ActionLog action_logs = 1;
 | 
						|
    string next_page_token = 2;
 | 
						|
    int32 total_size = 3;
 | 
						|
}
 | 
						|
 | 
						|
// Account Requests/Responses
 | 
						|
message GetAccountRequest {
 | 
						|
    string id = 1;  // Account ID to retrieve
 | 
						|
}
 | 
						|
 | 
						|
message GetBotAccountRequest {
 | 
						|
    string automated_id = 1;
 | 
						|
}
 | 
						|
 | 
						|
message GetAccountBatchRequest {
 | 
						|
    repeated string id = 1;  // Account ID to retrieve
 | 
						|
}
 | 
						|
 | 
						|
message GetBotAccountBatchRequest {
 | 
						|
    repeated string automated_id = 1;
 | 
						|
}
 | 
						|
 | 
						|
message LookupAccountBatchRequest {
 | 
						|
    repeated string names = 1;
 | 
						|
}
 | 
						|
 | 
						|
message SearchAccountRequest {
 | 
						|
    string query = 1;
 | 
						|
}
 | 
						|
 | 
						|
message GetAccountBatchResponse {
 | 
						|
    repeated Account accounts = 1;  // List of accounts
 | 
						|
}
 | 
						|
 | 
						|
message CreateAccountRequest {
 | 
						|
    string name = 1;  // Required: Unique username
 | 
						|
    string nick = 2;  // Optional: Display name
 | 
						|
    string language = 3;  // Default language
 | 
						|
    bool is_superuser = 4;  // Admin flag
 | 
						|
    AccountProfile profile = 5;  // Initial profile data
 | 
						|
}
 | 
						|
 | 
						|
message UpdateAccountRequest {
 | 
						|
    string id = 1;  // Account ID to update
 | 
						|
    google.protobuf.StringValue name = 2;  // New username if changing
 | 
						|
    google.protobuf.StringValue nick = 3;  // New display name
 | 
						|
    google.protobuf.StringValue language = 4;  // New language
 | 
						|
    google.protobuf.BoolValue is_superuser = 5;  // Admin status
 | 
						|
}
 | 
						|
 | 
						|
message DeleteAccountRequest {
 | 
						|
    string id = 1;  // Account ID to delete
 | 
						|
    bool purge = 2;  // If true, permanently delete instead of soft delete
 | 
						|
}
 | 
						|
 | 
						|
message ListAccountsRequest {
 | 
						|
    int32 page_size = 1;  // Number of results per page
 | 
						|
    string page_token = 2;  // Token for pagination
 | 
						|
    string filter = 3;  // Filter expression
 | 
						|
    string order_by = 4;  // Sort order
 | 
						|
}
 | 
						|
 | 
						|
message ListAccountsResponse {
 | 
						|
    repeated Account accounts = 1;  // List of accounts
 | 
						|
    string next_page_token = 2;  // Token for next page
 | 
						|
    int32 total_size = 3;  // Total number of accounts
 | 
						|
}
 | 
						|
 | 
						|
// Profile Requests/Responses
 | 
						|
message GetProfileRequest {
 | 
						|
    string account_id = 1;  // Account ID to get profile for
 | 
						|
}
 | 
						|
 | 
						|
message UpdateProfileRequest {
 | 
						|
    string account_id = 1;  // Account ID to update profile for
 | 
						|
    AccountProfile profile = 2;  // Profile data to update
 | 
						|
    google.protobuf.FieldMask update_mask = 3;  // Fields to update
 | 
						|
}
 | 
						|
 | 
						|
// Contact Requests/Responses
 | 
						|
message AddContactRequest {
 | 
						|
    string account_id = 1;  // Account to add contact to
 | 
						|
    AccountContactType type = 2;  // Type of contact
 | 
						|
    string content = 3;  // Contact content (email, phone, etc.)
 | 
						|
    bool is_primary = 4;  // If this should be the primary contact
 | 
						|
}
 | 
						|
 | 
						|
message ListContactsRequest {
 | 
						|
    string account_id = 1;  // Account ID to list contacts for
 | 
						|
    AccountContactType type = 2;  // Optional: filter by type
 | 
						|
    bool verified_only = 3;  // Only return verified contacts
 | 
						|
}
 | 
						|
 | 
						|
message ListContactsResponse {
 | 
						|
    repeated AccountContact contacts = 1;  // List of contacts
 | 
						|
}
 | 
						|
 | 
						|
message VerifyContactRequest {
 | 
						|
    string id = 1;  // Contact ID to verify
 | 
						|
    string account_id = 2;  // Account ID (for validation)
 | 
						|
    string code = 3;  // Verification code
 | 
						|
}
 | 
						|
 | 
						|
// Badge Requests/Responses
 | 
						|
message ListBadgesRequest {
 | 
						|
    string account_id = 1;  // Account to list badges for
 | 
						|
    string type = 2;  // Optional: filter by type
 | 
						|
    bool active_only = 3;  // Only return active (non-expired) badges
 | 
						|
}
 | 
						|
 | 
						|
message ListBadgesResponse {
 | 
						|
    repeated AccountBadge badges = 1;  // List of badges
 | 
						|
}
 | 
						|
 | 
						|
message ListAuthFactorsRequest {
 | 
						|
    string account_id = 1;  // Account to list factors for
 | 
						|
    bool active_only = 2;  // Only return active (non-expired) factors
 | 
						|
}
 | 
						|
 | 
						|
message ListAuthFactorsResponse {
 | 
						|
    repeated AccountAuthFactor factors = 1;  // List of auth factors
 | 
						|
}
 | 
						|
 | 
						|
message ListConnectionsRequest {
 | 
						|
    string account_id = 1;  // Account to list connections for
 | 
						|
    string provider = 2;  // Optional: filter by provider
 | 
						|
}
 | 
						|
 | 
						|
message ListConnectionsResponse {
 | 
						|
    repeated AccountConnection connections = 1;  // List of connections
 | 
						|
}
 | 
						|
 | 
						|
// Relationship Requests/Responses
 | 
						|
message ListRelationshipsRequest {
 | 
						|
    string account_id = 1;  // Account to list relationships for
 | 
						|
    optional int32 status = 2;  // Filter by status
 | 
						|
    int32 page_size = 5;  // Number of results per page
 | 
						|
    string page_token = 6;  // Token for pagination
 | 
						|
}
 | 
						|
 | 
						|
message ListRelationshipsResponse {
 | 
						|
    repeated Relationship relationships = 1;  // List of relationships
 | 
						|
    string next_page_token = 2;  // Token for next page
 | 
						|
    int32 total_size = 3;  // Total number of relationships
 | 
						|
}
 | 
						|
 | 
						|
message GetRelationshipRequest {
 | 
						|
    string account_id = 1;
 | 
						|
    string related_id = 2;
 | 
						|
    optional int32 status = 3;
 | 
						|
}
 | 
						|
 | 
						|
message GetRelationshipResponse {
 | 
						|
    optional Relationship relationship = 1;
 | 
						|
}
 | 
						|
 | 
						|
message ListRelationshipSimpleRequest {
 | 
						|
    string account_id = 1;
 | 
						|
}
 | 
						|
 | 
						|
message ListRelationshipSimpleResponse {
 | 
						|
    repeated string accounts_id = 1;
 | 
						|
}
 |