diff --git a/generated/go/chat/v1/chat_service.pb.go b/generated/go/chat/v1/chat_service.pb.go index 4ef8021..f4a62ab 100644 --- a/generated/go/chat/v1/chat_service.pb.go +++ b/generated/go/chat/v1/chat_service.pb.go @@ -355,11 +355,56 @@ func (SetSubscriptionStateResponse_Result) EnumDescriptor() ([]byte, []int) { return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{9, 0} } +type SendMessageResponse_Result int32 + +const ( + SendMessageResponse_OK SendMessageResponse_Result = 0 +) + +// Enum value maps for SendMessageResponse_Result. +var ( + SendMessageResponse_Result_name = map[int32]string{ + 0: "OK", + } + SendMessageResponse_Result_value = map[string]int32{ + "OK": 0, + } +) + +func (x SendMessageResponse_Result) Enum() *SendMessageResponse_Result { + p := new(SendMessageResponse_Result) + *p = x + return p +} + +func (x SendMessageResponse_Result) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (SendMessageResponse_Result) Descriptor() protoreflect.EnumDescriptor { + return file_chat_v1_chat_service_proto_enumTypes[7].Descriptor() +} + +func (SendMessageResponse_Result) Type() protoreflect.EnumType { + return &file_chat_v1_chat_service_proto_enumTypes[7] +} + +func (x SendMessageResponse_Result) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use SendMessageResponse_Result.Descriptor instead. +func (SendMessageResponse_Result) EnumDescriptor() ([]byte, []int) { + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{16, 0} +} + type Pointer_Kind int32 const ( - Pointer_UNKNOWN Pointer_Kind = 0 - Pointer_READ Pointer_Kind = 1 + Pointer_UNKNOWN Pointer_Kind = 0 + Pointer_READ Pointer_Kind = 1 + Pointer_DELIVERED Pointer_Kind = 2 + Pointer_SENT Pointer_Kind = 3 // Probably always inferred by OK result in SendMessageResponse ) // Enum value maps for Pointer_Kind. @@ -367,10 +412,14 @@ var ( Pointer_Kind_name = map[int32]string{ 0: "UNKNOWN", 1: "READ", + 2: "DELIVERED", + 3: "SENT", } Pointer_Kind_value = map[string]int32{ - "UNKNOWN": 0, - "READ": 1, + "UNKNOWN": 0, + "READ": 1, + "DELIVERED": 2, + "SENT": 3, } ) @@ -385,11 +434,11 @@ func (x Pointer_Kind) String() string { } func (Pointer_Kind) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v1_chat_service_proto_enumTypes[7].Descriptor() + return file_chat_v1_chat_service_proto_enumTypes[8].Descriptor() } func (Pointer_Kind) Type() protoreflect.EnumType { - return &file_chat_v1_chat_service_proto_enumTypes[7] + return &file_chat_v1_chat_service_proto_enumTypes[8] } func (x Pointer_Kind) Number() protoreflect.EnumNumber { @@ -398,7 +447,7 @@ func (x Pointer_Kind) Number() protoreflect.EnumNumber { // Deprecated: Use Pointer_Kind.Descriptor instead. func (Pointer_Kind) EnumDescriptor() ([]byte, []int) { - return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{12, 0} + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{20, 0} } type ExchangeDataContent_Verb int32 @@ -461,11 +510,11 @@ func (x ExchangeDataContent_Verb) String() string { } func (ExchangeDataContent_Verb) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v1_chat_service_proto_enumTypes[8].Descriptor() + return file_chat_v1_chat_service_proto_enumTypes[9].Descriptor() } func (ExchangeDataContent_Verb) Type() protoreflect.EnumType { - return &file_chat_v1_chat_service_proto_enumTypes[8] + return &file_chat_v1_chat_service_proto_enumTypes[9] } func (x ExchangeDataContent_Verb) Number() protoreflect.EnumNumber { @@ -474,7 +523,7 @@ func (x ExchangeDataContent_Verb) Number() protoreflect.EnumNumber { // Deprecated: Use ExchangeDataContent_Verb.Descriptor instead. func (ExchangeDataContent_Verb) EnumDescriptor() ([]byte, []int) { - return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{17, 0} + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{25, 0} } type GetChatsRequest struct { @@ -1107,6 +1156,460 @@ func (x *SetSubscriptionStateResponse) GetResult() SetSubscriptionStateResponse_ return SetSubscriptionStateResponse_OK } +type OpenChatEventStream struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ChatId *ChatId `protobuf:"bytes,1,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"` + Owner *v1.SolanaAccountId `protobuf:"bytes,2,opt,name=owner,proto3" json:"owner,omitempty"` + Signature *v1.Signature `protobuf:"bytes,3,opt,name=signature,proto3" json:"signature,omitempty"` +} + +func (x *OpenChatEventStream) Reset() { + *x = OpenChatEventStream{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v1_chat_service_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *OpenChatEventStream) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OpenChatEventStream) ProtoMessage() {} + +func (x *OpenChatEventStream) ProtoReflect() protoreflect.Message { + mi := &file_chat_v1_chat_service_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use OpenChatEventStream.ProtoReflect.Descriptor instead. +func (*OpenChatEventStream) Descriptor() ([]byte, []int) { + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{10} +} + +func (x *OpenChatEventStream) GetChatId() *ChatId { + if x != nil { + return x.ChatId + } + return nil +} + +func (x *OpenChatEventStream) GetOwner() *v1.SolanaAccountId { + if x != nil { + return x.Owner + } + return nil +} + +func (x *OpenChatEventStream) GetSignature() *v1.Signature { + if x != nil { + return x.Signature + } + return nil +} + +type ChatStreamEvent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Messages []*ChatMessage `protobuf:"bytes,1,rep,name=messages,proto3" json:"messages,omitempty"` + Pointers []*Pointer `protobuf:"bytes,2,rep,name=pointers,proto3" json:"pointers,omitempty"` +} + +func (x *ChatStreamEvent) Reset() { + *x = ChatStreamEvent{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v1_chat_service_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChatStreamEvent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChatStreamEvent) ProtoMessage() {} + +func (x *ChatStreamEvent) ProtoReflect() protoreflect.Message { + mi := &file_chat_v1_chat_service_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChatStreamEvent.ProtoReflect.Descriptor instead. +func (*ChatStreamEvent) Descriptor() ([]byte, []int) { + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{11} +} + +func (x *ChatStreamEvent) GetMessages() []*ChatMessage { + if x != nil { + return x.Messages + } + return nil +} + +func (x *ChatStreamEvent) GetPointers() []*Pointer { + if x != nil { + return x.Pointers + } + return nil +} + +type ChatStreamEventBatch struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Events []*ChatStreamEvent `protobuf:"bytes,2,rep,name=events,proto3" json:"events,omitempty"` +} + +func (x *ChatStreamEventBatch) Reset() { + *x = ChatStreamEventBatch{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v1_chat_service_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChatStreamEventBatch) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChatStreamEventBatch) ProtoMessage() {} + +func (x *ChatStreamEventBatch) ProtoReflect() protoreflect.Message { + mi := &file_chat_v1_chat_service_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChatStreamEventBatch.ProtoReflect.Descriptor instead. +func (*ChatStreamEventBatch) Descriptor() ([]byte, []int) { + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{12} +} + +func (x *ChatStreamEventBatch) GetEvents() []*ChatStreamEvent { + if x != nil { + return x.Events + } + return nil +} + +type StreamChatEventsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Type: + // + // *StreamChatEventsRequest_OpenStream + // *StreamChatEventsRequest_Pong + Type isStreamChatEventsRequest_Type `protobuf_oneof:"type"` +} + +func (x *StreamChatEventsRequest) Reset() { + *x = StreamChatEventsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v1_chat_service_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StreamChatEventsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StreamChatEventsRequest) ProtoMessage() {} + +func (x *StreamChatEventsRequest) ProtoReflect() protoreflect.Message { + mi := &file_chat_v1_chat_service_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StreamChatEventsRequest.ProtoReflect.Descriptor instead. +func (*StreamChatEventsRequest) Descriptor() ([]byte, []int) { + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{13} +} + +func (m *StreamChatEventsRequest) GetType() isStreamChatEventsRequest_Type { + if m != nil { + return m.Type + } + return nil +} + +func (x *StreamChatEventsRequest) GetOpenStream() *OpenChatEventStream { + if x, ok := x.GetType().(*StreamChatEventsRequest_OpenStream); ok { + return x.OpenStream + } + return nil +} + +func (x *StreamChatEventsRequest) GetPong() *v1.ClientPong { + if x, ok := x.GetType().(*StreamChatEventsRequest_Pong); ok { + return x.Pong + } + return nil +} + +type isStreamChatEventsRequest_Type interface { + isStreamChatEventsRequest_Type() +} + +type StreamChatEventsRequest_OpenStream struct { + OpenStream *OpenChatEventStream `protobuf:"bytes,1,opt,name=open_stream,json=openStream,proto3,oneof"` +} + +type StreamChatEventsRequest_Pong struct { + Pong *v1.ClientPong `protobuf:"bytes,2,opt,name=pong,proto3,oneof"` +} + +func (*StreamChatEventsRequest_OpenStream) isStreamChatEventsRequest_Type() {} + +func (*StreamChatEventsRequest_Pong) isStreamChatEventsRequest_Type() {} + +type StreamChatEventsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Type: + // + // *StreamChatEventsResponse_Events + // *StreamChatEventsResponse_Ping + Type isStreamChatEventsResponse_Type `protobuf_oneof:"type"` +} + +func (x *StreamChatEventsResponse) Reset() { + *x = StreamChatEventsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v1_chat_service_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StreamChatEventsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StreamChatEventsResponse) ProtoMessage() {} + +func (x *StreamChatEventsResponse) ProtoReflect() protoreflect.Message { + mi := &file_chat_v1_chat_service_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StreamChatEventsResponse.ProtoReflect.Descriptor instead. +func (*StreamChatEventsResponse) Descriptor() ([]byte, []int) { + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{14} +} + +func (m *StreamChatEventsResponse) GetType() isStreamChatEventsResponse_Type { + if m != nil { + return m.Type + } + return nil +} + +func (x *StreamChatEventsResponse) GetEvents() *ChatStreamEventBatch { + if x, ok := x.GetType().(*StreamChatEventsResponse_Events); ok { + return x.Events + } + return nil +} + +func (x *StreamChatEventsResponse) GetPing() *v1.ServerPing { + if x, ok := x.GetType().(*StreamChatEventsResponse_Ping); ok { + return x.Ping + } + return nil +} + +type isStreamChatEventsResponse_Type interface { + isStreamChatEventsResponse_Type() +} + +type StreamChatEventsResponse_Events struct { + Events *ChatStreamEventBatch `protobuf:"bytes,1,opt,name=events,proto3,oneof"` +} + +type StreamChatEventsResponse_Ping struct { + Ping *v1.ServerPing `protobuf:"bytes,2,opt,name=ping,proto3,oneof"` +} + +func (*StreamChatEventsResponse_Events) isStreamChatEventsResponse_Type() {} + +func (*StreamChatEventsResponse_Ping) isStreamChatEventsResponse_Type() {} + +type SendMessageRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Owner *v1.SolanaAccountId `protobuf:"bytes,1,opt,name=owner,proto3" json:"owner,omitempty"` + Signature *v1.Signature `protobuf:"bytes,2,opt,name=signature,proto3" json:"signature,omitempty"` + ChatId *ChatId `protobuf:"bytes,3,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"` + // todo: What field type should this be? Maybe the chat message itself with fields missing? + Content []*Content `protobuf:"bytes,4,rep,name=content,proto3" json:"content,omitempty"` +} + +func (x *SendMessageRequest) Reset() { + *x = SendMessageRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v1_chat_service_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SendMessageRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SendMessageRequest) ProtoMessage() {} + +func (x *SendMessageRequest) ProtoReflect() protoreflect.Message { + mi := &file_chat_v1_chat_service_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SendMessageRequest.ProtoReflect.Descriptor instead. +func (*SendMessageRequest) Descriptor() ([]byte, []int) { + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{15} +} + +func (x *SendMessageRequest) GetOwner() *v1.SolanaAccountId { + if x != nil { + return x.Owner + } + return nil +} + +func (x *SendMessageRequest) GetSignature() *v1.Signature { + if x != nil { + return x.Signature + } + return nil +} + +func (x *SendMessageRequest) GetChatId() *ChatId { + if x != nil { + return x.ChatId + } + return nil +} + +func (x *SendMessageRequest) GetContent() []*Content { + if x != nil { + return x.Content + } + return nil +} + +type SendMessageResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Result SendMessageResponse_Result `protobuf:"varint,1,opt,name=result,proto3,enum=code.chat.v1.SendMessageResponse_Result" json:"result,omitempty"` + Message *ChatMessage `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` +} + +func (x *SendMessageResponse) Reset() { + *x = SendMessageResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v1_chat_service_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SendMessageResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SendMessageResponse) ProtoMessage() {} + +func (x *SendMessageResponse) ProtoReflect() protoreflect.Message { + mi := &file_chat_v1_chat_service_proto_msgTypes[16] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SendMessageResponse.ProtoReflect.Descriptor instead. +func (*SendMessageResponse) Descriptor() ([]byte, []int) { + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{16} +} + +func (x *SendMessageResponse) GetResult() SendMessageResponse_Result { + if x != nil { + return x.Result + } + return SendMessageResponse_OK +} + +func (x *SendMessageResponse) GetMessage() *ChatMessage { + if x != nil { + return x.Message + } + return nil +} + type ChatId struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1118,7 +1621,7 @@ type ChatId struct { func (x *ChatId) Reset() { *x = ChatId{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_chat_service_proto_msgTypes[10] + mi := &file_chat_v1_chat_service_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1131,7 +1634,7 @@ func (x *ChatId) String() string { func (*ChatId) ProtoMessage() {} func (x *ChatId) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_chat_service_proto_msgTypes[10] + mi := &file_chat_v1_chat_service_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1144,41 +1647,89 @@ func (x *ChatId) ProtoReflect() protoreflect.Message { // Deprecated: Use ChatId.ProtoReflect.Descriptor instead. func (*ChatId) Descriptor() ([]byte, []int) { - return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{10} + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{17} +} + +func (x *ChatId) GetValue() []byte { + if x != nil { + return x.Value + } + return nil +} + +type ChatMessageId struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Value []byte `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *ChatMessageId) Reset() { + *x = ChatMessageId{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v1_chat_service_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChatMessageId) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChatMessageId) ProtoMessage() {} + +func (x *ChatMessageId) ProtoReflect() protoreflect.Message { + mi := &file_chat_v1_chat_service_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChatMessageId.ProtoReflect.Descriptor instead. +func (*ChatMessageId) Descriptor() ([]byte, []int) { + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{18} } -func (x *ChatId) GetValue() []byte { +func (x *ChatMessageId) GetValue() []byte { if x != nil { return x.Value } return nil } -type ChatMessageId struct { +type ChatMemberId struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // todo: Public key for now Value []byte `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` } -func (x *ChatMessageId) Reset() { - *x = ChatMessageId{} +func (x *ChatMemberId) Reset() { + *x = ChatMemberId{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_chat_service_proto_msgTypes[11] + mi := &file_chat_v1_chat_service_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *ChatMessageId) String() string { +func (x *ChatMemberId) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ChatMessageId) ProtoMessage() {} +func (*ChatMemberId) ProtoMessage() {} -func (x *ChatMessageId) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_chat_service_proto_msgTypes[11] +func (x *ChatMemberId) ProtoReflect() protoreflect.Message { + mi := &file_chat_v1_chat_service_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1189,12 +1740,12 @@ func (x *ChatMessageId) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ChatMessageId.ProtoReflect.Descriptor instead. -func (*ChatMessageId) Descriptor() ([]byte, []int) { - return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{11} +// Deprecated: Use ChatMemberId.ProtoReflect.Descriptor instead. +func (*ChatMemberId) Descriptor() ([]byte, []int) { + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{19} } -func (x *ChatMessageId) GetValue() []byte { +func (x *ChatMemberId) GetValue() []byte { if x != nil { return x.Value } @@ -1208,12 +1759,13 @@ type Pointer struct { Kind Pointer_Kind `protobuf:"varint,1,opt,name=kind,proto3,enum=code.chat.v1.Pointer_Kind" json:"kind,omitempty"` Value *ChatMessageId `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + User *ChatMemberId `protobuf:"bytes,3,opt,name=user,proto3" json:"user,omitempty"` } func (x *Pointer) Reset() { *x = Pointer{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_chat_service_proto_msgTypes[12] + mi := &file_chat_v1_chat_service_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1226,7 +1778,7 @@ func (x *Pointer) String() string { func (*Pointer) ProtoMessage() {} func (x *Pointer) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_chat_service_proto_msgTypes[12] + mi := &file_chat_v1_chat_service_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1239,7 +1791,7 @@ func (x *Pointer) ProtoReflect() protoreflect.Message { // Deprecated: Use Pointer.ProtoReflect.Descriptor instead. func (*Pointer) Descriptor() ([]byte, []int) { - return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{12} + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{20} } func (x *Pointer) GetKind() Pointer_Kind { @@ -1256,6 +1808,13 @@ func (x *Pointer) GetValue() *ChatMessageId { return nil } +func (x *Pointer) GetUser() *ChatMemberId { + if x != nil { + return x.User + } + return nil +} + type ChatMetadata struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1293,7 +1852,7 @@ type ChatMetadata struct { func (x *ChatMetadata) Reset() { *x = ChatMetadata{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_chat_service_proto_msgTypes[13] + mi := &file_chat_v1_chat_service_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1306,7 +1865,7 @@ func (x *ChatMetadata) String() string { func (*ChatMetadata) ProtoMessage() {} func (x *ChatMetadata) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_chat_service_proto_msgTypes[13] + mi := &file_chat_v1_chat_service_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1319,7 +1878,7 @@ func (x *ChatMetadata) ProtoReflect() protoreflect.Message { // Deprecated: Use ChatMetadata.ProtoReflect.Descriptor instead. func (*ChatMetadata) Descriptor() ([]byte, []int) { - return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{13} + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{21} } func (x *ChatMetadata) GetChatId() *ChatId { @@ -1336,7 +1895,7 @@ func (m *ChatMetadata) GetTitle() isChatMetadata_Title { return nil } -func (x *ChatMetadata) GetLocalized() *LocalizedContent { +func (x *ChatMetadata) GetLocalized() *ServerLocalizedContent { if x, ok := x.GetTitle().(*ChatMetadata_Localized); ok { return x.Localized } @@ -1411,7 +1970,7 @@ type isChatMetadata_Title interface { } type ChatMetadata_Localized struct { - Localized *LocalizedContent `protobuf:"bytes,2,opt,name=localized,proto3,oneof"` + Localized *ServerLocalizedContent `protobuf:"bytes,2,opt,name=localized,proto3,oneof"` } type ChatMetadata_Domain struct { @@ -1434,13 +1993,14 @@ type ChatMessage struct { // Ordered message content. A message may have more than one piece of content. Content []*Content `protobuf:"bytes,3,rep,name=content,proto3" json:"content,omitempty"` // Cursor value for this message for reference in subsequent GetMessagesRequest - Cursor *Cursor `protobuf:"bytes,4,opt,name=cursor,proto3" json:"cursor,omitempty"` + Cursor *Cursor `protobuf:"bytes,4,opt,name=cursor,proto3" json:"cursor,omitempty"` + Sender *ChatMemberId `protobuf:"bytes,5,opt,name=sender,proto3" json:"sender,omitempty"` } func (x *ChatMessage) Reset() { *x = ChatMessage{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_chat_service_proto_msgTypes[14] + mi := &file_chat_v1_chat_service_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1453,7 +2013,7 @@ func (x *ChatMessage) String() string { func (*ChatMessage) ProtoMessage() {} func (x *ChatMessage) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_chat_service_proto_msgTypes[14] + mi := &file_chat_v1_chat_service_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1466,7 +2026,7 @@ func (x *ChatMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use ChatMessage.ProtoReflect.Descriptor instead. func (*ChatMessage) Descriptor() ([]byte, []int) { - return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{14} + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{22} } func (x *ChatMessage) GetMessageId() *ChatMessageId { @@ -1497,6 +2057,13 @@ func (x *ChatMessage) GetCursor() *Cursor { return nil } +func (x *ChatMessage) GetSender() *ChatMemberId { + if x != nil { + return x.Sender + } + return nil +} + type Content struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1504,16 +2071,18 @@ type Content struct { // Types that are assignable to Type: // - // *Content_Localized + // *Content_ServerLocalized // *Content_ExchangeData // *Content_NaclBox + // *Content_Text + // *Content_ThankYou Type isContent_Type `protobuf_oneof:"type"` } func (x *Content) Reset() { *x = Content{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_chat_service_proto_msgTypes[15] + mi := &file_chat_v1_chat_service_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1526,7 +2095,7 @@ func (x *Content) String() string { func (*Content) ProtoMessage() {} func (x *Content) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_chat_service_proto_msgTypes[15] + mi := &file_chat_v1_chat_service_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1539,7 +2108,7 @@ func (x *Content) ProtoReflect() protoreflect.Message { // Deprecated: Use Content.ProtoReflect.Descriptor instead. func (*Content) Descriptor() ([]byte, []int) { - return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{15} + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{23} } func (m *Content) GetType() isContent_Type { @@ -1549,9 +2118,9 @@ func (m *Content) GetType() isContent_Type { return nil } -func (x *Content) GetLocalized() *LocalizedContent { - if x, ok := x.GetType().(*Content_Localized); ok { - return x.Localized +func (x *Content) GetServerLocalized() *ServerLocalizedContent { + if x, ok := x.GetType().(*Content_ServerLocalized); ok { + return x.ServerLocalized } return nil } @@ -1570,12 +2139,26 @@ func (x *Content) GetNaclBox() *NaclBoxEncryptedContent { return nil } +func (x *Content) GetText() *TextContent { + if x, ok := x.GetType().(*Content_Text); ok { + return x.Text + } + return nil +} + +func (x *Content) GetThankYou() *ThankYouContent { + if x, ok := x.GetType().(*Content_ThankYou); ok { + return x.ThankYou + } + return nil +} + type isContent_Type interface { isContent_Type() } -type Content_Localized struct { - Localized *LocalizedContent `protobuf:"bytes,1,opt,name=localized,proto3,oneof"` +type Content_ServerLocalized struct { + ServerLocalized *ServerLocalizedContent `protobuf:"bytes,1,opt,name=server_localized,json=serverLocalized,proto3,oneof"` } type Content_ExchangeData struct { @@ -1586,13 +2169,25 @@ type Content_NaclBox struct { NaclBox *NaclBoxEncryptedContent `protobuf:"bytes,3,opt,name=nacl_box,json=naclBox,proto3,oneof"` } -func (*Content_Localized) isContent_Type() {} +type Content_Text struct { + Text *TextContent `protobuf:"bytes,4,opt,name=text,proto3,oneof"` +} + +type Content_ThankYou struct { + ThankYou *ThankYouContent `protobuf:"bytes,5,opt,name=thank_you,json=thankYou,proto3,oneof"` +} + +func (*Content_ServerLocalized) isContent_Type() {} func (*Content_ExchangeData) isContent_Type() {} func (*Content_NaclBox) isContent_Type() {} -type LocalizedContent struct { +func (*Content_Text) isContent_Type() {} + +func (*Content_ThankYou) isContent_Type() {} + +type ServerLocalizedContent struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -1602,23 +2197,23 @@ type LocalizedContent struct { KeyOrText string `protobuf:"bytes,1,opt,name=key_or_text,json=keyOrText,proto3" json:"key_or_text,omitempty"` } -func (x *LocalizedContent) Reset() { - *x = LocalizedContent{} +func (x *ServerLocalizedContent) Reset() { + *x = ServerLocalizedContent{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_chat_service_proto_msgTypes[16] + mi := &file_chat_v1_chat_service_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *LocalizedContent) String() string { +func (x *ServerLocalizedContent) String() string { return protoimpl.X.MessageStringOf(x) } -func (*LocalizedContent) ProtoMessage() {} +func (*ServerLocalizedContent) ProtoMessage() {} -func (x *LocalizedContent) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_chat_service_proto_msgTypes[16] +func (x *ServerLocalizedContent) ProtoReflect() protoreflect.Message { + mi := &file_chat_v1_chat_service_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1629,12 +2224,12 @@ func (x *LocalizedContent) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use LocalizedContent.ProtoReflect.Descriptor instead. -func (*LocalizedContent) Descriptor() ([]byte, []int) { - return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{16} +// Deprecated: Use ServerLocalizedContent.ProtoReflect.Descriptor instead. +func (*ServerLocalizedContent) Descriptor() ([]byte, []int) { + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{24} } -func (x *LocalizedContent) GetKeyOrText() string { +func (x *ServerLocalizedContent) GetKeyOrText() string { if x != nil { return x.KeyOrText } @@ -1657,7 +2252,7 @@ type ExchangeDataContent struct { func (x *ExchangeDataContent) Reset() { *x = ExchangeDataContent{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_chat_service_proto_msgTypes[17] + mi := &file_chat_v1_chat_service_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1670,7 +2265,7 @@ func (x *ExchangeDataContent) String() string { func (*ExchangeDataContent) ProtoMessage() {} func (x *ExchangeDataContent) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_chat_service_proto_msgTypes[17] + mi := &file_chat_v1_chat_service_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1683,7 +2278,7 @@ func (x *ExchangeDataContent) ProtoReflect() protoreflect.Message { // Deprecated: Use ExchangeDataContent.ProtoReflect.Descriptor instead. func (*ExchangeDataContent) Descriptor() ([]byte, []int) { - return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{17} + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{25} } func (x *ExchangeDataContent) GetVerb() ExchangeDataContent_Verb { @@ -1743,7 +2338,7 @@ type NaclBoxEncryptedContent struct { func (x *NaclBoxEncryptedContent) Reset() { *x = NaclBoxEncryptedContent{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_chat_service_proto_msgTypes[18] + mi := &file_chat_v1_chat_service_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1756,7 +2351,7 @@ func (x *NaclBoxEncryptedContent) String() string { func (*NaclBoxEncryptedContent) ProtoMessage() {} func (x *NaclBoxEncryptedContent) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_chat_service_proto_msgTypes[18] + mi := &file_chat_v1_chat_service_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1769,7 +2364,7 @@ func (x *NaclBoxEncryptedContent) ProtoReflect() protoreflect.Message { // Deprecated: Use NaclBoxEncryptedContent.ProtoReflect.Descriptor instead. func (*NaclBoxEncryptedContent) Descriptor() ([]byte, []int) { - return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{18} + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{26} } func (x *NaclBoxEncryptedContent) GetPeerPublicKey() *v1.SolanaAccountId { @@ -1793,6 +2388,91 @@ func (x *NaclBoxEncryptedContent) GetEncryptedPayload() []byte { return nil } +type TextContent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Text string `protobuf:"bytes,1,opt,name=text,proto3" json:"text,omitempty"` +} + +func (x *TextContent) Reset() { + *x = TextContent{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v1_chat_service_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TextContent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TextContent) ProtoMessage() {} + +func (x *TextContent) ProtoReflect() protoreflect.Message { + mi := &file_chat_v1_chat_service_proto_msgTypes[27] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TextContent.ProtoReflect.Descriptor instead. +func (*TextContent) Descriptor() ([]byte, []int) { + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{27} +} + +func (x *TextContent) GetText() string { + if x != nil { + return x.Text + } + return "" +} + +type ThankYouContent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *ThankYouContent) Reset() { + *x = ThankYouContent{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v1_chat_service_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ThankYouContent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ThankYouContent) ProtoMessage() {} + +func (x *ThankYouContent) ProtoReflect() protoreflect.Message { + mi := &file_chat_v1_chat_service_proto_msgTypes[28] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ThankYouContent.ProtoReflect.Descriptor instead. +func (*ThankYouContent) Descriptor() ([]byte, []int) { + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{28} +} + // Opaque cursor used across paged APIs. Underlying bytes may change as paging // strategies evolve. type Cursor struct { @@ -1806,7 +2486,7 @@ type Cursor struct { func (x *Cursor) Reset() { *x = Cursor{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_chat_service_proto_msgTypes[19] + mi := &file_chat_v1_chat_service_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1819,7 +2499,7 @@ func (x *Cursor) String() string { func (*Cursor) ProtoMessage() {} func (x *Cursor) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_chat_service_proto_msgTypes[19] + mi := &file_chat_v1_chat_service_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1832,7 +2512,7 @@ func (x *Cursor) ProtoReflect() protoreflect.Message { // Deprecated: Use Cursor.ProtoReflect.Descriptor instead. func (*Cursor) Descriptor() ([]byte, []int) { - return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{19} + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{29} } func (x *Cursor) GetValue() []byte { @@ -2004,166 +2684,279 @@ var file_chat_v1_chat_service_proto_rawDesc = []byte{ 0x3a, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x41, 0x4e, 0x54, 0x5f, 0x55, 0x4e, - 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, 0x10, 0x02, 0x22, 0x2b, 0x0a, 0x06, 0x43, - 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x20, 0x18, - 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x32, 0x0a, 0x0d, 0x43, 0x68, 0x61, 0x74, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, - 0x04, 0x10, 0x20, 0x18, 0x40, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x97, 0x01, 0x0a, - 0x07, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x2e, 0x4b, 0x69, - 0x6e, 0x64, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x3d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x1d, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, - 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, - 0x52, 0x45, 0x41, 0x44, 0x10, 0x01, 0x22, 0xf7, 0x03, 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x74, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, - 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, - 0x49, 0x64, 0x12, 0x3e, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, - 0x65, 0x64, 0x12, 0x30, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x48, 0x00, 0x52, 0x06, 0x64, 0x6f, - 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x38, 0x0a, 0x0c, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x52, 0x0b, 0x72, 0x65, 0x61, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x1d, - 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x19, 0x0a, - 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x73, - 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0c, 0x69, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x12, 0x19, 0x0a, - 0x08, 0x63, 0x61, 0x6e, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x07, 0x63, 0x61, 0x6e, 0x4d, 0x75, 0x74, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x61, 0x6e, 0x5f, - 0x75, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0e, 0x63, 0x61, 0x6e, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, - 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, - 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x0b, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, - 0x42, 0x0e, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, - 0x22, 0xfa, 0x01, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x12, 0x46, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, - 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x02, 0x74, 0x73, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xb2, 0x01, 0x02, 0x08, 0x01, 0x52, 0x02, 0x74, 0x73, - 0x12, 0x3d, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, - 0x01, 0x04, 0x08, 0x01, 0x10, 0x0a, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, - 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xe6, 0x01, - 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x3e, 0x0a, 0x09, 0x6c, 0x6f, 0x63, - 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x63, 0x61, - 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, - 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x12, 0x48, 0x0a, 0x0d, 0x65, 0x78, 0x63, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, - 0x61, 0x74, 0x61, 0x12, 0x42, 0x0a, 0x08, 0x6e, 0x61, 0x63, 0x6c, 0x5f, 0x62, 0x6f, 0x78, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, - 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x07, - 0x6e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, - 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x40, 0x0a, 0x10, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, - 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x0b, 0x6b, 0x65, - 0x79, 0x5f, 0x6f, 0x72, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x09, 0x6b, - 0x65, 0x79, 0x4f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x22, 0x95, 0x03, 0x0a, 0x13, 0x45, 0x78, 0x63, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x12, 0x3a, 0x0a, 0x04, 0x76, 0x65, 0x72, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x52, 0x04, 0x76, 0x65, 0x72, 0x62, 0x12, 0x39, 0x0a, 0x05, - 0x65, 0x78, 0x61, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, - 0x52, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x12, 0x48, 0x0a, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, - 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, - 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x57, 0x69, 0x74, 0x68, 0x6f, - 0x75, 0x74, 0x52, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, - 0x6c, 0x22, 0xa4, 0x01, 0x0a, 0x04, 0x56, 0x65, 0x72, 0x62, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, - 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x47, 0x41, 0x56, 0x45, 0x10, - 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x10, 0x02, 0x12, - 0x0c, 0x0a, 0x08, 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, 0x45, 0x57, 0x10, 0x03, 0x12, 0x0d, 0x0a, - 0x09, 0x44, 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, - 0x53, 0x45, 0x4e, 0x54, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, - 0x45, 0x44, 0x10, 0x06, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x50, 0x45, 0x4e, 0x54, 0x10, 0x07, 0x12, - 0x08, 0x0a, 0x04, 0x50, 0x41, 0x49, 0x44, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x55, 0x52, - 0x43, 0x48, 0x41, 0x53, 0x45, 0x44, 0x10, 0x09, 0x12, 0x10, 0x0a, 0x0c, 0x52, 0x45, 0x43, 0x45, - 0x49, 0x56, 0x45, 0x44, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0a, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x45, - 0x4e, 0x54, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0b, 0x42, 0x16, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, - 0x22, 0xcc, 0x01, 0x0a, 0x17, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, - 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x0f, - 0x70, 0x65, 0x65, 0x72, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, - 0x10, 0x01, 0x52, 0x0d, 0x70, 0x65, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, - 0x79, 0x12, 0x21, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, - 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x18, 0x18, 0x18, 0x52, 0x05, 0x6e, - 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x39, 0x0a, 0x11, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, - 0x64, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, - 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x7a, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x10, 0x65, - 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, - 0x2b, 0x0a, 0x06, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, - 0x04, 0x10, 0x08, 0x18, 0x40, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x32, 0xc8, 0x03, 0x0a, - 0x04, 0x43, 0x68, 0x61, 0x74, 0x12, 0x49, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, - 0x73, 0x12, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x52, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, - 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, - 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, - 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x55, 0x0a, 0x0c, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x12, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x53, - 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x12, 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, - 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6b, 0x0a, 0x17, 0x63, 0x6f, 0x6d, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x63, 0x2e, 0x67, 0x65, 0x6e, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x31, 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, - 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x63, 0x6f, 0x64, - 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x67, 0x6f, 0x2f, 0x63, 0x68, 0x61, 0x74, - 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x68, 0x61, 0x74, 0xa2, 0x02, 0x09, 0x43, 0x50, 0x42, 0x43, 0x68, - 0x61, 0x74, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, 0x10, 0x02, 0x22, 0xd8, 0x01, 0x0a, 0x13, + 0x4f, 0x70, 0x65, 0x6e, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, + 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x41, + 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, + 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, + 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, + 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x93, 0x01, 0x0a, 0x0f, 0x43, 0x68, 0x61, 0x74, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x41, 0x0a, 0x08, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x92, 0x01, + 0x02, 0x10, 0x64, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x3d, 0x0a, + 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, + 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x92, 0x01, 0x02, + 0x10, 0x64, 0x52, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x22, 0x5c, 0x0a, 0x14, + 0x43, 0x68, 0x61, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, + 0x61, 0x74, 0x63, 0x68, 0x12, 0x44, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x42, 0x0d, 0xba, 0xe9, 0xc0, 0x03, 0x08, 0x92, 0x01, 0x05, 0x08, 0x01, 0x10, + 0x80, 0x08, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xa0, 0x01, 0x0a, 0x17, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x44, 0x0a, 0x0b, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x73, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x43, + 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x48, 0x00, + 0x52, 0x0a, 0x6f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x30, 0x0a, 0x04, + 0x70, 0x6f, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x50, 0x6f, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x42, 0x0d, + 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x99, 0x01, + 0x0a, 0x18, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x06, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x48, 0x00, + 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x30, 0x0a, 0x04, 0x70, 0x69, 0x6e, 0x67, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x50, 0x69, + 0x6e, 0x67, 0x48, 0x00, 0x52, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x96, 0x02, 0x0a, 0x12, 0x53, 0x65, + 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, + 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, + 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, + 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, + 0x74, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x0c, 0xba, 0xe9, 0xc0, + 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x01, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x22, 0x9e, 0x01, 0x0a, 0x13, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x06, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x33, 0x0a, 0x07, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, + 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x22, 0x10, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, + 0x4b, 0x10, 0x00, 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, + 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x20, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x22, 0x32, 0x0a, 0x0d, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, + 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, + 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x20, 0x18, 0x40, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x22, 0x31, 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x20, 0x18, 0x20, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xe0, 0x01, 0x0a, 0x07, 0x50, 0x6f, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, + 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x2e, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x04, 0x6b, + 0x69, 0x6e, 0x64, 0x12, 0x3d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x42, + 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x2e, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x52, 0x04, 0x75, 0x73, + 0x65, 0x72, 0x22, 0x36, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, + 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x52, 0x45, 0x41, 0x44, 0x10, + 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x45, 0x44, 0x10, 0x02, + 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x03, 0x22, 0xfd, 0x03, 0x0a, 0x0c, 0x43, + 0x68, 0x61, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x39, 0x0a, 0x07, 0x63, + 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, + 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, + 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x44, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, + 0x7a, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4c, + 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, + 0x00, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x12, 0x30, 0x0a, 0x06, + 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, + 0x6d, 0x61, 0x69, 0x6e, 0x48, 0x00, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x38, + 0x0a, 0x0c, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x0b, 0x72, 0x65, 0x61, + 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, + 0x75, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6e, 0x75, + 0x6d, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, + 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, + 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x62, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x53, 0x75, 0x62, + 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x61, 0x6e, 0x5f, 0x6d, + 0x75, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, 0x61, 0x6e, 0x4d, 0x75, + 0x74, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x61, 0x6e, 0x5f, 0x75, 0x6e, 0x73, 0x75, 0x62, 0x73, + 0x63, 0x72, 0x69, 0x62, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x63, 0x61, 0x6e, + 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x63, + 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, + 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, + 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, + 0x69, 0x73, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x42, 0x0e, 0x0a, 0x05, 0x74, 0x69, + 0x74, 0x6c, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xae, 0x02, 0x0a, 0x0b, 0x43, + 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x46, 0x0a, 0x0a, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, + 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, + 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x49, 0x64, 0x12, 0x36, 0x0a, 0x02, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, + 0x05, 0xb2, 0x01, 0x02, 0x08, 0x01, 0x52, 0x02, 0x74, 0x73, 0x12, 0x3d, 0x0a, 0x07, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x0a, + 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, + 0x73, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, + 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x32, 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, + 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x49, 0x64, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x22, 0xe8, 0x02, 0x0a, 0x07, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x51, 0x0a, 0x10, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, + 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0f, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x12, 0x48, 0x0a, 0x0d, 0x65, 0x78, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, + 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x44, 0x61, 0x74, 0x61, 0x12, 0x42, 0x0a, 0x08, 0x6e, 0x61, 0x63, 0x6c, 0x5f, 0x62, 0x6f, 0x78, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, + 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, + 0x07, 0x6e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x12, 0x2f, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x48, 0x00, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x3c, 0x0a, 0x09, 0x74, 0x68, 0x61, + 0x6e, 0x6b, 0x5f, 0x79, 0x6f, 0x75, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x68, 0x61, 0x6e, + 0x6b, 0x59, 0x6f, 0x75, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x08, 0x74, + 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x75, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, + 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x46, 0x0a, 0x16, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x12, 0x2c, 0x0a, 0x0b, 0x6b, 0x65, 0x79, 0x5f, 0x6f, 0x72, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, + 0x18, 0x80, 0x08, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x4f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x22, 0x95, + 0x03, 0x0a, 0x13, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x3a, 0x0a, 0x04, 0x76, 0x65, 0x72, 0x62, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x52, 0x04, 0x76, 0x65, + 0x72, 0x62, 0x12, 0x39, 0x0a, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x12, 0x48, 0x0a, + 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, + 0x61, 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x52, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x07, + 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x22, 0xa4, 0x01, 0x0a, 0x04, 0x56, 0x65, 0x72, 0x62, + 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, + 0x04, 0x47, 0x41, 0x56, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x43, 0x45, 0x49, + 0x56, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, 0x45, + 0x57, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x45, 0x44, + 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, + 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, 0x45, 0x44, 0x10, 0x06, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x50, + 0x45, 0x4e, 0x54, 0x10, 0x07, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x41, 0x49, 0x44, 0x10, 0x08, 0x12, + 0x0d, 0x0a, 0x09, 0x50, 0x55, 0x52, 0x43, 0x48, 0x41, 0x53, 0x45, 0x44, 0x10, 0x09, 0x12, 0x10, + 0x0a, 0x0c, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0a, + 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0b, 0x42, 0x16, + 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x12, + 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xcc, 0x01, 0x0a, 0x17, 0x4e, 0x61, 0x63, 0x6c, 0x42, + 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x0f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, + 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, + 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x70, 0x65, 0x65, 0x72, 0x50, 0x75, + 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, + 0x18, 0x18, 0x18, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x39, 0x0a, 0x11, 0x65, 0x6e, + 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x7a, 0x05, 0x10, 0x01, + 0x18, 0x80, 0x08, 0x52, 0x10, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, + 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x2f, 0x0a, 0x0b, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, + 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x11, 0x0a, 0x0f, 0x54, 0x68, 0x61, 0x6e, 0x6b, 0x59, + 0x6f, 0x75, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x75, 0x72, + 0x73, 0x6f, 0x72, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x08, 0x18, 0x40, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x32, 0x83, 0x05, 0x0a, 0x04, 0x43, 0x68, 0x61, 0x74, 0x12, + 0x49, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x12, 0x1d, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, + 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x47, 0x65, + 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, + 0x0a, 0x0e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x0c, 0x53, + 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x21, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, + 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, + 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x29, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x65, 0x0a, 0x10, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x52, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6b, 0x0a, 0x17, + 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x63, 0x2e, 0x67, 0x65, 0x6e, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2d, + 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x67, 0x6f, + 0x2f, 0x63, 0x68, 0x61, 0x74, 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x68, 0x61, 0x74, 0xa2, 0x02, 0x09, + 0x43, 0x50, 0x42, 0x43, 0x68, 0x61, 0x74, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( @@ -2178,8 +2971,8 @@ func file_chat_v1_chat_service_proto_rawDescGZIP() []byte { return file_chat_v1_chat_service_proto_rawDescData } -var file_chat_v1_chat_service_proto_enumTypes = make([]protoimpl.EnumInfo, 9) -var file_chat_v1_chat_service_proto_msgTypes = make([]protoimpl.MessageInfo, 20) +var file_chat_v1_chat_service_proto_enumTypes = make([]protoimpl.EnumInfo, 10) +var file_chat_v1_chat_service_proto_msgTypes = make([]protoimpl.MessageInfo, 30) var file_chat_v1_chat_service_proto_goTypes = []interface{}{ (GetChatsRequest_Direction)(0), // 0: code.chat.v1.GetChatsRequest.Direction (GetChatsResponse_Result)(0), // 1: code.chat.v1.GetChatsResponse.Result @@ -2188,95 +2981,132 @@ var file_chat_v1_chat_service_proto_goTypes = []interface{}{ (AdvancePointerResponse_Result)(0), // 4: code.chat.v1.AdvancePointerResponse.Result (SetMuteStateResponse_Result)(0), // 5: code.chat.v1.SetMuteStateResponse.Result (SetSubscriptionStateResponse_Result)(0), // 6: code.chat.v1.SetSubscriptionStateResponse.Result - (Pointer_Kind)(0), // 7: code.chat.v1.Pointer.Kind - (ExchangeDataContent_Verb)(0), // 8: code.chat.v1.ExchangeDataContent.Verb - (*GetChatsRequest)(nil), // 9: code.chat.v1.GetChatsRequest - (*GetChatsResponse)(nil), // 10: code.chat.v1.GetChatsResponse - (*GetMessagesRequest)(nil), // 11: code.chat.v1.GetMessagesRequest - (*GetMessagesResponse)(nil), // 12: code.chat.v1.GetMessagesResponse - (*AdvancePointerRequest)(nil), // 13: code.chat.v1.AdvancePointerRequest - (*AdvancePointerResponse)(nil), // 14: code.chat.v1.AdvancePointerResponse - (*SetMuteStateRequest)(nil), // 15: code.chat.v1.SetMuteStateRequest - (*SetMuteStateResponse)(nil), // 16: code.chat.v1.SetMuteStateResponse - (*SetSubscriptionStateRequest)(nil), // 17: code.chat.v1.SetSubscriptionStateRequest - (*SetSubscriptionStateResponse)(nil), // 18: code.chat.v1.SetSubscriptionStateResponse - (*ChatId)(nil), // 19: code.chat.v1.ChatId - (*ChatMessageId)(nil), // 20: code.chat.v1.ChatMessageId - (*Pointer)(nil), // 21: code.chat.v1.Pointer - (*ChatMetadata)(nil), // 22: code.chat.v1.ChatMetadata - (*ChatMessage)(nil), // 23: code.chat.v1.ChatMessage - (*Content)(nil), // 24: code.chat.v1.Content - (*LocalizedContent)(nil), // 25: code.chat.v1.LocalizedContent - (*ExchangeDataContent)(nil), // 26: code.chat.v1.ExchangeDataContent - (*NaclBoxEncryptedContent)(nil), // 27: code.chat.v1.NaclBoxEncryptedContent - (*Cursor)(nil), // 28: code.chat.v1.Cursor - (*v1.SolanaAccountId)(nil), // 29: code.common.v1.SolanaAccountId - (*v1.Signature)(nil), // 30: code.common.v1.Signature - (*v1.Domain)(nil), // 31: code.common.v1.Domain - (*timestamppb.Timestamp)(nil), // 32: google.protobuf.Timestamp - (*v2.ExchangeData)(nil), // 33: code.transaction.v2.ExchangeData - (*v2.ExchangeDataWithoutRate)(nil), // 34: code.transaction.v2.ExchangeDataWithoutRate + (SendMessageResponse_Result)(0), // 7: code.chat.v1.SendMessageResponse.Result + (Pointer_Kind)(0), // 8: code.chat.v1.Pointer.Kind + (ExchangeDataContent_Verb)(0), // 9: code.chat.v1.ExchangeDataContent.Verb + (*GetChatsRequest)(nil), // 10: code.chat.v1.GetChatsRequest + (*GetChatsResponse)(nil), // 11: code.chat.v1.GetChatsResponse + (*GetMessagesRequest)(nil), // 12: code.chat.v1.GetMessagesRequest + (*GetMessagesResponse)(nil), // 13: code.chat.v1.GetMessagesResponse + (*AdvancePointerRequest)(nil), // 14: code.chat.v1.AdvancePointerRequest + (*AdvancePointerResponse)(nil), // 15: code.chat.v1.AdvancePointerResponse + (*SetMuteStateRequest)(nil), // 16: code.chat.v1.SetMuteStateRequest + (*SetMuteStateResponse)(nil), // 17: code.chat.v1.SetMuteStateResponse + (*SetSubscriptionStateRequest)(nil), // 18: code.chat.v1.SetSubscriptionStateRequest + (*SetSubscriptionStateResponse)(nil), // 19: code.chat.v1.SetSubscriptionStateResponse + (*OpenChatEventStream)(nil), // 20: code.chat.v1.OpenChatEventStream + (*ChatStreamEvent)(nil), // 21: code.chat.v1.ChatStreamEvent + (*ChatStreamEventBatch)(nil), // 22: code.chat.v1.ChatStreamEventBatch + (*StreamChatEventsRequest)(nil), // 23: code.chat.v1.StreamChatEventsRequest + (*StreamChatEventsResponse)(nil), // 24: code.chat.v1.StreamChatEventsResponse + (*SendMessageRequest)(nil), // 25: code.chat.v1.SendMessageRequest + (*SendMessageResponse)(nil), // 26: code.chat.v1.SendMessageResponse + (*ChatId)(nil), // 27: code.chat.v1.ChatId + (*ChatMessageId)(nil), // 28: code.chat.v1.ChatMessageId + (*ChatMemberId)(nil), // 29: code.chat.v1.ChatMemberId + (*Pointer)(nil), // 30: code.chat.v1.Pointer + (*ChatMetadata)(nil), // 31: code.chat.v1.ChatMetadata + (*ChatMessage)(nil), // 32: code.chat.v1.ChatMessage + (*Content)(nil), // 33: code.chat.v1.Content + (*ServerLocalizedContent)(nil), // 34: code.chat.v1.ServerLocalizedContent + (*ExchangeDataContent)(nil), // 35: code.chat.v1.ExchangeDataContent + (*NaclBoxEncryptedContent)(nil), // 36: code.chat.v1.NaclBoxEncryptedContent + (*TextContent)(nil), // 37: code.chat.v1.TextContent + (*ThankYouContent)(nil), // 38: code.chat.v1.ThankYouContent + (*Cursor)(nil), // 39: code.chat.v1.Cursor + (*v1.SolanaAccountId)(nil), // 40: code.common.v1.SolanaAccountId + (*v1.Signature)(nil), // 41: code.common.v1.Signature + (*v1.ClientPong)(nil), // 42: code.common.v1.ClientPong + (*v1.ServerPing)(nil), // 43: code.common.v1.ServerPing + (*v1.Domain)(nil), // 44: code.common.v1.Domain + (*timestamppb.Timestamp)(nil), // 45: google.protobuf.Timestamp + (*v2.ExchangeData)(nil), // 46: code.transaction.v2.ExchangeData + (*v2.ExchangeDataWithoutRate)(nil), // 47: code.transaction.v2.ExchangeDataWithoutRate } var file_chat_v1_chat_service_proto_depIdxs = []int32{ - 29, // 0: code.chat.v1.GetChatsRequest.owner:type_name -> code.common.v1.SolanaAccountId - 30, // 1: code.chat.v1.GetChatsRequest.signature:type_name -> code.common.v1.Signature - 28, // 2: code.chat.v1.GetChatsRequest.cursor:type_name -> code.chat.v1.Cursor + 40, // 0: code.chat.v1.GetChatsRequest.owner:type_name -> code.common.v1.SolanaAccountId + 41, // 1: code.chat.v1.GetChatsRequest.signature:type_name -> code.common.v1.Signature + 39, // 2: code.chat.v1.GetChatsRequest.cursor:type_name -> code.chat.v1.Cursor 0, // 3: code.chat.v1.GetChatsRequest.direction:type_name -> code.chat.v1.GetChatsRequest.Direction 1, // 4: code.chat.v1.GetChatsResponse.result:type_name -> code.chat.v1.GetChatsResponse.Result - 22, // 5: code.chat.v1.GetChatsResponse.chats:type_name -> code.chat.v1.ChatMetadata - 19, // 6: code.chat.v1.GetMessagesRequest.chat_id:type_name -> code.chat.v1.ChatId - 29, // 7: code.chat.v1.GetMessagesRequest.owner:type_name -> code.common.v1.SolanaAccountId - 30, // 8: code.chat.v1.GetMessagesRequest.signature:type_name -> code.common.v1.Signature - 28, // 9: code.chat.v1.GetMessagesRequest.cursor:type_name -> code.chat.v1.Cursor + 31, // 5: code.chat.v1.GetChatsResponse.chats:type_name -> code.chat.v1.ChatMetadata + 27, // 6: code.chat.v1.GetMessagesRequest.chat_id:type_name -> code.chat.v1.ChatId + 40, // 7: code.chat.v1.GetMessagesRequest.owner:type_name -> code.common.v1.SolanaAccountId + 41, // 8: code.chat.v1.GetMessagesRequest.signature:type_name -> code.common.v1.Signature + 39, // 9: code.chat.v1.GetMessagesRequest.cursor:type_name -> code.chat.v1.Cursor 2, // 10: code.chat.v1.GetMessagesRequest.direction:type_name -> code.chat.v1.GetMessagesRequest.Direction 3, // 11: code.chat.v1.GetMessagesResponse.result:type_name -> code.chat.v1.GetMessagesResponse.Result - 23, // 12: code.chat.v1.GetMessagesResponse.messages:type_name -> code.chat.v1.ChatMessage - 19, // 13: code.chat.v1.AdvancePointerRequest.chat_id:type_name -> code.chat.v1.ChatId - 21, // 14: code.chat.v1.AdvancePointerRequest.pointer:type_name -> code.chat.v1.Pointer - 29, // 15: code.chat.v1.AdvancePointerRequest.owner:type_name -> code.common.v1.SolanaAccountId - 30, // 16: code.chat.v1.AdvancePointerRequest.signature:type_name -> code.common.v1.Signature + 32, // 12: code.chat.v1.GetMessagesResponse.messages:type_name -> code.chat.v1.ChatMessage + 27, // 13: code.chat.v1.AdvancePointerRequest.chat_id:type_name -> code.chat.v1.ChatId + 30, // 14: code.chat.v1.AdvancePointerRequest.pointer:type_name -> code.chat.v1.Pointer + 40, // 15: code.chat.v1.AdvancePointerRequest.owner:type_name -> code.common.v1.SolanaAccountId + 41, // 16: code.chat.v1.AdvancePointerRequest.signature:type_name -> code.common.v1.Signature 4, // 17: code.chat.v1.AdvancePointerResponse.result:type_name -> code.chat.v1.AdvancePointerResponse.Result - 19, // 18: code.chat.v1.SetMuteStateRequest.chat_id:type_name -> code.chat.v1.ChatId - 29, // 19: code.chat.v1.SetMuteStateRequest.owner:type_name -> code.common.v1.SolanaAccountId - 30, // 20: code.chat.v1.SetMuteStateRequest.signature:type_name -> code.common.v1.Signature + 27, // 18: code.chat.v1.SetMuteStateRequest.chat_id:type_name -> code.chat.v1.ChatId + 40, // 19: code.chat.v1.SetMuteStateRequest.owner:type_name -> code.common.v1.SolanaAccountId + 41, // 20: code.chat.v1.SetMuteStateRequest.signature:type_name -> code.common.v1.Signature 5, // 21: code.chat.v1.SetMuteStateResponse.result:type_name -> code.chat.v1.SetMuteStateResponse.Result - 19, // 22: code.chat.v1.SetSubscriptionStateRequest.chat_id:type_name -> code.chat.v1.ChatId - 29, // 23: code.chat.v1.SetSubscriptionStateRequest.owner:type_name -> code.common.v1.SolanaAccountId - 30, // 24: code.chat.v1.SetSubscriptionStateRequest.signature:type_name -> code.common.v1.Signature + 27, // 22: code.chat.v1.SetSubscriptionStateRequest.chat_id:type_name -> code.chat.v1.ChatId + 40, // 23: code.chat.v1.SetSubscriptionStateRequest.owner:type_name -> code.common.v1.SolanaAccountId + 41, // 24: code.chat.v1.SetSubscriptionStateRequest.signature:type_name -> code.common.v1.Signature 6, // 25: code.chat.v1.SetSubscriptionStateResponse.result:type_name -> code.chat.v1.SetSubscriptionStateResponse.Result - 7, // 26: code.chat.v1.Pointer.kind:type_name -> code.chat.v1.Pointer.Kind - 20, // 27: code.chat.v1.Pointer.value:type_name -> code.chat.v1.ChatMessageId - 19, // 28: code.chat.v1.ChatMetadata.chat_id:type_name -> code.chat.v1.ChatId - 25, // 29: code.chat.v1.ChatMetadata.localized:type_name -> code.chat.v1.LocalizedContent - 31, // 30: code.chat.v1.ChatMetadata.domain:type_name -> code.common.v1.Domain - 21, // 31: code.chat.v1.ChatMetadata.read_pointer:type_name -> code.chat.v1.Pointer - 28, // 32: code.chat.v1.ChatMetadata.cursor:type_name -> code.chat.v1.Cursor - 20, // 33: code.chat.v1.ChatMessage.message_id:type_name -> code.chat.v1.ChatMessageId - 32, // 34: code.chat.v1.ChatMessage.ts:type_name -> google.protobuf.Timestamp - 24, // 35: code.chat.v1.ChatMessage.content:type_name -> code.chat.v1.Content - 28, // 36: code.chat.v1.ChatMessage.cursor:type_name -> code.chat.v1.Cursor - 25, // 37: code.chat.v1.Content.localized:type_name -> code.chat.v1.LocalizedContent - 26, // 38: code.chat.v1.Content.exchange_data:type_name -> code.chat.v1.ExchangeDataContent - 27, // 39: code.chat.v1.Content.nacl_box:type_name -> code.chat.v1.NaclBoxEncryptedContent - 8, // 40: code.chat.v1.ExchangeDataContent.verb:type_name -> code.chat.v1.ExchangeDataContent.Verb - 33, // 41: code.chat.v1.ExchangeDataContent.exact:type_name -> code.transaction.v2.ExchangeData - 34, // 42: code.chat.v1.ExchangeDataContent.partial:type_name -> code.transaction.v2.ExchangeDataWithoutRate - 29, // 43: code.chat.v1.NaclBoxEncryptedContent.peer_public_key:type_name -> code.common.v1.SolanaAccountId - 9, // 44: code.chat.v1.Chat.GetChats:input_type -> code.chat.v1.GetChatsRequest - 11, // 45: code.chat.v1.Chat.GetMessages:input_type -> code.chat.v1.GetMessagesRequest - 13, // 46: code.chat.v1.Chat.AdvancePointer:input_type -> code.chat.v1.AdvancePointerRequest - 15, // 47: code.chat.v1.Chat.SetMuteState:input_type -> code.chat.v1.SetMuteStateRequest - 17, // 48: code.chat.v1.Chat.SetSubscriptionState:input_type -> code.chat.v1.SetSubscriptionStateRequest - 10, // 49: code.chat.v1.Chat.GetChats:output_type -> code.chat.v1.GetChatsResponse - 12, // 50: code.chat.v1.Chat.GetMessages:output_type -> code.chat.v1.GetMessagesResponse - 14, // 51: code.chat.v1.Chat.AdvancePointer:output_type -> code.chat.v1.AdvancePointerResponse - 16, // 52: code.chat.v1.Chat.SetMuteState:output_type -> code.chat.v1.SetMuteStateResponse - 18, // 53: code.chat.v1.Chat.SetSubscriptionState:output_type -> code.chat.v1.SetSubscriptionStateResponse - 49, // [49:54] is the sub-list for method output_type - 44, // [44:49] is the sub-list for method input_type - 44, // [44:44] is the sub-list for extension type_name - 44, // [44:44] is the sub-list for extension extendee - 0, // [0:44] is the sub-list for field type_name + 27, // 26: code.chat.v1.OpenChatEventStream.chat_id:type_name -> code.chat.v1.ChatId + 40, // 27: code.chat.v1.OpenChatEventStream.owner:type_name -> code.common.v1.SolanaAccountId + 41, // 28: code.chat.v1.OpenChatEventStream.signature:type_name -> code.common.v1.Signature + 32, // 29: code.chat.v1.ChatStreamEvent.messages:type_name -> code.chat.v1.ChatMessage + 30, // 30: code.chat.v1.ChatStreamEvent.pointers:type_name -> code.chat.v1.Pointer + 21, // 31: code.chat.v1.ChatStreamEventBatch.events:type_name -> code.chat.v1.ChatStreamEvent + 20, // 32: code.chat.v1.StreamChatEventsRequest.open_stream:type_name -> code.chat.v1.OpenChatEventStream + 42, // 33: code.chat.v1.StreamChatEventsRequest.pong:type_name -> code.common.v1.ClientPong + 22, // 34: code.chat.v1.StreamChatEventsResponse.events:type_name -> code.chat.v1.ChatStreamEventBatch + 43, // 35: code.chat.v1.StreamChatEventsResponse.ping:type_name -> code.common.v1.ServerPing + 40, // 36: code.chat.v1.SendMessageRequest.owner:type_name -> code.common.v1.SolanaAccountId + 41, // 37: code.chat.v1.SendMessageRequest.signature:type_name -> code.common.v1.Signature + 27, // 38: code.chat.v1.SendMessageRequest.chat_id:type_name -> code.chat.v1.ChatId + 33, // 39: code.chat.v1.SendMessageRequest.content:type_name -> code.chat.v1.Content + 7, // 40: code.chat.v1.SendMessageResponse.result:type_name -> code.chat.v1.SendMessageResponse.Result + 32, // 41: code.chat.v1.SendMessageResponse.message:type_name -> code.chat.v1.ChatMessage + 8, // 42: code.chat.v1.Pointer.kind:type_name -> code.chat.v1.Pointer.Kind + 28, // 43: code.chat.v1.Pointer.value:type_name -> code.chat.v1.ChatMessageId + 29, // 44: code.chat.v1.Pointer.user:type_name -> code.chat.v1.ChatMemberId + 27, // 45: code.chat.v1.ChatMetadata.chat_id:type_name -> code.chat.v1.ChatId + 34, // 46: code.chat.v1.ChatMetadata.localized:type_name -> code.chat.v1.ServerLocalizedContent + 44, // 47: code.chat.v1.ChatMetadata.domain:type_name -> code.common.v1.Domain + 30, // 48: code.chat.v1.ChatMetadata.read_pointer:type_name -> code.chat.v1.Pointer + 39, // 49: code.chat.v1.ChatMetadata.cursor:type_name -> code.chat.v1.Cursor + 28, // 50: code.chat.v1.ChatMessage.message_id:type_name -> code.chat.v1.ChatMessageId + 45, // 51: code.chat.v1.ChatMessage.ts:type_name -> google.protobuf.Timestamp + 33, // 52: code.chat.v1.ChatMessage.content:type_name -> code.chat.v1.Content + 39, // 53: code.chat.v1.ChatMessage.cursor:type_name -> code.chat.v1.Cursor + 29, // 54: code.chat.v1.ChatMessage.sender:type_name -> code.chat.v1.ChatMemberId + 34, // 55: code.chat.v1.Content.server_localized:type_name -> code.chat.v1.ServerLocalizedContent + 35, // 56: code.chat.v1.Content.exchange_data:type_name -> code.chat.v1.ExchangeDataContent + 36, // 57: code.chat.v1.Content.nacl_box:type_name -> code.chat.v1.NaclBoxEncryptedContent + 37, // 58: code.chat.v1.Content.text:type_name -> code.chat.v1.TextContent + 38, // 59: code.chat.v1.Content.thank_you:type_name -> code.chat.v1.ThankYouContent + 9, // 60: code.chat.v1.ExchangeDataContent.verb:type_name -> code.chat.v1.ExchangeDataContent.Verb + 46, // 61: code.chat.v1.ExchangeDataContent.exact:type_name -> code.transaction.v2.ExchangeData + 47, // 62: code.chat.v1.ExchangeDataContent.partial:type_name -> code.transaction.v2.ExchangeDataWithoutRate + 40, // 63: code.chat.v1.NaclBoxEncryptedContent.peer_public_key:type_name -> code.common.v1.SolanaAccountId + 10, // 64: code.chat.v1.Chat.GetChats:input_type -> code.chat.v1.GetChatsRequest + 12, // 65: code.chat.v1.Chat.GetMessages:input_type -> code.chat.v1.GetMessagesRequest + 14, // 66: code.chat.v1.Chat.AdvancePointer:input_type -> code.chat.v1.AdvancePointerRequest + 16, // 67: code.chat.v1.Chat.SetMuteState:input_type -> code.chat.v1.SetMuteStateRequest + 18, // 68: code.chat.v1.Chat.SetSubscriptionState:input_type -> code.chat.v1.SetSubscriptionStateRequest + 23, // 69: code.chat.v1.Chat.StreamChatEvents:input_type -> code.chat.v1.StreamChatEventsRequest + 25, // 70: code.chat.v1.Chat.SendMessage:input_type -> code.chat.v1.SendMessageRequest + 11, // 71: code.chat.v1.Chat.GetChats:output_type -> code.chat.v1.GetChatsResponse + 13, // 72: code.chat.v1.Chat.GetMessages:output_type -> code.chat.v1.GetMessagesResponse + 15, // 73: code.chat.v1.Chat.AdvancePointer:output_type -> code.chat.v1.AdvancePointerResponse + 17, // 74: code.chat.v1.Chat.SetMuteState:output_type -> code.chat.v1.SetMuteStateResponse + 19, // 75: code.chat.v1.Chat.SetSubscriptionState:output_type -> code.chat.v1.SetSubscriptionStateResponse + 24, // 76: code.chat.v1.Chat.StreamChatEvents:output_type -> code.chat.v1.StreamChatEventsResponse + 26, // 77: code.chat.v1.Chat.SendMessage:output_type -> code.chat.v1.SendMessageResponse + 71, // [71:78] is the sub-list for method output_type + 64, // [64:71] is the sub-list for method input_type + 64, // [64:64] is the sub-list for extension type_name + 64, // [64:64] is the sub-list for extension extendee + 0, // [0:64] is the sub-list for field type_name } func init() { file_chat_v1_chat_service_proto_init() } @@ -2406,7 +3236,7 @@ func file_chat_v1_chat_service_proto_init() { } } file_chat_v1_chat_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChatId); i { + switch v := v.(*OpenChatEventStream); i { case 0: return &v.state case 1: @@ -2418,7 +3248,7 @@ func file_chat_v1_chat_service_proto_init() { } } file_chat_v1_chat_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChatMessageId); i { + switch v := v.(*ChatStreamEvent); i { case 0: return &v.state case 1: @@ -2430,7 +3260,7 @@ func file_chat_v1_chat_service_proto_init() { } } file_chat_v1_chat_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Pointer); i { + switch v := v.(*ChatStreamEventBatch); i { case 0: return &v.state case 1: @@ -2442,7 +3272,7 @@ func file_chat_v1_chat_service_proto_init() { } } file_chat_v1_chat_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChatMetadata); i { + switch v := v.(*StreamChatEventsRequest); i { case 0: return &v.state case 1: @@ -2454,7 +3284,7 @@ func file_chat_v1_chat_service_proto_init() { } } file_chat_v1_chat_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChatMessage); i { + switch v := v.(*StreamChatEventsResponse); i { case 0: return &v.state case 1: @@ -2466,7 +3296,7 @@ func file_chat_v1_chat_service_proto_init() { } } file_chat_v1_chat_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Content); i { + switch v := v.(*SendMessageRequest); i { case 0: return &v.state case 1: @@ -2478,7 +3308,7 @@ func file_chat_v1_chat_service_proto_init() { } } file_chat_v1_chat_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LocalizedContent); i { + switch v := v.(*SendMessageResponse); i { case 0: return &v.state case 1: @@ -2490,7 +3320,7 @@ func file_chat_v1_chat_service_proto_init() { } } file_chat_v1_chat_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExchangeDataContent); i { + switch v := v.(*ChatId); i { case 0: return &v.state case 1: @@ -2502,7 +3332,7 @@ func file_chat_v1_chat_service_proto_init() { } } file_chat_v1_chat_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NaclBoxEncryptedContent); i { + switch v := v.(*ChatMessageId); i { case 0: return &v.state case 1: @@ -2514,6 +3344,126 @@ func file_chat_v1_chat_service_proto_init() { } } file_chat_v1_chat_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChatMemberId); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v1_chat_service_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Pointer); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v1_chat_service_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChatMetadata); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v1_chat_service_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChatMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v1_chat_service_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Content); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v1_chat_service_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ServerLocalizedContent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v1_chat_service_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ExchangeDataContent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v1_chat_service_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NaclBoxEncryptedContent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v1_chat_service_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TextContent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v1_chat_service_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ThankYouContent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v1_chat_service_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Cursor); i { case 0: return &v.state @@ -2527,15 +3477,25 @@ func file_chat_v1_chat_service_proto_init() { } } file_chat_v1_chat_service_proto_msgTypes[13].OneofWrappers = []interface{}{ + (*StreamChatEventsRequest_OpenStream)(nil), + (*StreamChatEventsRequest_Pong)(nil), + } + file_chat_v1_chat_service_proto_msgTypes[14].OneofWrappers = []interface{}{ + (*StreamChatEventsResponse_Events)(nil), + (*StreamChatEventsResponse_Ping)(nil), + } + file_chat_v1_chat_service_proto_msgTypes[21].OneofWrappers = []interface{}{ (*ChatMetadata_Localized)(nil), (*ChatMetadata_Domain)(nil), } - file_chat_v1_chat_service_proto_msgTypes[15].OneofWrappers = []interface{}{ - (*Content_Localized)(nil), + file_chat_v1_chat_service_proto_msgTypes[23].OneofWrappers = []interface{}{ + (*Content_ServerLocalized)(nil), (*Content_ExchangeData)(nil), (*Content_NaclBox)(nil), + (*Content_Text)(nil), + (*Content_ThankYou)(nil), } - file_chat_v1_chat_service_proto_msgTypes[17].OneofWrappers = []interface{}{ + file_chat_v1_chat_service_proto_msgTypes[25].OneofWrappers = []interface{}{ (*ExchangeDataContent_Exact)(nil), (*ExchangeDataContent_Partial)(nil), } @@ -2544,8 +3504,8 @@ func file_chat_v1_chat_service_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_chat_v1_chat_service_proto_rawDesc, - NumEnums: 9, - NumMessages: 20, + NumEnums: 10, + NumMessages: 30, NumExtensions: 0, NumServices: 1, }, diff --git a/generated/go/chat/v1/chat_service.pb.validate.go b/generated/go/chat/v1/chat_service.pb.validate.go index 99e7cc8..837e968 100644 --- a/generated/go/chat/v1/chat_service.pb.validate.go +++ b/generated/go/chat/v1/chat_service.pb.validate.go @@ -1052,6 +1052,743 @@ var _ interface { ErrorName() string } = SetSubscriptionStateResponseValidationError{} +// Validate checks the field values on OpenChatEventStream with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *OpenChatEventStream) Validate() error { + if m == nil { + return nil + } + + if m.GetChatId() == nil { + return OpenChatEventStreamValidationError{ + field: "ChatId", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetChatId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return OpenChatEventStreamValidationError{ + field: "ChatId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetOwner() == nil { + return OpenChatEventStreamValidationError{ + field: "Owner", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetOwner()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return OpenChatEventStreamValidationError{ + field: "Owner", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetSignature() == nil { + return OpenChatEventStreamValidationError{ + field: "Signature", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetSignature()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return OpenChatEventStreamValidationError{ + field: "Signature", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// OpenChatEventStreamValidationError is the validation error returned by +// OpenChatEventStream.Validate if the designated constraints aren't met. +type OpenChatEventStreamValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e OpenChatEventStreamValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e OpenChatEventStreamValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e OpenChatEventStreamValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e OpenChatEventStreamValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e OpenChatEventStreamValidationError) ErrorName() string { + return "OpenChatEventStreamValidationError" +} + +// Error satisfies the builtin error interface +func (e OpenChatEventStreamValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sOpenChatEventStream.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = OpenChatEventStreamValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = OpenChatEventStreamValidationError{} + +// Validate checks the field values on ChatStreamEvent with the rules defined +// in the proto definition for this message. If any rules are violated, an +// error is returned. +func (m *ChatStreamEvent) Validate() error { + if m == nil { + return nil + } + + if len(m.GetMessages()) > 100 { + return ChatStreamEventValidationError{ + field: "Messages", + reason: "value must contain no more than 100 item(s)", + } + } + + for idx, item := range m.GetMessages() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChatStreamEventValidationError{ + field: fmt.Sprintf("Messages[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if len(m.GetPointers()) > 100 { + return ChatStreamEventValidationError{ + field: "Pointers", + reason: "value must contain no more than 100 item(s)", + } + } + + for idx, item := range m.GetPointers() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChatStreamEventValidationError{ + field: fmt.Sprintf("Pointers[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + return nil +} + +// ChatStreamEventValidationError is the validation error returned by +// ChatStreamEvent.Validate if the designated constraints aren't met. +type ChatStreamEventValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ChatStreamEventValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ChatStreamEventValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ChatStreamEventValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ChatStreamEventValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ChatStreamEventValidationError) ErrorName() string { return "ChatStreamEventValidationError" } + +// Error satisfies the builtin error interface +func (e ChatStreamEventValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sChatStreamEvent.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ChatStreamEventValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ChatStreamEventValidationError{} + +// Validate checks the field values on ChatStreamEventBatch with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *ChatStreamEventBatch) Validate() error { + if m == nil { + return nil + } + + if l := len(m.GetEvents()); l < 1 || l > 1024 { + return ChatStreamEventBatchValidationError{ + field: "Events", + reason: "value must contain between 1 and 1024 items, inclusive", + } + } + + for idx, item := range m.GetEvents() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChatStreamEventBatchValidationError{ + field: fmt.Sprintf("Events[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + return nil +} + +// ChatStreamEventBatchValidationError is the validation error returned by +// ChatStreamEventBatch.Validate if the designated constraints aren't met. +type ChatStreamEventBatchValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ChatStreamEventBatchValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ChatStreamEventBatchValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ChatStreamEventBatchValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ChatStreamEventBatchValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ChatStreamEventBatchValidationError) ErrorName() string { + return "ChatStreamEventBatchValidationError" +} + +// Error satisfies the builtin error interface +func (e ChatStreamEventBatchValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sChatStreamEventBatch.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ChatStreamEventBatchValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ChatStreamEventBatchValidationError{} + +// Validate checks the field values on StreamChatEventsRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *StreamChatEventsRequest) Validate() error { + if m == nil { + return nil + } + + switch m.Type.(type) { + + case *StreamChatEventsRequest_OpenStream: + + if v, ok := interface{}(m.GetOpenStream()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StreamChatEventsRequestValidationError{ + field: "OpenStream", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *StreamChatEventsRequest_Pong: + + if v, ok := interface{}(m.GetPong()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StreamChatEventsRequestValidationError{ + field: "Pong", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + return StreamChatEventsRequestValidationError{ + field: "Type", + reason: "value is required", + } + + } + + return nil +} + +// StreamChatEventsRequestValidationError is the validation error returned by +// StreamChatEventsRequest.Validate if the designated constraints aren't met. +type StreamChatEventsRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e StreamChatEventsRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e StreamChatEventsRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e StreamChatEventsRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e StreamChatEventsRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e StreamChatEventsRequestValidationError) ErrorName() string { + return "StreamChatEventsRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e StreamChatEventsRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sStreamChatEventsRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = StreamChatEventsRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = StreamChatEventsRequestValidationError{} + +// Validate checks the field values on StreamChatEventsResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *StreamChatEventsResponse) Validate() error { + if m == nil { + return nil + } + + switch m.Type.(type) { + + case *StreamChatEventsResponse_Events: + + if v, ok := interface{}(m.GetEvents()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StreamChatEventsResponseValidationError{ + field: "Events", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *StreamChatEventsResponse_Ping: + + if v, ok := interface{}(m.GetPing()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StreamChatEventsResponseValidationError{ + field: "Ping", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + return StreamChatEventsResponseValidationError{ + field: "Type", + reason: "value is required", + } + + } + + return nil +} + +// StreamChatEventsResponseValidationError is the validation error returned by +// StreamChatEventsResponse.Validate if the designated constraints aren't met. +type StreamChatEventsResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e StreamChatEventsResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e StreamChatEventsResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e StreamChatEventsResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e StreamChatEventsResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e StreamChatEventsResponseValidationError) ErrorName() string { + return "StreamChatEventsResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e StreamChatEventsResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sStreamChatEventsResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = StreamChatEventsResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = StreamChatEventsResponseValidationError{} + +// Validate checks the field values on SendMessageRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *SendMessageRequest) Validate() error { + if m == nil { + return nil + } + + if m.GetOwner() == nil { + return SendMessageRequestValidationError{ + field: "Owner", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetOwner()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SendMessageRequestValidationError{ + field: "Owner", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetSignature() == nil { + return SendMessageRequestValidationError{ + field: "Signature", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetSignature()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SendMessageRequestValidationError{ + field: "Signature", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetChatId() == nil { + return SendMessageRequestValidationError{ + field: "ChatId", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetChatId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SendMessageRequestValidationError{ + field: "ChatId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if len(m.GetContent()) != 1 { + return SendMessageRequestValidationError{ + field: "Content", + reason: "value must contain exactly 1 item(s)", + } + } + + for idx, item := range m.GetContent() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SendMessageRequestValidationError{ + field: fmt.Sprintf("Content[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + return nil +} + +// SendMessageRequestValidationError is the validation error returned by +// SendMessageRequest.Validate if the designated constraints aren't met. +type SendMessageRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e SendMessageRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e SendMessageRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e SendMessageRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e SendMessageRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e SendMessageRequestValidationError) ErrorName() string { + return "SendMessageRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e SendMessageRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sSendMessageRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = SendMessageRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = SendMessageRequestValidationError{} + +// Validate checks the field values on SendMessageResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *SendMessageResponse) Validate() error { + if m == nil { + return nil + } + + // no validation rules for Result + + if v, ok := interface{}(m.GetMessage()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SendMessageResponseValidationError{ + field: "Message", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// SendMessageResponseValidationError is the validation error returned by +// SendMessageResponse.Validate if the designated constraints aren't met. +type SendMessageResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e SendMessageResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e SendMessageResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e SendMessageResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e SendMessageResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e SendMessageResponseValidationError) ErrorName() string { + return "SendMessageResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e SendMessageResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sSendMessageResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = SendMessageResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = SendMessageResponseValidationError{} + // Validate checks the field values on ChatId with the rules defined in the // proto definition for this message. If any rules are violated, an error is returned. func (m *ChatId) Validate() error { @@ -1195,6 +1932,78 @@ var _ interface { ErrorName() string } = ChatMessageIdValidationError{} +// Validate checks the field values on ChatMemberId with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *ChatMemberId) Validate() error { + if m == nil { + return nil + } + + if len(m.GetValue()) != 32 { + return ChatMemberIdValidationError{ + field: "Value", + reason: "value length must be 32 bytes", + } + } + + return nil +} + +// ChatMemberIdValidationError is the validation error returned by +// ChatMemberId.Validate if the designated constraints aren't met. +type ChatMemberIdValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ChatMemberIdValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ChatMemberIdValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ChatMemberIdValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ChatMemberIdValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ChatMemberIdValidationError) ErrorName() string { return "ChatMemberIdValidationError" } + +// Error satisfies the builtin error interface +func (e ChatMemberIdValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sChatMemberId.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ChatMemberIdValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ChatMemberIdValidationError{} + // Validate checks the field values on Pointer with the rules defined in the // proto definition for this message. If any rules are violated, an error is returned. func (m *Pointer) Validate() error { @@ -1221,6 +2030,16 @@ func (m *Pointer) Validate() error { } } + if v, ok := interface{}(m.GetUser()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return PointerValidationError{ + field: "User", + reason: "embedded message failed validation", + cause: err, + } + } + } + return nil } @@ -1490,6 +2309,16 @@ func (m *ChatMessage) Validate() error { } } + if v, ok := interface{}(m.GetSender()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChatMessageValidationError{ + field: "Sender", + reason: "embedded message failed validation", + cause: err, + } + } + } + return nil } @@ -1556,12 +2385,12 @@ func (m *Content) Validate() error { switch m.Type.(type) { - case *Content_Localized: + case *Content_ServerLocalized: - if v, ok := interface{}(m.GetLocalized()).(interface{ Validate() error }); ok { + if v, ok := interface{}(m.GetServerLocalized()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ContentValidationError{ - field: "Localized", + field: "ServerLocalized", reason: "embedded message failed validation", cause: err, } @@ -1592,6 +2421,30 @@ func (m *Content) Validate() error { } } + case *Content_Text: + + if v, ok := interface{}(m.GetText()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ContentValidationError{ + field: "Text", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *Content_ThankYou: + + if v, ok := interface{}(m.GetThankYou()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ContentValidationError{ + field: "ThankYou", + reason: "embedded message failed validation", + cause: err, + } + } + } + default: return ContentValidationError{ field: "Type", @@ -1657,16 +2510,16 @@ var _ interface { ErrorName() string } = ContentValidationError{} -// Validate checks the field values on LocalizedContent with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. -func (m *LocalizedContent) Validate() error { +// Validate checks the field values on ServerLocalizedContent with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *ServerLocalizedContent) Validate() error { if m == nil { return nil } if l := utf8.RuneCountInString(m.GetKeyOrText()); l < 1 || l > 1024 { - return LocalizedContentValidationError{ + return ServerLocalizedContentValidationError{ field: "KeyOrText", reason: "value length must be between 1 and 1024 runes, inclusive", } @@ -1675,9 +2528,9 @@ func (m *LocalizedContent) Validate() error { return nil } -// LocalizedContentValidationError is the validation error returned by -// LocalizedContent.Validate if the designated constraints aren't met. -type LocalizedContentValidationError struct { +// ServerLocalizedContentValidationError is the validation error returned by +// ServerLocalizedContent.Validate if the designated constraints aren't met. +type ServerLocalizedContentValidationError struct { field string reason string cause error @@ -1685,22 +2538,24 @@ type LocalizedContentValidationError struct { } // Field function returns field value. -func (e LocalizedContentValidationError) Field() string { return e.field } +func (e ServerLocalizedContentValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e LocalizedContentValidationError) Reason() string { return e.reason } +func (e ServerLocalizedContentValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e LocalizedContentValidationError) Cause() error { return e.cause } +func (e ServerLocalizedContentValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e LocalizedContentValidationError) Key() bool { return e.key } +func (e ServerLocalizedContentValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e LocalizedContentValidationError) ErrorName() string { return "LocalizedContentValidationError" } +func (e ServerLocalizedContentValidationError) ErrorName() string { + return "ServerLocalizedContentValidationError" +} // Error satisfies the builtin error interface -func (e LocalizedContentValidationError) Error() string { +func (e ServerLocalizedContentValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -1712,14 +2567,14 @@ func (e LocalizedContentValidationError) Error() string { } return fmt.Sprintf( - "invalid %sLocalizedContent.%s: %s%s", + "invalid %sServerLocalizedContent.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = LocalizedContentValidationError{} +var _ error = ServerLocalizedContentValidationError{} var _ interface { Field() string @@ -1727,7 +2582,7 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = LocalizedContentValidationError{} +} = ServerLocalizedContentValidationError{} // Validate checks the field values on ExchangeDataContent with the rules // defined in the proto definition for this message. If any rules are @@ -1930,6 +2785,143 @@ var _ interface { ErrorName() string } = NaclBoxEncryptedContentValidationError{} +// Validate checks the field values on TextContent with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *TextContent) Validate() error { + if m == nil { + return nil + } + + if l := utf8.RuneCountInString(m.GetText()); l < 1 || l > 1024 { + return TextContentValidationError{ + field: "Text", + reason: "value length must be between 1 and 1024 runes, inclusive", + } + } + + return nil +} + +// TextContentValidationError is the validation error returned by +// TextContent.Validate if the designated constraints aren't met. +type TextContentValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e TextContentValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e TextContentValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e TextContentValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e TextContentValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e TextContentValidationError) ErrorName() string { return "TextContentValidationError" } + +// Error satisfies the builtin error interface +func (e TextContentValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sTextContent.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = TextContentValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = TextContentValidationError{} + +// Validate checks the field values on ThankYouContent with the rules defined +// in the proto definition for this message. If any rules are violated, an +// error is returned. +func (m *ThankYouContent) Validate() error { + if m == nil { + return nil + } + + return nil +} + +// ThankYouContentValidationError is the validation error returned by +// ThankYouContent.Validate if the designated constraints aren't met. +type ThankYouContentValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ThankYouContentValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ThankYouContentValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ThankYouContentValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ThankYouContentValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ThankYouContentValidationError) ErrorName() string { return "ThankYouContentValidationError" } + +// Error satisfies the builtin error interface +func (e ThankYouContentValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sThankYouContent.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ThankYouContentValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ThankYouContentValidationError{} + // Validate checks the field values on Cursor with the rules defined in the // proto definition for this message. If any rules are violated, an error is returned. func (m *Cursor) Validate() error { diff --git a/generated/go/chat/v1/chat_service_grpc.pb.go b/generated/go/chat/v1/chat_service_grpc.pb.go index 65e1c23..bb8dcc9 100644 --- a/generated/go/chat/v1/chat_service_grpc.pb.go +++ b/generated/go/chat/v1/chat_service_grpc.pb.go @@ -32,6 +32,8 @@ type ChatClient interface { SetMuteState(ctx context.Context, in *SetMuteStateRequest, opts ...grpc.CallOption) (*SetMuteStateResponse, error) // SetSubscriptionState configures the susbscription state of a chat SetSubscriptionState(ctx context.Context, in *SetSubscriptionStateRequest, opts ...grpc.CallOption) (*SetSubscriptionStateResponse, error) + StreamChatEvents(ctx context.Context, opts ...grpc.CallOption) (Chat_StreamChatEventsClient, error) + SendMessage(ctx context.Context, in *SendMessageRequest, opts ...grpc.CallOption) (*SendMessageResponse, error) } type chatClient struct { @@ -87,6 +89,46 @@ func (c *chatClient) SetSubscriptionState(ctx context.Context, in *SetSubscripti return out, nil } +func (c *chatClient) StreamChatEvents(ctx context.Context, opts ...grpc.CallOption) (Chat_StreamChatEventsClient, error) { + stream, err := c.cc.NewStream(ctx, &Chat_ServiceDesc.Streams[0], "/code.chat.v1.Chat/StreamChatEvents", opts...) + if err != nil { + return nil, err + } + x := &chatStreamChatEventsClient{stream} + return x, nil +} + +type Chat_StreamChatEventsClient interface { + Send(*StreamChatEventsRequest) error + Recv() (*StreamChatEventsResponse, error) + grpc.ClientStream +} + +type chatStreamChatEventsClient struct { + grpc.ClientStream +} + +func (x *chatStreamChatEventsClient) Send(m *StreamChatEventsRequest) error { + return x.ClientStream.SendMsg(m) +} + +func (x *chatStreamChatEventsClient) Recv() (*StreamChatEventsResponse, error) { + m := new(StreamChatEventsResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *chatClient) SendMessage(ctx context.Context, in *SendMessageRequest, opts ...grpc.CallOption) (*SendMessageResponse, error) { + out := new(SendMessageResponse) + err := c.cc.Invoke(ctx, "/code.chat.v1.Chat/SendMessage", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // ChatServer is the server API for Chat service. // All implementations must embed UnimplementedChatServer // for forward compatibility @@ -101,6 +143,8 @@ type ChatServer interface { SetMuteState(context.Context, *SetMuteStateRequest) (*SetMuteStateResponse, error) // SetSubscriptionState configures the susbscription state of a chat SetSubscriptionState(context.Context, *SetSubscriptionStateRequest) (*SetSubscriptionStateResponse, error) + StreamChatEvents(Chat_StreamChatEventsServer) error + SendMessage(context.Context, *SendMessageRequest) (*SendMessageResponse, error) mustEmbedUnimplementedChatServer() } @@ -123,6 +167,12 @@ func (UnimplementedChatServer) SetMuteState(context.Context, *SetMuteStateReques func (UnimplementedChatServer) SetSubscriptionState(context.Context, *SetSubscriptionStateRequest) (*SetSubscriptionStateResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method SetSubscriptionState not implemented") } +func (UnimplementedChatServer) StreamChatEvents(Chat_StreamChatEventsServer) error { + return status.Errorf(codes.Unimplemented, "method StreamChatEvents not implemented") +} +func (UnimplementedChatServer) SendMessage(context.Context, *SendMessageRequest) (*SendMessageResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SendMessage not implemented") +} func (UnimplementedChatServer) mustEmbedUnimplementedChatServer() {} // UnsafeChatServer may be embedded to opt out of forward compatibility for this service. @@ -226,6 +276,50 @@ func _Chat_SetSubscriptionState_Handler(srv interface{}, ctx context.Context, de return interceptor(ctx, in, info, handler) } +func _Chat_StreamChatEvents_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(ChatServer).StreamChatEvents(&chatStreamChatEventsServer{stream}) +} + +type Chat_StreamChatEventsServer interface { + Send(*StreamChatEventsResponse) error + Recv() (*StreamChatEventsRequest, error) + grpc.ServerStream +} + +type chatStreamChatEventsServer struct { + grpc.ServerStream +} + +func (x *chatStreamChatEventsServer) Send(m *StreamChatEventsResponse) error { + return x.ServerStream.SendMsg(m) +} + +func (x *chatStreamChatEventsServer) Recv() (*StreamChatEventsRequest, error) { + m := new(StreamChatEventsRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func _Chat_SendMessage_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SendMessageRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ChatServer).SendMessage(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/code.chat.v1.Chat/SendMessage", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ChatServer).SendMessage(ctx, req.(*SendMessageRequest)) + } + return interceptor(ctx, in, info, handler) +} + // Chat_ServiceDesc is the grpc.ServiceDesc for Chat service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -253,7 +347,18 @@ var Chat_ServiceDesc = grpc.ServiceDesc{ MethodName: "SetSubscriptionState", Handler: _Chat_SetSubscriptionState_Handler, }, + { + MethodName: "SendMessage", + Handler: _Chat_SendMessage_Handler, + }, + }, + Streams: []grpc.StreamDesc{ + { + StreamName: "StreamChatEvents", + Handler: _Chat_StreamChatEvents_Handler, + ServerStreams: true, + ClientStreams: true, + }, }, - Streams: []grpc.StreamDesc{}, Metadata: "chat/v1/chat_service.proto", } diff --git a/generated/go/chat/v2/chat_service.pb.go b/generated/go/chat/v2/chat_service.pb.go new file mode 100644 index 0000000..7ae020b --- /dev/null +++ b/generated/go/chat/v2/chat_service.pb.go @@ -0,0 +1,4874 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v3.21.12 +// source: chat/v2/chat_service.proto + +package chat + +import ( + v1 "github.com/code-payments/code-protobuf-api/generated/go/common/v1" + v2 "github.com/code-payments/code-protobuf-api/generated/go/transaction/v2" + _ "github.com/envoyproxy/protoc-gen-validate/validate" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +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) +) + +type ChatType int32 + +const ( + ChatType_UNKNOWN_CHAT_TYPE ChatType = 0 + ChatType_NOTIFICATION ChatType = 1 + ChatType_TWO_WAY ChatType = 2 // GROUP = 3; +) + +// Enum value maps for ChatType. +var ( + ChatType_name = map[int32]string{ + 0: "UNKNOWN_CHAT_TYPE", + 1: "NOTIFICATION", + 2: "TWO_WAY", + } + ChatType_value = map[string]int32{ + "UNKNOWN_CHAT_TYPE": 0, + "NOTIFICATION": 1, + "TWO_WAY": 2, + } +) + +func (x ChatType) Enum() *ChatType { + p := new(ChatType) + *p = x + return p +} + +func (x ChatType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ChatType) Descriptor() protoreflect.EnumDescriptor { + return file_chat_v2_chat_service_proto_enumTypes[0].Descriptor() +} + +func (ChatType) Type() protoreflect.EnumType { + return &file_chat_v2_chat_service_proto_enumTypes[0] +} + +func (x ChatType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ChatType.Descriptor instead. +func (ChatType) EnumDescriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{0} +} + +type Platform int32 + +const ( + Platform_UNKNOWN_PLATFORM Platform = 0 + Platform_TWITTER Platform = 1 +) + +// Enum value maps for Platform. +var ( + Platform_name = map[int32]string{ + 0: "UNKNOWN_PLATFORM", + 1: "TWITTER", + } + Platform_value = map[string]int32{ + "UNKNOWN_PLATFORM": 0, + "TWITTER": 1, + } +) + +func (x Platform) Enum() *Platform { + p := new(Platform) + *p = x + return p +} + +func (x Platform) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Platform) Descriptor() protoreflect.EnumDescriptor { + return file_chat_v2_chat_service_proto_enumTypes[1].Descriptor() +} + +func (Platform) Type() protoreflect.EnumType { + return &file_chat_v2_chat_service_proto_enumTypes[1] +} + +func (x Platform) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Platform.Descriptor instead. +func (Platform) EnumDescriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{1} +} + +type PointerType int32 + +const ( + PointerType_UNKNOWN_POINTER_TYPE PointerType = 0 + PointerType_SENT PointerType = 1 // Always inferred by OK result in SendMessageResponse or message presence in a chat + PointerType_DELIVERED PointerType = 2 + PointerType_READ PointerType = 3 +) + +// Enum value maps for PointerType. +var ( + PointerType_name = map[int32]string{ + 0: "UNKNOWN_POINTER_TYPE", + 1: "SENT", + 2: "DELIVERED", + 3: "READ", + } + PointerType_value = map[string]int32{ + "UNKNOWN_POINTER_TYPE": 0, + "SENT": 1, + "DELIVERED": 2, + "READ": 3, + } +) + +func (x PointerType) Enum() *PointerType { + p := new(PointerType) + *p = x + return p +} + +func (x PointerType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (PointerType) Descriptor() protoreflect.EnumDescriptor { + return file_chat_v2_chat_service_proto_enumTypes[2].Descriptor() +} + +func (PointerType) Type() protoreflect.EnumType { + return &file_chat_v2_chat_service_proto_enumTypes[2] +} + +func (x PointerType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use PointerType.Descriptor instead. +func (PointerType) EnumDescriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{2} +} + +type GetChatsRequest_Direction int32 + +const ( + GetChatsRequest_ASC GetChatsRequest_Direction = 0 + GetChatsRequest_DESC GetChatsRequest_Direction = 1 +) + +// Enum value maps for GetChatsRequest_Direction. +var ( + GetChatsRequest_Direction_name = map[int32]string{ + 0: "ASC", + 1: "DESC", + } + GetChatsRequest_Direction_value = map[string]int32{ + "ASC": 0, + "DESC": 1, + } +) + +func (x GetChatsRequest_Direction) Enum() *GetChatsRequest_Direction { + p := new(GetChatsRequest_Direction) + *p = x + return p +} + +func (x GetChatsRequest_Direction) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (GetChatsRequest_Direction) Descriptor() protoreflect.EnumDescriptor { + return file_chat_v2_chat_service_proto_enumTypes[3].Descriptor() +} + +func (GetChatsRequest_Direction) Type() protoreflect.EnumType { + return &file_chat_v2_chat_service_proto_enumTypes[3] +} + +func (x GetChatsRequest_Direction) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use GetChatsRequest_Direction.Descriptor instead. +func (GetChatsRequest_Direction) EnumDescriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{0, 0} +} + +type GetChatsResponse_Result int32 + +const ( + GetChatsResponse_OK GetChatsResponse_Result = 0 + GetChatsResponse_NOT_FOUND GetChatsResponse_Result = 1 +) + +// Enum value maps for GetChatsResponse_Result. +var ( + GetChatsResponse_Result_name = map[int32]string{ + 0: "OK", + 1: "NOT_FOUND", + } + GetChatsResponse_Result_value = map[string]int32{ + "OK": 0, + "NOT_FOUND": 1, + } +) + +func (x GetChatsResponse_Result) Enum() *GetChatsResponse_Result { + p := new(GetChatsResponse_Result) + *p = x + return p +} + +func (x GetChatsResponse_Result) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (GetChatsResponse_Result) Descriptor() protoreflect.EnumDescriptor { + return file_chat_v2_chat_service_proto_enumTypes[4].Descriptor() +} + +func (GetChatsResponse_Result) Type() protoreflect.EnumType { + return &file_chat_v2_chat_service_proto_enumTypes[4] +} + +func (x GetChatsResponse_Result) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use GetChatsResponse_Result.Descriptor instead. +func (GetChatsResponse_Result) EnumDescriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{1, 0} +} + +type GetMessagesRequest_Direction int32 + +const ( + GetMessagesRequest_ASC GetMessagesRequest_Direction = 0 + GetMessagesRequest_DESC GetMessagesRequest_Direction = 1 +) + +// Enum value maps for GetMessagesRequest_Direction. +var ( + GetMessagesRequest_Direction_name = map[int32]string{ + 0: "ASC", + 1: "DESC", + } + GetMessagesRequest_Direction_value = map[string]int32{ + "ASC": 0, + "DESC": 1, + } +) + +func (x GetMessagesRequest_Direction) Enum() *GetMessagesRequest_Direction { + p := new(GetMessagesRequest_Direction) + *p = x + return p +} + +func (x GetMessagesRequest_Direction) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (GetMessagesRequest_Direction) Descriptor() protoreflect.EnumDescriptor { + return file_chat_v2_chat_service_proto_enumTypes[5].Descriptor() +} + +func (GetMessagesRequest_Direction) Type() protoreflect.EnumType { + return &file_chat_v2_chat_service_proto_enumTypes[5] +} + +func (x GetMessagesRequest_Direction) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use GetMessagesRequest_Direction.Descriptor instead. +func (GetMessagesRequest_Direction) EnumDescriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{2, 0} +} + +type GetMessagesResponse_Result int32 + +const ( + GetMessagesResponse_OK GetMessagesResponse_Result = 0 + GetMessagesResponse_DENIED GetMessagesResponse_Result = 1 + GetMessagesResponse_CHAT_NOT_FOUND GetMessagesResponse_Result = 2 + GetMessagesResponse_MESSAGE_NOT_FOUND GetMessagesResponse_Result = 3 +) + +// Enum value maps for GetMessagesResponse_Result. +var ( + GetMessagesResponse_Result_name = map[int32]string{ + 0: "OK", + 1: "DENIED", + 2: "CHAT_NOT_FOUND", + 3: "MESSAGE_NOT_FOUND", + } + GetMessagesResponse_Result_value = map[string]int32{ + "OK": 0, + "DENIED": 1, + "CHAT_NOT_FOUND": 2, + "MESSAGE_NOT_FOUND": 3, + } +) + +func (x GetMessagesResponse_Result) Enum() *GetMessagesResponse_Result { + p := new(GetMessagesResponse_Result) + *p = x + return p +} + +func (x GetMessagesResponse_Result) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (GetMessagesResponse_Result) Descriptor() protoreflect.EnumDescriptor { + return file_chat_v2_chat_service_proto_enumTypes[6].Descriptor() +} + +func (GetMessagesResponse_Result) Type() protoreflect.EnumType { + return &file_chat_v2_chat_service_proto_enumTypes[6] +} + +func (x GetMessagesResponse_Result) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use GetMessagesResponse_Result.Descriptor instead. +func (GetMessagesResponse_Result) EnumDescriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{3, 0} +} + +type ChatStreamEventError_Code int32 + +const ( + ChatStreamEventError_DENIED ChatStreamEventError_Code = 0 + ChatStreamEventError_CHAT_NOT_FOUND ChatStreamEventError_Code = 1 +) + +// Enum value maps for ChatStreamEventError_Code. +var ( + ChatStreamEventError_Code_name = map[int32]string{ + 0: "DENIED", + 1: "CHAT_NOT_FOUND", + } + ChatStreamEventError_Code_value = map[string]int32{ + "DENIED": 0, + "CHAT_NOT_FOUND": 1, + } +) + +func (x ChatStreamEventError_Code) Enum() *ChatStreamEventError_Code { + p := new(ChatStreamEventError_Code) + *p = x + return p +} + +func (x ChatStreamEventError_Code) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ChatStreamEventError_Code) Descriptor() protoreflect.EnumDescriptor { + return file_chat_v2_chat_service_proto_enumTypes[7].Descriptor() +} + +func (ChatStreamEventError_Code) Type() protoreflect.EnumType { + return &file_chat_v2_chat_service_proto_enumTypes[7] +} + +func (x ChatStreamEventError_Code) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ChatStreamEventError_Code.Descriptor instead. +func (ChatStreamEventError_Code) EnumDescriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{7, 0} +} + +type StartChatResponse_Result int32 + +const ( + StartChatResponse_OK StartChatResponse_Result = 0 + StartChatResponse_DENIED StartChatResponse_Result = 1 + StartChatResponse_INVALID_PARAMETER StartChatResponse_Result = 2 +) + +// Enum value maps for StartChatResponse_Result. +var ( + StartChatResponse_Result_name = map[int32]string{ + 0: "OK", + 1: "DENIED", + 2: "INVALID_PARAMETER", + } + StartChatResponse_Result_value = map[string]int32{ + "OK": 0, + "DENIED": 1, + "INVALID_PARAMETER": 2, + } +) + +func (x StartChatResponse_Result) Enum() *StartChatResponse_Result { + p := new(StartChatResponse_Result) + *p = x + return p +} + +func (x StartChatResponse_Result) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (StartChatResponse_Result) Descriptor() protoreflect.EnumDescriptor { + return file_chat_v2_chat_service_proto_enumTypes[8].Descriptor() +} + +func (StartChatResponse_Result) Type() protoreflect.EnumType { + return &file_chat_v2_chat_service_proto_enumTypes[8] +} + +func (x StartChatResponse_Result) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use StartChatResponse_Result.Descriptor instead. +func (StartChatResponse_Result) EnumDescriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{12, 0} +} + +type SendMessageResponse_Result int32 + +const ( + SendMessageResponse_OK SendMessageResponse_Result = 0 + SendMessageResponse_DENIED SendMessageResponse_Result = 1 + SendMessageResponse_CHAT_NOT_FOUND SendMessageResponse_Result = 2 + SendMessageResponse_INVALID_CHAT_TYPE SendMessageResponse_Result = 3 + SendMessageResponse_INVALID_CONTENT_TYPE SendMessageResponse_Result = 4 +) + +// Enum value maps for SendMessageResponse_Result. +var ( + SendMessageResponse_Result_name = map[int32]string{ + 0: "OK", + 1: "DENIED", + 2: "CHAT_NOT_FOUND", + 3: "INVALID_CHAT_TYPE", + 4: "INVALID_CONTENT_TYPE", + } + SendMessageResponse_Result_value = map[string]int32{ + "OK": 0, + "DENIED": 1, + "CHAT_NOT_FOUND": 2, + "INVALID_CHAT_TYPE": 3, + "INVALID_CONTENT_TYPE": 4, + } +) + +func (x SendMessageResponse_Result) Enum() *SendMessageResponse_Result { + p := new(SendMessageResponse_Result) + *p = x + return p +} + +func (x SendMessageResponse_Result) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (SendMessageResponse_Result) Descriptor() protoreflect.EnumDescriptor { + return file_chat_v2_chat_service_proto_enumTypes[9].Descriptor() +} + +func (SendMessageResponse_Result) Type() protoreflect.EnumType { + return &file_chat_v2_chat_service_proto_enumTypes[9] +} + +func (x SendMessageResponse_Result) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use SendMessageResponse_Result.Descriptor instead. +func (SendMessageResponse_Result) EnumDescriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{14, 0} +} + +type AdvancePointerResponse_Result int32 + +const ( + AdvancePointerResponse_OK AdvancePointerResponse_Result = 0 + AdvancePointerResponse_DENIED AdvancePointerResponse_Result = 1 + AdvancePointerResponse_CHAT_NOT_FOUND AdvancePointerResponse_Result = 2 + AdvancePointerResponse_MESSAGE_NOT_FOUND AdvancePointerResponse_Result = 3 + AdvancePointerResponse_INVALID_POINTER_TYPE AdvancePointerResponse_Result = 4 +) + +// Enum value maps for AdvancePointerResponse_Result. +var ( + AdvancePointerResponse_Result_name = map[int32]string{ + 0: "OK", + 1: "DENIED", + 2: "CHAT_NOT_FOUND", + 3: "MESSAGE_NOT_FOUND", + 4: "INVALID_POINTER_TYPE", + } + AdvancePointerResponse_Result_value = map[string]int32{ + "OK": 0, + "DENIED": 1, + "CHAT_NOT_FOUND": 2, + "MESSAGE_NOT_FOUND": 3, + "INVALID_POINTER_TYPE": 4, + } +) + +func (x AdvancePointerResponse_Result) Enum() *AdvancePointerResponse_Result { + p := new(AdvancePointerResponse_Result) + *p = x + return p +} + +func (x AdvancePointerResponse_Result) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (AdvancePointerResponse_Result) Descriptor() protoreflect.EnumDescriptor { + return file_chat_v2_chat_service_proto_enumTypes[10].Descriptor() +} + +func (AdvancePointerResponse_Result) Type() protoreflect.EnumType { + return &file_chat_v2_chat_service_proto_enumTypes[10] +} + +func (x AdvancePointerResponse_Result) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use AdvancePointerResponse_Result.Descriptor instead. +func (AdvancePointerResponse_Result) EnumDescriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{16, 0} +} + +type RevealIdentityResponse_Result int32 + +const ( + RevealIdentityResponse_OK RevealIdentityResponse_Result = 0 + RevealIdentityResponse_DENIED RevealIdentityResponse_Result = 1 + RevealIdentityResponse_CHAT_NOT_FOUND RevealIdentityResponse_Result = 2 + RevealIdentityResponse_DIFFERENT_IDENTITY_REVEALED RevealIdentityResponse_Result = 3 +) + +// Enum value maps for RevealIdentityResponse_Result. +var ( + RevealIdentityResponse_Result_name = map[int32]string{ + 0: "OK", + 1: "DENIED", + 2: "CHAT_NOT_FOUND", + 3: "DIFFERENT_IDENTITY_REVEALED", + } + RevealIdentityResponse_Result_value = map[string]int32{ + "OK": 0, + "DENIED": 1, + "CHAT_NOT_FOUND": 2, + "DIFFERENT_IDENTITY_REVEALED": 3, + } +) + +func (x RevealIdentityResponse_Result) Enum() *RevealIdentityResponse_Result { + p := new(RevealIdentityResponse_Result) + *p = x + return p +} + +func (x RevealIdentityResponse_Result) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (RevealIdentityResponse_Result) Descriptor() protoreflect.EnumDescriptor { + return file_chat_v2_chat_service_proto_enumTypes[11].Descriptor() +} + +func (RevealIdentityResponse_Result) Type() protoreflect.EnumType { + return &file_chat_v2_chat_service_proto_enumTypes[11] +} + +func (x RevealIdentityResponse_Result) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use RevealIdentityResponse_Result.Descriptor instead. +func (RevealIdentityResponse_Result) EnumDescriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{18, 0} +} + +type SetMuteStateResponse_Result int32 + +const ( + SetMuteStateResponse_OK SetMuteStateResponse_Result = 0 + SetMuteStateResponse_DENIED SetMuteStateResponse_Result = 1 + SetMuteStateResponse_CHAT_NOT_FOUND SetMuteStateResponse_Result = 2 + SetMuteStateResponse_CANT_MUTE SetMuteStateResponse_Result = 3 +) + +// Enum value maps for SetMuteStateResponse_Result. +var ( + SetMuteStateResponse_Result_name = map[int32]string{ + 0: "OK", + 1: "DENIED", + 2: "CHAT_NOT_FOUND", + 3: "CANT_MUTE", + } + SetMuteStateResponse_Result_value = map[string]int32{ + "OK": 0, + "DENIED": 1, + "CHAT_NOT_FOUND": 2, + "CANT_MUTE": 3, + } +) + +func (x SetMuteStateResponse_Result) Enum() *SetMuteStateResponse_Result { + p := new(SetMuteStateResponse_Result) + *p = x + return p +} + +func (x SetMuteStateResponse_Result) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (SetMuteStateResponse_Result) Descriptor() protoreflect.EnumDescriptor { + return file_chat_v2_chat_service_proto_enumTypes[12].Descriptor() +} + +func (SetMuteStateResponse_Result) Type() protoreflect.EnumType { + return &file_chat_v2_chat_service_proto_enumTypes[12] +} + +func (x SetMuteStateResponse_Result) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use SetMuteStateResponse_Result.Descriptor instead. +func (SetMuteStateResponse_Result) EnumDescriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{20, 0} +} + +type SetSubscriptionStateResponse_Result int32 + +const ( + SetSubscriptionStateResponse_OK SetSubscriptionStateResponse_Result = 0 + SetSubscriptionStateResponse_DENIED SetSubscriptionStateResponse_Result = 1 + SetSubscriptionStateResponse_CHAT_NOT_FOUND SetSubscriptionStateResponse_Result = 2 + SetSubscriptionStateResponse_CANT_UNSUBSCRIBE SetSubscriptionStateResponse_Result = 3 +) + +// Enum value maps for SetSubscriptionStateResponse_Result. +var ( + SetSubscriptionStateResponse_Result_name = map[int32]string{ + 0: "OK", + 1: "DENIED", + 2: "CHAT_NOT_FOUND", + 3: "CANT_UNSUBSCRIBE", + } + SetSubscriptionStateResponse_Result_value = map[string]int32{ + "OK": 0, + "DENIED": 1, + "CHAT_NOT_FOUND": 2, + "CANT_UNSUBSCRIBE": 3, + } +) + +func (x SetSubscriptionStateResponse_Result) Enum() *SetSubscriptionStateResponse_Result { + p := new(SetSubscriptionStateResponse_Result) + *p = x + return p +} + +func (x SetSubscriptionStateResponse_Result) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (SetSubscriptionStateResponse_Result) Descriptor() protoreflect.EnumDescriptor { + return file_chat_v2_chat_service_proto_enumTypes[13].Descriptor() +} + +func (SetSubscriptionStateResponse_Result) Type() protoreflect.EnumType { + return &file_chat_v2_chat_service_proto_enumTypes[13] +} + +func (x SetSubscriptionStateResponse_Result) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use SetSubscriptionStateResponse_Result.Descriptor instead. +func (SetSubscriptionStateResponse_Result) EnumDescriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{22, 0} +} + +type ExchangeDataContent_Verb int32 + +const ( + ExchangeDataContent_UNKNOWN ExchangeDataContent_Verb = 0 + ExchangeDataContent_GAVE ExchangeDataContent_Verb = 1 + ExchangeDataContent_RECEIVED ExchangeDataContent_Verb = 2 + ExchangeDataContent_WITHDREW ExchangeDataContent_Verb = 3 + ExchangeDataContent_DEPOSITED ExchangeDataContent_Verb = 4 + ExchangeDataContent_SENT ExchangeDataContent_Verb = 5 + ExchangeDataContent_RETURNED ExchangeDataContent_Verb = 6 + ExchangeDataContent_SPENT ExchangeDataContent_Verb = 7 + ExchangeDataContent_PAID ExchangeDataContent_Verb = 8 + ExchangeDataContent_PURCHASED ExchangeDataContent_Verb = 9 + ExchangeDataContent_RECEIVED_TIP ExchangeDataContent_Verb = 10 + ExchangeDataContent_SENT_TIP ExchangeDataContent_Verb = 11 +) + +// Enum value maps for ExchangeDataContent_Verb. +var ( + ExchangeDataContent_Verb_name = map[int32]string{ + 0: "UNKNOWN", + 1: "GAVE", + 2: "RECEIVED", + 3: "WITHDREW", + 4: "DEPOSITED", + 5: "SENT", + 6: "RETURNED", + 7: "SPENT", + 8: "PAID", + 9: "PURCHASED", + 10: "RECEIVED_TIP", + 11: "SENT_TIP", + } + ExchangeDataContent_Verb_value = map[string]int32{ + "UNKNOWN": 0, + "GAVE": 1, + "RECEIVED": 2, + "WITHDREW": 3, + "DEPOSITED": 4, + "SENT": 5, + "RETURNED": 6, + "SPENT": 7, + "PAID": 8, + "PURCHASED": 9, + "RECEIVED_TIP": 10, + "SENT_TIP": 11, + } +) + +func (x ExchangeDataContent_Verb) Enum() *ExchangeDataContent_Verb { + p := new(ExchangeDataContent_Verb) + *p = x + return p +} + +func (x ExchangeDataContent_Verb) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ExchangeDataContent_Verb) Descriptor() protoreflect.EnumDescriptor { + return file_chat_v2_chat_service_proto_enumTypes[14].Descriptor() +} + +func (ExchangeDataContent_Verb) Type() protoreflect.EnumType { + return &file_chat_v2_chat_service_proto_enumTypes[14] +} + +func (x ExchangeDataContent_Verb) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ExchangeDataContent_Verb.Descriptor instead. +func (ExchangeDataContent_Verb) EnumDescriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{34, 0} +} + +type GetChatsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Owner *v1.SolanaAccountId `protobuf:"bytes,1,opt,name=owner,proto3" json:"owner,omitempty"` + Signature *v1.Signature `protobuf:"bytes,2,opt,name=signature,proto3" json:"signature,omitempty"` + PageSize uint32 `protobuf:"varint,3,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + Cursor *Cursor `protobuf:"bytes,4,opt,name=cursor,proto3" json:"cursor,omitempty"` + Direction GetChatsRequest_Direction `protobuf:"varint,5,opt,name=direction,proto3,enum=code.chat.v2.GetChatsRequest_Direction" json:"direction,omitempty"` +} + +func (x *GetChatsRequest) Reset() { + *x = GetChatsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetChatsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetChatsRequest) ProtoMessage() {} + +func (x *GetChatsRequest) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetChatsRequest.ProtoReflect.Descriptor instead. +func (*GetChatsRequest) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{0} +} + +func (x *GetChatsRequest) GetOwner() *v1.SolanaAccountId { + if x != nil { + return x.Owner + } + return nil +} + +func (x *GetChatsRequest) GetSignature() *v1.Signature { + if x != nil { + return x.Signature + } + return nil +} + +func (x *GetChatsRequest) GetPageSize() uint32 { + if x != nil { + return x.PageSize + } + return 0 +} + +func (x *GetChatsRequest) GetCursor() *Cursor { + if x != nil { + return x.Cursor + } + return nil +} + +func (x *GetChatsRequest) GetDirection() GetChatsRequest_Direction { + if x != nil { + return x.Direction + } + return GetChatsRequest_ASC +} + +type GetChatsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Result GetChatsResponse_Result `protobuf:"varint,1,opt,name=result,proto3,enum=code.chat.v2.GetChatsResponse_Result" json:"result,omitempty"` + Chats []*ChatMetadata `protobuf:"bytes,2,rep,name=chats,proto3" json:"chats,omitempty"` +} + +func (x *GetChatsResponse) Reset() { + *x = GetChatsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetChatsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetChatsResponse) ProtoMessage() {} + +func (x *GetChatsResponse) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetChatsResponse.ProtoReflect.Descriptor instead. +func (*GetChatsResponse) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{1} +} + +func (x *GetChatsResponse) GetResult() GetChatsResponse_Result { + if x != nil { + return x.Result + } + return GetChatsResponse_OK +} + +func (x *GetChatsResponse) GetChats() []*ChatMetadata { + if x != nil { + return x.Chats + } + return nil +} + +type GetMessagesRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ChatId *ChatId `protobuf:"bytes,1,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"` + MemberId *ChatMemberId `protobuf:"bytes,2,opt,name=member_id,json=memberId,proto3" json:"member_id,omitempty"` + Owner *v1.SolanaAccountId `protobuf:"bytes,3,opt,name=owner,proto3" json:"owner,omitempty"` + Signature *v1.Signature `protobuf:"bytes,4,opt,name=signature,proto3" json:"signature,omitempty"` + PageSize uint32 `protobuf:"varint,5,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + Cursor *Cursor `protobuf:"bytes,6,opt,name=cursor,proto3" json:"cursor,omitempty"` + Direction GetMessagesRequest_Direction `protobuf:"varint,7,opt,name=direction,proto3,enum=code.chat.v2.GetMessagesRequest_Direction" json:"direction,omitempty"` +} + +func (x *GetMessagesRequest) Reset() { + *x = GetMessagesRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetMessagesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetMessagesRequest) ProtoMessage() {} + +func (x *GetMessagesRequest) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetMessagesRequest.ProtoReflect.Descriptor instead. +func (*GetMessagesRequest) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{2} +} + +func (x *GetMessagesRequest) GetChatId() *ChatId { + if x != nil { + return x.ChatId + } + return nil +} + +func (x *GetMessagesRequest) GetMemberId() *ChatMemberId { + if x != nil { + return x.MemberId + } + return nil +} + +func (x *GetMessagesRequest) GetOwner() *v1.SolanaAccountId { + if x != nil { + return x.Owner + } + return nil +} + +func (x *GetMessagesRequest) GetSignature() *v1.Signature { + if x != nil { + return x.Signature + } + return nil +} + +func (x *GetMessagesRequest) GetPageSize() uint32 { + if x != nil { + return x.PageSize + } + return 0 +} + +func (x *GetMessagesRequest) GetCursor() *Cursor { + if x != nil { + return x.Cursor + } + return nil +} + +func (x *GetMessagesRequest) GetDirection() GetMessagesRequest_Direction { + if x != nil { + return x.Direction + } + return GetMessagesRequest_ASC +} + +type GetMessagesResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Result GetMessagesResponse_Result `protobuf:"varint,1,opt,name=result,proto3,enum=code.chat.v2.GetMessagesResponse_Result" json:"result,omitempty"` + Messages []*ChatMessage `protobuf:"bytes,2,rep,name=messages,proto3" json:"messages,omitempty"` +} + +func (x *GetMessagesResponse) Reset() { + *x = GetMessagesResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetMessagesResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetMessagesResponse) ProtoMessage() {} + +func (x *GetMessagesResponse) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetMessagesResponse.ProtoReflect.Descriptor instead. +func (*GetMessagesResponse) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{3} +} + +func (x *GetMessagesResponse) GetResult() GetMessagesResponse_Result { + if x != nil { + return x.Result + } + return GetMessagesResponse_OK +} + +func (x *GetMessagesResponse) GetMessages() []*ChatMessage { + if x != nil { + return x.Messages + } + return nil +} + +type OpenChatEventStream struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ChatId *ChatId `protobuf:"bytes,1,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"` + MemberId *ChatMemberId `protobuf:"bytes,2,opt,name=member_id,json=memberId,proto3" json:"member_id,omitempty"` + Owner *v1.SolanaAccountId `protobuf:"bytes,3,opt,name=owner,proto3" json:"owner,omitempty"` + Signature *v1.Signature `protobuf:"bytes,4,opt,name=signature,proto3" json:"signature,omitempty"` +} + +func (x *OpenChatEventStream) Reset() { + *x = OpenChatEventStream{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *OpenChatEventStream) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OpenChatEventStream) ProtoMessage() {} + +func (x *OpenChatEventStream) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use OpenChatEventStream.ProtoReflect.Descriptor instead. +func (*OpenChatEventStream) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{4} +} + +func (x *OpenChatEventStream) GetChatId() *ChatId { + if x != nil { + return x.ChatId + } + return nil +} + +func (x *OpenChatEventStream) GetMemberId() *ChatMemberId { + if x != nil { + return x.MemberId + } + return nil +} + +func (x *OpenChatEventStream) GetOwner() *v1.SolanaAccountId { + if x != nil { + return x.Owner + } + return nil +} + +func (x *OpenChatEventStream) GetSignature() *v1.Signature { + if x != nil { + return x.Signature + } + return nil +} + +type ChatStreamEvent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Type: + // + // *ChatStreamEvent_Message + // *ChatStreamEvent_Pointer + Type isChatStreamEvent_Type `protobuf_oneof:"type"` +} + +func (x *ChatStreamEvent) Reset() { + *x = ChatStreamEvent{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChatStreamEvent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChatStreamEvent) ProtoMessage() {} + +func (x *ChatStreamEvent) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChatStreamEvent.ProtoReflect.Descriptor instead. +func (*ChatStreamEvent) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{5} +} + +func (m *ChatStreamEvent) GetType() isChatStreamEvent_Type { + if m != nil { + return m.Type + } + return nil +} + +func (x *ChatStreamEvent) GetMessage() *ChatMessage { + if x, ok := x.GetType().(*ChatStreamEvent_Message); ok { + return x.Message + } + return nil +} + +func (x *ChatStreamEvent) GetPointer() *Pointer { + if x, ok := x.GetType().(*ChatStreamEvent_Pointer); ok { + return x.Pointer + } + return nil +} + +type isChatStreamEvent_Type interface { + isChatStreamEvent_Type() +} + +type ChatStreamEvent_Message struct { + Message *ChatMessage `protobuf:"bytes,1,opt,name=message,proto3,oneof"` +} + +type ChatStreamEvent_Pointer struct { + Pointer *Pointer `protobuf:"bytes,2,opt,name=pointer,proto3,oneof"` +} + +func (*ChatStreamEvent_Message) isChatStreamEvent_Type() {} + +func (*ChatStreamEvent_Pointer) isChatStreamEvent_Type() {} + +type ChatStreamEventBatch struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Events []*ChatStreamEvent `protobuf:"bytes,2,rep,name=events,proto3" json:"events,omitempty"` +} + +func (x *ChatStreamEventBatch) Reset() { + *x = ChatStreamEventBatch{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChatStreamEventBatch) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChatStreamEventBatch) ProtoMessage() {} + +func (x *ChatStreamEventBatch) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChatStreamEventBatch.ProtoReflect.Descriptor instead. +func (*ChatStreamEventBatch) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{6} +} + +func (x *ChatStreamEventBatch) GetEvents() []*ChatStreamEvent { + if x != nil { + return x.Events + } + return nil +} + +type ChatStreamEventError struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Code ChatStreamEventError_Code `protobuf:"varint,1,opt,name=code,proto3,enum=code.chat.v2.ChatStreamEventError_Code" json:"code,omitempty"` +} + +func (x *ChatStreamEventError) Reset() { + *x = ChatStreamEventError{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChatStreamEventError) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChatStreamEventError) ProtoMessage() {} + +func (x *ChatStreamEventError) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChatStreamEventError.ProtoReflect.Descriptor instead. +func (*ChatStreamEventError) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{7} +} + +func (x *ChatStreamEventError) GetCode() ChatStreamEventError_Code { + if x != nil { + return x.Code + } + return ChatStreamEventError_DENIED +} + +type StreamChatEventsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Type: + // + // *StreamChatEventsRequest_OpenStream + // *StreamChatEventsRequest_Pong + Type isStreamChatEventsRequest_Type `protobuf_oneof:"type"` +} + +func (x *StreamChatEventsRequest) Reset() { + *x = StreamChatEventsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StreamChatEventsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StreamChatEventsRequest) ProtoMessage() {} + +func (x *StreamChatEventsRequest) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StreamChatEventsRequest.ProtoReflect.Descriptor instead. +func (*StreamChatEventsRequest) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{8} +} + +func (m *StreamChatEventsRequest) GetType() isStreamChatEventsRequest_Type { + if m != nil { + return m.Type + } + return nil +} + +func (x *StreamChatEventsRequest) GetOpenStream() *OpenChatEventStream { + if x, ok := x.GetType().(*StreamChatEventsRequest_OpenStream); ok { + return x.OpenStream + } + return nil +} + +func (x *StreamChatEventsRequest) GetPong() *v1.ClientPong { + if x, ok := x.GetType().(*StreamChatEventsRequest_Pong); ok { + return x.Pong + } + return nil +} + +type isStreamChatEventsRequest_Type interface { + isStreamChatEventsRequest_Type() +} + +type StreamChatEventsRequest_OpenStream struct { + OpenStream *OpenChatEventStream `protobuf:"bytes,1,opt,name=open_stream,json=openStream,proto3,oneof"` +} + +type StreamChatEventsRequest_Pong struct { + Pong *v1.ClientPong `protobuf:"bytes,2,opt,name=pong,proto3,oneof"` +} + +func (*StreamChatEventsRequest_OpenStream) isStreamChatEventsRequest_Type() {} + +func (*StreamChatEventsRequest_Pong) isStreamChatEventsRequest_Type() {} + +type StreamChatEventsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Type: + // + // *StreamChatEventsResponse_Events + // *StreamChatEventsResponse_Ping + // *StreamChatEventsResponse_Error + Type isStreamChatEventsResponse_Type `protobuf_oneof:"type"` +} + +func (x *StreamChatEventsResponse) Reset() { + *x = StreamChatEventsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StreamChatEventsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StreamChatEventsResponse) ProtoMessage() {} + +func (x *StreamChatEventsResponse) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StreamChatEventsResponse.ProtoReflect.Descriptor instead. +func (*StreamChatEventsResponse) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{9} +} + +func (m *StreamChatEventsResponse) GetType() isStreamChatEventsResponse_Type { + if m != nil { + return m.Type + } + return nil +} + +func (x *StreamChatEventsResponse) GetEvents() *ChatStreamEventBatch { + if x, ok := x.GetType().(*StreamChatEventsResponse_Events); ok { + return x.Events + } + return nil +} + +func (x *StreamChatEventsResponse) GetPing() *v1.ServerPing { + if x, ok := x.GetType().(*StreamChatEventsResponse_Ping); ok { + return x.Ping + } + return nil +} + +func (x *StreamChatEventsResponse) GetError() *ChatStreamEventError { + if x, ok := x.GetType().(*StreamChatEventsResponse_Error); ok { + return x.Error + } + return nil +} + +type isStreamChatEventsResponse_Type interface { + isStreamChatEventsResponse_Type() +} + +type StreamChatEventsResponse_Events struct { + Events *ChatStreamEventBatch `protobuf:"bytes,1,opt,name=events,proto3,oneof"` +} + +type StreamChatEventsResponse_Ping struct { + Ping *v1.ServerPing `protobuf:"bytes,2,opt,name=ping,proto3,oneof"` +} + +type StreamChatEventsResponse_Error struct { + Error *ChatStreamEventError `protobuf:"bytes,3,opt,name=error,proto3,oneof"` +} + +func (*StreamChatEventsResponse_Events) isStreamChatEventsResponse_Type() {} + +func (*StreamChatEventsResponse_Ping) isStreamChatEventsResponse_Type() {} + +func (*StreamChatEventsResponse_Error) isStreamChatEventsResponse_Type() {} + +type StartChatRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Owner *v1.SolanaAccountId `protobuf:"bytes,1,opt,name=owner,proto3" json:"owner,omitempty"` + Signature *v1.Signature `protobuf:"bytes,2,opt,name=signature,proto3" json:"signature,omitempty"` + // Types that are assignable to Parameters: + // + // *StartChatRequest_TipChat + Parameters isStartChatRequest_Parameters `protobuf_oneof:"parameters"` +} + +func (x *StartChatRequest) Reset() { + *x = StartChatRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StartChatRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StartChatRequest) ProtoMessage() {} + +func (x *StartChatRequest) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StartChatRequest.ProtoReflect.Descriptor instead. +func (*StartChatRequest) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{10} +} + +func (x *StartChatRequest) GetOwner() *v1.SolanaAccountId { + if x != nil { + return x.Owner + } + return nil +} + +func (x *StartChatRequest) GetSignature() *v1.Signature { + if x != nil { + return x.Signature + } + return nil +} + +func (m *StartChatRequest) GetParameters() isStartChatRequest_Parameters { + if m != nil { + return m.Parameters + } + return nil +} + +func (x *StartChatRequest) GetTipChat() *StartTipChatParameters { + if x, ok := x.GetParameters().(*StartChatRequest_TipChat); ok { + return x.TipChat + } + return nil +} + +type isStartChatRequest_Parameters interface { + isStartChatRequest_Parameters() +} + +type StartChatRequest_TipChat struct { + TipChat *StartTipChatParameters `protobuf:"bytes,3,opt,name=tip_chat,json=tipChat,proto3,oneof"` // GroupChatParameters group_chat = 4; +} + +func (*StartChatRequest_TipChat) isStartChatRequest_Parameters() {} + +// Starts a two-way chat between a tipper and tippee. Chat members are +// inferred from the 12 word public keys involved in the intent. Only +// the tippee can start the chat, and the tipper is anonymous if this +// is the first between the involved Code users. +type StartTipChatParameters struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The tip's intent ID, which can be extracted from the reference in + // an ExchangeDataContent message content where the verb is RECEIVED_TIP. + IntentId *v1.IntentId `protobuf:"bytes,1,opt,name=intent_id,json=intentId,proto3" json:"intent_id,omitempty"` +} + +func (x *StartTipChatParameters) Reset() { + *x = StartTipChatParameters{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StartTipChatParameters) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StartTipChatParameters) ProtoMessage() {} + +func (x *StartTipChatParameters) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StartTipChatParameters.ProtoReflect.Descriptor instead. +func (*StartTipChatParameters) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{11} +} + +func (x *StartTipChatParameters) GetIntentId() *v1.IntentId { + if x != nil { + return x.IntentId + } + return nil +} + +type StartChatResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Result StartChatResponse_Result `protobuf:"varint,1,opt,name=result,proto3,enum=code.chat.v2.StartChatResponse_Result" json:"result,omitempty"` + // The chat to use if the RPC was successful + Chat *ChatMetadata `protobuf:"bytes,2,opt,name=chat,proto3" json:"chat,omitempty"` +} + +func (x *StartChatResponse) Reset() { + *x = StartChatResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StartChatResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StartChatResponse) ProtoMessage() {} + +func (x *StartChatResponse) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StartChatResponse.ProtoReflect.Descriptor instead. +func (*StartChatResponse) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{12} +} + +func (x *StartChatResponse) GetResult() StartChatResponse_Result { + if x != nil { + return x.Result + } + return StartChatResponse_OK +} + +func (x *StartChatResponse) GetChat() *ChatMetadata { + if x != nil { + return x.Chat + } + return nil +} + +type SendMessageRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ChatId *ChatId `protobuf:"bytes,1,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"` + MemberId *ChatMemberId `protobuf:"bytes,2,opt,name=member_id,json=memberId,proto3" json:"member_id,omitempty"` + // Allowed content types that can be sent by client: + // - TextContent + // - ThankYouContent + Content []*Content `protobuf:"bytes,3,rep,name=content,proto3" json:"content,omitempty"` + Owner *v1.SolanaAccountId `protobuf:"bytes,4,opt,name=owner,proto3" json:"owner,omitempty"` + Signature *v1.Signature `protobuf:"bytes,5,opt,name=signature,proto3" json:"signature,omitempty"` +} + +func (x *SendMessageRequest) Reset() { + *x = SendMessageRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SendMessageRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SendMessageRequest) ProtoMessage() {} + +func (x *SendMessageRequest) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SendMessageRequest.ProtoReflect.Descriptor instead. +func (*SendMessageRequest) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{13} +} + +func (x *SendMessageRequest) GetChatId() *ChatId { + if x != nil { + return x.ChatId + } + return nil +} + +func (x *SendMessageRequest) GetMemberId() *ChatMemberId { + if x != nil { + return x.MemberId + } + return nil +} + +func (x *SendMessageRequest) GetContent() []*Content { + if x != nil { + return x.Content + } + return nil +} + +func (x *SendMessageRequest) GetOwner() *v1.SolanaAccountId { + if x != nil { + return x.Owner + } + return nil +} + +func (x *SendMessageRequest) GetSignature() *v1.Signature { + if x != nil { + return x.Signature + } + return nil +} + +type SendMessageResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Result SendMessageResponse_Result `protobuf:"varint,1,opt,name=result,proto3,enum=code.chat.v2.SendMessageResponse_Result" json:"result,omitempty"` + // The chat message that was sent if the RPC was succesful, which includes + // server-side metadata like the generated message ID and official timestamp + Message *ChatMessage `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` +} + +func (x *SendMessageResponse) Reset() { + *x = SendMessageResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SendMessageResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SendMessageResponse) ProtoMessage() {} + +func (x *SendMessageResponse) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SendMessageResponse.ProtoReflect.Descriptor instead. +func (*SendMessageResponse) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{14} +} + +func (x *SendMessageResponse) GetResult() SendMessageResponse_Result { + if x != nil { + return x.Result + } + return SendMessageResponse_OK +} + +func (x *SendMessageResponse) GetMessage() *ChatMessage { + if x != nil { + return x.Message + } + return nil +} + +type AdvancePointerRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ChatId *ChatId `protobuf:"bytes,1,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"` + Pointer *Pointer `protobuf:"bytes,2,opt,name=pointer,proto3" json:"pointer,omitempty"` + Owner *v1.SolanaAccountId `protobuf:"bytes,3,opt,name=owner,proto3" json:"owner,omitempty"` + Signature *v1.Signature `protobuf:"bytes,4,opt,name=signature,proto3" json:"signature,omitempty"` +} + +func (x *AdvancePointerRequest) Reset() { + *x = AdvancePointerRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AdvancePointerRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AdvancePointerRequest) ProtoMessage() {} + +func (x *AdvancePointerRequest) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AdvancePointerRequest.ProtoReflect.Descriptor instead. +func (*AdvancePointerRequest) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{15} +} + +func (x *AdvancePointerRequest) GetChatId() *ChatId { + if x != nil { + return x.ChatId + } + return nil +} + +func (x *AdvancePointerRequest) GetPointer() *Pointer { + if x != nil { + return x.Pointer + } + return nil +} + +func (x *AdvancePointerRequest) GetOwner() *v1.SolanaAccountId { + if x != nil { + return x.Owner + } + return nil +} + +func (x *AdvancePointerRequest) GetSignature() *v1.Signature { + if x != nil { + return x.Signature + } + return nil +} + +type AdvancePointerResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Result AdvancePointerResponse_Result `protobuf:"varint,1,opt,name=result,proto3,enum=code.chat.v2.AdvancePointerResponse_Result" json:"result,omitempty"` +} + +func (x *AdvancePointerResponse) Reset() { + *x = AdvancePointerResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AdvancePointerResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AdvancePointerResponse) ProtoMessage() {} + +func (x *AdvancePointerResponse) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[16] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AdvancePointerResponse.ProtoReflect.Descriptor instead. +func (*AdvancePointerResponse) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{16} +} + +func (x *AdvancePointerResponse) GetResult() AdvancePointerResponse_Result { + if x != nil { + return x.Result + } + return AdvancePointerResponse_OK +} + +type RevealIdentityRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ChatId *ChatId `protobuf:"bytes,1,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"` + MemberId *ChatMemberId `protobuf:"bytes,2,opt,name=member_id,json=memberId,proto3" json:"member_id,omitempty"` + Identity *ChatMemberIdentity `protobuf:"bytes,3,opt,name=identity,proto3" json:"identity,omitempty"` + Owner *v1.SolanaAccountId `protobuf:"bytes,4,opt,name=owner,proto3" json:"owner,omitempty"` + Signature *v1.Signature `protobuf:"bytes,5,opt,name=signature,proto3" json:"signature,omitempty"` +} + +func (x *RevealIdentityRequest) Reset() { + *x = RevealIdentityRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RevealIdentityRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RevealIdentityRequest) ProtoMessage() {} + +func (x *RevealIdentityRequest) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RevealIdentityRequest.ProtoReflect.Descriptor instead. +func (*RevealIdentityRequest) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{17} +} + +func (x *RevealIdentityRequest) GetChatId() *ChatId { + if x != nil { + return x.ChatId + } + return nil +} + +func (x *RevealIdentityRequest) GetMemberId() *ChatMemberId { + if x != nil { + return x.MemberId + } + return nil +} + +func (x *RevealIdentityRequest) GetIdentity() *ChatMemberIdentity { + if x != nil { + return x.Identity + } + return nil +} + +func (x *RevealIdentityRequest) GetOwner() *v1.SolanaAccountId { + if x != nil { + return x.Owner + } + return nil +} + +func (x *RevealIdentityRequest) GetSignature() *v1.Signature { + if x != nil { + return x.Signature + } + return nil +} + +type RevealIdentityResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Result RevealIdentityResponse_Result `protobuf:"varint,1,opt,name=result,proto3,enum=code.chat.v2.RevealIdentityResponse_Result" json:"result,omitempty"` + // The chat message that was sent if the RPC was successful + Message *ChatMessage `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` +} + +func (x *RevealIdentityResponse) Reset() { + *x = RevealIdentityResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RevealIdentityResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RevealIdentityResponse) ProtoMessage() {} + +func (x *RevealIdentityResponse) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RevealIdentityResponse.ProtoReflect.Descriptor instead. +func (*RevealIdentityResponse) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{18} +} + +func (x *RevealIdentityResponse) GetResult() RevealIdentityResponse_Result { + if x != nil { + return x.Result + } + return RevealIdentityResponse_OK +} + +func (x *RevealIdentityResponse) GetMessage() *ChatMessage { + if x != nil { + return x.Message + } + return nil +} + +type SetMuteStateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ChatId *ChatId `protobuf:"bytes,1,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"` + MemberId *ChatMemberId `protobuf:"bytes,2,opt,name=member_id,json=memberId,proto3" json:"member_id,omitempty"` + IsMuted bool `protobuf:"varint,3,opt,name=is_muted,json=isMuted,proto3" json:"is_muted,omitempty"` + Owner *v1.SolanaAccountId `protobuf:"bytes,4,opt,name=owner,proto3" json:"owner,omitempty"` + Signature *v1.Signature `protobuf:"bytes,5,opt,name=signature,proto3" json:"signature,omitempty"` +} + +func (x *SetMuteStateRequest) Reset() { + *x = SetMuteStateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SetMuteStateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SetMuteStateRequest) ProtoMessage() {} + +func (x *SetMuteStateRequest) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[19] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SetMuteStateRequest.ProtoReflect.Descriptor instead. +func (*SetMuteStateRequest) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{19} +} + +func (x *SetMuteStateRequest) GetChatId() *ChatId { + if x != nil { + return x.ChatId + } + return nil +} + +func (x *SetMuteStateRequest) GetMemberId() *ChatMemberId { + if x != nil { + return x.MemberId + } + return nil +} + +func (x *SetMuteStateRequest) GetIsMuted() bool { + if x != nil { + return x.IsMuted + } + return false +} + +func (x *SetMuteStateRequest) GetOwner() *v1.SolanaAccountId { + if x != nil { + return x.Owner + } + return nil +} + +func (x *SetMuteStateRequest) GetSignature() *v1.Signature { + if x != nil { + return x.Signature + } + return nil +} + +type SetMuteStateResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Result SetMuteStateResponse_Result `protobuf:"varint,1,opt,name=result,proto3,enum=code.chat.v2.SetMuteStateResponse_Result" json:"result,omitempty"` +} + +func (x *SetMuteStateResponse) Reset() { + *x = SetMuteStateResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SetMuteStateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SetMuteStateResponse) ProtoMessage() {} + +func (x *SetMuteStateResponse) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[20] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SetMuteStateResponse.ProtoReflect.Descriptor instead. +func (*SetMuteStateResponse) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{20} +} + +func (x *SetMuteStateResponse) GetResult() SetMuteStateResponse_Result { + if x != nil { + return x.Result + } + return SetMuteStateResponse_OK +} + +type SetSubscriptionStateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ChatId *ChatId `protobuf:"bytes,1,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"` + MemberId *ChatMemberId `protobuf:"bytes,2,opt,name=member_id,json=memberId,proto3" json:"member_id,omitempty"` + IsSubscribed bool `protobuf:"varint,3,opt,name=is_subscribed,json=isSubscribed,proto3" json:"is_subscribed,omitempty"` + Owner *v1.SolanaAccountId `protobuf:"bytes,4,opt,name=owner,proto3" json:"owner,omitempty"` + Signature *v1.Signature `protobuf:"bytes,5,opt,name=signature,proto3" json:"signature,omitempty"` +} + +func (x *SetSubscriptionStateRequest) Reset() { + *x = SetSubscriptionStateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SetSubscriptionStateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SetSubscriptionStateRequest) ProtoMessage() {} + +func (x *SetSubscriptionStateRequest) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[21] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SetSubscriptionStateRequest.ProtoReflect.Descriptor instead. +func (*SetSubscriptionStateRequest) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{21} +} + +func (x *SetSubscriptionStateRequest) GetChatId() *ChatId { + if x != nil { + return x.ChatId + } + return nil +} + +func (x *SetSubscriptionStateRequest) GetMemberId() *ChatMemberId { + if x != nil { + return x.MemberId + } + return nil +} + +func (x *SetSubscriptionStateRequest) GetIsSubscribed() bool { + if x != nil { + return x.IsSubscribed + } + return false +} + +func (x *SetSubscriptionStateRequest) GetOwner() *v1.SolanaAccountId { + if x != nil { + return x.Owner + } + return nil +} + +func (x *SetSubscriptionStateRequest) GetSignature() *v1.Signature { + if x != nil { + return x.Signature + } + return nil +} + +type SetSubscriptionStateResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Result SetSubscriptionStateResponse_Result `protobuf:"varint,1,opt,name=result,proto3,enum=code.chat.v2.SetSubscriptionStateResponse_Result" json:"result,omitempty"` +} + +func (x *SetSubscriptionStateResponse) Reset() { + *x = SetSubscriptionStateResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SetSubscriptionStateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SetSubscriptionStateResponse) ProtoMessage() {} + +func (x *SetSubscriptionStateResponse) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[22] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SetSubscriptionStateResponse.ProtoReflect.Descriptor instead. +func (*SetSubscriptionStateResponse) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{22} +} + +func (x *SetSubscriptionStateResponse) GetResult() SetSubscriptionStateResponse_Result { + if x != nil { + return x.Result + } + return SetSubscriptionStateResponse_OK +} + +type ChatId struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Sufficient space is left for a consistent hash value, though other types + // of values may be used. + Value []byte `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *ChatId) Reset() { + *x = ChatId{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChatId) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChatId) ProtoMessage() {} + +func (x *ChatId) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[23] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChatId.ProtoReflect.Descriptor instead. +func (*ChatId) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{23} +} + +func (x *ChatId) GetValue() []byte { + if x != nil { + return x.Value + } + return nil +} + +type ChatMessageId struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Guaranteed to be a time-based UUID. This should be used to construct a + // consistently ordered message history based on time using a simple byte + // comparison. + Value []byte `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *ChatMessageId) Reset() { + *x = ChatMessageId{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChatMessageId) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChatMessageId) ProtoMessage() {} + +func (x *ChatMessageId) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[24] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChatMessageId.ProtoReflect.Descriptor instead. +func (*ChatMessageId) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{24} +} + +func (x *ChatMessageId) GetValue() []byte { + if x != nil { + return x.Value + } + return nil +} + +type ChatMemberId struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Globally random UUID + Value []byte `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *ChatMemberId) Reset() { + *x = ChatMemberId{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChatMemberId) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChatMemberId) ProtoMessage() {} + +func (x *ChatMemberId) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[25] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChatMemberId.ProtoReflect.Descriptor instead. +func (*ChatMemberId) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{25} +} + +func (x *ChatMemberId) GetValue() []byte { + if x != nil { + return x.Value + } + return nil +} + +// A chat +// +// todo: Support is_verified in a clean way +type ChatMetadata struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Globally unique ID for this chat + ChatId *ChatId `protobuf:"bytes,1,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"` + // The type of chat + Type ChatType `protobuf:"varint,2,opt,name=type,proto3,enum=code.chat.v2.ChatType" json:"type,omitempty"` + // The chat title, which will be localized by server when applicable + Title string `protobuf:"bytes,3,opt,name=title,proto3" json:"title,omitempty"` + // The members in this chat + // + // For NOTIFICATION chats, this list has exactly 1 item + // For TWO_WAY chats, this list has exactly 2 items + // + // todo: If we support group chats, then we'll likely return the first page + // + // or a prioritized list. The remaining members would be fetched via + // a new RPC. + Members []*ChatMember `protobuf:"bytes,4,rep,name=members,proto3" json:"members,omitempty"` + // Can the user mute this chat? + CanMute bool `protobuf:"varint,5,opt,name=can_mute,json=canMute,proto3" json:"can_mute,omitempty"` + // Can the user unsubscribe from this chat? + CanUnsubscribe bool `protobuf:"varint,6,opt,name=can_unsubscribe,json=canUnsubscribe,proto3" json:"can_unsubscribe,omitempty"` + // Cursor value for this chat for reference in subsequent GetChatsRequest + Cursor *Cursor `protobuf:"bytes,7,opt,name=cursor,proto3" json:"cursor,omitempty"` +} + +func (x *ChatMetadata) Reset() { + *x = ChatMetadata{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChatMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChatMetadata) ProtoMessage() {} + +func (x *ChatMetadata) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[26] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChatMetadata.ProtoReflect.Descriptor instead. +func (*ChatMetadata) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{26} +} + +func (x *ChatMetadata) GetChatId() *ChatId { + if x != nil { + return x.ChatId + } + return nil +} + +func (x *ChatMetadata) GetType() ChatType { + if x != nil { + return x.Type + } + return ChatType_UNKNOWN_CHAT_TYPE +} + +func (x *ChatMetadata) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *ChatMetadata) GetMembers() []*ChatMember { + if x != nil { + return x.Members + } + return nil +} + +func (x *ChatMetadata) GetCanMute() bool { + if x != nil { + return x.CanMute + } + return false +} + +func (x *ChatMetadata) GetCanUnsubscribe() bool { + if x != nil { + return x.CanUnsubscribe + } + return false +} + +func (x *ChatMetadata) GetCursor() *Cursor { + if x != nil { + return x.Cursor + } + return nil +} + +// A message in a chat +type ChatMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Globally unique ID for this message + MessageId *ChatMessageId `protobuf:"bytes,1,opt,name=message_id,json=messageId,proto3" json:"message_id,omitempty"` + // The chat member that sent the message. For NOTIFICATION chats, this field + // is omitted since the chat has exactly 1 member. + SenderId *ChatMemberId `protobuf:"bytes,2,opt,name=sender_id,json=senderId,proto3" json:"sender_id,omitempty"` + // Ordered message content. A message may have more than one piece of content. + Content []*Content `protobuf:"bytes,3,rep,name=content,proto3" json:"content,omitempty"` + // Timestamp this message was generated at. This value is also encoded in + // any time-based UUID message IDs. + Ts *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=ts,proto3" json:"ts,omitempty"` + // Cursor value for this message for reference in a paged GetMessagesRequest + Cursor *Cursor `protobuf:"bytes,5,opt,name=cursor,proto3" json:"cursor,omitempty"` +} + +func (x *ChatMessage) Reset() { + *x = ChatMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChatMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChatMessage) ProtoMessage() {} + +func (x *ChatMessage) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[27] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChatMessage.ProtoReflect.Descriptor instead. +func (*ChatMessage) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{27} +} + +func (x *ChatMessage) GetMessageId() *ChatMessageId { + if x != nil { + return x.MessageId + } + return nil +} + +func (x *ChatMessage) GetSenderId() *ChatMemberId { + if x != nil { + return x.SenderId + } + return nil +} + +func (x *ChatMessage) GetContent() []*Content { + if x != nil { + return x.Content + } + return nil +} + +func (x *ChatMessage) GetTs() *timestamppb.Timestamp { + if x != nil { + return x.Ts + } + return nil +} + +func (x *ChatMessage) GetCursor() *Cursor { + if x != nil { + return x.Cursor + } + return nil +} + +// A user in a chat +type ChatMember struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Globally unique ID for this chat member + MemberId *ChatMemberId `protobuf:"bytes,1,opt,name=member_id,json=memberId,proto3" json:"member_id,omitempty"` + // Is this chat member yourself? This enables client to identify which member_id + // is themselves. + IsSelf bool `protobuf:"varint,2,opt,name=is_self,json=isSelf,proto3" json:"is_self,omitempty"` + // The chat member's identity if it has been revealed. + Identity *ChatMemberIdentity `protobuf:"bytes,3,opt,name=identity,proto3" json:"identity,omitempty"` + // Chat message state for this member. This list will have DELIVERED and READ + // pointers, if they exist. SENT pointers should be inferred by persistence + // on server. + Pointers []*Pointer `protobuf:"bytes,4,rep,name=pointers,proto3" json:"pointers,omitempty"` + // Estimated number of unread messages for the chat member in this chat + // + // Only valid when is_self = true + NumUnread uint32 `protobuf:"varint,5,opt,name=num_unread,json=numUnread,proto3" json:"num_unread,omitempty"` + // Has the chat member muted this chat? + // + // Only valid when is_self = true + IsMuted bool `protobuf:"varint,6,opt,name=is_muted,json=isMuted,proto3" json:"is_muted,omitempty"` + // Is the chat member subscribed to this chat? + // + // Only valid when is_self = true + IsSubscribed bool `protobuf:"varint,7,opt,name=is_subscribed,json=isSubscribed,proto3" json:"is_subscribed,omitempty"` +} + +func (x *ChatMember) Reset() { + *x = ChatMember{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChatMember) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChatMember) ProtoMessage() {} + +func (x *ChatMember) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[28] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChatMember.ProtoReflect.Descriptor instead. +func (*ChatMember) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{28} +} + +func (x *ChatMember) GetMemberId() *ChatMemberId { + if x != nil { + return x.MemberId + } + return nil +} + +func (x *ChatMember) GetIsSelf() bool { + if x != nil { + return x.IsSelf + } + return false +} + +func (x *ChatMember) GetIdentity() *ChatMemberIdentity { + if x != nil { + return x.Identity + } + return nil +} + +func (x *ChatMember) GetPointers() []*Pointer { + if x != nil { + return x.Pointers + } + return nil +} + +func (x *ChatMember) GetNumUnread() uint32 { + if x != nil { + return x.NumUnread + } + return 0 +} + +func (x *ChatMember) GetIsMuted() bool { + if x != nil { + return x.IsMuted + } + return false +} + +func (x *ChatMember) GetIsSubscribed() bool { + if x != nil { + return x.IsSubscribed + } + return false +} + +// Identity to an external social platform that can be linked to a Code account +type ChatMemberIdentity struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The external social platform linked to this chat member + Platform Platform `protobuf:"varint,1,opt,name=platform,proto3,enum=code.chat.v2.Platform" json:"platform,omitempty"` + // The chat member's username on the external social platform + Username string `protobuf:"bytes,2,opt,name=username,proto3" json:"username,omitempty"` +} + +func (x *ChatMemberIdentity) Reset() { + *x = ChatMemberIdentity{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChatMemberIdentity) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChatMemberIdentity) ProtoMessage() {} + +func (x *ChatMemberIdentity) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[29] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChatMemberIdentity.ProtoReflect.Descriptor instead. +func (*ChatMemberIdentity) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{29} +} + +func (x *ChatMemberIdentity) GetPlatform() Platform { + if x != nil { + return x.Platform + } + return Platform_UNKNOWN_PLATFORM +} + +func (x *ChatMemberIdentity) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + +// Pointer in a chat indicating a user's message history state in a chat. +type Pointer struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The type of pointer indicates which user's message history state can be + // inferred from the pointer value. It is also possible to infer cross-pointer + // state. For example, if a chat member has a READ pointer for a message with + // ID N, then the DELIVERED pointer must be at least N. + Type PointerType `protobuf:"varint,1,opt,name=type,proto3,enum=code.chat.v2.PointerType" json:"type,omitempty"` + // Everything at or before this message ID is considered to have the state + // inferred by the type of pointer. + Value *ChatMessageId `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + // The chat member associated with this pointer state + MemberId *ChatMemberId `protobuf:"bytes,3,opt,name=member_id,json=memberId,proto3" json:"member_id,omitempty"` +} + +func (x *Pointer) Reset() { + *x = Pointer{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Pointer) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Pointer) ProtoMessage() {} + +func (x *Pointer) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[30] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Pointer.ProtoReflect.Descriptor instead. +func (*Pointer) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{30} +} + +func (x *Pointer) GetType() PointerType { + if x != nil { + return x.Type + } + return PointerType_UNKNOWN_POINTER_TYPE +} + +func (x *Pointer) GetValue() *ChatMessageId { + if x != nil { + return x.Value + } + return nil +} + +func (x *Pointer) GetMemberId() *ChatMemberId { + if x != nil { + return x.MemberId + } + return nil +} + +// Content for a chat message +type Content struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Type: + // + // *Content_Text + // *Content_Localized + // *Content_ExchangeData + // *Content_NaclBox + // *Content_ThankYou + // *Content_IdentityRevealed + Type isContent_Type `protobuf_oneof:"type"` +} + +func (x *Content) Reset() { + *x = Content{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Content) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Content) ProtoMessage() {} + +func (x *Content) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[31] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Content.ProtoReflect.Descriptor instead. +func (*Content) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{31} +} + +func (m *Content) GetType() isContent_Type { + if m != nil { + return m.Type + } + return nil +} + +func (x *Content) GetText() *TextContent { + if x, ok := x.GetType().(*Content_Text); ok { + return x.Text + } + return nil +} + +func (x *Content) GetLocalized() *LocalizedContent { + if x, ok := x.GetType().(*Content_Localized); ok { + return x.Localized + } + return nil +} + +func (x *Content) GetExchangeData() *ExchangeDataContent { + if x, ok := x.GetType().(*Content_ExchangeData); ok { + return x.ExchangeData + } + return nil +} + +func (x *Content) GetNaclBox() *NaclBoxEncryptedContent { + if x, ok := x.GetType().(*Content_NaclBox); ok { + return x.NaclBox + } + return nil +} + +func (x *Content) GetThankYou() *ThankYouContent { + if x, ok := x.GetType().(*Content_ThankYou); ok { + return x.ThankYou + } + return nil +} + +func (x *Content) GetIdentityRevealed() *IdentityRevealedContent { + if x, ok := x.GetType().(*Content_IdentityRevealed); ok { + return x.IdentityRevealed + } + return nil +} + +type isContent_Type interface { + isContent_Type() +} + +type Content_Text struct { + Text *TextContent `protobuf:"bytes,1,opt,name=text,proto3,oneof"` +} + +type Content_Localized struct { + Localized *LocalizedContent `protobuf:"bytes,2,opt,name=localized,proto3,oneof"` +} + +type Content_ExchangeData struct { + ExchangeData *ExchangeDataContent `protobuf:"bytes,3,opt,name=exchange_data,json=exchangeData,proto3,oneof"` +} + +type Content_NaclBox struct { + NaclBox *NaclBoxEncryptedContent `protobuf:"bytes,4,opt,name=nacl_box,json=naclBox,proto3,oneof"` +} + +type Content_ThankYou struct { + ThankYou *ThankYouContent `protobuf:"bytes,5,opt,name=thank_you,json=thankYou,proto3,oneof"` +} + +type Content_IdentityRevealed struct { + IdentityRevealed *IdentityRevealedContent `protobuf:"bytes,6,opt,name=identity_revealed,json=identityRevealed,proto3,oneof"` +} + +func (*Content_Text) isContent_Type() {} + +func (*Content_Localized) isContent_Type() {} + +func (*Content_ExchangeData) isContent_Type() {} + +func (*Content_NaclBox) isContent_Type() {} + +func (*Content_ThankYou) isContent_Type() {} + +func (*Content_IdentityRevealed) isContent_Type() {} + +// Raw text content +type TextContent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Text string `protobuf:"bytes,1,opt,name=text,proto3" json:"text,omitempty"` +} + +func (x *TextContent) Reset() { + *x = TextContent{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TextContent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TextContent) ProtoMessage() {} + +func (x *TextContent) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[32] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TextContent.ProtoReflect.Descriptor instead. +func (*TextContent) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{32} +} + +func (x *TextContent) GetText() string { + if x != nil { + return x.Text + } + return "" +} + +// Text content that is either a localization key that should be translated on +// client, or a server-side translated piece of text. +type LocalizedContent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + KeyOrText string `protobuf:"bytes,1,opt,name=key_or_text,json=keyOrText,proto3" json:"key_or_text,omitempty"` +} + +func (x *LocalizedContent) Reset() { + *x = LocalizedContent{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LocalizedContent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LocalizedContent) ProtoMessage() {} + +func (x *LocalizedContent) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[33] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LocalizedContent.ProtoReflect.Descriptor instead. +func (*LocalizedContent) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{33} +} + +func (x *LocalizedContent) GetKeyOrText() string { + if x != nil { + return x.KeyOrText + } + return "" +} + +// Exchange data content for movement of a value of Kin +type ExchangeDataContent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Verb describing how the amount of Kin was exchanged + // + // Note: The current definition is not suitable outside a NOTIFICATION chat + // + // as not enough context is provided as to which member this verb is + // associated with. + Verb ExchangeDataContent_Verb `protobuf:"varint,1,opt,name=verb,proto3,enum=code.chat.v2.ExchangeDataContent_Verb" json:"verb,omitempty"` + // An amount of Kin being exchanged + // + // Types that are assignable to ExchangeData: + // + // *ExchangeDataContent_Exact + // *ExchangeDataContent_Partial + ExchangeData isExchangeDataContent_ExchangeData `protobuf_oneof:"exchange_data"` + // An ID that can be referenced to the source of the exchange of Kin + // + // Types that are assignable to Reference: + // + // *ExchangeDataContent_Intent + // *ExchangeDataContent_Signature + Reference isExchangeDataContent_Reference `protobuf_oneof:"reference"` +} + +func (x *ExchangeDataContent) Reset() { + *x = ExchangeDataContent{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[34] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ExchangeDataContent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExchangeDataContent) ProtoMessage() {} + +func (x *ExchangeDataContent) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[34] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExchangeDataContent.ProtoReflect.Descriptor instead. +func (*ExchangeDataContent) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{34} +} + +func (x *ExchangeDataContent) GetVerb() ExchangeDataContent_Verb { + if x != nil { + return x.Verb + } + return ExchangeDataContent_UNKNOWN +} + +func (m *ExchangeDataContent) GetExchangeData() isExchangeDataContent_ExchangeData { + if m != nil { + return m.ExchangeData + } + return nil +} + +func (x *ExchangeDataContent) GetExact() *v2.ExchangeData { + if x, ok := x.GetExchangeData().(*ExchangeDataContent_Exact); ok { + return x.Exact + } + return nil +} + +func (x *ExchangeDataContent) GetPartial() *v2.ExchangeDataWithoutRate { + if x, ok := x.GetExchangeData().(*ExchangeDataContent_Partial); ok { + return x.Partial + } + return nil +} + +func (m *ExchangeDataContent) GetReference() isExchangeDataContent_Reference { + if m != nil { + return m.Reference + } + return nil +} + +func (x *ExchangeDataContent) GetIntent() *v1.IntentId { + if x, ok := x.GetReference().(*ExchangeDataContent_Intent); ok { + return x.Intent + } + return nil +} + +func (x *ExchangeDataContent) GetSignature() *v1.Signature { + if x, ok := x.GetReference().(*ExchangeDataContent_Signature); ok { + return x.Signature + } + return nil +} + +type isExchangeDataContent_ExchangeData interface { + isExchangeDataContent_ExchangeData() +} + +type ExchangeDataContent_Exact struct { + Exact *v2.ExchangeData `protobuf:"bytes,2,opt,name=exact,proto3,oneof"` +} + +type ExchangeDataContent_Partial struct { + Partial *v2.ExchangeDataWithoutRate `protobuf:"bytes,3,opt,name=partial,proto3,oneof"` +} + +func (*ExchangeDataContent_Exact) isExchangeDataContent_ExchangeData() {} + +func (*ExchangeDataContent_Partial) isExchangeDataContent_ExchangeData() {} + +type isExchangeDataContent_Reference interface { + isExchangeDataContent_Reference() +} + +type ExchangeDataContent_Intent struct { + Intent *v1.IntentId `protobuf:"bytes,4,opt,name=intent,proto3,oneof"` +} + +type ExchangeDataContent_Signature struct { + Signature *v1.Signature `protobuf:"bytes,5,opt,name=signature,proto3,oneof"` +} + +func (*ExchangeDataContent_Intent) isExchangeDataContent_Reference() {} + +func (*ExchangeDataContent_Signature) isExchangeDataContent_Reference() {} + +// Encrypted piece of content using NaCl box encryption +type NaclBoxEncryptedContent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The sender's public key that is used to derive the shared private key for + // decryption for message content. + PeerPublicKey *v1.SolanaAccountId `protobuf:"bytes,1,opt,name=peer_public_key,json=peerPublicKey,proto3" json:"peer_public_key,omitempty"` + // Globally random nonce that is unique to this encrypted piece of content + Nonce []byte `protobuf:"bytes,2,opt,name=nonce,proto3" json:"nonce,omitempty"` + // The encrypted piece of message content + EncryptedPayload []byte `protobuf:"bytes,3,opt,name=encrypted_payload,json=encryptedPayload,proto3" json:"encrypted_payload,omitempty"` +} + +func (x *NaclBoxEncryptedContent) Reset() { + *x = NaclBoxEncryptedContent{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NaclBoxEncryptedContent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NaclBoxEncryptedContent) ProtoMessage() {} + +func (x *NaclBoxEncryptedContent) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[35] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NaclBoxEncryptedContent.ProtoReflect.Descriptor instead. +func (*NaclBoxEncryptedContent) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{35} +} + +func (x *NaclBoxEncryptedContent) GetPeerPublicKey() *v1.SolanaAccountId { + if x != nil { + return x.PeerPublicKey + } + return nil +} + +func (x *NaclBoxEncryptedContent) GetNonce() []byte { + if x != nil { + return x.Nonce + } + return nil +} + +func (x *NaclBoxEncryptedContent) GetEncryptedPayload() []byte { + if x != nil { + return x.EncryptedPayload + } + return nil +} + +// Thank you content that is used to thank Code users for tips +type ThankYouContent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The tip intent that is being thanked. + TipIntent *v1.IntentId `protobuf:"bytes,1,opt,name=tip_intent,json=tipIntent,proto3" json:"tip_intent,omitempty"` +} + +func (x *ThankYouContent) Reset() { + *x = ThankYouContent{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[36] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ThankYouContent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ThankYouContent) ProtoMessage() {} + +func (x *ThankYouContent) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[36] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ThankYouContent.ProtoReflect.Descriptor instead. +func (*ThankYouContent) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{36} +} + +func (x *ThankYouContent) GetTipIntent() *v1.IntentId { + if x != nil { + return x.TipIntent + } + return nil +} + +// Identity revealed content that is inserted into chat whenever a chat member +// reveals their identity +type IdentityRevealedContent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The chat member who revealed their identity + MemberId *ChatMemberId `protobuf:"bytes,1,opt,name=member_id,json=memberId,proto3" json:"member_id,omitempty"` + // The identity that was revealed + Identity *ChatMemberIdentity `protobuf:"bytes,2,opt,name=identity,proto3" json:"identity,omitempty"` +} + +func (x *IdentityRevealedContent) Reset() { + *x = IdentityRevealedContent{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[37] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IdentityRevealedContent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IdentityRevealedContent) ProtoMessage() {} + +func (x *IdentityRevealedContent) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[37] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use IdentityRevealedContent.ProtoReflect.Descriptor instead. +func (*IdentityRevealedContent) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{37} +} + +func (x *IdentityRevealedContent) GetMemberId() *ChatMemberId { + if x != nil { + return x.MemberId + } + return nil +} + +func (x *IdentityRevealedContent) GetIdentity() *ChatMemberIdentity { + if x != nil { + return x.Identity + } + return nil +} + +// Opaque cursor used across paged APIs. Underlying bytes may change as paging +// strategies evolve. Expected length value will vary based on the RPC being +// executed. +type Cursor struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Value []byte `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *Cursor) Reset() { + *x = Cursor{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[38] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Cursor) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Cursor) ProtoMessage() {} + +func (x *Cursor) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[38] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Cursor.ProtoReflect.Descriptor instead. +func (*Cursor) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{38} +} + +func (x *Cursor) GetValue() []byte { + if x != nil { + return x.Value + } + return nil +} + +var File_chat_v2_chat_service_proto protoreflect.FileDescriptor + +var file_chat_v2_chat_service_proto_rawDesc = []byte{ + 0x0a, 0x1a, 0x63, 0x68, 0x61, 0x74, 0x2f, 0x76, 0x32, 0x2f, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0c, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x1a, 0x15, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x28, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, + 0x32, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x76, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xd6, 0x02, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, + 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, + 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, + 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, + 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, + 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, + 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x12, 0x26, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0d, 0x42, 0x09, 0xba, 0xe9, 0xc0, 0x03, 0x04, 0x2a, 0x02, 0x18, 0x64, 0x52, + 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, + 0x73, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, + 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x45, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, + 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x1e, + 0x0a, 0x09, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x07, 0x0a, 0x03, 0x41, + 0x53, 0x43, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x45, 0x53, 0x43, 0x10, 0x01, 0x22, 0xb2, + 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x12, 0x3e, 0x0a, 0x05, 0x63, 0x68, 0x61, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x0c, 0xba, + 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x00, 0x10, 0x64, 0x52, 0x05, 0x63, 0x68, 0x61, + 0x74, 0x73, 0x22, 0x1f, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, + 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, + 0x44, 0x10, 0x01, 0x22, 0xdc, 0x03, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, + 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, + 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, + 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, + 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, + 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, + 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, + 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, + 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, + 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x12, 0x26, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x09, 0xba, 0xe9, 0xc0, 0x03, 0x04, 0x2a, 0x02, 0x18, 0x64, + 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, + 0x72, 0x73, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, + 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x48, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, 0x69, + 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x22, 0x1e, 0x0a, 0x09, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x07, 0x0a, 0x03, 0x41, 0x53, 0x43, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x45, 0x53, 0x43, + 0x10, 0x01, 0x22, 0xe5, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x06, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x43, 0x0a, 0x08, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, + 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, + 0x92, 0x01, 0x04, 0x08, 0x00, 0x10, 0x64, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x73, 0x22, 0x47, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, + 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, + 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, + 0x44, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x4e, + 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x03, 0x22, 0x9d, 0x02, 0x0a, 0x13, 0x4f, + 0x70, 0x65, 0x6e, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, + 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, + 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, + 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, + 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x49, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, + 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, + 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x8a, 0x01, 0x0a, 0x0f, 0x43, + 0x68, 0x61, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x35, + 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, + 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x07, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x31, 0x0a, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, + 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x5c, 0x0a, 0x14, 0x43, 0x68, 0x61, 0x74, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, + 0x44, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, + 0x68, 0x61, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x0d, + 0xba, 0xe9, 0xc0, 0x03, 0x08, 0x92, 0x01, 0x05, 0x08, 0x01, 0x10, 0x80, 0x08, 0x52, 0x06, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x7b, 0x0a, 0x14, 0x43, 0x68, 0x61, 0x74, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x3b, 0x0a, + 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x2e, + 0x43, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x26, 0x0a, 0x04, 0x43, 0x6f, + 0x64, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x12, + 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, + 0x10, 0x01, 0x22, 0xa0, 0x01, 0x0a, 0x17, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, + 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x44, + 0x0a, 0x0b, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x48, 0x00, 0x52, 0x0a, 0x6f, 0x70, 0x65, 0x6e, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x12, 0x30, 0x0a, 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x6e, 0x67, 0x48, 0x00, + 0x52, 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, + 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xd5, 0x01, 0x0a, 0x18, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x48, 0x00, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, + 0x12, 0x30, 0x0a, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x50, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x04, 0x70, 0x69, + 0x6e, 0x67, 0x12, 0x3a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x43, 0x68, 0x61, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x42, 0x0d, + 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xf2, 0x01, + 0x0a, 0x10, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, + 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, + 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x41, 0x0a, 0x08, 0x74, 0x69, + 0x70, 0x5f, 0x63, 0x68, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x54, 0x69, 0x70, 0x43, 0x68, 0x61, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x73, 0x48, 0x00, 0x52, 0x07, 0x74, 0x69, 0x70, 0x43, 0x68, 0x61, 0x74, 0x42, 0x13, 0x0a, + 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x05, 0xb8, 0xe9, 0xc0, + 0x03, 0x01, 0x22, 0x5b, 0x0a, 0x16, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x70, 0x43, 0x68, + 0x61, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x41, 0x0a, 0x09, + 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, + 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, + 0xb8, 0x01, 0x0a, 0x11, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x63, 0x68, 0x61, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, + 0x04, 0x63, 0x68, 0x61, 0x74, 0x22, 0x33, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, + 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, + 0x44, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x50, + 0x41, 0x52, 0x41, 0x4d, 0x45, 0x54, 0x45, 0x52, 0x10, 0x02, 0x22, 0xdb, 0x02, 0x0a, 0x12, 0x53, + 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, + 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, + 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, + 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, + 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, + 0x64, 0x12, 0x3d, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, + 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x01, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, + 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, + 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xef, 0x01, 0x0a, 0x13, 0x53, 0x65, 0x6e, + 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x40, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x28, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, + 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x12, 0x33, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x07, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x61, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, + 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, + 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x49, 0x4e, 0x56, + 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x03, + 0x12, 0x18, 0x0a, 0x14, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x43, 0x4f, 0x4e, 0x54, + 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x04, 0x22, 0x97, 0x02, 0x0a, 0x15, 0x41, + 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, + 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, + 0x3b, 0x0a, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, + 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, + 0x02, 0x10, 0x01, 0x52, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x41, 0x0a, 0x05, + 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, + 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, + 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, + 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, + 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x22, 0xc0, 0x01, 0x0a, 0x16, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, + 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x43, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x2b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, + 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x22, 0x61, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, + 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, + 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, + 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, + 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x03, 0x12, 0x18, 0x0a, + 0x14, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x45, 0x52, + 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x04, 0x22, 0xe9, 0x02, 0x0a, 0x15, 0x52, 0x65, 0x76, 0x65, + 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, + 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, + 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, + 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, + 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, + 0x64, 0x12, 0x48, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, + 0x01, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x41, 0x0a, 0x05, 0x6f, + 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, + 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, + 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, + 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, + 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x22, 0xe5, 0x01, 0x0a, 0x16, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, + 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, + 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x12, 0x33, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, + 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x51, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, + 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, + 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x1f, 0x0a, 0x1b, 0x44, 0x49, + 0x46, 0x46, 0x45, 0x52, 0x45, 0x4e, 0x54, 0x5f, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, + 0x5f, 0x52, 0x45, 0x56, 0x45, 0x41, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x22, 0xb8, 0x02, 0x0a, 0x13, + 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, + 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, + 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, + 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x41, + 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, + 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, + 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, + 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x9a, 0x01, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x4d, 0x75, + 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x41, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, + 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x22, 0x3f, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, + 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, + 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, + 0x4e, 0x44, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x41, 0x4e, 0x54, 0x5f, 0x4d, 0x55, 0x54, + 0x45, 0x10, 0x03, 0x22, 0xca, 0x02, 0x0a, 0x1b, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, + 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, + 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, + 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, + 0x69, 0x62, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x53, 0x75, + 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, + 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, + 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, + 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x22, 0xb1, 0x01, 0x0a, 0x1c, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x49, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x31, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x46, 0x0a, 0x06, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, + 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, + 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x14, + 0x0a, 0x10, 0x43, 0x41, 0x4e, 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, + 0x42, 0x45, 0x10, 0x03, 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x21, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, + 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x20, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x22, 0x32, 0x0a, 0x0d, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x31, 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, + 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xd9, 0x02, 0x0a, 0x0c, 0x43, 0x68, 0x61, + 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, + 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, + 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, + 0x61, 0x74, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, + 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x05, + 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, + 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, + 0x12, 0x40, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, + 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x61, 0x6e, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, 0x61, 0x6e, 0x4d, 0x75, 0x74, 0x65, 0x12, 0x27, 0x0a, + 0x0f, 0x63, 0x61, 0x6e, 0x5f, 0x75, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x63, 0x61, 0x6e, 0x55, 0x6e, 0x73, 0x75, 0x62, + 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, + 0x72, 0x73, 0x6f, 0x72, 0x22, 0xb3, 0x02, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x46, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, + 0x01, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x09, + 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, + 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x52, 0x08, 0x73, 0x65, 0x6e, + 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x0c, 0xba, + 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x07, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x12, 0x36, 0x0a, 0x02, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0a, 0xba, 0xe9, + 0xc0, 0x03, 0x05, 0xb2, 0x01, 0x02, 0x08, 0x01, 0x52, 0x02, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x06, + 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, 0x72, 0x73, + 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xc8, 0x02, 0x0a, 0x0a, 0x43, + 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, + 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, + 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, + 0x0a, 0x07, 0x69, 0x73, 0x5f, 0x73, 0x65, 0x6c, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x06, 0x69, 0x73, 0x53, 0x65, 0x6c, 0x66, 0x12, 0x3c, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x69, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x3f, 0x0a, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x42, 0x0c, + 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x00, 0x10, 0x02, 0x52, 0x08, 0x70, 0x6f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, 0x75, 0x6e, + 0x72, 0x65, 0x61, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x55, + 0x6e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, + 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, + 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, + 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, + 0x72, 0x69, 0x62, 0x65, 0x64, 0x22, 0x7d, 0x0a, 0x12, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x3e, 0x0a, 0x08, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x18, + 0x01, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x27, 0x0a, 0x08, 0x75, + 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xba, + 0xe9, 0xc0, 0x03, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x0f, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, + 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xc8, 0x01, 0x0a, 0x07, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x12, 0x39, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, + 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3d, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, + 0x02, 0x10, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, + 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, + 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x22, + 0xab, 0x03, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x74, + 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x3e, 0x0a, 0x09, + 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4c, + 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, + 0x00, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x12, 0x48, 0x0a, 0x0d, + 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x42, 0x0a, 0x08, 0x6e, 0x61, 0x63, 0x6c, 0x5f, 0x62, + 0x6f, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, + 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, + 0x00, 0x52, 0x07, 0x6e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x12, 0x3c, 0x0a, 0x09, 0x74, 0x68, + 0x61, 0x6e, 0x6b, 0x5f, 0x79, 0x6f, 0x75, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x68, 0x61, + 0x6e, 0x6b, 0x59, 0x6f, 0x75, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x08, + 0x74, 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x75, 0x12, 0x54, 0x0a, 0x11, 0x69, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x76, 0x65, 0x61, + 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x69, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x42, 0x0d, + 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x2f, 0x0a, + 0x0b, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x04, + 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, + 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x40, + 0x0a, 0x10, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x0b, 0x6b, 0x65, 0x79, 0x5f, 0x6f, 0x72, 0x5f, 0x74, 0x65, 0x78, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, + 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x4f, 0x72, 0x54, 0x65, 0x78, 0x74, + 0x22, 0xa4, 0x04, 0x0a, 0x13, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, + 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x46, 0x0a, 0x04, 0x76, 0x65, 0x72, 0x62, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x42, 0x0a, + 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x76, 0x65, 0x72, 0x62, + 0x12, 0x39, 0x0a, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x48, 0x00, 0x52, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x12, 0x48, 0x0a, 0x07, 0x70, + 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x57, + 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x52, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x07, 0x70, 0x61, + 0x72, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x32, 0x0a, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x48, + 0x01, 0x52, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x09, 0x73, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, + 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x48, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x22, 0xa4, 0x01, 0x0a, 0x04, 0x56, 0x65, 0x72, 0x62, 0x12, 0x0b, 0x0a, + 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x47, 0x41, + 0x56, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, + 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, 0x45, 0x57, 0x10, 0x03, + 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, + 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x54, + 0x55, 0x52, 0x4e, 0x45, 0x44, 0x10, 0x06, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x50, 0x45, 0x4e, 0x54, + 0x10, 0x07, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x41, 0x49, 0x44, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, + 0x50, 0x55, 0x52, 0x43, 0x48, 0x41, 0x53, 0x45, 0x44, 0x10, 0x09, 0x12, 0x10, 0x0a, 0x0c, 0x52, + 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0a, 0x12, 0x0c, 0x0a, + 0x08, 0x53, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0b, 0x42, 0x16, 0x0a, 0x0d, 0x65, + 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x12, 0x05, 0xb8, 0xe9, + 0xc0, 0x03, 0x01, 0x42, 0x12, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xcc, 0x01, 0x0a, 0x17, 0x4e, 0x61, 0x63, 0x6c, + 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x0f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x70, 0x75, 0x62, 0x6c, + 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, + 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, + 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x70, 0x65, 0x65, 0x72, 0x50, + 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, + 0x10, 0x18, 0x18, 0x18, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x39, 0x0a, 0x11, 0x65, + 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x7a, 0x05, 0x10, + 0x01, 0x18, 0x80, 0x08, 0x52, 0x10, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, + 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x62, 0x0a, 0x0f, 0x54, 0x68, 0x61, 0x6e, 0x6b, 0x59, + 0x6f, 0x75, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x43, 0x0a, 0x0a, 0x74, 0x69, 0x70, + 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, + 0x02, 0x10, 0x01, 0x52, 0x09, 0x74, 0x69, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4a, 0x04, + 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0xa8, 0x01, 0x0a, 0x17, 0x49, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x43, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, + 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x48, 0x0a, 0x08, 0x69, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, + 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x42, + 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x69, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, + 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, + 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x08, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x2a, 0x40, 0x0a, 0x08, 0x43, 0x68, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x15, + 0x0a, 0x11, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x54, + 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x43, + 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x4f, 0x5f, 0x57, + 0x41, 0x59, 0x10, 0x02, 0x2a, 0x2d, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x12, 0x14, 0x0a, 0x10, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x50, 0x4c, 0x41, 0x54, + 0x46, 0x4f, 0x52, 0x4d, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x49, 0x54, 0x54, 0x45, + 0x52, 0x10, 0x01, 0x2a, 0x4a, 0x0a, 0x0b, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x18, 0x0a, 0x14, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x50, 0x4f, + 0x49, 0x4e, 0x54, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, + 0x53, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, + 0x52, 0x45, 0x44, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x52, 0x45, 0x41, 0x44, 0x10, 0x03, 0x32, + 0xae, 0x06, 0x0a, 0x04, 0x43, 0x68, 0x61, 0x74, 0x12, 0x49, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x43, + 0x68, 0x61, 0x74, 0x73, 0x12, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x73, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x10, 0x53, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x4c, + 0x0a, 0x09, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x12, 0x1e, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, + 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, + 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x5b, 0x0a, 0x0e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, + 0x0e, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, + 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x52, + 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x0c, 0x53, 0x65, + 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x21, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, + 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, + 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x6d, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x42, 0x6b, 0x0a, 0x17, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x63, 0x2e, + 0x67, 0x65, 0x6e, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x5a, 0x44, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x61, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x64, 0x2f, 0x67, 0x6f, 0x2f, 0x63, 0x68, 0x61, 0x74, 0x2f, 0x76, 0x32, 0x3b, 0x63, 0x68, 0x61, + 0x74, 0xa2, 0x02, 0x09, 0x43, 0x50, 0x42, 0x43, 0x68, 0x61, 0x74, 0x56, 0x32, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_chat_v2_chat_service_proto_rawDescOnce sync.Once + file_chat_v2_chat_service_proto_rawDescData = file_chat_v2_chat_service_proto_rawDesc +) + +func file_chat_v2_chat_service_proto_rawDescGZIP() []byte { + file_chat_v2_chat_service_proto_rawDescOnce.Do(func() { + file_chat_v2_chat_service_proto_rawDescData = protoimpl.X.CompressGZIP(file_chat_v2_chat_service_proto_rawDescData) + }) + return file_chat_v2_chat_service_proto_rawDescData +} + +var file_chat_v2_chat_service_proto_enumTypes = make([]protoimpl.EnumInfo, 15) +var file_chat_v2_chat_service_proto_msgTypes = make([]protoimpl.MessageInfo, 39) +var file_chat_v2_chat_service_proto_goTypes = []interface{}{ + (ChatType)(0), // 0: code.chat.v2.ChatType + (Platform)(0), // 1: code.chat.v2.Platform + (PointerType)(0), // 2: code.chat.v2.PointerType + (GetChatsRequest_Direction)(0), // 3: code.chat.v2.GetChatsRequest.Direction + (GetChatsResponse_Result)(0), // 4: code.chat.v2.GetChatsResponse.Result + (GetMessagesRequest_Direction)(0), // 5: code.chat.v2.GetMessagesRequest.Direction + (GetMessagesResponse_Result)(0), // 6: code.chat.v2.GetMessagesResponse.Result + (ChatStreamEventError_Code)(0), // 7: code.chat.v2.ChatStreamEventError.Code + (StartChatResponse_Result)(0), // 8: code.chat.v2.StartChatResponse.Result + (SendMessageResponse_Result)(0), // 9: code.chat.v2.SendMessageResponse.Result + (AdvancePointerResponse_Result)(0), // 10: code.chat.v2.AdvancePointerResponse.Result + (RevealIdentityResponse_Result)(0), // 11: code.chat.v2.RevealIdentityResponse.Result + (SetMuteStateResponse_Result)(0), // 12: code.chat.v2.SetMuteStateResponse.Result + (SetSubscriptionStateResponse_Result)(0), // 13: code.chat.v2.SetSubscriptionStateResponse.Result + (ExchangeDataContent_Verb)(0), // 14: code.chat.v2.ExchangeDataContent.Verb + (*GetChatsRequest)(nil), // 15: code.chat.v2.GetChatsRequest + (*GetChatsResponse)(nil), // 16: code.chat.v2.GetChatsResponse + (*GetMessagesRequest)(nil), // 17: code.chat.v2.GetMessagesRequest + (*GetMessagesResponse)(nil), // 18: code.chat.v2.GetMessagesResponse + (*OpenChatEventStream)(nil), // 19: code.chat.v2.OpenChatEventStream + (*ChatStreamEvent)(nil), // 20: code.chat.v2.ChatStreamEvent + (*ChatStreamEventBatch)(nil), // 21: code.chat.v2.ChatStreamEventBatch + (*ChatStreamEventError)(nil), // 22: code.chat.v2.ChatStreamEventError + (*StreamChatEventsRequest)(nil), // 23: code.chat.v2.StreamChatEventsRequest + (*StreamChatEventsResponse)(nil), // 24: code.chat.v2.StreamChatEventsResponse + (*StartChatRequest)(nil), // 25: code.chat.v2.StartChatRequest + (*StartTipChatParameters)(nil), // 26: code.chat.v2.StartTipChatParameters + (*StartChatResponse)(nil), // 27: code.chat.v2.StartChatResponse + (*SendMessageRequest)(nil), // 28: code.chat.v2.SendMessageRequest + (*SendMessageResponse)(nil), // 29: code.chat.v2.SendMessageResponse + (*AdvancePointerRequest)(nil), // 30: code.chat.v2.AdvancePointerRequest + (*AdvancePointerResponse)(nil), // 31: code.chat.v2.AdvancePointerResponse + (*RevealIdentityRequest)(nil), // 32: code.chat.v2.RevealIdentityRequest + (*RevealIdentityResponse)(nil), // 33: code.chat.v2.RevealIdentityResponse + (*SetMuteStateRequest)(nil), // 34: code.chat.v2.SetMuteStateRequest + (*SetMuteStateResponse)(nil), // 35: code.chat.v2.SetMuteStateResponse + (*SetSubscriptionStateRequest)(nil), // 36: code.chat.v2.SetSubscriptionStateRequest + (*SetSubscriptionStateResponse)(nil), // 37: code.chat.v2.SetSubscriptionStateResponse + (*ChatId)(nil), // 38: code.chat.v2.ChatId + (*ChatMessageId)(nil), // 39: code.chat.v2.ChatMessageId + (*ChatMemberId)(nil), // 40: code.chat.v2.ChatMemberId + (*ChatMetadata)(nil), // 41: code.chat.v2.ChatMetadata + (*ChatMessage)(nil), // 42: code.chat.v2.ChatMessage + (*ChatMember)(nil), // 43: code.chat.v2.ChatMember + (*ChatMemberIdentity)(nil), // 44: code.chat.v2.ChatMemberIdentity + (*Pointer)(nil), // 45: code.chat.v2.Pointer + (*Content)(nil), // 46: code.chat.v2.Content + (*TextContent)(nil), // 47: code.chat.v2.TextContent + (*LocalizedContent)(nil), // 48: code.chat.v2.LocalizedContent + (*ExchangeDataContent)(nil), // 49: code.chat.v2.ExchangeDataContent + (*NaclBoxEncryptedContent)(nil), // 50: code.chat.v2.NaclBoxEncryptedContent + (*ThankYouContent)(nil), // 51: code.chat.v2.ThankYouContent + (*IdentityRevealedContent)(nil), // 52: code.chat.v2.IdentityRevealedContent + (*Cursor)(nil), // 53: code.chat.v2.Cursor + (*v1.SolanaAccountId)(nil), // 54: code.common.v1.SolanaAccountId + (*v1.Signature)(nil), // 55: code.common.v1.Signature + (*v1.ClientPong)(nil), // 56: code.common.v1.ClientPong + (*v1.ServerPing)(nil), // 57: code.common.v1.ServerPing + (*v1.IntentId)(nil), // 58: code.common.v1.IntentId + (*timestamppb.Timestamp)(nil), // 59: google.protobuf.Timestamp + (*v2.ExchangeData)(nil), // 60: code.transaction.v2.ExchangeData + (*v2.ExchangeDataWithoutRate)(nil), // 61: code.transaction.v2.ExchangeDataWithoutRate +} +var file_chat_v2_chat_service_proto_depIdxs = []int32{ + 54, // 0: code.chat.v2.GetChatsRequest.owner:type_name -> code.common.v1.SolanaAccountId + 55, // 1: code.chat.v2.GetChatsRequest.signature:type_name -> code.common.v1.Signature + 53, // 2: code.chat.v2.GetChatsRequest.cursor:type_name -> code.chat.v2.Cursor + 3, // 3: code.chat.v2.GetChatsRequest.direction:type_name -> code.chat.v2.GetChatsRequest.Direction + 4, // 4: code.chat.v2.GetChatsResponse.result:type_name -> code.chat.v2.GetChatsResponse.Result + 41, // 5: code.chat.v2.GetChatsResponse.chats:type_name -> code.chat.v2.ChatMetadata + 38, // 6: code.chat.v2.GetMessagesRequest.chat_id:type_name -> code.chat.v2.ChatId + 40, // 7: code.chat.v2.GetMessagesRequest.member_id:type_name -> code.chat.v2.ChatMemberId + 54, // 8: code.chat.v2.GetMessagesRequest.owner:type_name -> code.common.v1.SolanaAccountId + 55, // 9: code.chat.v2.GetMessagesRequest.signature:type_name -> code.common.v1.Signature + 53, // 10: code.chat.v2.GetMessagesRequest.cursor:type_name -> code.chat.v2.Cursor + 5, // 11: code.chat.v2.GetMessagesRequest.direction:type_name -> code.chat.v2.GetMessagesRequest.Direction + 6, // 12: code.chat.v2.GetMessagesResponse.result:type_name -> code.chat.v2.GetMessagesResponse.Result + 42, // 13: code.chat.v2.GetMessagesResponse.messages:type_name -> code.chat.v2.ChatMessage + 38, // 14: code.chat.v2.OpenChatEventStream.chat_id:type_name -> code.chat.v2.ChatId + 40, // 15: code.chat.v2.OpenChatEventStream.member_id:type_name -> code.chat.v2.ChatMemberId + 54, // 16: code.chat.v2.OpenChatEventStream.owner:type_name -> code.common.v1.SolanaAccountId + 55, // 17: code.chat.v2.OpenChatEventStream.signature:type_name -> code.common.v1.Signature + 42, // 18: code.chat.v2.ChatStreamEvent.message:type_name -> code.chat.v2.ChatMessage + 45, // 19: code.chat.v2.ChatStreamEvent.pointer:type_name -> code.chat.v2.Pointer + 20, // 20: code.chat.v2.ChatStreamEventBatch.events:type_name -> code.chat.v2.ChatStreamEvent + 7, // 21: code.chat.v2.ChatStreamEventError.code:type_name -> code.chat.v2.ChatStreamEventError.Code + 19, // 22: code.chat.v2.StreamChatEventsRequest.open_stream:type_name -> code.chat.v2.OpenChatEventStream + 56, // 23: code.chat.v2.StreamChatEventsRequest.pong:type_name -> code.common.v1.ClientPong + 21, // 24: code.chat.v2.StreamChatEventsResponse.events:type_name -> code.chat.v2.ChatStreamEventBatch + 57, // 25: code.chat.v2.StreamChatEventsResponse.ping:type_name -> code.common.v1.ServerPing + 22, // 26: code.chat.v2.StreamChatEventsResponse.error:type_name -> code.chat.v2.ChatStreamEventError + 54, // 27: code.chat.v2.StartChatRequest.owner:type_name -> code.common.v1.SolanaAccountId + 55, // 28: code.chat.v2.StartChatRequest.signature:type_name -> code.common.v1.Signature + 26, // 29: code.chat.v2.StartChatRequest.tip_chat:type_name -> code.chat.v2.StartTipChatParameters + 58, // 30: code.chat.v2.StartTipChatParameters.intent_id:type_name -> code.common.v1.IntentId + 8, // 31: code.chat.v2.StartChatResponse.result:type_name -> code.chat.v2.StartChatResponse.Result + 41, // 32: code.chat.v2.StartChatResponse.chat:type_name -> code.chat.v2.ChatMetadata + 38, // 33: code.chat.v2.SendMessageRequest.chat_id:type_name -> code.chat.v2.ChatId + 40, // 34: code.chat.v2.SendMessageRequest.member_id:type_name -> code.chat.v2.ChatMemberId + 46, // 35: code.chat.v2.SendMessageRequest.content:type_name -> code.chat.v2.Content + 54, // 36: code.chat.v2.SendMessageRequest.owner:type_name -> code.common.v1.SolanaAccountId + 55, // 37: code.chat.v2.SendMessageRequest.signature:type_name -> code.common.v1.Signature + 9, // 38: code.chat.v2.SendMessageResponse.result:type_name -> code.chat.v2.SendMessageResponse.Result + 42, // 39: code.chat.v2.SendMessageResponse.message:type_name -> code.chat.v2.ChatMessage + 38, // 40: code.chat.v2.AdvancePointerRequest.chat_id:type_name -> code.chat.v2.ChatId + 45, // 41: code.chat.v2.AdvancePointerRequest.pointer:type_name -> code.chat.v2.Pointer + 54, // 42: code.chat.v2.AdvancePointerRequest.owner:type_name -> code.common.v1.SolanaAccountId + 55, // 43: code.chat.v2.AdvancePointerRequest.signature:type_name -> code.common.v1.Signature + 10, // 44: code.chat.v2.AdvancePointerResponse.result:type_name -> code.chat.v2.AdvancePointerResponse.Result + 38, // 45: code.chat.v2.RevealIdentityRequest.chat_id:type_name -> code.chat.v2.ChatId + 40, // 46: code.chat.v2.RevealIdentityRequest.member_id:type_name -> code.chat.v2.ChatMemberId + 44, // 47: code.chat.v2.RevealIdentityRequest.identity:type_name -> code.chat.v2.ChatMemberIdentity + 54, // 48: code.chat.v2.RevealIdentityRequest.owner:type_name -> code.common.v1.SolanaAccountId + 55, // 49: code.chat.v2.RevealIdentityRequest.signature:type_name -> code.common.v1.Signature + 11, // 50: code.chat.v2.RevealIdentityResponse.result:type_name -> code.chat.v2.RevealIdentityResponse.Result + 42, // 51: code.chat.v2.RevealIdentityResponse.message:type_name -> code.chat.v2.ChatMessage + 38, // 52: code.chat.v2.SetMuteStateRequest.chat_id:type_name -> code.chat.v2.ChatId + 40, // 53: code.chat.v2.SetMuteStateRequest.member_id:type_name -> code.chat.v2.ChatMemberId + 54, // 54: code.chat.v2.SetMuteStateRequest.owner:type_name -> code.common.v1.SolanaAccountId + 55, // 55: code.chat.v2.SetMuteStateRequest.signature:type_name -> code.common.v1.Signature + 12, // 56: code.chat.v2.SetMuteStateResponse.result:type_name -> code.chat.v2.SetMuteStateResponse.Result + 38, // 57: code.chat.v2.SetSubscriptionStateRequest.chat_id:type_name -> code.chat.v2.ChatId + 40, // 58: code.chat.v2.SetSubscriptionStateRequest.member_id:type_name -> code.chat.v2.ChatMemberId + 54, // 59: code.chat.v2.SetSubscriptionStateRequest.owner:type_name -> code.common.v1.SolanaAccountId + 55, // 60: code.chat.v2.SetSubscriptionStateRequest.signature:type_name -> code.common.v1.Signature + 13, // 61: code.chat.v2.SetSubscriptionStateResponse.result:type_name -> code.chat.v2.SetSubscriptionStateResponse.Result + 38, // 62: code.chat.v2.ChatMetadata.chat_id:type_name -> code.chat.v2.ChatId + 0, // 63: code.chat.v2.ChatMetadata.type:type_name -> code.chat.v2.ChatType + 43, // 64: code.chat.v2.ChatMetadata.members:type_name -> code.chat.v2.ChatMember + 53, // 65: code.chat.v2.ChatMetadata.cursor:type_name -> code.chat.v2.Cursor + 39, // 66: code.chat.v2.ChatMessage.message_id:type_name -> code.chat.v2.ChatMessageId + 40, // 67: code.chat.v2.ChatMessage.sender_id:type_name -> code.chat.v2.ChatMemberId + 46, // 68: code.chat.v2.ChatMessage.content:type_name -> code.chat.v2.Content + 59, // 69: code.chat.v2.ChatMessage.ts:type_name -> google.protobuf.Timestamp + 53, // 70: code.chat.v2.ChatMessage.cursor:type_name -> code.chat.v2.Cursor + 40, // 71: code.chat.v2.ChatMember.member_id:type_name -> code.chat.v2.ChatMemberId + 44, // 72: code.chat.v2.ChatMember.identity:type_name -> code.chat.v2.ChatMemberIdentity + 45, // 73: code.chat.v2.ChatMember.pointers:type_name -> code.chat.v2.Pointer + 1, // 74: code.chat.v2.ChatMemberIdentity.platform:type_name -> code.chat.v2.Platform + 2, // 75: code.chat.v2.Pointer.type:type_name -> code.chat.v2.PointerType + 39, // 76: code.chat.v2.Pointer.value:type_name -> code.chat.v2.ChatMessageId + 40, // 77: code.chat.v2.Pointer.member_id:type_name -> code.chat.v2.ChatMemberId + 47, // 78: code.chat.v2.Content.text:type_name -> code.chat.v2.TextContent + 48, // 79: code.chat.v2.Content.localized:type_name -> code.chat.v2.LocalizedContent + 49, // 80: code.chat.v2.Content.exchange_data:type_name -> code.chat.v2.ExchangeDataContent + 50, // 81: code.chat.v2.Content.nacl_box:type_name -> code.chat.v2.NaclBoxEncryptedContent + 51, // 82: code.chat.v2.Content.thank_you:type_name -> code.chat.v2.ThankYouContent + 52, // 83: code.chat.v2.Content.identity_revealed:type_name -> code.chat.v2.IdentityRevealedContent + 14, // 84: code.chat.v2.ExchangeDataContent.verb:type_name -> code.chat.v2.ExchangeDataContent.Verb + 60, // 85: code.chat.v2.ExchangeDataContent.exact:type_name -> code.transaction.v2.ExchangeData + 61, // 86: code.chat.v2.ExchangeDataContent.partial:type_name -> code.transaction.v2.ExchangeDataWithoutRate + 58, // 87: code.chat.v2.ExchangeDataContent.intent:type_name -> code.common.v1.IntentId + 55, // 88: code.chat.v2.ExchangeDataContent.signature:type_name -> code.common.v1.Signature + 54, // 89: code.chat.v2.NaclBoxEncryptedContent.peer_public_key:type_name -> code.common.v1.SolanaAccountId + 58, // 90: code.chat.v2.ThankYouContent.tip_intent:type_name -> code.common.v1.IntentId + 40, // 91: code.chat.v2.IdentityRevealedContent.member_id:type_name -> code.chat.v2.ChatMemberId + 44, // 92: code.chat.v2.IdentityRevealedContent.identity:type_name -> code.chat.v2.ChatMemberIdentity + 15, // 93: code.chat.v2.Chat.GetChats:input_type -> code.chat.v2.GetChatsRequest + 17, // 94: code.chat.v2.Chat.GetMessages:input_type -> code.chat.v2.GetMessagesRequest + 23, // 95: code.chat.v2.Chat.StreamChatEvents:input_type -> code.chat.v2.StreamChatEventsRequest + 25, // 96: code.chat.v2.Chat.StartChat:input_type -> code.chat.v2.StartChatRequest + 28, // 97: code.chat.v2.Chat.SendMessage:input_type -> code.chat.v2.SendMessageRequest + 30, // 98: code.chat.v2.Chat.AdvancePointer:input_type -> code.chat.v2.AdvancePointerRequest + 32, // 99: code.chat.v2.Chat.RevealIdentity:input_type -> code.chat.v2.RevealIdentityRequest + 34, // 100: code.chat.v2.Chat.SetMuteState:input_type -> code.chat.v2.SetMuteStateRequest + 36, // 101: code.chat.v2.Chat.SetSubscriptionState:input_type -> code.chat.v2.SetSubscriptionStateRequest + 16, // 102: code.chat.v2.Chat.GetChats:output_type -> code.chat.v2.GetChatsResponse + 18, // 103: code.chat.v2.Chat.GetMessages:output_type -> code.chat.v2.GetMessagesResponse + 24, // 104: code.chat.v2.Chat.StreamChatEvents:output_type -> code.chat.v2.StreamChatEventsResponse + 27, // 105: code.chat.v2.Chat.StartChat:output_type -> code.chat.v2.StartChatResponse + 29, // 106: code.chat.v2.Chat.SendMessage:output_type -> code.chat.v2.SendMessageResponse + 31, // 107: code.chat.v2.Chat.AdvancePointer:output_type -> code.chat.v2.AdvancePointerResponse + 33, // 108: code.chat.v2.Chat.RevealIdentity:output_type -> code.chat.v2.RevealIdentityResponse + 35, // 109: code.chat.v2.Chat.SetMuteState:output_type -> code.chat.v2.SetMuteStateResponse + 37, // 110: code.chat.v2.Chat.SetSubscriptionState:output_type -> code.chat.v2.SetSubscriptionStateResponse + 102, // [102:111] is the sub-list for method output_type + 93, // [93:102] is the sub-list for method input_type + 93, // [93:93] is the sub-list for extension type_name + 93, // [93:93] is the sub-list for extension extendee + 0, // [0:93] is the sub-list for field type_name +} + +func init() { file_chat_v2_chat_service_proto_init() } +func file_chat_v2_chat_service_proto_init() { + if File_chat_v2_chat_service_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_chat_v2_chat_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetChatsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetChatsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetMessagesRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetMessagesResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*OpenChatEventStream); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChatStreamEvent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChatStreamEventBatch); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChatStreamEventError); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StreamChatEventsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StreamChatEventsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StartChatRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StartTipChatParameters); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StartChatResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SendMessageRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SendMessageResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AdvancePointerRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AdvancePointerResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RevealIdentityRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RevealIdentityResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SetMuteStateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SetMuteStateResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SetSubscriptionStateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SetSubscriptionStateResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChatId); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChatMessageId); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChatMemberId); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChatMetadata); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChatMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChatMember); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChatMemberIdentity); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Pointer); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Content); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TextContent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LocalizedContent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ExchangeDataContent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NaclBoxEncryptedContent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ThankYouContent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*IdentityRevealedContent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Cursor); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_chat_v2_chat_service_proto_msgTypes[5].OneofWrappers = []interface{}{ + (*ChatStreamEvent_Message)(nil), + (*ChatStreamEvent_Pointer)(nil), + } + file_chat_v2_chat_service_proto_msgTypes[8].OneofWrappers = []interface{}{ + (*StreamChatEventsRequest_OpenStream)(nil), + (*StreamChatEventsRequest_Pong)(nil), + } + file_chat_v2_chat_service_proto_msgTypes[9].OneofWrappers = []interface{}{ + (*StreamChatEventsResponse_Events)(nil), + (*StreamChatEventsResponse_Ping)(nil), + (*StreamChatEventsResponse_Error)(nil), + } + file_chat_v2_chat_service_proto_msgTypes[10].OneofWrappers = []interface{}{ + (*StartChatRequest_TipChat)(nil), + } + file_chat_v2_chat_service_proto_msgTypes[31].OneofWrappers = []interface{}{ + (*Content_Text)(nil), + (*Content_Localized)(nil), + (*Content_ExchangeData)(nil), + (*Content_NaclBox)(nil), + (*Content_ThankYou)(nil), + (*Content_IdentityRevealed)(nil), + } + file_chat_v2_chat_service_proto_msgTypes[34].OneofWrappers = []interface{}{ + (*ExchangeDataContent_Exact)(nil), + (*ExchangeDataContent_Partial)(nil), + (*ExchangeDataContent_Intent)(nil), + (*ExchangeDataContent_Signature)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_chat_v2_chat_service_proto_rawDesc, + NumEnums: 15, + NumMessages: 39, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_chat_v2_chat_service_proto_goTypes, + DependencyIndexes: file_chat_v2_chat_service_proto_depIdxs, + EnumInfos: file_chat_v2_chat_service_proto_enumTypes, + MessageInfos: file_chat_v2_chat_service_proto_msgTypes, + }.Build() + File_chat_v2_chat_service_proto = out.File + file_chat_v2_chat_service_proto_rawDesc = nil + file_chat_v2_chat_service_proto_goTypes = nil + file_chat_v2_chat_service_proto_depIdxs = nil +} diff --git a/generated/go/chat/v2/chat_service.pb.validate.go b/generated/go/chat/v2/chat_service.pb.validate.go new file mode 100644 index 0000000..d8c5b2c --- /dev/null +++ b/generated/go/chat/v2/chat_service.pb.validate.go @@ -0,0 +1,4046 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: chat/v2/chat_service.proto + +package chat + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "strings" + "time" + "unicode/utf8" + + "github.com/golang/protobuf/ptypes" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = ptypes.DynamicAny{} +) + +// Validate checks the field values on GetChatsRequest with the rules defined +// in the proto definition for this message. If any rules are violated, an +// error is returned. +func (m *GetChatsRequest) Validate() error { + if m == nil { + return nil + } + + if m.GetOwner() == nil { + return GetChatsRequestValidationError{ + field: "Owner", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetOwner()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GetChatsRequestValidationError{ + field: "Owner", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetSignature() == nil { + return GetChatsRequestValidationError{ + field: "Signature", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetSignature()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GetChatsRequestValidationError{ + field: "Signature", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetPageSize() > 100 { + return GetChatsRequestValidationError{ + field: "PageSize", + reason: "value must be less than or equal to 100", + } + } + + if v, ok := interface{}(m.GetCursor()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GetChatsRequestValidationError{ + field: "Cursor", + reason: "embedded message failed validation", + cause: err, + } + } + } + + // no validation rules for Direction + + return nil +} + +// GetChatsRequestValidationError is the validation error returned by +// GetChatsRequest.Validate if the designated constraints aren't met. +type GetChatsRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e GetChatsRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e GetChatsRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e GetChatsRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e GetChatsRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e GetChatsRequestValidationError) ErrorName() string { return "GetChatsRequestValidationError" } + +// Error satisfies the builtin error interface +func (e GetChatsRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sGetChatsRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = GetChatsRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = GetChatsRequestValidationError{} + +// Validate checks the field values on GetChatsResponse with the rules defined +// in the proto definition for this message. If any rules are violated, an +// error is returned. +func (m *GetChatsResponse) Validate() error { + if m == nil { + return nil + } + + // no validation rules for Result + + if len(m.GetChats()) > 100 { + return GetChatsResponseValidationError{ + field: "Chats", + reason: "value must contain no more than 100 item(s)", + } + } + + for idx, item := range m.GetChats() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GetChatsResponseValidationError{ + field: fmt.Sprintf("Chats[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + return nil +} + +// GetChatsResponseValidationError is the validation error returned by +// GetChatsResponse.Validate if the designated constraints aren't met. +type GetChatsResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e GetChatsResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e GetChatsResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e GetChatsResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e GetChatsResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e GetChatsResponseValidationError) ErrorName() string { return "GetChatsResponseValidationError" } + +// Error satisfies the builtin error interface +func (e GetChatsResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sGetChatsResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = GetChatsResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = GetChatsResponseValidationError{} + +// Validate checks the field values on GetMessagesRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *GetMessagesRequest) Validate() error { + if m == nil { + return nil + } + + if m.GetChatId() == nil { + return GetMessagesRequestValidationError{ + field: "ChatId", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetChatId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GetMessagesRequestValidationError{ + field: "ChatId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetMemberId() == nil { + return GetMessagesRequestValidationError{ + field: "MemberId", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetMemberId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GetMessagesRequestValidationError{ + field: "MemberId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetOwner() == nil { + return GetMessagesRequestValidationError{ + field: "Owner", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetOwner()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GetMessagesRequestValidationError{ + field: "Owner", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetSignature() == nil { + return GetMessagesRequestValidationError{ + field: "Signature", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetSignature()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GetMessagesRequestValidationError{ + field: "Signature", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetPageSize() > 100 { + return GetMessagesRequestValidationError{ + field: "PageSize", + reason: "value must be less than or equal to 100", + } + } + + if v, ok := interface{}(m.GetCursor()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GetMessagesRequestValidationError{ + field: "Cursor", + reason: "embedded message failed validation", + cause: err, + } + } + } + + // no validation rules for Direction + + return nil +} + +// GetMessagesRequestValidationError is the validation error returned by +// GetMessagesRequest.Validate if the designated constraints aren't met. +type GetMessagesRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e GetMessagesRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e GetMessagesRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e GetMessagesRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e GetMessagesRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e GetMessagesRequestValidationError) ErrorName() string { + return "GetMessagesRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e GetMessagesRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sGetMessagesRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = GetMessagesRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = GetMessagesRequestValidationError{} + +// Validate checks the field values on GetMessagesResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *GetMessagesResponse) Validate() error { + if m == nil { + return nil + } + + // no validation rules for Result + + if len(m.GetMessages()) > 100 { + return GetMessagesResponseValidationError{ + field: "Messages", + reason: "value must contain no more than 100 item(s)", + } + } + + for idx, item := range m.GetMessages() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GetMessagesResponseValidationError{ + field: fmt.Sprintf("Messages[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + return nil +} + +// GetMessagesResponseValidationError is the validation error returned by +// GetMessagesResponse.Validate if the designated constraints aren't met. +type GetMessagesResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e GetMessagesResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e GetMessagesResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e GetMessagesResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e GetMessagesResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e GetMessagesResponseValidationError) ErrorName() string { + return "GetMessagesResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e GetMessagesResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sGetMessagesResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = GetMessagesResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = GetMessagesResponseValidationError{} + +// Validate checks the field values on OpenChatEventStream with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *OpenChatEventStream) Validate() error { + if m == nil { + return nil + } + + if m.GetChatId() == nil { + return OpenChatEventStreamValidationError{ + field: "ChatId", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetChatId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return OpenChatEventStreamValidationError{ + field: "ChatId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetMemberId() == nil { + return OpenChatEventStreamValidationError{ + field: "MemberId", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetMemberId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return OpenChatEventStreamValidationError{ + field: "MemberId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetOwner() == nil { + return OpenChatEventStreamValidationError{ + field: "Owner", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetOwner()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return OpenChatEventStreamValidationError{ + field: "Owner", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetSignature() == nil { + return OpenChatEventStreamValidationError{ + field: "Signature", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetSignature()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return OpenChatEventStreamValidationError{ + field: "Signature", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// OpenChatEventStreamValidationError is the validation error returned by +// OpenChatEventStream.Validate if the designated constraints aren't met. +type OpenChatEventStreamValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e OpenChatEventStreamValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e OpenChatEventStreamValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e OpenChatEventStreamValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e OpenChatEventStreamValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e OpenChatEventStreamValidationError) ErrorName() string { + return "OpenChatEventStreamValidationError" +} + +// Error satisfies the builtin error interface +func (e OpenChatEventStreamValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sOpenChatEventStream.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = OpenChatEventStreamValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = OpenChatEventStreamValidationError{} + +// Validate checks the field values on ChatStreamEvent with the rules defined +// in the proto definition for this message. If any rules are violated, an +// error is returned. +func (m *ChatStreamEvent) Validate() error { + if m == nil { + return nil + } + + switch m.Type.(type) { + + case *ChatStreamEvent_Message: + + if v, ok := interface{}(m.GetMessage()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChatStreamEventValidationError{ + field: "Message", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *ChatStreamEvent_Pointer: + + if v, ok := interface{}(m.GetPointer()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChatStreamEventValidationError{ + field: "Pointer", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + return ChatStreamEventValidationError{ + field: "Type", + reason: "value is required", + } + + } + + return nil +} + +// ChatStreamEventValidationError is the validation error returned by +// ChatStreamEvent.Validate if the designated constraints aren't met. +type ChatStreamEventValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ChatStreamEventValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ChatStreamEventValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ChatStreamEventValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ChatStreamEventValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ChatStreamEventValidationError) ErrorName() string { return "ChatStreamEventValidationError" } + +// Error satisfies the builtin error interface +func (e ChatStreamEventValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sChatStreamEvent.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ChatStreamEventValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ChatStreamEventValidationError{} + +// Validate checks the field values on ChatStreamEventBatch with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *ChatStreamEventBatch) Validate() error { + if m == nil { + return nil + } + + if l := len(m.GetEvents()); l < 1 || l > 1024 { + return ChatStreamEventBatchValidationError{ + field: "Events", + reason: "value must contain between 1 and 1024 items, inclusive", + } + } + + for idx, item := range m.GetEvents() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChatStreamEventBatchValidationError{ + field: fmt.Sprintf("Events[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + return nil +} + +// ChatStreamEventBatchValidationError is the validation error returned by +// ChatStreamEventBatch.Validate if the designated constraints aren't met. +type ChatStreamEventBatchValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ChatStreamEventBatchValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ChatStreamEventBatchValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ChatStreamEventBatchValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ChatStreamEventBatchValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ChatStreamEventBatchValidationError) ErrorName() string { + return "ChatStreamEventBatchValidationError" +} + +// Error satisfies the builtin error interface +func (e ChatStreamEventBatchValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sChatStreamEventBatch.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ChatStreamEventBatchValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ChatStreamEventBatchValidationError{} + +// Validate checks the field values on ChatStreamEventError with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *ChatStreamEventError) Validate() error { + if m == nil { + return nil + } + + // no validation rules for Code + + return nil +} + +// ChatStreamEventErrorValidationError is the validation error returned by +// ChatStreamEventError.Validate if the designated constraints aren't met. +type ChatStreamEventErrorValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ChatStreamEventErrorValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ChatStreamEventErrorValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ChatStreamEventErrorValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ChatStreamEventErrorValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ChatStreamEventErrorValidationError) ErrorName() string { + return "ChatStreamEventErrorValidationError" +} + +// Error satisfies the builtin error interface +func (e ChatStreamEventErrorValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sChatStreamEventError.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ChatStreamEventErrorValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ChatStreamEventErrorValidationError{} + +// Validate checks the field values on StreamChatEventsRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *StreamChatEventsRequest) Validate() error { + if m == nil { + return nil + } + + switch m.Type.(type) { + + case *StreamChatEventsRequest_OpenStream: + + if v, ok := interface{}(m.GetOpenStream()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StreamChatEventsRequestValidationError{ + field: "OpenStream", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *StreamChatEventsRequest_Pong: + + if v, ok := interface{}(m.GetPong()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StreamChatEventsRequestValidationError{ + field: "Pong", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + return StreamChatEventsRequestValidationError{ + field: "Type", + reason: "value is required", + } + + } + + return nil +} + +// StreamChatEventsRequestValidationError is the validation error returned by +// StreamChatEventsRequest.Validate if the designated constraints aren't met. +type StreamChatEventsRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e StreamChatEventsRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e StreamChatEventsRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e StreamChatEventsRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e StreamChatEventsRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e StreamChatEventsRequestValidationError) ErrorName() string { + return "StreamChatEventsRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e StreamChatEventsRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sStreamChatEventsRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = StreamChatEventsRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = StreamChatEventsRequestValidationError{} + +// Validate checks the field values on StreamChatEventsResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *StreamChatEventsResponse) Validate() error { + if m == nil { + return nil + } + + switch m.Type.(type) { + + case *StreamChatEventsResponse_Events: + + if v, ok := interface{}(m.GetEvents()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StreamChatEventsResponseValidationError{ + field: "Events", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *StreamChatEventsResponse_Ping: + + if v, ok := interface{}(m.GetPing()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StreamChatEventsResponseValidationError{ + field: "Ping", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *StreamChatEventsResponse_Error: + + if v, ok := interface{}(m.GetError()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StreamChatEventsResponseValidationError{ + field: "Error", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + return StreamChatEventsResponseValidationError{ + field: "Type", + reason: "value is required", + } + + } + + return nil +} + +// StreamChatEventsResponseValidationError is the validation error returned by +// StreamChatEventsResponse.Validate if the designated constraints aren't met. +type StreamChatEventsResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e StreamChatEventsResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e StreamChatEventsResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e StreamChatEventsResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e StreamChatEventsResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e StreamChatEventsResponseValidationError) ErrorName() string { + return "StreamChatEventsResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e StreamChatEventsResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sStreamChatEventsResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = StreamChatEventsResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = StreamChatEventsResponseValidationError{} + +// Validate checks the field values on StartChatRequest with the rules defined +// in the proto definition for this message. If any rules are violated, an +// error is returned. +func (m *StartChatRequest) Validate() error { + if m == nil { + return nil + } + + if m.GetOwner() == nil { + return StartChatRequestValidationError{ + field: "Owner", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetOwner()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StartChatRequestValidationError{ + field: "Owner", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetSignature() == nil { + return StartChatRequestValidationError{ + field: "Signature", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetSignature()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StartChatRequestValidationError{ + field: "Signature", + reason: "embedded message failed validation", + cause: err, + } + } + } + + switch m.Parameters.(type) { + + case *StartChatRequest_TipChat: + + if v, ok := interface{}(m.GetTipChat()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StartChatRequestValidationError{ + field: "TipChat", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + return StartChatRequestValidationError{ + field: "Parameters", + reason: "value is required", + } + + } + + return nil +} + +// StartChatRequestValidationError is the validation error returned by +// StartChatRequest.Validate if the designated constraints aren't met. +type StartChatRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e StartChatRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e StartChatRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e StartChatRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e StartChatRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e StartChatRequestValidationError) ErrorName() string { return "StartChatRequestValidationError" } + +// Error satisfies the builtin error interface +func (e StartChatRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sStartChatRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = StartChatRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = StartChatRequestValidationError{} + +// Validate checks the field values on StartTipChatParameters with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *StartTipChatParameters) Validate() error { + if m == nil { + return nil + } + + if m.GetIntentId() == nil { + return StartTipChatParametersValidationError{ + field: "IntentId", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetIntentId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StartTipChatParametersValidationError{ + field: "IntentId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// StartTipChatParametersValidationError is the validation error returned by +// StartTipChatParameters.Validate if the designated constraints aren't met. +type StartTipChatParametersValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e StartTipChatParametersValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e StartTipChatParametersValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e StartTipChatParametersValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e StartTipChatParametersValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e StartTipChatParametersValidationError) ErrorName() string { + return "StartTipChatParametersValidationError" +} + +// Error satisfies the builtin error interface +func (e StartTipChatParametersValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sStartTipChatParameters.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = StartTipChatParametersValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = StartTipChatParametersValidationError{} + +// Validate checks the field values on StartChatResponse with the rules defined +// in the proto definition for this message. If any rules are violated, an +// error is returned. +func (m *StartChatResponse) Validate() error { + if m == nil { + return nil + } + + // no validation rules for Result + + if v, ok := interface{}(m.GetChat()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StartChatResponseValidationError{ + field: "Chat", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// StartChatResponseValidationError is the validation error returned by +// StartChatResponse.Validate if the designated constraints aren't met. +type StartChatResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e StartChatResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e StartChatResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e StartChatResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e StartChatResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e StartChatResponseValidationError) ErrorName() string { + return "StartChatResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e StartChatResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sStartChatResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = StartChatResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = StartChatResponseValidationError{} + +// Validate checks the field values on SendMessageRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *SendMessageRequest) Validate() error { + if m == nil { + return nil + } + + if m.GetChatId() == nil { + return SendMessageRequestValidationError{ + field: "ChatId", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetChatId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SendMessageRequestValidationError{ + field: "ChatId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetMemberId() == nil { + return SendMessageRequestValidationError{ + field: "MemberId", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetMemberId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SendMessageRequestValidationError{ + field: "MemberId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if len(m.GetContent()) != 1 { + return SendMessageRequestValidationError{ + field: "Content", + reason: "value must contain exactly 1 item(s)", + } + } + + for idx, item := range m.GetContent() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SendMessageRequestValidationError{ + field: fmt.Sprintf("Content[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if m.GetOwner() == nil { + return SendMessageRequestValidationError{ + field: "Owner", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetOwner()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SendMessageRequestValidationError{ + field: "Owner", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetSignature() == nil { + return SendMessageRequestValidationError{ + field: "Signature", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetSignature()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SendMessageRequestValidationError{ + field: "Signature", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// SendMessageRequestValidationError is the validation error returned by +// SendMessageRequest.Validate if the designated constraints aren't met. +type SendMessageRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e SendMessageRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e SendMessageRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e SendMessageRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e SendMessageRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e SendMessageRequestValidationError) ErrorName() string { + return "SendMessageRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e SendMessageRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sSendMessageRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = SendMessageRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = SendMessageRequestValidationError{} + +// Validate checks the field values on SendMessageResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *SendMessageResponse) Validate() error { + if m == nil { + return nil + } + + // no validation rules for Result + + if v, ok := interface{}(m.GetMessage()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SendMessageResponseValidationError{ + field: "Message", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// SendMessageResponseValidationError is the validation error returned by +// SendMessageResponse.Validate if the designated constraints aren't met. +type SendMessageResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e SendMessageResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e SendMessageResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e SendMessageResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e SendMessageResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e SendMessageResponseValidationError) ErrorName() string { + return "SendMessageResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e SendMessageResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sSendMessageResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = SendMessageResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = SendMessageResponseValidationError{} + +// Validate checks the field values on AdvancePointerRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *AdvancePointerRequest) Validate() error { + if m == nil { + return nil + } + + if m.GetChatId() == nil { + return AdvancePointerRequestValidationError{ + field: "ChatId", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetChatId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AdvancePointerRequestValidationError{ + field: "ChatId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetPointer() == nil { + return AdvancePointerRequestValidationError{ + field: "Pointer", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetPointer()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AdvancePointerRequestValidationError{ + field: "Pointer", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetOwner() == nil { + return AdvancePointerRequestValidationError{ + field: "Owner", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetOwner()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AdvancePointerRequestValidationError{ + field: "Owner", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetSignature() == nil { + return AdvancePointerRequestValidationError{ + field: "Signature", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetSignature()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AdvancePointerRequestValidationError{ + field: "Signature", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// AdvancePointerRequestValidationError is the validation error returned by +// AdvancePointerRequest.Validate if the designated constraints aren't met. +type AdvancePointerRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e AdvancePointerRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e AdvancePointerRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e AdvancePointerRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e AdvancePointerRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e AdvancePointerRequestValidationError) ErrorName() string { + return "AdvancePointerRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e AdvancePointerRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sAdvancePointerRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = AdvancePointerRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = AdvancePointerRequestValidationError{} + +// Validate checks the field values on AdvancePointerResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *AdvancePointerResponse) Validate() error { + if m == nil { + return nil + } + + // no validation rules for Result + + return nil +} + +// AdvancePointerResponseValidationError is the validation error returned by +// AdvancePointerResponse.Validate if the designated constraints aren't met. +type AdvancePointerResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e AdvancePointerResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e AdvancePointerResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e AdvancePointerResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e AdvancePointerResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e AdvancePointerResponseValidationError) ErrorName() string { + return "AdvancePointerResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e AdvancePointerResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sAdvancePointerResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = AdvancePointerResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = AdvancePointerResponseValidationError{} + +// Validate checks the field values on RevealIdentityRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *RevealIdentityRequest) Validate() error { + if m == nil { + return nil + } + + if m.GetChatId() == nil { + return RevealIdentityRequestValidationError{ + field: "ChatId", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetChatId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RevealIdentityRequestValidationError{ + field: "ChatId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetMemberId() == nil { + return RevealIdentityRequestValidationError{ + field: "MemberId", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetMemberId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RevealIdentityRequestValidationError{ + field: "MemberId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetIdentity() == nil { + return RevealIdentityRequestValidationError{ + field: "Identity", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetIdentity()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RevealIdentityRequestValidationError{ + field: "Identity", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetOwner() == nil { + return RevealIdentityRequestValidationError{ + field: "Owner", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetOwner()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RevealIdentityRequestValidationError{ + field: "Owner", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetSignature() == nil { + return RevealIdentityRequestValidationError{ + field: "Signature", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetSignature()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RevealIdentityRequestValidationError{ + field: "Signature", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// RevealIdentityRequestValidationError is the validation error returned by +// RevealIdentityRequest.Validate if the designated constraints aren't met. +type RevealIdentityRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e RevealIdentityRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e RevealIdentityRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e RevealIdentityRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e RevealIdentityRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RevealIdentityRequestValidationError) ErrorName() string { + return "RevealIdentityRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e RevealIdentityRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sRevealIdentityRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RevealIdentityRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RevealIdentityRequestValidationError{} + +// Validate checks the field values on RevealIdentityResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *RevealIdentityResponse) Validate() error { + if m == nil { + return nil + } + + // no validation rules for Result + + if v, ok := interface{}(m.GetMessage()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RevealIdentityResponseValidationError{ + field: "Message", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// RevealIdentityResponseValidationError is the validation error returned by +// RevealIdentityResponse.Validate if the designated constraints aren't met. +type RevealIdentityResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e RevealIdentityResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e RevealIdentityResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e RevealIdentityResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e RevealIdentityResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RevealIdentityResponseValidationError) ErrorName() string { + return "RevealIdentityResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e RevealIdentityResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sRevealIdentityResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RevealIdentityResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RevealIdentityResponseValidationError{} + +// Validate checks the field values on SetMuteStateRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *SetMuteStateRequest) Validate() error { + if m == nil { + return nil + } + + if m.GetChatId() == nil { + return SetMuteStateRequestValidationError{ + field: "ChatId", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetChatId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SetMuteStateRequestValidationError{ + field: "ChatId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetMemberId() == nil { + return SetMuteStateRequestValidationError{ + field: "MemberId", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetMemberId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SetMuteStateRequestValidationError{ + field: "MemberId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + // no validation rules for IsMuted + + if m.GetOwner() == nil { + return SetMuteStateRequestValidationError{ + field: "Owner", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetOwner()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SetMuteStateRequestValidationError{ + field: "Owner", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetSignature() == nil { + return SetMuteStateRequestValidationError{ + field: "Signature", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetSignature()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SetMuteStateRequestValidationError{ + field: "Signature", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// SetMuteStateRequestValidationError is the validation error returned by +// SetMuteStateRequest.Validate if the designated constraints aren't met. +type SetMuteStateRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e SetMuteStateRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e SetMuteStateRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e SetMuteStateRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e SetMuteStateRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e SetMuteStateRequestValidationError) ErrorName() string { + return "SetMuteStateRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e SetMuteStateRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sSetMuteStateRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = SetMuteStateRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = SetMuteStateRequestValidationError{} + +// Validate checks the field values on SetMuteStateResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *SetMuteStateResponse) Validate() error { + if m == nil { + return nil + } + + // no validation rules for Result + + return nil +} + +// SetMuteStateResponseValidationError is the validation error returned by +// SetMuteStateResponse.Validate if the designated constraints aren't met. +type SetMuteStateResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e SetMuteStateResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e SetMuteStateResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e SetMuteStateResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e SetMuteStateResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e SetMuteStateResponseValidationError) ErrorName() string { + return "SetMuteStateResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e SetMuteStateResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sSetMuteStateResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = SetMuteStateResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = SetMuteStateResponseValidationError{} + +// Validate checks the field values on SetSubscriptionStateRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *SetSubscriptionStateRequest) Validate() error { + if m == nil { + return nil + } + + if m.GetChatId() == nil { + return SetSubscriptionStateRequestValidationError{ + field: "ChatId", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetChatId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SetSubscriptionStateRequestValidationError{ + field: "ChatId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetMemberId() == nil { + return SetSubscriptionStateRequestValidationError{ + field: "MemberId", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetMemberId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SetSubscriptionStateRequestValidationError{ + field: "MemberId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + // no validation rules for IsSubscribed + + if m.GetOwner() == nil { + return SetSubscriptionStateRequestValidationError{ + field: "Owner", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetOwner()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SetSubscriptionStateRequestValidationError{ + field: "Owner", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetSignature() == nil { + return SetSubscriptionStateRequestValidationError{ + field: "Signature", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetSignature()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SetSubscriptionStateRequestValidationError{ + field: "Signature", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// SetSubscriptionStateRequestValidationError is the validation error returned +// by SetSubscriptionStateRequest.Validate if the designated constraints +// aren't met. +type SetSubscriptionStateRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e SetSubscriptionStateRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e SetSubscriptionStateRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e SetSubscriptionStateRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e SetSubscriptionStateRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e SetSubscriptionStateRequestValidationError) ErrorName() string { + return "SetSubscriptionStateRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e SetSubscriptionStateRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sSetSubscriptionStateRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = SetSubscriptionStateRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = SetSubscriptionStateRequestValidationError{} + +// Validate checks the field values on SetSubscriptionStateResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *SetSubscriptionStateResponse) Validate() error { + if m == nil { + return nil + } + + // no validation rules for Result + + return nil +} + +// SetSubscriptionStateResponseValidationError is the validation error returned +// by SetSubscriptionStateResponse.Validate if the designated constraints +// aren't met. +type SetSubscriptionStateResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e SetSubscriptionStateResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e SetSubscriptionStateResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e SetSubscriptionStateResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e SetSubscriptionStateResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e SetSubscriptionStateResponseValidationError) ErrorName() string { + return "SetSubscriptionStateResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e SetSubscriptionStateResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sSetSubscriptionStateResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = SetSubscriptionStateResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = SetSubscriptionStateResponseValidationError{} + +// Validate checks the field values on ChatId with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *ChatId) Validate() error { + if m == nil { + return nil + } + + if len(m.GetValue()) != 32 { + return ChatIdValidationError{ + field: "Value", + reason: "value length must be 32 bytes", + } + } + + return nil +} + +// ChatIdValidationError is the validation error returned by ChatId.Validate if +// the designated constraints aren't met. +type ChatIdValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ChatIdValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ChatIdValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ChatIdValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ChatIdValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ChatIdValidationError) ErrorName() string { return "ChatIdValidationError" } + +// Error satisfies the builtin error interface +func (e ChatIdValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sChatId.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ChatIdValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ChatIdValidationError{} + +// Validate checks the field values on ChatMessageId with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *ChatMessageId) Validate() error { + if m == nil { + return nil + } + + if len(m.GetValue()) != 16 { + return ChatMessageIdValidationError{ + field: "Value", + reason: "value length must be 16 bytes", + } + } + + return nil +} + +// ChatMessageIdValidationError is the validation error returned by +// ChatMessageId.Validate if the designated constraints aren't met. +type ChatMessageIdValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ChatMessageIdValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ChatMessageIdValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ChatMessageIdValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ChatMessageIdValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ChatMessageIdValidationError) ErrorName() string { return "ChatMessageIdValidationError" } + +// Error satisfies the builtin error interface +func (e ChatMessageIdValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sChatMessageId.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ChatMessageIdValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ChatMessageIdValidationError{} + +// Validate checks the field values on ChatMemberId with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *ChatMemberId) Validate() error { + if m == nil { + return nil + } + + if len(m.GetValue()) != 16 { + return ChatMemberIdValidationError{ + field: "Value", + reason: "value length must be 16 bytes", + } + } + + return nil +} + +// ChatMemberIdValidationError is the validation error returned by +// ChatMemberId.Validate if the designated constraints aren't met. +type ChatMemberIdValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ChatMemberIdValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ChatMemberIdValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ChatMemberIdValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ChatMemberIdValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ChatMemberIdValidationError) ErrorName() string { return "ChatMemberIdValidationError" } + +// Error satisfies the builtin error interface +func (e ChatMemberIdValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sChatMemberId.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ChatMemberIdValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ChatMemberIdValidationError{} + +// Validate checks the field values on ChatMetadata with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *ChatMetadata) Validate() error { + if m == nil { + return nil + } + + if m.GetChatId() == nil { + return ChatMetadataValidationError{ + field: "ChatId", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetChatId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChatMetadataValidationError{ + field: "ChatId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if _, ok := _ChatMetadata_Type_NotInLookup[m.GetType()]; ok { + return ChatMetadataValidationError{ + field: "Type", + reason: "value must not be in list [0]", + } + } + + if l := utf8.RuneCountInString(m.GetTitle()); l < 1 || l > 1024 { + return ChatMetadataValidationError{ + field: "Title", + reason: "value length must be between 1 and 1024 runes, inclusive", + } + } + + if l := len(m.GetMembers()); l < 1 || l > 2 { + return ChatMetadataValidationError{ + field: "Members", + reason: "value must contain between 1 and 2 items, inclusive", + } + } + + for idx, item := range m.GetMembers() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChatMetadataValidationError{ + field: fmt.Sprintf("Members[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + // no validation rules for CanMute + + // no validation rules for CanUnsubscribe + + if v, ok := interface{}(m.GetCursor()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChatMetadataValidationError{ + field: "Cursor", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// ChatMetadataValidationError is the validation error returned by +// ChatMetadata.Validate if the designated constraints aren't met. +type ChatMetadataValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ChatMetadataValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ChatMetadataValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ChatMetadataValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ChatMetadataValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ChatMetadataValidationError) ErrorName() string { return "ChatMetadataValidationError" } + +// Error satisfies the builtin error interface +func (e ChatMetadataValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sChatMetadata.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ChatMetadataValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ChatMetadataValidationError{} + +var _ChatMetadata_Type_NotInLookup = map[ChatType]struct{}{ + 0: {}, +} + +// Validate checks the field values on ChatMessage with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *ChatMessage) Validate() error { + if m == nil { + return nil + } + + if m.GetMessageId() == nil { + return ChatMessageValidationError{ + field: "MessageId", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetMessageId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChatMessageValidationError{ + field: "MessageId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetSenderId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChatMessageValidationError{ + field: "SenderId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if l := len(m.GetContent()); l < 1 || l > 2 { + return ChatMessageValidationError{ + field: "Content", + reason: "value must contain between 1 and 2 items, inclusive", + } + } + + for idx, item := range m.GetContent() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChatMessageValidationError{ + field: fmt.Sprintf("Content[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if m.GetTs() == nil { + return ChatMessageValidationError{ + field: "Ts", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetCursor()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChatMessageValidationError{ + field: "Cursor", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// ChatMessageValidationError is the validation error returned by +// ChatMessage.Validate if the designated constraints aren't met. +type ChatMessageValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ChatMessageValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ChatMessageValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ChatMessageValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ChatMessageValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ChatMessageValidationError) ErrorName() string { return "ChatMessageValidationError" } + +// Error satisfies the builtin error interface +func (e ChatMessageValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sChatMessage.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ChatMessageValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ChatMessageValidationError{} + +// Validate checks the field values on ChatMember with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *ChatMember) Validate() error { + if m == nil { + return nil + } + + if m.GetMemberId() == nil { + return ChatMemberValidationError{ + field: "MemberId", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetMemberId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChatMemberValidationError{ + field: "MemberId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + // no validation rules for IsSelf + + if v, ok := interface{}(m.GetIdentity()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChatMemberValidationError{ + field: "Identity", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if len(m.GetPointers()) > 2 { + return ChatMemberValidationError{ + field: "Pointers", + reason: "value must contain no more than 2 item(s)", + } + } + + for idx, item := range m.GetPointers() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChatMemberValidationError{ + field: fmt.Sprintf("Pointers[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + // no validation rules for NumUnread + + // no validation rules for IsMuted + + // no validation rules for IsSubscribed + + return nil +} + +// ChatMemberValidationError is the validation error returned by +// ChatMember.Validate if the designated constraints aren't met. +type ChatMemberValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ChatMemberValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ChatMemberValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ChatMemberValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ChatMemberValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ChatMemberValidationError) ErrorName() string { return "ChatMemberValidationError" } + +// Error satisfies the builtin error interface +func (e ChatMemberValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sChatMember.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ChatMemberValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ChatMemberValidationError{} + +// Validate checks the field values on ChatMemberIdentity with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *ChatMemberIdentity) Validate() error { + if m == nil { + return nil + } + + if _, ok := _ChatMemberIdentity_Platform_InLookup[m.GetPlatform()]; !ok { + return ChatMemberIdentityValidationError{ + field: "Platform", + reason: "value must be in list [1]", + } + } + + if l := utf8.RuneCountInString(m.GetUsername()); l < 1 || l > 15 { + return ChatMemberIdentityValidationError{ + field: "Username", + reason: "value length must be between 1 and 15 runes, inclusive", + } + } + + return nil +} + +// ChatMemberIdentityValidationError is the validation error returned by +// ChatMemberIdentity.Validate if the designated constraints aren't met. +type ChatMemberIdentityValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ChatMemberIdentityValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ChatMemberIdentityValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ChatMemberIdentityValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ChatMemberIdentityValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ChatMemberIdentityValidationError) ErrorName() string { + return "ChatMemberIdentityValidationError" +} + +// Error satisfies the builtin error interface +func (e ChatMemberIdentityValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sChatMemberIdentity.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ChatMemberIdentityValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ChatMemberIdentityValidationError{} + +var _ChatMemberIdentity_Platform_InLookup = map[Platform]struct{}{ + 1: {}, +} + +// Validate checks the field values on Pointer with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *Pointer) Validate() error { + if m == nil { + return nil + } + + if _, ok := _Pointer_Type_NotInLookup[m.GetType()]; ok { + return PointerValidationError{ + field: "Type", + reason: "value must not be in list [0]", + } + } + + if m.GetValue() == nil { + return PointerValidationError{ + field: "Value", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetValue()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return PointerValidationError{ + field: "Value", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetMemberId() == nil { + return PointerValidationError{ + field: "MemberId", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetMemberId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return PointerValidationError{ + field: "MemberId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// PointerValidationError is the validation error returned by Pointer.Validate +// if the designated constraints aren't met. +type PointerValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e PointerValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e PointerValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e PointerValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e PointerValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e PointerValidationError) ErrorName() string { return "PointerValidationError" } + +// Error satisfies the builtin error interface +func (e PointerValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sPointer.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = PointerValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = PointerValidationError{} + +var _Pointer_Type_NotInLookup = map[PointerType]struct{}{ + 0: {}, +} + +// Validate checks the field values on Content with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *Content) Validate() error { + if m == nil { + return nil + } + + switch m.Type.(type) { + + case *Content_Text: + + if v, ok := interface{}(m.GetText()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ContentValidationError{ + field: "Text", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *Content_Localized: + + if v, ok := interface{}(m.GetLocalized()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ContentValidationError{ + field: "Localized", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *Content_ExchangeData: + + if v, ok := interface{}(m.GetExchangeData()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ContentValidationError{ + field: "ExchangeData", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *Content_NaclBox: + + if v, ok := interface{}(m.GetNaclBox()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ContentValidationError{ + field: "NaclBox", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *Content_ThankYou: + + if v, ok := interface{}(m.GetThankYou()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ContentValidationError{ + field: "ThankYou", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *Content_IdentityRevealed: + + if v, ok := interface{}(m.GetIdentityRevealed()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ContentValidationError{ + field: "IdentityRevealed", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + return ContentValidationError{ + field: "Type", + reason: "value is required", + } + + } + + return nil +} + +// ContentValidationError is the validation error returned by Content.Validate +// if the designated constraints aren't met. +type ContentValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ContentValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ContentValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ContentValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ContentValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ContentValidationError) ErrorName() string { return "ContentValidationError" } + +// Error satisfies the builtin error interface +func (e ContentValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sContent.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ContentValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ContentValidationError{} + +// Validate checks the field values on TextContent with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *TextContent) Validate() error { + if m == nil { + return nil + } + + if l := utf8.RuneCountInString(m.GetText()); l < 1 || l > 1024 { + return TextContentValidationError{ + field: "Text", + reason: "value length must be between 1 and 1024 runes, inclusive", + } + } + + return nil +} + +// TextContentValidationError is the validation error returned by +// TextContent.Validate if the designated constraints aren't met. +type TextContentValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e TextContentValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e TextContentValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e TextContentValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e TextContentValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e TextContentValidationError) ErrorName() string { return "TextContentValidationError" } + +// Error satisfies the builtin error interface +func (e TextContentValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sTextContent.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = TextContentValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = TextContentValidationError{} + +// Validate checks the field values on LocalizedContent with the rules defined +// in the proto definition for this message. If any rules are violated, an +// error is returned. +func (m *LocalizedContent) Validate() error { + if m == nil { + return nil + } + + if l := utf8.RuneCountInString(m.GetKeyOrText()); l < 1 || l > 1024 { + return LocalizedContentValidationError{ + field: "KeyOrText", + reason: "value length must be between 1 and 1024 runes, inclusive", + } + } + + return nil +} + +// LocalizedContentValidationError is the validation error returned by +// LocalizedContent.Validate if the designated constraints aren't met. +type LocalizedContentValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e LocalizedContentValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e LocalizedContentValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e LocalizedContentValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e LocalizedContentValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e LocalizedContentValidationError) ErrorName() string { return "LocalizedContentValidationError" } + +// Error satisfies the builtin error interface +func (e LocalizedContentValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sLocalizedContent.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = LocalizedContentValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = LocalizedContentValidationError{} + +// Validate checks the field values on ExchangeDataContent with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *ExchangeDataContent) Validate() error { + if m == nil { + return nil + } + + if _, ok := _ExchangeDataContent_Verb_NotInLookup[m.GetVerb()]; ok { + return ExchangeDataContentValidationError{ + field: "Verb", + reason: "value must not be in list [0]", + } + } + + switch m.ExchangeData.(type) { + + case *ExchangeDataContent_Exact: + + if v, ok := interface{}(m.GetExact()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ExchangeDataContentValidationError{ + field: "Exact", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *ExchangeDataContent_Partial: + + if v, ok := interface{}(m.GetPartial()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ExchangeDataContentValidationError{ + field: "Partial", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + return ExchangeDataContentValidationError{ + field: "ExchangeData", + reason: "value is required", + } + + } + + switch m.Reference.(type) { + + case *ExchangeDataContent_Intent: + + if v, ok := interface{}(m.GetIntent()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ExchangeDataContentValidationError{ + field: "Intent", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *ExchangeDataContent_Signature: + + if v, ok := interface{}(m.GetSignature()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ExchangeDataContentValidationError{ + field: "Signature", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + return ExchangeDataContentValidationError{ + field: "Reference", + reason: "value is required", + } + + } + + return nil +} + +// ExchangeDataContentValidationError is the validation error returned by +// ExchangeDataContent.Validate if the designated constraints aren't met. +type ExchangeDataContentValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ExchangeDataContentValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ExchangeDataContentValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ExchangeDataContentValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ExchangeDataContentValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ExchangeDataContentValidationError) ErrorName() string { + return "ExchangeDataContentValidationError" +} + +// Error satisfies the builtin error interface +func (e ExchangeDataContentValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sExchangeDataContent.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ExchangeDataContentValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ExchangeDataContentValidationError{} + +var _ExchangeDataContent_Verb_NotInLookup = map[ExchangeDataContent_Verb]struct{}{ + 0: {}, +} + +// Validate checks the field values on NaclBoxEncryptedContent with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *NaclBoxEncryptedContent) Validate() error { + if m == nil { + return nil + } + + if m.GetPeerPublicKey() == nil { + return NaclBoxEncryptedContentValidationError{ + field: "PeerPublicKey", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetPeerPublicKey()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return NaclBoxEncryptedContentValidationError{ + field: "PeerPublicKey", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if len(m.GetNonce()) != 24 { + return NaclBoxEncryptedContentValidationError{ + field: "Nonce", + reason: "value length must be 24 bytes", + } + } + + if l := len(m.GetEncryptedPayload()); l < 1 || l > 1024 { + return NaclBoxEncryptedContentValidationError{ + field: "EncryptedPayload", + reason: "value length must be between 1 and 1024 bytes, inclusive", + } + } + + return nil +} + +// NaclBoxEncryptedContentValidationError is the validation error returned by +// NaclBoxEncryptedContent.Validate if the designated constraints aren't met. +type NaclBoxEncryptedContentValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e NaclBoxEncryptedContentValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e NaclBoxEncryptedContentValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e NaclBoxEncryptedContentValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e NaclBoxEncryptedContentValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e NaclBoxEncryptedContentValidationError) ErrorName() string { + return "NaclBoxEncryptedContentValidationError" +} + +// Error satisfies the builtin error interface +func (e NaclBoxEncryptedContentValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sNaclBoxEncryptedContent.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = NaclBoxEncryptedContentValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = NaclBoxEncryptedContentValidationError{} + +// Validate checks the field values on ThankYouContent with the rules defined +// in the proto definition for this message. If any rules are violated, an +// error is returned. +func (m *ThankYouContent) Validate() error { + if m == nil { + return nil + } + + if m.GetTipIntent() == nil { + return ThankYouContentValidationError{ + field: "TipIntent", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetTipIntent()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ThankYouContentValidationError{ + field: "TipIntent", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// ThankYouContentValidationError is the validation error returned by +// ThankYouContent.Validate if the designated constraints aren't met. +type ThankYouContentValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ThankYouContentValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ThankYouContentValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ThankYouContentValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ThankYouContentValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ThankYouContentValidationError) ErrorName() string { return "ThankYouContentValidationError" } + +// Error satisfies the builtin error interface +func (e ThankYouContentValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sThankYouContent.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ThankYouContentValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ThankYouContentValidationError{} + +// Validate checks the field values on IdentityRevealedContent with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *IdentityRevealedContent) Validate() error { + if m == nil { + return nil + } + + if m.GetMemberId() == nil { + return IdentityRevealedContentValidationError{ + field: "MemberId", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetMemberId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return IdentityRevealedContentValidationError{ + field: "MemberId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetIdentity() == nil { + return IdentityRevealedContentValidationError{ + field: "Identity", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetIdentity()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return IdentityRevealedContentValidationError{ + field: "Identity", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// IdentityRevealedContentValidationError is the validation error returned by +// IdentityRevealedContent.Validate if the designated constraints aren't met. +type IdentityRevealedContentValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e IdentityRevealedContentValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e IdentityRevealedContentValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e IdentityRevealedContentValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e IdentityRevealedContentValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e IdentityRevealedContentValidationError) ErrorName() string { + return "IdentityRevealedContentValidationError" +} + +// Error satisfies the builtin error interface +func (e IdentityRevealedContentValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sIdentityRevealedContent.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = IdentityRevealedContentValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = IdentityRevealedContentValidationError{} + +// Validate checks the field values on Cursor with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *Cursor) Validate() error { + if m == nil { + return nil + } + + if l := len(m.GetValue()); l < 8 || l > 32 { + return CursorValidationError{ + field: "Value", + reason: "value length must be between 8 and 32 bytes, inclusive", + } + } + + return nil +} + +// CursorValidationError is the validation error returned by Cursor.Validate if +// the designated constraints aren't met. +type CursorValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e CursorValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e CursorValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e CursorValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e CursorValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e CursorValidationError) ErrorName() string { return "CursorValidationError" } + +// Error satisfies the builtin error interface +func (e CursorValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sCursor.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = CursorValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = CursorValidationError{} diff --git a/generated/go/chat/v2/chat_service_grpc.pb.go b/generated/go/chat/v2/chat_service_grpc.pb.go new file mode 100644 index 0000000..c8f189c --- /dev/null +++ b/generated/go/chat/v2/chat_service_grpc.pb.go @@ -0,0 +1,508 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.2.0 +// - protoc v3.21.12 +// source: chat/v2/chat_service.proto + +package chat + +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 + +// ChatClient is the client API for Chat 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 ChatClient interface { + // GetChats gets the set of chats for an owner account using a paged API. + // This RPC is aware of all identities tied to the owner account. + GetChats(ctx context.Context, in *GetChatsRequest, opts ...grpc.CallOption) (*GetChatsResponse, error) + // GetMessages gets the set of messages for a chat member using a paged API + GetMessages(ctx context.Context, in *GetMessagesRequest, opts ...grpc.CallOption) (*GetMessagesResponse, error) + // StreamChatEvents streams chat events in real-time. Chat events include + // messages, pointer updates, etc. + // + // The streaming protocol is follows: + // 1. Client initiates a stream by sending an OpenChatEventStream message. + // 2. If an error is encoutered, a ChatStreamEventError message will be + // returned by server and the stream will be closed. + // 3. Server will immediately flush initial chat state. + // 4. New chat events will be pushed to the stream in real time as they + // are received. + // + // This RPC supports a keepalive protocol as follows: + // 1. Client initiates a stream by sending an OpenChatEventStream message. + // 2. Upon stream initialization, server begins the keepalive protocol. + // 3. Server sends a ping to the client. + // 4. Client responds with a pong as fast as possible, making note of + // the delay for when to expect the next ping. + // 5. Steps 3 and 4 are repeated until the stream is explicitly terminated + // or is deemed to be unhealthy. + // + // Client notes: + // - Client should be careful to process events async, so any responses to pings are + // not delayed. + // - Clients should implement a reasonable backoff strategy upon continued timeout + // failures. + // - Clients that abuse pong messages may have their streams terminated by server. + // + // At any point in the stream, server will respond with events in real time as + // they are observed. Events sent over the stream should not affect the ping/pong + // protocol timings. + StreamChatEvents(ctx context.Context, opts ...grpc.CallOption) (Chat_StreamChatEventsClient, error) + // StartChat starts a chat. The RPC call is idempotent and will use existing + // chats whenever applicable within the context of message routing. + StartChat(ctx context.Context, in *StartChatRequest, opts ...grpc.CallOption) (*StartChatResponse, error) + // SendMessage sends a message to a chat + SendMessage(ctx context.Context, in *SendMessageRequest, opts ...grpc.CallOption) (*SendMessageResponse, error) + // AdvancePointer advances a pointer in message history for a chat member + AdvancePointer(ctx context.Context, in *AdvancePointerRequest, opts ...grpc.CallOption) (*AdvancePointerResponse, error) + // RevealIdentity reveals a chat member's identity if it is anonymous. A chat + // message will be inserted on success. + RevealIdentity(ctx context.Context, in *RevealIdentityRequest, opts ...grpc.CallOption) (*RevealIdentityResponse, error) + // SetMuteState configures a chat member's mute state + SetMuteState(ctx context.Context, in *SetMuteStateRequest, opts ...grpc.CallOption) (*SetMuteStateResponse, error) + // SetSubscriptionState configures a chat member's susbscription state + SetSubscriptionState(ctx context.Context, in *SetSubscriptionStateRequest, opts ...grpc.CallOption) (*SetSubscriptionStateResponse, error) +} + +type chatClient struct { + cc grpc.ClientConnInterface +} + +func NewChatClient(cc grpc.ClientConnInterface) ChatClient { + return &chatClient{cc} +} + +func (c *chatClient) GetChats(ctx context.Context, in *GetChatsRequest, opts ...grpc.CallOption) (*GetChatsResponse, error) { + out := new(GetChatsResponse) + err := c.cc.Invoke(ctx, "/code.chat.v2.Chat/GetChats", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *chatClient) GetMessages(ctx context.Context, in *GetMessagesRequest, opts ...grpc.CallOption) (*GetMessagesResponse, error) { + out := new(GetMessagesResponse) + err := c.cc.Invoke(ctx, "/code.chat.v2.Chat/GetMessages", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *chatClient) StreamChatEvents(ctx context.Context, opts ...grpc.CallOption) (Chat_StreamChatEventsClient, error) { + stream, err := c.cc.NewStream(ctx, &Chat_ServiceDesc.Streams[0], "/code.chat.v2.Chat/StreamChatEvents", opts...) + if err != nil { + return nil, err + } + x := &chatStreamChatEventsClient{stream} + return x, nil +} + +type Chat_StreamChatEventsClient interface { + Send(*StreamChatEventsRequest) error + Recv() (*StreamChatEventsResponse, error) + grpc.ClientStream +} + +type chatStreamChatEventsClient struct { + grpc.ClientStream +} + +func (x *chatStreamChatEventsClient) Send(m *StreamChatEventsRequest) error { + return x.ClientStream.SendMsg(m) +} + +func (x *chatStreamChatEventsClient) Recv() (*StreamChatEventsResponse, error) { + m := new(StreamChatEventsResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *chatClient) StartChat(ctx context.Context, in *StartChatRequest, opts ...grpc.CallOption) (*StartChatResponse, error) { + out := new(StartChatResponse) + err := c.cc.Invoke(ctx, "/code.chat.v2.Chat/StartChat", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *chatClient) SendMessage(ctx context.Context, in *SendMessageRequest, opts ...grpc.CallOption) (*SendMessageResponse, error) { + out := new(SendMessageResponse) + err := c.cc.Invoke(ctx, "/code.chat.v2.Chat/SendMessage", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *chatClient) AdvancePointer(ctx context.Context, in *AdvancePointerRequest, opts ...grpc.CallOption) (*AdvancePointerResponse, error) { + out := new(AdvancePointerResponse) + err := c.cc.Invoke(ctx, "/code.chat.v2.Chat/AdvancePointer", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *chatClient) RevealIdentity(ctx context.Context, in *RevealIdentityRequest, opts ...grpc.CallOption) (*RevealIdentityResponse, error) { + out := new(RevealIdentityResponse) + err := c.cc.Invoke(ctx, "/code.chat.v2.Chat/RevealIdentity", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *chatClient) SetMuteState(ctx context.Context, in *SetMuteStateRequest, opts ...grpc.CallOption) (*SetMuteStateResponse, error) { + out := new(SetMuteStateResponse) + err := c.cc.Invoke(ctx, "/code.chat.v2.Chat/SetMuteState", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *chatClient) SetSubscriptionState(ctx context.Context, in *SetSubscriptionStateRequest, opts ...grpc.CallOption) (*SetSubscriptionStateResponse, error) { + out := new(SetSubscriptionStateResponse) + err := c.cc.Invoke(ctx, "/code.chat.v2.Chat/SetSubscriptionState", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// ChatServer is the server API for Chat service. +// All implementations must embed UnimplementedChatServer +// for forward compatibility +type ChatServer interface { + // GetChats gets the set of chats for an owner account using a paged API. + // This RPC is aware of all identities tied to the owner account. + GetChats(context.Context, *GetChatsRequest) (*GetChatsResponse, error) + // GetMessages gets the set of messages for a chat member using a paged API + GetMessages(context.Context, *GetMessagesRequest) (*GetMessagesResponse, error) + // StreamChatEvents streams chat events in real-time. Chat events include + // messages, pointer updates, etc. + // + // The streaming protocol is follows: + // 1. Client initiates a stream by sending an OpenChatEventStream message. + // 2. If an error is encoutered, a ChatStreamEventError message will be + // returned by server and the stream will be closed. + // 3. Server will immediately flush initial chat state. + // 4. New chat events will be pushed to the stream in real time as they + // are received. + // + // This RPC supports a keepalive protocol as follows: + // 1. Client initiates a stream by sending an OpenChatEventStream message. + // 2. Upon stream initialization, server begins the keepalive protocol. + // 3. Server sends a ping to the client. + // 4. Client responds with a pong as fast as possible, making note of + // the delay for when to expect the next ping. + // 5. Steps 3 and 4 are repeated until the stream is explicitly terminated + // or is deemed to be unhealthy. + // + // Client notes: + // - Client should be careful to process events async, so any responses to pings are + // not delayed. + // - Clients should implement a reasonable backoff strategy upon continued timeout + // failures. + // - Clients that abuse pong messages may have their streams terminated by server. + // + // At any point in the stream, server will respond with events in real time as + // they are observed. Events sent over the stream should not affect the ping/pong + // protocol timings. + StreamChatEvents(Chat_StreamChatEventsServer) error + // StartChat starts a chat. The RPC call is idempotent and will use existing + // chats whenever applicable within the context of message routing. + StartChat(context.Context, *StartChatRequest) (*StartChatResponse, error) + // SendMessage sends a message to a chat + SendMessage(context.Context, *SendMessageRequest) (*SendMessageResponse, error) + // AdvancePointer advances a pointer in message history for a chat member + AdvancePointer(context.Context, *AdvancePointerRequest) (*AdvancePointerResponse, error) + // RevealIdentity reveals a chat member's identity if it is anonymous. A chat + // message will be inserted on success. + RevealIdentity(context.Context, *RevealIdentityRequest) (*RevealIdentityResponse, error) + // SetMuteState configures a chat member's mute state + SetMuteState(context.Context, *SetMuteStateRequest) (*SetMuteStateResponse, error) + // SetSubscriptionState configures a chat member's susbscription state + SetSubscriptionState(context.Context, *SetSubscriptionStateRequest) (*SetSubscriptionStateResponse, error) + mustEmbedUnimplementedChatServer() +} + +// UnimplementedChatServer must be embedded to have forward compatible implementations. +type UnimplementedChatServer struct { +} + +func (UnimplementedChatServer) GetChats(context.Context, *GetChatsRequest) (*GetChatsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetChats not implemented") +} +func (UnimplementedChatServer) GetMessages(context.Context, *GetMessagesRequest) (*GetMessagesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetMessages not implemented") +} +func (UnimplementedChatServer) StreamChatEvents(Chat_StreamChatEventsServer) error { + return status.Errorf(codes.Unimplemented, "method StreamChatEvents not implemented") +} +func (UnimplementedChatServer) StartChat(context.Context, *StartChatRequest) (*StartChatResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method StartChat not implemented") +} +func (UnimplementedChatServer) SendMessage(context.Context, *SendMessageRequest) (*SendMessageResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SendMessage not implemented") +} +func (UnimplementedChatServer) AdvancePointer(context.Context, *AdvancePointerRequest) (*AdvancePointerResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method AdvancePointer not implemented") +} +func (UnimplementedChatServer) RevealIdentity(context.Context, *RevealIdentityRequest) (*RevealIdentityResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method RevealIdentity not implemented") +} +func (UnimplementedChatServer) SetMuteState(context.Context, *SetMuteStateRequest) (*SetMuteStateResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SetMuteState not implemented") +} +func (UnimplementedChatServer) SetSubscriptionState(context.Context, *SetSubscriptionStateRequest) (*SetSubscriptionStateResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SetSubscriptionState not implemented") +} +func (UnimplementedChatServer) mustEmbedUnimplementedChatServer() {} + +// UnsafeChatServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to ChatServer will +// result in compilation errors. +type UnsafeChatServer interface { + mustEmbedUnimplementedChatServer() +} + +func RegisterChatServer(s grpc.ServiceRegistrar, srv ChatServer) { + s.RegisterService(&Chat_ServiceDesc, srv) +} + +func _Chat_GetChats_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetChatsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ChatServer).GetChats(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/code.chat.v2.Chat/GetChats", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ChatServer).GetChats(ctx, req.(*GetChatsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Chat_GetMessages_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetMessagesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ChatServer).GetMessages(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/code.chat.v2.Chat/GetMessages", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ChatServer).GetMessages(ctx, req.(*GetMessagesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Chat_StreamChatEvents_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(ChatServer).StreamChatEvents(&chatStreamChatEventsServer{stream}) +} + +type Chat_StreamChatEventsServer interface { + Send(*StreamChatEventsResponse) error + Recv() (*StreamChatEventsRequest, error) + grpc.ServerStream +} + +type chatStreamChatEventsServer struct { + grpc.ServerStream +} + +func (x *chatStreamChatEventsServer) Send(m *StreamChatEventsResponse) error { + return x.ServerStream.SendMsg(m) +} + +func (x *chatStreamChatEventsServer) Recv() (*StreamChatEventsRequest, error) { + m := new(StreamChatEventsRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func _Chat_StartChat_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(StartChatRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ChatServer).StartChat(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/code.chat.v2.Chat/StartChat", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ChatServer).StartChat(ctx, req.(*StartChatRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Chat_SendMessage_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SendMessageRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ChatServer).SendMessage(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/code.chat.v2.Chat/SendMessage", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ChatServer).SendMessage(ctx, req.(*SendMessageRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Chat_AdvancePointer_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AdvancePointerRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ChatServer).AdvancePointer(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/code.chat.v2.Chat/AdvancePointer", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ChatServer).AdvancePointer(ctx, req.(*AdvancePointerRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Chat_RevealIdentity_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RevealIdentityRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ChatServer).RevealIdentity(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/code.chat.v2.Chat/RevealIdentity", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ChatServer).RevealIdentity(ctx, req.(*RevealIdentityRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Chat_SetMuteState_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetMuteStateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ChatServer).SetMuteState(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/code.chat.v2.Chat/SetMuteState", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ChatServer).SetMuteState(ctx, req.(*SetMuteStateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Chat_SetSubscriptionState_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetSubscriptionStateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ChatServer).SetSubscriptionState(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/code.chat.v2.Chat/SetSubscriptionState", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ChatServer).SetSubscriptionState(ctx, req.(*SetSubscriptionStateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// Chat_ServiceDesc is the grpc.ServiceDesc for Chat service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Chat_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "code.chat.v2.Chat", + HandlerType: (*ChatServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "GetChats", + Handler: _Chat_GetChats_Handler, + }, + { + MethodName: "GetMessages", + Handler: _Chat_GetMessages_Handler, + }, + { + MethodName: "StartChat", + Handler: _Chat_StartChat_Handler, + }, + { + MethodName: "SendMessage", + Handler: _Chat_SendMessage_Handler, + }, + { + MethodName: "AdvancePointer", + Handler: _Chat_AdvancePointer_Handler, + }, + { + MethodName: "RevealIdentity", + Handler: _Chat_RevealIdentity_Handler, + }, + { + MethodName: "SetMuteState", + Handler: _Chat_SetMuteState_Handler, + }, + { + MethodName: "SetSubscriptionState", + Handler: _Chat_SetSubscriptionState_Handler, + }, + }, + Streams: []grpc.StreamDesc{ + { + StreamName: "StreamChatEvents", + Handler: _Chat_StreamChatEvents_Handler, + ServerStreams: true, + ClientStreams: true, + }, + }, + Metadata: "chat/v2/chat_service.proto", +} diff --git a/generated/go/common/v1/model.pb.go b/generated/go/common/v1/model.pb.go index 7313dc6..063d87f 100644 --- a/generated/go/common/v1/model.pb.go +++ b/generated/go/common/v1/model.pb.go @@ -10,6 +10,8 @@ import ( _ "github.com/envoyproxy/protoc-gen-validate/validate" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + durationpb "google.golang.org/protobuf/types/known/durationpb" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" reflect "reflect" sync "sync" ) @@ -1104,91 +1106,217 @@ func (x *Response) GetMessage() string { return "" } +type ServerPing struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Timestamp the ping was sent on the stream, for client to get a sense + // of potential network latency + Timestamp *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + // The delay server will apply before sending the next ping + PingDelay *durationpb.Duration `protobuf:"bytes,2,opt,name=ping_delay,json=pingDelay,proto3" json:"ping_delay,omitempty"` +} + +func (x *ServerPing) Reset() { + *x = ServerPing{} + if protoimpl.UnsafeEnabled { + mi := &file_common_v1_model_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ServerPing) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ServerPing) ProtoMessage() {} + +func (x *ServerPing) ProtoReflect() protoreflect.Message { + mi := &file_common_v1_model_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ServerPing.ProtoReflect.Descriptor instead. +func (*ServerPing) Descriptor() ([]byte, []int) { + return file_common_v1_model_proto_rawDescGZIP(), []int{18} +} + +func (x *ServerPing) GetTimestamp() *timestamppb.Timestamp { + if x != nil { + return x.Timestamp + } + return nil +} + +func (x *ServerPing) GetPingDelay() *durationpb.Duration { + if x != nil { + return x.PingDelay + } + return nil +} + +type ClientPong struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Timestamp the Pong was sent on the stream, for server to get a sense + // of potential network latency + Timestamp *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` +} + +func (x *ClientPong) Reset() { + *x = ClientPong{} + if protoimpl.UnsafeEnabled { + mi := &file_common_v1_model_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClientPong) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClientPong) ProtoMessage() {} + +func (x *ClientPong) ProtoReflect() protoreflect.Message { + mi := &file_common_v1_model_proto_msgTypes[19] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClientPong.ProtoReflect.Descriptor instead. +func (*ClientPong) Descriptor() ([]byte, []int) { + return file_common_v1_model_proto_rawDescGZIP(), []int{19} +} + +func (x *ClientPong) GetTimestamp() *timestamppb.Timestamp { + if x != nil { + return x.Timestamp + } + return nil +} + var File_common_v1_model_proto protoreflect.FileDescriptor var file_common_v1_model_proto_rawDesc = []byte{ 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x1a, 0x17, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x22, 0x34, 0x0a, 0x0f, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x22, 0x34, 0x0a, 0x0f, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x20, 0x18, 0x20, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x99, 0x01, 0x0a, 0x12, 0x49, 0x6e, 0x73, 0x74, + 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x45, + 0x0a, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, + 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x07, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x73, 0x69, 0x67, 0x6e, + 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x57, 0x72, 0x69, 0x74, 0x61, + 0x62, 0x6c, 0x65, 0x22, 0x31, 0x0a, 0x0b, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0c, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x7a, 0x05, 0x10, 0x01, 0x18, 0xd0, 0x09, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x2e, 0x0a, 0x09, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x68, + 0x61, 0x73, 0x68, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x20, 0x18, 0x20, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x99, 0x01, 0x0a, 0x12, 0x49, 0x6e, 0x73, 0x74, 0x72, - 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x45, 0x0a, - 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, - 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x07, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x65, - 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x65, - 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x57, 0x72, 0x69, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x22, 0x31, 0x0a, 0x0b, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x22, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, - 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x7a, 0x05, 0x10, 0x01, 0x18, 0xd0, 0x09, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x2e, 0x0a, 0x09, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x68, 0x61, - 0x73, 0x68, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x2e, 0x0a, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x40, 0x18, 0x40, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x2d, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x20, 0x18, 0x20, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x2e, 0x0a, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x40, 0x18, 0x40, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x2d, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, - 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, - 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x20, 0x18, 0x20, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x22, 0x2b, 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x2b, 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, + 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, + 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x22, 0x34, 0x0a, 0x0f, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, + 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x31, 0x0a, 0x0b, 0x44, 0x65, 0x76, 0x69, + 0x63, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x22, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, + 0x01, 0x18, 0xdc, 0x7f, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x32, 0x0a, 0x0c, 0x41, + 0x70, 0x70, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, + 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x02, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, + 0x3f, 0x0a, 0x0b, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x30, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, 0xba, + 0xe9, 0xc0, 0x03, 0x15, 0x72, 0x13, 0x32, 0x11, 0x5e, 0x5c, 0x2b, 0x5b, 0x31, 0x2d, 0x39, 0x5d, + 0x5c, 0x64, 0x7b, 0x31, 0x2c, 0x31, 0x34, 0x7d, 0x24, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x22, 0x2e, 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x24, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0e, 0xba, 0xe9, 0xc0, 0x03, 0x09, + 0x72, 0x07, 0x10, 0x01, 0x18, 0xfd, 0x01, 0x68, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x22, 0x54, 0x0a, 0x0c, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, + 0x12, 0x3c, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, + 0x01, 0x02, 0x10, 0x01, 0x48, 0x00, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x42, 0x06, + 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x29, 0x0a, 0x04, 0x48, 0x61, 0x73, 0x68, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, - 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x22, 0x34, 0x0a, 0x0f, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x31, 0x0a, 0x0b, 0x44, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x22, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, - 0x18, 0xdc, 0x7f, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x32, 0x0a, 0x0c, 0x41, 0x70, - 0x70, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, - 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x02, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3f, - 0x0a, 0x0b, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x30, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, 0xba, 0xe9, - 0xc0, 0x03, 0x15, 0x72, 0x13, 0x32, 0x11, 0x5e, 0x5c, 0x2b, 0x5b, 0x31, 0x2d, 0x39, 0x5d, 0x5c, - 0x64, 0x7b, 0x31, 0x2c, 0x31, 0x34, 0x7d, 0x24, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, - 0x2e, 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x24, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0e, 0xba, 0xe9, 0xc0, 0x03, 0x09, 0x72, - 0x07, 0x10, 0x01, 0x18, 0xfd, 0x01, 0x68, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, - 0x54, 0x0a, 0x0c, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x12, - 0x3c, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, - 0x02, 0x10, 0x01, 0x48, 0x00, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x42, 0x06, 0x0a, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x29, 0x0a, 0x04, 0x48, 0x61, 0x73, 0x68, 0x12, 0x21, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, - 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x20, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x22, 0x67, 0x0a, 0x06, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x12, 0x5d, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x47, 0xba, 0xe9, 0xc0, 0x03, 0x42, - 0x72, 0x40, 0x32, 0x3e, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x5d, 0x7b, 0x32, 0x2c, - 0x34, 0x7d, 0x28, 0x5b, 0x5f, 0x2d, 0x5d, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x5d, 0x7b, - 0x34, 0x7d, 0x29, 0x3f, 0x28, 0x5b, 0x5f, 0x2d, 0x5d, 0x28, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, - 0x7a, 0x5d, 0x7b, 0x32, 0x7d, 0x7c, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x33, 0x7d, 0x29, 0x29, - 0x3f, 0x24, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x29, 0x0a, 0x04, 0x55, 0x55, 0x49, - 0x44, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, - 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x22, 0x69, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x62, - 0x6f, 0x64, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, - 0x8e, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x22, 0x1b, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, - 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x01, + 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x20, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x22, 0x67, 0x0a, 0x06, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x12, 0x5d, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x47, 0xba, 0xe9, 0xc0, 0x03, + 0x42, 0x72, 0x40, 0x32, 0x3e, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x5d, 0x7b, 0x32, + 0x2c, 0x34, 0x7d, 0x28, 0x5b, 0x5f, 0x2d, 0x5d, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x5d, + 0x7b, 0x34, 0x7d, 0x29, 0x3f, 0x28, 0x5b, 0x5f, 0x2d, 0x5d, 0x28, 0x5b, 0x41, 0x2d, 0x5a, 0x61, + 0x2d, 0x7a, 0x5d, 0x7b, 0x32, 0x7d, 0x7c, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x33, 0x7d, 0x29, + 0x29, 0x3f, 0x24, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x29, 0x0a, 0x04, 0x55, 0x55, + 0x49, 0x44, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x69, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x12, 0x0a, 0x04, + 0x62, 0x6f, 0x64, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, + 0x22, 0x8e, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, + 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x22, 0x1b, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, + 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, + 0x01, 0x22, 0x98, 0x01, 0x0a, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x50, 0x69, 0x6e, 0x67, + 0x12, 0x44, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, + 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xb2, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x74, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x44, 0x0a, 0x0a, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x64, + 0x65, 0x6c, 0x61, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xaa, 0x01, 0x02, 0x08, + 0x01, 0x52, 0x09, 0x70, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x22, 0x52, 0x0a, 0x0a, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x6e, 0x67, 0x12, 0x44, 0x0a, 0x09, 0x74, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, + 0xb2, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2a, 0xbf, 0x02, 0x0a, 0x0b, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x49, 0x4d, 0x41, 0x52, 0x59, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x54, 0x45, @@ -1232,38 +1360,45 @@ func file_common_v1_model_proto_rawDescGZIP() []byte { } var file_common_v1_model_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_common_v1_model_proto_msgTypes = make([]protoimpl.MessageInfo, 18) +var file_common_v1_model_proto_msgTypes = make([]protoimpl.MessageInfo, 20) var file_common_v1_model_proto_goTypes = []interface{}{ - (AccountType)(0), // 0: code.common.v1.AccountType - (Response_Result)(0), // 1: code.common.v1.Response.Result - (*SolanaAccountId)(nil), // 2: code.common.v1.SolanaAccountId - (*InstructionAccount)(nil), // 3: code.common.v1.InstructionAccount - (*Transaction)(nil), // 4: code.common.v1.Transaction - (*Blockhash)(nil), // 5: code.common.v1.Blockhash - (*Signature)(nil), // 6: code.common.v1.Signature - (*IntentId)(nil), // 7: code.common.v1.IntentId - (*UserId)(nil), // 8: code.common.v1.UserId - (*DataContainerId)(nil), // 9: code.common.v1.DataContainerId - (*DeviceToken)(nil), // 10: code.common.v1.DeviceToken - (*AppInstallId)(nil), // 11: code.common.v1.AppInstallId - (*PhoneNumber)(nil), // 12: code.common.v1.PhoneNumber - (*Domain)(nil), // 13: code.common.v1.Domain - (*Relationship)(nil), // 14: code.common.v1.Relationship - (*Hash)(nil), // 15: code.common.v1.Hash - (*Locale)(nil), // 16: code.common.v1.Locale - (*UUID)(nil), // 17: code.common.v1.UUID - (*Request)(nil), // 18: code.common.v1.Request - (*Response)(nil), // 19: code.common.v1.Response + (AccountType)(0), // 0: code.common.v1.AccountType + (Response_Result)(0), // 1: code.common.v1.Response.Result + (*SolanaAccountId)(nil), // 2: code.common.v1.SolanaAccountId + (*InstructionAccount)(nil), // 3: code.common.v1.InstructionAccount + (*Transaction)(nil), // 4: code.common.v1.Transaction + (*Blockhash)(nil), // 5: code.common.v1.Blockhash + (*Signature)(nil), // 6: code.common.v1.Signature + (*IntentId)(nil), // 7: code.common.v1.IntentId + (*UserId)(nil), // 8: code.common.v1.UserId + (*DataContainerId)(nil), // 9: code.common.v1.DataContainerId + (*DeviceToken)(nil), // 10: code.common.v1.DeviceToken + (*AppInstallId)(nil), // 11: code.common.v1.AppInstallId + (*PhoneNumber)(nil), // 12: code.common.v1.PhoneNumber + (*Domain)(nil), // 13: code.common.v1.Domain + (*Relationship)(nil), // 14: code.common.v1.Relationship + (*Hash)(nil), // 15: code.common.v1.Hash + (*Locale)(nil), // 16: code.common.v1.Locale + (*UUID)(nil), // 17: code.common.v1.UUID + (*Request)(nil), // 18: code.common.v1.Request + (*Response)(nil), // 19: code.common.v1.Response + (*ServerPing)(nil), // 20: code.common.v1.ServerPing + (*ClientPong)(nil), // 21: code.common.v1.ClientPong + (*timestamppb.Timestamp)(nil), // 22: google.protobuf.Timestamp + (*durationpb.Duration)(nil), // 23: google.protobuf.Duration } var file_common_v1_model_proto_depIdxs = []int32{ 2, // 0: code.common.v1.InstructionAccount.account:type_name -> code.common.v1.SolanaAccountId 13, // 1: code.common.v1.Relationship.domain:type_name -> code.common.v1.Domain 1, // 2: code.common.v1.Response.result:type_name -> code.common.v1.Response.Result - 3, // [3:3] is the sub-list for method output_type - 3, // [3:3] is the sub-list for method input_type - 3, // [3:3] is the sub-list for extension type_name - 3, // [3:3] is the sub-list for extension extendee - 0, // [0:3] is the sub-list for field type_name + 22, // 3: code.common.v1.ServerPing.timestamp:type_name -> google.protobuf.Timestamp + 23, // 4: code.common.v1.ServerPing.ping_delay:type_name -> google.protobuf.Duration + 22, // 5: code.common.v1.ClientPong.timestamp:type_name -> google.protobuf.Timestamp + 6, // [6:6] is the sub-list for method output_type + 6, // [6:6] is the sub-list for method input_type + 6, // [6:6] is the sub-list for extension type_name + 6, // [6:6] is the sub-list for extension extendee + 0, // [0:6] is the sub-list for field type_name } func init() { file_common_v1_model_proto_init() } @@ -1488,6 +1623,30 @@ func file_common_v1_model_proto_init() { return nil } } + file_common_v1_model_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ServerPing); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_common_v1_model_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClientPong); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } file_common_v1_model_proto_msgTypes[12].OneofWrappers = []interface{}{ (*Relationship_Domain)(nil), @@ -1498,7 +1657,7 @@ func file_common_v1_model_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_common_v1_model_proto_rawDesc, NumEnums: 2, - NumMessages: 18, + NumMessages: 20, NumExtensions: 0, NumServices: 0, }, diff --git a/generated/go/common/v1/model.pb.validate.go b/generated/go/common/v1/model.pb.validate.go index a274246..3a4f7b0 100644 --- a/generated/go/common/v1/model.pb.validate.go +++ b/generated/go/common/v1/model.pb.validate.go @@ -1392,3 +1392,152 @@ var _ interface { Cause() error ErrorName() string } = ResponseValidationError{} + +// Validate checks the field values on ServerPing with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *ServerPing) Validate() error { + if m == nil { + return nil + } + + if m.GetTimestamp() == nil { + return ServerPingValidationError{ + field: "Timestamp", + reason: "value is required", + } + } + + if m.GetPingDelay() == nil { + return ServerPingValidationError{ + field: "PingDelay", + reason: "value is required", + } + } + + return nil +} + +// ServerPingValidationError is the validation error returned by +// ServerPing.Validate if the designated constraints aren't met. +type ServerPingValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ServerPingValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ServerPingValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ServerPingValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ServerPingValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ServerPingValidationError) ErrorName() string { return "ServerPingValidationError" } + +// Error satisfies the builtin error interface +func (e ServerPingValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sServerPing.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ServerPingValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ServerPingValidationError{} + +// Validate checks the field values on ClientPong with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *ClientPong) Validate() error { + if m == nil { + return nil + } + + if m.GetTimestamp() == nil { + return ClientPongValidationError{ + field: "Timestamp", + reason: "value is required", + } + } + + return nil +} + +// ClientPongValidationError is the validation error returned by +// ClientPong.Validate if the designated constraints aren't met. +type ClientPongValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ClientPongValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ClientPongValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ClientPongValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ClientPongValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ClientPongValidationError) ErrorName() string { return "ClientPongValidationError" } + +// Error satisfies the builtin error interface +func (e ClientPongValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sClientPong.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ClientPongValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ClientPongValidationError{} diff --git a/generated/go/messaging/v1/messaging_service.pb.go b/generated/go/messaging/v1/messaging_service.pb.go index b86f7ae..0a63c32 100644 --- a/generated/go/messaging/v1/messaging_service.pb.go +++ b/generated/go/messaging/v1/messaging_service.pb.go @@ -12,7 +12,6 @@ import ( _ "github.com/envoyproxy/protoc-gen-validate/validate" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" - durationpb "google.golang.org/protobuf/types/known/durationpb" timestamppb "google.golang.org/protobuf/types/known/timestamppb" reflect "reflect" sync "sync" @@ -228,7 +227,7 @@ type OpenMessageStreamWithKeepAliveRequest struct { // // *OpenMessageStreamWithKeepAliveRequest_Request // *OpenMessageStreamWithKeepAliveRequest_Pong - RequestOrPong isOpenMessageStreamWithKeepAliveRequest_RequestOrPong `protobuf_oneof:"requestOrPong"` + RequestOrPong isOpenMessageStreamWithKeepAliveRequest_RequestOrPong `protobuf_oneof:"request_or_pong"` } func (x *OpenMessageStreamWithKeepAliveRequest) Reset() { @@ -277,7 +276,7 @@ func (x *OpenMessageStreamWithKeepAliveRequest) GetRequest() *OpenMessageStreamR return nil } -func (x *OpenMessageStreamWithKeepAliveRequest) GetPong() *ClientPong { +func (x *OpenMessageStreamWithKeepAliveRequest) GetPong() *v1.ClientPong { if x, ok := x.GetRequestOrPong().(*OpenMessageStreamWithKeepAliveRequest_Pong); ok { return x.Pong } @@ -293,7 +292,7 @@ type OpenMessageStreamWithKeepAliveRequest_Request struct { } type OpenMessageStreamWithKeepAliveRequest_Pong struct { - Pong *ClientPong `protobuf:"bytes,2,opt,name=pong,proto3,oneof"` + Pong *v1.ClientPong `protobuf:"bytes,2,opt,name=pong,proto3,oneof"` } func (*OpenMessageStreamWithKeepAliveRequest_Request) isOpenMessageStreamWithKeepAliveRequest_RequestOrPong() { @@ -311,7 +310,7 @@ type OpenMessageStreamWithKeepAliveResponse struct { // // *OpenMessageStreamWithKeepAliveResponse_Response // *OpenMessageStreamWithKeepAliveResponse_Ping - ResponseOrPing isOpenMessageStreamWithKeepAliveResponse_ResponseOrPing `protobuf_oneof:"responseOrPing"` + ResponseOrPing isOpenMessageStreamWithKeepAliveResponse_ResponseOrPing `protobuf_oneof:"response_or_ping"` } func (x *OpenMessageStreamWithKeepAliveResponse) Reset() { @@ -360,7 +359,7 @@ func (x *OpenMessageStreamWithKeepAliveResponse) GetResponse() *OpenMessageStrea return nil } -func (x *OpenMessageStreamWithKeepAliveResponse) GetPing() *ServerPing { +func (x *OpenMessageStreamWithKeepAliveResponse) GetPing() *v1.ServerPing { if x, ok := x.GetResponseOrPing().(*OpenMessageStreamWithKeepAliveResponse_Ping); ok { return x.Ping } @@ -376,7 +375,7 @@ type OpenMessageStreamWithKeepAliveResponse_Response struct { } type OpenMessageStreamWithKeepAliveResponse_Ping struct { - Ping *ServerPing `protobuf:"bytes,2,opt,name=ping,proto3,oneof"` + Ping *v1.ServerPing `protobuf:"bytes,2,opt,name=ping,proto3,oneof"` } func (*OpenMessageStreamWithKeepAliveResponse_Response) isOpenMessageStreamWithKeepAliveResponse_ResponseOrPing() { @@ -1637,113 +1636,6 @@ func (*Message_ClientRejectedLogin) isMessage_Kind() {} func (*Message_AirdropReceived) isMessage_Kind() {} -type ServerPing struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Timestamp the ping was sent on the stream, for client to get a sense - // of potential network latency - Timestamp *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - // The delay server will apply before sending the next ping - PingDelay *durationpb.Duration `protobuf:"bytes,2,opt,name=ping_delay,json=pingDelay,proto3" json:"ping_delay,omitempty"` -} - -func (x *ServerPing) Reset() { - *x = ServerPing{} - if protoimpl.UnsafeEnabled { - mi := &file_messaging_v1_messaging_service_proto_msgTypes[22] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ServerPing) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ServerPing) ProtoMessage() {} - -func (x *ServerPing) ProtoReflect() protoreflect.Message { - mi := &file_messaging_v1_messaging_service_proto_msgTypes[22] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ServerPing.ProtoReflect.Descriptor instead. -func (*ServerPing) Descriptor() ([]byte, []int) { - return file_messaging_v1_messaging_service_proto_rawDescGZIP(), []int{22} -} - -func (x *ServerPing) GetTimestamp() *timestamppb.Timestamp { - if x != nil { - return x.Timestamp - } - return nil -} - -func (x *ServerPing) GetPingDelay() *durationpb.Duration { - if x != nil { - return x.PingDelay - } - return nil -} - -type ClientPong struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Timestamp the Pong was sent on the stream, for server to get a sense - // of potential network latency - Timestamp *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` -} - -func (x *ClientPong) Reset() { - *x = ClientPong{} - if protoimpl.UnsafeEnabled { - mi := &file_messaging_v1_messaging_service_proto_msgTypes[23] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ClientPong) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ClientPong) ProtoMessage() {} - -func (x *ClientPong) ProtoReflect() protoreflect.Message { - mi := &file_messaging_v1_messaging_service_proto_msgTypes[23] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ClientPong.ProtoReflect.Descriptor instead. -func (*ClientPong) Descriptor() ([]byte, []int) { - return file_messaging_v1_messaging_service_proto_rawDescGZIP(), []int{23} -} - -func (x *ClientPong) GetTimestamp() *timestamppb.Timestamp { - if x != nil { - return x.Timestamp - } - return nil -} - var File_messaging_v1_messaging_service_proto protoreflect.FileDescriptor var file_messaging_v1_messaging_service_proto_rawDesc = []byte{ @@ -1756,8 +1648,6 @@ var file_messaging_v1_messaging_service_proto_rawDesc = []byte{ 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xb4, 0x01, 0x0a, 0x18, 0x4f, 0x70, 0x65, 0x6e, 0x4d, 0x65, 0x73, @@ -1778,332 +1668,317 @@ var file_messaging_v1_messaging_service_proto_rawDesc = []byte{ 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x0d, 0xba, 0xe9, 0xc0, 0x03, 0x08, 0x92, 0x01, 0x05, 0x08, 0x01, 0x10, 0x80, 0x08, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, - 0xbd, 0x01, 0x0a, 0x25, 0x4f, 0x70, 0x65, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, + 0xbc, 0x01, 0x0a, 0x25, 0x4f, 0x70, 0x65, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x57, 0x69, 0x74, 0x68, 0x4b, 0x65, 0x65, 0x70, 0x41, 0x6c, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x47, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x33, 0x0a, 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x6e, 0x67, 0x48, - 0x00, 0x52, 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x42, 0x16, 0x0a, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x4f, 0x72, 0x50, 0x6f, 0x6e, 0x67, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, - 0xc2, 0x01, 0x0a, 0x26, 0x4f, 0x70, 0x65, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x57, 0x69, 0x74, 0x68, 0x4b, 0x65, 0x65, 0x70, 0x41, 0x6c, 0x69, - 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x08, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, - 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x50, - 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x42, 0x17, 0x0a, 0x0e, 0x72, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4f, 0x72, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x05, 0xb8, - 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xaf, 0x01, 0x0a, 0x13, 0x50, 0x6f, 0x6c, 0x6c, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x53, 0x0a, 0x0e, - 0x72, 0x65, 0x6e, 0x64, 0x65, 0x7a, 0x76, 0x6f, 0x75, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x7a, 0x76, - 0x6f, 0x75, 0x73, 0x4b, 0x65, 0x79, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, - 0x10, 0x01, 0x52, 0x0d, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x7a, 0x76, 0x6f, 0x75, 0x73, 0x4b, 0x65, - 0x79, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, - 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, - 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x5d, 0x0a, 0x14, 0x50, 0x6f, 0x6c, 0x6c, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, - 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x0d, 0xba, 0xe9, - 0xc0, 0x03, 0x08, 0x92, 0x01, 0x05, 0x08, 0x00, 0x10, 0x80, 0x08, 0x52, 0x08, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0xb7, 0x01, 0x0a, 0x12, 0x41, 0x63, 0x6b, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x53, 0x0a, 0x0e, - 0x72, 0x65, 0x6e, 0x64, 0x65, 0x7a, 0x76, 0x6f, 0x75, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x7a, 0x76, - 0x6f, 0x75, 0x73, 0x4b, 0x65, 0x79, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, - 0x10, 0x01, 0x52, 0x0d, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x7a, 0x76, 0x6f, 0x75, 0x73, 0x4b, 0x65, - 0x79, 0x12, 0x4c, 0x0a, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x49, 0x64, 0x42, 0x0d, 0xba, 0xe9, 0xc0, 0x03, 0x08, 0x92, 0x01, 0x05, 0x08, 0x01, - 0x10, 0x80, 0x08, 0x52, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x73, 0x22, - 0x70, 0x0a, 0x14, 0x41, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x6b, 0x4d, - 0x65, 0x73, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, - 0x10, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, - 0x00, 0x22, 0xf0, 0x01, 0x0a, 0x12, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, - 0x01, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x53, 0x0a, 0x0e, 0x72, 0x65, - 0x6e, 0x64, 0x65, 0x7a, 0x76, 0x6f, 0x75, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, + 0x73, 0x74, 0x12, 0x30, 0x0a, 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x04, + 0x70, 0x6f, 0x6e, 0x67, 0x42, 0x18, 0x0a, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, + 0x6f, 0x72, 0x5f, 0x70, 0x6f, 0x6e, 0x67, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xc1, + 0x01, 0x0a, 0x26, 0x4f, 0x70, 0x65, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x57, 0x69, 0x74, 0x68, 0x4b, 0x65, 0x65, 0x70, 0x41, 0x6c, 0x69, 0x76, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x08, 0x72, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, + 0x4f, 0x70, 0x65, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x50, 0x69, 0x6e, 0x67, 0x48, + 0x00, 0x52, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x42, 0x19, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x5f, 0x6f, 0x72, 0x5f, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x05, 0xb8, 0xe9, 0xc0, + 0x03, 0x01, 0x22, 0xaf, 0x01, 0x0a, 0x13, 0x50, 0x6f, 0x6c, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x53, 0x0a, 0x0e, 0x72, 0x65, + 0x6e, 0x64, 0x65, 0x7a, 0x76, 0x6f, 0x75, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x7a, 0x76, 0x6f, 0x75, 0x73, 0x4b, 0x65, 0x79, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x7a, 0x76, 0x6f, 0x75, 0x73, 0x4b, 0x65, 0x79, 0x12, - 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x22, 0xc1, 0x01, 0x0a, 0x13, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x06, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x12, 0x3b, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, + 0x74, 0x75, 0x72, 0x65, 0x22, 0x5d, 0x0a, 0x14, 0x50, 0x6f, 0x6c, 0x6c, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x08, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, + 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x0d, 0xba, 0xe9, 0xc0, 0x03, + 0x08, 0x92, 0x01, 0x05, 0x08, 0x00, 0x10, 0x80, 0x08, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x73, 0x22, 0xb7, 0x01, 0x0a, 0x12, 0x41, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x53, 0x0a, 0x0e, 0x72, 0x65, + 0x6e, 0x64, 0x65, 0x7a, 0x76, 0x6f, 0x75, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x7a, 0x76, 0x6f, 0x75, + 0x73, 0x4b, 0x65, 0x79, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, + 0x52, 0x0d, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x7a, 0x76, 0x6f, 0x75, 0x73, 0x4b, 0x65, 0x79, 0x12, + 0x4c, 0x0a, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x49, 0x64, 0x42, 0x0d, 0xba, 0xe9, 0xc0, 0x03, 0x08, 0x92, 0x01, 0x05, 0x08, 0x01, 0x10, 0x80, + 0x08, 0x52, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x73, 0x22, 0x70, 0x0a, + 0x14, 0x41, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x6b, 0x4d, 0x65, 0x73, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x10, 0x0a, + 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x22, + 0xf0, 0x01, 0x0a, 0x12, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x49, 0x64, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, - 0x22, 0x26, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, - 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x4e, 0x4f, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x5f, - 0x53, 0x54, 0x52, 0x45, 0x41, 0x4d, 0x10, 0x01, 0x22, 0x32, 0x0a, 0x0d, 0x52, 0x65, 0x6e, 0x64, - 0x65, 0x7a, 0x76, 0x6f, 0x75, 0x73, 0x4b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, - 0x04, 0x10, 0x20, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x2e, 0x0a, 0x09, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, - 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x6d, 0x0a, 0x11, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x6f, 0x47, 0x72, 0x61, 0x62, 0x42, 0x69, 0x6c, - 0x6c, 0x12, 0x58, 0x0a, 0x11, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x5f, 0x61, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, - 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, - 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x10, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x6f, 0x72, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xdc, 0x04, 0x0a, 0x14, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x6f, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, - 0x42, 0x69, 0x6c, 0x6c, 0x12, 0x58, 0x0a, 0x11, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x6f, - 0x72, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, - 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x10, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x39, - 0x0a, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, - 0x48, 0x00, 0x52, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x12, 0x48, 0x0a, 0x07, 0x70, 0x61, 0x72, - 0x74, 0x69, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, - 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x57, 0x69, 0x74, - 0x68, 0x6f, 0x75, 0x74, 0x52, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, - 0x69, 0x61, 0x6c, 0x12, 0x2e, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x06, 0x64, 0x6f, 0x6d, - 0x61, 0x69, 0x6e, 0x12, 0x3b, 0x0a, 0x08, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x52, 0x08, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x72, - 0x12, 0x37, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x09, - 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x47, 0x0a, 0x0e, 0x72, 0x65, 0x6e, - 0x64, 0x65, 0x7a, 0x76, 0x6f, 0x75, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, - 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x7a, 0x76, 0x6f, 0x75, 0x73, - 0x4b, 0x65, 0x79, 0x52, 0x0d, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x7a, 0x76, 0x6f, 0x75, 0x73, 0x4b, - 0x65, 0x79, 0x12, 0x5e, 0x0a, 0x0f, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x5f, 0x66, 0x65, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x6f, + 0x61, 0x67, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, + 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x53, 0x0a, 0x0e, 0x72, 0x65, 0x6e, 0x64, + 0x65, 0x7a, 0x76, 0x6f, 0x75, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, + 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x7a, 0x76, 0x6f, 0x75, 0x73, 0x4b, + 0x65, 0x79, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0d, + 0x72, 0x65, 0x6e, 0x64, 0x65, 0x7a, 0x76, 0x6f, 0x75, 0x73, 0x4b, 0x65, 0x79, 0x12, 0x43, 0x0a, + 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, + 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x22, 0xc1, 0x01, 0x0a, 0x13, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x06, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x12, 0x3b, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x49, 0x64, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x22, 0x26, + 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, + 0x12, 0x14, 0x0a, 0x10, 0x4e, 0x4f, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x5f, 0x53, 0x54, + 0x52, 0x45, 0x41, 0x4d, 0x10, 0x01, 0x22, 0x32, 0x0a, 0x0d, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x7a, + 0x76, 0x6f, 0x75, 0x73, 0x4b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, + 0x20, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x2e, 0x0a, 0x09, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, + 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x6d, 0x0a, 0x11, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x6f, 0x47, 0x72, 0x61, 0x62, 0x42, 0x69, 0x6c, 0x6c, 0x12, + 0x58, 0x0a, 0x11, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, + 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, + 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x10, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x6f, 0x72, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xdc, 0x04, 0x0a, 0x14, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x6f, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x42, 0x69, + 0x6c, 0x6c, 0x12, 0x58, 0x0a, 0x11, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x5f, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, + 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x10, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x6f, 0x72, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x05, + 0x65, 0x78, 0x61, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x32, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x46, 0x65, 0x65, 0x50, - 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x92, 0x01, 0x02, - 0x10, 0x03, 0x52, 0x0e, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x46, 0x65, - 0x65, 0x73, 0x42, 0x16, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, - 0x61, 0x74, 0x61, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x53, 0x0a, 0x0b, 0x43, 0x6f, - 0x64, 0x65, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x12, 0x44, 0x0a, 0x09, 0x74, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xb2, - 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, - 0x5a, 0x0a, 0x15, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x41, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, - 0x01, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x8f, 0x01, 0x0a, 0x0f, - 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x12, - 0x41, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, - 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x49, 0x64, 0x12, 0x39, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x55, 0x0a, - 0x0d, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x44, - 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0a, 0xba, - 0xe9, 0xc0, 0x03, 0x05, 0xb2, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x22, 0xbb, 0x02, 0x0a, 0x0e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x54, 0x6f, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x3a, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x42, - 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x64, 0x6f, 0x6d, - 0x61, 0x69, 0x6e, 0x12, 0x47, 0x0a, 0x08, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, - 0x10, 0x01, 0x52, 0x08, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, - 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, - 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x12, 0x53, 0x0a, 0x0e, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x7a, 0x76, 0x6f, 0x75, 0x73, 0x5f, - 0x6b, 0x65, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x6e, 0x64, 0x65, 0x7a, 0x76, 0x6f, 0x75, 0x73, 0x4b, 0x65, 0x79, 0x42, 0x0a, 0xba, 0xe9, 0xc0, - 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x7a, 0x76, - 0x6f, 0x75, 0x73, 0x4b, 0x65, 0x79, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, - 0x10, 0x04, 0x22, 0x5b, 0x0a, 0x13, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x6a, 0x65, - 0x63, 0x74, 0x65, 0x64, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x44, 0x0a, 0x09, 0x74, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xb2, - 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, - 0xfc, 0x01, 0x0a, 0x0f, 0x41, 0x69, 0x72, 0x64, 0x72, 0x6f, 0x70, 0x52, 0x65, 0x63, 0x65, 0x69, - 0x76, 0x65, 0x64, 0x12, 0x4f, 0x0a, 0x0c, 0x61, 0x69, 0x72, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, + 0x52, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x12, 0x48, 0x0a, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, + 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, + 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x57, 0x69, 0x74, 0x68, 0x6f, + 0x75, 0x74, 0x52, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, + 0x6c, 0x12, 0x2e, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, + 0x6e, 0x12, 0x3b, 0x0a, 0x08, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x49, 0x64, 0x52, 0x08, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x37, + 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x09, 0x73, 0x69, + 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x47, 0x0a, 0x0e, 0x72, 0x65, 0x6e, 0x64, 0x65, + 0x7a, 0x76, 0x6f, 0x75, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, + 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x7a, 0x76, 0x6f, 0x75, 0x73, 0x4b, 0x65, + 0x79, 0x52, 0x0d, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x7a, 0x76, 0x6f, 0x75, 0x73, 0x4b, 0x65, 0x79, + 0x12, 0x5e, 0x0a, 0x0f, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x66, + 0x65, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, - 0x41, 0x69, 0x72, 0x64, 0x72, 0x6f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, - 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x0b, 0x61, 0x69, 0x72, 0x64, 0x72, 0x6f, 0x70, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x52, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x42, 0x0a, - 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0c, 0x65, 0x78, 0x63, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x44, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xb2, 0x01, - 0x02, 0x08, 0x01, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xc2, - 0x07, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x38, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x00, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x6a, 0x0a, 0x1e, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x69, 0x67, - 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, - 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, - 0x02, 0x10, 0x00, 0x52, 0x1b, 0x73, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x12, 0x57, 0x0a, 0x14, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x6f, 0x5f, 0x67, - 0x72, 0x61, 0x62, 0x5f, 0x62, 0x69, 0x6c, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x6f, 0x47, 0x72, 0x61, 0x62, - 0x42, 0x69, 0x6c, 0x6c, 0x48, 0x00, 0x52, 0x11, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, - 0x6f, 0x47, 0x72, 0x61, 0x62, 0x42, 0x69, 0x6c, 0x6c, 0x12, 0x60, 0x0a, 0x17, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x6f, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x5f, - 0x62, 0x69, 0x6c, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x6f, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x42, - 0x69, 0x6c, 0x6c, 0x48, 0x00, 0x52, 0x14, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x6f, - 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x12, 0x43, 0x0a, 0x0c, 0x63, - 0x6f, 0x64, 0x65, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, - 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, - 0x64, 0x48, 0x00, 0x52, 0x0b, 0x63, 0x6f, 0x64, 0x65, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, - 0x12, 0x62, 0x0a, 0x17, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x6a, 0x65, 0x63, - 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, - 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x6a, 0x65, - 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x15, 0x63, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x4f, 0x0a, 0x10, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x73, - 0x75, 0x62, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, - 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x74, - 0x65, 0x64, 0x48, 0x00, 0x52, 0x0f, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x53, 0x75, 0x62, 0x6d, - 0x69, 0x74, 0x74, 0x65, 0x64, 0x12, 0x49, 0x0a, 0x0e, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, - 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, - 0x31, 0x2e, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x48, - 0x00, 0x52, 0x0d, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x64, - 0x12, 0x4d, 0x0a, 0x10, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x6f, 0x5f, 0x6c, - 0x6f, 0x67, 0x69, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x6f, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x48, 0x00, 0x52, - 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x6f, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, - 0x5c, 0x0a, 0x15, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, - 0x65, 0x64, 0x5f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x48, 0x00, 0x52, 0x13, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x4f, 0x0a, - 0x10, 0x61, 0x69, 0x72, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x69, 0x72, 0x64, - 0x72, 0x6f, 0x70, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0f, 0x61, - 0x69, 0x72, 0x64, 0x72, 0x6f, 0x70, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x42, 0x0d, - 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x4a, 0x04, 0x08, - 0x0b, 0x10, 0x0c, 0x22, 0x98, 0x01, 0x0a, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x50, 0x69, - 0x6e, 0x67, 0x12, 0x44, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xb2, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x74, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x44, 0x0a, 0x0a, 0x70, 0x69, 0x6e, 0x67, - 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xaa, 0x01, - 0x02, 0x08, 0x01, 0x52, 0x09, 0x70, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x22, 0x52, - 0x0a, 0x0a, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x6e, 0x67, 0x12, 0x44, 0x0a, 0x09, + 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x46, 0x65, 0x65, 0x50, 0x61, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x92, 0x01, 0x02, 0x10, 0x03, + 0x52, 0x0e, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x46, 0x65, 0x65, 0x73, + 0x42, 0x16, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, + 0x61, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x53, 0x0a, 0x0b, 0x43, 0x6f, 0x64, 0x65, + 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x12, 0x44, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xb2, 0x01, 0x02, + 0x08, 0x01, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x5a, 0x0a, + 0x15, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, + 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x41, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, + 0x08, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x8f, 0x01, 0x0a, 0x0f, 0x49, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x12, 0x41, 0x0a, + 0x09, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, + 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, + 0x12, 0x39, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x55, 0x0a, 0x0d, 0x57, + 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x44, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xb2, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x32, 0xb7, 0x04, 0x0a, 0x09, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, - 0x12, 0x70, 0x0a, 0x11, 0x4f, 0x70, 0x65, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x2b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x30, 0x01, 0x12, 0x99, 0x01, 0x0a, 0x1e, 0x4f, 0x70, 0x65, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x57, 0x69, 0x74, 0x68, 0x4b, 0x65, 0x65, 0x70, - 0x41, 0x6c, 0x69, 0x76, 0x65, 0x12, 0x38, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x57, 0x69, 0x74, 0x68, 0x4b, - 0x65, 0x65, 0x70, 0x41, 0x6c, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x39, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, - 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x57, 0x69, 0x74, 0x68, 0x4b, 0x65, 0x65, 0x70, 0x41, 0x6c, 0x69, - 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x5f, - 0x0a, 0x0c, 0x50, 0x6f, 0x6c, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x26, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, - 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x6c, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x5d, 0x0a, 0x0b, 0x41, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x25, + 0x6d, 0x70, 0x22, 0xbb, 0x02, 0x0a, 0x0e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x6f, + 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x3a, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x42, 0x0a, 0xba, + 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, + 0x6e, 0x12, 0x47, 0x0a, 0x08, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, + 0x52, 0x08, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, + 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, + 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, + 0x53, 0x0a, 0x0e, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x7a, 0x76, 0x6f, 0x75, 0x73, 0x5f, 0x6b, 0x65, + 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6e, 0x64, + 0x65, 0x7a, 0x76, 0x6f, 0x75, 0x73, 0x4b, 0x65, 0x79, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, + 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x7a, 0x76, 0x6f, 0x75, + 0x73, 0x4b, 0x65, 0x79, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, + 0x22, 0x5b, 0x0a, 0x13, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, + 0x65, 0x64, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x44, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xb2, 0x01, 0x02, + 0x08, 0x01, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xfc, 0x01, + 0x0a, 0x0f, 0x41, 0x69, 0x72, 0x64, 0x72, 0x6f, 0x70, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, + 0x64, 0x12, 0x4f, 0x0a, 0x0c, 0x61, 0x69, 0x72, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x69, + 0x72, 0x64, 0x72, 0x6f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, + 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x0b, 0x61, 0x69, 0x72, 0x64, 0x72, 0x6f, 0x70, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x52, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x42, 0x0a, 0xba, 0xe9, + 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0c, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x44, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xb2, 0x01, 0x02, 0x08, + 0x01, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xc2, 0x07, 0x0a, + 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x38, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x00, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x6a, 0x0a, 0x1e, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, + 0x00, 0x52, 0x1b, 0x73, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x57, + 0x0a, 0x14, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x6f, 0x5f, 0x67, 0x72, 0x61, + 0x62, 0x5f, 0x62, 0x69, 0x6c, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, + 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x6f, 0x47, 0x72, 0x61, 0x62, 0x42, 0x69, + 0x6c, 0x6c, 0x48, 0x00, 0x52, 0x11, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x6f, 0x47, + 0x72, 0x61, 0x62, 0x42, 0x69, 0x6c, 0x6c, 0x12, 0x60, 0x0a, 0x17, 0x72, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x5f, 0x74, 0x6f, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x5f, 0x62, 0x69, + 0x6c, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x54, 0x6f, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x42, 0x69, 0x6c, + 0x6c, 0x48, 0x00, 0x52, 0x14, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x6f, 0x52, 0x65, + 0x63, 0x65, 0x69, 0x76, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x12, 0x43, 0x0a, 0x0c, 0x63, 0x6f, 0x64, + 0x65, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, + 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x48, + 0x00, 0x52, 0x0b, 0x63, 0x6f, 0x64, 0x65, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x12, 0x62, + 0x0a, 0x17, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, + 0x64, 0x5f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x28, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, + 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, + 0x65, 0x64, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x15, 0x63, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x12, 0x4f, 0x0a, 0x10, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x75, 0x62, + 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, + 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, + 0x48, 0x00, 0x52, 0x0f, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, + 0x74, 0x65, 0x64, 0x12, 0x49, 0x0a, 0x0e, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x63, + 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, + 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x48, 0x00, 0x52, + 0x0d, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x4d, + 0x0a, 0x10, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x6f, 0x5f, 0x6c, 0x6f, 0x67, + 0x69, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x54, 0x6f, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x48, 0x00, 0x52, 0x0e, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x6f, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x5c, 0x0a, + 0x15, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, + 0x5f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, + 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4c, + 0x6f, 0x67, 0x69, 0x6e, 0x48, 0x00, 0x52, 0x13, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, + 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x4f, 0x0a, 0x10, 0x61, + 0x69, 0x72, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x69, 0x72, 0x64, 0x72, 0x6f, + 0x70, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0f, 0x61, 0x69, 0x72, + 0x64, 0x72, 0x6f, 0x70, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x42, 0x0d, 0x0a, 0x04, + 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x4a, 0x04, 0x08, 0x0b, 0x10, + 0x0c, 0x32, 0xb7, 0x04, 0x0a, 0x09, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x12, + 0x70, 0x0a, 0x11, 0x4f, 0x70, 0x65, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x12, 0x2b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, + 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, + 0x01, 0x12, 0x99, 0x01, 0x0a, 0x1e, 0x4f, 0x70, 0x65, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x57, 0x69, 0x74, 0x68, 0x4b, 0x65, 0x65, 0x70, 0x41, + 0x6c, 0x69, 0x76, 0x65, 0x12, 0x38, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x57, 0x69, 0x74, 0x68, 0x4b, 0x65, + 0x65, 0x70, 0x41, 0x6c, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, - 0x76, 0x31, 0x2e, 0x41, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, + 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x57, 0x69, 0x74, 0x68, 0x4b, 0x65, 0x65, 0x70, 0x41, 0x6c, 0x69, 0x76, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x5f, 0x0a, + 0x0c, 0x50, 0x6f, 0x6c, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x26, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, + 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x6b, 0x4d, 0x65, 0x73, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5c, - 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x25, 0x2e, + 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x6c, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, + 0x0a, 0x0b, 0x41, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x7f, 0x0a, 0x1c, - 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x63, 0x2e, 0x67, 0x65, 0x6e, 0x2e, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x5a, 0x4e, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x61, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x64, 0x2f, 0x67, 0x6f, 0x2f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2f, - 0x76, 0x31, 0x3b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0xa2, 0x02, 0x0e, 0x43, - 0x50, 0x42, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x56, 0x31, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x31, 0x2e, 0x41, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5c, 0x0a, + 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x25, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, + 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x7f, 0x0a, 0x1c, 0x63, + 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x63, 0x2e, 0x67, 0x65, 0x6e, 0x2e, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x5a, 0x4e, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x61, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x64, 0x2f, 0x67, 0x6f, 0x2f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2f, 0x76, + 0x31, 0x3b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0xa2, 0x02, 0x0e, 0x43, 0x50, + 0x42, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2119,7 +1994,7 @@ func file_messaging_v1_messaging_service_proto_rawDescGZIP() []byte { } var file_messaging_v1_messaging_service_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_messaging_v1_messaging_service_proto_msgTypes = make([]protoimpl.MessageInfo, 24) +var file_messaging_v1_messaging_service_proto_msgTypes = make([]protoimpl.MessageInfo, 22) var file_messaging_v1_messaging_service_proto_goTypes = []interface{}{ (AckMesssagesResponse_Result)(0), // 0: code.messaging.v1.AckMesssagesResponse.Result (SendMessageResponse_Result)(0), // 1: code.messaging.v1.SendMessageResponse.Result @@ -2145,9 +2020,9 @@ var file_messaging_v1_messaging_service_proto_goTypes = []interface{}{ (*ClientRejectedLogin)(nil), // 21: code.messaging.v1.ClientRejectedLogin (*AirdropReceived)(nil), // 22: code.messaging.v1.AirdropReceived (*Message)(nil), // 23: code.messaging.v1.Message - (*ServerPing)(nil), // 24: code.messaging.v1.ServerPing - (*ClientPong)(nil), // 25: code.messaging.v1.ClientPong - (*v1.Signature)(nil), // 26: code.common.v1.Signature + (*v1.Signature)(nil), // 24: code.common.v1.Signature + (*v1.ClientPong)(nil), // 25: code.common.v1.ClientPong + (*v1.ServerPing)(nil), // 26: code.common.v1.ServerPing (*v1.SolanaAccountId)(nil), // 27: code.common.v1.SolanaAccountId (*v2.ExchangeData)(nil), // 28: code.transaction.v2.ExchangeData (*v2.ExchangeDataWithoutRate)(nil), // 29: code.transaction.v2.ExchangeDataWithoutRate @@ -2157,25 +2032,24 @@ var file_messaging_v1_messaging_service_proto_goTypes = []interface{}{ (*v1.IntentId)(nil), // 33: code.common.v1.IntentId (*v2.Metadata)(nil), // 34: code.transaction.v2.Metadata (v2.AirdropType)(0), // 35: code.transaction.v2.AirdropType - (*durationpb.Duration)(nil), // 36: google.protobuf.Duration } var file_messaging_v1_messaging_service_proto_depIdxs = []int32{ 12, // 0: code.messaging.v1.OpenMessageStreamRequest.rendezvous_key:type_name -> code.messaging.v1.RendezvousKey - 26, // 1: code.messaging.v1.OpenMessageStreamRequest.signature:type_name -> code.common.v1.Signature + 24, // 1: code.messaging.v1.OpenMessageStreamRequest.signature:type_name -> code.common.v1.Signature 23, // 2: code.messaging.v1.OpenMessageStreamResponse.messages:type_name -> code.messaging.v1.Message 2, // 3: code.messaging.v1.OpenMessageStreamWithKeepAliveRequest.request:type_name -> code.messaging.v1.OpenMessageStreamRequest - 25, // 4: code.messaging.v1.OpenMessageStreamWithKeepAliveRequest.pong:type_name -> code.messaging.v1.ClientPong + 25, // 4: code.messaging.v1.OpenMessageStreamWithKeepAliveRequest.pong:type_name -> code.common.v1.ClientPong 3, // 5: code.messaging.v1.OpenMessageStreamWithKeepAliveResponse.response:type_name -> code.messaging.v1.OpenMessageStreamResponse - 24, // 6: code.messaging.v1.OpenMessageStreamWithKeepAliveResponse.ping:type_name -> code.messaging.v1.ServerPing + 26, // 6: code.messaging.v1.OpenMessageStreamWithKeepAliveResponse.ping:type_name -> code.common.v1.ServerPing 12, // 7: code.messaging.v1.PollMessagesRequest.rendezvous_key:type_name -> code.messaging.v1.RendezvousKey - 26, // 8: code.messaging.v1.PollMessagesRequest.signature:type_name -> code.common.v1.Signature + 24, // 8: code.messaging.v1.PollMessagesRequest.signature:type_name -> code.common.v1.Signature 23, // 9: code.messaging.v1.PollMessagesResponse.messages:type_name -> code.messaging.v1.Message 12, // 10: code.messaging.v1.AckMessagesRequest.rendezvous_key:type_name -> code.messaging.v1.RendezvousKey 13, // 11: code.messaging.v1.AckMessagesRequest.message_ids:type_name -> code.messaging.v1.MessageId 0, // 12: code.messaging.v1.AckMesssagesResponse.result:type_name -> code.messaging.v1.AckMesssagesResponse.Result 23, // 13: code.messaging.v1.SendMessageRequest.message:type_name -> code.messaging.v1.Message 12, // 14: code.messaging.v1.SendMessageRequest.rendezvous_key:type_name -> code.messaging.v1.RendezvousKey - 26, // 15: code.messaging.v1.SendMessageRequest.signature:type_name -> code.common.v1.Signature + 24, // 15: code.messaging.v1.SendMessageRequest.signature:type_name -> code.common.v1.Signature 1, // 16: code.messaging.v1.SendMessageResponse.result:type_name -> code.messaging.v1.SendMessageResponse.Result 13, // 17: code.messaging.v1.SendMessageResponse.message_id:type_name -> code.messaging.v1.MessageId 27, // 18: code.messaging.v1.RequestToGrabBill.requestor_account:type_name -> code.common.v1.SolanaAccountId @@ -2184,7 +2058,7 @@ var file_messaging_v1_messaging_service_proto_depIdxs = []int32{ 29, // 21: code.messaging.v1.RequestToReceiveBill.partial:type_name -> code.transaction.v2.ExchangeDataWithoutRate 30, // 22: code.messaging.v1.RequestToReceiveBill.domain:type_name -> code.common.v1.Domain 27, // 23: code.messaging.v1.RequestToReceiveBill.verifier:type_name -> code.common.v1.SolanaAccountId - 26, // 24: code.messaging.v1.RequestToReceiveBill.signature:type_name -> code.common.v1.Signature + 24, // 24: code.messaging.v1.RequestToReceiveBill.signature:type_name -> code.common.v1.Signature 12, // 25: code.messaging.v1.RequestToReceiveBill.rendezvous_key:type_name -> code.messaging.v1.RendezvousKey 31, // 26: code.messaging.v1.RequestToReceiveBill.additional_fees:type_name -> code.transaction.v2.AdditionalFeePayment 32, // 27: code.messaging.v1.CodeScanned.timestamp:type_name -> google.protobuf.Timestamp @@ -2194,14 +2068,14 @@ var file_messaging_v1_messaging_service_proto_depIdxs = []int32{ 32, // 31: code.messaging.v1.WebhookCalled.timestamp:type_name -> google.protobuf.Timestamp 30, // 32: code.messaging.v1.RequestToLogin.domain:type_name -> code.common.v1.Domain 27, // 33: code.messaging.v1.RequestToLogin.verifier:type_name -> code.common.v1.SolanaAccountId - 26, // 34: code.messaging.v1.RequestToLogin.signature:type_name -> code.common.v1.Signature + 24, // 34: code.messaging.v1.RequestToLogin.signature:type_name -> code.common.v1.Signature 12, // 35: code.messaging.v1.RequestToLogin.rendezvous_key:type_name -> code.messaging.v1.RendezvousKey 32, // 36: code.messaging.v1.ClientRejectedLogin.timestamp:type_name -> google.protobuf.Timestamp 35, // 37: code.messaging.v1.AirdropReceived.airdrop_type:type_name -> code.transaction.v2.AirdropType 28, // 38: code.messaging.v1.AirdropReceived.exchange_data:type_name -> code.transaction.v2.ExchangeData 32, // 39: code.messaging.v1.AirdropReceived.timestamp:type_name -> google.protobuf.Timestamp 13, // 40: code.messaging.v1.Message.id:type_name -> code.messaging.v1.MessageId - 26, // 41: code.messaging.v1.Message.send_message_request_signature:type_name -> code.common.v1.Signature + 24, // 41: code.messaging.v1.Message.send_message_request_signature:type_name -> code.common.v1.Signature 14, // 42: code.messaging.v1.Message.request_to_grab_bill:type_name -> code.messaging.v1.RequestToGrabBill 15, // 43: code.messaging.v1.Message.request_to_receive_bill:type_name -> code.messaging.v1.RequestToReceiveBill 16, // 44: code.messaging.v1.Message.code_scanned:type_name -> code.messaging.v1.CodeScanned @@ -2211,24 +2085,21 @@ var file_messaging_v1_messaging_service_proto_depIdxs = []int32{ 20, // 48: code.messaging.v1.Message.request_to_login:type_name -> code.messaging.v1.RequestToLogin 21, // 49: code.messaging.v1.Message.client_rejected_login:type_name -> code.messaging.v1.ClientRejectedLogin 22, // 50: code.messaging.v1.Message.airdrop_received:type_name -> code.messaging.v1.AirdropReceived - 32, // 51: code.messaging.v1.ServerPing.timestamp:type_name -> google.protobuf.Timestamp - 36, // 52: code.messaging.v1.ServerPing.ping_delay:type_name -> google.protobuf.Duration - 32, // 53: code.messaging.v1.ClientPong.timestamp:type_name -> google.protobuf.Timestamp - 2, // 54: code.messaging.v1.Messaging.OpenMessageStream:input_type -> code.messaging.v1.OpenMessageStreamRequest - 4, // 55: code.messaging.v1.Messaging.OpenMessageStreamWithKeepAlive:input_type -> code.messaging.v1.OpenMessageStreamWithKeepAliveRequest - 6, // 56: code.messaging.v1.Messaging.PollMessages:input_type -> code.messaging.v1.PollMessagesRequest - 8, // 57: code.messaging.v1.Messaging.AckMessages:input_type -> code.messaging.v1.AckMessagesRequest - 10, // 58: code.messaging.v1.Messaging.SendMessage:input_type -> code.messaging.v1.SendMessageRequest - 3, // 59: code.messaging.v1.Messaging.OpenMessageStream:output_type -> code.messaging.v1.OpenMessageStreamResponse - 5, // 60: code.messaging.v1.Messaging.OpenMessageStreamWithKeepAlive:output_type -> code.messaging.v1.OpenMessageStreamWithKeepAliveResponse - 7, // 61: code.messaging.v1.Messaging.PollMessages:output_type -> code.messaging.v1.PollMessagesResponse - 9, // 62: code.messaging.v1.Messaging.AckMessages:output_type -> code.messaging.v1.AckMesssagesResponse - 11, // 63: code.messaging.v1.Messaging.SendMessage:output_type -> code.messaging.v1.SendMessageResponse - 59, // [59:64] is the sub-list for method output_type - 54, // [54:59] is the sub-list for method input_type - 54, // [54:54] is the sub-list for extension type_name - 54, // [54:54] is the sub-list for extension extendee - 0, // [0:54] is the sub-list for field type_name + 2, // 51: code.messaging.v1.Messaging.OpenMessageStream:input_type -> code.messaging.v1.OpenMessageStreamRequest + 4, // 52: code.messaging.v1.Messaging.OpenMessageStreamWithKeepAlive:input_type -> code.messaging.v1.OpenMessageStreamWithKeepAliveRequest + 6, // 53: code.messaging.v1.Messaging.PollMessages:input_type -> code.messaging.v1.PollMessagesRequest + 8, // 54: code.messaging.v1.Messaging.AckMessages:input_type -> code.messaging.v1.AckMessagesRequest + 10, // 55: code.messaging.v1.Messaging.SendMessage:input_type -> code.messaging.v1.SendMessageRequest + 3, // 56: code.messaging.v1.Messaging.OpenMessageStream:output_type -> code.messaging.v1.OpenMessageStreamResponse + 5, // 57: code.messaging.v1.Messaging.OpenMessageStreamWithKeepAlive:output_type -> code.messaging.v1.OpenMessageStreamWithKeepAliveResponse + 7, // 58: code.messaging.v1.Messaging.PollMessages:output_type -> code.messaging.v1.PollMessagesResponse + 9, // 59: code.messaging.v1.Messaging.AckMessages:output_type -> code.messaging.v1.AckMesssagesResponse + 11, // 60: code.messaging.v1.Messaging.SendMessage:output_type -> code.messaging.v1.SendMessageResponse + 56, // [56:61] is the sub-list for method output_type + 51, // [51:56] is the sub-list for method input_type + 51, // [51:51] is the sub-list for extension type_name + 51, // [51:51] is the sub-list for extension extendee + 0, // [0:51] is the sub-list for field type_name } func init() { file_messaging_v1_messaging_service_proto_init() } @@ -2501,30 +2372,6 @@ func file_messaging_v1_messaging_service_proto_init() { return nil } } - file_messaging_v1_messaging_service_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServerPing); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_messaging_v1_messaging_service_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClientPong); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } } file_messaging_v1_messaging_service_proto_msgTypes[2].OneofWrappers = []interface{}{ (*OpenMessageStreamWithKeepAliveRequest_Request)(nil), @@ -2555,7 +2402,7 @@ func file_messaging_v1_messaging_service_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_messaging_v1_messaging_service_proto_rawDesc, NumEnums: 2, - NumMessages: 24, + NumMessages: 22, NumExtensions: 0, NumServices: 1, }, diff --git a/generated/go/messaging/v1/messaging_service.pb.validate.go b/generated/go/messaging/v1/messaging_service.pb.validate.go index 19dd2ed..3b14a85 100644 --- a/generated/go/messaging/v1/messaging_service.pb.validate.go +++ b/generated/go/messaging/v1/messaging_service.pb.validate.go @@ -2221,152 +2221,3 @@ var _ interface { Cause() error ErrorName() string } = MessageValidationError{} - -// Validate checks the field values on ServerPing with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. -func (m *ServerPing) Validate() error { - if m == nil { - return nil - } - - if m.GetTimestamp() == nil { - return ServerPingValidationError{ - field: "Timestamp", - reason: "value is required", - } - } - - if m.GetPingDelay() == nil { - return ServerPingValidationError{ - field: "PingDelay", - reason: "value is required", - } - } - - return nil -} - -// ServerPingValidationError is the validation error returned by -// ServerPing.Validate if the designated constraints aren't met. -type ServerPingValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e ServerPingValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e ServerPingValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e ServerPingValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e ServerPingValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e ServerPingValidationError) ErrorName() string { return "ServerPingValidationError" } - -// Error satisfies the builtin error interface -func (e ServerPingValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sServerPing.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = ServerPingValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = ServerPingValidationError{} - -// Validate checks the field values on ClientPong with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. -func (m *ClientPong) Validate() error { - if m == nil { - return nil - } - - if m.GetTimestamp() == nil { - return ClientPongValidationError{ - field: "Timestamp", - reason: "value is required", - } - } - - return nil -} - -// ClientPongValidationError is the validation error returned by -// ClientPong.Validate if the designated constraints aren't met. -type ClientPongValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e ClientPongValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e ClientPongValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e ClientPongValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e ClientPongValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e ClientPongValidationError) ErrorName() string { return "ClientPongValidationError" } - -// Error satisfies the builtin error interface -func (e ClientPongValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sClientPong.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = ClientPongValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = ClientPongValidationError{} diff --git a/generated/protobuf-es/chat/v1/chat_service_connect.ts b/generated/protobuf-es/chat/v1/chat_service_connect.ts index 967554f..886e2d7 100644 --- a/generated/protobuf-es/chat/v1/chat_service_connect.ts +++ b/generated/protobuf-es/chat/v1/chat_service_connect.ts @@ -3,7 +3,7 @@ /* eslint-disable */ // @ts-nocheck -import { AdvancePointerRequest, AdvancePointerResponse, GetChatsRequest, GetChatsResponse, GetMessagesRequest, GetMessagesResponse, SetMuteStateRequest, SetMuteStateResponse, SetSubscriptionStateRequest, SetSubscriptionStateResponse } from "./chat_service_pb"; +import { AdvancePointerRequest, AdvancePointerResponse, GetChatsRequest, GetChatsResponse, GetMessagesRequest, GetMessagesResponse, SendMessageRequest, SendMessageResponse, SetMuteStateRequest, SetMuteStateResponse, SetSubscriptionStateRequest, SetSubscriptionStateResponse, StreamChatEventsRequest, StreamChatEventsResponse } from "./chat_service_pb"; import { MethodKind } from "@bufbuild/protobuf"; /** @@ -67,6 +67,24 @@ export const Chat = { O: SetSubscriptionStateResponse, kind: MethodKind.Unary, }, + /** + * @generated from rpc code.chat.v1.Chat.StreamChatEvents + */ + streamChatEvents: { + name: "StreamChatEvents", + I: StreamChatEventsRequest, + O: StreamChatEventsResponse, + kind: MethodKind.BiDiStreaming, + }, + /** + * @generated from rpc code.chat.v1.Chat.SendMessage + */ + sendMessage: { + name: "SendMessage", + I: SendMessageRequest, + O: SendMessageResponse, + kind: MethodKind.Unary, + }, } } as const; diff --git a/generated/protobuf-es/chat/v1/chat_service_pb.ts b/generated/protobuf-es/chat/v1/chat_service_pb.ts index d271301..f27b39e 100644 --- a/generated/protobuf-es/chat/v1/chat_service_pb.ts +++ b/generated/protobuf-es/chat/v1/chat_service_pb.ts @@ -5,7 +5,7 @@ import type { BinaryReadOptions, FieldList, JsonReadOptions, JsonValue, PartialMessage, PlainMessage } from "@bufbuild/protobuf"; import { Message, proto3, Timestamp } from "@bufbuild/protobuf"; -import { Domain, Signature, SolanaAccountId } from "../../common/v1/model_pb"; +import { ClientPong, Domain, ServerPing, Signature, SolanaAccountId } from "../../common/v1/model_pb"; import { ExchangeData, ExchangeDataWithoutRate } from "../../transaction/v2/transaction_service_pb"; /** @@ -656,6 +656,349 @@ proto3.util.setEnumType(SetSubscriptionStateResponse_Result, "code.chat.v1.SetSu { no: 2, name: "CANT_UNSUBSCRIBE" }, ]); +/** + * @generated from message code.chat.v1.OpenChatEventStream + */ +export class OpenChatEventStream extends Message { + /** + * @generated from field: code.chat.v1.ChatId chat_id = 1; + */ + chatId?: ChatId; + + /** + * @generated from field: code.common.v1.SolanaAccountId owner = 2; + */ + owner?: SolanaAccountId; + + /** + * @generated from field: code.common.v1.Signature signature = 3; + */ + signature?: Signature; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "code.chat.v1.OpenChatEventStream"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "chat_id", kind: "message", T: ChatId }, + { no: 2, name: "owner", kind: "message", T: SolanaAccountId }, + { no: 3, name: "signature", kind: "message", T: Signature }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): OpenChatEventStream { + return new OpenChatEventStream().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): OpenChatEventStream { + return new OpenChatEventStream().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): OpenChatEventStream { + return new OpenChatEventStream().fromJsonString(jsonString, options); + } + + static equals(a: OpenChatEventStream | PlainMessage | undefined, b: OpenChatEventStream | PlainMessage | undefined): boolean { + return proto3.util.equals(OpenChatEventStream, a, b); + } +} + +/** + * @generated from message code.chat.v1.ChatStreamEvent + */ +export class ChatStreamEvent extends Message { + /** + * @generated from field: repeated code.chat.v1.ChatMessage messages = 1; + */ + messages: ChatMessage[] = []; + + /** + * @generated from field: repeated code.chat.v1.Pointer pointers = 2; + */ + pointers: Pointer[] = []; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "code.chat.v1.ChatStreamEvent"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "messages", kind: "message", T: ChatMessage, repeated: true }, + { no: 2, name: "pointers", kind: "message", T: Pointer, repeated: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ChatStreamEvent { + return new ChatStreamEvent().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ChatStreamEvent { + return new ChatStreamEvent().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ChatStreamEvent { + return new ChatStreamEvent().fromJsonString(jsonString, options); + } + + static equals(a: ChatStreamEvent | PlainMessage | undefined, b: ChatStreamEvent | PlainMessage | undefined): boolean { + return proto3.util.equals(ChatStreamEvent, a, b); + } +} + +/** + * @generated from message code.chat.v1.ChatStreamEventBatch + */ +export class ChatStreamEventBatch extends Message { + /** + * @generated from field: repeated code.chat.v1.ChatStreamEvent events = 2; + */ + events: ChatStreamEvent[] = []; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "code.chat.v1.ChatStreamEventBatch"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 2, name: "events", kind: "message", T: ChatStreamEvent, repeated: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ChatStreamEventBatch { + return new ChatStreamEventBatch().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ChatStreamEventBatch { + return new ChatStreamEventBatch().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ChatStreamEventBatch { + return new ChatStreamEventBatch().fromJsonString(jsonString, options); + } + + static equals(a: ChatStreamEventBatch | PlainMessage | undefined, b: ChatStreamEventBatch | PlainMessage | undefined): boolean { + return proto3.util.equals(ChatStreamEventBatch, a, b); + } +} + +/** + * @generated from message code.chat.v1.StreamChatEventsRequest + */ +export class StreamChatEventsRequest extends Message { + /** + * @generated from oneof code.chat.v1.StreamChatEventsRequest.type + */ + type: { + /** + * @generated from field: code.chat.v1.OpenChatEventStream open_stream = 1; + */ + value: OpenChatEventStream; + case: "openStream"; + } | { + /** + * @generated from field: code.common.v1.ClientPong pong = 2; + */ + value: ClientPong; + case: "pong"; + } | { case: undefined; value?: undefined } = { case: undefined }; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "code.chat.v1.StreamChatEventsRequest"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "open_stream", kind: "message", T: OpenChatEventStream, oneof: "type" }, + { no: 2, name: "pong", kind: "message", T: ClientPong, oneof: "type" }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): StreamChatEventsRequest { + return new StreamChatEventsRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): StreamChatEventsRequest { + return new StreamChatEventsRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): StreamChatEventsRequest { + return new StreamChatEventsRequest().fromJsonString(jsonString, options); + } + + static equals(a: StreamChatEventsRequest | PlainMessage | undefined, b: StreamChatEventsRequest | PlainMessage | undefined): boolean { + return proto3.util.equals(StreamChatEventsRequest, a, b); + } +} + +/** + * @generated from message code.chat.v1.StreamChatEventsResponse + */ +export class StreamChatEventsResponse extends Message { + /** + * @generated from oneof code.chat.v1.StreamChatEventsResponse.type + */ + type: { + /** + * @generated from field: code.chat.v1.ChatStreamEventBatch events = 1; + */ + value: ChatStreamEventBatch; + case: "events"; + } | { + /** + * @generated from field: code.common.v1.ServerPing ping = 2; + */ + value: ServerPing; + case: "ping"; + } | { case: undefined; value?: undefined } = { case: undefined }; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "code.chat.v1.StreamChatEventsResponse"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "events", kind: "message", T: ChatStreamEventBatch, oneof: "type" }, + { no: 2, name: "ping", kind: "message", T: ServerPing, oneof: "type" }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): StreamChatEventsResponse { + return new StreamChatEventsResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): StreamChatEventsResponse { + return new StreamChatEventsResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): StreamChatEventsResponse { + return new StreamChatEventsResponse().fromJsonString(jsonString, options); + } + + static equals(a: StreamChatEventsResponse | PlainMessage | undefined, b: StreamChatEventsResponse | PlainMessage | undefined): boolean { + return proto3.util.equals(StreamChatEventsResponse, a, b); + } +} + +/** + * @generated from message code.chat.v1.SendMessageRequest + */ +export class SendMessageRequest extends Message { + /** + * @generated from field: code.common.v1.SolanaAccountId owner = 1; + */ + owner?: SolanaAccountId; + + /** + * @generated from field: code.common.v1.Signature signature = 2; + */ + signature?: Signature; + + /** + * @generated from field: code.chat.v1.ChatId chat_id = 3; + */ + chatId?: ChatId; + + /** + * todo: What field type should this be? Maybe the chat message itself with fields missing? + * + * @generated from field: repeated code.chat.v1.Content content = 4; + */ + content: Content[] = []; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "code.chat.v1.SendMessageRequest"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "owner", kind: "message", T: SolanaAccountId }, + { no: 2, name: "signature", kind: "message", T: Signature }, + { no: 3, name: "chat_id", kind: "message", T: ChatId }, + { no: 4, name: "content", kind: "message", T: Content, repeated: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SendMessageRequest { + return new SendMessageRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SendMessageRequest { + return new SendMessageRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SendMessageRequest { + return new SendMessageRequest().fromJsonString(jsonString, options); + } + + static equals(a: SendMessageRequest | PlainMessage | undefined, b: SendMessageRequest | PlainMessage | undefined): boolean { + return proto3.util.equals(SendMessageRequest, a, b); + } +} + +/** + * @generated from message code.chat.v1.SendMessageResponse + */ +export class SendMessageResponse extends Message { + /** + * @generated from field: code.chat.v1.SendMessageResponse.Result result = 1; + */ + result = SendMessageResponse_Result.OK; + + /** + * @generated from field: code.chat.v1.ChatMessage message = 2; + */ + message?: ChatMessage; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "code.chat.v1.SendMessageResponse"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "result", kind: "enum", T: proto3.getEnumType(SendMessageResponse_Result) }, + { no: 2, name: "message", kind: "message", T: ChatMessage }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SendMessageResponse { + return new SendMessageResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SendMessageResponse { + return new SendMessageResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SendMessageResponse { + return new SendMessageResponse().fromJsonString(jsonString, options); + } + + static equals(a: SendMessageResponse | PlainMessage | undefined, b: SendMessageResponse | PlainMessage | undefined): boolean { + return proto3.util.equals(SendMessageResponse, a, b); + } +} + +/** + * @generated from enum code.chat.v1.SendMessageResponse.Result + */ +export enum SendMessageResponse_Result { + /** + * @generated from enum value: OK = 0; + */ + OK = 0, +} +// Retrieve enum metadata with: proto3.getEnumType(SendMessageResponse_Result) +proto3.util.setEnumType(SendMessageResponse_Result, "code.chat.v1.SendMessageResponse.Result", [ + { no: 0, name: "OK" }, +]); + /** * @generated from message code.chat.v1.ChatId */ @@ -730,6 +1073,45 @@ export class ChatMessageId extends Message { } } +/** + * @generated from message code.chat.v1.ChatMemberId + */ +export class ChatMemberId extends Message { + /** + * todo: Public key for now + * + * @generated from field: bytes value = 1; + */ + value = new Uint8Array(0); + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "code.chat.v1.ChatMemberId"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "value", kind: "scalar", T: 12 /* ScalarType.BYTES */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ChatMemberId { + return new ChatMemberId().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ChatMemberId { + return new ChatMemberId().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ChatMemberId { + return new ChatMemberId().fromJsonString(jsonString, options); + } + + static equals(a: ChatMemberId | PlainMessage | undefined, b: ChatMemberId | PlainMessage | undefined): boolean { + return proto3.util.equals(ChatMemberId, a, b); + } +} + /** * @generated from message code.chat.v1.Pointer */ @@ -744,6 +1126,11 @@ export class Pointer extends Message { */ value?: ChatMessageId; + /** + * @generated from field: code.chat.v1.ChatMemberId user = 3; + */ + user?: ChatMemberId; + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); @@ -754,6 +1141,7 @@ export class Pointer extends Message { static readonly fields: FieldList = proto3.util.newFieldList(() => [ { no: 1, name: "kind", kind: "enum", T: proto3.getEnumType(Pointer_Kind) }, { no: 2, name: "value", kind: "message", T: ChatMessageId }, + { no: 3, name: "user", kind: "message", T: ChatMemberId }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): Pointer { @@ -786,11 +1174,25 @@ export enum Pointer_Kind { * @generated from enum value: READ = 1; */ READ = 1, + + /** + * @generated from enum value: DELIVERED = 2; + */ + DELIVERED = 2, + + /** + * Probably always inferred by OK result in SendMessageResponse + * + * @generated from enum value: SENT = 3; + */ + SENT = 3, } // Retrieve enum metadata with: proto3.getEnumType(Pointer_Kind) proto3.util.setEnumType(Pointer_Kind, "code.chat.v1.Pointer.Kind", [ { no: 0, name: "UNKNOWN" }, { no: 1, name: "READ" }, + { no: 2, name: "DELIVERED" }, + { no: 3, name: "SENT" }, ]); /** @@ -809,9 +1211,9 @@ export class ChatMetadata extends Message { */ title: { /** - * @generated from field: code.chat.v1.LocalizedContent localized = 2; + * @generated from field: code.chat.v1.ServerLocalizedContent localized = 2; */ - value: LocalizedContent; + value: ServerLocalizedContent; case: "localized"; } | { /** @@ -889,7 +1291,7 @@ export class ChatMetadata extends Message { static readonly typeName = "code.chat.v1.ChatMetadata"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ { no: 1, name: "chat_id", kind: "message", T: ChatId }, - { no: 2, name: "localized", kind: "message", T: LocalizedContent, oneof: "title" }, + { no: 2, name: "localized", kind: "message", T: ServerLocalizedContent, oneof: "title" }, { no: 3, name: "domain", kind: "message", T: Domain, oneof: "title" }, { no: 4, name: "read_pointer", kind: "message", T: Pointer }, { no: 5, name: "num_unread", kind: "scalar", T: 13 /* ScalarType.UINT32 */ }, @@ -950,6 +1352,11 @@ export class ChatMessage extends Message { */ cursor?: Cursor; + /** + * @generated from field: code.chat.v1.ChatMemberId sender = 5; + */ + sender?: ChatMemberId; + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); @@ -962,6 +1369,7 @@ export class ChatMessage extends Message { { no: 2, name: "ts", kind: "message", T: Timestamp }, { no: 3, name: "content", kind: "message", T: Content, repeated: true }, { no: 4, name: "cursor", kind: "message", T: Cursor }, + { no: 5, name: "sender", kind: "message", T: ChatMemberId }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): ChatMessage { @@ -990,10 +1398,10 @@ export class Content extends Message { */ type: { /** - * @generated from field: code.chat.v1.LocalizedContent localized = 1; + * @generated from field: code.chat.v1.ServerLocalizedContent server_localized = 1; */ - value: LocalizedContent; - case: "localized"; + value: ServerLocalizedContent; + case: "serverLocalized"; } | { /** * @generated from field: code.chat.v1.ExchangeDataContent exchange_data = 2; @@ -1006,6 +1414,12 @@ export class Content extends Message { */ value: NaclBoxEncryptedContent; case: "naclBox"; + } | { + /** + * @generated from field: code.chat.v1.UserTextContent user_text = 4; + */ + value: UserTextContent; + case: "userText"; } | { case: undefined; value?: undefined } = { case: undefined }; constructor(data?: PartialMessage) { @@ -1016,9 +1430,10 @@ export class Content extends Message { static readonly runtime: typeof proto3 = proto3; static readonly typeName = "code.chat.v1.Content"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "localized", kind: "message", T: LocalizedContent, oneof: "type" }, + { no: 1, name: "server_localized", kind: "message", T: ServerLocalizedContent, oneof: "type" }, { no: 2, name: "exchange_data", kind: "message", T: ExchangeDataContent, oneof: "type" }, { no: 3, name: "nacl_box", kind: "message", T: NaclBoxEncryptedContent, oneof: "type" }, + { no: 4, name: "user_text", kind: "message", T: UserTextContent, oneof: "type" }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): Content { @@ -1039,9 +1454,9 @@ export class Content extends Message { } /** - * @generated from message code.chat.v1.LocalizedContent + * @generated from message code.chat.v1.ServerLocalizedContent */ -export class LocalizedContent extends Message { +export class ServerLocalizedContent extends Message { /** * When server-side localization is in place, clients will always see the * localized text. @@ -1050,31 +1465,31 @@ export class LocalizedContent extends Message { */ keyOrText = ""; - constructor(data?: PartialMessage) { + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); } static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "code.chat.v1.LocalizedContent"; + static readonly typeName = "code.chat.v1.ServerLocalizedContent"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ { no: 1, name: "key_or_text", kind: "scalar", T: 9 /* ScalarType.STRING */ }, ]); - static fromBinary(bytes: Uint8Array, options?: Partial): LocalizedContent { - return new LocalizedContent().fromBinary(bytes, options); + static fromBinary(bytes: Uint8Array, options?: Partial): ServerLocalizedContent { + return new ServerLocalizedContent().fromBinary(bytes, options); } - static fromJson(jsonValue: JsonValue, options?: Partial): LocalizedContent { - return new LocalizedContent().fromJson(jsonValue, options); + static fromJson(jsonValue: JsonValue, options?: Partial): ServerLocalizedContent { + return new ServerLocalizedContent().fromJson(jsonValue, options); } - static fromJsonString(jsonString: string, options?: Partial): LocalizedContent { - return new LocalizedContent().fromJsonString(jsonString, options); + static fromJsonString(jsonString: string, options?: Partial): ServerLocalizedContent { + return new ServerLocalizedContent().fromJsonString(jsonString, options); } - static equals(a: LocalizedContent | PlainMessage | undefined, b: LocalizedContent | PlainMessage | undefined): boolean { - return proto3.util.equals(LocalizedContent, a, b); + static equals(a: ServerLocalizedContent | PlainMessage | undefined, b: ServerLocalizedContent | PlainMessage | undefined): boolean { + return proto3.util.equals(ServerLocalizedContent, a, b); } } @@ -1263,6 +1678,43 @@ export class NaclBoxEncryptedContent extends Message { } } +/** + * @generated from message code.chat.v1.UserTextContent + */ +export class UserTextContent extends Message { + /** + * @generated from field: string text = 1; + */ + text = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "code.chat.v1.UserTextContent"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "text", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): UserTextContent { + return new UserTextContent().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): UserTextContent { + return new UserTextContent().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): UserTextContent { + return new UserTextContent().fromJsonString(jsonString, options); + } + + static equals(a: UserTextContent | PlainMessage | undefined, b: UserTextContent | PlainMessage | undefined): boolean { + return proto3.util.equals(UserTextContent, a, b); + } +} + /** * Opaque cursor used across paged APIs. Underlying bytes may change as paging * strategies evolve. diff --git a/generated/protobuf-es/common/v1/model_pb.ts b/generated/protobuf-es/common/v1/model_pb.ts index a73e784..51b4ba9 100644 --- a/generated/protobuf-es/common/v1/model_pb.ts +++ b/generated/protobuf-es/common/v1/model_pb.ts @@ -4,7 +4,7 @@ // @ts-nocheck import type { BinaryReadOptions, FieldList, JsonReadOptions, JsonValue, PartialMessage, PlainMessage } from "@bufbuild/protobuf"; -import { Message, proto3 } from "@bufbuild/protobuf"; +import { Duration, Message, proto3, Timestamp } from "@bufbuild/protobuf"; /** * AccountType associates a type to an account, which infers how an account is used @@ -889,3 +889,91 @@ proto3.util.setEnumType(Response_Result, "code.common.v1.Response.Result", [ { no: 1, name: "ERROR" }, ]); +/** + * @generated from message code.common.v1.ServerPing + */ +export class ServerPing extends Message { + /** + * Timestamp the ping was sent on the stream, for client to get a sense + * of potential network latency + * + * @generated from field: google.protobuf.Timestamp timestamp = 1; + */ + timestamp?: Timestamp; + + /** + * The delay server will apply before sending the next ping + * + * @generated from field: google.protobuf.Duration ping_delay = 2; + */ + pingDelay?: Duration; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "code.common.v1.ServerPing"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "timestamp", kind: "message", T: Timestamp }, + { no: 2, name: "ping_delay", kind: "message", T: Duration }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ServerPing { + return new ServerPing().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ServerPing { + return new ServerPing().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ServerPing { + return new ServerPing().fromJsonString(jsonString, options); + } + + static equals(a: ServerPing | PlainMessage | undefined, b: ServerPing | PlainMessage | undefined): boolean { + return proto3.util.equals(ServerPing, a, b); + } +} + +/** + * @generated from message code.common.v1.ClientPong + */ +export class ClientPong extends Message { + /** + * Timestamp the Pong was sent on the stream, for server to get a sense + * of potential network latency + * + * @generated from field: google.protobuf.Timestamp timestamp = 1; + */ + timestamp?: Timestamp; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "code.common.v1.ClientPong"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "timestamp", kind: "message", T: Timestamp }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ClientPong { + return new ClientPong().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ClientPong { + return new ClientPong().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ClientPong { + return new ClientPong().fromJsonString(jsonString, options); + } + + static equals(a: ClientPong | PlainMessage | undefined, b: ClientPong | PlainMessage | undefined): boolean { + return proto3.util.equals(ClientPong, a, b); + } +} + diff --git a/generated/protobuf-es/messaging/v1/messaging_service_pb.ts b/generated/protobuf-es/messaging/v1/messaging_service_pb.ts index 47e427e..470ce93 100644 --- a/generated/protobuf-es/messaging/v1/messaging_service_pb.ts +++ b/generated/protobuf-es/messaging/v1/messaging_service_pb.ts @@ -4,8 +4,8 @@ // @ts-nocheck import type { BinaryReadOptions, FieldList, JsonReadOptions, JsonValue, PartialMessage, PlainMessage } from "@bufbuild/protobuf"; -import { Duration, Message as Message$1, proto3, Timestamp } from "@bufbuild/protobuf"; -import { Domain, IntentId, Signature, SolanaAccountId } from "../../common/v1/model_pb"; +import { Message as Message$1, proto3, Timestamp } from "@bufbuild/protobuf"; +import { ClientPong, Domain, IntentId, ServerPing, Signature, SolanaAccountId } from "../../common/v1/model_pb"; import { AdditionalFeePayment, AirdropType, ExchangeData, ExchangeDataWithoutRate, Metadata } from "../../transaction/v2/transaction_service_pb"; /** @@ -97,7 +97,7 @@ export class OpenMessageStreamResponse extends Message$1 { /** - * @generated from oneof code.messaging.v1.OpenMessageStreamWithKeepAliveRequest.requestOrPong + * @generated from oneof code.messaging.v1.OpenMessageStreamWithKeepAliveRequest.request_or_pong */ requestOrPong: { /** @@ -107,7 +107,7 @@ export class OpenMessageStreamWithKeepAliveRequest extends Message$1 [ - { no: 1, name: "request", kind: "message", T: OpenMessageStreamRequest, oneof: "requestOrPong" }, - { no: 2, name: "pong", kind: "message", T: ClientPong, oneof: "requestOrPong" }, + { no: 1, name: "request", kind: "message", T: OpenMessageStreamRequest, oneof: "request_or_pong" }, + { no: 2, name: "pong", kind: "message", T: ClientPong, oneof: "request_or_pong" }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): OpenMessageStreamWithKeepAliveRequest { @@ -147,7 +147,7 @@ export class OpenMessageStreamWithKeepAliveRequest extends Message$1 { /** - * @generated from oneof code.messaging.v1.OpenMessageStreamWithKeepAliveResponse.responseOrPing + * @generated from oneof code.messaging.v1.OpenMessageStreamWithKeepAliveResponse.response_or_ping */ responseOrPing: { /** @@ -157,7 +157,7 @@ export class OpenMessageStreamWithKeepAliveResponse extends Message$1 [ - { no: 1, name: "response", kind: "message", T: OpenMessageStreamResponse, oneof: "responseOrPing" }, - { no: 2, name: "ping", kind: "message", T: ServerPing, oneof: "responseOrPing" }, + { no: 1, name: "response", kind: "message", T: OpenMessageStreamResponse, oneof: "response_or_ping" }, + { no: 2, name: "ping", kind: "message", T: ServerPing, oneof: "response_or_ping" }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): OpenMessageStreamWithKeepAliveResponse { @@ -1207,91 +1207,3 @@ export class Message extends Message$1 { } } -/** - * @generated from message code.messaging.v1.ServerPing - */ -export class ServerPing extends Message$1 { - /** - * Timestamp the ping was sent on the stream, for client to get a sense - * of potential network latency - * - * @generated from field: google.protobuf.Timestamp timestamp = 1; - */ - timestamp?: Timestamp; - - /** - * The delay server will apply before sending the next ping - * - * @generated from field: google.protobuf.Duration ping_delay = 2; - */ - pingDelay?: Duration; - - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "code.messaging.v1.ServerPing"; - static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "timestamp", kind: "message", T: Timestamp }, - { no: 2, name: "ping_delay", kind: "message", T: Duration }, - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): ServerPing { - return new ServerPing().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): ServerPing { - return new ServerPing().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): ServerPing { - return new ServerPing().fromJsonString(jsonString, options); - } - - static equals(a: ServerPing | PlainMessage | undefined, b: ServerPing | PlainMessage | undefined): boolean { - return proto3.util.equals(ServerPing, a, b); - } -} - -/** - * @generated from message code.messaging.v1.ClientPong - */ -export class ClientPong extends Message$1 { - /** - * Timestamp the Pong was sent on the stream, for server to get a sense - * of potential network latency - * - * @generated from field: google.protobuf.Timestamp timestamp = 1; - */ - timestamp?: Timestamp; - - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "code.messaging.v1.ClientPong"; - static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "timestamp", kind: "message", T: Timestamp }, - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): ClientPong { - return new ClientPong().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): ClientPong { - return new ClientPong().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): ClientPong { - return new ClientPong().fromJsonString(jsonString, options); - } - - static equals(a: ClientPong | PlainMessage | undefined, b: ClientPong | PlainMessage | undefined): boolean { - return proto3.util.equals(ClientPong, a, b); - } -} - diff --git a/proto/chat/v1/chat_service.proto b/proto/chat/v1/chat_service.proto index 1329388..e3d6b73 100644 --- a/proto/chat/v1/chat_service.proto +++ b/proto/chat/v1/chat_service.proto @@ -11,6 +11,7 @@ import "transaction/v2/transaction_service.proto"; import "google/protobuf/timestamp.proto"; import "validate/validate.proto"; +// Deprecated: Use the v2 service service Chat { // GetChats gets the set of chats for an owner account rpc GetChats(GetChatsRequest) returns (GetChatsResponse); @@ -26,6 +27,14 @@ service Chat { // SetSubscriptionState configures the susbscription state of a chat rpc SetSubscriptionState(SetSubscriptionStateRequest) returns (SetSubscriptionStateResponse); + + // + // Experimental PoC two-way chat APIs below + // + + rpc StreamChatEvents(stream StreamChatEventsRequest) returns (stream StreamChatEventsResponse); + + rpc SendMessage(SendMessageRequest) returns (SendMessageResponse); } message GetChatsRequest { @@ -145,6 +154,68 @@ message SetSubscriptionStateResponse { } } +message OpenChatEventStream { + ChatId chat_id = 1 [(validate.rules).message.required = true]; + + common.v1.SolanaAccountId owner = 2 [(validate.rules).message.required = true]; + + common.v1.Signature signature = 3 [(validate.rules).message.required = true]; +} + +message ChatStreamEvent { + repeated ChatMessage messages = 1 [(validate.rules).repeated.max_items = 100]; + + repeated Pointer pointers = 2 [(validate.rules).repeated.max_items = 100]; +} + +message ChatStreamEventBatch { + repeated ChatStreamEvent events = 2 [(validate.rules).repeated = { + min_items: 1 + max_items: 1024 + }]; +} + +message StreamChatEventsRequest { + oneof type { + option (validate.required) = true; + + OpenChatEventStream open_stream = 1; + common.v1.ClientPong pong = 2; + } +} + +message StreamChatEventsResponse { + oneof type { + option (validate.required) = true; + + ChatStreamEventBatch events = 1; + common.v1.ServerPing ping = 2; + } +} + +message SendMessageRequest { + common.v1.SolanaAccountId owner = 1 [(validate.rules).message.required = true]; + + common.v1.Signature signature = 2 [(validate.rules).message.required = true]; + + ChatId chat_id = 3 [(validate.rules).message.required = true]; + + // todo: What field type should this be? Maybe the chat message itself with fields missing? + repeated Content content = 4 [(validate.rules).repeated = { + min_items: 1 + max_items: 1 + }]; +} + +message SendMessageResponse { + Result result = 1; + enum Result { + OK = 0; + } + + ChatMessage message = 2; +} + message ChatId { bytes value = 1 [(validate.rules).bytes = { min_len: 32 @@ -159,14 +230,26 @@ message ChatMessageId { }]; } +message ChatMemberId { + // todo: Public key for now + bytes value = 1 [(validate.rules).bytes = { + min_len: 32 + max_len: 32 + }]; +} + message Pointer { Kind kind = 1; enum Kind { - UNKNOWN = 0; - READ = 1; + UNKNOWN = 0; + READ = 1; + DELIVERED = 2; + SENT = 3; // Probably always inferred by OK result in SendMessageResponse } ChatMessageId value = 2 [(validate.rules).message.required = true]; + + ChatMemberId user = 3; } message ChatMetadata { @@ -176,8 +259,8 @@ message ChatMetadata { oneof title { option (validate.required) = true; - LocalizedContent localized = 2; - common.v1.Domain domain = 3; + ServerLocalizedContent localized = 2; + common.v1.Domain domain = 3; } // Pointer in the chat indicating the most recently read message by the user @@ -223,19 +306,23 @@ message ChatMessage { // Cursor value for this message for reference in subsequent GetMessagesRequest Cursor cursor = 4; + + ChatMemberId sender = 5; } message Content { oneof type { option (validate.required) = true; - LocalizedContent localized = 1; - ExchangeDataContent exchange_data = 2; - NaclBoxEncryptedContent nacl_box = 3; + ServerLocalizedContent server_localized = 1; + ExchangeDataContent exchange_data = 2; + NaclBoxEncryptedContent nacl_box = 3; + TextContent text = 4; + ThankYouContent thank_you = 5; } } -message LocalizedContent { +message ServerLocalizedContent { // When server-side localization is in place, clients will always see the // localized text. string key_or_text = 1 [(validate.rules).string = { @@ -283,6 +370,17 @@ message NaclBoxEncryptedContent { }]; } +message TextContent { + string text = 1 [(validate.rules).string = { + min_len: 1 + max_len: 1024 + }]; +} + +message ThankYouContent { + // todo: May need additional metdata (who is being thanked, which tip, etc) +} + // Opaque cursor used across paged APIs. Underlying bytes may change as paging // strategies evolve. message Cursor { diff --git a/proto/chat/v2/chat_service.proto b/proto/chat/v2/chat_service.proto new file mode 100644 index 0000000..52f8f96 --- /dev/null +++ b/proto/chat/v2/chat_service.proto @@ -0,0 +1,653 @@ +syntax = "proto3"; + +package code.chat.v2; + +option go_package = "github.com/code-payments/code-protobuf-api/generated/go/chat/v2;chat"; +option java_package = "com.codeinc.gen.chat.v2"; +option objc_class_prefix = "CPBChatV2"; + +import "common/v1/model.proto"; +import "transaction/v2/transaction_service.proto"; +import "google/protobuf/timestamp.proto"; +import "validate/validate.proto"; + +service Chat { + // GetChats gets the set of chats for an owner account using a paged API. + // This RPC is aware of all identities tied to the owner account. + rpc GetChats(GetChatsRequest) returns (GetChatsResponse); + + // GetMessages gets the set of messages for a chat member using a paged API + rpc GetMessages(GetMessagesRequest) returns (GetMessagesResponse); + + // StreamChatEvents streams chat events in real-time. Chat events include + // messages, pointer updates, etc. + // + // The streaming protocol is follows: + // 1. Client initiates a stream by sending an OpenChatEventStream message. + // 2. If an error is encoutered, a ChatStreamEventError message will be + // returned by server and the stream will be closed. + // 3. Server will immediately flush initial chat state. + // 4. New chat events will be pushed to the stream in real time as they + // are received. + // + // This RPC supports a keepalive protocol as follows: + // 1. Client initiates a stream by sending an OpenChatEventStream message. + // 2. Upon stream initialization, server begins the keepalive protocol. + // 3. Server sends a ping to the client. + // 4. Client responds with a pong as fast as possible, making note of + // the delay for when to expect the next ping. + // 5. Steps 3 and 4 are repeated until the stream is explicitly terminated + // or is deemed to be unhealthy. + // + // Client notes: + // * Client should be careful to process events async, so any responses to pings are + // not delayed. + // * Clients should implement a reasonable backoff strategy upon continued timeout + // failures. + // * Clients that abuse pong messages may have their streams terminated by server. + // + // At any point in the stream, server will respond with events in real time as + // they are observed. Events sent over the stream should not affect the ping/pong + // protocol timings. + rpc StreamChatEvents(stream StreamChatEventsRequest) returns (stream StreamChatEventsResponse); + + // StartChat starts a chat. The RPC call is idempotent and will use existing + // chats whenever applicable within the context of message routing. + rpc StartChat(StartChatRequest) returns (StartChatResponse); + + // SendMessage sends a message to a chat + rpc SendMessage(SendMessageRequest) returns (SendMessageResponse); + + // AdvancePointer advances a pointer in message history for a chat member + rpc AdvancePointer(AdvancePointerRequest) returns (AdvancePointerResponse); + + // RevealIdentity reveals a chat member's identity if it is anonymous. A chat + // message will be inserted on success. + rpc RevealIdentity(RevealIdentityRequest) returns (RevealIdentityResponse); + + // SetMuteState configures a chat member's mute state + rpc SetMuteState(SetMuteStateRequest) returns (SetMuteStateResponse); + + // SetSubscriptionState configures a chat member's susbscription state + rpc SetSubscriptionState(SetSubscriptionStateRequest) returns (SetSubscriptionStateResponse); +} + +message GetChatsRequest { + common.v1.SolanaAccountId owner = 1 [(validate.rules).message.required = true]; + + common.v1.Signature signature = 2 [(validate.rules).message.required = true]; + + uint32 page_size = 3 [(validate.rules).uint32.lte = 100]; + + Cursor cursor = 4; + + Direction direction = 5; + enum Direction { + ASC = 0; + DESC = 1; + } +} + +message GetChatsResponse { + Result result = 1; + enum Result { + OK = 0; + NOT_FOUND = 1; + } + + repeated ChatMetadata chats = 2 [(validate.rules).repeated = { + min_items: 0 + max_items: 100 + }]; +} + +message GetMessagesRequest { + ChatId chat_id = 1 [(validate.rules).message.required = true]; + + ChatMemberId member_id = 2 [(validate.rules).message.required = true]; + + common.v1.SolanaAccountId owner = 3 [(validate.rules).message.required = true]; + + common.v1.Signature signature = 4 [(validate.rules).message.required = true]; + + uint32 page_size = 5 [(validate.rules).uint32.lte = 100]; + + Cursor cursor = 6; + + Direction direction = 7; + enum Direction { + ASC = 0; + DESC = 1; + } +} + +message GetMessagesResponse { + Result result = 1; + enum Result { + OK = 0; + DENIED = 1; + CHAT_NOT_FOUND = 2; + MESSAGE_NOT_FOUND = 3; + } + + repeated ChatMessage messages = 2 [(validate.rules).repeated = { + min_items: 0 + max_items: 100 + }]; +} + +message OpenChatEventStream { + ChatId chat_id = 1 [(validate.rules).message.required = true]; + + ChatMemberId member_id = 2 [(validate.rules).message.required = true]; + + common.v1.SolanaAccountId owner = 3 [(validate.rules).message.required = true]; + + common.v1.Signature signature = 4 [(validate.rules).message.required = true]; +} + +message ChatStreamEvent { + oneof type { + option (validate.required) = true; + + ChatMessage message = 1; + Pointer pointer = 2; + } +} + +message ChatStreamEventBatch { + repeated ChatStreamEvent events = 2 [(validate.rules).repeated = { + min_items: 1 + max_items: 1024 + }]; +} + +message ChatStreamEventError { + Code code = 1; + enum Code { + DENIED = 0; + CHAT_NOT_FOUND = 1; + } +} + +message StreamChatEventsRequest { + oneof type { + option (validate.required) = true; + + OpenChatEventStream open_stream = 1; + common.v1.ClientPong pong = 2; + } +} + +message StreamChatEventsResponse { + oneof type { + option (validate.required) = true; + + ChatStreamEventBatch events = 1; + common.v1.ServerPing ping = 2; + ChatStreamEventError error = 3; + } +} + +message StartChatRequest { + common.v1.SolanaAccountId owner = 1 [(validate.rules).message.required = true]; + + common.v1.Signature signature = 2 [(validate.rules).message.required = true]; + + oneof parameters { + option (validate.required) = true; + + StartTipChatParameters tip_chat = 3; + // GroupChatParameters group_chat = 4; + } +} + +// Starts a two-way chat between a tipper and tippee. Chat members are +// inferred from the 12 word public keys involved in the intent. Only +// the tippee can start the chat, and the tipper is anonymous if this +// is the first between the involved Code users. +message StartTipChatParameters { + // The tip's intent ID, which can be extracted from the reference in + // an ExchangeDataContent message content where the verb is RECEIVED_TIP. + common.v1.IntentId intent_id = 1 [(validate.rules).message.required = true]; +} + +message StartChatResponse { + Result result = 1; + enum Result { + OK = 0; + DENIED = 1; + INVALID_PARAMETER = 2; + } + + // The chat to use if the RPC was successful + ChatMetadata chat = 2; +} + +message SendMessageRequest { + ChatId chat_id = 1 [(validate.rules).message.required = true]; + + ChatMemberId member_id = 2 [(validate.rules).message.required = true]; + + // Allowed content types that can be sent by client: + // - TextContent + // - ThankYouContent + repeated Content content = 3 [(validate.rules).repeated = { + min_items: 1 + max_items: 1 + }]; + + common.v1.SolanaAccountId owner = 4 [(validate.rules).message.required = true]; + + common.v1.Signature signature = 5 [(validate.rules).message.required = true]; +} + +message SendMessageResponse { + Result result = 1; + enum Result { + OK = 0; + DENIED = 1; + CHAT_NOT_FOUND = 2; + INVALID_CHAT_TYPE = 3; + INVALID_CONTENT_TYPE = 4; + } + + // The chat message that was sent if the RPC was succesful, which includes + // server-side metadata like the generated message ID and official timestamp + ChatMessage message = 2; +} + +message AdvancePointerRequest { + ChatId chat_id = 1 [(validate.rules).message.required = true]; + + Pointer pointer = 2 [(validate.rules).message.required = true]; + + common.v1.SolanaAccountId owner = 3 [(validate.rules).message.required = true]; + + common.v1.Signature signature = 4 [(validate.rules).message.required = true]; +} + +message AdvancePointerResponse { + Result result = 1; + enum Result { + OK = 0; + DENIED = 1; + CHAT_NOT_FOUND = 2; + MESSAGE_NOT_FOUND = 3; + INVALID_POINTER_TYPE = 4; + } +} + +message RevealIdentityRequest { + ChatId chat_id = 1 [(validate.rules).message.required = true]; + + ChatMemberId member_id = 2 [(validate.rules).message.required = true]; + + ChatMemberIdentity identity = 3 [(validate.rules).message.required = true]; + + common.v1.SolanaAccountId owner = 4 [(validate.rules).message.required = true]; + + common.v1.Signature signature = 5 [(validate.rules).message.required = true]; +} + +message RevealIdentityResponse { + Result result = 1; + enum Result { + OK = 0; + DENIED = 1; + CHAT_NOT_FOUND = 2; + DIFFERENT_IDENTITY_REVEALED = 3; + } + + // The chat message that was sent if the RPC was successful + ChatMessage message = 2; +} + +message SetMuteStateRequest { + ChatId chat_id = 1 [(validate.rules).message.required = true]; + + ChatMemberId member_id = 2 [(validate.rules).message.required = true]; + + bool is_muted = 3; + + common.v1.SolanaAccountId owner = 4 [(validate.rules).message.required = true]; + + common.v1.Signature signature = 5 [(validate.rules).message.required = true]; +} + +message SetMuteStateResponse { + Result result = 1; + enum Result { + OK = 0; + DENIED = 1; + CHAT_NOT_FOUND = 2; + CANT_MUTE = 3; + } +} + +message SetSubscriptionStateRequest { + ChatId chat_id = 1 [(validate.rules).message.required = true]; + + ChatMemberId member_id = 2 [(validate.rules).message.required = true]; + + bool is_subscribed = 3; + + common.v1.SolanaAccountId owner = 4 [(validate.rules).message.required = true]; + + common.v1.Signature signature = 5 [(validate.rules).message.required = true]; +} + +message SetSubscriptionStateResponse { + Result result = 1; + enum Result { + OK = 0; + DENIED = 1; + CHAT_NOT_FOUND = 2; + CANT_UNSUBSCRIBE = 3; + } +} + +message ChatId { + // Sufficient space is left for a consistent hash value, though other types + // of values may be used. + bytes value = 1 [(validate.rules).bytes = { + min_len: 32 + max_len: 32 + }]; +} + +message ChatMessageId { + // Guaranteed to be a time-based UUID. This should be used to construct a + // consistently ordered message history based on time using a simple byte + // comparison. + bytes value = 1 [(validate.rules).bytes = { + min_len: 16 + max_len: 16 + }]; +} + +message ChatMemberId { + // Globally random UUID + bytes value = 1 [(validate.rules).bytes = { + min_len: 16 + max_len: 16 + }]; +} + +enum ChatType { + UNKNOWN_CHAT_TYPE = 0; + NOTIFICATION = 1; + TWO_WAY = 2; + // GROUP = 3; +} + +enum Platform { + UNKNOWN_PLATFORM = 0; + TWITTER = 1; +} + +enum PointerType { + UNKNOWN_POINTER_TYPE = 0; + SENT = 1; // Always inferred by OK result in SendMessageResponse or message presence in a chat + DELIVERED = 2; + READ = 3; +} + +// A chat +// +// todo: Support is_verified in a clean way +message ChatMetadata { + // Globally unique ID for this chat + ChatId chat_id = 1 [(validate.rules).message.required = true]; + + // The type of chat + ChatType type = 2 [(validate.rules).enum = { + not_in: [0] // UNKNOWN_CHAT_TYPE + }]; + + // The chat title, which will be localized by server when applicable + string title = 3 [(validate.rules).string = { + min_len: 1 + max_len: 1024 + }]; + + // The members in this chat + // + // For NOTIFICATION chats, this list has exactly 1 item + // For TWO_WAY chats, this list has exactly 2 items + // + // todo: If we support group chats, then we'll likely return the first page + // or a prioritized list. The remaining members would be fetched via + // a new RPC. + repeated ChatMember members = 4 [(validate.rules).repeated = { + min_items: 1 + max_items: 2 + }]; + + // Can the user mute this chat? + bool can_mute = 5; + + // Can the user unsubscribe from this chat? + bool can_unsubscribe = 6; + + // Cursor value for this chat for reference in subsequent GetChatsRequest + Cursor cursor = 7; +} + +// A message in a chat +message ChatMessage { + // Globally unique ID for this message + ChatMessageId message_id = 1 [(validate.rules).message.required = true]; + + // The chat member that sent the message. For NOTIFICATION chats, this field + // is omitted since the chat has exactly 1 member. + ChatMemberId sender_id = 2; + + // Ordered message content. A message may have more than one piece of content. + repeated Content content = 3 [(validate.rules).repeated = { + min_items: 1 + max_items: 2 + }]; + + // Timestamp this message was generated at. This value is also encoded in + // any time-based UUID message IDs. + google.protobuf.Timestamp ts = 4 [(validate.rules).timestamp.required = true]; + + // Cursor value for this message for reference in a paged GetMessagesRequest + Cursor cursor = 5; +} + +// A user in a chat +message ChatMember { + // Globally unique ID for this chat member + ChatMemberId member_id = 1 [(validate.rules).message.required = true]; + + // Is this chat member yourself? This enables client to identify which member_id + // is themselves. + bool is_self = 2; + + // The chat member's identity if it has been revealed. + ChatMemberIdentity identity = 3; + + // Chat message state for this member. This list will have DELIVERED and READ + // pointers, if they exist. SENT pointers should be inferred by persistence + // on server. + repeated Pointer pointers = 4 [(validate.rules).repeated = { + min_items: 0 + max_items: 2 + }]; + + // Estimated number of unread messages for the chat member in this chat + // + // Only valid when is_self = true + uint32 num_unread = 5; + + // Has the chat member muted this chat? + // + // Only valid when is_self = true + bool is_muted = 6; + + // Is the chat member subscribed to this chat? + // + // Only valid when is_self = true + bool is_subscribed = 7; +} + +// Identity to an external social platform that can be linked to a Code account +message ChatMemberIdentity { + // The external social platform linked to this chat member + Platform platform = 1 [(validate.rules).enum = { + in: [1] // TWITTER + }]; + + // The chat member's username on the external social platform + string username = 2 [(validate.rules).string = { + min_len: 1 + max_len: 15 // Twitter limit + }]; +} + +// Pointer in a chat indicating a user's message history state in a chat. +message Pointer { + // The type of pointer indicates which user's message history state can be + // inferred from the pointer value. It is also possible to infer cross-pointer + // state. For example, if a chat member has a READ pointer for a message with + // ID N, then the DELIVERED pointer must be at least N. + PointerType type = 1 [(validate.rules).enum = { + not_in: [0] // UNKNOWN_POINTER_TYPE + }]; + + // Everything at or before this message ID is considered to have the state + // inferred by the type of pointer. + ChatMessageId value = 2 [(validate.rules).message.required = true]; + + // The chat member associated with this pointer state + ChatMemberId member_id = 3 [(validate.rules).message.required = true]; +} + +// Content for a chat message +message Content { + oneof type { + option (validate.required) = true; + + TextContent text = 1; + LocalizedContent localized = 2; + ExchangeDataContent exchange_data = 3; + NaclBoxEncryptedContent nacl_box = 4; + ThankYouContent thank_you = 5; + IdentityRevealedContent identity_revealed = 6; + } +} + +// Raw text content +message TextContent { + string text = 1 [(validate.rules).string = { + min_len: 1 + max_len: 1024 + }]; +} + +// Text content that is either a localization key that should be translated on +// client, or a server-side translated piece of text. +message LocalizedContent { + string key_or_text = 1 [(validate.rules).string = { + min_len: 1 + max_len: 1024 + }]; +} + +// Exchange data content for movement of a value of Kin +message ExchangeDataContent { + enum Verb { + UNKNOWN = 0; + GAVE = 1; + RECEIVED = 2; + WITHDREW = 3; + DEPOSITED = 4; + SENT = 5; + RETURNED = 6; + SPENT = 7; + PAID = 8; + PURCHASED = 9; + RECEIVED_TIP = 10; + SENT_TIP = 11; + } + + // Verb describing how the amount of Kin was exchanged + // + // Note: The current definition is not suitable outside a NOTIFICATION chat + // as not enough context is provided as to which member this verb is + // associated with. + Verb verb = 1 [(validate.rules).enum = { + not_in: [0] // UNKNOWN + }]; + + // An amount of Kin being exchanged + oneof exchange_data { + option (validate.required) = true; + + transaction.v2.ExchangeData exact = 2; + transaction.v2.ExchangeDataWithoutRate partial = 3; + } + + // An ID that can be referenced to the source of the exchange of Kin + oneof reference { + option (validate.required) = true; + + common.v1.IntentId intent = 4; + common.v1.Signature signature = 5; + } +} + +// Encrypted piece of content using NaCl box encryption +message NaclBoxEncryptedContent { + // The sender's public key that is used to derive the shared private key for + // decryption for message content. + common.v1.SolanaAccountId peer_public_key = 1 [(validate.rules).message.required = true]; + + // Globally random nonce that is unique to this encrypted piece of content + bytes nonce = 2 [(validate.rules).bytes = { + min_len: 24 + max_len: 24 + }]; + + // The encrypted piece of message content + bytes encrypted_payload = 3 [(validate.rules).bytes = { + min_len: 1 + max_len: 1024 + }]; +} + +// Thank you content that is used to thank Code users for tips +message ThankYouContent { + // The tip intent that is being thanked. + common.v1.IntentId tip_intent = 1 [(validate.rules).message.required = true]; + + // Reserved for the thanker, which is only required if we support GROUP chats. + // Otherwise, it can be inferred from the sender in a TWO_WAY chat. + reserved 2; + + // Reserved for the thankee, which is only required if we support GROUP chats. + // Otherwise, it can be inferred from the sender in a TWO_WAY chat. + reserved 3; +} + +// Identity revealed content that is inserted into chat whenever a chat member +// reveals their identity +message IdentityRevealedContent { + // The chat member who revealed their identity + ChatMemberId member_id = 1 [(validate.rules).message.required = true]; + + // The identity that was revealed + ChatMemberIdentity identity = 2 [(validate.rules).message.required = true]; +} + +// Opaque cursor used across paged APIs. Underlying bytes may change as paging +// strategies evolve. Expected length value will vary based on the RPC being +// executed. +message Cursor { + bytes value = 1 [(validate.rules).bytes = { + min_len: 8 + max_len: 32 + }]; +} diff --git a/proto/common/v1/model.proto b/proto/common/v1/model.proto index e22b776..f3abf85 100644 --- a/proto/common/v1/model.proto +++ b/proto/common/v1/model.proto @@ -6,6 +6,8 @@ option go_package = "github.com/code-payments/code-protobuf-api/generated/go/com option java_package = "com.codeinc.gen.common.v1"; option objc_class_prefix = "CPBCommonV1"; +import "google/protobuf/duration.proto"; +import "google/protobuf/timestamp.proto"; import "validate/validate.proto"; // AccountType associates a type to an account, which infers how an account is used @@ -181,3 +183,18 @@ message Response { ERROR = 1; } } + +message ServerPing { + // Timestamp the ping was sent on the stream, for client to get a sense + // of potential network latency + google.protobuf.Timestamp timestamp = 1 [(validate.rules).timestamp.required = true]; + + // The delay server will apply before sending the next ping + google.protobuf.Duration ping_delay = 2 [(validate.rules).duration.required = true]; +} + +message ClientPong { + // Timestamp the Pong was sent on the stream, for server to get a sense + // of potential network latency + google.protobuf.Timestamp timestamp = 1 [(validate.rules).timestamp.required = true]; +} diff --git a/proto/messaging/v1/messaging_service.proto b/proto/messaging/v1/messaging_service.proto index 1a6a01a..7ccec82 100644 --- a/proto/messaging/v1/messaging_service.proto +++ b/proto/messaging/v1/messaging_service.proto @@ -9,7 +9,6 @@ option objc_class_prefix = "CPBMessagingV1"; import "common/v1/model.proto"; import "transaction/v2/transaction_service.proto"; import "validate/validate.proto"; -import "google/protobuf/duration.proto"; import "google/protobuf/timestamp.proto"; service Messaging { @@ -125,20 +124,20 @@ message OpenMessageStreamResponse { } message OpenMessageStreamWithKeepAliveRequest { - oneof requestOrPong { + oneof request_or_pong { option (validate.required) = true; OpenMessageStreamRequest request = 1; - ClientPong pong = 2; + common.v1.ClientPong pong = 2; } } message OpenMessageStreamWithKeepAliveResponse { - oneof responseOrPing { + oneof response_or_ping { option (validate.required) = true; OpenMessageStreamResponse response = 1; - ServerPing ping = 2; + common.v1.ServerPing ping = 2; } } @@ -414,18 +413,3 @@ message Message { // Reserved for deprecated LoginAttempt field reserved 11; } - -message ServerPing { - // Timestamp the ping was sent on the stream, for client to get a sense - // of potential network latency - google.protobuf.Timestamp timestamp = 1 [(validate.rules).timestamp.required = true]; - - // The delay server will apply before sending the next ping - google.protobuf.Duration ping_delay = 2 [(validate.rules).duration.required = true]; -} - -message ClientPong { - // Timestamp the Pong was sent on the stream, for server to get a sense - // of potential network latency - google.protobuf.Timestamp timestamp = 1 [(validate.rules).timestamp.required = true]; -}