syntax = "proto3"; package users; import "google/protobuf/timestamp.proto"; enum UserType { // Person PERSON = 0; // Application APPLICATION = 1; // Group GROUP = 2; // Organisation ORGANIZATION = 3; // Service 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; // Public key string public_key = 3; } // 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; // User type UserType user_type = 8; } // Message to get user message GetUserRequest { // ID of the user to get string id = 1; } // Message to get user message GetUserResponse { // ID of the user to get User user = 1; } // Users gRPC service service UsersService { // Create a new user rpc CreateUser (CreateUserRequest) returns (CreateUserResponse); // Complete user rpc CompleteUser (CompleteUserRequest) returns (User); // Get User rpc GetUser (GetUserRequest) returns (GetUserResponse); }