syntax = "proto3"; package mpc.router.v1; option go_package = "github.com/rwadurian/mpc-system/api/grpc/router/v1;router"; // MessageRouter service handles MPC message routing service MessageRouter { // RouteMessage routes a message from one party to others rpc RouteMessage(RouteMessageRequest) returns (RouteMessageResponse); // SubscribeMessages subscribes to messages for a party (streaming) rpc SubscribeMessages(SubscribeMessagesRequest) returns (stream MPCMessage); // GetPendingMessages retrieves pending messages (polling alternative) rpc GetPendingMessages(GetPendingMessagesRequest) returns (GetPendingMessagesResponse); } // RouteMessageRequest routes an MPC message message RouteMessageRequest { string session_id = 1; string from_party = 2; repeated string to_parties = 3; // Empty for broadcast int32 round_number = 4; string message_type = 5; bytes payload = 6; // Encrypted MPC message } // RouteMessageResponse confirms message routing message RouteMessageResponse { bool success = 1; string message_id = 2; } // SubscribeMessagesRequest subscribes to messages for a party message SubscribeMessagesRequest { string session_id = 1; string party_id = 2; } // MPCMessage represents an MPC protocol message message MPCMessage { string message_id = 1; string session_id = 2; string from_party = 3; bool is_broadcast = 4; int32 round_number = 5; string message_type = 6; bytes payload = 7; int64 created_at = 8; // Unix timestamp milliseconds } // GetPendingMessagesRequest retrieves pending messages message GetPendingMessagesRequest { string session_id = 1; string party_id = 2; int64 after_timestamp = 3; // Get messages after this timestamp } // GetPendingMessagesResponse contains pending messages message GetPendingMessagesResponse { repeated MPCMessage messages = 1; }