From ac76fd80bc721db7a032b9204a8d9f023c9028bd Mon Sep 17 00:00:00 2001 From: hailin Date: Fri, 5 Dec 2025 02:11:27 -0800 Subject: [PATCH] feat(mpc-system): integrate gRPC calls into account-service MPC endpoints - Update account_handler to use real gRPC calls instead of placeholders - Add sessionCoordinatorClient field to AccountHTTPHandler - Modify CreateKeygenSession to call session coordinator via gRPC - Modify CreateSigningSession to call session coordinator via gRPC - Modify GetSessionStatus to query real session data via gRPC - Update main.go to initialize and pass sessionCoordinatorClient - Remove separate mpc_handler.go (consolidated into account_handler) - Regenerate protobuf files with gRPC service definitions - Add proper imports for context, time, and grpc adapter All MPC endpoints now create real sessions with JWT tokens and can query actual session status from the session coordinator service. Tested end-to-end: keygen session creation and status query working. --- .../coordinator/v1/session_coordinator.pb.go | 1512 ++++++++++++++--- .../v1/session_coordinator_grpc.pb.go | 333 ++++ .../api/grpc/router/v1/message_router.pb.go | 603 +++++-- .../grpc/router/v1/message_router_grpc.pb.go | 217 +++ .../adapters/input/http/account_handler.go | 166 +- .../adapters/input/http/mpc_handler.go | 198 --- .../services/account/cmd/server/main.go | 14 +- 7 files changed, 2403 insertions(+), 640 deletions(-) create mode 100644 backend/mpc-system/api/grpc/coordinator/v1/session_coordinator_grpc.pb.go create mode 100644 backend/mpc-system/api/grpc/router/v1/message_router_grpc.pb.go delete mode 100644 backend/mpc-system/services/account/adapters/input/http/mpc_handler.go diff --git a/backend/mpc-system/api/grpc/coordinator/v1/session_coordinator.pb.go b/backend/mpc-system/api/grpc/coordinator/v1/session_coordinator.pb.go index 3b3b3c7a..615fdd5d 100644 --- a/backend/mpc-system/api/grpc/coordinator/v1/session_coordinator.pb.go +++ b/backend/mpc-system/api/grpc/coordinator/v1/session_coordinator.pb.go @@ -1,343 +1,1321 @@ // Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.10 +// protoc v3.12.4 // source: api/proto/session_coordinator.proto package coordinator import ( - "context" - - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" + unsafe "unsafe" ) -// DeviceInfo contains device information -type DeviceInfo struct { - DeviceType string `json:"device_type,omitempty"` - DeviceId string `json:"device_id,omitempty"` - Platform string `json:"platform,omitempty"` - AppVersion string `json:"app_version,omitempty"` +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// CreateSessionRequest creates a new MPC session +type CreateSessionRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + SessionType string `protobuf:"bytes,1,opt,name=session_type,json=sessionType,proto3" json:"session_type,omitempty"` // "keygen" or "sign" + ThresholdN int32 `protobuf:"varint,2,opt,name=threshold_n,json=thresholdN,proto3" json:"threshold_n,omitempty"` // Total number of parties + ThresholdT int32 `protobuf:"varint,3,opt,name=threshold_t,json=thresholdT,proto3" json:"threshold_t,omitempty"` // Minimum required parties + Participants []*ParticipantInfo `protobuf:"bytes,4,rep,name=participants,proto3" json:"participants,omitempty"` + MessageHash []byte `protobuf:"bytes,5,opt,name=message_hash,json=messageHash,proto3" json:"message_hash,omitempty"` // Required for sign sessions + ExpiresInSeconds int64 `protobuf:"varint,6,opt,name=expires_in_seconds,json=expiresInSeconds,proto3" json:"expires_in_seconds,omitempty"` // Session expiration time + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CreateSessionRequest) Reset() { + *x = CreateSessionRequest{} + mi := &file_api_proto_session_coordinator_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CreateSessionRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateSessionRequest) ProtoMessage() {} + +func (x *CreateSessionRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_session_coordinator_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateSessionRequest.ProtoReflect.Descriptor instead. +func (*CreateSessionRequest) Descriptor() ([]byte, []int) { + return file_api_proto_session_coordinator_proto_rawDescGZIP(), []int{0} +} + +func (x *CreateSessionRequest) GetSessionType() string { + if x != nil { + return x.SessionType + } + return "" +} + +func (x *CreateSessionRequest) GetThresholdN() int32 { + if x != nil { + return x.ThresholdN + } + return 0 +} + +func (x *CreateSessionRequest) GetThresholdT() int32 { + if x != nil { + return x.ThresholdT + } + return 0 +} + +func (x *CreateSessionRequest) GetParticipants() []*ParticipantInfo { + if x != nil { + return x.Participants + } + return nil +} + +func (x *CreateSessionRequest) GetMessageHash() []byte { + if x != nil { + return x.MessageHash + } + return nil +} + +func (x *CreateSessionRequest) GetExpiresInSeconds() int64 { + if x != nil { + return x.ExpiresInSeconds + } + return 0 } // ParticipantInfo contains information about a participant type ParticipantInfo struct { - PartyId string `json:"party_id,omitempty"` - DeviceInfo *DeviceInfo `json:"device_info,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + PartyId string `protobuf:"bytes,1,opt,name=party_id,json=partyId,proto3" json:"party_id,omitempty"` + DeviceInfo *DeviceInfo `protobuf:"bytes,2,opt,name=device_info,json=deviceInfo,proto3" json:"device_info,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -// CreateSessionRequest creates a new MPC session -type CreateSessionRequest struct { - SessionType string `json:"session_type,omitempty"` - ThresholdN int32 `json:"threshold_n,omitempty"` - ThresholdT int32 `json:"threshold_t,omitempty"` - Participants []*ParticipantInfo `json:"participants,omitempty"` - MessageHash []byte `json:"message_hash,omitempty"` - ExpiresInSeconds int64 `json:"expires_in_seconds,omitempty"` +func (x *ParticipantInfo) Reset() { + *x = ParticipantInfo{} + mi := &file_api_proto_session_coordinator_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ParticipantInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ParticipantInfo) ProtoMessage() {} + +func (x *ParticipantInfo) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_session_coordinator_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ParticipantInfo.ProtoReflect.Descriptor instead. +func (*ParticipantInfo) Descriptor() ([]byte, []int) { + return file_api_proto_session_coordinator_proto_rawDescGZIP(), []int{1} +} + +func (x *ParticipantInfo) GetPartyId() string { + if x != nil { + return x.PartyId + } + return "" +} + +func (x *ParticipantInfo) GetDeviceInfo() *DeviceInfo { + if x != nil { + return x.DeviceInfo + } + return nil +} + +// DeviceInfo contains device information +type DeviceInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + DeviceType string `protobuf:"bytes,1,opt,name=device_type,json=deviceType,proto3" json:"device_type,omitempty"` // android, ios, pc, server, recovery + DeviceId string `protobuf:"bytes,2,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + Platform string `protobuf:"bytes,3,opt,name=platform,proto3" json:"platform,omitempty"` + AppVersion string `protobuf:"bytes,4,opt,name=app_version,json=appVersion,proto3" json:"app_version,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DeviceInfo) Reset() { + *x = DeviceInfo{} + mi := &file_api_proto_session_coordinator_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DeviceInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeviceInfo) ProtoMessage() {} + +func (x *DeviceInfo) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_session_coordinator_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeviceInfo.ProtoReflect.Descriptor instead. +func (*DeviceInfo) Descriptor() ([]byte, []int) { + return file_api_proto_session_coordinator_proto_rawDescGZIP(), []int{2} +} + +func (x *DeviceInfo) GetDeviceType() string { + if x != nil { + return x.DeviceType + } + return "" +} + +func (x *DeviceInfo) GetDeviceId() string { + if x != nil { + return x.DeviceId + } + return "" +} + +func (x *DeviceInfo) GetPlatform() string { + if x != nil { + return x.Platform + } + return "" +} + +func (x *DeviceInfo) GetAppVersion() string { + if x != nil { + return x.AppVersion + } + return "" } // CreateSessionResponse contains the created session info type CreateSessionResponse struct { - SessionId string `json:"session_id,omitempty"` - JoinTokens map[string]string `json:"join_tokens,omitempty"` - ExpiresAt int64 `json:"expires_at,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + SessionId string `protobuf:"bytes,1,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` + JoinTokens map[string]string `protobuf:"bytes,2,rep,name=join_tokens,json=joinTokens,proto3" json:"join_tokens,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // party_id -> join_token + ExpiresAt int64 `protobuf:"varint,3,opt,name=expires_at,json=expiresAt,proto3" json:"expires_at,omitempty"` // Unix timestamp milliseconds + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CreateSessionResponse) Reset() { + *x = CreateSessionResponse{} + mi := &file_api_proto_session_coordinator_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CreateSessionResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateSessionResponse) ProtoMessage() {} + +func (x *CreateSessionResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_session_coordinator_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateSessionResponse.ProtoReflect.Descriptor instead. +func (*CreateSessionResponse) Descriptor() ([]byte, []int) { + return file_api_proto_session_coordinator_proto_rawDescGZIP(), []int{3} +} + +func (x *CreateSessionResponse) GetSessionId() string { + if x != nil { + return x.SessionId + } + return "" +} + +func (x *CreateSessionResponse) GetJoinTokens() map[string]string { + if x != nil { + return x.JoinTokens + } + return nil +} + +func (x *CreateSessionResponse) GetExpiresAt() int64 { + if x != nil { + return x.ExpiresAt + } + return 0 } // JoinSessionRequest allows a participant to join a session type JoinSessionRequest struct { - SessionId string `json:"session_id,omitempty"` - PartyId string `json:"party_id,omitempty"` - JoinToken string `json:"join_token,omitempty"` - DeviceInfo *DeviceInfo `json:"device_info,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + SessionId string `protobuf:"bytes,1,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` + PartyId string `protobuf:"bytes,2,opt,name=party_id,json=partyId,proto3" json:"party_id,omitempty"` + JoinToken string `protobuf:"bytes,3,opt,name=join_token,json=joinToken,proto3" json:"join_token,omitempty"` + DeviceInfo *DeviceInfo `protobuf:"bytes,4,opt,name=device_info,json=deviceInfo,proto3" json:"device_info,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -// SessionInfo contains session information -type SessionInfo struct { - SessionId string `json:"session_id,omitempty"` - SessionType string `json:"session_type,omitempty"` - ThresholdN int32 `json:"threshold_n,omitempty"` - ThresholdT int32 `json:"threshold_t,omitempty"` - MessageHash []byte `json:"message_hash,omitempty"` - Status string `json:"status,omitempty"` +func (x *JoinSessionRequest) Reset() { + *x = JoinSessionRequest{} + mi := &file_api_proto_session_coordinator_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -// PartyInfo contains party information -type PartyInfo struct { - PartyId string `json:"party_id,omitempty"` - PartyIndex int32 `json:"party_index,omitempty"` - DeviceInfo *DeviceInfo `json:"device_info,omitempty"` +func (x *JoinSessionRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*JoinSessionRequest) ProtoMessage() {} + +func (x *JoinSessionRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_session_coordinator_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use JoinSessionRequest.ProtoReflect.Descriptor instead. +func (*JoinSessionRequest) Descriptor() ([]byte, []int) { + return file_api_proto_session_coordinator_proto_rawDescGZIP(), []int{4} +} + +func (x *JoinSessionRequest) GetSessionId() string { + if x != nil { + return x.SessionId + } + return "" +} + +func (x *JoinSessionRequest) GetPartyId() string { + if x != nil { + return x.PartyId + } + return "" +} + +func (x *JoinSessionRequest) GetJoinToken() string { + if x != nil { + return x.JoinToken + } + return "" +} + +func (x *JoinSessionRequest) GetDeviceInfo() *DeviceInfo { + if x != nil { + return x.DeviceInfo + } + return nil } // JoinSessionResponse contains session information for the joining party type JoinSessionResponse struct { - Success bool `json:"success,omitempty"` - SessionInfo *SessionInfo `json:"session_info,omitempty"` - OtherParties []*PartyInfo `json:"other_parties,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` + SessionInfo *SessionInfo `protobuf:"bytes,2,opt,name=session_info,json=sessionInfo,proto3" json:"session_info,omitempty"` + OtherParties []*PartyInfo `protobuf:"bytes,3,rep,name=other_parties,json=otherParties,proto3" json:"other_parties,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *JoinSessionResponse) Reset() { + *x = JoinSessionResponse{} + mi := &file_api_proto_session_coordinator_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *JoinSessionResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*JoinSessionResponse) ProtoMessage() {} + +func (x *JoinSessionResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_session_coordinator_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use JoinSessionResponse.ProtoReflect.Descriptor instead. +func (*JoinSessionResponse) Descriptor() ([]byte, []int) { + return file_api_proto_session_coordinator_proto_rawDescGZIP(), []int{5} +} + +func (x *JoinSessionResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *JoinSessionResponse) GetSessionInfo() *SessionInfo { + if x != nil { + return x.SessionInfo + } + return nil +} + +func (x *JoinSessionResponse) GetOtherParties() []*PartyInfo { + if x != nil { + return x.OtherParties + } + return nil +} + +// SessionInfo contains session information +type SessionInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + SessionId string `protobuf:"bytes,1,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` + SessionType string `protobuf:"bytes,2,opt,name=session_type,json=sessionType,proto3" json:"session_type,omitempty"` + ThresholdN int32 `protobuf:"varint,3,opt,name=threshold_n,json=thresholdN,proto3" json:"threshold_n,omitempty"` + ThresholdT int32 `protobuf:"varint,4,opt,name=threshold_t,json=thresholdT,proto3" json:"threshold_t,omitempty"` + MessageHash []byte `protobuf:"bytes,5,opt,name=message_hash,json=messageHash,proto3" json:"message_hash,omitempty"` + Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SessionInfo) Reset() { + *x = SessionInfo{} + mi := &file_api_proto_session_coordinator_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SessionInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SessionInfo) ProtoMessage() {} + +func (x *SessionInfo) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_session_coordinator_proto_msgTypes[6] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SessionInfo.ProtoReflect.Descriptor instead. +func (*SessionInfo) Descriptor() ([]byte, []int) { + return file_api_proto_session_coordinator_proto_rawDescGZIP(), []int{6} +} + +func (x *SessionInfo) GetSessionId() string { + if x != nil { + return x.SessionId + } + return "" +} + +func (x *SessionInfo) GetSessionType() string { + if x != nil { + return x.SessionType + } + return "" +} + +func (x *SessionInfo) GetThresholdN() int32 { + if x != nil { + return x.ThresholdN + } + return 0 +} + +func (x *SessionInfo) GetThresholdT() int32 { + if x != nil { + return x.ThresholdT + } + return 0 +} + +func (x *SessionInfo) GetMessageHash() []byte { + if x != nil { + return x.MessageHash + } + return nil +} + +func (x *SessionInfo) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +// PartyInfo contains party information +type PartyInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + PartyId string `protobuf:"bytes,1,opt,name=party_id,json=partyId,proto3" json:"party_id,omitempty"` + PartyIndex int32 `protobuf:"varint,2,opt,name=party_index,json=partyIndex,proto3" json:"party_index,omitempty"` + DeviceInfo *DeviceInfo `protobuf:"bytes,3,opt,name=device_info,json=deviceInfo,proto3" json:"device_info,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PartyInfo) Reset() { + *x = PartyInfo{} + mi := &file_api_proto_session_coordinator_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PartyInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PartyInfo) ProtoMessage() {} + +func (x *PartyInfo) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_session_coordinator_proto_msgTypes[7] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PartyInfo.ProtoReflect.Descriptor instead. +func (*PartyInfo) Descriptor() ([]byte, []int) { + return file_api_proto_session_coordinator_proto_rawDescGZIP(), []int{7} +} + +func (x *PartyInfo) GetPartyId() string { + if x != nil { + return x.PartyId + } + return "" +} + +func (x *PartyInfo) GetPartyIndex() int32 { + if x != nil { + return x.PartyIndex + } + return 0 +} + +func (x *PartyInfo) GetDeviceInfo() *DeviceInfo { + if x != nil { + return x.DeviceInfo + } + return nil } // GetSessionStatusRequest queries session status type GetSessionStatusRequest struct { - SessionId string `json:"session_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + SessionId string `protobuf:"bytes,1,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetSessionStatusRequest) Reset() { + *x = GetSessionStatusRequest{} + mi := &file_api_proto_session_coordinator_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetSessionStatusRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetSessionStatusRequest) ProtoMessage() {} + +func (x *GetSessionStatusRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_session_coordinator_proto_msgTypes[8] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetSessionStatusRequest.ProtoReflect.Descriptor instead. +func (*GetSessionStatusRequest) Descriptor() ([]byte, []int) { + return file_api_proto_session_coordinator_proto_rawDescGZIP(), []int{8} +} + +func (x *GetSessionStatusRequest) GetSessionId() string { + if x != nil { + return x.SessionId + } + return "" } // GetSessionStatusResponse contains session status type GetSessionStatusResponse struct { - Status string `json:"status,omitempty"` - CompletedParties int32 `json:"completed_parties,omitempty"` - TotalParties int32 `json:"total_parties,omitempty"` - PublicKey []byte `json:"public_key,omitempty"` - Signature []byte `json:"signature,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Status string `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` + CompletedParties int32 `protobuf:"varint,2,opt,name=completed_parties,json=completedParties,proto3" json:"completed_parties,omitempty"` + TotalParties int32 `protobuf:"varint,3,opt,name=total_parties,json=totalParties,proto3" json:"total_parties,omitempty"` + PublicKey []byte `protobuf:"bytes,4,opt,name=public_key,json=publicKey,proto3" json:"public_key,omitempty"` // For completed keygen + Signature []byte `protobuf:"bytes,5,opt,name=signature,proto3" json:"signature,omitempty"` // For completed sign + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetSessionStatusResponse) Reset() { + *x = GetSessionStatusResponse{} + mi := &file_api_proto_session_coordinator_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetSessionStatusResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetSessionStatusResponse) ProtoMessage() {} + +func (x *GetSessionStatusResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_session_coordinator_proto_msgTypes[9] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetSessionStatusResponse.ProtoReflect.Descriptor instead. +func (*GetSessionStatusResponse) Descriptor() ([]byte, []int) { + return file_api_proto_session_coordinator_proto_rawDescGZIP(), []int{9} +} + +func (x *GetSessionStatusResponse) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *GetSessionStatusResponse) GetCompletedParties() int32 { + if x != nil { + return x.CompletedParties + } + return 0 +} + +func (x *GetSessionStatusResponse) GetTotalParties() int32 { + if x != nil { + return x.TotalParties + } + return 0 +} + +func (x *GetSessionStatusResponse) GetPublicKey() []byte { + if x != nil { + return x.PublicKey + } + return nil +} + +func (x *GetSessionStatusResponse) GetSignature() []byte { + if x != nil { + return x.Signature + } + return nil } // ReportCompletionRequest reports that a participant has completed type ReportCompletionRequest struct { - SessionId string `json:"session_id,omitempty"` - PartyId string `json:"party_id,omitempty"` - PublicKey []byte `json:"public_key,omitempty"` - Signature []byte `json:"signature,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + SessionId string `protobuf:"bytes,1,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` + PartyId string `protobuf:"bytes,2,opt,name=party_id,json=partyId,proto3" json:"party_id,omitempty"` + PublicKey []byte `protobuf:"bytes,3,opt,name=public_key,json=publicKey,proto3" json:"public_key,omitempty"` // For keygen completion + Signature []byte `protobuf:"bytes,4,opt,name=signature,proto3" json:"signature,omitempty"` // For sign completion + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ReportCompletionRequest) Reset() { + *x = ReportCompletionRequest{} + mi := &file_api_proto_session_coordinator_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ReportCompletionRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReportCompletionRequest) ProtoMessage() {} + +func (x *ReportCompletionRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_session_coordinator_proto_msgTypes[10] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReportCompletionRequest.ProtoReflect.Descriptor instead. +func (*ReportCompletionRequest) Descriptor() ([]byte, []int) { + return file_api_proto_session_coordinator_proto_rawDescGZIP(), []int{10} +} + +func (x *ReportCompletionRequest) GetSessionId() string { + if x != nil { + return x.SessionId + } + return "" +} + +func (x *ReportCompletionRequest) GetPartyId() string { + if x != nil { + return x.PartyId + } + return "" +} + +func (x *ReportCompletionRequest) GetPublicKey() []byte { + if x != nil { + return x.PublicKey + } + return nil +} + +func (x *ReportCompletionRequest) GetSignature() []byte { + if x != nil { + return x.Signature + } + return nil } // ReportCompletionResponse contains the result of completion report type ReportCompletionResponse struct { - Success bool `json:"success,omitempty"` - AllCompleted bool `json:"all_completed,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` + AllCompleted bool `protobuf:"varint,2,opt,name=all_completed,json=allCompleted,proto3" json:"all_completed,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ReportCompletionResponse) Reset() { + *x = ReportCompletionResponse{} + mi := &file_api_proto_session_coordinator_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ReportCompletionResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReportCompletionResponse) ProtoMessage() {} + +func (x *ReportCompletionResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_session_coordinator_proto_msgTypes[11] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReportCompletionResponse.ProtoReflect.Descriptor instead. +func (*ReportCompletionResponse) Descriptor() ([]byte, []int) { + return file_api_proto_session_coordinator_proto_rawDescGZIP(), []int{11} +} + +func (x *ReportCompletionResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *ReportCompletionResponse) GetAllCompleted() bool { + if x != nil { + return x.AllCompleted + } + return false } // CloseSessionRequest closes a session type CloseSessionRequest struct { - SessionId string `json:"session_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + SessionId string `protobuf:"bytes,1,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CloseSessionRequest) Reset() { + *x = CloseSessionRequest{} + mi := &file_api_proto_session_coordinator_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CloseSessionRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CloseSessionRequest) ProtoMessage() {} + +func (x *CloseSessionRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_session_coordinator_proto_msgTypes[12] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CloseSessionRequest.ProtoReflect.Descriptor instead. +func (*CloseSessionRequest) Descriptor() ([]byte, []int) { + return file_api_proto_session_coordinator_proto_rawDescGZIP(), []int{12} +} + +func (x *CloseSessionRequest) GetSessionId() string { + if x != nil { + return x.SessionId + } + return "" } // CloseSessionResponse contains the result of session closure type CloseSessionResponse struct { - Success bool `json:"success,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -// MarkPartyReadyRequest marks a party as ready +func (x *CloseSessionResponse) Reset() { + *x = CloseSessionResponse{} + mi := &file_api_proto_session_coordinator_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CloseSessionResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CloseSessionResponse) ProtoMessage() {} + +func (x *CloseSessionResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_session_coordinator_proto_msgTypes[13] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CloseSessionResponse.ProtoReflect.Descriptor instead. +func (*CloseSessionResponse) Descriptor() ([]byte, []int) { + return file_api_proto_session_coordinator_proto_rawDescGZIP(), []int{13} +} + +func (x *CloseSessionResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +// MarkPartyReadyRequest marks a party as ready to start the protocol type MarkPartyReadyRequest struct { - SessionId string `json:"session_id,omitempty"` - PartyId string `json:"party_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + SessionId string `protobuf:"bytes,1,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` + PartyId string `protobuf:"bytes,2,opt,name=party_id,json=partyId,proto3" json:"party_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -// MarkPartyReadyResponse contains the result +func (x *MarkPartyReadyRequest) Reset() { + *x = MarkPartyReadyRequest{} + mi := &file_api_proto_session_coordinator_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MarkPartyReadyRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MarkPartyReadyRequest) ProtoMessage() {} + +func (x *MarkPartyReadyRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_session_coordinator_proto_msgTypes[14] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MarkPartyReadyRequest.ProtoReflect.Descriptor instead. +func (*MarkPartyReadyRequest) Descriptor() ([]byte, []int) { + return file_api_proto_session_coordinator_proto_rawDescGZIP(), []int{14} +} + +func (x *MarkPartyReadyRequest) GetSessionId() string { + if x != nil { + return x.SessionId + } + return "" +} + +func (x *MarkPartyReadyRequest) GetPartyId() string { + if x != nil { + return x.PartyId + } + return "" +} + +// MarkPartyReadyResponse contains the result of marking party ready type MarkPartyReadyResponse struct { - Success bool `json:"success,omitempty"` - AllReady bool `json:"all_ready,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` + AllReady bool `protobuf:"varint,2,opt,name=all_ready,json=allReady,proto3" json:"all_ready,omitempty"` // True if all parties are ready + ReadyCount int32 `protobuf:"varint,3,opt,name=ready_count,json=readyCount,proto3" json:"ready_count,omitempty"` + TotalParties int32 `protobuf:"varint,4,opt,name=total_parties,json=totalParties,proto3" json:"total_parties,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -// StartSessionRequest starts a session +func (x *MarkPartyReadyResponse) Reset() { + *x = MarkPartyReadyResponse{} + mi := &file_api_proto_session_coordinator_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MarkPartyReadyResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MarkPartyReadyResponse) ProtoMessage() {} + +func (x *MarkPartyReadyResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_session_coordinator_proto_msgTypes[15] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MarkPartyReadyResponse.ProtoReflect.Descriptor instead. +func (*MarkPartyReadyResponse) Descriptor() ([]byte, []int) { + return file_api_proto_session_coordinator_proto_rawDescGZIP(), []int{15} +} + +func (x *MarkPartyReadyResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *MarkPartyReadyResponse) GetAllReady() bool { + if x != nil { + return x.AllReady + } + return false +} + +func (x *MarkPartyReadyResponse) GetReadyCount() int32 { + if x != nil { + return x.ReadyCount + } + return 0 +} + +func (x *MarkPartyReadyResponse) GetTotalParties() int32 { + if x != nil { + return x.TotalParties + } + return 0 +} + +// StartSessionRequest starts the MPC protocol execution type StartSessionRequest struct { - SessionId string `json:"session_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + SessionId string `protobuf:"bytes,1,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -// StartSessionResponse contains the result +func (x *StartSessionRequest) Reset() { + *x = StartSessionRequest{} + mi := &file_api_proto_session_coordinator_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *StartSessionRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StartSessionRequest) ProtoMessage() {} + +func (x *StartSessionRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_session_coordinator_proto_msgTypes[16] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StartSessionRequest.ProtoReflect.Descriptor instead. +func (*StartSessionRequest) Descriptor() ([]byte, []int) { + return file_api_proto_session_coordinator_proto_rawDescGZIP(), []int{16} +} + +func (x *StartSessionRequest) GetSessionId() string { + if x != nil { + return x.SessionId + } + return "" +} + +// StartSessionResponse contains the result of starting the session type StartSessionResponse struct { - Success bool `json:"success,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` + Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` // New session status + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -// SessionCoordinatorServer is the server API for SessionCoordinator service. -type SessionCoordinatorServer interface { - CreateSession(context.Context, *CreateSessionRequest) (*CreateSessionResponse, error) - JoinSession(context.Context, *JoinSessionRequest) (*JoinSessionResponse, error) - GetSessionStatus(context.Context, *GetSessionStatusRequest) (*GetSessionStatusResponse, error) - ReportCompletion(context.Context, *ReportCompletionRequest) (*ReportCompletionResponse, error) - CloseSession(context.Context, *CloseSessionRequest) (*CloseSessionResponse, error) - MarkPartyReady(context.Context, *MarkPartyReadyRequest) (*MarkPartyReadyResponse, error) - StartSession(context.Context, *StartSessionRequest) (*StartSessionResponse, error) +func (x *StartSessionResponse) Reset() { + *x = StartSessionResponse{} + mi := &file_api_proto_session_coordinator_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -// UnimplementedSessionCoordinatorServer can be embedded to have forward compatible implementations. -type UnimplementedSessionCoordinatorServer struct{} - -func (UnimplementedSessionCoordinatorServer) CreateSession(context.Context, *CreateSessionRequest) (*CreateSessionResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreateSession not implemented") -} -func (UnimplementedSessionCoordinatorServer) JoinSession(context.Context, *JoinSessionRequest) (*JoinSessionResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method JoinSession not implemented") -} -func (UnimplementedSessionCoordinatorServer) GetSessionStatus(context.Context, *GetSessionStatusRequest) (*GetSessionStatusResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetSessionStatus not implemented") -} -func (UnimplementedSessionCoordinatorServer) ReportCompletion(context.Context, *ReportCompletionRequest) (*ReportCompletionResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method ReportCompletion not implemented") -} -func (UnimplementedSessionCoordinatorServer) CloseSession(context.Context, *CloseSessionRequest) (*CloseSessionResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CloseSession not implemented") -} -func (UnimplementedSessionCoordinatorServer) MarkPartyReady(context.Context, *MarkPartyReadyRequest) (*MarkPartyReadyResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method MarkPartyReady not implemented") -} -func (UnimplementedSessionCoordinatorServer) StartSession(context.Context, *StartSessionRequest) (*StartSessionResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method StartSession not implemented") +func (x *StartSessionResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -// UnsafeSessionCoordinatorServer may be embedded to opt out of forward compatibility for this service. -type UnsafeSessionCoordinatorServer interface { - mustEmbedUnimplementedSessionCoordinatorServer() +func (*StartSessionResponse) ProtoMessage() {} + +func (x *StartSessionResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_session_coordinator_proto_msgTypes[17] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var SessionCoordinator_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "mpc.coordinator.v1.SessionCoordinator", - HandlerType: (*SessionCoordinatorServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "CreateSession", - Handler: _SessionCoordinator_CreateSession_Handler, +// Deprecated: Use StartSessionResponse.ProtoReflect.Descriptor instead. +func (*StartSessionResponse) Descriptor() ([]byte, []int) { + return file_api_proto_session_coordinator_proto_rawDescGZIP(), []int{17} +} + +func (x *StartSessionResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *StartSessionResponse) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +var File_api_proto_session_coordinator_proto protoreflect.FileDescriptor + +const file_api_proto_session_coordinator_proto_rawDesc = "" + + "\n" + + "#api/proto/session_coordinator.proto\x12\x12mpc.coordinator.v1\"\x95\x02\n" + + "\x14CreateSessionRequest\x12!\n" + + "\fsession_type\x18\x01 \x01(\tR\vsessionType\x12\x1f\n" + + "\vthreshold_n\x18\x02 \x01(\x05R\n" + + "thresholdN\x12\x1f\n" + + "\vthreshold_t\x18\x03 \x01(\x05R\n" + + "thresholdT\x12G\n" + + "\fparticipants\x18\x04 \x03(\v2#.mpc.coordinator.v1.ParticipantInfoR\fparticipants\x12!\n" + + "\fmessage_hash\x18\x05 \x01(\fR\vmessageHash\x12,\n" + + "\x12expires_in_seconds\x18\x06 \x01(\x03R\x10expiresInSeconds\"m\n" + + "\x0fParticipantInfo\x12\x19\n" + + "\bparty_id\x18\x01 \x01(\tR\apartyId\x12?\n" + + "\vdevice_info\x18\x02 \x01(\v2\x1e.mpc.coordinator.v1.DeviceInfoR\n" + + "deviceInfo\"\x87\x01\n" + + "\n" + + "DeviceInfo\x12\x1f\n" + + "\vdevice_type\x18\x01 \x01(\tR\n" + + "deviceType\x12\x1b\n" + + "\tdevice_id\x18\x02 \x01(\tR\bdeviceId\x12\x1a\n" + + "\bplatform\x18\x03 \x01(\tR\bplatform\x12\x1f\n" + + "\vapp_version\x18\x04 \x01(\tR\n" + + "appVersion\"\xf0\x01\n" + + "\x15CreateSessionResponse\x12\x1d\n" + + "\n" + + "session_id\x18\x01 \x01(\tR\tsessionId\x12Z\n" + + "\vjoin_tokens\x18\x02 \x03(\v29.mpc.coordinator.v1.CreateSessionResponse.JoinTokensEntryR\n" + + "joinTokens\x12\x1d\n" + + "\n" + + "expires_at\x18\x03 \x01(\x03R\texpiresAt\x1a=\n" + + "\x0fJoinTokensEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xae\x01\n" + + "\x12JoinSessionRequest\x12\x1d\n" + + "\n" + + "session_id\x18\x01 \x01(\tR\tsessionId\x12\x19\n" + + "\bparty_id\x18\x02 \x01(\tR\apartyId\x12\x1d\n" + + "\n" + + "join_token\x18\x03 \x01(\tR\tjoinToken\x12?\n" + + "\vdevice_info\x18\x04 \x01(\v2\x1e.mpc.coordinator.v1.DeviceInfoR\n" + + "deviceInfo\"\xb7\x01\n" + + "\x13JoinSessionResponse\x12\x18\n" + + "\asuccess\x18\x01 \x01(\bR\asuccess\x12B\n" + + "\fsession_info\x18\x02 \x01(\v2\x1f.mpc.coordinator.v1.SessionInfoR\vsessionInfo\x12B\n" + + "\rother_parties\x18\x03 \x03(\v2\x1d.mpc.coordinator.v1.PartyInfoR\fotherParties\"\xcc\x01\n" + + "\vSessionInfo\x12\x1d\n" + + "\n" + + "session_id\x18\x01 \x01(\tR\tsessionId\x12!\n" + + "\fsession_type\x18\x02 \x01(\tR\vsessionType\x12\x1f\n" + + "\vthreshold_n\x18\x03 \x01(\x05R\n" + + "thresholdN\x12\x1f\n" + + "\vthreshold_t\x18\x04 \x01(\x05R\n" + + "thresholdT\x12!\n" + + "\fmessage_hash\x18\x05 \x01(\fR\vmessageHash\x12\x16\n" + + "\x06status\x18\x06 \x01(\tR\x06status\"\x88\x01\n" + + "\tPartyInfo\x12\x19\n" + + "\bparty_id\x18\x01 \x01(\tR\apartyId\x12\x1f\n" + + "\vparty_index\x18\x02 \x01(\x05R\n" + + "partyIndex\x12?\n" + + "\vdevice_info\x18\x03 \x01(\v2\x1e.mpc.coordinator.v1.DeviceInfoR\n" + + "deviceInfo\"8\n" + + "\x17GetSessionStatusRequest\x12\x1d\n" + + "\n" + + "session_id\x18\x01 \x01(\tR\tsessionId\"\xc1\x01\n" + + "\x18GetSessionStatusResponse\x12\x16\n" + + "\x06status\x18\x01 \x01(\tR\x06status\x12+\n" + + "\x11completed_parties\x18\x02 \x01(\x05R\x10completedParties\x12#\n" + + "\rtotal_parties\x18\x03 \x01(\x05R\ftotalParties\x12\x1d\n" + + "\n" + + "public_key\x18\x04 \x01(\fR\tpublicKey\x12\x1c\n" + + "\tsignature\x18\x05 \x01(\fR\tsignature\"\x90\x01\n" + + "\x17ReportCompletionRequest\x12\x1d\n" + + "\n" + + "session_id\x18\x01 \x01(\tR\tsessionId\x12\x19\n" + + "\bparty_id\x18\x02 \x01(\tR\apartyId\x12\x1d\n" + + "\n" + + "public_key\x18\x03 \x01(\fR\tpublicKey\x12\x1c\n" + + "\tsignature\x18\x04 \x01(\fR\tsignature\"Y\n" + + "\x18ReportCompletionResponse\x12\x18\n" + + "\asuccess\x18\x01 \x01(\bR\asuccess\x12#\n" + + "\rall_completed\x18\x02 \x01(\bR\fallCompleted\"4\n" + + "\x13CloseSessionRequest\x12\x1d\n" + + "\n" + + "session_id\x18\x01 \x01(\tR\tsessionId\"0\n" + + "\x14CloseSessionResponse\x12\x18\n" + + "\asuccess\x18\x01 \x01(\bR\asuccess\"Q\n" + + "\x15MarkPartyReadyRequest\x12\x1d\n" + + "\n" + + "session_id\x18\x01 \x01(\tR\tsessionId\x12\x19\n" + + "\bparty_id\x18\x02 \x01(\tR\apartyId\"\x95\x01\n" + + "\x16MarkPartyReadyResponse\x12\x18\n" + + "\asuccess\x18\x01 \x01(\bR\asuccess\x12\x1b\n" + + "\tall_ready\x18\x02 \x01(\bR\ballReady\x12\x1f\n" + + "\vready_count\x18\x03 \x01(\x05R\n" + + "readyCount\x12#\n" + + "\rtotal_parties\x18\x04 \x01(\x05R\ftotalParties\"4\n" + + "\x13StartSessionRequest\x12\x1d\n" + + "\n" + + "session_id\x18\x01 \x01(\tR\tsessionId\"H\n" + + "\x14StartSessionResponse\x12\x18\n" + + "\asuccess\x18\x01 \x01(\bR\asuccess\x12\x16\n" + + "\x06status\x18\x02 \x01(\tR\x06status2\xe7\x05\n" + + "\x12SessionCoordinator\x12d\n" + + "\rCreateSession\x12(.mpc.coordinator.v1.CreateSessionRequest\x1a).mpc.coordinator.v1.CreateSessionResponse\x12^\n" + + "\vJoinSession\x12&.mpc.coordinator.v1.JoinSessionRequest\x1a'.mpc.coordinator.v1.JoinSessionResponse\x12m\n" + + "\x10GetSessionStatus\x12+.mpc.coordinator.v1.GetSessionStatusRequest\x1a,.mpc.coordinator.v1.GetSessionStatusResponse\x12g\n" + + "\x0eMarkPartyReady\x12).mpc.coordinator.v1.MarkPartyReadyRequest\x1a*.mpc.coordinator.v1.MarkPartyReadyResponse\x12a\n" + + "\fStartSession\x12'.mpc.coordinator.v1.StartSessionRequest\x1a(.mpc.coordinator.v1.StartSessionResponse\x12m\n" + + "\x10ReportCompletion\x12+.mpc.coordinator.v1.ReportCompletionRequest\x1a,.mpc.coordinator.v1.ReportCompletionResponse\x12a\n" + + "\fCloseSession\x12'.mpc.coordinator.v1.CloseSessionRequest\x1a(.mpc.coordinator.v1.CloseSessionResponseBEZCgithub.com/rwadurian/mpc-system/api/grpc/coordinator/v1;coordinatorb\x06proto3" + +var ( + file_api_proto_session_coordinator_proto_rawDescOnce sync.Once + file_api_proto_session_coordinator_proto_rawDescData []byte +) + +func file_api_proto_session_coordinator_proto_rawDescGZIP() []byte { + file_api_proto_session_coordinator_proto_rawDescOnce.Do(func() { + file_api_proto_session_coordinator_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_api_proto_session_coordinator_proto_rawDesc), len(file_api_proto_session_coordinator_proto_rawDesc))) + }) + return file_api_proto_session_coordinator_proto_rawDescData +} + +var file_api_proto_session_coordinator_proto_msgTypes = make([]protoimpl.MessageInfo, 19) +var file_api_proto_session_coordinator_proto_goTypes = []any{ + (*CreateSessionRequest)(nil), // 0: mpc.coordinator.v1.CreateSessionRequest + (*ParticipantInfo)(nil), // 1: mpc.coordinator.v1.ParticipantInfo + (*DeviceInfo)(nil), // 2: mpc.coordinator.v1.DeviceInfo + (*CreateSessionResponse)(nil), // 3: mpc.coordinator.v1.CreateSessionResponse + (*JoinSessionRequest)(nil), // 4: mpc.coordinator.v1.JoinSessionRequest + (*JoinSessionResponse)(nil), // 5: mpc.coordinator.v1.JoinSessionResponse + (*SessionInfo)(nil), // 6: mpc.coordinator.v1.SessionInfo + (*PartyInfo)(nil), // 7: mpc.coordinator.v1.PartyInfo + (*GetSessionStatusRequest)(nil), // 8: mpc.coordinator.v1.GetSessionStatusRequest + (*GetSessionStatusResponse)(nil), // 9: mpc.coordinator.v1.GetSessionStatusResponse + (*ReportCompletionRequest)(nil), // 10: mpc.coordinator.v1.ReportCompletionRequest + (*ReportCompletionResponse)(nil), // 11: mpc.coordinator.v1.ReportCompletionResponse + (*CloseSessionRequest)(nil), // 12: mpc.coordinator.v1.CloseSessionRequest + (*CloseSessionResponse)(nil), // 13: mpc.coordinator.v1.CloseSessionResponse + (*MarkPartyReadyRequest)(nil), // 14: mpc.coordinator.v1.MarkPartyReadyRequest + (*MarkPartyReadyResponse)(nil), // 15: mpc.coordinator.v1.MarkPartyReadyResponse + (*StartSessionRequest)(nil), // 16: mpc.coordinator.v1.StartSessionRequest + (*StartSessionResponse)(nil), // 17: mpc.coordinator.v1.StartSessionResponse + nil, // 18: mpc.coordinator.v1.CreateSessionResponse.JoinTokensEntry +} +var file_api_proto_session_coordinator_proto_depIdxs = []int32{ + 1, // 0: mpc.coordinator.v1.CreateSessionRequest.participants:type_name -> mpc.coordinator.v1.ParticipantInfo + 2, // 1: mpc.coordinator.v1.ParticipantInfo.device_info:type_name -> mpc.coordinator.v1.DeviceInfo + 18, // 2: mpc.coordinator.v1.CreateSessionResponse.join_tokens:type_name -> mpc.coordinator.v1.CreateSessionResponse.JoinTokensEntry + 2, // 3: mpc.coordinator.v1.JoinSessionRequest.device_info:type_name -> mpc.coordinator.v1.DeviceInfo + 6, // 4: mpc.coordinator.v1.JoinSessionResponse.session_info:type_name -> mpc.coordinator.v1.SessionInfo + 7, // 5: mpc.coordinator.v1.JoinSessionResponse.other_parties:type_name -> mpc.coordinator.v1.PartyInfo + 2, // 6: mpc.coordinator.v1.PartyInfo.device_info:type_name -> mpc.coordinator.v1.DeviceInfo + 0, // 7: mpc.coordinator.v1.SessionCoordinator.CreateSession:input_type -> mpc.coordinator.v1.CreateSessionRequest + 4, // 8: mpc.coordinator.v1.SessionCoordinator.JoinSession:input_type -> mpc.coordinator.v1.JoinSessionRequest + 8, // 9: mpc.coordinator.v1.SessionCoordinator.GetSessionStatus:input_type -> mpc.coordinator.v1.GetSessionStatusRequest + 14, // 10: mpc.coordinator.v1.SessionCoordinator.MarkPartyReady:input_type -> mpc.coordinator.v1.MarkPartyReadyRequest + 16, // 11: mpc.coordinator.v1.SessionCoordinator.StartSession:input_type -> mpc.coordinator.v1.StartSessionRequest + 10, // 12: mpc.coordinator.v1.SessionCoordinator.ReportCompletion:input_type -> mpc.coordinator.v1.ReportCompletionRequest + 12, // 13: mpc.coordinator.v1.SessionCoordinator.CloseSession:input_type -> mpc.coordinator.v1.CloseSessionRequest + 3, // 14: mpc.coordinator.v1.SessionCoordinator.CreateSession:output_type -> mpc.coordinator.v1.CreateSessionResponse + 5, // 15: mpc.coordinator.v1.SessionCoordinator.JoinSession:output_type -> mpc.coordinator.v1.JoinSessionResponse + 9, // 16: mpc.coordinator.v1.SessionCoordinator.GetSessionStatus:output_type -> mpc.coordinator.v1.GetSessionStatusResponse + 15, // 17: mpc.coordinator.v1.SessionCoordinator.MarkPartyReady:output_type -> mpc.coordinator.v1.MarkPartyReadyResponse + 17, // 18: mpc.coordinator.v1.SessionCoordinator.StartSession:output_type -> mpc.coordinator.v1.StartSessionResponse + 11, // 19: mpc.coordinator.v1.SessionCoordinator.ReportCompletion:output_type -> mpc.coordinator.v1.ReportCompletionResponse + 13, // 20: mpc.coordinator.v1.SessionCoordinator.CloseSession:output_type -> mpc.coordinator.v1.CloseSessionResponse + 14, // [14:21] is the sub-list for method output_type + 7, // [7:14] is the sub-list for method input_type + 7, // [7:7] is the sub-list for extension type_name + 7, // [7:7] is the sub-list for extension extendee + 0, // [0:7] is the sub-list for field type_name +} + +func init() { file_api_proto_session_coordinator_proto_init() } +func file_api_proto_session_coordinator_proto_init() { + if File_api_proto_session_coordinator_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_api_proto_session_coordinator_proto_rawDesc), len(file_api_proto_session_coordinator_proto_rawDesc)), + NumEnums: 0, + NumMessages: 19, + NumExtensions: 0, + NumServices: 1, }, - { - MethodName: "JoinSession", - Handler: _SessionCoordinator_JoinSession_Handler, - }, - { - MethodName: "GetSessionStatus", - Handler: _SessionCoordinator_GetSessionStatus_Handler, - }, - { - MethodName: "ReportCompletion", - Handler: _SessionCoordinator_ReportCompletion_Handler, - }, - { - MethodName: "CloseSession", - Handler: _SessionCoordinator_CloseSession_Handler, - }, - { - MethodName: "MarkPartyReady", - Handler: _SessionCoordinator_MarkPartyReady_Handler, - }, - { - MethodName: "StartSession", - Handler: _SessionCoordinator_StartSession_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "api/proto/session_coordinator.proto", -} - -func RegisterSessionCoordinatorServer(s grpc.ServiceRegistrar, srv SessionCoordinatorServer) { - s.RegisterService(&SessionCoordinator_ServiceDesc, srv) -} - -func _SessionCoordinator_CreateSession_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(CreateSessionRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(SessionCoordinatorServer).CreateSession(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/mpc.coordinator.v1.SessionCoordinator/CreateSession", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(SessionCoordinatorServer).CreateSession(ctx, req.(*CreateSessionRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _SessionCoordinator_JoinSession_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(JoinSessionRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(SessionCoordinatorServer).JoinSession(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/mpc.coordinator.v1.SessionCoordinator/JoinSession", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(SessionCoordinatorServer).JoinSession(ctx, req.(*JoinSessionRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _SessionCoordinator_GetSessionStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetSessionStatusRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(SessionCoordinatorServer).GetSessionStatus(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/mpc.coordinator.v1.SessionCoordinator/GetSessionStatus", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(SessionCoordinatorServer).GetSessionStatus(ctx, req.(*GetSessionStatusRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _SessionCoordinator_ReportCompletion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ReportCompletionRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(SessionCoordinatorServer).ReportCompletion(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/mpc.coordinator.v1.SessionCoordinator/ReportCompletion", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(SessionCoordinatorServer).ReportCompletion(ctx, req.(*ReportCompletionRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _SessionCoordinator_CloseSession_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(CloseSessionRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(SessionCoordinatorServer).CloseSession(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/mpc.coordinator.v1.SessionCoordinator/CloseSession", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(SessionCoordinatorServer).CloseSession(ctx, req.(*CloseSessionRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _SessionCoordinator_MarkPartyReady_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(MarkPartyReadyRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(SessionCoordinatorServer).MarkPartyReady(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/mpc.coordinator.v1.SessionCoordinator/MarkPartyReady", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(SessionCoordinatorServer).MarkPartyReady(ctx, req.(*MarkPartyReadyRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _SessionCoordinator_StartSession_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(StartSessionRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(SessionCoordinatorServer).StartSession(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/mpc.coordinator.v1.SessionCoordinator/StartSession", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(SessionCoordinatorServer).StartSession(ctx, req.(*StartSessionRequest)) - } - return interceptor(ctx, in, info, handler) + GoTypes: file_api_proto_session_coordinator_proto_goTypes, + DependencyIndexes: file_api_proto_session_coordinator_proto_depIdxs, + MessageInfos: file_api_proto_session_coordinator_proto_msgTypes, + }.Build() + File_api_proto_session_coordinator_proto = out.File + file_api_proto_session_coordinator_proto_goTypes = nil + file_api_proto_session_coordinator_proto_depIdxs = nil } diff --git a/backend/mpc-system/api/grpc/coordinator/v1/session_coordinator_grpc.pb.go b/backend/mpc-system/api/grpc/coordinator/v1/session_coordinator_grpc.pb.go new file mode 100644 index 00000000..5471f4d9 --- /dev/null +++ b/backend/mpc-system/api/grpc/coordinator/v1/session_coordinator_grpc.pb.go @@ -0,0 +1,333 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc v3.12.4 +// source: api/proto/session_coordinator.proto + +package coordinator + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + SessionCoordinator_CreateSession_FullMethodName = "/mpc.coordinator.v1.SessionCoordinator/CreateSession" + SessionCoordinator_JoinSession_FullMethodName = "/mpc.coordinator.v1.SessionCoordinator/JoinSession" + SessionCoordinator_GetSessionStatus_FullMethodName = "/mpc.coordinator.v1.SessionCoordinator/GetSessionStatus" + SessionCoordinator_MarkPartyReady_FullMethodName = "/mpc.coordinator.v1.SessionCoordinator/MarkPartyReady" + SessionCoordinator_StartSession_FullMethodName = "/mpc.coordinator.v1.SessionCoordinator/StartSession" + SessionCoordinator_ReportCompletion_FullMethodName = "/mpc.coordinator.v1.SessionCoordinator/ReportCompletion" + SessionCoordinator_CloseSession_FullMethodName = "/mpc.coordinator.v1.SessionCoordinator/CloseSession" +) + +// SessionCoordinatorClient is the client API for SessionCoordinator service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type SessionCoordinatorClient interface { + // Session management + CreateSession(ctx context.Context, in *CreateSessionRequest, opts ...grpc.CallOption) (*CreateSessionResponse, error) + JoinSession(ctx context.Context, in *JoinSessionRequest, opts ...grpc.CallOption) (*JoinSessionResponse, error) + GetSessionStatus(ctx context.Context, in *GetSessionStatusRequest, opts ...grpc.CallOption) (*GetSessionStatusResponse, error) + MarkPartyReady(ctx context.Context, in *MarkPartyReadyRequest, opts ...grpc.CallOption) (*MarkPartyReadyResponse, error) + StartSession(ctx context.Context, in *StartSessionRequest, opts ...grpc.CallOption) (*StartSessionResponse, error) + ReportCompletion(ctx context.Context, in *ReportCompletionRequest, opts ...grpc.CallOption) (*ReportCompletionResponse, error) + CloseSession(ctx context.Context, in *CloseSessionRequest, opts ...grpc.CallOption) (*CloseSessionResponse, error) +} + +type sessionCoordinatorClient struct { + cc grpc.ClientConnInterface +} + +func NewSessionCoordinatorClient(cc grpc.ClientConnInterface) SessionCoordinatorClient { + return &sessionCoordinatorClient{cc} +} + +func (c *sessionCoordinatorClient) CreateSession(ctx context.Context, in *CreateSessionRequest, opts ...grpc.CallOption) (*CreateSessionResponse, error) { + out := new(CreateSessionResponse) + err := c.cc.Invoke(ctx, SessionCoordinator_CreateSession_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *sessionCoordinatorClient) JoinSession(ctx context.Context, in *JoinSessionRequest, opts ...grpc.CallOption) (*JoinSessionResponse, error) { + out := new(JoinSessionResponse) + err := c.cc.Invoke(ctx, SessionCoordinator_JoinSession_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *sessionCoordinatorClient) GetSessionStatus(ctx context.Context, in *GetSessionStatusRequest, opts ...grpc.CallOption) (*GetSessionStatusResponse, error) { + out := new(GetSessionStatusResponse) + err := c.cc.Invoke(ctx, SessionCoordinator_GetSessionStatus_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *sessionCoordinatorClient) MarkPartyReady(ctx context.Context, in *MarkPartyReadyRequest, opts ...grpc.CallOption) (*MarkPartyReadyResponse, error) { + out := new(MarkPartyReadyResponse) + err := c.cc.Invoke(ctx, SessionCoordinator_MarkPartyReady_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *sessionCoordinatorClient) StartSession(ctx context.Context, in *StartSessionRequest, opts ...grpc.CallOption) (*StartSessionResponse, error) { + out := new(StartSessionResponse) + err := c.cc.Invoke(ctx, SessionCoordinator_StartSession_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *sessionCoordinatorClient) ReportCompletion(ctx context.Context, in *ReportCompletionRequest, opts ...grpc.CallOption) (*ReportCompletionResponse, error) { + out := new(ReportCompletionResponse) + err := c.cc.Invoke(ctx, SessionCoordinator_ReportCompletion_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *sessionCoordinatorClient) CloseSession(ctx context.Context, in *CloseSessionRequest, opts ...grpc.CallOption) (*CloseSessionResponse, error) { + out := new(CloseSessionResponse) + err := c.cc.Invoke(ctx, SessionCoordinator_CloseSession_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// SessionCoordinatorServer is the server API for SessionCoordinator service. +// All implementations must embed UnimplementedSessionCoordinatorServer +// for forward compatibility +type SessionCoordinatorServer interface { + // Session management + CreateSession(context.Context, *CreateSessionRequest) (*CreateSessionResponse, error) + JoinSession(context.Context, *JoinSessionRequest) (*JoinSessionResponse, error) + GetSessionStatus(context.Context, *GetSessionStatusRequest) (*GetSessionStatusResponse, error) + MarkPartyReady(context.Context, *MarkPartyReadyRequest) (*MarkPartyReadyResponse, error) + StartSession(context.Context, *StartSessionRequest) (*StartSessionResponse, error) + ReportCompletion(context.Context, *ReportCompletionRequest) (*ReportCompletionResponse, error) + CloseSession(context.Context, *CloseSessionRequest) (*CloseSessionResponse, error) + mustEmbedUnimplementedSessionCoordinatorServer() +} + +// UnimplementedSessionCoordinatorServer must be embedded to have forward compatible implementations. +type UnimplementedSessionCoordinatorServer struct { +} + +func (UnimplementedSessionCoordinatorServer) CreateSession(context.Context, *CreateSessionRequest) (*CreateSessionResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateSession not implemented") +} +func (UnimplementedSessionCoordinatorServer) JoinSession(context.Context, *JoinSessionRequest) (*JoinSessionResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method JoinSession not implemented") +} +func (UnimplementedSessionCoordinatorServer) GetSessionStatus(context.Context, *GetSessionStatusRequest) (*GetSessionStatusResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetSessionStatus not implemented") +} +func (UnimplementedSessionCoordinatorServer) MarkPartyReady(context.Context, *MarkPartyReadyRequest) (*MarkPartyReadyResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method MarkPartyReady not implemented") +} +func (UnimplementedSessionCoordinatorServer) StartSession(context.Context, *StartSessionRequest) (*StartSessionResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method StartSession not implemented") +} +func (UnimplementedSessionCoordinatorServer) ReportCompletion(context.Context, *ReportCompletionRequest) (*ReportCompletionResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ReportCompletion not implemented") +} +func (UnimplementedSessionCoordinatorServer) CloseSession(context.Context, *CloseSessionRequest) (*CloseSessionResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CloseSession not implemented") +} +func (UnimplementedSessionCoordinatorServer) mustEmbedUnimplementedSessionCoordinatorServer() {} + +// UnsafeSessionCoordinatorServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to SessionCoordinatorServer will +// result in compilation errors. +type UnsafeSessionCoordinatorServer interface { + mustEmbedUnimplementedSessionCoordinatorServer() +} + +func RegisterSessionCoordinatorServer(s grpc.ServiceRegistrar, srv SessionCoordinatorServer) { + s.RegisterService(&SessionCoordinator_ServiceDesc, srv) +} + +func _SessionCoordinator_CreateSession_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateSessionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SessionCoordinatorServer).CreateSession(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SessionCoordinator_CreateSession_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SessionCoordinatorServer).CreateSession(ctx, req.(*CreateSessionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SessionCoordinator_JoinSession_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(JoinSessionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SessionCoordinatorServer).JoinSession(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SessionCoordinator_JoinSession_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SessionCoordinatorServer).JoinSession(ctx, req.(*JoinSessionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SessionCoordinator_GetSessionStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetSessionStatusRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SessionCoordinatorServer).GetSessionStatus(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SessionCoordinator_GetSessionStatus_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SessionCoordinatorServer).GetSessionStatus(ctx, req.(*GetSessionStatusRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SessionCoordinator_MarkPartyReady_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MarkPartyReadyRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SessionCoordinatorServer).MarkPartyReady(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SessionCoordinator_MarkPartyReady_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SessionCoordinatorServer).MarkPartyReady(ctx, req.(*MarkPartyReadyRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SessionCoordinator_StartSession_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(StartSessionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SessionCoordinatorServer).StartSession(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SessionCoordinator_StartSession_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SessionCoordinatorServer).StartSession(ctx, req.(*StartSessionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SessionCoordinator_ReportCompletion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ReportCompletionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SessionCoordinatorServer).ReportCompletion(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SessionCoordinator_ReportCompletion_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SessionCoordinatorServer).ReportCompletion(ctx, req.(*ReportCompletionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SessionCoordinator_CloseSession_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CloseSessionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SessionCoordinatorServer).CloseSession(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: SessionCoordinator_CloseSession_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SessionCoordinatorServer).CloseSession(ctx, req.(*CloseSessionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// SessionCoordinator_ServiceDesc is the grpc.ServiceDesc for SessionCoordinator service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var SessionCoordinator_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "mpc.coordinator.v1.SessionCoordinator", + HandlerType: (*SessionCoordinatorServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "CreateSession", + Handler: _SessionCoordinator_CreateSession_Handler, + }, + { + MethodName: "JoinSession", + Handler: _SessionCoordinator_JoinSession_Handler, + }, + { + MethodName: "GetSessionStatus", + Handler: _SessionCoordinator_GetSessionStatus_Handler, + }, + { + MethodName: "MarkPartyReady", + Handler: _SessionCoordinator_MarkPartyReady_Handler, + }, + { + MethodName: "StartSession", + Handler: _SessionCoordinator_StartSession_Handler, + }, + { + MethodName: "ReportCompletion", + Handler: _SessionCoordinator_ReportCompletion_Handler, + }, + { + MethodName: "CloseSession", + Handler: _SessionCoordinator_CloseSession_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "api/proto/session_coordinator.proto", +} diff --git a/backend/mpc-system/api/grpc/router/v1/message_router.pb.go b/backend/mpc-system/api/grpc/router/v1/message_router.pb.go index 8a65d20e..71f3dd0c 100644 --- a/backend/mpc-system/api/grpc/router/v1/message_router.pb.go +++ b/backend/mpc-system/api/grpc/router/v1/message_router.pb.go @@ -1,168 +1,529 @@ // Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.10 +// protoc v3.12.4 // source: api/proto/message_router.proto package router import ( - "context" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" + unsafe "unsafe" +) - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) // RouteMessageRequest routes an MPC message type RouteMessageRequest struct { - SessionId string `json:"session_id,omitempty"` - FromParty string `json:"from_party,omitempty"` - ToParties []string `json:"to_parties,omitempty"` - RoundNumber int32 `json:"round_number,omitempty"` - MessageType string `json:"message_type,omitempty"` - Payload []byte `json:"payload,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + SessionId string `protobuf:"bytes,1,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` + FromParty string `protobuf:"bytes,2,opt,name=from_party,json=fromParty,proto3" json:"from_party,omitempty"` + ToParties []string `protobuf:"bytes,3,rep,name=to_parties,json=toParties,proto3" json:"to_parties,omitempty"` // Empty for broadcast + RoundNumber int32 `protobuf:"varint,4,opt,name=round_number,json=roundNumber,proto3" json:"round_number,omitempty"` + MessageType string `protobuf:"bytes,5,opt,name=message_type,json=messageType,proto3" json:"message_type,omitempty"` + Payload []byte `protobuf:"bytes,6,opt,name=payload,proto3" json:"payload,omitempty"` // Encrypted MPC message + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RouteMessageRequest) Reset() { + *x = RouteMessageRequest{} + mi := &file_api_proto_message_router_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RouteMessageRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RouteMessageRequest) ProtoMessage() {} + +func (x *RouteMessageRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_message_router_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RouteMessageRequest.ProtoReflect.Descriptor instead. +func (*RouteMessageRequest) Descriptor() ([]byte, []int) { + return file_api_proto_message_router_proto_rawDescGZIP(), []int{0} +} + +func (x *RouteMessageRequest) GetSessionId() string { + if x != nil { + return x.SessionId + } + return "" +} + +func (x *RouteMessageRequest) GetFromParty() string { + if x != nil { + return x.FromParty + } + return "" +} + +func (x *RouteMessageRequest) GetToParties() []string { + if x != nil { + return x.ToParties + } + return nil +} + +func (x *RouteMessageRequest) GetRoundNumber() int32 { + if x != nil { + return x.RoundNumber + } + return 0 +} + +func (x *RouteMessageRequest) GetMessageType() string { + if x != nil { + return x.MessageType + } + return "" +} + +func (x *RouteMessageRequest) GetPayload() []byte { + if x != nil { + return x.Payload + } + return nil } // RouteMessageResponse confirms message routing type RouteMessageResponse struct { - Success bool `json:"success,omitempty"` - MessageId string `json:"message_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` + MessageId string `protobuf:"bytes,2,opt,name=message_id,json=messageId,proto3" json:"message_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RouteMessageResponse) Reset() { + *x = RouteMessageResponse{} + mi := &file_api_proto_message_router_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RouteMessageResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RouteMessageResponse) ProtoMessage() {} + +func (x *RouteMessageResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_message_router_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RouteMessageResponse.ProtoReflect.Descriptor instead. +func (*RouteMessageResponse) Descriptor() ([]byte, []int) { + return file_api_proto_message_router_proto_rawDescGZIP(), []int{1} +} + +func (x *RouteMessageResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *RouteMessageResponse) GetMessageId() string { + if x != nil { + return x.MessageId + } + return "" } // SubscribeMessagesRequest subscribes to messages for a party type SubscribeMessagesRequest struct { - SessionId string `json:"session_id,omitempty"` - PartyId string `json:"party_id,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + SessionId string `protobuf:"bytes,1,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` + PartyId string `protobuf:"bytes,2,opt,name=party_id,json=partyId,proto3" json:"party_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SubscribeMessagesRequest) Reset() { + *x = SubscribeMessagesRequest{} + mi := &file_api_proto_message_router_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SubscribeMessagesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubscribeMessagesRequest) ProtoMessage() {} + +func (x *SubscribeMessagesRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_message_router_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SubscribeMessagesRequest.ProtoReflect.Descriptor instead. +func (*SubscribeMessagesRequest) Descriptor() ([]byte, []int) { + return file_api_proto_message_router_proto_rawDescGZIP(), []int{2} +} + +func (x *SubscribeMessagesRequest) GetSessionId() string { + if x != nil { + return x.SessionId + } + return "" +} + +func (x *SubscribeMessagesRequest) GetPartyId() string { + if x != nil { + return x.PartyId + } + return "" } // MPCMessage represents an MPC protocol message type MPCMessage struct { - MessageId string `json:"message_id,omitempty"` - SessionId string `json:"session_id,omitempty"` - FromParty string `json:"from_party,omitempty"` - IsBroadcast bool `json:"is_broadcast,omitempty"` - RoundNumber int32 `json:"round_number,omitempty"` - MessageType string `json:"message_type,omitempty"` - Payload []byte `json:"payload,omitempty"` - CreatedAt int64 `json:"created_at,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + MessageId string `protobuf:"bytes,1,opt,name=message_id,json=messageId,proto3" json:"message_id,omitempty"` + SessionId string `protobuf:"bytes,2,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` + FromParty string `protobuf:"bytes,3,opt,name=from_party,json=fromParty,proto3" json:"from_party,omitempty"` + IsBroadcast bool `protobuf:"varint,4,opt,name=is_broadcast,json=isBroadcast,proto3" json:"is_broadcast,omitempty"` + RoundNumber int32 `protobuf:"varint,5,opt,name=round_number,json=roundNumber,proto3" json:"round_number,omitempty"` + MessageType string `protobuf:"bytes,6,opt,name=message_type,json=messageType,proto3" json:"message_type,omitempty"` + Payload []byte `protobuf:"bytes,7,opt,name=payload,proto3" json:"payload,omitempty"` + CreatedAt int64 `protobuf:"varint,8,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` // Unix timestamp milliseconds + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MPCMessage) Reset() { + *x = MPCMessage{} + mi := &file_api_proto_message_router_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MPCMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MPCMessage) ProtoMessage() {} + +func (x *MPCMessage) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_message_router_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MPCMessage.ProtoReflect.Descriptor instead. +func (*MPCMessage) Descriptor() ([]byte, []int) { + return file_api_proto_message_router_proto_rawDescGZIP(), []int{3} +} + +func (x *MPCMessage) GetMessageId() string { + if x != nil { + return x.MessageId + } + return "" +} + +func (x *MPCMessage) GetSessionId() string { + if x != nil { + return x.SessionId + } + return "" +} + +func (x *MPCMessage) GetFromParty() string { + if x != nil { + return x.FromParty + } + return "" +} + +func (x *MPCMessage) GetIsBroadcast() bool { + if x != nil { + return x.IsBroadcast + } + return false +} + +func (x *MPCMessage) GetRoundNumber() int32 { + if x != nil { + return x.RoundNumber + } + return 0 +} + +func (x *MPCMessage) GetMessageType() string { + if x != nil { + return x.MessageType + } + return "" +} + +func (x *MPCMessage) GetPayload() []byte { + if x != nil { + return x.Payload + } + return nil +} + +func (x *MPCMessage) GetCreatedAt() int64 { + if x != nil { + return x.CreatedAt + } + return 0 } // GetPendingMessagesRequest retrieves pending messages type GetPendingMessagesRequest struct { - SessionId string `json:"session_id,omitempty"` - PartyId string `json:"party_id,omitempty"` - AfterTimestamp int64 `json:"after_timestamp,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + SessionId string `protobuf:"bytes,1,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` + PartyId string `protobuf:"bytes,2,opt,name=party_id,json=partyId,proto3" json:"party_id,omitempty"` + AfterTimestamp int64 `protobuf:"varint,3,opt,name=after_timestamp,json=afterTimestamp,proto3" json:"after_timestamp,omitempty"` // Get messages after this timestamp + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetPendingMessagesRequest) Reset() { + *x = GetPendingMessagesRequest{} + mi := &file_api_proto_message_router_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetPendingMessagesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetPendingMessagesRequest) ProtoMessage() {} + +func (x *GetPendingMessagesRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_message_router_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetPendingMessagesRequest.ProtoReflect.Descriptor instead. +func (*GetPendingMessagesRequest) Descriptor() ([]byte, []int) { + return file_api_proto_message_router_proto_rawDescGZIP(), []int{4} +} + +func (x *GetPendingMessagesRequest) GetSessionId() string { + if x != nil { + return x.SessionId + } + return "" +} + +func (x *GetPendingMessagesRequest) GetPartyId() string { + if x != nil { + return x.PartyId + } + return "" +} + +func (x *GetPendingMessagesRequest) GetAfterTimestamp() int64 { + if x != nil { + return x.AfterTimestamp + } + return 0 } // GetPendingMessagesResponse contains pending messages type GetPendingMessagesResponse struct { - Messages []*MPCMessage `json:"messages,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Messages []*MPCMessage `protobuf:"bytes,1,rep,name=messages,proto3" json:"messages,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -// MessageRouterServer is the server API for MessageRouter service. -type MessageRouterServer interface { - RouteMessage(context.Context, *RouteMessageRequest) (*RouteMessageResponse, error) - SubscribeMessages(*SubscribeMessagesRequest, MessageRouter_SubscribeMessagesServer) error - GetPendingMessages(context.Context, *GetPendingMessagesRequest) (*GetPendingMessagesResponse, error) +func (x *GetPendingMessagesResponse) Reset() { + *x = GetPendingMessagesResponse{} + mi := &file_api_proto_message_router_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -// UnimplementedMessageRouterServer can be embedded to have forward compatible implementations. -type UnimplementedMessageRouterServer struct{} - -func (UnimplementedMessageRouterServer) RouteMessage(context.Context, *RouteMessageRequest) (*RouteMessageResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RouteMessage not implemented") -} -func (UnimplementedMessageRouterServer) SubscribeMessages(*SubscribeMessagesRequest, MessageRouter_SubscribeMessagesServer) error { - return status.Errorf(codes.Unimplemented, "method SubscribeMessages not implemented") -} -func (UnimplementedMessageRouterServer) GetPendingMessages(context.Context, *GetPendingMessagesRequest) (*GetPendingMessagesResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetPendingMessages not implemented") +func (x *GetPendingMessagesResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -// UnsafeMessageRouterServer may be embedded to opt out of forward compatibility for this service. -type UnsafeMessageRouterServer interface { - mustEmbedUnimplementedMessageRouterServer() +func (*GetPendingMessagesResponse) ProtoMessage() {} + +func (x *GetPendingMessagesResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_message_router_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -// MessageRouter_SubscribeMessagesServer is the server API for streaming -type MessageRouter_SubscribeMessagesServer interface { - Send(*MPCMessage) error - grpc.ServerStream +// Deprecated: Use GetPendingMessagesResponse.ProtoReflect.Descriptor instead. +func (*GetPendingMessagesResponse) Descriptor() ([]byte, []int) { + return file_api_proto_message_router_proto_rawDescGZIP(), []int{5} } -type messageRouterSubscribeMessagesServer struct { - grpc.ServerStream +func (x *GetPendingMessagesResponse) GetMessages() []*MPCMessage { + if x != nil { + return x.Messages + } + return nil } -func (x *messageRouterSubscribeMessagesServer) Send(m *MPCMessage) error { - return x.ServerStream.SendMsg(m) +var File_api_proto_message_router_proto protoreflect.FileDescriptor + +const file_api_proto_message_router_proto_rawDesc = "" + + "\n" + + "\x1eapi/proto/message_router.proto\x12\rmpc.router.v1\"\xd2\x01\n" + + "\x13RouteMessageRequest\x12\x1d\n" + + "\n" + + "session_id\x18\x01 \x01(\tR\tsessionId\x12\x1d\n" + + "\n" + + "from_party\x18\x02 \x01(\tR\tfromParty\x12\x1d\n" + + "\n" + + "to_parties\x18\x03 \x03(\tR\ttoParties\x12!\n" + + "\fround_number\x18\x04 \x01(\x05R\vroundNumber\x12!\n" + + "\fmessage_type\x18\x05 \x01(\tR\vmessageType\x12\x18\n" + + "\apayload\x18\x06 \x01(\fR\apayload\"O\n" + + "\x14RouteMessageResponse\x12\x18\n" + + "\asuccess\x18\x01 \x01(\bR\asuccess\x12\x1d\n" + + "\n" + + "message_id\x18\x02 \x01(\tR\tmessageId\"T\n" + + "\x18SubscribeMessagesRequest\x12\x1d\n" + + "\n" + + "session_id\x18\x01 \x01(\tR\tsessionId\x12\x19\n" + + "\bparty_id\x18\x02 \x01(\tR\apartyId\"\x8b\x02\n" + + "\n" + + "MPCMessage\x12\x1d\n" + + "\n" + + "message_id\x18\x01 \x01(\tR\tmessageId\x12\x1d\n" + + "\n" + + "session_id\x18\x02 \x01(\tR\tsessionId\x12\x1d\n" + + "\n" + + "from_party\x18\x03 \x01(\tR\tfromParty\x12!\n" + + "\fis_broadcast\x18\x04 \x01(\bR\visBroadcast\x12!\n" + + "\fround_number\x18\x05 \x01(\x05R\vroundNumber\x12!\n" + + "\fmessage_type\x18\x06 \x01(\tR\vmessageType\x12\x18\n" + + "\apayload\x18\a \x01(\fR\apayload\x12\x1d\n" + + "\n" + + "created_at\x18\b \x01(\x03R\tcreatedAt\"~\n" + + "\x19GetPendingMessagesRequest\x12\x1d\n" + + "\n" + + "session_id\x18\x01 \x01(\tR\tsessionId\x12\x19\n" + + "\bparty_id\x18\x02 \x01(\tR\apartyId\x12'\n" + + "\x0fafter_timestamp\x18\x03 \x01(\x03R\x0eafterTimestamp\"S\n" + + "\x1aGetPendingMessagesResponse\x125\n" + + "\bmessages\x18\x01 \x03(\v2\x19.mpc.router.v1.MPCMessageR\bmessages2\xae\x02\n" + + "\rMessageRouter\x12W\n" + + "\fRouteMessage\x12\".mpc.router.v1.RouteMessageRequest\x1a#.mpc.router.v1.RouteMessageResponse\x12Y\n" + + "\x11SubscribeMessages\x12'.mpc.router.v1.SubscribeMessagesRequest\x1a\x19.mpc.router.v1.MPCMessage0\x01\x12i\n" + + "\x12GetPendingMessages\x12(.mpc.router.v1.GetPendingMessagesRequest\x1a).mpc.router.v1.GetPendingMessagesResponseB;Z9github.com/rwadurian/mpc-system/api/grpc/router/v1;routerb\x06proto3" + +var ( + file_api_proto_message_router_proto_rawDescOnce sync.Once + file_api_proto_message_router_proto_rawDescData []byte +) + +func file_api_proto_message_router_proto_rawDescGZIP() []byte { + file_api_proto_message_router_proto_rawDescOnce.Do(func() { + file_api_proto_message_router_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_api_proto_message_router_proto_rawDesc), len(file_api_proto_message_router_proto_rawDesc))) + }) + return file_api_proto_message_router_proto_rawDescData } -var MessageRouter_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "mpc.router.v1.MessageRouter", - HandlerType: (*MessageRouterServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "RouteMessage", - Handler: _MessageRouter_RouteMessage_Handler, +var file_api_proto_message_router_proto_msgTypes = make([]protoimpl.MessageInfo, 6) +var file_api_proto_message_router_proto_goTypes = []any{ + (*RouteMessageRequest)(nil), // 0: mpc.router.v1.RouteMessageRequest + (*RouteMessageResponse)(nil), // 1: mpc.router.v1.RouteMessageResponse + (*SubscribeMessagesRequest)(nil), // 2: mpc.router.v1.SubscribeMessagesRequest + (*MPCMessage)(nil), // 3: mpc.router.v1.MPCMessage + (*GetPendingMessagesRequest)(nil), // 4: mpc.router.v1.GetPendingMessagesRequest + (*GetPendingMessagesResponse)(nil), // 5: mpc.router.v1.GetPendingMessagesResponse +} +var file_api_proto_message_router_proto_depIdxs = []int32{ + 3, // 0: mpc.router.v1.GetPendingMessagesResponse.messages:type_name -> mpc.router.v1.MPCMessage + 0, // 1: mpc.router.v1.MessageRouter.RouteMessage:input_type -> mpc.router.v1.RouteMessageRequest + 2, // 2: mpc.router.v1.MessageRouter.SubscribeMessages:input_type -> mpc.router.v1.SubscribeMessagesRequest + 4, // 3: mpc.router.v1.MessageRouter.GetPendingMessages:input_type -> mpc.router.v1.GetPendingMessagesRequest + 1, // 4: mpc.router.v1.MessageRouter.RouteMessage:output_type -> mpc.router.v1.RouteMessageResponse + 3, // 5: mpc.router.v1.MessageRouter.SubscribeMessages:output_type -> mpc.router.v1.MPCMessage + 5, // 6: mpc.router.v1.MessageRouter.GetPendingMessages:output_type -> mpc.router.v1.GetPendingMessagesResponse + 4, // [4:7] is the sub-list for method output_type + 1, // [1:4] is the sub-list for method input_type + 1, // [1:1] is the sub-list for extension type_name + 1, // [1:1] is the sub-list for extension extendee + 0, // [0:1] is the sub-list for field type_name +} + +func init() { file_api_proto_message_router_proto_init() } +func file_api_proto_message_router_proto_init() { + if File_api_proto_message_router_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_api_proto_message_router_proto_rawDesc), len(file_api_proto_message_router_proto_rawDesc)), + NumEnums: 0, + NumMessages: 6, + NumExtensions: 0, + NumServices: 1, }, - { - MethodName: "GetPendingMessages", - Handler: _MessageRouter_GetPendingMessages_Handler, - }, - }, - Streams: []grpc.StreamDesc{ - { - StreamName: "SubscribeMessages", - Handler: _MessageRouter_SubscribeMessages_Handler, - ServerStreams: true, - }, - }, - Metadata: "api/proto/message_router.proto", -} - -func RegisterMessageRouterServer(s grpc.ServiceRegistrar, srv MessageRouterServer) { - s.RegisterService(&MessageRouter_ServiceDesc, srv) -} - -func _MessageRouter_RouteMessage_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(RouteMessageRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MessageRouterServer).RouteMessage(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/mpc.router.v1.MessageRouter/RouteMessage", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MessageRouterServer).RouteMessage(ctx, req.(*RouteMessageRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _MessageRouter_SubscribeMessages_Handler(srv interface{}, stream grpc.ServerStream) error { - m := new(SubscribeMessagesRequest) - if err := stream.RecvMsg(m); err != nil { - return err - } - return srv.(MessageRouterServer).SubscribeMessages(m, &messageRouterSubscribeMessagesServer{stream}) -} - -func _MessageRouter_GetPendingMessages_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetPendingMessagesRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(MessageRouterServer).GetPendingMessages(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/mpc.router.v1.MessageRouter/GetPendingMessages", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(MessageRouterServer).GetPendingMessages(ctx, req.(*GetPendingMessagesRequest)) - } - return interceptor(ctx, in, info, handler) + GoTypes: file_api_proto_message_router_proto_goTypes, + DependencyIndexes: file_api_proto_message_router_proto_depIdxs, + MessageInfos: file_api_proto_message_router_proto_msgTypes, + }.Build() + File_api_proto_message_router_proto = out.File + file_api_proto_message_router_proto_goTypes = nil + file_api_proto_message_router_proto_depIdxs = nil } diff --git a/backend/mpc-system/api/grpc/router/v1/message_router_grpc.pb.go b/backend/mpc-system/api/grpc/router/v1/message_router_grpc.pb.go new file mode 100644 index 00000000..96f38db3 --- /dev/null +++ b/backend/mpc-system/api/grpc/router/v1/message_router_grpc.pb.go @@ -0,0 +1,217 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc v3.12.4 +// source: api/proto/message_router.proto + +package router + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + MessageRouter_RouteMessage_FullMethodName = "/mpc.router.v1.MessageRouter/RouteMessage" + MessageRouter_SubscribeMessages_FullMethodName = "/mpc.router.v1.MessageRouter/SubscribeMessages" + MessageRouter_GetPendingMessages_FullMethodName = "/mpc.router.v1.MessageRouter/GetPendingMessages" +) + +// MessageRouterClient is the client API for MessageRouter service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type MessageRouterClient interface { + // RouteMessage routes a message from one party to others + RouteMessage(ctx context.Context, in *RouteMessageRequest, opts ...grpc.CallOption) (*RouteMessageResponse, error) + // SubscribeMessages subscribes to messages for a party (streaming) + SubscribeMessages(ctx context.Context, in *SubscribeMessagesRequest, opts ...grpc.CallOption) (MessageRouter_SubscribeMessagesClient, error) + // GetPendingMessages retrieves pending messages (polling alternative) + GetPendingMessages(ctx context.Context, in *GetPendingMessagesRequest, opts ...grpc.CallOption) (*GetPendingMessagesResponse, error) +} + +type messageRouterClient struct { + cc grpc.ClientConnInterface +} + +func NewMessageRouterClient(cc grpc.ClientConnInterface) MessageRouterClient { + return &messageRouterClient{cc} +} + +func (c *messageRouterClient) RouteMessage(ctx context.Context, in *RouteMessageRequest, opts ...grpc.CallOption) (*RouteMessageResponse, error) { + out := new(RouteMessageResponse) + err := c.cc.Invoke(ctx, MessageRouter_RouteMessage_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *messageRouterClient) SubscribeMessages(ctx context.Context, in *SubscribeMessagesRequest, opts ...grpc.CallOption) (MessageRouter_SubscribeMessagesClient, error) { + stream, err := c.cc.NewStream(ctx, &MessageRouter_ServiceDesc.Streams[0], MessageRouter_SubscribeMessages_FullMethodName, opts...) + if err != nil { + return nil, err + } + x := &messageRouterSubscribeMessagesClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type MessageRouter_SubscribeMessagesClient interface { + Recv() (*MPCMessage, error) + grpc.ClientStream +} + +type messageRouterSubscribeMessagesClient struct { + grpc.ClientStream +} + +func (x *messageRouterSubscribeMessagesClient) Recv() (*MPCMessage, error) { + m := new(MPCMessage) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *messageRouterClient) GetPendingMessages(ctx context.Context, in *GetPendingMessagesRequest, opts ...grpc.CallOption) (*GetPendingMessagesResponse, error) { + out := new(GetPendingMessagesResponse) + err := c.cc.Invoke(ctx, MessageRouter_GetPendingMessages_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// MessageRouterServer is the server API for MessageRouter service. +// All implementations must embed UnimplementedMessageRouterServer +// for forward compatibility +type MessageRouterServer interface { + // RouteMessage routes a message from one party to others + RouteMessage(context.Context, *RouteMessageRequest) (*RouteMessageResponse, error) + // SubscribeMessages subscribes to messages for a party (streaming) + SubscribeMessages(*SubscribeMessagesRequest, MessageRouter_SubscribeMessagesServer) error + // GetPendingMessages retrieves pending messages (polling alternative) + GetPendingMessages(context.Context, *GetPendingMessagesRequest) (*GetPendingMessagesResponse, error) + mustEmbedUnimplementedMessageRouterServer() +} + +// UnimplementedMessageRouterServer must be embedded to have forward compatible implementations. +type UnimplementedMessageRouterServer struct { +} + +func (UnimplementedMessageRouterServer) RouteMessage(context.Context, *RouteMessageRequest) (*RouteMessageResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method RouteMessage not implemented") +} +func (UnimplementedMessageRouterServer) SubscribeMessages(*SubscribeMessagesRequest, MessageRouter_SubscribeMessagesServer) error { + return status.Errorf(codes.Unimplemented, "method SubscribeMessages not implemented") +} +func (UnimplementedMessageRouterServer) GetPendingMessages(context.Context, *GetPendingMessagesRequest) (*GetPendingMessagesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetPendingMessages not implemented") +} +func (UnimplementedMessageRouterServer) mustEmbedUnimplementedMessageRouterServer() {} + +// UnsafeMessageRouterServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to MessageRouterServer will +// result in compilation errors. +type UnsafeMessageRouterServer interface { + mustEmbedUnimplementedMessageRouterServer() +} + +func RegisterMessageRouterServer(s grpc.ServiceRegistrar, srv MessageRouterServer) { + s.RegisterService(&MessageRouter_ServiceDesc, srv) +} + +func _MessageRouter_RouteMessage_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RouteMessageRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MessageRouterServer).RouteMessage(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: MessageRouter_RouteMessage_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MessageRouterServer).RouteMessage(ctx, req.(*RouteMessageRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _MessageRouter_SubscribeMessages_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(SubscribeMessagesRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(MessageRouterServer).SubscribeMessages(m, &messageRouterSubscribeMessagesServer{stream}) +} + +type MessageRouter_SubscribeMessagesServer interface { + Send(*MPCMessage) error + grpc.ServerStream +} + +type messageRouterSubscribeMessagesServer struct { + grpc.ServerStream +} + +func (x *messageRouterSubscribeMessagesServer) Send(m *MPCMessage) error { + return x.ServerStream.SendMsg(m) +} + +func _MessageRouter_GetPendingMessages_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetPendingMessagesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MessageRouterServer).GetPendingMessages(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: MessageRouter_GetPendingMessages_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MessageRouterServer).GetPendingMessages(ctx, req.(*GetPendingMessagesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// MessageRouter_ServiceDesc is the grpc.ServiceDesc for MessageRouter service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var MessageRouter_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "mpc.router.v1.MessageRouter", + HandlerType: (*MessageRouterServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "RouteMessage", + Handler: _MessageRouter_RouteMessage_Handler, + }, + { + MethodName: "GetPendingMessages", + Handler: _MessageRouter_GetPendingMessages_Handler, + }, + }, + Streams: []grpc.StreamDesc{ + { + StreamName: "SubscribeMessages", + Handler: _MessageRouter_SubscribeMessages_Handler, + ServerStreams: true, + }, + }, + Metadata: "api/proto/message_router.proto", +} diff --git a/backend/mpc-system/services/account/adapters/input/http/account_handler.go b/backend/mpc-system/services/account/adapters/input/http/account_handler.go index d6f42420..c1245bdc 100644 --- a/backend/mpc-system/services/account/adapters/input/http/account_handler.go +++ b/backend/mpc-system/services/account/adapters/input/http/account_handler.go @@ -1,11 +1,14 @@ package http import ( + "context" "encoding/hex" "net/http" + "time" "github.com/gin-gonic/gin" "github.com/google/uuid" + "github.com/rwadurian/mpc-system/services/account/adapters/output/grpc" "github.com/rwadurian/mpc-system/services/account/application/ports" "github.com/rwadurian/mpc-system/services/account/application/use_cases" "github.com/rwadurian/mpc-system/services/account/domain/value_objects" @@ -13,19 +16,20 @@ import ( // AccountHTTPHandler handles HTTP requests for accounts type AccountHTTPHandler struct { - createAccountUC *use_cases.CreateAccountUseCase - getAccountUC *use_cases.GetAccountUseCase - updateAccountUC *use_cases.UpdateAccountUseCase - listAccountsUC *use_cases.ListAccountsUseCase - getAccountSharesUC *use_cases.GetAccountSharesUseCase - deactivateShareUC *use_cases.DeactivateShareUseCase - loginUC *use_cases.LoginUseCase - refreshTokenUC *use_cases.RefreshTokenUseCase - generateChallengeUC *use_cases.GenerateChallengeUseCase - initiateRecoveryUC *use_cases.InitiateRecoveryUseCase - completeRecoveryUC *use_cases.CompleteRecoveryUseCase - getRecoveryStatusUC *use_cases.GetRecoveryStatusUseCase - cancelRecoveryUC *use_cases.CancelRecoveryUseCase + createAccountUC *use_cases.CreateAccountUseCase + getAccountUC *use_cases.GetAccountUseCase + updateAccountUC *use_cases.UpdateAccountUseCase + listAccountsUC *use_cases.ListAccountsUseCase + getAccountSharesUC *use_cases.GetAccountSharesUseCase + deactivateShareUC *use_cases.DeactivateShareUseCase + loginUC *use_cases.LoginUseCase + refreshTokenUC *use_cases.RefreshTokenUseCase + generateChallengeUC *use_cases.GenerateChallengeUseCase + initiateRecoveryUC *use_cases.InitiateRecoveryUseCase + completeRecoveryUC *use_cases.CompleteRecoveryUseCase + getRecoveryStatusUC *use_cases.GetRecoveryStatusUseCase + cancelRecoveryUC *use_cases.CancelRecoveryUseCase + sessionCoordinatorClient *grpc.SessionCoordinatorClient } // NewAccountHTTPHandler creates a new AccountHTTPHandler @@ -43,21 +47,23 @@ func NewAccountHTTPHandler( completeRecoveryUC *use_cases.CompleteRecoveryUseCase, getRecoveryStatusUC *use_cases.GetRecoveryStatusUseCase, cancelRecoveryUC *use_cases.CancelRecoveryUseCase, + sessionCoordinatorClient *grpc.SessionCoordinatorClient, ) *AccountHTTPHandler { return &AccountHTTPHandler{ - createAccountUC: createAccountUC, - getAccountUC: getAccountUC, - updateAccountUC: updateAccountUC, - listAccountsUC: listAccountsUC, - getAccountSharesUC: getAccountSharesUC, - deactivateShareUC: deactivateShareUC, - loginUC: loginUC, - refreshTokenUC: refreshTokenUC, - generateChallengeUC: generateChallengeUC, - initiateRecoveryUC: initiateRecoveryUC, - completeRecoveryUC: completeRecoveryUC, - getRecoveryStatusUC: getRecoveryStatusUC, - cancelRecoveryUC: cancelRecoveryUC, + createAccountUC: createAccountUC, + getAccountUC: getAccountUC, + updateAccountUC: updateAccountUC, + listAccountsUC: listAccountsUC, + getAccountSharesUC: getAccountSharesUC, + deactivateShareUC: deactivateShareUC, + loginUC: loginUC, + refreshTokenUC: refreshTokenUC, + generateChallengeUC: generateChallengeUC, + initiateRecoveryUC: initiateRecoveryUC, + completeRecoveryUC: completeRecoveryUC, + getRecoveryStatusUC: getRecoveryStatusUC, + cancelRecoveryUC: cancelRecoveryUC, + sessionCoordinatorClient: sessionCoordinatorClient, } } @@ -559,22 +565,40 @@ func (h *AccountHTTPHandler) CreateKeygenSession(c *gin.Context) { return } - // Use create account use case's session coordinator client to create session - // For now, return a placeholder response - // In production, this would call the session coordinator service - sessionID := uuid.New() - joinTokens := make(map[string]string) - for _, p := range req.Participants { - joinTokens[p.PartyID] = uuid.New().String() + // Convert participants to gRPC format + participants := make([]grpc.ParticipantInfo, len(req.Participants)) + for i, p := range req.Participants { + participants[i] = grpc.ParticipantInfo{ + PartyID: p.PartyID, + DeviceType: p.DeviceType, + DeviceID: p.DeviceID, + } + } + + // Call session coordinator via gRPC + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + + resp, err := h.sessionCoordinatorClient.CreateKeygenSession( + ctx, + int32(req.ThresholdN), + int32(req.ThresholdT), + participants, + 600, // 10 minutes expiry + ) + + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return } c.JSON(http.StatusCreated, gin.H{ - "session_id": sessionID.String(), + "session_id": resp.SessionID, "session_type": "keygen", "threshold_n": req.ThresholdN, "threshold_t": req.ThresholdT, - "join_tokens": joinTokens, - "status": "waiting", + "join_tokens": resp.JoinTokens, + "status": "created", }) } @@ -631,23 +655,41 @@ func (h *AccountHTTPHandler) CreateSigningSession(c *gin.Context) { return } - // Create signing session - // For now, return a placeholder response - // In production, this would call the session coordinator service - sessionID := uuid.New() - joinTokens := make(map[string]string) - for _, p := range req.Participants { - joinTokens[p.PartyID] = uuid.New().String() + // Convert participants to gRPC format + participants := make([]grpc.ParticipantInfo, len(req.Participants)) + for i, p := range req.Participants { + participants[i] = grpc.ParticipantInfo{ + PartyID: p.PartyID, + DeviceType: p.DeviceType, + DeviceID: p.DeviceID, + } + } + + // Call session coordinator via gRPC + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + + resp, err := h.sessionCoordinatorClient.CreateSigningSession( + ctx, + int32(output.Account.ThresholdT), + participants, + messageHash, + 600, // 10 minutes expiry + ) + + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return } c.JSON(http.StatusCreated, gin.H{ - "session_id": sessionID.String(), + "session_id": resp.SessionID, "session_type": "sign", "account_id": req.AccountID, "message_hash": req.MessageHash, "threshold_t": output.Account.ThresholdT, - "join_tokens": joinTokens, - "status": "waiting", + "join_tokens": resp.JoinTokens, + "status": "created", }) } @@ -661,12 +703,30 @@ func (h *AccountHTTPHandler) GetSessionStatus(c *gin.Context) { return } - // For now, return a placeholder response - // In production, this would call the session coordinator service - c.JSON(http.StatusOK, gin.H{ + // Call session coordinator via gRPC + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + + resp, err := h.sessionCoordinatorClient.GetSessionStatus(ctx, sessionID) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + + response := gin.H{ "session_id": sessionID, - "status": "waiting", - "completed_parties": 0, - "total_parties": 3, - }) + "status": resp.Status, + "completed_parties": resp.CompletedParties, + "total_parties": resp.TotalParties, + } + + if len(resp.PublicKey) > 0 { + response["public_key"] = hex.EncodeToString(resp.PublicKey) + } + + if len(resp.Signature) > 0 { + response["signature"] = hex.EncodeToString(resp.Signature) + } + + c.JSON(http.StatusOK, response) } diff --git a/backend/mpc-system/services/account/adapters/input/http/mpc_handler.go b/backend/mpc-system/services/account/adapters/input/http/mpc_handler.go deleted file mode 100644 index 7d0818c8..00000000 --- a/backend/mpc-system/services/account/adapters/input/http/mpc_handler.go +++ /dev/null @@ -1,198 +0,0 @@ -package http - -import ( - "context" - "encoding/hex" - "net/http" - "time" - - "github.com/gin-gonic/gin" - grpcadapter "github.com/rwadurian/mpc-system/services/account/adapters/output/grpc" -) - -// MPCHandler handles MPC-related HTTP requests -type MPCHandler struct { - sessionCoordinatorClient *grpcadapter.SessionCoordinatorClient -} - -// NewMPCHandler creates a new MPCHandler -func NewMPCHandler(sessionCoordinatorClient *grpcadapter.SessionCoordinatorClient) *MPCHandler { - return &MPCHandler{ - sessionCoordinatorClient: sessionCoordinatorClient, - } -} - -// RegisterRoutes registers MPC routes -func (h *MPCHandler) RegisterRoutes(router *gin.RouterGroup) { - mpc := router.Group("/mpc") - { - mpc.POST("/keygen", h.CreateKeygenSession) - mpc.POST("/sign", h.CreateSigningSession) - mpc.GET("/sessions/:id", h.GetSessionStatus) - } -} - -// CreateKeygenSessionRequest represents a keygen session creation request -type CreateKeygenSessionRequest struct { - ThresholdN int json:"threshold_n" binding:"required,min=2,max=10" - ThresholdT int json:"threshold_t" binding:"required,min=1" - Participants []ParticipantRequest json:"participants" binding:"required,min=2" -} - -// ParticipantRequest represents a participant in a request -type ParticipantRequest struct { - PartyID string json:"party_id" binding:"required" - DeviceType string json:"device_type" binding:"required" - DeviceID string json:"device_id,omitempty" -} - -// CreateKeygenSession handles creating a new keygen session -func (h *MPCHandler) CreateKeygenSession(c *gin.Context) { - var req CreateKeygenSessionRequest - if err := c.ShouldBindJSON(&req); err != nil { - c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) - return - } - - // Validate threshold - if req.ThresholdT > req.ThresholdN { - c.JSON(http.StatusBadRequest, gin.H{"error": "threshold_t cannot be greater than threshold_n"}) - return - } - - if len(req.Participants) != req.ThresholdN { - c.JSON(http.StatusBadRequest, gin.H{"error": "number of participants must equal threshold_n"}) - return - } - - // Convert participants - participants := make([]grpcadapter.ParticipantInfo, len(req.Participants)) - for i, p := range req.Participants { - participants[i] = grpcadapter.ParticipantInfo{ - PartyID: p.PartyID, - DeviceType: p.DeviceType, - DeviceID: p.DeviceID, - } - } - - // Call gRPC service - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - defer cancel() - - resp, err := h.sessionCoordinatorClient.CreateKeygenSession( - ctx, - int32(req.ThresholdN), - int32(req.ThresholdT), - participants, - 600, // 10 minutes expiry - ) - - if err != nil { - c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) - return - } - - c.JSON(http.StatusCreated, gin.H{ - "session_id": resp.SessionID, - "session_type": "keygen", - "threshold_n": req.ThresholdN, - "threshold_t": req.ThresholdT, - "join_tokens": resp.JoinTokens, - "status": "created", - }) -} - -// CreateSigningSessionRequest represents a signing session creation request -type CreateSigningSessionRequest struct { - AccountID string json:"account_id" binding:"required" - MessageHash string json:"message_hash" binding:"required" - Participants []ParticipantRequest json:"participants" binding:"required,min=2" -} - -// CreateSigningSession handles creating a new signing session -func (h *MPCHandler) CreateSigningSession(c *gin.Context) { - var req CreateSigningSessionRequest - if err := c.ShouldBindJSON(&req); err != nil { - c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) - return - } - - // Decode message hash - messageHash, err := hex.DecodeString(req.MessageHash) - if err != nil { - c.JSON(http.StatusBadRequest, gin.H{"error": "invalid message hash format"}) - return - } - - // Convert participants - participants := make([]grpcadapter.ParticipantInfo, len(req.Participants)) - for i, p := range req.Participants { - participants[i] = grpcadapter.ParticipantInfo{ - PartyID: p.PartyID, - DeviceType: p.DeviceType, - DeviceID: p.DeviceID, - } - } - - // Determine threshold (should come from account configuration) - // For now, use len(participants) as threshold - thresholdT := int32(len(req.Participants)) - - // Call gRPC service - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - defer cancel() - - resp, err := h.sessionCoordinatorClient.CreateSigningSession( - ctx, - thresholdT, - participants, - messageHash, - 600, // 10 minutes expiry - ) - - if err != nil { - c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) - return - } - - c.JSON(http.StatusCreated, gin.H{ - "session_id": resp.SessionID, - "session_type": "sign", - "account_id": req.AccountID, - "message_hash": req.MessageHash, - "threshold_t": thresholdT, - "join_tokens": resp.JoinTokens, - "status": "created", - }) -} - -// GetSessionStatus handles querying session status -func (h *MPCHandler) GetSessionStatus(c *gin.Context) { - sessionID := c.Param("id") - - ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) - defer cancel() - - resp, err := h.sessionCoordinatorClient.GetSessionStatus(ctx, sessionID) - if err != nil { - c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) - return - } - - response := gin.H{ - "session_id": sessionID, - "status": resp.Status, - "completed_parties": resp.CompletedParties, - "total_parties": resp.TotalParties, - } - - if len(resp.PublicKey) > 0 { - response["public_key"] = hex.EncodeToString(resp.PublicKey) - } - - if len(resp.Signature) > 0 { - response["signature"] = hex.EncodeToString(resp.Signature) - } - - c.JSON(http.StatusOK, response) -} diff --git a/backend/mpc-system/services/account/cmd/server/main.go b/backend/mpc-system/services/account/cmd/server/main.go index 3cc4824f..e66e216a 100644 --- a/backend/mpc-system/services/account/cmd/server/main.go +++ b/backend/mpc-system/services/account/cmd/server/main.go @@ -20,6 +20,7 @@ import ( "github.com/rwadurian/mpc-system/pkg/jwt" "github.com/rwadurian/mpc-system/pkg/logger" httphandler "github.com/rwadurian/mpc-system/services/account/adapters/input/http" + grpcadapter "github.com/rwadurian/mpc-system/services/account/adapters/output/grpc" jwtadapter "github.com/rwadurian/mpc-system/services/account/adapters/output/jwt" "github.com/rwadurian/mpc-system/services/account/adapters/output/postgres" "github.com/rwadurian/mpc-system/services/account/adapters/output/rabbitmq" @@ -73,6 +74,14 @@ func main() { } defer rabbitConn.Close() + // Initialize gRPC client for session coordinator + sessionCoordinatorAddr := "mpc-session-coordinator:50051" + sessionCoordinatorClient, err := grpcadapter.NewSessionCoordinatorClient(sessionCoordinatorAddr) + if err != nil { + logger.Fatal("Failed to connect to session coordinator", zap.Error(err)) + } + defer sessionCoordinatorClient.Close() + // Initialize repositories accountRepo := postgres.NewAccountPostgresRepo(db) shareRepo := postgres.NewAccountSharePostgresRepo(db) @@ -136,6 +145,7 @@ func main() { completeRecoveryUC, getRecoveryStatusUC, cancelRecoveryUC, + sessionCoordinatorClient, ); err != nil { errChan <- fmt.Errorf("HTTP server error: %w", err) } @@ -225,6 +235,7 @@ func startHTTPServer( completeRecoveryUC *use_cases.CompleteRecoveryUseCase, getRecoveryStatusUC *use_cases.GetRecoveryStatusUseCase, cancelRecoveryUC *use_cases.CancelRecoveryUseCase, + sessionCoordinatorClient *grpcadapter.SessionCoordinatorClient, ) error { // Set Gin mode if cfg.Server.Environment == "production" { @@ -235,7 +246,7 @@ func startHTTPServer( router.Use(gin.Recovery()) router.Use(gin.Logger()) - // Create HTTP handler + // Create HTTP handler with session coordinator client httpHandler := httphandler.NewAccountHTTPHandler( createAccountUC, getAccountUC, @@ -250,6 +261,7 @@ func startHTTPServer( completeRecoveryUC, getRecoveryStatusUC, cancelRecoveryUC, + sessionCoordinatorClient, ) // Health check