syntax = "proto3"; package users; import "google/protobuf/timestamp.proto"; enum UserType { PERSON = 0; APPLICATION = 1; GROUP = 2; ORGANIZATION = 3; SERVICE = 4; } // A message representing a user user message User { // Unique identifier for the user string id = 1; // Email address of the user optional string email = 2; // Unique username chosen by the user string username = 3; // URL to the user's avatar image optional string avatar = 4; // Timestamp when the user was created google.protobuf.Timestamp created_at = 5; // Timestamp when the user was last updated google.protobuf.Timestamp updated_at = 6; // User-provided description or bio optional string description = 7; // User type UserType user_type = 8; // Public key string public_key = 9; // Inbox string inbox = 10; // Outbox string outbox = 11; // Local bool local = 12; } // Request message for creating a new user message CreateUserRequest { // Email address of the new user string email = 1; // Avatar for the new user optional string avatar = 2; } // Response message for CreateUser RPC message CreateUserResponse { // Temporary assigned id string temp_id = 1; } // Message to finalise user creation message CompleteUserRequest { // ID of the user to finalise string id = 1; // Required: username to finalise the user string username = 2; // Optional: user-provided description optional string description = 3; // Optional: update avatar optional string avatar = 4; // Inbox URL for this user string inbox = 5; // Outbox URL for this user string outbox = 6; // Is this user local or remote bool local = 7; // Public key for this user string public_key = 8; // User type UserType user_type = 9; } // Users gRPC service service UsersService { // Create a new user rpc CreateUser (CreateUserRequest) returns (CreateUserResponse); // Complete user rpc CompleteUser (CompleteUserRequest) returns (User); }