diff --git a/livekit/livekit_analytics.pb.go b/livekit/livekit_analytics.pb.go index d5577fc6..5d4ec989 100644 --- a/livekit/livekit_analytics.pb.go +++ b/livekit/livekit_analytics.pb.go @@ -79,8 +79,6 @@ const ( AnalyticsEventType_TRACK_UNPUBLISHED AnalyticsEventType = 5 AnalyticsEventType_TRACK_SUBSCRIBED AnalyticsEventType = 6 AnalyticsEventType_TRACK_UNSUBSCRIBED AnalyticsEventType = 7 - AnalyticsEventType_RECORDING_STARTED AnalyticsEventType = 8 - AnalyticsEventType_RECORDING_ENDED AnalyticsEventType = 9 AnalyticsEventType_TRACK_PUBLISHED_UPDATE AnalyticsEventType = 10 AnalyticsEventType_PARTICIPANT_ACTIVE AnalyticsEventType = 11 AnalyticsEventType_EGRESS_STARTED AnalyticsEventType = 12 @@ -99,8 +97,6 @@ var ( 5: "TRACK_UNPUBLISHED", 6: "TRACK_SUBSCRIBED", 7: "TRACK_UNSUBSCRIBED", - 8: "RECORDING_STARTED", - 9: "RECORDING_ENDED", 10: "TRACK_PUBLISHED_UPDATE", 11: "PARTICIPANT_ACTIVE", 12: "EGRESS_STARTED", @@ -116,8 +112,6 @@ var ( "TRACK_UNPUBLISHED": 5, "TRACK_SUBSCRIBED": 6, "TRACK_UNSUBSCRIBED": 7, - "RECORDING_STARTED": 8, - "RECORDING_ENDED": 9, "TRACK_PUBLISHED_UPDATE": 10, "PARTICIPANT_ACTIVE": 11, "EGRESS_STARTED": 12, @@ -641,7 +635,6 @@ type AnalyticsEvent struct { Participant *ParticipantInfo `protobuf:"bytes,6,opt,name=participant,proto3" json:"participant,omitempty"` TrackId string `protobuf:"bytes,7,opt,name=track_id,json=trackId,proto3" json:"track_id,omitempty"` Track *TrackInfo `protobuf:"bytes,8,opt,name=track,proto3" json:"track,omitempty"` - RecordingId string `protobuf:"bytes,9,opt,name=recording_id,json=recordingId,proto3" json:"recording_id,omitempty"` AnalyticsKey string `protobuf:"bytes,10,opt,name=analytics_key,json=analyticsKey,proto3" json:"analytics_key,omitempty"` ClientInfo *ClientInfo `protobuf:"bytes,11,opt,name=client_info,json=clientInfo,proto3" json:"client_info,omitempty"` ClientMeta *AnalyticsClientMeta `protobuf:"bytes,12,opt,name=client_meta,json=clientMeta,proto3" json:"client_meta,omitempty"` @@ -739,13 +732,6 @@ func (x *AnalyticsEvent) GetTrack() *TrackInfo { return nil } -func (x *AnalyticsEvent) GetRecordingId() string { - if x != nil { - return x.RecordingId - } - return "" -} - func (x *AnalyticsEvent) GetAnalyticsKey() string { if x != nil { return x.AnalyticsKey @@ -929,7 +915,7 @@ var file_livekit_analytics_proto_rawDesc = []byte{ 0x65, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x72, 0x12, 0x2e, 0x0a, 0x13, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x6e, - 0x65, 0x63, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x22, 0xdd, 0x05, 0x0a, 0x0e, 0x41, 0x6e, 0x61, 0x6c, + 0x65, 0x63, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x22, 0xba, 0x05, 0x0a, 0x0e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, @@ -951,76 +937,71 @@ var file_livekit_analytics_proto_rawDesc = []byte{ 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x05, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x49, 0x6e, - 0x66, 0x6f, 0x52, 0x05, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x63, - 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, - 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x4b, 0x65, - 0x79, 0x12, 0x34, 0x0a, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x6f, - 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, - 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x63, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x3d, 0x0a, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6c, - 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, - 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x0a, 0x63, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x67, 0x72, 0x65, 0x73, 0x73, - 0x5f, 0x69, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x67, 0x72, 0x65, 0x73, - 0x73, 0x49, 0x64, 0x12, 0x56, 0x0a, 0x1c, 0x6d, 0x61, 0x78, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, - 0x72, 0x69, 0x62, 0x65, 0x64, 0x5f, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x5f, 0x71, 0x75, 0x61, 0x6c, - 0x69, 0x74, 0x79, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x6c, 0x69, 0x76, 0x65, - 0x6b, 0x69, 0x74, 0x2e, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, - 0x52, 0x19, 0x6d, 0x61, 0x78, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x56, - 0x69, 0x64, 0x65, 0x6f, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x36, 0x0a, 0x09, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, - 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, - 0x70, 0x61, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, - 0x68, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x69, 0x6d, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6d, 0x69, 0x6d, 0x65, 0x22, 0x42, 0x0a, 0x0f, 0x41, 0x6e, 0x61, 0x6c, 0x79, - 0x74, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x2f, 0x0a, 0x06, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6c, 0x69, 0x76, - 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2a, 0x2a, 0x0a, 0x0a, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x55, 0x50, 0x53, - 0x54, 0x52, 0x45, 0x41, 0x4d, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x44, 0x4f, 0x57, 0x4e, 0x53, - 0x54, 0x52, 0x45, 0x41, 0x4d, 0x10, 0x01, 0x2a, 0xec, 0x02, 0x0a, 0x12, 0x41, 0x6e, 0x61, 0x6c, - 0x79, 0x74, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, - 0x0a, 0x0c, 0x52, 0x4f, 0x4f, 0x4d, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0x00, - 0x12, 0x0e, 0x0a, 0x0a, 0x52, 0x4f, 0x4f, 0x4d, 0x5f, 0x45, 0x4e, 0x44, 0x45, 0x44, 0x10, 0x01, - 0x12, 0x16, 0x0a, 0x12, 0x50, 0x41, 0x52, 0x54, 0x49, 0x43, 0x49, 0x50, 0x41, 0x4e, 0x54, 0x5f, - 0x4a, 0x4f, 0x49, 0x4e, 0x45, 0x44, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x41, 0x52, 0x54, - 0x49, 0x43, 0x49, 0x50, 0x41, 0x4e, 0x54, 0x5f, 0x4c, 0x45, 0x46, 0x54, 0x10, 0x03, 0x12, 0x13, - 0x0a, 0x0f, 0x54, 0x52, 0x41, 0x43, 0x4b, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x53, 0x48, 0x45, - 0x44, 0x10, 0x04, 0x12, 0x15, 0x0a, 0x11, 0x54, 0x52, 0x41, 0x43, 0x4b, 0x5f, 0x55, 0x4e, 0x50, - 0x55, 0x42, 0x4c, 0x49, 0x53, 0x48, 0x45, 0x44, 0x10, 0x05, 0x12, 0x14, 0x0a, 0x10, 0x54, 0x52, - 0x41, 0x43, 0x4b, 0x5f, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, 0x44, 0x10, 0x06, - 0x12, 0x16, 0x0a, 0x12, 0x54, 0x52, 0x41, 0x43, 0x4b, 0x5f, 0x55, 0x4e, 0x53, 0x55, 0x42, 0x53, - 0x43, 0x52, 0x49, 0x42, 0x45, 0x44, 0x10, 0x07, 0x12, 0x15, 0x0a, 0x11, 0x52, 0x45, 0x43, 0x4f, - 0x52, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x45, 0x44, 0x10, 0x08, 0x12, - 0x13, 0x0a, 0x0f, 0x52, 0x45, 0x43, 0x4f, 0x52, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x45, 0x4e, 0x44, - 0x45, 0x44, 0x10, 0x09, 0x12, 0x1a, 0x0a, 0x16, 0x54, 0x52, 0x41, 0x43, 0x4b, 0x5f, 0x50, 0x55, - 0x42, 0x4c, 0x49, 0x53, 0x48, 0x45, 0x44, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0x0a, - 0x12, 0x16, 0x0a, 0x12, 0x50, 0x41, 0x52, 0x54, 0x49, 0x43, 0x49, 0x50, 0x41, 0x4e, 0x54, 0x5f, - 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x0b, 0x12, 0x12, 0x0a, 0x0e, 0x45, 0x47, 0x52, 0x45, - 0x53, 0x53, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x45, 0x44, 0x10, 0x0c, 0x12, 0x10, 0x0a, 0x0c, - 0x45, 0x47, 0x52, 0x45, 0x53, 0x53, 0x5f, 0x45, 0x4e, 0x44, 0x45, 0x44, 0x10, 0x0d, 0x12, 0x26, - 0x0a, 0x22, 0x54, 0x52, 0x41, 0x43, 0x4b, 0x5f, 0x4d, 0x41, 0x58, 0x5f, 0x53, 0x55, 0x42, 0x53, - 0x43, 0x52, 0x49, 0x42, 0x45, 0x44, 0x5f, 0x56, 0x49, 0x44, 0x45, 0x4f, 0x5f, 0x51, 0x55, 0x41, - 0x4c, 0x49, 0x54, 0x59, 0x10, 0x0e, 0x32, 0xa4, 0x01, 0x0a, 0x18, 0x41, 0x6e, 0x61, 0x6c, 0x79, - 0x74, 0x69, 0x63, 0x73, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x12, 0x42, 0x0a, 0x0b, 0x49, 0x6e, 0x67, 0x65, 0x73, 0x74, 0x53, 0x74, 0x61, - 0x74, 0x73, 0x12, 0x17, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x41, 0x6e, 0x61, - 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x53, 0x74, 0x61, 0x74, 0x73, 0x1a, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x22, 0x00, 0x28, 0x01, 0x12, 0x44, 0x0a, 0x0c, 0x49, 0x6e, 0x67, 0x65, 0x73, - 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x18, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, + 0x66, 0x6f, 0x52, 0x05, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6e, 0x61, + 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0c, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x4b, 0x65, 0x79, 0x12, 0x34, + 0x0a, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x0b, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x3d, 0x0a, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x6d, + 0x65, 0x74, 0x61, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6c, 0x69, 0x76, 0x65, + 0x6b, 0x69, 0x74, 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x0a, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4d, + 0x65, 0x74, 0x61, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x67, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x64, + 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x67, 0x72, 0x65, 0x73, 0x73, 0x49, 0x64, + 0x12, 0x56, 0x0a, 0x1c, 0x6d, 0x61, 0x78, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, + 0x65, 0x64, 0x5f, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x5f, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, + 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, + 0x2e, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x19, 0x6d, + 0x61, 0x78, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x56, 0x69, 0x64, 0x65, + 0x6f, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x36, 0x0a, 0x09, 0x70, 0x75, 0x62, 0x6c, + 0x69, 0x73, 0x68, 0x65, 0x72, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6c, 0x69, + 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, + 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, + 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x69, 0x6d, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6d, 0x69, 0x6d, 0x65, 0x22, 0x42, 0x0a, 0x0f, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, + 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x2f, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x73, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x28, 0x01, 0x42, 0x46, 0x5a, - 0x23, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x69, 0x76, 0x65, - 0x6b, 0x69, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x6c, 0x69, 0x76, - 0x65, 0x6b, 0x69, 0x74, 0xaa, 0x02, 0x0d, 0x4c, 0x69, 0x76, 0x65, 0x4b, 0x69, 0x74, 0x2e, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0xea, 0x02, 0x0e, 0x4c, 0x69, 0x76, 0x65, 0x4b, 0x69, 0x74, 0x3a, 0x3a, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2a, 0x2a, 0x0a, 0x0a, 0x53, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x55, 0x50, 0x53, 0x54, 0x52, 0x45, + 0x41, 0x4d, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x44, 0x4f, 0x57, 0x4e, 0x53, 0x54, 0x52, 0x45, + 0x41, 0x4d, 0x10, 0x01, 0x2a, 0xc0, 0x02, 0x0a, 0x12, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, + 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x52, + 0x4f, 0x4f, 0x4d, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0e, 0x0a, + 0x0a, 0x52, 0x4f, 0x4f, 0x4d, 0x5f, 0x45, 0x4e, 0x44, 0x45, 0x44, 0x10, 0x01, 0x12, 0x16, 0x0a, + 0x12, 0x50, 0x41, 0x52, 0x54, 0x49, 0x43, 0x49, 0x50, 0x41, 0x4e, 0x54, 0x5f, 0x4a, 0x4f, 0x49, + 0x4e, 0x45, 0x44, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x41, 0x52, 0x54, 0x49, 0x43, 0x49, + 0x50, 0x41, 0x4e, 0x54, 0x5f, 0x4c, 0x45, 0x46, 0x54, 0x10, 0x03, 0x12, 0x13, 0x0a, 0x0f, 0x54, + 0x52, 0x41, 0x43, 0x4b, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x53, 0x48, 0x45, 0x44, 0x10, 0x04, + 0x12, 0x15, 0x0a, 0x11, 0x54, 0x52, 0x41, 0x43, 0x4b, 0x5f, 0x55, 0x4e, 0x50, 0x55, 0x42, 0x4c, + 0x49, 0x53, 0x48, 0x45, 0x44, 0x10, 0x05, 0x12, 0x14, 0x0a, 0x10, 0x54, 0x52, 0x41, 0x43, 0x4b, + 0x5f, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, 0x44, 0x10, 0x06, 0x12, 0x16, 0x0a, + 0x12, 0x54, 0x52, 0x41, 0x43, 0x4b, 0x5f, 0x55, 0x4e, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, + 0x42, 0x45, 0x44, 0x10, 0x07, 0x12, 0x1a, 0x0a, 0x16, 0x54, 0x52, 0x41, 0x43, 0x4b, 0x5f, 0x50, + 0x55, 0x42, 0x4c, 0x49, 0x53, 0x48, 0x45, 0x44, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, + 0x0a, 0x12, 0x16, 0x0a, 0x12, 0x50, 0x41, 0x52, 0x54, 0x49, 0x43, 0x49, 0x50, 0x41, 0x4e, 0x54, + 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x0b, 0x12, 0x12, 0x0a, 0x0e, 0x45, 0x47, 0x52, + 0x45, 0x53, 0x53, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x45, 0x44, 0x10, 0x0c, 0x12, 0x10, 0x0a, + 0x0c, 0x45, 0x47, 0x52, 0x45, 0x53, 0x53, 0x5f, 0x45, 0x4e, 0x44, 0x45, 0x44, 0x10, 0x0d, 0x12, + 0x26, 0x0a, 0x22, 0x54, 0x52, 0x41, 0x43, 0x4b, 0x5f, 0x4d, 0x41, 0x58, 0x5f, 0x53, 0x55, 0x42, + 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, 0x44, 0x5f, 0x56, 0x49, 0x44, 0x45, 0x4f, 0x5f, 0x51, 0x55, + 0x41, 0x4c, 0x49, 0x54, 0x59, 0x10, 0x0e, 0x32, 0xa4, 0x01, 0x0a, 0x18, 0x41, 0x6e, 0x61, 0x6c, + 0x79, 0x74, 0x69, 0x63, 0x73, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x42, 0x0a, 0x0b, 0x49, 0x6e, 0x67, 0x65, 0x73, 0x74, 0x53, 0x74, + 0x61, 0x74, 0x73, 0x12, 0x17, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x41, 0x6e, + 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x53, 0x74, 0x61, 0x74, 0x73, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x28, 0x01, 0x12, 0x44, 0x0a, 0x0c, 0x49, 0x6e, 0x67, 0x65, + 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x18, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, + 0x69, 0x74, 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x74, 0x69, 0x63, 0x73, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x73, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x28, 0x01, 0x42, 0x46, + 0x5a, 0x23, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x69, 0x76, + 0x65, 0x6b, 0x69, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x6c, 0x69, + 0x76, 0x65, 0x6b, 0x69, 0x74, 0xaa, 0x02, 0x0d, 0x4c, 0x69, 0x76, 0x65, 0x4b, 0x69, 0x74, 0x2e, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0xea, 0x02, 0x0e, 0x4c, 0x69, 0x76, 0x65, 0x4b, 0x69, 0x74, 0x3a, + 0x3a, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/livekit/livekit_internal.pb.go b/livekit/livekit_internal.pb.go index 590a1735..1d1dd040 100644 --- a/livekit/livekit_internal.pb.go +++ b/livekit/livekit_internal.pb.go @@ -991,232 +991,6 @@ func (x *RemoveParticipant) GetParticipantId() string { return "" } -type RecordingReservation struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - SubmittedAt int64 `protobuf:"varint,2,opt,name=submitted_at,json=submittedAt,proto3" json:"submitted_at,omitempty"` -} - -func (x *RecordingReservation) Reset() { - *x = RecordingReservation{} - if protoimpl.UnsafeEnabled { - mi := &file_livekit_internal_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RecordingReservation) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RecordingReservation) ProtoMessage() {} - -func (x *RecordingReservation) ProtoReflect() protoreflect.Message { - mi := &file_livekit_internal_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 RecordingReservation.ProtoReflect.Descriptor instead. -func (*RecordingReservation) Descriptor() ([]byte, []int) { - return file_livekit_internal_proto_rawDescGZIP(), []int{7} -} - -func (x *RecordingReservation) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *RecordingReservation) GetSubmittedAt() int64 { - if x != nil { - return x.SubmittedAt - } - return 0 -} - -type RecordingRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - // Types that are assignable to Request: - // *RecordingRequest_Start - // *RecordingRequest_AddOutput - // *RecordingRequest_RemoveOutput - // *RecordingRequest_End - Request isRecordingRequest_Request `protobuf_oneof:"request"` -} - -func (x *RecordingRequest) Reset() { - *x = RecordingRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_livekit_internal_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RecordingRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RecordingRequest) ProtoMessage() {} - -func (x *RecordingRequest) ProtoReflect() protoreflect.Message { - mi := &file_livekit_internal_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 RecordingRequest.ProtoReflect.Descriptor instead. -func (*RecordingRequest) Descriptor() ([]byte, []int) { - return file_livekit_internal_proto_rawDescGZIP(), []int{8} -} - -func (x *RecordingRequest) GetRequestId() string { - if x != nil { - return x.RequestId - } - return "" -} - -func (m *RecordingRequest) GetRequest() isRecordingRequest_Request { - if m != nil { - return m.Request - } - return nil -} - -func (x *RecordingRequest) GetStart() *StartRecordingRequest { - if x, ok := x.GetRequest().(*RecordingRequest_Start); ok { - return x.Start - } - return nil -} - -func (x *RecordingRequest) GetAddOutput() *AddOutputRequest { - if x, ok := x.GetRequest().(*RecordingRequest_AddOutput); ok { - return x.AddOutput - } - return nil -} - -func (x *RecordingRequest) GetRemoveOutput() *RemoveOutputRequest { - if x, ok := x.GetRequest().(*RecordingRequest_RemoveOutput); ok { - return x.RemoveOutput - } - return nil -} - -func (x *RecordingRequest) GetEnd() *EndRecordingRequest { - if x, ok := x.GetRequest().(*RecordingRequest_End); ok { - return x.End - } - return nil -} - -type isRecordingRequest_Request interface { - isRecordingRequest_Request() -} - -type RecordingRequest_Start struct { - Start *StartRecordingRequest `protobuf:"bytes,2,opt,name=start,proto3,oneof"` -} - -type RecordingRequest_AddOutput struct { - AddOutput *AddOutputRequest `protobuf:"bytes,3,opt,name=add_output,json=addOutput,proto3,oneof"` -} - -type RecordingRequest_RemoveOutput struct { - RemoveOutput *RemoveOutputRequest `protobuf:"bytes,4,opt,name=remove_output,json=removeOutput,proto3,oneof"` -} - -type RecordingRequest_End struct { - End *EndRecordingRequest `protobuf:"bytes,5,opt,name=end,proto3,oneof"` -} - -func (*RecordingRequest_Start) isRecordingRequest_Request() {} - -func (*RecordingRequest_AddOutput) isRecordingRequest_Request() {} - -func (*RecordingRequest_RemoveOutput) isRecordingRequest_Request() {} - -func (*RecordingRequest_End) isRecordingRequest_Request() {} - -type RecordingResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - Error string `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"` -} - -func (x *RecordingResponse) Reset() { - *x = RecordingResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_livekit_internal_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RecordingResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RecordingResponse) ProtoMessage() {} - -func (x *RecordingResponse) ProtoReflect() protoreflect.Message { - mi := &file_livekit_internal_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 RecordingResponse.ProtoReflect.Descriptor instead. -func (*RecordingResponse) Descriptor() ([]byte, []int) { - return file_livekit_internal_proto_rawDescGZIP(), []int{9} -} - -func (x *RecordingResponse) GetRequestId() string { - if x != nil { - return x.RequestId - } - return "" -} - -func (x *RecordingResponse) GetError() string { - if x != nil { - return x.Error - } - return "" -} - type KeepAlive struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1226,7 +1000,7 @@ type KeepAlive struct { func (x *KeepAlive) Reset() { *x = KeepAlive{} if protoimpl.UnsafeEnabled { - mi := &file_livekit_internal_proto_msgTypes[10] + mi := &file_livekit_internal_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1239,7 +1013,7 @@ func (x *KeepAlive) String() string { func (*KeepAlive) ProtoMessage() {} func (x *KeepAlive) ProtoReflect() protoreflect.Message { - mi := &file_livekit_internal_proto_msgTypes[10] + mi := &file_livekit_internal_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1252,7 +1026,7 @@ func (x *KeepAlive) ProtoReflect() protoreflect.Message { // Deprecated: Use KeepAlive.ProtoReflect.Descriptor instead. func (*KeepAlive) Descriptor() ([]byte, []int) { - return file_livekit_internal_proto_rawDescGZIP(), []int{10} + return file_livekit_internal_proto_rawDescGZIP(), []int{7} } var File_livekit_internal_proto protoreflect.FileDescriptor @@ -1261,223 +1035,194 @@ var file_livekit_internal_proto_rawDesc = []byte{ 0x0a, 0x16, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x07, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x1a, 0x14, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, - 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, - 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x1a, 0x11, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x5f, 0x72, 0x74, 0x63, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x1a, 0x12, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x5f, 0x72, 0x6f, 0x6f, - 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xd4, 0x01, 0x0a, 0x04, 0x4e, 0x6f, 0x64, 0x65, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x70, - 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x75, 0x6d, 0x5f, 0x63, 0x70, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x07, 0x6e, 0x75, 0x6d, 0x43, 0x70, 0x75, 0x73, 0x12, 0x28, 0x0a, 0x05, 0x73, - 0x74, 0x61, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6c, 0x69, 0x76, - 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x05, - 0x73, 0x74, 0x61, 0x74, 0x73, 0x12, 0x25, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x4e, 0x6f, - 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x05, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x6c, 0x69, - 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, - 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x22, 0xc6, - 0x08, 0x0a, 0x09, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x1d, 0x0a, 0x0a, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x75, - 0x6d, 0x5f, 0x72, 0x6f, 0x6f, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6e, - 0x75, 0x6d, 0x52, 0x6f, 0x6f, 0x6d, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x6e, 0x75, 0x6d, 0x5f, 0x63, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x6e, 0x75, - 0x6d, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x6e, 0x75, 0x6d, 0x5f, - 0x74, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x5f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0b, 0x6e, 0x75, 0x6d, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x49, 0x6e, 0x12, 0x24, 0x0a, 0x0e, - 0x6e, 0x75, 0x6d, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x5f, 0x6f, 0x75, 0x74, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x6e, 0x75, 0x6d, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x4f, - 0x75, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x69, 0x6e, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x62, 0x79, 0x74, 0x65, 0x73, 0x49, 0x6e, 0x12, 0x1b, 0x0a, - 0x09, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x6f, 0x75, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x08, 0x62, 0x79, 0x74, 0x65, 0x73, 0x4f, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, - 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x69, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, - 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x49, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x61, 0x63, - 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x6f, 0x75, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, - 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x4f, 0x75, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x61, - 0x63, 0x6b, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, - 0x6e, 0x61, 0x63, 0x6b, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x27, 0x0a, 0x10, 0x62, 0x79, 0x74, - 0x65, 0x73, 0x5f, 0x69, 0x6e, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x0c, 0x20, - 0x01, 0x28, 0x02, 0x52, 0x0d, 0x62, 0x79, 0x74, 0x65, 0x73, 0x49, 0x6e, 0x50, 0x65, 0x72, 0x53, - 0x65, 0x63, 0x12, 0x29, 0x0a, 0x11, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x6f, 0x75, 0x74, 0x5f, - 0x70, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0e, 0x62, - 0x79, 0x74, 0x65, 0x73, 0x4f, 0x75, 0x74, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x12, 0x2b, 0x0a, - 0x12, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x69, 0x6e, 0x5f, 0x70, 0x65, 0x72, 0x5f, - 0x73, 0x65, 0x63, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x70, 0x61, 0x63, 0x6b, 0x65, - 0x74, 0x73, 0x49, 0x6e, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x12, 0x2d, 0x0a, 0x13, 0x70, 0x61, - 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x6f, 0x75, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x65, - 0x63, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, - 0x4f, 0x75, 0x74, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x12, 0x20, 0x0a, 0x0c, 0x6e, 0x61, 0x63, - 0x6b, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x10, 0x20, 0x01, 0x28, 0x02, 0x52, - 0x0a, 0x6e, 0x61, 0x63, 0x6b, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x12, 0x19, 0x0a, 0x08, 0x6e, - 0x75, 0x6d, 0x5f, 0x63, 0x70, 0x75, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x6e, - 0x75, 0x6d, 0x43, 0x70, 0x75, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x61, - 0x76, 0x67, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x31, 0x6d, 0x69, 0x6e, 0x18, 0x12, 0x20, 0x01, 0x28, - 0x02, 0x52, 0x0f, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x76, 0x67, 0x4c, 0x61, 0x73, 0x74, 0x31, 0x6d, - 0x69, 0x6e, 0x12, 0x2a, 0x0a, 0x11, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x61, 0x76, 0x67, 0x5f, 0x6c, - 0x61, 0x73, 0x74, 0x35, 0x6d, 0x69, 0x6e, 0x18, 0x13, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x6c, - 0x6f, 0x61, 0x64, 0x41, 0x76, 0x67, 0x4c, 0x61, 0x73, 0x74, 0x35, 0x6d, 0x69, 0x6e, 0x12, 0x2c, - 0x0a, 0x12, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x61, 0x76, 0x67, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x31, - 0x35, 0x6d, 0x69, 0x6e, 0x18, 0x14, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x6c, 0x6f, 0x61, 0x64, - 0x41, 0x76, 0x67, 0x4c, 0x61, 0x73, 0x74, 0x31, 0x35, 0x6d, 0x69, 0x6e, 0x12, 0x19, 0x0a, 0x08, - 0x63, 0x70, 0x75, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x15, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, - 0x63, 0x70, 0x75, 0x4c, 0x6f, 0x61, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x72, 0x65, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x6f, 0x75, 0x74, 0x18, - 0x16, 0x20, 0x01, 0x28, 0x04, 0x52, 0x12, 0x72, 0x65, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, - 0x74, 0x42, 0x79, 0x74, 0x65, 0x73, 0x4f, 0x75, 0x74, 0x12, 0x34, 0x0a, 0x16, 0x72, 0x65, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, - 0x6f, 0x75, 0x74, 0x18, 0x17, 0x20, 0x01, 0x28, 0x04, 0x52, 0x14, 0x72, 0x65, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x4f, 0x75, 0x74, 0x12, - 0x3e, 0x0a, 0x1c, 0x72, 0x65, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x5f, 0x62, 0x79, - 0x74, 0x65, 0x73, 0x5f, 0x6f, 0x75, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x63, 0x18, - 0x18, 0x20, 0x01, 0x28, 0x02, 0x52, 0x18, 0x72, 0x65, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, - 0x74, 0x42, 0x79, 0x74, 0x65, 0x73, 0x4f, 0x75, 0x74, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x12, - 0x42, 0x0a, 0x1e, 0x72, 0x65, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x5f, 0x70, 0x61, - 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x6f, 0x75, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x65, - 0x63, 0x18, 0x19, 0x20, 0x01, 0x28, 0x02, 0x52, 0x1a, 0x72, 0x65, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x6d, 0x69, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x4f, 0x75, 0x74, 0x50, 0x65, 0x72, - 0x53, 0x65, 0x63, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, - 0x6e, 0x74, 0x5f, 0x6a, 0x6f, 0x69, 0x6e, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x70, - 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x12, 0x37, - 0x0a, 0x18, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x5f, 0x6a, 0x6f, - 0x69, 0x6e, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x02, - 0x52, 0x15, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x4a, 0x6f, 0x69, - 0x6e, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x22, 0x9d, 0x06, 0x0a, 0x0e, 0x52, 0x54, 0x43, 0x4e, - 0x6f, 0x64, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x61, - 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, - 0x4b, 0x65, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, - 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3c, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x73, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6c, 0x69, - 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x32, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x53, 0x69, - 0x67, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x07, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x51, 0x0a, 0x12, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, - 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x52, 0x6f, 0x6f, - 0x6d, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x48, 0x00, 0x52, 0x11, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x61, - 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x12, 0x3e, 0x0a, 0x0a, 0x6d, 0x75, 0x74, - 0x65, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, - 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x4d, 0x75, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, - 0x54, 0x72, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x09, - 0x6d, 0x75, 0x74, 0x65, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x12, 0x52, 0x0a, 0x12, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x11, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x12, 0x3d, 0x0a, - 0x0b, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x72, 0x6f, 0x6f, 0x6d, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, - 0x52, 0x0a, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x58, 0x0a, 0x14, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6c, 0x69, 0x76, - 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, - 0x00, 0x52, 0x13, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x37, 0x0a, 0x09, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6c, 0x69, 0x76, 0x65, - 0x6b, 0x69, 0x74, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x08, 0x73, 0x65, 0x6e, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, - 0x56, 0x0a, 0x14, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x6d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, - 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, - 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x48, 0x00, 0x52, 0x12, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x33, 0x0a, 0x0a, 0x6b, 0x65, 0x65, 0x70, 0x5f, - 0x61, 0x6c, 0x69, 0x76, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6c, 0x69, - 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x4b, 0x65, 0x65, 0x70, 0x41, 0x6c, 0x69, 0x76, 0x65, 0x48, - 0x00, 0x52, 0x09, 0x6b, 0x65, 0x65, 0x70, 0x41, 0x6c, 0x69, 0x76, 0x65, 0x42, 0x09, 0x0a, 0x07, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xb2, 0x01, 0x0a, 0x11, 0x53, 0x69, 0x67, 0x6e, - 0x61, 0x6c, 0x4e, 0x6f, 0x64, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x23, 0x0a, - 0x0d, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x11, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, + 0x5f, 0x72, 0x74, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x12, 0x6c, 0x69, 0x76, 0x65, + 0x6b, 0x69, 0x74, 0x5f, 0x72, 0x6f, 0x6f, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xd4, + 0x01, 0x0a, 0x04, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x70, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x70, 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x75, 0x6d, 0x5f, 0x63, + 0x70, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x6e, 0x75, 0x6d, 0x43, 0x70, + 0x75, 0x73, 0x12, 0x28, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x12, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x4e, 0x6f, 0x64, 0x65, + 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x12, 0x25, 0x0a, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x6c, 0x69, 0x76, + 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x4e, 0x6f, 0x64, + 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, + 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, + 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x22, 0xc6, 0x08, 0x0a, 0x09, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, + 0x61, 0x74, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x61, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, + 0x41, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, + 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x75, 0x6d, 0x5f, 0x72, 0x6f, 0x6f, 0x6d, 0x73, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6e, 0x75, 0x6d, 0x52, 0x6f, 0x6f, 0x6d, 0x73, 0x12, 0x1f, + 0x0a, 0x0b, 0x6e, 0x75, 0x6d, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0a, 0x6e, 0x75, 0x6d, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x12, + 0x22, 0x0a, 0x0d, 0x6e, 0x75, 0x6d, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x5f, 0x69, 0x6e, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6e, 0x75, 0x6d, 0x54, 0x72, 0x61, 0x63, 0x6b, + 0x73, 0x49, 0x6e, 0x12, 0x24, 0x0a, 0x0e, 0x6e, 0x75, 0x6d, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x6b, + 0x73, 0x5f, 0x6f, 0x75, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x6e, 0x75, 0x6d, + 0x54, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x4f, 0x75, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x62, 0x79, 0x74, + 0x65, 0x73, 0x5f, 0x69, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x62, 0x79, 0x74, + 0x65, 0x73, 0x49, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x6f, 0x75, + 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x62, 0x79, 0x74, 0x65, 0x73, 0x4f, 0x75, + 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x69, 0x6e, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x49, 0x6e, + 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x6f, 0x75, 0x74, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x4f, 0x75, + 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x61, 0x63, 0x6b, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6e, 0x61, 0x63, 0x6b, 0x54, 0x6f, 0x74, 0x61, 0x6c, + 0x12, 0x27, 0x0a, 0x10, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x69, 0x6e, 0x5f, 0x70, 0x65, 0x72, + 0x5f, 0x73, 0x65, 0x63, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0d, 0x62, 0x79, 0x74, 0x65, + 0x73, 0x49, 0x6e, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x12, 0x29, 0x0a, 0x11, 0x62, 0x79, 0x74, + 0x65, 0x73, 0x5f, 0x6f, 0x75, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x0d, + 0x20, 0x01, 0x28, 0x02, 0x52, 0x0e, 0x62, 0x79, 0x74, 0x65, 0x73, 0x4f, 0x75, 0x74, 0x50, 0x65, + 0x72, 0x53, 0x65, 0x63, 0x12, 0x2b, 0x0a, 0x12, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, + 0x69, 0x6e, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x02, + 0x52, 0x0f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x49, 0x6e, 0x50, 0x65, 0x72, 0x53, 0x65, + 0x63, 0x12, 0x2d, 0x0a, 0x13, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x6f, 0x75, 0x74, + 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, + 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x4f, 0x75, 0x74, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, + 0x12, 0x20, 0x0a, 0x0c, 0x6e, 0x61, 0x63, 0x6b, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x63, + 0x18, 0x10, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0a, 0x6e, 0x61, 0x63, 0x6b, 0x50, 0x65, 0x72, 0x53, + 0x65, 0x63, 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x75, 0x6d, 0x5f, 0x63, 0x70, 0x75, 0x73, 0x18, 0x11, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x6e, 0x75, 0x6d, 0x43, 0x70, 0x75, 0x73, 0x12, 0x2a, 0x0a, + 0x11, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x61, 0x76, 0x67, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x31, 0x6d, + 0x69, 0x6e, 0x18, 0x12, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x76, + 0x67, 0x4c, 0x61, 0x73, 0x74, 0x31, 0x6d, 0x69, 0x6e, 0x12, 0x2a, 0x0a, 0x11, 0x6c, 0x6f, 0x61, + 0x64, 0x5f, 0x61, 0x76, 0x67, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x35, 0x6d, 0x69, 0x6e, 0x18, 0x13, + 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x76, 0x67, 0x4c, 0x61, 0x73, + 0x74, 0x35, 0x6d, 0x69, 0x6e, 0x12, 0x2c, 0x0a, 0x12, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x61, 0x76, + 0x67, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x31, 0x35, 0x6d, 0x69, 0x6e, 0x18, 0x14, 0x20, 0x01, 0x28, + 0x02, 0x52, 0x10, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x76, 0x67, 0x4c, 0x61, 0x73, 0x74, 0x31, 0x35, + 0x6d, 0x69, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x70, 0x75, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x18, + 0x15, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, 0x63, 0x70, 0x75, 0x4c, 0x6f, 0x61, 0x64, 0x12, 0x30, + 0x0a, 0x14, 0x72, 0x65, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x5f, 0x62, 0x79, 0x74, + 0x65, 0x73, 0x5f, 0x6f, 0x75, 0x74, 0x18, 0x16, 0x20, 0x01, 0x28, 0x04, 0x52, 0x12, 0x72, 0x65, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x42, 0x79, 0x74, 0x65, 0x73, 0x4f, 0x75, 0x74, + 0x12, 0x34, 0x0a, 0x16, 0x72, 0x65, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x5f, 0x70, + 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x6f, 0x75, 0x74, 0x18, 0x17, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x14, 0x72, 0x65, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x50, 0x61, 0x63, 0x6b, + 0x65, 0x74, 0x73, 0x4f, 0x75, 0x74, 0x12, 0x3e, 0x0a, 0x1c, 0x72, 0x65, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x6d, 0x69, 0x74, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x6f, 0x75, 0x74, 0x5f, 0x70, + 0x65, 0x72, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x18, 0x20, 0x01, 0x28, 0x02, 0x52, 0x18, 0x72, 0x65, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x42, 0x79, 0x74, 0x65, 0x73, 0x4f, 0x75, 0x74, + 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x12, 0x42, 0x0a, 0x1e, 0x72, 0x65, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x6d, 0x69, 0x74, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x6f, 0x75, 0x74, + 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x19, 0x20, 0x01, 0x28, 0x02, 0x52, 0x1a, + 0x72, 0x65, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x73, 0x4f, 0x75, 0x74, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x61, + 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x5f, 0x6a, 0x6f, 0x69, 0x6e, 0x18, 0x1a, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, + 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x12, 0x37, 0x0a, 0x18, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, + 0x70, 0x61, 0x6e, 0x74, 0x5f, 0x6a, 0x6f, 0x69, 0x6e, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x65, + 0x63, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x02, 0x52, 0x15, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, + 0x70, 0x61, 0x6e, 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x22, 0x9d, + 0x06, 0x0a, 0x0e, 0x52, 0x54, 0x43, 0x4e, 0x6f, 0x64, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, + 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70, 0x61, 0x72, 0x74, + 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, + 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x0a, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3c, 0x0a, 0x0d, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x53, 0x74, 0x61, + 0x72, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x0a, 0x07, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6c, 0x69, 0x76, + 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x48, 0x00, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x51, 0x0a, + 0x12, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, + 0x61, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6c, 0x69, 0x76, 0x65, + 0x6b, 0x69, 0x74, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, + 0x61, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x48, 0x00, 0x52, 0x11, 0x72, + 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, + 0x12, 0x3e, 0x0a, 0x0a, 0x6d, 0x75, 0x74, 0x65, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x4d, + 0x75, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x09, 0x6d, 0x75, 0x74, 0x65, 0x54, 0x72, 0x61, 0x63, 0x6b, + 0x12, 0x52, 0x0a, 0x12, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, + 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6c, + 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, + 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, + 0x00, 0x52, 0x11, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, + 0x70, 0x61, 0x6e, 0x74, 0x12, 0x3d, 0x0a, 0x0b, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x72, + 0x6f, 0x6f, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6c, 0x69, 0x76, 0x65, + 0x6b, 0x69, 0x74, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0a, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, + 0x6f, 0x6f, 0x6d, 0x12, 0x58, 0x0a, 0x14, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x75, + 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x23, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x13, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x37, 0x0a, + 0x09, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x18, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x44, + 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x08, 0x73, 0x65, + 0x6e, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x56, 0x0a, 0x14, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x5f, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x12, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x33, + 0x0a, 0x0a, 0x6b, 0x65, 0x65, 0x70, 0x5f, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x18, 0x0c, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x4b, 0x65, 0x65, + 0x70, 0x41, 0x6c, 0x69, 0x76, 0x65, 0x48, 0x00, 0x52, 0x09, 0x6b, 0x65, 0x65, 0x70, 0x41, 0x6c, + 0x69, 0x76, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xb2, + 0x01, 0x0a, 0x11, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x4e, 0x6f, 0x64, 0x65, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6e, + 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x35, 0x0a, 0x08, 0x72, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6c, 0x69, + 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x36, 0x0a, 0x0b, 0x65, 0x6e, 0x64, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, + 0x45, 0x6e, 0x64, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0a, 0x65, 0x6e, + 0x64, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x22, 0xf0, 0x02, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x53, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x6f, 0x6f, 0x6d, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x23, 0x0a, + 0x0d, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x64, 0x12, 0x35, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x53, - 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, - 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x0b, 0x65, 0x6e, 0x64, - 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x45, 0x6e, 0x64, 0x53, 0x65, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0a, 0x65, 0x6e, 0x64, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xf0, 0x02, 0x0a, - 0x0c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, - 0x09, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x72, 0x6f, 0x6f, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x72, - 0x65, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, - 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x75, 0x74, - 0x6f, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0d, 0x61, 0x75, 0x74, 0x6f, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x06, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x12, 0x2b, 0x0a, 0x06, 0x63, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, - 0x69, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x65, - 0x72, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x65, - 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x5f, - 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x67, 0x72, 0x61, 0x6e, - 0x74, 0x73, 0x4a, 0x73, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x64, 0x61, 0x70, 0x74, 0x69, - 0x76, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0e, 0x61, 0x64, 0x61, 0x70, 0x74, 0x69, 0x76, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x22, - 0x0c, 0x0a, 0x0a, 0x45, 0x6e, 0x64, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x0a, - 0x11, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, - 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x61, 0x72, 0x74, - 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x49, 0x0a, 0x14, 0x52, 0x65, 0x63, - 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x5f, 0x61, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x74, - 0x65, 0x64, 0x41, 0x74, 0x22, 0xa7, 0x02, 0x0a, 0x10, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, - 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, - 0x74, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x12, 0x3a, 0x0a, 0x0a, 0x61, 0x64, 0x64, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x41, - 0x64, 0x64, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, - 0x00, 0x52, 0x09, 0x61, 0x64, 0x64, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x43, 0x0a, 0x0d, - 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x52, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x48, 0x00, 0x52, 0x0c, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x12, 0x30, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, - 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x45, 0x6e, 0x64, 0x52, 0x65, 0x63, 0x6f, - 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x03, - 0x65, 0x6e, 0x64, 0x42, 0x09, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x48, - 0x0a, 0x11, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x0b, 0x0a, 0x09, 0x4b, 0x65, 0x65, 0x70, - 0x41, 0x6c, 0x69, 0x76, 0x65, 0x2a, 0x3b, 0x0a, 0x08, 0x4e, 0x6f, 0x64, 0x65, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x10, 0x00, 0x12, 0x0e, 0x0a, - 0x0a, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x4c, 0x45, 0x52, 0x10, 0x01, 0x12, 0x09, 0x0a, - 0x05, 0x4d, 0x45, 0x44, 0x49, 0x41, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x55, 0x52, 0x4e, - 0x10, 0x04, 0x2a, 0x3c, 0x0a, 0x09, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, - 0x0f, 0x0a, 0x0b, 0x53, 0x54, 0x41, 0x52, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x55, 0x50, 0x10, 0x00, - 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x45, 0x52, 0x56, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x11, 0x0a, - 0x0d, 0x53, 0x48, 0x55, 0x54, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x02, - 0x42, 0x46, 0x5a, 0x23, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, - 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, - 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0xaa, 0x02, 0x0d, 0x4c, 0x69, 0x76, 0x65, 0x4b, 0x69, - 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0xea, 0x02, 0x0e, 0x4c, 0x69, 0x76, 0x65, 0x4b, 0x69, - 0x74, 0x3a, 0x3a, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x62, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x61, 0x75, 0x74, 0x6f, 0x53, 0x75, + 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x69, 0x64, 0x64, 0x65, + 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x12, + 0x2b, 0x0a, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x13, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, + 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, + 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, + 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x18, 0x0e, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x4a, 0x73, 0x6f, 0x6e, 0x12, 0x27, 0x0a, + 0x0f, 0x61, 0x64, 0x61, 0x70, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x61, 0x64, 0x61, 0x70, 0x74, 0x69, 0x76, 0x65, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x22, 0x0c, 0x0a, 0x0a, 0x45, 0x6e, 0x64, 0x53, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x0a, 0x11, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x61, + 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x61, 0x72, + 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0d, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x49, 0x64, + 0x22, 0x0b, 0x0a, 0x09, 0x4b, 0x65, 0x65, 0x70, 0x41, 0x6c, 0x69, 0x76, 0x65, 0x2a, 0x3b, 0x0a, + 0x08, 0x4e, 0x6f, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x45, 0x52, + 0x56, 0x45, 0x52, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, + 0x4c, 0x45, 0x52, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x4d, 0x45, 0x44, 0x49, 0x41, 0x10, 0x02, + 0x12, 0x08, 0x0a, 0x04, 0x54, 0x55, 0x52, 0x4e, 0x10, 0x04, 0x2a, 0x3c, 0x0a, 0x09, 0x4e, 0x6f, + 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x54, 0x41, 0x52, 0x54, + 0x49, 0x4e, 0x47, 0x5f, 0x55, 0x50, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x45, 0x52, 0x56, + 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x48, 0x55, 0x54, 0x54, 0x49, 0x4e, + 0x47, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x02, 0x42, 0x46, 0x5a, 0x23, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0xaa, + 0x02, 0x0d, 0x4c, 0x69, 0x76, 0x65, 0x4b, 0x69, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0xea, + 0x02, 0x0e, 0x4c, 0x69, 0x76, 0x65, 0x4b, 0x69, 0x74, 0x3a, 0x3a, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1493,7 +1238,7 @@ func file_livekit_internal_proto_rawDescGZIP() []byte { } var file_livekit_internal_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_livekit_internal_proto_msgTypes = make([]protoimpl.MessageInfo, 11) +var file_livekit_internal_proto_msgTypes = make([]protoimpl.MessageInfo, 8) var file_livekit_internal_proto_goTypes = []interface{}{ (NodeType)(0), // 0: livekit.NodeType (NodeState)(0), // 1: livekit.NodeState @@ -1504,51 +1249,40 @@ var file_livekit_internal_proto_goTypes = []interface{}{ (*StartSession)(nil), // 6: livekit.StartSession (*EndSession)(nil), // 7: livekit.EndSession (*RemoveParticipant)(nil), // 8: livekit.RemoveParticipant - (*RecordingReservation)(nil), // 9: livekit.RecordingReservation - (*RecordingRequest)(nil), // 10: livekit.RecordingRequest - (*RecordingResponse)(nil), // 11: livekit.RecordingResponse - (*KeepAlive)(nil), // 12: livekit.KeepAlive - (*SignalRequest)(nil), // 13: livekit.SignalRequest - (*RoomParticipantIdentity)(nil), // 14: livekit.RoomParticipantIdentity - (*MuteRoomTrackRequest)(nil), // 15: livekit.MuteRoomTrackRequest - (*UpdateParticipantRequest)(nil), // 16: livekit.UpdateParticipantRequest - (*DeleteRoomRequest)(nil), // 17: livekit.DeleteRoomRequest - (*UpdateSubscriptionsRequest)(nil), // 18: livekit.UpdateSubscriptionsRequest - (*SendDataRequest)(nil), // 19: livekit.SendDataRequest - (*UpdateRoomMetadataRequest)(nil), // 20: livekit.UpdateRoomMetadataRequest - (*SignalResponse)(nil), // 21: livekit.SignalResponse - (*ClientInfo)(nil), // 22: livekit.ClientInfo - (*StartRecordingRequest)(nil), // 23: livekit.StartRecordingRequest - (*AddOutputRequest)(nil), // 24: livekit.AddOutputRequest - (*RemoveOutputRequest)(nil), // 25: livekit.RemoveOutputRequest - (*EndRecordingRequest)(nil), // 26: livekit.EndRecordingRequest + (*KeepAlive)(nil), // 9: livekit.KeepAlive + (*SignalRequest)(nil), // 10: livekit.SignalRequest + (*RoomParticipantIdentity)(nil), // 11: livekit.RoomParticipantIdentity + (*MuteRoomTrackRequest)(nil), // 12: livekit.MuteRoomTrackRequest + (*UpdateParticipantRequest)(nil), // 13: livekit.UpdateParticipantRequest + (*DeleteRoomRequest)(nil), // 14: livekit.DeleteRoomRequest + (*UpdateSubscriptionsRequest)(nil), // 15: livekit.UpdateSubscriptionsRequest + (*SendDataRequest)(nil), // 16: livekit.SendDataRequest + (*UpdateRoomMetadataRequest)(nil), // 17: livekit.UpdateRoomMetadataRequest + (*SignalResponse)(nil), // 18: livekit.SignalResponse + (*ClientInfo)(nil), // 19: livekit.ClientInfo } var file_livekit_internal_proto_depIdxs = []int32{ 3, // 0: livekit.Node.stats:type_name -> livekit.NodeStats 0, // 1: livekit.Node.type:type_name -> livekit.NodeType 1, // 2: livekit.Node.state:type_name -> livekit.NodeState 6, // 3: livekit.RTCNodeMessage.start_session:type_name -> livekit.StartSession - 13, // 4: livekit.RTCNodeMessage.request:type_name -> livekit.SignalRequest - 14, // 5: livekit.RTCNodeMessage.remove_participant:type_name -> livekit.RoomParticipantIdentity - 15, // 6: livekit.RTCNodeMessage.mute_track:type_name -> livekit.MuteRoomTrackRequest - 16, // 7: livekit.RTCNodeMessage.update_participant:type_name -> livekit.UpdateParticipantRequest - 17, // 8: livekit.RTCNodeMessage.delete_room:type_name -> livekit.DeleteRoomRequest - 18, // 9: livekit.RTCNodeMessage.update_subscriptions:type_name -> livekit.UpdateSubscriptionsRequest - 19, // 10: livekit.RTCNodeMessage.send_data:type_name -> livekit.SendDataRequest - 20, // 11: livekit.RTCNodeMessage.update_room_metadata:type_name -> livekit.UpdateRoomMetadataRequest - 12, // 12: livekit.RTCNodeMessage.keep_alive:type_name -> livekit.KeepAlive - 21, // 13: livekit.SignalNodeMessage.response:type_name -> livekit.SignalResponse + 10, // 4: livekit.RTCNodeMessage.request:type_name -> livekit.SignalRequest + 11, // 5: livekit.RTCNodeMessage.remove_participant:type_name -> livekit.RoomParticipantIdentity + 12, // 6: livekit.RTCNodeMessage.mute_track:type_name -> livekit.MuteRoomTrackRequest + 13, // 7: livekit.RTCNodeMessage.update_participant:type_name -> livekit.UpdateParticipantRequest + 14, // 8: livekit.RTCNodeMessage.delete_room:type_name -> livekit.DeleteRoomRequest + 15, // 9: livekit.RTCNodeMessage.update_subscriptions:type_name -> livekit.UpdateSubscriptionsRequest + 16, // 10: livekit.RTCNodeMessage.send_data:type_name -> livekit.SendDataRequest + 17, // 11: livekit.RTCNodeMessage.update_room_metadata:type_name -> livekit.UpdateRoomMetadataRequest + 9, // 12: livekit.RTCNodeMessage.keep_alive:type_name -> livekit.KeepAlive + 18, // 13: livekit.SignalNodeMessage.response:type_name -> livekit.SignalResponse 7, // 14: livekit.SignalNodeMessage.end_session:type_name -> livekit.EndSession - 22, // 15: livekit.StartSession.client:type_name -> livekit.ClientInfo - 23, // 16: livekit.RecordingRequest.start:type_name -> livekit.StartRecordingRequest - 24, // 17: livekit.RecordingRequest.add_output:type_name -> livekit.AddOutputRequest - 25, // 18: livekit.RecordingRequest.remove_output:type_name -> livekit.RemoveOutputRequest - 26, // 19: livekit.RecordingRequest.end:type_name -> livekit.EndRecordingRequest - 20, // [20:20] is the sub-list for method output_type - 20, // [20:20] is the sub-list for method input_type - 20, // [20:20] is the sub-list for extension type_name - 20, // [20:20] is the sub-list for extension extendee - 0, // [0:20] is the sub-list for field type_name + 19, // 15: livekit.StartSession.client:type_name -> livekit.ClientInfo + 16, // [16:16] is the sub-list for method output_type + 16, // [16:16] is the sub-list for method input_type + 16, // [16:16] is the sub-list for extension type_name + 16, // [16:16] is the sub-list for extension extendee + 0, // [0:16] is the sub-list for field type_name } func init() { file_livekit_internal_proto_init() } @@ -1557,7 +1291,6 @@ func file_livekit_internal_proto_init() { return } file_livekit_models_proto_init() - file_livekit_recording_proto_init() file_livekit_rtc_proto_init() file_livekit_room_proto_init() if !protoimpl.UnsafeEnabled { @@ -1646,42 +1379,6 @@ func file_livekit_internal_proto_init() { } } file_livekit_internal_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RecordingReservation); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_livekit_internal_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RecordingRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_livekit_internal_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RecordingResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_livekit_internal_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*KeepAlive); i { case 0: return &v.state @@ -1710,19 +1407,13 @@ func file_livekit_internal_proto_init() { (*SignalNodeMessage_Response)(nil), (*SignalNodeMessage_EndSession)(nil), } - file_livekit_internal_proto_msgTypes[8].OneofWrappers = []interface{}{ - (*RecordingRequest_Start)(nil), - (*RecordingRequest_AddOutput)(nil), - (*RecordingRequest_RemoveOutput)(nil), - (*RecordingRequest_End)(nil), - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_livekit_internal_proto_rawDesc, NumEnums: 2, - NumMessages: 11, + NumMessages: 8, NumExtensions: 0, NumServices: 0, }, diff --git a/livekit/livekit_recording.pb.go b/livekit/livekit_recording.pb.go deleted file mode 100644 index 565ed40b..00000000 --- a/livekit/livekit_recording.pb.go +++ /dev/null @@ -1,1169 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.27.1 -// protoc v3.19.4 -// source: livekit_recording.proto - -package livekit - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - emptypb "google.golang.org/protobuf/types/known/emptypb" - 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 RecordingPreset int32 - -const ( - // All presets use 44100 Hz, 128k bitrate for audio and a color depth of 24 - RecordingPreset_NONE RecordingPreset = 0 - RecordingPreset_HD_30 RecordingPreset = 1 // 720p, 30fps, 3000 kpbs - RecordingPreset_HD_60 RecordingPreset = 2 // 720p, 60fps, 4500 kbps - RecordingPreset_FULL_HD_30 RecordingPreset = 3 // 1080p, 30fps, 4500 kbps - RecordingPreset_FULL_HD_60 RecordingPreset = 4 // 1080p, 60fps, 6000 kbps -) - -// Enum value maps for RecordingPreset. -var ( - RecordingPreset_name = map[int32]string{ - 0: "NONE", - 1: "HD_30", - 2: "HD_60", - 3: "FULL_HD_30", - 4: "FULL_HD_60", - } - RecordingPreset_value = map[string]int32{ - "NONE": 0, - "HD_30": 1, - "HD_60": 2, - "FULL_HD_30": 3, - "FULL_HD_60": 4, - } -) - -func (x RecordingPreset) Enum() *RecordingPreset { - p := new(RecordingPreset) - *p = x - return p -} - -func (x RecordingPreset) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (RecordingPreset) Descriptor() protoreflect.EnumDescriptor { - return file_livekit_recording_proto_enumTypes[0].Descriptor() -} - -func (RecordingPreset) Type() protoreflect.EnumType { - return &file_livekit_recording_proto_enumTypes[0] -} - -func (x RecordingPreset) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use RecordingPreset.Descriptor instead. -func (RecordingPreset) EnumDescriptor() ([]byte, []int) { - return file_livekit_recording_proto_rawDescGZIP(), []int{0} -} - -type StartRecordingRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Input: - // *StartRecordingRequest_Url - // *StartRecordingRequest_Template - Input isStartRecordingRequest_Input `protobuf_oneof:"input"` - // Types that are assignable to Output: - // *StartRecordingRequest_Rtmp - // *StartRecordingRequest_Filepath - Output isStartRecordingRequest_Output `protobuf_oneof:"output"` - Options *RecordingOptions `protobuf:"bytes,5,opt,name=options,proto3" json:"options,omitempty"` -} - -func (x *StartRecordingRequest) Reset() { - *x = StartRecordingRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_livekit_recording_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StartRecordingRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StartRecordingRequest) ProtoMessage() {} - -func (x *StartRecordingRequest) ProtoReflect() protoreflect.Message { - mi := &file_livekit_recording_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 StartRecordingRequest.ProtoReflect.Descriptor instead. -func (*StartRecordingRequest) Descriptor() ([]byte, []int) { - return file_livekit_recording_proto_rawDescGZIP(), []int{0} -} - -func (m *StartRecordingRequest) GetInput() isStartRecordingRequest_Input { - if m != nil { - return m.Input - } - return nil -} - -func (x *StartRecordingRequest) GetUrl() string { - if x, ok := x.GetInput().(*StartRecordingRequest_Url); ok { - return x.Url - } - return "" -} - -func (x *StartRecordingRequest) GetTemplate() *RecordingTemplate { - if x, ok := x.GetInput().(*StartRecordingRequest_Template); ok { - return x.Template - } - return nil -} - -func (m *StartRecordingRequest) GetOutput() isStartRecordingRequest_Output { - if m != nil { - return m.Output - } - return nil -} - -func (x *StartRecordingRequest) GetRtmp() *RtmpOutput { - if x, ok := x.GetOutput().(*StartRecordingRequest_Rtmp); ok { - return x.Rtmp - } - return nil -} - -func (x *StartRecordingRequest) GetFilepath() string { - if x, ok := x.GetOutput().(*StartRecordingRequest_Filepath); ok { - return x.Filepath - } - return "" -} - -func (x *StartRecordingRequest) GetOptions() *RecordingOptions { - if x != nil { - return x.Options - } - return nil -} - -type isStartRecordingRequest_Input interface { - isStartRecordingRequest_Input() -} - -type StartRecordingRequest_Url struct { - Url string `protobuf:"bytes,1,opt,name=url,proto3,oneof"` -} - -type StartRecordingRequest_Template struct { - Template *RecordingTemplate `protobuf:"bytes,2,opt,name=template,proto3,oneof"` -} - -func (*StartRecordingRequest_Url) isStartRecordingRequest_Input() {} - -func (*StartRecordingRequest_Template) isStartRecordingRequest_Input() {} - -type isStartRecordingRequest_Output interface { - isStartRecordingRequest_Output() -} - -type StartRecordingRequest_Rtmp struct { - Rtmp *RtmpOutput `protobuf:"bytes,3,opt,name=rtmp,proto3,oneof"` -} - -type StartRecordingRequest_Filepath struct { - Filepath string `protobuf:"bytes,4,opt,name=filepath,proto3,oneof"` -} - -func (*StartRecordingRequest_Rtmp) isStartRecordingRequest_Output() {} - -func (*StartRecordingRequest_Filepath) isStartRecordingRequest_Output() {} - -type RecordingTemplate struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Layout string `protobuf:"bytes,1,opt,name=layout,proto3" json:"layout,omitempty"` - RoomName string `protobuf:"bytes,2,opt,name=room_name,json=roomName,proto3" json:"room_name,omitempty"` - BaseUrl string `protobuf:"bytes,3,opt,name=base_url,json=baseUrl,proto3" json:"base_url,omitempty"` // defaults to https://recorder.livekit.io -} - -func (x *RecordingTemplate) Reset() { - *x = RecordingTemplate{} - if protoimpl.UnsafeEnabled { - mi := &file_livekit_recording_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RecordingTemplate) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RecordingTemplate) ProtoMessage() {} - -func (x *RecordingTemplate) ProtoReflect() protoreflect.Message { - mi := &file_livekit_recording_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 RecordingTemplate.ProtoReflect.Descriptor instead. -func (*RecordingTemplate) Descriptor() ([]byte, []int) { - return file_livekit_recording_proto_rawDescGZIP(), []int{1} -} - -func (x *RecordingTemplate) GetLayout() string { - if x != nil { - return x.Layout - } - return "" -} - -func (x *RecordingTemplate) GetRoomName() string { - if x != nil { - return x.RoomName - } - return "" -} - -func (x *RecordingTemplate) GetBaseUrl() string { - if x != nil { - return x.BaseUrl - } - return "" -} - -type RtmpOutput struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Urls []string `protobuf:"bytes,1,rep,name=urls,proto3" json:"urls,omitempty"` -} - -func (x *RtmpOutput) Reset() { - *x = RtmpOutput{} - if protoimpl.UnsafeEnabled { - mi := &file_livekit_recording_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RtmpOutput) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RtmpOutput) ProtoMessage() {} - -func (x *RtmpOutput) ProtoReflect() protoreflect.Message { - mi := &file_livekit_recording_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 RtmpOutput.ProtoReflect.Descriptor instead. -func (*RtmpOutput) Descriptor() ([]byte, []int) { - return file_livekit_recording_proto_rawDescGZIP(), []int{2} -} - -func (x *RtmpOutput) GetUrls() []string { - if x != nil { - return x.Urls - } - return nil -} - -type RecordingOptions struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Preset RecordingPreset `protobuf:"varint,1,opt,name=preset,proto3,enum=livekit.RecordingPreset" json:"preset,omitempty"` - Width int32 `protobuf:"varint,2,opt,name=width,proto3" json:"width,omitempty"` // default 1920 - Height int32 `protobuf:"varint,3,opt,name=height,proto3" json:"height,omitempty"` // default 1080 - Depth int32 `protobuf:"varint,4,opt,name=depth,proto3" json:"depth,omitempty"` // default 24 - Framerate int32 `protobuf:"varint,5,opt,name=framerate,proto3" json:"framerate,omitempty"` // default 30 - AudioBitrate int32 `protobuf:"varint,6,opt,name=audio_bitrate,json=audioBitrate,proto3" json:"audio_bitrate,omitempty"` // default 128 - AudioFrequency int32 `protobuf:"varint,7,opt,name=audio_frequency,json=audioFrequency,proto3" json:"audio_frequency,omitempty"` // default 44100 - VideoBitrate int32 `protobuf:"varint,8,opt,name=video_bitrate,json=videoBitrate,proto3" json:"video_bitrate,omitempty"` // default 4500 - Profile string `protobuf:"bytes,9,opt,name=profile,proto3" json:"profile,omitempty"` // baseline, main, or high. default main -} - -func (x *RecordingOptions) Reset() { - *x = RecordingOptions{} - if protoimpl.UnsafeEnabled { - mi := &file_livekit_recording_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RecordingOptions) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RecordingOptions) ProtoMessage() {} - -func (x *RecordingOptions) ProtoReflect() protoreflect.Message { - mi := &file_livekit_recording_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 RecordingOptions.ProtoReflect.Descriptor instead. -func (*RecordingOptions) Descriptor() ([]byte, []int) { - return file_livekit_recording_proto_rawDescGZIP(), []int{3} -} - -func (x *RecordingOptions) GetPreset() RecordingPreset { - if x != nil { - return x.Preset - } - return RecordingPreset_NONE -} - -func (x *RecordingOptions) GetWidth() int32 { - if x != nil { - return x.Width - } - return 0 -} - -func (x *RecordingOptions) GetHeight() int32 { - if x != nil { - return x.Height - } - return 0 -} - -func (x *RecordingOptions) GetDepth() int32 { - if x != nil { - return x.Depth - } - return 0 -} - -func (x *RecordingOptions) GetFramerate() int32 { - if x != nil { - return x.Framerate - } - return 0 -} - -func (x *RecordingOptions) GetAudioBitrate() int32 { - if x != nil { - return x.AudioBitrate - } - return 0 -} - -func (x *RecordingOptions) GetAudioFrequency() int32 { - if x != nil { - return x.AudioFrequency - } - return 0 -} - -func (x *RecordingOptions) GetVideoBitrate() int32 { - if x != nil { - return x.VideoBitrate - } - return 0 -} - -func (x *RecordingOptions) GetProfile() string { - if x != nil { - return x.Profile - } - return "" -} - -type StartRecordingResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RecordingId string `protobuf:"bytes,1,opt,name=recording_id,json=recordingId,proto3" json:"recording_id,omitempty"` -} - -func (x *StartRecordingResponse) Reset() { - *x = StartRecordingResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_livekit_recording_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StartRecordingResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StartRecordingResponse) ProtoMessage() {} - -func (x *StartRecordingResponse) ProtoReflect() protoreflect.Message { - mi := &file_livekit_recording_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 StartRecordingResponse.ProtoReflect.Descriptor instead. -func (*StartRecordingResponse) Descriptor() ([]byte, []int) { - return file_livekit_recording_proto_rawDescGZIP(), []int{4} -} - -func (x *StartRecordingResponse) GetRecordingId() string { - if x != nil { - return x.RecordingId - } - return "" -} - -type AddOutputRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RecordingId string `protobuf:"bytes,1,opt,name=recording_id,json=recordingId,proto3" json:"recording_id,omitempty"` - RtmpUrl string `protobuf:"bytes,2,opt,name=rtmp_url,json=rtmpUrl,proto3" json:"rtmp_url,omitempty"` -} - -func (x *AddOutputRequest) Reset() { - *x = AddOutputRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_livekit_recording_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *AddOutputRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AddOutputRequest) ProtoMessage() {} - -func (x *AddOutputRequest) ProtoReflect() protoreflect.Message { - mi := &file_livekit_recording_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 AddOutputRequest.ProtoReflect.Descriptor instead. -func (*AddOutputRequest) Descriptor() ([]byte, []int) { - return file_livekit_recording_proto_rawDescGZIP(), []int{5} -} - -func (x *AddOutputRequest) GetRecordingId() string { - if x != nil { - return x.RecordingId - } - return "" -} - -func (x *AddOutputRequest) GetRtmpUrl() string { - if x != nil { - return x.RtmpUrl - } - return "" -} - -type RemoveOutputRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RecordingId string `protobuf:"bytes,1,opt,name=recording_id,json=recordingId,proto3" json:"recording_id,omitempty"` - RtmpUrl string `protobuf:"bytes,2,opt,name=rtmp_url,json=rtmpUrl,proto3" json:"rtmp_url,omitempty"` -} - -func (x *RemoveOutputRequest) Reset() { - *x = RemoveOutputRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_livekit_recording_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RemoveOutputRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RemoveOutputRequest) ProtoMessage() {} - -func (x *RemoveOutputRequest) ProtoReflect() protoreflect.Message { - mi := &file_livekit_recording_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 RemoveOutputRequest.ProtoReflect.Descriptor instead. -func (*RemoveOutputRequest) Descriptor() ([]byte, []int) { - return file_livekit_recording_proto_rawDescGZIP(), []int{6} -} - -func (x *RemoveOutputRequest) GetRecordingId() string { - if x != nil { - return x.RecordingId - } - return "" -} - -func (x *RemoveOutputRequest) GetRtmpUrl() string { - if x != nil { - return x.RtmpUrl - } - return "" -} - -type EndRecordingRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RecordingId string `protobuf:"bytes,1,opt,name=recording_id,json=recordingId,proto3" json:"recording_id,omitempty"` -} - -func (x *EndRecordingRequest) Reset() { - *x = EndRecordingRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_livekit_recording_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *EndRecordingRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*EndRecordingRequest) ProtoMessage() {} - -func (x *EndRecordingRequest) ProtoReflect() protoreflect.Message { - mi := &file_livekit_recording_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 EndRecordingRequest.ProtoReflect.Descriptor instead. -func (*EndRecordingRequest) Descriptor() ([]byte, []int) { - return file_livekit_recording_proto_rawDescGZIP(), []int{7} -} - -func (x *EndRecordingRequest) GetRecordingId() string { - if x != nil { - return x.RecordingId - } - return "" -} - -type RecordingInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - RoomName string `protobuf:"bytes,2,opt,name=room_name,json=roomName,proto3" json:"room_name,omitempty"` - Active bool `protobuf:"varint,3,opt,name=active,proto3" json:"active,omitempty"` - Error string `protobuf:"bytes,4,opt,name=error,proto3" json:"error,omitempty"` - File *FileResult `protobuf:"bytes,5,opt,name=file,proto3" json:"file,omitempty"` - Rtmp []*RtmpResult `protobuf:"bytes,6,rep,name=rtmp,proto3" json:"rtmp,omitempty"` -} - -func (x *RecordingInfo) Reset() { - *x = RecordingInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_livekit_recording_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RecordingInfo) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RecordingInfo) ProtoMessage() {} - -func (x *RecordingInfo) ProtoReflect() protoreflect.Message { - mi := &file_livekit_recording_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 RecordingInfo.ProtoReflect.Descriptor instead. -func (*RecordingInfo) Descriptor() ([]byte, []int) { - return file_livekit_recording_proto_rawDescGZIP(), []int{8} -} - -func (x *RecordingInfo) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *RecordingInfo) GetRoomName() string { - if x != nil { - return x.RoomName - } - return "" -} - -func (x *RecordingInfo) GetActive() bool { - if x != nil { - return x.Active - } - return false -} - -func (x *RecordingInfo) GetError() string { - if x != nil { - return x.Error - } - return "" -} - -func (x *RecordingInfo) GetFile() *FileResult { - if x != nil { - return x.File - } - return nil -} - -func (x *RecordingInfo) GetRtmp() []*RtmpResult { - if x != nil { - return x.Rtmp - } - return nil -} - -type FileResult struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - DownloadUrl string `protobuf:"bytes,1,opt,name=download_url,json=downloadUrl,proto3" json:"download_url,omitempty"` - Duration int64 `protobuf:"varint,2,opt,name=duration,proto3" json:"duration,omitempty"` -} - -func (x *FileResult) Reset() { - *x = FileResult{} - if protoimpl.UnsafeEnabled { - mi := &file_livekit_recording_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *FileResult) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FileResult) ProtoMessage() {} - -func (x *FileResult) ProtoReflect() protoreflect.Message { - mi := &file_livekit_recording_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 FileResult.ProtoReflect.Descriptor instead. -func (*FileResult) Descriptor() ([]byte, []int) { - return file_livekit_recording_proto_rawDescGZIP(), []int{9} -} - -func (x *FileResult) GetDownloadUrl() string { - if x != nil { - return x.DownloadUrl - } - return "" -} - -func (x *FileResult) GetDuration() int64 { - if x != nil { - return x.Duration - } - return 0 -} - -type RtmpResult struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - StreamUrl string `protobuf:"bytes,1,opt,name=stream_url,json=streamUrl,proto3" json:"stream_url,omitempty"` - Duration int64 `protobuf:"varint,2,opt,name=duration,proto3" json:"duration,omitempty"` -} - -func (x *RtmpResult) Reset() { - *x = RtmpResult{} - if protoimpl.UnsafeEnabled { - mi := &file_livekit_recording_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RtmpResult) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RtmpResult) ProtoMessage() {} - -func (x *RtmpResult) ProtoReflect() protoreflect.Message { - mi := &file_livekit_recording_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 RtmpResult.ProtoReflect.Descriptor instead. -func (*RtmpResult) Descriptor() ([]byte, []int) { - return file_livekit_recording_proto_rawDescGZIP(), []int{10} -} - -func (x *RtmpResult) GetStreamUrl() string { - if x != nil { - return x.StreamUrl - } - return "" -} - -func (x *RtmpResult) GetDuration() int64 { - if x != nil { - return x.Duration - } - return 0 -} - -var File_livekit_recording_proto protoreflect.FileDescriptor - -var file_livekit_recording_proto_rawDesc = []byte{ - 0x0a, 0x17, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x07, 0x6c, 0x69, 0x76, 0x65, 0x6b, - 0x69, 0x74, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, - 0xf6, 0x01, 0x0a, 0x15, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, - 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x03, 0x75, 0x72, 0x6c, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x38, 0x0a, - 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x69, 0x6e, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x08, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x29, 0x0a, 0x04, 0x72, 0x74, 0x6d, 0x70, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, - 0x52, 0x74, 0x6d, 0x70, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x48, 0x01, 0x52, 0x04, 0x72, 0x74, - 0x6d, 0x70, 0x12, 0x1c, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x70, 0x61, 0x74, 0x68, - 0x12, 0x33, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x52, 0x65, 0x63, 0x6f, - 0x72, 0x64, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x07, 0x0a, 0x05, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x42, 0x08, - 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x22, 0x63, 0x0a, 0x11, 0x52, 0x65, 0x63, 0x6f, - 0x72, 0x64, 0x69, 0x6e, 0x67, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, - 0x06, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6c, - 0x61, 0x79, 0x6f, 0x75, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x6f, 0x6f, 0x6d, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x62, 0x61, 0x73, 0x65, 0x55, 0x72, 0x6c, 0x22, 0x20, 0x0a, - 0x0a, 0x52, 0x74, 0x6d, 0x70, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x75, - 0x72, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x75, 0x72, 0x6c, 0x73, 0x22, - 0xb3, 0x02, 0x0a, 0x10, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x30, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x73, 0x65, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x52, - 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x65, 0x73, 0x65, 0x74, 0x52, 0x06, - 0x70, 0x72, 0x65, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, - 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x68, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x64, 0x65, 0x70, 0x74, 0x68, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x05, 0x64, 0x65, 0x70, 0x74, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x72, - 0x61, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x66, - 0x72, 0x61, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x75, 0x64, 0x69, - 0x6f, 0x5f, 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0c, 0x61, 0x75, 0x64, 0x69, 0x6f, 0x42, 0x69, 0x74, 0x72, 0x61, 0x74, 0x65, 0x12, 0x27, 0x0a, - 0x0f, 0x61, 0x75, 0x64, 0x69, 0x6f, 0x5f, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x61, 0x75, 0x64, 0x69, 0x6f, 0x46, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x5f, - 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x76, - 0x69, 0x64, 0x65, 0x6f, 0x42, 0x69, 0x74, 0x72, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, - 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, - 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x22, 0x3b, 0x0a, 0x16, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, - 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, - 0x49, 0x64, 0x22, 0x50, 0x0a, 0x10, 0x41, 0x64, 0x64, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, - 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x74, 0x6d, - 0x70, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x74, 0x6d, - 0x70, 0x55, 0x72, 0x6c, 0x22, 0x53, 0x0a, 0x13, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x72, - 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x49, 0x64, 0x12, 0x19, - 0x0a, 0x08, 0x72, 0x74, 0x6d, 0x70, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x72, 0x74, 0x6d, 0x70, 0x55, 0x72, 0x6c, 0x22, 0x38, 0x0a, 0x13, 0x45, 0x6e, 0x64, - 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, - 0x67, 0x49, 0x64, 0x22, 0xbc, 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, - 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x6f, 0x6f, 0x6d, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x12, 0x27, 0x0a, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x52, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x27, 0x0a, 0x04, 0x72, 0x74, 0x6d, - 0x70, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, - 0x74, 0x2e, 0x52, 0x74, 0x6d, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x04, 0x72, 0x74, - 0x6d, 0x70, 0x22, 0x4b, 0x0a, 0x0a, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x75, 0x72, 0x6c, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, - 0x55, 0x72, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, - 0x47, 0x0a, 0x0a, 0x52, 0x74, 0x6d, 0x70, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x1d, 0x0a, - 0x0a, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x55, 0x72, 0x6c, 0x12, 0x1a, 0x0a, 0x08, - 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, - 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x51, 0x0a, 0x0f, 0x52, 0x65, 0x63, 0x6f, - 0x72, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x65, 0x73, 0x65, 0x74, 0x12, 0x08, 0x0a, 0x04, 0x4e, - 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x48, 0x44, 0x5f, 0x33, 0x30, 0x10, 0x01, - 0x12, 0x09, 0x0a, 0x05, 0x48, 0x44, 0x5f, 0x36, 0x30, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x46, - 0x55, 0x4c, 0x4c, 0x5f, 0x48, 0x44, 0x5f, 0x33, 0x30, 0x10, 0x03, 0x12, 0x0e, 0x0a, 0x0a, 0x46, - 0x55, 0x4c, 0x4c, 0x5f, 0x48, 0x44, 0x5f, 0x36, 0x30, 0x10, 0x04, 0x32, 0xc5, 0x02, 0x0a, 0x10, - 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x12, 0x56, 0x0a, 0x0e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, - 0x6e, 0x67, 0x12, 0x1e, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x43, 0x0a, 0x09, 0x41, 0x64, 0x64, 0x4f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x19, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, - 0x41, 0x64, 0x64, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x49, 0x0a, - 0x0c, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x1c, 0x2e, - 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x49, 0x0a, 0x0c, 0x45, 0x6e, 0x64, 0x52, - 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x1c, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, - 0x69, 0x74, 0x2e, 0x45, 0x6e, 0x64, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x03, - 0x88, 0x02, 0x01, 0x42, 0x46, 0x5a, 0x23, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x2f, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0xaa, 0x02, 0x0d, 0x4c, 0x69, 0x76, - 0x65, 0x4b, 0x69, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0xea, 0x02, 0x0e, 0x4c, 0x69, 0x76, - 0x65, 0x4b, 0x69, 0x74, 0x3a, 0x3a, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, -} - -var ( - file_livekit_recording_proto_rawDescOnce sync.Once - file_livekit_recording_proto_rawDescData = file_livekit_recording_proto_rawDesc -) - -func file_livekit_recording_proto_rawDescGZIP() []byte { - file_livekit_recording_proto_rawDescOnce.Do(func() { - file_livekit_recording_proto_rawDescData = protoimpl.X.CompressGZIP(file_livekit_recording_proto_rawDescData) - }) - return file_livekit_recording_proto_rawDescData -} - -var file_livekit_recording_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_livekit_recording_proto_msgTypes = make([]protoimpl.MessageInfo, 11) -var file_livekit_recording_proto_goTypes = []interface{}{ - (RecordingPreset)(0), // 0: livekit.RecordingPreset - (*StartRecordingRequest)(nil), // 1: livekit.StartRecordingRequest - (*RecordingTemplate)(nil), // 2: livekit.RecordingTemplate - (*RtmpOutput)(nil), // 3: livekit.RtmpOutput - (*RecordingOptions)(nil), // 4: livekit.RecordingOptions - (*StartRecordingResponse)(nil), // 5: livekit.StartRecordingResponse - (*AddOutputRequest)(nil), // 6: livekit.AddOutputRequest - (*RemoveOutputRequest)(nil), // 7: livekit.RemoveOutputRequest - (*EndRecordingRequest)(nil), // 8: livekit.EndRecordingRequest - (*RecordingInfo)(nil), // 9: livekit.RecordingInfo - (*FileResult)(nil), // 10: livekit.FileResult - (*RtmpResult)(nil), // 11: livekit.RtmpResult - (*emptypb.Empty)(nil), // 12: google.protobuf.Empty -} -var file_livekit_recording_proto_depIdxs = []int32{ - 2, // 0: livekit.StartRecordingRequest.template:type_name -> livekit.RecordingTemplate - 3, // 1: livekit.StartRecordingRequest.rtmp:type_name -> livekit.RtmpOutput - 4, // 2: livekit.StartRecordingRequest.options:type_name -> livekit.RecordingOptions - 0, // 3: livekit.RecordingOptions.preset:type_name -> livekit.RecordingPreset - 10, // 4: livekit.RecordingInfo.file:type_name -> livekit.FileResult - 11, // 5: livekit.RecordingInfo.rtmp:type_name -> livekit.RtmpResult - 1, // 6: livekit.RecordingService.StartRecording:input_type -> livekit.StartRecordingRequest - 6, // 7: livekit.RecordingService.AddOutput:input_type -> livekit.AddOutputRequest - 7, // 8: livekit.RecordingService.RemoveOutput:input_type -> livekit.RemoveOutputRequest - 8, // 9: livekit.RecordingService.EndRecording:input_type -> livekit.EndRecordingRequest - 5, // 10: livekit.RecordingService.StartRecording:output_type -> livekit.StartRecordingResponse - 12, // 11: livekit.RecordingService.AddOutput:output_type -> google.protobuf.Empty - 12, // 12: livekit.RecordingService.RemoveOutput:output_type -> google.protobuf.Empty - 12, // 13: livekit.RecordingService.EndRecording:output_type -> google.protobuf.Empty - 10, // [10:14] is the sub-list for method output_type - 6, // [6:10] 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_livekit_recording_proto_init() } -func file_livekit_recording_proto_init() { - if File_livekit_recording_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_livekit_recording_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StartRecordingRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_livekit_recording_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RecordingTemplate); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_livekit_recording_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RtmpOutput); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_livekit_recording_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RecordingOptions); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_livekit_recording_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StartRecordingResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_livekit_recording_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AddOutputRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_livekit_recording_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RemoveOutputRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_livekit_recording_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EndRecordingRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_livekit_recording_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RecordingInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_livekit_recording_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FileResult); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_livekit_recording_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RtmpResult); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_livekit_recording_proto_msgTypes[0].OneofWrappers = []interface{}{ - (*StartRecordingRequest_Url)(nil), - (*StartRecordingRequest_Template)(nil), - (*StartRecordingRequest_Rtmp)(nil), - (*StartRecordingRequest_Filepath)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_livekit_recording_proto_rawDesc, - NumEnums: 1, - NumMessages: 11, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_livekit_recording_proto_goTypes, - DependencyIndexes: file_livekit_recording_proto_depIdxs, - EnumInfos: file_livekit_recording_proto_enumTypes, - MessageInfos: file_livekit_recording_proto_msgTypes, - }.Build() - File_livekit_recording_proto = out.File - file_livekit_recording_proto_rawDesc = nil - file_livekit_recording_proto_goTypes = nil - file_livekit_recording_proto_depIdxs = nil -} diff --git a/livekit/livekit_recording.twirp.go b/livekit/livekit_recording.twirp.go deleted file mode 100644 index 39db4cd0..00000000 --- a/livekit/livekit_recording.twirp.go +++ /dev/null @@ -1,1418 +0,0 @@ -// Code generated by protoc-gen-twirp v8.1.0, DO NOT EDIT. -// source: livekit_recording.proto - -package livekit - -import context "context" -import fmt "fmt" -import http "net/http" -import ioutil "io/ioutil" -import json "encoding/json" -import strconv "strconv" -import strings "strings" - -import protojson "google.golang.org/protobuf/encoding/protojson" -import proto "google.golang.org/protobuf/proto" -import twirp "github.com/twitchtv/twirp" -import ctxsetters "github.com/twitchtv/twirp/ctxsetters" - -import google_protobuf "google.golang.org/protobuf/types/known/emptypb" - -// Version compatibility assertion. -// If the constant is not defined in the package, that likely means -// the package needs to be updated to work with this generated code. -// See https://twitchtv.github.io/twirp/docs/version_matrix.html -const _ = twirp.TwirpPackageMinVersion_8_1_0 - -// ========================== -// RecordingService Interface -// ========================== - -// Recording service that can be performed on any node -// they are Twirp-based HTTP req/responses -type RecordingService interface { - // Starts a room - StartRecording(context.Context, *StartRecordingRequest) (*StartRecordingResponse, error) - - // Adds an rtmp output to a live recording - AddOutput(context.Context, *AddOutputRequest) (*google_protobuf.Empty, error) - - // Removes an rtmp output from a live recording - RemoveOutput(context.Context, *RemoveOutputRequest) (*google_protobuf.Empty, error) - - // Ends a recording - EndRecording(context.Context, *EndRecordingRequest) (*google_protobuf.Empty, error) -} - -// ================================ -// RecordingService Protobuf Client -// ================================ - -type recordingServiceProtobufClient struct { - client HTTPClient - urls [4]string - interceptor twirp.Interceptor - opts twirp.ClientOptions -} - -// NewRecordingServiceProtobufClient creates a Protobuf client that implements the RecordingService interface. -// It communicates using Protobuf and can be configured with a custom HTTPClient. -func NewRecordingServiceProtobufClient(baseURL string, client HTTPClient, opts ...twirp.ClientOption) RecordingService { - if c, ok := client.(*http.Client); ok { - client = withoutRedirects(c) - } - - clientOpts := twirp.ClientOptions{} - for _, o := range opts { - o(&clientOpts) - } - - // Using ReadOpt allows backwards and forwads compatibility with new options in the future - literalURLs := false - _ = clientOpts.ReadOpt("literalURLs", &literalURLs) - var pathPrefix string - if ok := clientOpts.ReadOpt("pathPrefix", &pathPrefix); !ok { - pathPrefix = "/twirp" // default prefix - } - - // Build method URLs: []/./ - serviceURL := sanitizeBaseURL(baseURL) - serviceURL += baseServicePath(pathPrefix, "livekit", "RecordingService") - urls := [4]string{ - serviceURL + "StartRecording", - serviceURL + "AddOutput", - serviceURL + "RemoveOutput", - serviceURL + "EndRecording", - } - - return &recordingServiceProtobufClient{ - client: client, - urls: urls, - interceptor: twirp.ChainInterceptors(clientOpts.Interceptors...), - opts: clientOpts, - } -} - -func (c *recordingServiceProtobufClient) StartRecording(ctx context.Context, in *StartRecordingRequest) (*StartRecordingResponse, error) { - ctx = ctxsetters.WithPackageName(ctx, "livekit") - ctx = ctxsetters.WithServiceName(ctx, "RecordingService") - ctx = ctxsetters.WithMethodName(ctx, "StartRecording") - caller := c.callStartRecording - if c.interceptor != nil { - caller = func(ctx context.Context, req *StartRecordingRequest) (*StartRecordingResponse, error) { - resp, err := c.interceptor( - func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*StartRecordingRequest) - if !ok { - return nil, twirp.InternalError("failed type assertion req.(*StartRecordingRequest) when calling interceptor") - } - return c.callStartRecording(ctx, typedReq) - }, - )(ctx, req) - if resp != nil { - typedResp, ok := resp.(*StartRecordingResponse) - if !ok { - return nil, twirp.InternalError("failed type assertion resp.(*StartRecordingResponse) when calling interceptor") - } - return typedResp, err - } - return nil, err - } - } - return caller(ctx, in) -} - -func (c *recordingServiceProtobufClient) callStartRecording(ctx context.Context, in *StartRecordingRequest) (*StartRecordingResponse, error) { - out := new(StartRecordingResponse) - ctx, err := doProtobufRequest(ctx, c.client, c.opts.Hooks, c.urls[0], in, out) - if err != nil { - twerr, ok := err.(twirp.Error) - if !ok { - twerr = twirp.InternalErrorWith(err) - } - callClientError(ctx, c.opts.Hooks, twerr) - return nil, err - } - - callClientResponseReceived(ctx, c.opts.Hooks) - - return out, nil -} - -func (c *recordingServiceProtobufClient) AddOutput(ctx context.Context, in *AddOutputRequest) (*google_protobuf.Empty, error) { - ctx = ctxsetters.WithPackageName(ctx, "livekit") - ctx = ctxsetters.WithServiceName(ctx, "RecordingService") - ctx = ctxsetters.WithMethodName(ctx, "AddOutput") - caller := c.callAddOutput - if c.interceptor != nil { - caller = func(ctx context.Context, req *AddOutputRequest) (*google_protobuf.Empty, error) { - resp, err := c.interceptor( - func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*AddOutputRequest) - if !ok { - return nil, twirp.InternalError("failed type assertion req.(*AddOutputRequest) when calling interceptor") - } - return c.callAddOutput(ctx, typedReq) - }, - )(ctx, req) - if resp != nil { - typedResp, ok := resp.(*google_protobuf.Empty) - if !ok { - return nil, twirp.InternalError("failed type assertion resp.(*google_protobuf.Empty) when calling interceptor") - } - return typedResp, err - } - return nil, err - } - } - return caller(ctx, in) -} - -func (c *recordingServiceProtobufClient) callAddOutput(ctx context.Context, in *AddOutputRequest) (*google_protobuf.Empty, error) { - out := new(google_protobuf.Empty) - ctx, err := doProtobufRequest(ctx, c.client, c.opts.Hooks, c.urls[1], in, out) - if err != nil { - twerr, ok := err.(twirp.Error) - if !ok { - twerr = twirp.InternalErrorWith(err) - } - callClientError(ctx, c.opts.Hooks, twerr) - return nil, err - } - - callClientResponseReceived(ctx, c.opts.Hooks) - - return out, nil -} - -func (c *recordingServiceProtobufClient) RemoveOutput(ctx context.Context, in *RemoveOutputRequest) (*google_protobuf.Empty, error) { - ctx = ctxsetters.WithPackageName(ctx, "livekit") - ctx = ctxsetters.WithServiceName(ctx, "RecordingService") - ctx = ctxsetters.WithMethodName(ctx, "RemoveOutput") - caller := c.callRemoveOutput - if c.interceptor != nil { - caller = func(ctx context.Context, req *RemoveOutputRequest) (*google_protobuf.Empty, error) { - resp, err := c.interceptor( - func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*RemoveOutputRequest) - if !ok { - return nil, twirp.InternalError("failed type assertion req.(*RemoveOutputRequest) when calling interceptor") - } - return c.callRemoveOutput(ctx, typedReq) - }, - )(ctx, req) - if resp != nil { - typedResp, ok := resp.(*google_protobuf.Empty) - if !ok { - return nil, twirp.InternalError("failed type assertion resp.(*google_protobuf.Empty) when calling interceptor") - } - return typedResp, err - } - return nil, err - } - } - return caller(ctx, in) -} - -func (c *recordingServiceProtobufClient) callRemoveOutput(ctx context.Context, in *RemoveOutputRequest) (*google_protobuf.Empty, error) { - out := new(google_protobuf.Empty) - ctx, err := doProtobufRequest(ctx, c.client, c.opts.Hooks, c.urls[2], in, out) - if err != nil { - twerr, ok := err.(twirp.Error) - if !ok { - twerr = twirp.InternalErrorWith(err) - } - callClientError(ctx, c.opts.Hooks, twerr) - return nil, err - } - - callClientResponseReceived(ctx, c.opts.Hooks) - - return out, nil -} - -func (c *recordingServiceProtobufClient) EndRecording(ctx context.Context, in *EndRecordingRequest) (*google_protobuf.Empty, error) { - ctx = ctxsetters.WithPackageName(ctx, "livekit") - ctx = ctxsetters.WithServiceName(ctx, "RecordingService") - ctx = ctxsetters.WithMethodName(ctx, "EndRecording") - caller := c.callEndRecording - if c.interceptor != nil { - caller = func(ctx context.Context, req *EndRecordingRequest) (*google_protobuf.Empty, error) { - resp, err := c.interceptor( - func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*EndRecordingRequest) - if !ok { - return nil, twirp.InternalError("failed type assertion req.(*EndRecordingRequest) when calling interceptor") - } - return c.callEndRecording(ctx, typedReq) - }, - )(ctx, req) - if resp != nil { - typedResp, ok := resp.(*google_protobuf.Empty) - if !ok { - return nil, twirp.InternalError("failed type assertion resp.(*google_protobuf.Empty) when calling interceptor") - } - return typedResp, err - } - return nil, err - } - } - return caller(ctx, in) -} - -func (c *recordingServiceProtobufClient) callEndRecording(ctx context.Context, in *EndRecordingRequest) (*google_protobuf.Empty, error) { - out := new(google_protobuf.Empty) - ctx, err := doProtobufRequest(ctx, c.client, c.opts.Hooks, c.urls[3], in, out) - if err != nil { - twerr, ok := err.(twirp.Error) - if !ok { - twerr = twirp.InternalErrorWith(err) - } - callClientError(ctx, c.opts.Hooks, twerr) - return nil, err - } - - callClientResponseReceived(ctx, c.opts.Hooks) - - return out, nil -} - -// ============================ -// RecordingService JSON Client -// ============================ - -type recordingServiceJSONClient struct { - client HTTPClient - urls [4]string - interceptor twirp.Interceptor - opts twirp.ClientOptions -} - -// NewRecordingServiceJSONClient creates a JSON client that implements the RecordingService interface. -// It communicates using JSON and can be configured with a custom HTTPClient. -func NewRecordingServiceJSONClient(baseURL string, client HTTPClient, opts ...twirp.ClientOption) RecordingService { - if c, ok := client.(*http.Client); ok { - client = withoutRedirects(c) - } - - clientOpts := twirp.ClientOptions{} - for _, o := range opts { - o(&clientOpts) - } - - // Using ReadOpt allows backwards and forwads compatibility with new options in the future - literalURLs := false - _ = clientOpts.ReadOpt("literalURLs", &literalURLs) - var pathPrefix string - if ok := clientOpts.ReadOpt("pathPrefix", &pathPrefix); !ok { - pathPrefix = "/twirp" // default prefix - } - - // Build method URLs: []/./ - serviceURL := sanitizeBaseURL(baseURL) - serviceURL += baseServicePath(pathPrefix, "livekit", "RecordingService") - urls := [4]string{ - serviceURL + "StartRecording", - serviceURL + "AddOutput", - serviceURL + "RemoveOutput", - serviceURL + "EndRecording", - } - - return &recordingServiceJSONClient{ - client: client, - urls: urls, - interceptor: twirp.ChainInterceptors(clientOpts.Interceptors...), - opts: clientOpts, - } -} - -func (c *recordingServiceJSONClient) StartRecording(ctx context.Context, in *StartRecordingRequest) (*StartRecordingResponse, error) { - ctx = ctxsetters.WithPackageName(ctx, "livekit") - ctx = ctxsetters.WithServiceName(ctx, "RecordingService") - ctx = ctxsetters.WithMethodName(ctx, "StartRecording") - caller := c.callStartRecording - if c.interceptor != nil { - caller = func(ctx context.Context, req *StartRecordingRequest) (*StartRecordingResponse, error) { - resp, err := c.interceptor( - func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*StartRecordingRequest) - if !ok { - return nil, twirp.InternalError("failed type assertion req.(*StartRecordingRequest) when calling interceptor") - } - return c.callStartRecording(ctx, typedReq) - }, - )(ctx, req) - if resp != nil { - typedResp, ok := resp.(*StartRecordingResponse) - if !ok { - return nil, twirp.InternalError("failed type assertion resp.(*StartRecordingResponse) when calling interceptor") - } - return typedResp, err - } - return nil, err - } - } - return caller(ctx, in) -} - -func (c *recordingServiceJSONClient) callStartRecording(ctx context.Context, in *StartRecordingRequest) (*StartRecordingResponse, error) { - out := new(StartRecordingResponse) - ctx, err := doJSONRequest(ctx, c.client, c.opts.Hooks, c.urls[0], in, out) - if err != nil { - twerr, ok := err.(twirp.Error) - if !ok { - twerr = twirp.InternalErrorWith(err) - } - callClientError(ctx, c.opts.Hooks, twerr) - return nil, err - } - - callClientResponseReceived(ctx, c.opts.Hooks) - - return out, nil -} - -func (c *recordingServiceJSONClient) AddOutput(ctx context.Context, in *AddOutputRequest) (*google_protobuf.Empty, error) { - ctx = ctxsetters.WithPackageName(ctx, "livekit") - ctx = ctxsetters.WithServiceName(ctx, "RecordingService") - ctx = ctxsetters.WithMethodName(ctx, "AddOutput") - caller := c.callAddOutput - if c.interceptor != nil { - caller = func(ctx context.Context, req *AddOutputRequest) (*google_protobuf.Empty, error) { - resp, err := c.interceptor( - func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*AddOutputRequest) - if !ok { - return nil, twirp.InternalError("failed type assertion req.(*AddOutputRequest) when calling interceptor") - } - return c.callAddOutput(ctx, typedReq) - }, - )(ctx, req) - if resp != nil { - typedResp, ok := resp.(*google_protobuf.Empty) - if !ok { - return nil, twirp.InternalError("failed type assertion resp.(*google_protobuf.Empty) when calling interceptor") - } - return typedResp, err - } - return nil, err - } - } - return caller(ctx, in) -} - -func (c *recordingServiceJSONClient) callAddOutput(ctx context.Context, in *AddOutputRequest) (*google_protobuf.Empty, error) { - out := new(google_protobuf.Empty) - ctx, err := doJSONRequest(ctx, c.client, c.opts.Hooks, c.urls[1], in, out) - if err != nil { - twerr, ok := err.(twirp.Error) - if !ok { - twerr = twirp.InternalErrorWith(err) - } - callClientError(ctx, c.opts.Hooks, twerr) - return nil, err - } - - callClientResponseReceived(ctx, c.opts.Hooks) - - return out, nil -} - -func (c *recordingServiceJSONClient) RemoveOutput(ctx context.Context, in *RemoveOutputRequest) (*google_protobuf.Empty, error) { - ctx = ctxsetters.WithPackageName(ctx, "livekit") - ctx = ctxsetters.WithServiceName(ctx, "RecordingService") - ctx = ctxsetters.WithMethodName(ctx, "RemoveOutput") - caller := c.callRemoveOutput - if c.interceptor != nil { - caller = func(ctx context.Context, req *RemoveOutputRequest) (*google_protobuf.Empty, error) { - resp, err := c.interceptor( - func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*RemoveOutputRequest) - if !ok { - return nil, twirp.InternalError("failed type assertion req.(*RemoveOutputRequest) when calling interceptor") - } - return c.callRemoveOutput(ctx, typedReq) - }, - )(ctx, req) - if resp != nil { - typedResp, ok := resp.(*google_protobuf.Empty) - if !ok { - return nil, twirp.InternalError("failed type assertion resp.(*google_protobuf.Empty) when calling interceptor") - } - return typedResp, err - } - return nil, err - } - } - return caller(ctx, in) -} - -func (c *recordingServiceJSONClient) callRemoveOutput(ctx context.Context, in *RemoveOutputRequest) (*google_protobuf.Empty, error) { - out := new(google_protobuf.Empty) - ctx, err := doJSONRequest(ctx, c.client, c.opts.Hooks, c.urls[2], in, out) - if err != nil { - twerr, ok := err.(twirp.Error) - if !ok { - twerr = twirp.InternalErrorWith(err) - } - callClientError(ctx, c.opts.Hooks, twerr) - return nil, err - } - - callClientResponseReceived(ctx, c.opts.Hooks) - - return out, nil -} - -func (c *recordingServiceJSONClient) EndRecording(ctx context.Context, in *EndRecordingRequest) (*google_protobuf.Empty, error) { - ctx = ctxsetters.WithPackageName(ctx, "livekit") - ctx = ctxsetters.WithServiceName(ctx, "RecordingService") - ctx = ctxsetters.WithMethodName(ctx, "EndRecording") - caller := c.callEndRecording - if c.interceptor != nil { - caller = func(ctx context.Context, req *EndRecordingRequest) (*google_protobuf.Empty, error) { - resp, err := c.interceptor( - func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*EndRecordingRequest) - if !ok { - return nil, twirp.InternalError("failed type assertion req.(*EndRecordingRequest) when calling interceptor") - } - return c.callEndRecording(ctx, typedReq) - }, - )(ctx, req) - if resp != nil { - typedResp, ok := resp.(*google_protobuf.Empty) - if !ok { - return nil, twirp.InternalError("failed type assertion resp.(*google_protobuf.Empty) when calling interceptor") - } - return typedResp, err - } - return nil, err - } - } - return caller(ctx, in) -} - -func (c *recordingServiceJSONClient) callEndRecording(ctx context.Context, in *EndRecordingRequest) (*google_protobuf.Empty, error) { - out := new(google_protobuf.Empty) - ctx, err := doJSONRequest(ctx, c.client, c.opts.Hooks, c.urls[3], in, out) - if err != nil { - twerr, ok := err.(twirp.Error) - if !ok { - twerr = twirp.InternalErrorWith(err) - } - callClientError(ctx, c.opts.Hooks, twerr) - return nil, err - } - - callClientResponseReceived(ctx, c.opts.Hooks) - - return out, nil -} - -// =============================== -// RecordingService Server Handler -// =============================== - -type recordingServiceServer struct { - RecordingService - interceptor twirp.Interceptor - hooks *twirp.ServerHooks - pathPrefix string // prefix for routing - jsonSkipDefaults bool // do not include unpopulated fields (default values) in the response - jsonCamelCase bool // JSON fields are serialized as lowerCamelCase rather than keeping the original proto names -} - -// NewRecordingServiceServer builds a TwirpServer that can be used as an http.Handler to handle -// HTTP requests that are routed to the right method in the provided svc implementation. -// The opts are twirp.ServerOption modifiers, for example twirp.WithServerHooks(hooks). -func NewRecordingServiceServer(svc RecordingService, opts ...interface{}) TwirpServer { - serverOpts := newServerOpts(opts) - - // Using ReadOpt allows backwards and forwads compatibility with new options in the future - jsonSkipDefaults := false - _ = serverOpts.ReadOpt("jsonSkipDefaults", &jsonSkipDefaults) - jsonCamelCase := false - _ = serverOpts.ReadOpt("jsonCamelCase", &jsonCamelCase) - var pathPrefix string - if ok := serverOpts.ReadOpt("pathPrefix", &pathPrefix); !ok { - pathPrefix = "/twirp" // default prefix - } - - return &recordingServiceServer{ - RecordingService: svc, - hooks: serverOpts.Hooks, - interceptor: twirp.ChainInterceptors(serverOpts.Interceptors...), - pathPrefix: pathPrefix, - jsonSkipDefaults: jsonSkipDefaults, - jsonCamelCase: jsonCamelCase, - } -} - -// writeError writes an HTTP response with a valid Twirp error format, and triggers hooks. -// If err is not a twirp.Error, it will get wrapped with twirp.InternalErrorWith(err) -func (s *recordingServiceServer) writeError(ctx context.Context, resp http.ResponseWriter, err error) { - writeError(ctx, resp, err, s.hooks) -} - -// handleRequestBodyError is used to handle error when the twirp server cannot read request -func (s *recordingServiceServer) handleRequestBodyError(ctx context.Context, resp http.ResponseWriter, msg string, err error) { - if context.Canceled == ctx.Err() { - s.writeError(ctx, resp, twirp.NewError(twirp.Canceled, "failed to read request: context canceled")) - return - } - if context.DeadlineExceeded == ctx.Err() { - s.writeError(ctx, resp, twirp.NewError(twirp.DeadlineExceeded, "failed to read request: deadline exceeded")) - return - } - s.writeError(ctx, resp, twirp.WrapError(malformedRequestError(msg), err)) -} - -// RecordingServicePathPrefix is a convenience constant that may identify URL paths. -// Should be used with caution, it only matches routes generated by Twirp Go clients, -// with the default "/twirp" prefix and default CamelCase service and method names. -// More info: https://twitchtv.github.io/twirp/docs/routing.html -const RecordingServicePathPrefix = "/twirp/livekit.RecordingService/" - -func (s *recordingServiceServer) ServeHTTP(resp http.ResponseWriter, req *http.Request) { - ctx := req.Context() - ctx = ctxsetters.WithPackageName(ctx, "livekit") - ctx = ctxsetters.WithServiceName(ctx, "RecordingService") - ctx = ctxsetters.WithResponseWriter(ctx, resp) - - var err error - ctx, err = callRequestReceived(ctx, s.hooks) - if err != nil { - s.writeError(ctx, resp, err) - return - } - - if req.Method != "POST" { - msg := fmt.Sprintf("unsupported method %q (only POST is allowed)", req.Method) - s.writeError(ctx, resp, badRouteError(msg, req.Method, req.URL.Path)) - return - } - - // Verify path format: []/./ - prefix, pkgService, method := parseTwirpPath(req.URL.Path) - if pkgService != "livekit.RecordingService" { - msg := fmt.Sprintf("no handler for path %q", req.URL.Path) - s.writeError(ctx, resp, badRouteError(msg, req.Method, req.URL.Path)) - return - } - if prefix != s.pathPrefix { - msg := fmt.Sprintf("invalid path prefix %q, expected %q, on path %q", prefix, s.pathPrefix, req.URL.Path) - s.writeError(ctx, resp, badRouteError(msg, req.Method, req.URL.Path)) - return - } - - switch method { - case "StartRecording": - s.serveStartRecording(ctx, resp, req) - return - case "AddOutput": - s.serveAddOutput(ctx, resp, req) - return - case "RemoveOutput": - s.serveRemoveOutput(ctx, resp, req) - return - case "EndRecording": - s.serveEndRecording(ctx, resp, req) - return - default: - msg := fmt.Sprintf("no handler for path %q", req.URL.Path) - s.writeError(ctx, resp, badRouteError(msg, req.Method, req.URL.Path)) - return - } -} - -func (s *recordingServiceServer) serveStartRecording(ctx context.Context, resp http.ResponseWriter, req *http.Request) { - header := req.Header.Get("Content-Type") - i := strings.Index(header, ";") - if i == -1 { - i = len(header) - } - switch strings.TrimSpace(strings.ToLower(header[:i])) { - case "application/json": - s.serveStartRecordingJSON(ctx, resp, req) - case "application/protobuf": - s.serveStartRecordingProtobuf(ctx, resp, req) - default: - msg := fmt.Sprintf("unexpected Content-Type: %q", req.Header.Get("Content-Type")) - twerr := badRouteError(msg, req.Method, req.URL.Path) - s.writeError(ctx, resp, twerr) - } -} - -func (s *recordingServiceServer) serveStartRecordingJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { - var err error - ctx = ctxsetters.WithMethodName(ctx, "StartRecording") - ctx, err = callRequestRouted(ctx, s.hooks) - if err != nil { - s.writeError(ctx, resp, err) - return - } - - d := json.NewDecoder(req.Body) - rawReqBody := json.RawMessage{} - if err := d.Decode(&rawReqBody); err != nil { - s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) - return - } - reqContent := new(StartRecordingRequest) - unmarshaler := protojson.UnmarshalOptions{DiscardUnknown: true} - if err = unmarshaler.Unmarshal(rawReqBody, reqContent); err != nil { - s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) - return - } - - handler := s.RecordingService.StartRecording - if s.interceptor != nil { - handler = func(ctx context.Context, req *StartRecordingRequest) (*StartRecordingResponse, error) { - resp, err := s.interceptor( - func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*StartRecordingRequest) - if !ok { - return nil, twirp.InternalError("failed type assertion req.(*StartRecordingRequest) when calling interceptor") - } - return s.RecordingService.StartRecording(ctx, typedReq) - }, - )(ctx, req) - if resp != nil { - typedResp, ok := resp.(*StartRecordingResponse) - if !ok { - return nil, twirp.InternalError("failed type assertion resp.(*StartRecordingResponse) when calling interceptor") - } - return typedResp, err - } - return nil, err - } - } - - // Call service method - var respContent *StartRecordingResponse - func() { - defer ensurePanicResponses(ctx, resp, s.hooks) - respContent, err = handler(ctx, reqContent) - }() - - if err != nil { - s.writeError(ctx, resp, err) - return - } - if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *StartRecordingResponse and nil error while calling StartRecording. nil responses are not supported")) - return - } - - ctx = callResponsePrepared(ctx, s.hooks) - - marshaler := &protojson.MarshalOptions{UseProtoNames: !s.jsonCamelCase, EmitUnpopulated: !s.jsonSkipDefaults} - respBytes, err := marshaler.Marshal(respContent) - if err != nil { - s.writeError(ctx, resp, wrapInternal(err, "failed to marshal json response")) - return - } - - ctx = ctxsetters.WithStatusCode(ctx, http.StatusOK) - resp.Header().Set("Content-Type", "application/json") - resp.Header().Set("Content-Length", strconv.Itoa(len(respBytes))) - resp.WriteHeader(http.StatusOK) - - if n, err := resp.Write(respBytes); err != nil { - msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) - twerr := twirp.NewError(twirp.Unknown, msg) - ctx = callError(ctx, s.hooks, twerr) - } - callResponseSent(ctx, s.hooks) -} - -func (s *recordingServiceServer) serveStartRecordingProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { - var err error - ctx = ctxsetters.WithMethodName(ctx, "StartRecording") - ctx, err = callRequestRouted(ctx, s.hooks) - if err != nil { - s.writeError(ctx, resp, err) - return - } - - buf, err := ioutil.ReadAll(req.Body) - if err != nil { - s.handleRequestBodyError(ctx, resp, "failed to read request body", err) - return - } - reqContent := new(StartRecordingRequest) - if err = proto.Unmarshal(buf, reqContent); err != nil { - s.writeError(ctx, resp, malformedRequestError("the protobuf request could not be decoded")) - return - } - - handler := s.RecordingService.StartRecording - if s.interceptor != nil { - handler = func(ctx context.Context, req *StartRecordingRequest) (*StartRecordingResponse, error) { - resp, err := s.interceptor( - func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*StartRecordingRequest) - if !ok { - return nil, twirp.InternalError("failed type assertion req.(*StartRecordingRequest) when calling interceptor") - } - return s.RecordingService.StartRecording(ctx, typedReq) - }, - )(ctx, req) - if resp != nil { - typedResp, ok := resp.(*StartRecordingResponse) - if !ok { - return nil, twirp.InternalError("failed type assertion resp.(*StartRecordingResponse) when calling interceptor") - } - return typedResp, err - } - return nil, err - } - } - - // Call service method - var respContent *StartRecordingResponse - func() { - defer ensurePanicResponses(ctx, resp, s.hooks) - respContent, err = handler(ctx, reqContent) - }() - - if err != nil { - s.writeError(ctx, resp, err) - return - } - if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *StartRecordingResponse and nil error while calling StartRecording. nil responses are not supported")) - return - } - - ctx = callResponsePrepared(ctx, s.hooks) - - respBytes, err := proto.Marshal(respContent) - if err != nil { - s.writeError(ctx, resp, wrapInternal(err, "failed to marshal proto response")) - return - } - - ctx = ctxsetters.WithStatusCode(ctx, http.StatusOK) - resp.Header().Set("Content-Type", "application/protobuf") - resp.Header().Set("Content-Length", strconv.Itoa(len(respBytes))) - resp.WriteHeader(http.StatusOK) - if n, err := resp.Write(respBytes); err != nil { - msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) - twerr := twirp.NewError(twirp.Unknown, msg) - ctx = callError(ctx, s.hooks, twerr) - } - callResponseSent(ctx, s.hooks) -} - -func (s *recordingServiceServer) serveAddOutput(ctx context.Context, resp http.ResponseWriter, req *http.Request) { - header := req.Header.Get("Content-Type") - i := strings.Index(header, ";") - if i == -1 { - i = len(header) - } - switch strings.TrimSpace(strings.ToLower(header[:i])) { - case "application/json": - s.serveAddOutputJSON(ctx, resp, req) - case "application/protobuf": - s.serveAddOutputProtobuf(ctx, resp, req) - default: - msg := fmt.Sprintf("unexpected Content-Type: %q", req.Header.Get("Content-Type")) - twerr := badRouteError(msg, req.Method, req.URL.Path) - s.writeError(ctx, resp, twerr) - } -} - -func (s *recordingServiceServer) serveAddOutputJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { - var err error - ctx = ctxsetters.WithMethodName(ctx, "AddOutput") - ctx, err = callRequestRouted(ctx, s.hooks) - if err != nil { - s.writeError(ctx, resp, err) - return - } - - d := json.NewDecoder(req.Body) - rawReqBody := json.RawMessage{} - if err := d.Decode(&rawReqBody); err != nil { - s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) - return - } - reqContent := new(AddOutputRequest) - unmarshaler := protojson.UnmarshalOptions{DiscardUnknown: true} - if err = unmarshaler.Unmarshal(rawReqBody, reqContent); err != nil { - s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) - return - } - - handler := s.RecordingService.AddOutput - if s.interceptor != nil { - handler = func(ctx context.Context, req *AddOutputRequest) (*google_protobuf.Empty, error) { - resp, err := s.interceptor( - func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*AddOutputRequest) - if !ok { - return nil, twirp.InternalError("failed type assertion req.(*AddOutputRequest) when calling interceptor") - } - return s.RecordingService.AddOutput(ctx, typedReq) - }, - )(ctx, req) - if resp != nil { - typedResp, ok := resp.(*google_protobuf.Empty) - if !ok { - return nil, twirp.InternalError("failed type assertion resp.(*google_protobuf.Empty) when calling interceptor") - } - return typedResp, err - } - return nil, err - } - } - - // Call service method - var respContent *google_protobuf.Empty - func() { - defer ensurePanicResponses(ctx, resp, s.hooks) - respContent, err = handler(ctx, reqContent) - }() - - if err != nil { - s.writeError(ctx, resp, err) - return - } - if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *google_protobuf.Empty and nil error while calling AddOutput. nil responses are not supported")) - return - } - - ctx = callResponsePrepared(ctx, s.hooks) - - marshaler := &protojson.MarshalOptions{UseProtoNames: !s.jsonCamelCase, EmitUnpopulated: !s.jsonSkipDefaults} - respBytes, err := marshaler.Marshal(respContent) - if err != nil { - s.writeError(ctx, resp, wrapInternal(err, "failed to marshal json response")) - return - } - - ctx = ctxsetters.WithStatusCode(ctx, http.StatusOK) - resp.Header().Set("Content-Type", "application/json") - resp.Header().Set("Content-Length", strconv.Itoa(len(respBytes))) - resp.WriteHeader(http.StatusOK) - - if n, err := resp.Write(respBytes); err != nil { - msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) - twerr := twirp.NewError(twirp.Unknown, msg) - ctx = callError(ctx, s.hooks, twerr) - } - callResponseSent(ctx, s.hooks) -} - -func (s *recordingServiceServer) serveAddOutputProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { - var err error - ctx = ctxsetters.WithMethodName(ctx, "AddOutput") - ctx, err = callRequestRouted(ctx, s.hooks) - if err != nil { - s.writeError(ctx, resp, err) - return - } - - buf, err := ioutil.ReadAll(req.Body) - if err != nil { - s.handleRequestBodyError(ctx, resp, "failed to read request body", err) - return - } - reqContent := new(AddOutputRequest) - if err = proto.Unmarshal(buf, reqContent); err != nil { - s.writeError(ctx, resp, malformedRequestError("the protobuf request could not be decoded")) - return - } - - handler := s.RecordingService.AddOutput - if s.interceptor != nil { - handler = func(ctx context.Context, req *AddOutputRequest) (*google_protobuf.Empty, error) { - resp, err := s.interceptor( - func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*AddOutputRequest) - if !ok { - return nil, twirp.InternalError("failed type assertion req.(*AddOutputRequest) when calling interceptor") - } - return s.RecordingService.AddOutput(ctx, typedReq) - }, - )(ctx, req) - if resp != nil { - typedResp, ok := resp.(*google_protobuf.Empty) - if !ok { - return nil, twirp.InternalError("failed type assertion resp.(*google_protobuf.Empty) when calling interceptor") - } - return typedResp, err - } - return nil, err - } - } - - // Call service method - var respContent *google_protobuf.Empty - func() { - defer ensurePanicResponses(ctx, resp, s.hooks) - respContent, err = handler(ctx, reqContent) - }() - - if err != nil { - s.writeError(ctx, resp, err) - return - } - if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *google_protobuf.Empty and nil error while calling AddOutput. nil responses are not supported")) - return - } - - ctx = callResponsePrepared(ctx, s.hooks) - - respBytes, err := proto.Marshal(respContent) - if err != nil { - s.writeError(ctx, resp, wrapInternal(err, "failed to marshal proto response")) - return - } - - ctx = ctxsetters.WithStatusCode(ctx, http.StatusOK) - resp.Header().Set("Content-Type", "application/protobuf") - resp.Header().Set("Content-Length", strconv.Itoa(len(respBytes))) - resp.WriteHeader(http.StatusOK) - if n, err := resp.Write(respBytes); err != nil { - msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) - twerr := twirp.NewError(twirp.Unknown, msg) - ctx = callError(ctx, s.hooks, twerr) - } - callResponseSent(ctx, s.hooks) -} - -func (s *recordingServiceServer) serveRemoveOutput(ctx context.Context, resp http.ResponseWriter, req *http.Request) { - header := req.Header.Get("Content-Type") - i := strings.Index(header, ";") - if i == -1 { - i = len(header) - } - switch strings.TrimSpace(strings.ToLower(header[:i])) { - case "application/json": - s.serveRemoveOutputJSON(ctx, resp, req) - case "application/protobuf": - s.serveRemoveOutputProtobuf(ctx, resp, req) - default: - msg := fmt.Sprintf("unexpected Content-Type: %q", req.Header.Get("Content-Type")) - twerr := badRouteError(msg, req.Method, req.URL.Path) - s.writeError(ctx, resp, twerr) - } -} - -func (s *recordingServiceServer) serveRemoveOutputJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { - var err error - ctx = ctxsetters.WithMethodName(ctx, "RemoveOutput") - ctx, err = callRequestRouted(ctx, s.hooks) - if err != nil { - s.writeError(ctx, resp, err) - return - } - - d := json.NewDecoder(req.Body) - rawReqBody := json.RawMessage{} - if err := d.Decode(&rawReqBody); err != nil { - s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) - return - } - reqContent := new(RemoveOutputRequest) - unmarshaler := protojson.UnmarshalOptions{DiscardUnknown: true} - if err = unmarshaler.Unmarshal(rawReqBody, reqContent); err != nil { - s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) - return - } - - handler := s.RecordingService.RemoveOutput - if s.interceptor != nil { - handler = func(ctx context.Context, req *RemoveOutputRequest) (*google_protobuf.Empty, error) { - resp, err := s.interceptor( - func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*RemoveOutputRequest) - if !ok { - return nil, twirp.InternalError("failed type assertion req.(*RemoveOutputRequest) when calling interceptor") - } - return s.RecordingService.RemoveOutput(ctx, typedReq) - }, - )(ctx, req) - if resp != nil { - typedResp, ok := resp.(*google_protobuf.Empty) - if !ok { - return nil, twirp.InternalError("failed type assertion resp.(*google_protobuf.Empty) when calling interceptor") - } - return typedResp, err - } - return nil, err - } - } - - // Call service method - var respContent *google_protobuf.Empty - func() { - defer ensurePanicResponses(ctx, resp, s.hooks) - respContent, err = handler(ctx, reqContent) - }() - - if err != nil { - s.writeError(ctx, resp, err) - return - } - if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *google_protobuf.Empty and nil error while calling RemoveOutput. nil responses are not supported")) - return - } - - ctx = callResponsePrepared(ctx, s.hooks) - - marshaler := &protojson.MarshalOptions{UseProtoNames: !s.jsonCamelCase, EmitUnpopulated: !s.jsonSkipDefaults} - respBytes, err := marshaler.Marshal(respContent) - if err != nil { - s.writeError(ctx, resp, wrapInternal(err, "failed to marshal json response")) - return - } - - ctx = ctxsetters.WithStatusCode(ctx, http.StatusOK) - resp.Header().Set("Content-Type", "application/json") - resp.Header().Set("Content-Length", strconv.Itoa(len(respBytes))) - resp.WriteHeader(http.StatusOK) - - if n, err := resp.Write(respBytes); err != nil { - msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) - twerr := twirp.NewError(twirp.Unknown, msg) - ctx = callError(ctx, s.hooks, twerr) - } - callResponseSent(ctx, s.hooks) -} - -func (s *recordingServiceServer) serveRemoveOutputProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { - var err error - ctx = ctxsetters.WithMethodName(ctx, "RemoveOutput") - ctx, err = callRequestRouted(ctx, s.hooks) - if err != nil { - s.writeError(ctx, resp, err) - return - } - - buf, err := ioutil.ReadAll(req.Body) - if err != nil { - s.handleRequestBodyError(ctx, resp, "failed to read request body", err) - return - } - reqContent := new(RemoveOutputRequest) - if err = proto.Unmarshal(buf, reqContent); err != nil { - s.writeError(ctx, resp, malformedRequestError("the protobuf request could not be decoded")) - return - } - - handler := s.RecordingService.RemoveOutput - if s.interceptor != nil { - handler = func(ctx context.Context, req *RemoveOutputRequest) (*google_protobuf.Empty, error) { - resp, err := s.interceptor( - func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*RemoveOutputRequest) - if !ok { - return nil, twirp.InternalError("failed type assertion req.(*RemoveOutputRequest) when calling interceptor") - } - return s.RecordingService.RemoveOutput(ctx, typedReq) - }, - )(ctx, req) - if resp != nil { - typedResp, ok := resp.(*google_protobuf.Empty) - if !ok { - return nil, twirp.InternalError("failed type assertion resp.(*google_protobuf.Empty) when calling interceptor") - } - return typedResp, err - } - return nil, err - } - } - - // Call service method - var respContent *google_protobuf.Empty - func() { - defer ensurePanicResponses(ctx, resp, s.hooks) - respContent, err = handler(ctx, reqContent) - }() - - if err != nil { - s.writeError(ctx, resp, err) - return - } - if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *google_protobuf.Empty and nil error while calling RemoveOutput. nil responses are not supported")) - return - } - - ctx = callResponsePrepared(ctx, s.hooks) - - respBytes, err := proto.Marshal(respContent) - if err != nil { - s.writeError(ctx, resp, wrapInternal(err, "failed to marshal proto response")) - return - } - - ctx = ctxsetters.WithStatusCode(ctx, http.StatusOK) - resp.Header().Set("Content-Type", "application/protobuf") - resp.Header().Set("Content-Length", strconv.Itoa(len(respBytes))) - resp.WriteHeader(http.StatusOK) - if n, err := resp.Write(respBytes); err != nil { - msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) - twerr := twirp.NewError(twirp.Unknown, msg) - ctx = callError(ctx, s.hooks, twerr) - } - callResponseSent(ctx, s.hooks) -} - -func (s *recordingServiceServer) serveEndRecording(ctx context.Context, resp http.ResponseWriter, req *http.Request) { - header := req.Header.Get("Content-Type") - i := strings.Index(header, ";") - if i == -1 { - i = len(header) - } - switch strings.TrimSpace(strings.ToLower(header[:i])) { - case "application/json": - s.serveEndRecordingJSON(ctx, resp, req) - case "application/protobuf": - s.serveEndRecordingProtobuf(ctx, resp, req) - default: - msg := fmt.Sprintf("unexpected Content-Type: %q", req.Header.Get("Content-Type")) - twerr := badRouteError(msg, req.Method, req.URL.Path) - s.writeError(ctx, resp, twerr) - } -} - -func (s *recordingServiceServer) serveEndRecordingJSON(ctx context.Context, resp http.ResponseWriter, req *http.Request) { - var err error - ctx = ctxsetters.WithMethodName(ctx, "EndRecording") - ctx, err = callRequestRouted(ctx, s.hooks) - if err != nil { - s.writeError(ctx, resp, err) - return - } - - d := json.NewDecoder(req.Body) - rawReqBody := json.RawMessage{} - if err := d.Decode(&rawReqBody); err != nil { - s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) - return - } - reqContent := new(EndRecordingRequest) - unmarshaler := protojson.UnmarshalOptions{DiscardUnknown: true} - if err = unmarshaler.Unmarshal(rawReqBody, reqContent); err != nil { - s.handleRequestBodyError(ctx, resp, "the json request could not be decoded", err) - return - } - - handler := s.RecordingService.EndRecording - if s.interceptor != nil { - handler = func(ctx context.Context, req *EndRecordingRequest) (*google_protobuf.Empty, error) { - resp, err := s.interceptor( - func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*EndRecordingRequest) - if !ok { - return nil, twirp.InternalError("failed type assertion req.(*EndRecordingRequest) when calling interceptor") - } - return s.RecordingService.EndRecording(ctx, typedReq) - }, - )(ctx, req) - if resp != nil { - typedResp, ok := resp.(*google_protobuf.Empty) - if !ok { - return nil, twirp.InternalError("failed type assertion resp.(*google_protobuf.Empty) when calling interceptor") - } - return typedResp, err - } - return nil, err - } - } - - // Call service method - var respContent *google_protobuf.Empty - func() { - defer ensurePanicResponses(ctx, resp, s.hooks) - respContent, err = handler(ctx, reqContent) - }() - - if err != nil { - s.writeError(ctx, resp, err) - return - } - if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *google_protobuf.Empty and nil error while calling EndRecording. nil responses are not supported")) - return - } - - ctx = callResponsePrepared(ctx, s.hooks) - - marshaler := &protojson.MarshalOptions{UseProtoNames: !s.jsonCamelCase, EmitUnpopulated: !s.jsonSkipDefaults} - respBytes, err := marshaler.Marshal(respContent) - if err != nil { - s.writeError(ctx, resp, wrapInternal(err, "failed to marshal json response")) - return - } - - ctx = ctxsetters.WithStatusCode(ctx, http.StatusOK) - resp.Header().Set("Content-Type", "application/json") - resp.Header().Set("Content-Length", strconv.Itoa(len(respBytes))) - resp.WriteHeader(http.StatusOK) - - if n, err := resp.Write(respBytes); err != nil { - msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) - twerr := twirp.NewError(twirp.Unknown, msg) - ctx = callError(ctx, s.hooks, twerr) - } - callResponseSent(ctx, s.hooks) -} - -func (s *recordingServiceServer) serveEndRecordingProtobuf(ctx context.Context, resp http.ResponseWriter, req *http.Request) { - var err error - ctx = ctxsetters.WithMethodName(ctx, "EndRecording") - ctx, err = callRequestRouted(ctx, s.hooks) - if err != nil { - s.writeError(ctx, resp, err) - return - } - - buf, err := ioutil.ReadAll(req.Body) - if err != nil { - s.handleRequestBodyError(ctx, resp, "failed to read request body", err) - return - } - reqContent := new(EndRecordingRequest) - if err = proto.Unmarshal(buf, reqContent); err != nil { - s.writeError(ctx, resp, malformedRequestError("the protobuf request could not be decoded")) - return - } - - handler := s.RecordingService.EndRecording - if s.interceptor != nil { - handler = func(ctx context.Context, req *EndRecordingRequest) (*google_protobuf.Empty, error) { - resp, err := s.interceptor( - func(ctx context.Context, req interface{}) (interface{}, error) { - typedReq, ok := req.(*EndRecordingRequest) - if !ok { - return nil, twirp.InternalError("failed type assertion req.(*EndRecordingRequest) when calling interceptor") - } - return s.RecordingService.EndRecording(ctx, typedReq) - }, - )(ctx, req) - if resp != nil { - typedResp, ok := resp.(*google_protobuf.Empty) - if !ok { - return nil, twirp.InternalError("failed type assertion resp.(*google_protobuf.Empty) when calling interceptor") - } - return typedResp, err - } - return nil, err - } - } - - // Call service method - var respContent *google_protobuf.Empty - func() { - defer ensurePanicResponses(ctx, resp, s.hooks) - respContent, err = handler(ctx, reqContent) - }() - - if err != nil { - s.writeError(ctx, resp, err) - return - } - if respContent == nil { - s.writeError(ctx, resp, twirp.InternalError("received a nil *google_protobuf.Empty and nil error while calling EndRecording. nil responses are not supported")) - return - } - - ctx = callResponsePrepared(ctx, s.hooks) - - respBytes, err := proto.Marshal(respContent) - if err != nil { - s.writeError(ctx, resp, wrapInternal(err, "failed to marshal proto response")) - return - } - - ctx = ctxsetters.WithStatusCode(ctx, http.StatusOK) - resp.Header().Set("Content-Type", "application/protobuf") - resp.Header().Set("Content-Length", strconv.Itoa(len(respBytes))) - resp.WriteHeader(http.StatusOK) - if n, err := resp.Write(respBytes); err != nil { - msg := fmt.Sprintf("failed to write response, %d of %d bytes written: %s", n, len(respBytes), err.Error()) - twerr := twirp.NewError(twirp.Unknown, msg) - ctx = callError(ctx, s.hooks, twerr) - } - callResponseSent(ctx, s.hooks) -} - -func (s *recordingServiceServer) ServiceDescriptor() ([]byte, int) { - return twirpFileDescriptor2, 0 -} - -func (s *recordingServiceServer) ProtocGenTwirpVersion() string { - return "v8.1.0" -} - -// PathPrefix returns the base service path, in the form: "//./" -// that is everything in a Twirp route except for the . This can be used for routing, -// for example to identify the requests that are targeted to this service in a mux. -func (s *recordingServiceServer) PathPrefix() string { - return baseServicePath(s.pathPrefix, "livekit", "RecordingService") -} - -var twirpFileDescriptor2 = []byte{ - // 828 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x55, 0x41, 0x73, 0xe3, 0x34, - 0x14, 0xae, 0xed, 0x38, 0xb1, 0x5f, 0xdb, 0x6c, 0x50, 0xa1, 0x78, 0xb3, 0x05, 0x82, 0xf7, 0xb0, - 0x85, 0x83, 0xdb, 0x69, 0x67, 0x76, 0x76, 0x96, 0x13, 0x85, 0x86, 0x74, 0xb6, 0xd3, 0x16, 0x95, - 0x72, 0xe0, 0xe2, 0x71, 0x62, 0x25, 0xd1, 0x60, 0x5b, 0x46, 0x96, 0xb3, 0xd3, 0x7f, 0xc0, 0x6f, - 0xe1, 0xca, 0x95, 0x2b, 0x7f, 0x86, 0x1f, 0xc0, 0x99, 0x91, 0x64, 0x3b, 0x21, 0x59, 0x5a, 0x0e, - 0x7b, 0xf3, 0xfb, 0xf4, 0xbd, 0xcf, 0x7a, 0x7a, 0xdf, 0x93, 0xe0, 0xe3, 0x84, 0x2e, 0xc8, 0xcf, - 0x54, 0x84, 0x9c, 0x4c, 0x18, 0x8f, 0x69, 0x36, 0x0b, 0x72, 0xce, 0x04, 0x43, 0x9d, 0x6a, 0xa1, - 0xff, 0x6c, 0xc6, 0xd8, 0x2c, 0x21, 0x47, 0x0a, 0x1e, 0x97, 0xd3, 0x23, 0x92, 0xe6, 0xe2, 0x5e, - 0xb3, 0xfc, 0xbf, 0x0d, 0xf8, 0xe8, 0x56, 0x44, 0x5c, 0xe0, 0x3a, 0x1d, 0x93, 0x5f, 0x4a, 0x52, - 0x08, 0x84, 0xc0, 0x2a, 0x79, 0xe2, 0x19, 0x03, 0xe3, 0xd0, 0x1d, 0x6d, 0x61, 0x19, 0xa0, 0x57, - 0xe0, 0x08, 0x92, 0xe6, 0x49, 0x24, 0x88, 0x67, 0x0e, 0x8c, 0xc3, 0xed, 0x93, 0x7e, 0x50, 0xfd, - 0x26, 0x68, 0x04, 0x7e, 0xa8, 0x18, 0xa3, 0x2d, 0xdc, 0xb0, 0xd1, 0x17, 0xd0, 0xe2, 0x22, 0xcd, - 0x3d, 0x4b, 0x65, 0xed, 0x2d, 0xb3, 0x44, 0x9a, 0x5f, 0x97, 0x22, 0x2f, 0xc5, 0xc8, 0xc0, 0x8a, - 0x82, 0x0e, 0xc0, 0x99, 0xd2, 0x84, 0xe4, 0x91, 0x98, 0x7b, 0x2d, 0xf5, 0x77, 0x03, 0x37, 0x08, - 0x3a, 0x85, 0x0e, 0xcb, 0x05, 0x65, 0x59, 0xe1, 0xd9, 0x4a, 0xeb, 0xe9, 0xe6, 0x0e, 0xae, 0x35, - 0x01, 0xd7, 0xcc, 0xb3, 0x0e, 0xd8, 0x34, 0xcb, 0x4b, 0x71, 0xe6, 0x40, 0x9b, 0xa9, 0xbf, 0xf9, - 0x13, 0xf8, 0x60, 0x63, 0xc7, 0x68, 0x1f, 0xda, 0x49, 0x74, 0xcf, 0x4a, 0xa1, 0xcb, 0xc6, 0x55, - 0x84, 0x9e, 0x81, 0xcb, 0x19, 0x4b, 0xc3, 0x2c, 0x4a, 0x75, 0xe1, 0x2e, 0x76, 0x24, 0x70, 0x15, - 0xa5, 0x04, 0x3d, 0x05, 0x67, 0x1c, 0x15, 0x24, 0x94, 0xa7, 0x65, 0xa9, 0xb5, 0x8e, 0x8c, 0xef, - 0x78, 0xe2, 0x0f, 0x00, 0x96, 0x05, 0x22, 0x04, 0xad, 0x92, 0x27, 0x85, 0x67, 0x0c, 0xac, 0x43, - 0x17, 0xab, 0x6f, 0xff, 0x77, 0x13, 0x7a, 0xeb, 0xfb, 0x46, 0xc7, 0xd0, 0xce, 0x39, 0x29, 0x88, - 0xde, 0x46, 0xf7, 0xc4, 0xdb, 0x2c, 0xf1, 0x46, 0xad, 0xe3, 0x8a, 0x87, 0x3e, 0x04, 0xfb, 0x2d, - 0x8d, 0xc5, 0x5c, 0x6d, 0xce, 0xc6, 0x3a, 0x90, 0xe5, 0xcc, 0x09, 0x9d, 0xcd, 0x85, 0xda, 0x97, - 0x8d, 0xab, 0x48, 0xb2, 0x63, 0x92, 0x57, 0xc7, 0x6b, 0x63, 0x1d, 0xa0, 0x03, 0x70, 0xa7, 0x3c, - 0x4a, 0x09, 0x97, 0xdd, 0xb5, 0xd5, 0xca, 0x12, 0x40, 0xcf, 0x61, 0x37, 0x2a, 0x63, 0xca, 0xc2, - 0x31, 0x15, 0x8a, 0xd1, 0x56, 0x8c, 0x1d, 0x05, 0x9e, 0x69, 0x0c, 0xbd, 0x80, 0x27, 0x9a, 0x34, - 0xe5, 0xd2, 0x45, 0xd9, 0xe4, 0xde, 0xeb, 0x28, 0x5a, 0x57, 0xc1, 0xc3, 0x1a, 0x95, 0x6a, 0x0b, - 0x1a, 0x93, 0xa5, 0x9a, 0xa3, 0xd5, 0x14, 0x58, 0xab, 0x79, 0xd0, 0xc9, 0x39, 0x93, 0x9d, 0xf7, - 0x5c, 0x7d, 0xae, 0x55, 0xe8, 0x7f, 0x05, 0xfb, 0xeb, 0xa6, 0x2d, 0x72, 0x96, 0x15, 0x04, 0x7d, - 0x0e, 0x3b, 0xcd, 0x20, 0x84, 0x34, 0xae, 0xfa, 0xb8, 0xdd, 0x60, 0x17, 0xb1, 0x7f, 0x03, 0xbd, - 0xaf, 0xe3, 0x58, 0xf7, 0xa4, 0x36, 0xfb, 0xe3, 0x69, 0xb2, 0xcd, 0xd2, 0x9e, 0xaa, 0xcd, 0xda, - 0x02, 0x1d, 0x19, 0xcb, 0x36, 0xdf, 0xc2, 0x1e, 0x26, 0x29, 0x5b, 0x90, 0xf7, 0x29, 0xfa, 0x0a, - 0xf6, 0xce, 0xb3, 0x78, 0x63, 0x2c, 0xff, 0x47, 0x81, 0x7f, 0x18, 0xb0, 0xdb, 0xe4, 0x5d, 0x64, - 0x53, 0x86, 0xba, 0x60, 0x36, 0x54, 0x93, 0xc6, 0x0f, 0xfb, 0x79, 0x1f, 0xda, 0xd1, 0x44, 0xd0, - 0x05, 0x51, 0xae, 0x71, 0x70, 0x15, 0x49, 0xd7, 0x10, 0xce, 0x19, 0xd7, 0x43, 0x89, 0x75, 0x80, - 0x5e, 0x40, 0x4b, 0x75, 0xc8, 0x5e, 0x1b, 0xec, 0x21, 0x4d, 0x08, 0x26, 0x45, 0x99, 0x08, 0xac, - 0x08, 0x92, 0xa8, 0x6e, 0x80, 0xf6, 0xc0, 0xda, 0xb8, 0x01, 0x6a, 0xa2, 0x24, 0xf8, 0x6f, 0x00, - 0x96, 0xc9, 0xb2, 0xde, 0x98, 0xbd, 0xcd, 0x12, 0x16, 0xc5, 0x61, 0x73, 0x1f, 0xe1, 0xed, 0x1a, - 0xbb, 0xe3, 0x09, 0xea, 0x83, 0x13, 0x97, 0x3c, 0x92, 0xb3, 0xa3, 0x8a, 0xb1, 0x70, 0x13, 0xfb, - 0xdf, 0xe9, 0x09, 0xac, 0xc4, 0x3e, 0x01, 0x28, 0x04, 0x27, 0x51, 0xba, 0x22, 0xe5, 0x6a, 0xe4, - 0x11, 0xa1, 0x2f, 0xbf, 0x87, 0x27, 0x6b, 0xc3, 0x87, 0x1c, 0x68, 0x5d, 0x5d, 0x5f, 0x9d, 0xf7, - 0xb6, 0x90, 0x0b, 0xf6, 0xe8, 0xdb, 0xf0, 0xf4, 0xb8, 0x67, 0x54, 0x9f, 0x2f, 0x8f, 0x7b, 0x26, - 0xea, 0x02, 0x0c, 0xef, 0x2e, 0x2f, 0x43, 0xbd, 0x64, 0xad, 0xc6, 0x2f, 0x8f, 0x7b, 0xad, 0x93, - 0x3f, 0x57, 0x67, 0xff, 0x96, 0xf0, 0x05, 0x9d, 0x10, 0xf4, 0x23, 0x74, 0xff, 0x6d, 0x6d, 0xf4, - 0x69, 0x73, 0x54, 0xef, 0xbc, 0xa8, 0xfb, 0x9f, 0xfd, 0xe7, 0xba, 0x9e, 0x09, 0xdf, 0xfa, 0xd5, - 0x34, 0xd0, 0x37, 0xe0, 0x36, 0xae, 0x47, 0xcb, 0x3b, 0x73, 0x7d, 0x12, 0xfa, 0xfb, 0x81, 0x7e, - 0x2e, 0x82, 0xfa, 0xb9, 0x08, 0xce, 0xe5, 0x73, 0xa1, 0x45, 0x2e, 0x60, 0x67, 0xd5, 0xe8, 0xe8, - 0x60, 0xe5, 0x62, 0xda, 0xf0, 0xff, 0xa3, 0x52, 0xab, 0xf6, 0x5e, 0x91, 0x7a, 0x87, 0xeb, 0x1f, - 0x94, 0x3a, 0x1b, 0xfe, 0xf4, 0x7c, 0x46, 0xc5, 0xbc, 0x1c, 0x07, 0x13, 0x96, 0x1e, 0x55, 0x32, - 0xfa, 0xb9, 0x9b, 0xb0, 0xa4, 0x06, 0x7e, 0x33, 0x77, 0x2f, 0xe9, 0x82, 0xbc, 0xa1, 0x22, 0xb8, - 0x91, 0x4b, 0x7f, 0x99, 0xdd, 0x2a, 0x7e, 0xfd, 0x5a, 0x01, 0xe3, 0xb6, 0x4a, 0x39, 0xfd, 0x27, - 0x00, 0x00, 0xff, 0xff, 0xb9, 0xa6, 0x50, 0xd9, 0x53, 0x07, 0x00, 0x00, -} diff --git a/livekit/livekit_room.twirp.go b/livekit/livekit_room.twirp.go index 61a732ff..577d8347 100644 --- a/livekit/livekit_room.twirp.go +++ b/livekit/livekit_room.twirp.go @@ -3307,7 +3307,7 @@ func (s *roomServiceServer) serveUpdateRoomMetadataProtobuf(ctx context.Context, } func (s *roomServiceServer) ServiceDescriptor() ([]byte, int) { - return twirpFileDescriptor3, 0 + return twirpFileDescriptor2, 0 } func (s *roomServiceServer) ProtocGenTwirpVersion() string { @@ -3321,7 +3321,7 @@ func (s *roomServiceServer) PathPrefix() string { return baseServicePath(s.pathPrefix, "livekit", "RoomService") } -var twirpFileDescriptor3 = []byte{ +var twirpFileDescriptor2 = []byte{ // 863 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x56, 0xdb, 0x6e, 0xf3, 0x44, 0x10, 0x96, 0xd3, 0xa4, 0x8d, 0x27, 0x4d, 0xdb, 0x2c, 0x41, 0x75, 0x1c, 0x5a, 0x05, 0x17, 0x89, diff --git a/livekit/livekit_webhook.pb.go b/livekit/livekit_webhook.pb.go index 89b7cfc8..5132980d 100644 --- a/livekit/livekit_webhook.pb.go +++ b/livekit/livekit_webhook.pb.go @@ -25,14 +25,12 @@ type WebhookEvent struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // one of room_started, room_finished, participant_joined, participant_left, recording_started, recording_finished, + // one of room_started, room_finished, participant_joined, participant_left, // track_published, track_unpublished, egress_started, egress_ended Event string `protobuf:"bytes,1,opt,name=event,proto3" json:"event,omitempty"` Room *Room `protobuf:"bytes,2,opt,name=room,proto3" json:"room,omitempty"` // set when event is participant_* or track_* Participant *ParticipantInfo `protobuf:"bytes,3,opt,name=participant,proto3" json:"participant,omitempty"` - // set when event is recording_* - RecordingInfo *RecordingInfo `protobuf:"bytes,5,opt,name=recording_info,json=recordingInfo,proto3" json:"recording_info,omitempty"` // set when event is egress_* EgressInfo *EgressInfo `protobuf:"bytes,9,opt,name=egress_info,json=egressInfo,proto3" json:"egress_info,omitempty"` // set when event is track_* @@ -96,13 +94,6 @@ func (x *WebhookEvent) GetParticipant() *ParticipantInfo { return nil } -func (x *WebhookEvent) GetRecordingInfo() *RecordingInfo { - if x != nil { - return x.RecordingInfo - } - return nil -} - func (x *WebhookEvent) GetEgressInfo() *EgressInfo { if x != nil { return x.EgressInfo @@ -138,35 +129,30 @@ var file_livekit_webhook_proto_rawDesc = []byte{ 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x07, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x1a, 0x14, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x5f, - 0x65, 0x67, 0x72, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x6c, 0x69, - 0x76, 0x65, 0x6b, 0x69, 0x74, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xd1, 0x02, 0x0a, 0x0c, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, - 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x04, - 0x72, 0x6f, 0x6f, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x6c, 0x69, 0x76, - 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x12, - 0x3a, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x50, - 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, - 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x12, 0x3d, 0x0a, 0x0e, 0x72, - 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x52, 0x65, - 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0d, 0x72, 0x65, 0x63, - 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x34, 0x0a, 0x0b, 0x65, 0x67, - 0x72, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x13, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x45, 0x67, 0x72, 0x65, 0x73, 0x73, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x65, 0x67, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x66, 0x6f, - 0x12, 0x28, 0x0a, 0x05, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x12, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x42, 0x46, 0x5a, 0x23, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, - 0xaa, 0x02, 0x0d, 0x4c, 0x69, 0x76, 0x65, 0x4b, 0x69, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0xea, 0x02, 0x0e, 0x4c, 0x69, 0x76, 0x65, 0x4b, 0x69, 0x74, 0x3a, 0x3a, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x67, 0x72, 0x65, 0x73, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x92, 0x02, 0x0a, + 0x0c, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, + 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0d, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x52, 0x6f, 0x6f, 0x6d, + 0x52, 0x04, 0x72, 0x6f, 0x6f, 0x6d, 0x12, 0x3a, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, + 0x69, 0x70, 0x61, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6c, 0x69, + 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, + 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, + 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x0b, 0x65, 0x67, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x6e, 0x66, + 0x6f, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, + 0x74, 0x2e, 0x45, 0x67, 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x65, 0x67, + 0x72, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x28, 0x0a, 0x05, 0x74, 0x72, 0x61, 0x63, + 0x6b, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, + 0x74, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x74, 0x72, 0x61, + 0x63, 0x6b, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, + 0x74, 0x42, 0x46, 0x5a, 0x23, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, + 0x2f, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0xaa, 0x02, 0x0d, 0x4c, 0x69, 0x76, 0x65, 0x4b, + 0x69, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0xea, 0x02, 0x0e, 0x4c, 0x69, 0x76, 0x65, 0x4b, + 0x69, 0x74, 0x3a, 0x3a, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( @@ -186,21 +172,19 @@ var file_livekit_webhook_proto_goTypes = []interface{}{ (*WebhookEvent)(nil), // 0: livekit.WebhookEvent (*Room)(nil), // 1: livekit.Room (*ParticipantInfo)(nil), // 2: livekit.ParticipantInfo - (*RecordingInfo)(nil), // 3: livekit.RecordingInfo - (*EgressInfo)(nil), // 4: livekit.EgressInfo - (*TrackInfo)(nil), // 5: livekit.TrackInfo + (*EgressInfo)(nil), // 3: livekit.EgressInfo + (*TrackInfo)(nil), // 4: livekit.TrackInfo } var file_livekit_webhook_proto_depIdxs = []int32{ 1, // 0: livekit.WebhookEvent.room:type_name -> livekit.Room 2, // 1: livekit.WebhookEvent.participant:type_name -> livekit.ParticipantInfo - 3, // 2: livekit.WebhookEvent.recording_info:type_name -> livekit.RecordingInfo - 4, // 3: livekit.WebhookEvent.egress_info:type_name -> livekit.EgressInfo - 5, // 4: livekit.WebhookEvent.track:type_name -> livekit.TrackInfo - 5, // [5:5] is the sub-list for method output_type - 5, // [5:5] is the sub-list for method input_type - 5, // [5:5] is the sub-list for extension type_name - 5, // [5:5] is the sub-list for extension extendee - 0, // [0:5] is the sub-list for field type_name + 3, // 2: livekit.WebhookEvent.egress_info:type_name -> livekit.EgressInfo + 4, // 3: livekit.WebhookEvent.track:type_name -> livekit.TrackInfo + 4, // [4:4] is the sub-list for method output_type + 4, // [4:4] is the sub-list for method input_type + 4, // [4:4] is the sub-list for extension type_name + 4, // [4:4] is the sub-list for extension extendee + 0, // [0:4] is the sub-list for field type_name } func init() { file_livekit_webhook_proto_init() } @@ -210,7 +194,6 @@ func file_livekit_webhook_proto_init() { } file_livekit_models_proto_init() file_livekit_egress_proto_init() - file_livekit_recording_proto_init() if !protoimpl.UnsafeEnabled { file_livekit_webhook_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WebhookEvent); i { diff --git a/livekit_analytics.proto b/livekit_analytics.proto index 0771cb14..2b796486 100644 --- a/livekit_analytics.proto +++ b/livekit_analytics.proto @@ -71,8 +71,6 @@ enum AnalyticsEventType { TRACK_UNPUBLISHED = 5; TRACK_SUBSCRIBED = 6; TRACK_UNSUBSCRIBED = 7; - RECORDING_STARTED = 8; - RECORDING_ENDED = 9; TRACK_PUBLISHED_UPDATE = 10; PARTICIPANT_ACTIVE = 11; EGRESS_STARTED = 12; @@ -96,7 +94,6 @@ message AnalyticsEvent { ParticipantInfo participant = 6; string track_id = 7; TrackInfo track = 8; - string recording_id = 9; string analytics_key = 10; ClientInfo client_info = 11; AnalyticsClientMeta client_meta = 12; diff --git a/livekit_internal.proto b/livekit_internal.proto index 86e76207..3585176a 100644 --- a/livekit_internal.proto +++ b/livekit_internal.proto @@ -7,7 +7,6 @@ option ruby_package = "LiveKit::Proto"; // internal protos, not exposed to clients import "livekit_models.proto"; -import "livekit_recording.proto"; import "livekit_rtc.proto"; import "livekit_room.proto"; @@ -127,25 +126,5 @@ message RemoveParticipant { string participant_id = 1; } -message RecordingReservation { - string id = 1; - int64 submitted_at = 2; -} - -message RecordingRequest { - string request_id = 1; - oneof request { - StartRecordingRequest start = 2; - AddOutputRequest add_output = 3; - RemoveOutputRequest remove_output = 4; - EndRecordingRequest end = 5; - } -} - -message RecordingResponse { - string request_id = 1; - string error = 2; -} - message KeepAlive { } diff --git a/livekit_recording.proto b/livekit_recording.proto deleted file mode 100644 index 039bd3a9..00000000 --- a/livekit_recording.proto +++ /dev/null @@ -1,112 +0,0 @@ -syntax = "proto3"; - -package livekit; -option go_package = "github.com/livekit/protocol/livekit"; -option csharp_namespace = "LiveKit.Proto"; -option ruby_package = "LiveKit::Proto"; - -import "google/protobuf/empty.proto"; - -// Recording service that can be performed on any node -// they are Twirp-based HTTP req/responses -service RecordingService { - // Starts a room - rpc StartRecording(StartRecordingRequest) returns (StartRecordingResponse) { - option deprecated = true; - }; - - // Adds an rtmp output to a live recording - rpc AddOutput(AddOutputRequest) returns (google.protobuf.Empty) { - option deprecated = true; - }; - - // Removes an rtmp output from a live recording - rpc RemoveOutput(RemoveOutputRequest) returns (google.protobuf.Empty) { - option deprecated = true; - }; - - // Ends a recording - rpc EndRecording(EndRecordingRequest) returns (google.protobuf.Empty) { - option deprecated = true; - }; -} - -message StartRecordingRequest { - oneof input { - string url = 1; - RecordingTemplate template = 2; - } - oneof output { - RtmpOutput rtmp = 3; - string filepath = 4; - } - RecordingOptions options = 5; -} - -message RecordingTemplate { - string layout = 1; - string room_name = 2; - string base_url = 3; // defaults to https://recorder.livekit.io -} - -message RtmpOutput { - repeated string urls = 1; -} - -enum RecordingPreset { - // All presets use 44100 Hz, 128k bitrate for audio and a color depth of 24 - NONE = 0; - HD_30 = 1; // 720p, 30fps, 3000 kpbs - HD_60 = 2; // 720p, 60fps, 4500 kbps - FULL_HD_30 = 3; // 1080p, 30fps, 4500 kbps - FULL_HD_60 = 4; // 1080p, 60fps, 6000 kbps -} - -message RecordingOptions { - RecordingPreset preset = 1; - int32 width = 2; // default 1920 - int32 height = 3; // default 1080 - int32 depth = 4; // default 24 - int32 framerate = 5; // default 30 - int32 audio_bitrate = 6; // default 128 - int32 audio_frequency = 7; // default 44100 - int32 video_bitrate = 8; // default 4500 - string profile = 9; // baseline, main, or high. default main -} - -message StartRecordingResponse { - string recording_id = 1; -} - -message AddOutputRequest { - string recording_id = 1; - string rtmp_url = 2; -} - -message RemoveOutputRequest { - string recording_id = 1; - string rtmp_url = 2; -} - -message EndRecordingRequest { - string recording_id = 1; -} - -message RecordingInfo { - string id = 1; - string room_name = 2; - bool active = 3; - string error = 4; - FileResult file = 5; - repeated RtmpResult rtmp = 6; -} - -message FileResult { - string download_url = 1; - int64 duration = 2; -} - -message RtmpResult { - string stream_url = 1; - int64 duration = 2; -} diff --git a/livekit_webhook.proto b/livekit_webhook.proto index 30b4e656..6c9f0683 100644 --- a/livekit_webhook.proto +++ b/livekit_webhook.proto @@ -7,10 +7,9 @@ option ruby_package = "LiveKit::Proto"; import "livekit_models.proto"; import "livekit_egress.proto"; -import "livekit_recording.proto"; message WebhookEvent { - // one of room_started, room_finished, participant_joined, participant_left, recording_started, recording_finished, + // one of room_started, room_finished, participant_joined, participant_left, // track_published, track_unpublished, egress_started, egress_ended string event = 1; @@ -19,9 +18,6 @@ message WebhookEvent { // set when event is participant_* or track_* ParticipantInfo participant = 3; - // set when event is recording_* - RecordingInfo recording_info = 5; - // set when event is egress_* EgressInfo egress_info = 9; diff --git a/magefile.go b/magefile.go index b050124c..5a376472 100644 --- a/magefile.go +++ b/magefile.go @@ -18,7 +18,6 @@ func Proto() error { twirpProtoFiles := []string{ "livekit_egress.proto", "livekit_ingress.proto", - "livekit_recording.proto", "livekit_room.proto", } grpcProtoFiles := []string{ diff --git a/recording/request.go b/recording/request.go deleted file mode 100644 index 4b3cd04c..00000000 --- a/recording/request.go +++ /dev/null @@ -1,89 +0,0 @@ -package recording - -import ( - "context" - "errors" - "time" - - "google.golang.org/protobuf/proto" - - "github.com/livekit/protocol/livekit" - "github.com/livekit/protocol/utils" -) - -const ( - ReservationChannel = "RESERVE_RECORDER" - ResultChannel = "RECORDING_RESULT" - RequestTimeout = time.Second * 3 - ReservationTimeout = time.Second * 2 -) - -func RequestChannel(id string) string { - return "RECORDING_REQUEST_" + id -} - -func ResponseChannel(id string) string { - return "RECORDING_RESPONSE_" + id -} - -func ReserveRecorder(bus utils.MessageBus) (string, error) { - recordingId := utils.NewGuid(utils.RecordingPrefix) - - sub, _ := bus.Subscribe(context.Background(), ResponseChannel(recordingId)) - defer sub.Close() - - req := &livekit.RecordingReservation{ - Id: recordingId, - SubmittedAt: time.Now().UnixNano() / 1e6, - } - - err := bus.Publish(context.Background(), ReservationChannel, req) - if err != nil { - return "", err - } - - select { - case <-sub.Channel(): - return recordingId, nil - case <-time.After(RequestTimeout): - return "", errors.New("no recorders available") - } -} - -func RPC(ctx context.Context, bus utils.MessageBus, recordingId string, req *livekit.RecordingRequest) error { - sub, err := bus.Subscribe(ctx, ResponseChannel(recordingId)) - if err != nil { - return err - } - defer sub.Close() - - if req.RequestId == "" { - req.RequestId = utils.NewGuid(utils.RPCPrefix) - } - - err = bus.Publish(ctx, RequestChannel(recordingId), req) - if err != nil { - return err - } - - for { - select { - case <-time.After(RequestTimeout): - return errors.New("request timeout") - case msg := <-sub.Channel(): - b := sub.Payload(msg) - resp := &livekit.RecordingResponse{} - err = proto.Unmarshal(b, resp) - if err != nil { - return err - } - if resp.RequestId != req.RequestId { - continue - } - if resp.Error != "" { - return errors.New(resp.Error) - } - return nil - } - } -} diff --git a/utils/id.go b/utils/id.go index e3037cab..ddc036d5 100644 --- a/utils/id.go +++ b/utils/id.go @@ -15,7 +15,6 @@ const ( ParticipantPrefix = "PA_" TrackPrefix = "TR_" APIKeyPrefix = "API" - RecordingPrefix = "RR_" EgressPrefix = "EG_" RPCPrefix = "RPC_" ) diff --git a/webhook/consts.go b/webhook/consts.go index e78f251b..5203cda2 100644 --- a/webhook/consts.go +++ b/webhook/consts.go @@ -17,8 +17,6 @@ const ( EventParticipantLeft = "participant_left" EventTrackPublished = "track_published" EventTrackUnpublished = "track_unpublished" - EventRecordingStarted = "recording_started" - EventRecordingFinished = "recording_finished" EventEgressStarted = "egress_started" EventEgressEnded = "egress_ended" )