From 10d6e877203de595dcb297b8b01faa1cd7b2c48b Mon Sep 17 00:00:00 2001 From: Lisa Kim Date: Mon, 28 Oct 2024 13:49:32 -0700 Subject: [PATCH] [v16] Teleterm: add listing kube resources endpoint (#47376) * Teleterm: Add listing kube resources endpoint (#46753) * Rename makeLabels into MakeUILabelsWithoutInternalPrefixes * Teleterm: add listing kube resource endpoint * Teleterm pb updates * Renames, moves test, fix imports, address CRS * Straggling file from make grpc --- .../go/teleport/lib/teleterm/v1/kube.pb.go | 157 +- .../go/teleport/lib/teleterm/v1/service.pb.go | 2562 +++++++++-------- .../lib/teleterm/v1/service_grpc.pb.go | 41 + .../ts/teleport/lib/teleterm/v1/kube_pb.ts | 133 + .../lib/teleterm/v1/service_pb.client.ts | 71 +- .../lib/teleterm/v1/service_pb.grpc-server.ts | 19 + .../ts/teleport/lib/teleterm/v1/service_pb.ts | 242 ++ lib/teleterm/api/uri/uri.go | 23 + lib/teleterm/api/uri/uri_test.go | 50 + .../apiserver/handler/handler_kubes.go | 47 + lib/teleterm/daemon/daemon.go | 34 + lib/ui/labels.go | 89 + lib/ui/labels_test.go | 144 + lib/web/apiserver_test.go | 133 +- lib/web/databases.go | 7 +- lib/web/join_tokens.go | 11 +- lib/web/servers.go | 35 +- lib/web/servers_test.go | 5 +- lib/web/ui/app.go | 11 +- lib/web/ui/app_test.go | 17 +- lib/web/ui/integration.go | 3 +- lib/web/ui/labels.go | 29 - lib/web/ui/labels_test.go | 119 - lib/web/ui/notification.go | 17 +- lib/web/ui/server.go | 80 +- lib/web/ui/server_test.go | 23 +- lib/web/ui/user_groups.go | 5 +- lib/web/ui/user_groups_test.go | 9 +- proto/teleport/lib/teleterm/v1/kube.proto | 19 + proto/teleport/lib/teleterm/v1/service.proto | 32 + .../src/services/tshd/fixtures/mocks.ts | 2 + web/packages/teleterm/src/ui/uri.test.ts | 31 + web/packages/teleterm/src/ui/uri.ts | 32 + 33 files changed, 2695 insertions(+), 1537 deletions(-) create mode 100644 lib/ui/labels.go create mode 100644 lib/ui/labels_test.go diff --git a/gen/proto/go/teleport/lib/teleterm/v1/kube.pb.go b/gen/proto/go/teleport/lib/teleterm/v1/kube.pb.go index f0af9114e8af6..00fb26892dfac 100644 --- a/gen/proto/go/teleport/lib/teleterm/v1/kube.pb.go +++ b/gen/proto/go/teleport/lib/teleterm/v1/kube.pb.go @@ -104,6 +104,103 @@ func (x *Kube) GetLabels() []*Label { return nil } +// KubeResource describes a kube_cluster's subresource eg: pods, namespaces, etc. +type KubeResource struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // uri is the kube resource URI + Uri string `protobuf:"bytes,1,opt,name=uri,proto3" json:"uri,omitempty"` + // kind is the kube subresource kind eg: pods, namespace + Kind string `protobuf:"bytes,2,opt,name=kind,proto3" json:"kind,omitempty"` + // name is the kube resource name eg: pod name, namespace name + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + // labels is the kube resource labels + Labels []*Label `protobuf:"bytes,4,rep,name=labels,proto3" json:"labels,omitempty"` + // cluster is the kube cluster name that this kube resource belongs to + // eg: the kube cluster that a namespace belongs to + Cluster string `protobuf:"bytes,5,opt,name=cluster,proto3" json:"cluster,omitempty"` + // namespace is the kube namespace where the resource is located + // note: this field will be blank if this resource "kind" is "namespace", + // refer to field "name" for the name of namespace + Namespace string `protobuf:"bytes,6,opt,name=namespace,proto3" json:"namespace,omitempty"` +} + +func (x *KubeResource) Reset() { + *x = KubeResource{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_lib_teleterm_v1_kube_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *KubeResource) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*KubeResource) ProtoMessage() {} + +func (x *KubeResource) ProtoReflect() protoreflect.Message { + mi := &file_teleport_lib_teleterm_v1_kube_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 KubeResource.ProtoReflect.Descriptor instead. +func (*KubeResource) Descriptor() ([]byte, []int) { + return file_teleport_lib_teleterm_v1_kube_proto_rawDescGZIP(), []int{1} +} + +func (x *KubeResource) GetUri() string { + if x != nil { + return x.Uri + } + return "" +} + +func (x *KubeResource) GetKind() string { + if x != nil { + return x.Kind + } + return "" +} + +func (x *KubeResource) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *KubeResource) GetLabels() []*Label { + if x != nil { + return x.Labels + } + return nil +} + +func (x *KubeResource) GetCluster() string { + if x != nil { + return x.Cluster + } + return "" +} + +func (x *KubeResource) GetNamespace() string { + if x != nil { + return x.Namespace + } + return "" +} + var File_teleport_lib_teleterm_v1_kube_proto protoreflect.FileDescriptor var file_teleport_lib_teleterm_v1_kube_proto_rawDesc = []byte{ @@ -119,13 +216,25 @@ var file_teleport_lib_teleterm_v1_kube_proto_rawDesc = []byte{ 0x61, 0x6d, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4c, - 0x61, 0x62, 0x65, 0x6c, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x42, 0x54, 0x5a, 0x52, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x61, 0x76, 0x69, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, - 0x74, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x74, - 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x6c, 0x69, 0x62, 0x2f, 0x74, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x72, 0x6d, 0x2f, 0x76, 0x31, 0x3b, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, - 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x61, 0x62, 0x65, 0x6c, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x22, 0xb9, 0x01, 0x0a, + 0x0c, 0x4b, 0x75, 0x62, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x10, 0x0a, + 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, + 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, + 0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, + 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, + 0x76, 0x31, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x42, 0x54, 0x5a, 0x52, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x61, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x67, 0x65, + 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x2f, 0x6c, 0x69, 0x62, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, + 0x2f, 0x76, 0x31, 0x3b, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x76, 0x31, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -140,18 +249,20 @@ func file_teleport_lib_teleterm_v1_kube_proto_rawDescGZIP() []byte { return file_teleport_lib_teleterm_v1_kube_proto_rawDescData } -var file_teleport_lib_teleterm_v1_kube_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_teleport_lib_teleterm_v1_kube_proto_msgTypes = make([]protoimpl.MessageInfo, 2) var file_teleport_lib_teleterm_v1_kube_proto_goTypes = []interface{}{ - (*Kube)(nil), // 0: teleport.lib.teleterm.v1.Kube - (*Label)(nil), // 1: teleport.lib.teleterm.v1.Label + (*Kube)(nil), // 0: teleport.lib.teleterm.v1.Kube + (*KubeResource)(nil), // 1: teleport.lib.teleterm.v1.KubeResource + (*Label)(nil), // 2: teleport.lib.teleterm.v1.Label } var file_teleport_lib_teleterm_v1_kube_proto_depIdxs = []int32{ - 1, // 0: teleport.lib.teleterm.v1.Kube.labels:type_name -> teleport.lib.teleterm.v1.Label - 1, // [1:1] is the sub-list for method output_type - 1, // [1:1] is the sub-list for method input_type - 1, // [1:1] is the sub-list for extension type_name - 1, // [1:1] is the sub-list for extension extendee - 0, // [0:1] is the sub-list for field type_name + 2, // 0: teleport.lib.teleterm.v1.Kube.labels:type_name -> teleport.lib.teleterm.v1.Label + 2, // 1: teleport.lib.teleterm.v1.KubeResource.labels:type_name -> teleport.lib.teleterm.v1.Label + 2, // [2:2] is the sub-list for method output_type + 2, // [2:2] is the sub-list for method input_type + 2, // [2:2] is the sub-list for extension type_name + 2, // [2:2] is the sub-list for extension extendee + 0, // [0:2] is the sub-list for field type_name } func init() { file_teleport_lib_teleterm_v1_kube_proto_init() } @@ -173,6 +284,18 @@ func file_teleport_lib_teleterm_v1_kube_proto_init() { return nil } } + file_teleport_lib_teleterm_v1_kube_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*KubeResource); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -180,7 +303,7 @@ func file_teleport_lib_teleterm_v1_kube_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_teleport_lib_teleterm_v1_kube_proto_rawDesc, NumEnums: 0, - NumMessages: 1, + NumMessages: 2, NumExtensions: 0, NumServices: 0, }, diff --git a/gen/proto/go/teleport/lib/teleterm/v1/service.pb.go b/gen/proto/go/teleport/lib/teleterm/v1/service.pb.go index da48fd9a1fa1f..aedf957054451 100644 --- a/gen/proto/go/teleport/lib/teleterm/v1/service.pb.go +++ b/gen/proto/go/teleport/lib/teleterm/v1/service.pb.go @@ -1333,6 +1333,184 @@ func (x *GetSuggestedAccessListsResponse) GetAccessLists() []*v1.AccessList { return nil } +type ListKubernetesResourcesRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ClusterUri string `protobuf:"bytes,1,opt,name=cluster_uri,json=clusterUri,proto3" json:"cluster_uri,omitempty"` + // ResourceType is the Kubernetes resource that is going to be retrieved. + ResourceType string `protobuf:"bytes,2,opt,name=resource_type,json=resourceType,proto3" json:"resource_type,omitempty"` + // Limit is the maximum amount of resources to retrieve. + Limit int32 `protobuf:"varint,3,opt,name=limit,proto3" json:"limit,omitempty"` + // NextKey is used to start listing resources from a specific spot. It + // should be set to the previous NextKey value if using pagination, or + // left empty. + NextKey string `protobuf:"bytes,4,opt,name=next_key,json=nextKey,proto3" json:"next_key,omitempty"` + // PredicateExpression defines boolean conditions that will be matched against the resource. + PredicateExpression string `protobuf:"bytes,5,opt,name=predicate_expression,json=predicateExpression,proto3" json:"predicate_expression,omitempty"` + // SearchKeywords is a string containing search keywords to match against resource field values. + SearchKeywords string `protobuf:"bytes,6,opt,name=search_keywords,json=searchKeywords,proto3" json:"search_keywords,omitempty"` + // UseSearchAsRoles indicates that the response should include all resources + // the caller is able to request access to using search_as_roles + UseSearchAsRoles bool `protobuf:"varint,7,opt,name=use_search_as_roles,json=useSearchAsRoles,proto3" json:"use_search_as_roles,omitempty"` + // Cluster is the Kubernetes Cluster to request the resources. + KubernetesCluster string `protobuf:"bytes,8,opt,name=kubernetes_cluster,json=kubernetesCluster,proto3" json:"kubernetes_cluster,omitempty"` + // Namespace is the Kubernetes namespace where the resources must be located. + // To search on every Kubernetes Namespace, do not define the value. + KubernetesNamespace string `protobuf:"bytes,9,opt,name=kubernetes_namespace,json=kubernetesNamespace,proto3" json:"kubernetes_namespace,omitempty"` +} + +func (x *ListKubernetesResourcesRequest) Reset() { + *x = ListKubernetesResourcesRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListKubernetesResourcesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListKubernetesResourcesRequest) ProtoMessage() {} + +func (x *ListKubernetesResourcesRequest) ProtoReflect() protoreflect.Message { + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[20] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListKubernetesResourcesRequest.ProtoReflect.Descriptor instead. +func (*ListKubernetesResourcesRequest) Descriptor() ([]byte, []int) { + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{20} +} + +func (x *ListKubernetesResourcesRequest) GetClusterUri() string { + if x != nil { + return x.ClusterUri + } + return "" +} + +func (x *ListKubernetesResourcesRequest) GetResourceType() string { + if x != nil { + return x.ResourceType + } + return "" +} + +func (x *ListKubernetesResourcesRequest) GetLimit() int32 { + if x != nil { + return x.Limit + } + return 0 +} + +func (x *ListKubernetesResourcesRequest) GetNextKey() string { + if x != nil { + return x.NextKey + } + return "" +} + +func (x *ListKubernetesResourcesRequest) GetPredicateExpression() string { + if x != nil { + return x.PredicateExpression + } + return "" +} + +func (x *ListKubernetesResourcesRequest) GetSearchKeywords() string { + if x != nil { + return x.SearchKeywords + } + return "" +} + +func (x *ListKubernetesResourcesRequest) GetUseSearchAsRoles() bool { + if x != nil { + return x.UseSearchAsRoles + } + return false +} + +func (x *ListKubernetesResourcesRequest) GetKubernetesCluster() string { + if x != nil { + return x.KubernetesCluster + } + return "" +} + +func (x *ListKubernetesResourcesRequest) GetKubernetesNamespace() string { + if x != nil { + return x.KubernetesNamespace + } + return "" +} + +type ListKubernetesResourcesResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Resources []*KubeResource `protobuf:"bytes,1,rep,name=resources,proto3" json:"resources,omitempty"` + NextKey string `protobuf:"bytes,2,opt,name=next_key,json=nextKey,proto3" json:"next_key,omitempty"` +} + +func (x *ListKubernetesResourcesResponse) Reset() { + *x = ListKubernetesResourcesResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListKubernetesResourcesResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListKubernetesResourcesResponse) ProtoMessage() {} + +func (x *ListKubernetesResourcesResponse) ProtoReflect() protoreflect.Message { + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[21] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListKubernetesResourcesResponse.ProtoReflect.Descriptor instead. +func (*ListKubernetesResourcesResponse) Descriptor() ([]byte, []int) { + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{21} +} + +func (x *ListKubernetesResourcesResponse) GetResources() []*KubeResource { + if x != nil { + return x.Resources + } + return nil +} + +func (x *ListKubernetesResourcesResponse) GetNextKey() string { + if x != nil { + return x.NextKey + } + return "" +} + // CredentialInfo holds fields related to a user's WebAuthn credential. type CredentialInfo struct { state protoimpl.MessageState @@ -1345,7 +1523,7 @@ type CredentialInfo struct { func (x *CredentialInfo) Reset() { *x = CredentialInfo{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[20] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1358,7 +1536,7 @@ func (x *CredentialInfo) String() string { func (*CredentialInfo) ProtoMessage() {} func (x *CredentialInfo) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[20] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1371,7 +1549,7 @@ func (x *CredentialInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use CredentialInfo.ProtoReflect.Descriptor instead. func (*CredentialInfo) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{20} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{22} } func (x *CredentialInfo) GetUsername() string { @@ -1395,7 +1573,7 @@ type LoginPasswordlessResponse struct { func (x *LoginPasswordlessResponse) Reset() { *x = LoginPasswordlessResponse{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[21] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1408,7 +1586,7 @@ func (x *LoginPasswordlessResponse) String() string { func (*LoginPasswordlessResponse) ProtoMessage() {} func (x *LoginPasswordlessResponse) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[21] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1421,7 +1599,7 @@ func (x *LoginPasswordlessResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use LoginPasswordlessResponse.ProtoReflect.Descriptor instead. func (*LoginPasswordlessResponse) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{21} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{23} } func (x *LoginPasswordlessResponse) GetPrompt() PasswordlessPrompt { @@ -1455,7 +1633,7 @@ type LoginPasswordlessRequest struct { func (x *LoginPasswordlessRequest) Reset() { *x = LoginPasswordlessRequest{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[22] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1468,7 +1646,7 @@ func (x *LoginPasswordlessRequest) String() string { func (*LoginPasswordlessRequest) ProtoMessage() {} func (x *LoginPasswordlessRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[22] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1481,7 +1659,7 @@ func (x *LoginPasswordlessRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LoginPasswordlessRequest.ProtoReflect.Descriptor instead. func (*LoginPasswordlessRequest) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{22} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{24} } func (m *LoginPasswordlessRequest) GetRequest() isLoginPasswordlessRequest_Request { @@ -1553,7 +1731,7 @@ type FileTransferRequest struct { func (x *FileTransferRequest) Reset() { *x = FileTransferRequest{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[23] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1566,7 +1744,7 @@ func (x *FileTransferRequest) String() string { func (*FileTransferRequest) ProtoMessage() {} func (x *FileTransferRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[23] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1579,7 +1757,7 @@ func (x *FileTransferRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use FileTransferRequest.ProtoReflect.Descriptor instead. func (*FileTransferRequest) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{23} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{25} } func (x *FileTransferRequest) GetLogin() string { @@ -1628,7 +1806,7 @@ type FileTransferProgress struct { func (x *FileTransferProgress) Reset() { *x = FileTransferProgress{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[24] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1641,7 +1819,7 @@ func (x *FileTransferProgress) String() string { func (*FileTransferProgress) ProtoMessage() {} func (x *FileTransferProgress) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[24] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1654,7 +1832,7 @@ func (x *FileTransferProgress) ProtoReflect() protoreflect.Message { // Deprecated: Use FileTransferProgress.ProtoReflect.Descriptor instead. func (*FileTransferProgress) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{24} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{26} } func (x *FileTransferProgress) GetPercentage() uint32 { @@ -1682,7 +1860,7 @@ type LoginRequest struct { func (x *LoginRequest) Reset() { *x = LoginRequest{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[25] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1695,7 +1873,7 @@ func (x *LoginRequest) String() string { func (*LoginRequest) ProtoMessage() {} func (x *LoginRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[25] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1708,7 +1886,7 @@ func (x *LoginRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LoginRequest.ProtoReflect.Descriptor instead. func (*LoginRequest) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{25} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{27} } func (x *LoginRequest) GetClusterUri() string { @@ -1768,7 +1946,7 @@ type AddClusterRequest struct { func (x *AddClusterRequest) Reset() { *x = AddClusterRequest{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[26] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1781,7 +1959,7 @@ func (x *AddClusterRequest) String() string { func (*AddClusterRequest) ProtoMessage() {} func (x *AddClusterRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[26] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1794,7 +1972,7 @@ func (x *AddClusterRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use AddClusterRequest.ProtoReflect.Descriptor instead. func (*AddClusterRequest) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{26} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{28} } func (x *AddClusterRequest) GetName() string { @@ -1813,7 +1991,7 @@ type ListClustersRequest struct { func (x *ListClustersRequest) Reset() { *x = ListClustersRequest{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[27] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1826,7 +2004,7 @@ func (x *ListClustersRequest) String() string { func (*ListClustersRequest) ProtoMessage() {} func (x *ListClustersRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[27] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1839,7 +2017,7 @@ func (x *ListClustersRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListClustersRequest.ProtoReflect.Descriptor instead. func (*ListClustersRequest) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{27} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{29} } type ListClustersResponse struct { @@ -1853,7 +2031,7 @@ type ListClustersResponse struct { func (x *ListClustersResponse) Reset() { *x = ListClustersResponse{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[28] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1866,7 +2044,7 @@ func (x *ListClustersResponse) String() string { func (*ListClustersResponse) ProtoMessage() {} func (x *ListClustersResponse) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[28] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1879,7 +2057,7 @@ func (x *ListClustersResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListClustersResponse.ProtoReflect.Descriptor instead. func (*ListClustersResponse) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{28} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{30} } func (x *ListClustersResponse) GetClusters() []*Cluster { @@ -1906,7 +2084,7 @@ type GetDatabasesRequest struct { func (x *GetDatabasesRequest) Reset() { *x = GetDatabasesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[29] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1919,7 +2097,7 @@ func (x *GetDatabasesRequest) String() string { func (*GetDatabasesRequest) ProtoMessage() {} func (x *GetDatabasesRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[29] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1932,7 +2110,7 @@ func (x *GetDatabasesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDatabasesRequest.ProtoReflect.Descriptor instead. func (*GetDatabasesRequest) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{29} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{31} } func (x *GetDatabasesRequest) GetClusterUri() string { @@ -1995,7 +2173,7 @@ type ListLeafClustersRequest struct { func (x *ListLeafClustersRequest) Reset() { *x = ListLeafClustersRequest{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[30] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2008,7 +2186,7 @@ func (x *ListLeafClustersRequest) String() string { func (*ListLeafClustersRequest) ProtoMessage() {} func (x *ListLeafClustersRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[30] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2021,7 +2199,7 @@ func (x *ListLeafClustersRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListLeafClustersRequest.ProtoReflect.Descriptor instead. func (*ListLeafClustersRequest) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{30} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{32} } func (x *ListLeafClustersRequest) GetClusterUri() string { @@ -2042,7 +2220,7 @@ type ListDatabaseUsersRequest struct { func (x *ListDatabaseUsersRequest) Reset() { *x = ListDatabaseUsersRequest{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[31] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2055,7 +2233,7 @@ func (x *ListDatabaseUsersRequest) String() string { func (*ListDatabaseUsersRequest) ProtoMessage() {} func (x *ListDatabaseUsersRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[31] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2068,7 +2246,7 @@ func (x *ListDatabaseUsersRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListDatabaseUsersRequest.ProtoReflect.Descriptor instead. func (*ListDatabaseUsersRequest) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{31} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{33} } func (x *ListDatabaseUsersRequest) GetDbUri() string { @@ -2089,7 +2267,7 @@ type ListDatabaseUsersResponse struct { func (x *ListDatabaseUsersResponse) Reset() { *x = ListDatabaseUsersResponse{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[32] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2102,7 +2280,7 @@ func (x *ListDatabaseUsersResponse) String() string { func (*ListDatabaseUsersResponse) ProtoMessage() {} func (x *ListDatabaseUsersResponse) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[32] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2115,7 +2293,7 @@ func (x *ListDatabaseUsersResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListDatabaseUsersResponse.ProtoReflect.Descriptor instead. func (*ListDatabaseUsersResponse) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{32} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{34} } func (x *ListDatabaseUsersResponse) GetUsers() []string { @@ -2139,7 +2317,7 @@ type CreateGatewayRequest struct { func (x *CreateGatewayRequest) Reset() { *x = CreateGatewayRequest{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[33] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2152,7 +2330,7 @@ func (x *CreateGatewayRequest) String() string { func (*CreateGatewayRequest) ProtoMessage() {} func (x *CreateGatewayRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[33] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2165,7 +2343,7 @@ func (x *CreateGatewayRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateGatewayRequest.ProtoReflect.Descriptor instead. func (*CreateGatewayRequest) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{33} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{35} } func (x *CreateGatewayRequest) GetTargetUri() string { @@ -2205,7 +2383,7 @@ type ListGatewaysRequest struct { func (x *ListGatewaysRequest) Reset() { *x = ListGatewaysRequest{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[34] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2218,7 +2396,7 @@ func (x *ListGatewaysRequest) String() string { func (*ListGatewaysRequest) ProtoMessage() {} func (x *ListGatewaysRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[34] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2231,7 +2409,7 @@ func (x *ListGatewaysRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListGatewaysRequest.ProtoReflect.Descriptor instead. func (*ListGatewaysRequest) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{34} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{36} } type ListGatewaysResponse struct { @@ -2245,7 +2423,7 @@ type ListGatewaysResponse struct { func (x *ListGatewaysResponse) Reset() { *x = ListGatewaysResponse{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[35] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2258,7 +2436,7 @@ func (x *ListGatewaysResponse) String() string { func (*ListGatewaysResponse) ProtoMessage() {} func (x *ListGatewaysResponse) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[35] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2271,7 +2449,7 @@ func (x *ListGatewaysResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListGatewaysResponse.ProtoReflect.Descriptor instead. func (*ListGatewaysResponse) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{35} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{37} } func (x *ListGatewaysResponse) GetGateways() []*Gateway { @@ -2292,7 +2470,7 @@ type RemoveGatewayRequest struct { func (x *RemoveGatewayRequest) Reset() { *x = RemoveGatewayRequest{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[36] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2305,7 +2483,7 @@ func (x *RemoveGatewayRequest) String() string { func (*RemoveGatewayRequest) ProtoMessage() {} func (x *RemoveGatewayRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[36] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2318,7 +2496,7 @@ func (x *RemoveGatewayRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RemoveGatewayRequest.ProtoReflect.Descriptor instead. func (*RemoveGatewayRequest) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{36} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{38} } func (x *RemoveGatewayRequest) GetGatewayUri() string { @@ -2340,7 +2518,7 @@ type SetGatewayTargetSubresourceNameRequest struct { func (x *SetGatewayTargetSubresourceNameRequest) Reset() { *x = SetGatewayTargetSubresourceNameRequest{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[37] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2353,7 +2531,7 @@ func (x *SetGatewayTargetSubresourceNameRequest) String() string { func (*SetGatewayTargetSubresourceNameRequest) ProtoMessage() {} func (x *SetGatewayTargetSubresourceNameRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[37] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2366,7 +2544,7 @@ func (x *SetGatewayTargetSubresourceNameRequest) ProtoReflect() protoreflect.Mes // Deprecated: Use SetGatewayTargetSubresourceNameRequest.ProtoReflect.Descriptor instead. func (*SetGatewayTargetSubresourceNameRequest) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{37} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{39} } func (x *SetGatewayTargetSubresourceNameRequest) GetGatewayUri() string { @@ -2395,7 +2573,7 @@ type SetGatewayLocalPortRequest struct { func (x *SetGatewayLocalPortRequest) Reset() { *x = SetGatewayLocalPortRequest{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[38] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2408,7 +2586,7 @@ func (x *SetGatewayLocalPortRequest) String() string { func (*SetGatewayLocalPortRequest) ProtoMessage() {} func (x *SetGatewayLocalPortRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[38] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2421,7 +2599,7 @@ func (x *SetGatewayLocalPortRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SetGatewayLocalPortRequest.ProtoReflect.Descriptor instead. func (*SetGatewayLocalPortRequest) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{38} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{40} } func (x *SetGatewayLocalPortRequest) GetGatewayUri() string { @@ -2455,7 +2633,7 @@ type GetServersRequest struct { func (x *GetServersRequest) Reset() { *x = GetServersRequest{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[39] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2468,7 +2646,7 @@ func (x *GetServersRequest) String() string { func (*GetServersRequest) ProtoMessage() {} func (x *GetServersRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[39] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2481,7 +2659,7 @@ func (x *GetServersRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetServersRequest.ProtoReflect.Descriptor instead. func (*GetServersRequest) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{39} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{41} } func (x *GetServersRequest) GetClusterUri() string { @@ -2546,7 +2724,7 @@ type GetServersResponse struct { func (x *GetServersResponse) Reset() { *x = GetServersResponse{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[40] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2559,7 +2737,7 @@ func (x *GetServersResponse) String() string { func (*GetServersResponse) ProtoMessage() {} func (x *GetServersResponse) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[40] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2572,7 +2750,7 @@ func (x *GetServersResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetServersResponse.ProtoReflect.Descriptor instead. func (*GetServersResponse) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{40} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{42} } func (x *GetServersResponse) GetAgents() []*Server { @@ -2609,7 +2787,7 @@ type GetDatabasesResponse struct { func (x *GetDatabasesResponse) Reset() { *x = GetDatabasesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[41] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2622,7 +2800,7 @@ func (x *GetDatabasesResponse) String() string { func (*GetDatabasesResponse) ProtoMessage() {} func (x *GetDatabasesResponse) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[41] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2635,7 +2813,7 @@ func (x *GetDatabasesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDatabasesResponse.ProtoReflect.Descriptor instead. func (*GetDatabasesResponse) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{41} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{43} } func (x *GetDatabasesResponse) GetAgents() []*Database { @@ -2676,7 +2854,7 @@ type GetKubesRequest struct { func (x *GetKubesRequest) Reset() { *x = GetKubesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[42] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2689,7 +2867,7 @@ func (x *GetKubesRequest) String() string { func (*GetKubesRequest) ProtoMessage() {} func (x *GetKubesRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[42] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2702,7 +2880,7 @@ func (x *GetKubesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetKubesRequest.ProtoReflect.Descriptor instead. func (*GetKubesRequest) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{42} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{44} } func (x *GetKubesRequest) GetClusterUri() string { @@ -2767,7 +2945,7 @@ type GetKubesResponse struct { func (x *GetKubesResponse) Reset() { *x = GetKubesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[43] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2780,7 +2958,7 @@ func (x *GetKubesResponse) String() string { func (*GetKubesResponse) ProtoMessage() {} func (x *GetKubesResponse) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[43] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2793,7 +2971,7 @@ func (x *GetKubesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetKubesResponse.ProtoReflect.Descriptor instead. func (*GetKubesResponse) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{43} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{45} } func (x *GetKubesResponse) GetAgents() []*Kube { @@ -2834,7 +3012,7 @@ type GetAppsRequest struct { func (x *GetAppsRequest) Reset() { *x = GetAppsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[44] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2847,7 +3025,7 @@ func (x *GetAppsRequest) String() string { func (*GetAppsRequest) ProtoMessage() {} func (x *GetAppsRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[44] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2860,7 +3038,7 @@ func (x *GetAppsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAppsRequest.ProtoReflect.Descriptor instead. func (*GetAppsRequest) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{44} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{46} } func (x *GetAppsRequest) GetClusterUri() string { @@ -2925,7 +3103,7 @@ type GetAppsResponse struct { func (x *GetAppsResponse) Reset() { *x = GetAppsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[45] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2938,7 +3116,7 @@ func (x *GetAppsResponse) String() string { func (*GetAppsResponse) ProtoMessage() {} func (x *GetAppsResponse) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[45] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2951,7 +3129,7 @@ func (x *GetAppsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAppsResponse.ProtoReflect.Descriptor instead. func (*GetAppsResponse) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{45} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{47} } func (x *GetAppsResponse) GetAgents() []*App { @@ -2986,7 +3164,7 @@ type GetAuthSettingsRequest struct { func (x *GetAuthSettingsRequest) Reset() { *x = GetAuthSettingsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[46] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2999,7 +3177,7 @@ func (x *GetAuthSettingsRequest) String() string { func (*GetAuthSettingsRequest) ProtoMessage() {} func (x *GetAuthSettingsRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[46] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3012,7 +3190,7 @@ func (x *GetAuthSettingsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAuthSettingsRequest.ProtoReflect.Descriptor instead. func (*GetAuthSettingsRequest) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{46} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{48} } func (x *GetAuthSettingsRequest) GetClusterUri() string { @@ -3033,7 +3211,7 @@ type UpdateTshdEventsServerAddressRequest struct { func (x *UpdateTshdEventsServerAddressRequest) Reset() { *x = UpdateTshdEventsServerAddressRequest{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[47] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3046,7 +3224,7 @@ func (x *UpdateTshdEventsServerAddressRequest) String() string { func (*UpdateTshdEventsServerAddressRequest) ProtoMessage() {} func (x *UpdateTshdEventsServerAddressRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[47] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3059,7 +3237,7 @@ func (x *UpdateTshdEventsServerAddressRequest) ProtoReflect() protoreflect.Messa // Deprecated: Use UpdateTshdEventsServerAddressRequest.ProtoReflect.Descriptor instead. func (*UpdateTshdEventsServerAddressRequest) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{47} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{49} } func (x *UpdateTshdEventsServerAddressRequest) GetAddress() string { @@ -3078,7 +3256,7 @@ type UpdateTshdEventsServerAddressResponse struct { func (x *UpdateTshdEventsServerAddressResponse) Reset() { *x = UpdateTshdEventsServerAddressResponse{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[48] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3091,7 +3269,7 @@ func (x *UpdateTshdEventsServerAddressResponse) String() string { func (*UpdateTshdEventsServerAddressResponse) ProtoMessage() {} func (x *UpdateTshdEventsServerAddressResponse) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[48] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[50] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3104,7 +3282,7 @@ func (x *UpdateTshdEventsServerAddressResponse) ProtoReflect() protoreflect.Mess // Deprecated: Use UpdateTshdEventsServerAddressResponse.ProtoReflect.Descriptor instead. func (*UpdateTshdEventsServerAddressResponse) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{48} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{50} } type UpdateHeadlessAuthenticationStateRequest struct { @@ -3120,7 +3298,7 @@ type UpdateHeadlessAuthenticationStateRequest struct { func (x *UpdateHeadlessAuthenticationStateRequest) Reset() { *x = UpdateHeadlessAuthenticationStateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[49] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3133,7 +3311,7 @@ func (x *UpdateHeadlessAuthenticationStateRequest) String() string { func (*UpdateHeadlessAuthenticationStateRequest) ProtoMessage() {} func (x *UpdateHeadlessAuthenticationStateRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[49] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3146,7 +3324,7 @@ func (x *UpdateHeadlessAuthenticationStateRequest) ProtoReflect() protoreflect.M // Deprecated: Use UpdateHeadlessAuthenticationStateRequest.ProtoReflect.Descriptor instead. func (*UpdateHeadlessAuthenticationStateRequest) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{49} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{51} } func (x *UpdateHeadlessAuthenticationStateRequest) GetRootClusterUri() string { @@ -3179,7 +3357,7 @@ type UpdateHeadlessAuthenticationStateResponse struct { func (x *UpdateHeadlessAuthenticationStateResponse) Reset() { *x = UpdateHeadlessAuthenticationStateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[50] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3192,7 +3370,7 @@ func (x *UpdateHeadlessAuthenticationStateResponse) String() string { func (*UpdateHeadlessAuthenticationStateResponse) ProtoMessage() {} func (x *UpdateHeadlessAuthenticationStateResponse) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[50] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3205,7 +3383,7 @@ func (x *UpdateHeadlessAuthenticationStateResponse) ProtoReflect() protoreflect. // Deprecated: Use UpdateHeadlessAuthenticationStateResponse.ProtoReflect.Descriptor instead. func (*UpdateHeadlessAuthenticationStateResponse) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{50} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{52} } type CreateConnectMyComputerRoleRequest struct { @@ -3219,7 +3397,7 @@ type CreateConnectMyComputerRoleRequest struct { func (x *CreateConnectMyComputerRoleRequest) Reset() { *x = CreateConnectMyComputerRoleRequest{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[51] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3232,7 +3410,7 @@ func (x *CreateConnectMyComputerRoleRequest) String() string { func (*CreateConnectMyComputerRoleRequest) ProtoMessage() {} func (x *CreateConnectMyComputerRoleRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[51] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[53] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3245,7 +3423,7 @@ func (x *CreateConnectMyComputerRoleRequest) ProtoReflect() protoreflect.Message // Deprecated: Use CreateConnectMyComputerRoleRequest.ProtoReflect.Descriptor instead. func (*CreateConnectMyComputerRoleRequest) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{51} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{53} } func (x *CreateConnectMyComputerRoleRequest) GetRootClusterUri() string { @@ -3268,7 +3446,7 @@ type CreateConnectMyComputerRoleResponse struct { func (x *CreateConnectMyComputerRoleResponse) Reset() { *x = CreateConnectMyComputerRoleResponse{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[52] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3281,7 +3459,7 @@ func (x *CreateConnectMyComputerRoleResponse) String() string { func (*CreateConnectMyComputerRoleResponse) ProtoMessage() {} func (x *CreateConnectMyComputerRoleResponse) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[52] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[54] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3294,7 +3472,7 @@ func (x *CreateConnectMyComputerRoleResponse) ProtoReflect() protoreflect.Messag // Deprecated: Use CreateConnectMyComputerRoleResponse.ProtoReflect.Descriptor instead. func (*CreateConnectMyComputerRoleResponse) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{52} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{54} } func (x *CreateConnectMyComputerRoleResponse) GetCertsReloaded() bool { @@ -3315,7 +3493,7 @@ type CreateConnectMyComputerNodeTokenRequest struct { func (x *CreateConnectMyComputerNodeTokenRequest) Reset() { *x = CreateConnectMyComputerNodeTokenRequest{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[53] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3328,7 +3506,7 @@ func (x *CreateConnectMyComputerNodeTokenRequest) String() string { func (*CreateConnectMyComputerNodeTokenRequest) ProtoMessage() {} func (x *CreateConnectMyComputerNodeTokenRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[53] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[55] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3341,7 +3519,7 @@ func (x *CreateConnectMyComputerNodeTokenRequest) ProtoReflect() protoreflect.Me // Deprecated: Use CreateConnectMyComputerNodeTokenRequest.ProtoReflect.Descriptor instead. func (*CreateConnectMyComputerNodeTokenRequest) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{53} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{55} } func (x *CreateConnectMyComputerNodeTokenRequest) GetRootClusterUri() string { @@ -3362,7 +3540,7 @@ type CreateConnectMyComputerNodeTokenResponse struct { func (x *CreateConnectMyComputerNodeTokenResponse) Reset() { *x = CreateConnectMyComputerNodeTokenResponse{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[54] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3375,7 +3553,7 @@ func (x *CreateConnectMyComputerNodeTokenResponse) String() string { func (*CreateConnectMyComputerNodeTokenResponse) ProtoMessage() {} func (x *CreateConnectMyComputerNodeTokenResponse) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[54] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[56] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3388,7 +3566,7 @@ func (x *CreateConnectMyComputerNodeTokenResponse) ProtoReflect() protoreflect.M // Deprecated: Use CreateConnectMyComputerNodeTokenResponse.ProtoReflect.Descriptor instead. func (*CreateConnectMyComputerNodeTokenResponse) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{54} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{56} } func (x *CreateConnectMyComputerNodeTokenResponse) GetToken() string { @@ -3409,7 +3587,7 @@ type WaitForConnectMyComputerNodeJoinRequest struct { func (x *WaitForConnectMyComputerNodeJoinRequest) Reset() { *x = WaitForConnectMyComputerNodeJoinRequest{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[55] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3422,7 +3600,7 @@ func (x *WaitForConnectMyComputerNodeJoinRequest) String() string { func (*WaitForConnectMyComputerNodeJoinRequest) ProtoMessage() {} func (x *WaitForConnectMyComputerNodeJoinRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[55] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[57] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3435,7 +3613,7 @@ func (x *WaitForConnectMyComputerNodeJoinRequest) ProtoReflect() protoreflect.Me // Deprecated: Use WaitForConnectMyComputerNodeJoinRequest.ProtoReflect.Descriptor instead. func (*WaitForConnectMyComputerNodeJoinRequest) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{55} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{57} } func (x *WaitForConnectMyComputerNodeJoinRequest) GetRootClusterUri() string { @@ -3456,7 +3634,7 @@ type WaitForConnectMyComputerNodeJoinResponse struct { func (x *WaitForConnectMyComputerNodeJoinResponse) Reset() { *x = WaitForConnectMyComputerNodeJoinResponse{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[56] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3469,7 +3647,7 @@ func (x *WaitForConnectMyComputerNodeJoinResponse) String() string { func (*WaitForConnectMyComputerNodeJoinResponse) ProtoMessage() {} func (x *WaitForConnectMyComputerNodeJoinResponse) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[56] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[58] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3482,7 +3660,7 @@ func (x *WaitForConnectMyComputerNodeJoinResponse) ProtoReflect() protoreflect.M // Deprecated: Use WaitForConnectMyComputerNodeJoinResponse.ProtoReflect.Descriptor instead. func (*WaitForConnectMyComputerNodeJoinResponse) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{56} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{58} } func (x *WaitForConnectMyComputerNodeJoinResponse) GetServer() *Server { @@ -3503,7 +3681,7 @@ type DeleteConnectMyComputerNodeRequest struct { func (x *DeleteConnectMyComputerNodeRequest) Reset() { *x = DeleteConnectMyComputerNodeRequest{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[57] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3516,7 +3694,7 @@ func (x *DeleteConnectMyComputerNodeRequest) String() string { func (*DeleteConnectMyComputerNodeRequest) ProtoMessage() {} func (x *DeleteConnectMyComputerNodeRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[57] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[59] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3529,7 +3707,7 @@ func (x *DeleteConnectMyComputerNodeRequest) ProtoReflect() protoreflect.Message // Deprecated: Use DeleteConnectMyComputerNodeRequest.ProtoReflect.Descriptor instead. func (*DeleteConnectMyComputerNodeRequest) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{57} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{59} } func (x *DeleteConnectMyComputerNodeRequest) GetRootClusterUri() string { @@ -3548,7 +3726,7 @@ type DeleteConnectMyComputerNodeResponse struct { func (x *DeleteConnectMyComputerNodeResponse) Reset() { *x = DeleteConnectMyComputerNodeResponse{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[58] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3561,7 +3739,7 @@ func (x *DeleteConnectMyComputerNodeResponse) String() string { func (*DeleteConnectMyComputerNodeResponse) ProtoMessage() {} func (x *DeleteConnectMyComputerNodeResponse) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[58] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[60] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3574,7 +3752,7 @@ func (x *DeleteConnectMyComputerNodeResponse) ProtoReflect() protoreflect.Messag // Deprecated: Use DeleteConnectMyComputerNodeResponse.ProtoReflect.Descriptor instead. func (*DeleteConnectMyComputerNodeResponse) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{58} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{60} } type GetConnectMyComputerNodeNameRequest struct { @@ -3588,7 +3766,7 @@ type GetConnectMyComputerNodeNameRequest struct { func (x *GetConnectMyComputerNodeNameRequest) Reset() { *x = GetConnectMyComputerNodeNameRequest{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[59] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3601,7 +3779,7 @@ func (x *GetConnectMyComputerNodeNameRequest) String() string { func (*GetConnectMyComputerNodeNameRequest) ProtoMessage() {} func (x *GetConnectMyComputerNodeNameRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[59] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[61] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3614,7 +3792,7 @@ func (x *GetConnectMyComputerNodeNameRequest) ProtoReflect() protoreflect.Messag // Deprecated: Use GetConnectMyComputerNodeNameRequest.ProtoReflect.Descriptor instead. func (*GetConnectMyComputerNodeNameRequest) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{59} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{61} } func (x *GetConnectMyComputerNodeNameRequest) GetRootClusterUri() string { @@ -3635,7 +3813,7 @@ type GetConnectMyComputerNodeNameResponse struct { func (x *GetConnectMyComputerNodeNameResponse) Reset() { *x = GetConnectMyComputerNodeNameResponse{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[60] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3648,7 +3826,7 @@ func (x *GetConnectMyComputerNodeNameResponse) String() string { func (*GetConnectMyComputerNodeNameResponse) ProtoMessage() {} func (x *GetConnectMyComputerNodeNameResponse) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[60] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[62] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3661,7 +3839,7 @@ func (x *GetConnectMyComputerNodeNameResponse) ProtoReflect() protoreflect.Messa // Deprecated: Use GetConnectMyComputerNodeNameResponse.ProtoReflect.Descriptor instead. func (*GetConnectMyComputerNodeNameResponse) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{60} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{62} } func (x *GetConnectMyComputerNodeNameResponse) GetName() string { @@ -3703,7 +3881,7 @@ type ListUnifiedResourcesRequest struct { func (x *ListUnifiedResourcesRequest) Reset() { *x = ListUnifiedResourcesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[61] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[63] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3716,7 +3894,7 @@ func (x *ListUnifiedResourcesRequest) String() string { func (*ListUnifiedResourcesRequest) ProtoMessage() {} func (x *ListUnifiedResourcesRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[61] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[63] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3729,7 +3907,7 @@ func (x *ListUnifiedResourcesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListUnifiedResourcesRequest.ProtoReflect.Descriptor instead. func (*ListUnifiedResourcesRequest) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{61} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{63} } func (x *ListUnifiedResourcesRequest) GetClusterUri() string { @@ -3816,7 +3994,7 @@ type SortBy struct { func (x *SortBy) Reset() { *x = SortBy{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[62] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[64] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3829,7 +4007,7 @@ func (x *SortBy) String() string { func (*SortBy) ProtoMessage() {} func (x *SortBy) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[62] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[64] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3842,7 +4020,7 @@ func (x *SortBy) ProtoReflect() protoreflect.Message { // Deprecated: Use SortBy.ProtoReflect.Descriptor instead. func (*SortBy) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{62} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{64} } func (x *SortBy) GetIsDesc() bool { @@ -3873,7 +4051,7 @@ type ListUnifiedResourcesResponse struct { func (x *ListUnifiedResourcesResponse) Reset() { *x = ListUnifiedResourcesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[63] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[65] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3886,7 +4064,7 @@ func (x *ListUnifiedResourcesResponse) String() string { func (*ListUnifiedResourcesResponse) ProtoMessage() {} func (x *ListUnifiedResourcesResponse) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[63] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[65] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3899,7 +4077,7 @@ func (x *ListUnifiedResourcesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListUnifiedResourcesResponse.ProtoReflect.Descriptor instead. func (*ListUnifiedResourcesResponse) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{63} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{65} } func (x *ListUnifiedResourcesResponse) GetResources() []*PaginatedResource { @@ -3934,7 +4112,7 @@ type PaginatedResource struct { func (x *PaginatedResource) Reset() { *x = PaginatedResource{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[64] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[66] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3947,7 +4125,7 @@ func (x *PaginatedResource) String() string { func (*PaginatedResource) ProtoMessage() {} func (x *PaginatedResource) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[64] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[66] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3960,7 +4138,7 @@ func (x *PaginatedResource) ProtoReflect() protoreflect.Message { // Deprecated: Use PaginatedResource.ProtoReflect.Descriptor instead. func (*PaginatedResource) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{64} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{66} } func (m *PaginatedResource) GetResource() isPaginatedResource_Resource { @@ -4044,7 +4222,7 @@ type GetUserPreferencesRequest struct { func (x *GetUserPreferencesRequest) Reset() { *x = GetUserPreferencesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[65] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[67] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4057,7 +4235,7 @@ func (x *GetUserPreferencesRequest) String() string { func (*GetUserPreferencesRequest) ProtoMessage() {} func (x *GetUserPreferencesRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[65] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[67] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4070,7 +4248,7 @@ func (x *GetUserPreferencesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetUserPreferencesRequest.ProtoReflect.Descriptor instead. func (*GetUserPreferencesRequest) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{65} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{67} } func (x *GetUserPreferencesRequest) GetClusterUri() string { @@ -4091,7 +4269,7 @@ type GetUserPreferencesResponse struct { func (x *GetUserPreferencesResponse) Reset() { *x = GetUserPreferencesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[66] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[68] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4104,7 +4282,7 @@ func (x *GetUserPreferencesResponse) String() string { func (*GetUserPreferencesResponse) ProtoMessage() {} func (x *GetUserPreferencesResponse) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[66] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[68] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4117,7 +4295,7 @@ func (x *GetUserPreferencesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetUserPreferencesResponse.ProtoReflect.Descriptor instead. func (*GetUserPreferencesResponse) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{66} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{68} } func (x *GetUserPreferencesResponse) GetUserPreferences() *UserPreferences { @@ -4139,7 +4317,7 @@ type UpdateUserPreferencesRequest struct { func (x *UpdateUserPreferencesRequest) Reset() { *x = UpdateUserPreferencesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[67] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[69] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4152,7 +4330,7 @@ func (x *UpdateUserPreferencesRequest) String() string { func (*UpdateUserPreferencesRequest) ProtoMessage() {} func (x *UpdateUserPreferencesRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[67] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[69] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4165,7 +4343,7 @@ func (x *UpdateUserPreferencesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateUserPreferencesRequest.ProtoReflect.Descriptor instead. func (*UpdateUserPreferencesRequest) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{67} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{69} } func (x *UpdateUserPreferencesRequest) GetClusterUri() string { @@ -4193,7 +4371,7 @@ type UpdateUserPreferencesResponse struct { func (x *UpdateUserPreferencesResponse) Reset() { *x = UpdateUserPreferencesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[68] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[70] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4206,7 +4384,7 @@ func (x *UpdateUserPreferencesResponse) String() string { func (*UpdateUserPreferencesResponse) ProtoMessage() {} func (x *UpdateUserPreferencesResponse) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[68] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[70] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4219,7 +4397,7 @@ func (x *UpdateUserPreferencesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateUserPreferencesResponse.ProtoReflect.Descriptor instead. func (*UpdateUserPreferencesResponse) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{68} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{70} } func (x *UpdateUserPreferencesResponse) GetUserPreferences() *UserPreferences { @@ -4243,7 +4421,7 @@ type UserPreferences struct { func (x *UserPreferences) Reset() { *x = UserPreferences{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[69] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[71] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4256,7 +4434,7 @@ func (x *UserPreferences) String() string { func (*UserPreferences) ProtoMessage() {} func (x *UserPreferences) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[69] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[71] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4269,7 +4447,7 @@ func (x *UserPreferences) ProtoReflect() protoreflect.Message { // Deprecated: Use UserPreferences.ProtoReflect.Descriptor instead. func (*UserPreferences) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{69} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{71} } func (x *UserPreferences) GetClusterPreferences() *v11.ClusterUserPreferences { @@ -4301,7 +4479,7 @@ type AuthenticateWebDeviceRequest struct { func (x *AuthenticateWebDeviceRequest) Reset() { *x = AuthenticateWebDeviceRequest{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[70] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[72] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4314,7 +4492,7 @@ func (x *AuthenticateWebDeviceRequest) String() string { func (*AuthenticateWebDeviceRequest) ProtoMessage() {} func (x *AuthenticateWebDeviceRequest) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[70] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[72] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4327,7 +4505,7 @@ func (x *AuthenticateWebDeviceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use AuthenticateWebDeviceRequest.ProtoReflect.Descriptor instead. func (*AuthenticateWebDeviceRequest) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{70} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{72} } func (x *AuthenticateWebDeviceRequest) GetDeviceWebToken() *v12.DeviceWebToken { @@ -4358,7 +4536,7 @@ type AuthenticateWebDeviceResponse struct { func (x *AuthenticateWebDeviceResponse) Reset() { *x = AuthenticateWebDeviceResponse{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[71] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[73] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4371,7 +4549,7 @@ func (x *AuthenticateWebDeviceResponse) String() string { func (*AuthenticateWebDeviceResponse) ProtoMessage() {} func (x *AuthenticateWebDeviceResponse) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[71] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[73] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4384,7 +4562,7 @@ func (x *AuthenticateWebDeviceResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use AuthenticateWebDeviceResponse.ProtoReflect.Descriptor instead. func (*AuthenticateWebDeviceResponse) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{71} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{73} } func (x *AuthenticateWebDeviceResponse) GetConfirmationToken() *v12.DeviceConfirmationToken { @@ -4407,7 +4585,7 @@ type LoginPasswordlessRequest_LoginPasswordlessRequestInit struct { func (x *LoginPasswordlessRequest_LoginPasswordlessRequestInit) Reset() { *x = LoginPasswordlessRequest_LoginPasswordlessRequestInit{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[72] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[74] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4420,7 +4598,7 @@ func (x *LoginPasswordlessRequest_LoginPasswordlessRequestInit) String() string func (*LoginPasswordlessRequest_LoginPasswordlessRequestInit) ProtoMessage() {} func (x *LoginPasswordlessRequest_LoginPasswordlessRequestInit) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[72] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[74] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4433,7 +4611,7 @@ func (x *LoginPasswordlessRequest_LoginPasswordlessRequestInit) ProtoReflect() p // Deprecated: Use LoginPasswordlessRequest_LoginPasswordlessRequestInit.ProtoReflect.Descriptor instead. func (*LoginPasswordlessRequest_LoginPasswordlessRequestInit) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{22, 0} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{24, 0} } func (x *LoginPasswordlessRequest_LoginPasswordlessRequestInit) GetClusterUri() string { @@ -4456,7 +4634,7 @@ type LoginPasswordlessRequest_LoginPasswordlessPINResponse struct { func (x *LoginPasswordlessRequest_LoginPasswordlessPINResponse) Reset() { *x = LoginPasswordlessRequest_LoginPasswordlessPINResponse{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[73] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[75] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4469,7 +4647,7 @@ func (x *LoginPasswordlessRequest_LoginPasswordlessPINResponse) String() string func (*LoginPasswordlessRequest_LoginPasswordlessPINResponse) ProtoMessage() {} func (x *LoginPasswordlessRequest_LoginPasswordlessPINResponse) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[73] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[75] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4482,7 +4660,7 @@ func (x *LoginPasswordlessRequest_LoginPasswordlessPINResponse) ProtoReflect() p // Deprecated: Use LoginPasswordlessRequest_LoginPasswordlessPINResponse.ProtoReflect.Descriptor instead. func (*LoginPasswordlessRequest_LoginPasswordlessPINResponse) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{22, 1} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{24, 1} } func (x *LoginPasswordlessRequest_LoginPasswordlessPINResponse) GetPin() string { @@ -4507,7 +4685,7 @@ type LoginPasswordlessRequest_LoginPasswordlessCredentialResponse struct { func (x *LoginPasswordlessRequest_LoginPasswordlessCredentialResponse) Reset() { *x = LoginPasswordlessRequest_LoginPasswordlessCredentialResponse{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[74] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[76] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4520,7 +4698,7 @@ func (x *LoginPasswordlessRequest_LoginPasswordlessCredentialResponse) String() func (*LoginPasswordlessRequest_LoginPasswordlessCredentialResponse) ProtoMessage() {} func (x *LoginPasswordlessRequest_LoginPasswordlessCredentialResponse) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[74] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[76] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4533,7 +4711,7 @@ func (x *LoginPasswordlessRequest_LoginPasswordlessCredentialResponse) ProtoRefl // Deprecated: Use LoginPasswordlessRequest_LoginPasswordlessCredentialResponse.ProtoReflect.Descriptor instead. func (*LoginPasswordlessRequest_LoginPasswordlessCredentialResponse) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{22, 2} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{24, 2} } func (x *LoginPasswordlessRequest_LoginPasswordlessCredentialResponse) GetIndex() int64 { @@ -4560,7 +4738,7 @@ type LoginRequest_LocalParams struct { func (x *LoginRequest_LocalParams) Reset() { *x = LoginRequest_LocalParams{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[75] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[77] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4573,7 +4751,7 @@ func (x *LoginRequest_LocalParams) String() string { func (*LoginRequest_LocalParams) ProtoMessage() {} func (x *LoginRequest_LocalParams) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[75] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[77] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4586,7 +4764,7 @@ func (x *LoginRequest_LocalParams) ProtoReflect() protoreflect.Message { // Deprecated: Use LoginRequest_LocalParams.ProtoReflect.Descriptor instead. func (*LoginRequest_LocalParams) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{25, 0} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{27, 0} } func (x *LoginRequest_LocalParams) GetUser() string { @@ -4625,7 +4803,7 @@ type LoginRequest_SsoParams struct { func (x *LoginRequest_SsoParams) Reset() { *x = LoginRequest_SsoParams{} if protoimpl.UnsafeEnabled { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[76] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[78] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4638,7 +4816,7 @@ func (x *LoginRequest_SsoParams) String() string { func (*LoginRequest_SsoParams) ProtoMessage() {} func (x *LoginRequest_SsoParams) ProtoReflect() protoreflect.Message { - mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[76] + mi := &file_teleport_lib_teleterm_v1_service_proto_msgTypes[78] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4651,7 +4829,7 @@ func (x *LoginRequest_SsoParams) ProtoReflect() protoreflect.Message { // Deprecated: Use LoginRequest_SsoParams.ProtoReflect.Descriptor instead. func (*LoginRequest_SsoParams) Descriptor() ([]byte, []int) { - return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{25, 1} + return file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP(), []int{27, 1} } func (x *LoginRequest_SsoParams) GetProviderType() string { @@ -4870,106 +5048,198 @@ var file_teleport_lib_teleterm_v1_service_proto_rawDesc = []byte{ 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x0b, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x22, 0x2c, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, - 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, - 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xad, 0x01, 0x0a, 0x19, 0x4c, 0x6f, 0x67, 0x69, 0x6e, - 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x06, 0x70, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, - 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, - 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x50, 0x72, 0x6f, 0x6d, - 0x70, 0x74, 0x52, 0x06, 0x70, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x12, 0x4a, 0x0a, 0x0b, 0x63, 0x72, - 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x28, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x22, 0x9b, 0x04, 0x0a, 0x18, 0x4c, 0x6f, 0x67, 0x69, 0x6e, - 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x65, 0x0a, 0x04, 0x69, 0x6e, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x4f, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, - 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, - 0x69, 0x6e, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x61, 0x73, 0x73, 0x77, - 0x6f, 0x72, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x6e, - 0x69, 0x74, 0x48, 0x00, 0x52, 0x04, 0x69, 0x6e, 0x69, 0x74, 0x12, 0x63, 0x0a, 0x03, 0x70, 0x69, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4f, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, - 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, - 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, - 0x6c, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x6f, 0x67, 0x69, - 0x6e, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x50, 0x49, 0x4e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x03, 0x70, 0x69, 0x6e, 0x12, - 0x78, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x56, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, + 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x22, 0x84, 0x03, 0x0a, 0x1e, 0x4c, 0x69, 0x73, + 0x74, 0x4b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x55, 0x72, 0x69, 0x12, 0x23, 0x0a, 0x0d, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x65, 0x78, 0x74, 0x5f, + 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6e, 0x65, 0x78, 0x74, 0x4b, + 0x65, 0x79, 0x12, 0x31, 0x0a, 0x14, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, + 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x13, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, 0x72, 0x65, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, + 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, + 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x12, 0x2d, + 0x0a, 0x13, 0x75, 0x73, 0x65, 0x5f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x61, 0x73, 0x5f, + 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x75, 0x73, 0x65, + 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x41, 0x73, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x2d, 0x0a, + 0x12, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x5f, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6b, 0x75, 0x62, 0x65, 0x72, + 0x6e, 0x65, 0x74, 0x65, 0x73, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x31, 0x0a, 0x14, + 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x6b, 0x75, 0x62, 0x65, + 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, + 0x82, 0x01, 0x0a, 0x1f, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, + 0x65, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, + 0x31, 0x2e, 0x4b, 0x75, 0x62, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x09, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x65, 0x78, + 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6e, 0x65, 0x78, + 0x74, 0x4b, 0x65, 0x79, 0x22, 0x2c, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, + 0x6d, 0x65, 0x22, 0xad, 0x01, 0x0a, 0x19, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x61, 0x73, 0x73, + 0x77, 0x6f, 0x72, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x44, 0x0a, 0x06, 0x70, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x2c, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, + 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x73, 0x73, + 0x77, 0x6f, 0x72, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x50, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x52, 0x06, + 0x70, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x12, 0x4a, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x61, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x74, 0x65, + 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, + 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, + 0x6c, 0x73, 0x22, 0x9b, 0x04, 0x0a, 0x18, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x61, 0x73, 0x73, + 0x77, 0x6f, 0x72, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x65, 0x0a, 0x04, 0x69, 0x6e, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4f, 0x2e, + 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x61, + 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x6c, + 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x69, 0x74, 0x48, 0x00, + 0x52, 0x04, 0x69, 0x6e, 0x69, 0x74, 0x12, 0x63, 0x0a, 0x03, 0x70, 0x69, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x4f, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x61, 0x73, - 0x73, 0x77, 0x6f, 0x72, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x63, - 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x1a, 0x3f, 0x0a, 0x1c, 0x4c, 0x6f, 0x67, - 0x69, 0x6e, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x69, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x55, 0x72, 0x69, 0x1a, 0x30, 0x0a, 0x1c, 0x4c, 0x6f, - 0x67, 0x69, 0x6e, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x50, - 0x49, 0x4e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x6e, 0x1a, 0x3b, 0x0a, 0x23, - 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x6c, 0x65, 0x73, - 0x73, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x42, 0x09, 0x0a, 0x07, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x22, 0xdf, 0x01, 0x0a, 0x13, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x66, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, - 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x6f, 0x67, - 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, - 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4d, 0x0a, 0x09, - 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x2f, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x55, 0x72, 0x69, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, - 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x36, 0x0a, 0x14, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1e, - 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x22, 0xf7, - 0x02, 0x0a, 0x0c, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x55, 0x72, 0x69, - 0x12, 0x4a, 0x0a, 0x05, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x32, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, + 0x73, 0x77, 0x6f, 0x72, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x50, 0x49, 0x4e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x03, 0x70, 0x69, 0x6e, 0x12, 0x78, 0x0a, 0x0a, 0x63, + 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x56, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x48, 0x00, 0x52, 0x05, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x12, 0x44, 0x0a, 0x03, - 0x73, 0x73, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x74, 0x65, 0x6c, 0x65, + 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, + 0x64, 0x6c, 0x65, 0x73, 0x73, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x1a, 0x3f, 0x0a, 0x1c, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x61, + 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x49, 0x6e, 0x69, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x5f, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x55, 0x72, 0x69, 0x1a, 0x30, 0x0a, 0x1c, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, + 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x50, 0x49, 0x4e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x6e, 0x1a, 0x3b, 0x0a, 0x23, 0x4c, 0x6f, 0x67, 0x69, + 0x6e, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x43, 0x72, 0x65, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x42, 0x09, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x22, 0xdf, 0x01, 0x0a, 0x13, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, + 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x6f, 0x67, 0x69, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x16, + 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, + 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4d, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x74, 0x65, + 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x66, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x64, 0x69, + 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x55, 0x72, 0x69, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x4a, 0x04, 0x08, 0x03, + 0x10, 0x04, 0x22, 0x36, 0x0a, 0x14, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, + 0x65, 0x72, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x22, 0xf7, 0x02, 0x0a, 0x0c, 0x4c, + 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x55, 0x72, 0x69, 0x12, 0x4a, 0x0a, 0x05, + 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x74, 0x65, + 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x48, + 0x00, 0x52, 0x05, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x12, 0x44, 0x0a, 0x03, 0x73, 0x73, 0x6f, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, + 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x73, + 0x6f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x48, 0x00, 0x52, 0x03, 0x73, 0x73, 0x6f, 0x1a, 0x53, + 0x0a, 0x0b, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x12, 0x0a, + 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, + 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x14, 0x0a, + 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x1a, 0x55, 0x0a, 0x09, 0x53, 0x73, 0x6f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x08, 0x0a, 0x06, 0x70, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x22, 0x27, 0x0a, 0x11, 0x41, 0x64, 0x64, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x15, 0x0a, + 0x13, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x22, 0x55, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x08, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, + 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x52, 0x08, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x22, 0xd8, 0x01, 0x0a, 0x13, + 0x47, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x75, + 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x55, 0x72, 0x69, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, + 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x62, 0x79, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x72, 0x74, 0x42, 0x79, 0x12, 0x26, + 0x0a, 0x0f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x61, 0x73, 0x5f, 0x72, 0x6f, 0x6c, 0x65, + 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x41, + 0x73, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x22, 0x3a, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x65, + 0x61, 0x66, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x69, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x55, + 0x72, 0x69, 0x22, 0x31, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, + 0x73, 0x65, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x15, + 0x0a, 0x06, 0x64, 0x62, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x64, 0x62, 0x55, 0x72, 0x69, 0x22, 0x31, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x61, 0x74, + 0x61, 0x62, 0x61, 0x73, 0x65, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x22, 0xad, 0x01, 0x0a, 0x14, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x72, 0x69, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x72, 0x69, + 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x55, 0x73, 0x65, + 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x6f, 0x72, 0x74, + 0x12, 0x36, 0x0a, 0x17, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x73, 0x75, 0x62, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x15, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, 0x75, 0x62, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x15, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, + 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, + 0x55, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x08, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, - 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x2e, 0x53, 0x73, 0x6f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x48, 0x00, 0x52, 0x03, 0x73, - 0x73, 0x6f, 0x1a, 0x53, 0x0a, 0x0b, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, - 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x1a, 0x55, 0x0a, 0x09, 0x53, 0x73, 0x6f, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x08, - 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x27, 0x0a, 0x11, 0x41, 0x64, 0x64, 0x43, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x22, 0x15, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x55, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, - 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x3d, 0x0a, 0x08, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, - 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x08, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x22, - 0xd8, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, + 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x08, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x22, 0x37, 0x0a, 0x14, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, + 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, + 0x0a, 0x0b, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x55, 0x72, 0x69, 0x22, + 0x81, 0x01, 0x0a, 0x26, 0x53, 0x65, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x54, 0x61, + 0x72, 0x67, 0x65, 0x74, 0x53, 0x75, 0x62, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x67, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x55, 0x72, 0x69, 0x12, 0x36, 0x0a, 0x17, 0x74, + 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x73, 0x75, 0x62, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x74, 0x61, + 0x72, 0x67, 0x65, 0x74, 0x53, 0x75, 0x62, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x22, 0x5c, 0x0a, 0x1a, 0x53, 0x65, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x75, 0x72, 0x69, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x55, + 0x72, 0x69, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x70, 0x6f, 0x72, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x6f, 0x72, + 0x74, 0x22, 0xd6, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x55, 0x72, 0x69, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, @@ -4982,678 +5252,628 @@ var file_teleport_lib_teleterm_v1_service_proto_rawDesc = []byte{ 0x74, 0x5f, 0x62, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x72, 0x74, 0x42, 0x79, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x61, 0x73, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x41, 0x73, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x22, 0x3a, 0x0a, 0x17, 0x4c, 0x69, - 0x73, 0x74, 0x4c, 0x65, 0x61, 0x66, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x5f, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x55, 0x72, 0x69, 0x22, 0x31, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x61, - 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x15, 0x0a, 0x06, 0x64, 0x62, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x64, 0x62, 0x55, 0x72, 0x69, 0x22, 0x31, 0x0a, 0x19, 0x4c, 0x69, 0x73, - 0x74, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73, 0x22, 0xad, 0x01, 0x0a, - 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, - 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x55, 0x72, 0x69, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x75, - 0x73, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x70, - 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, - 0x50, 0x6f, 0x72, 0x74, 0x12, 0x36, 0x0a, 0x17, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x73, - 0x75, 0x62, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, 0x75, 0x62, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x15, 0x0a, 0x13, - 0x4c, 0x69, 0x73, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x22, 0x55, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x08, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, - 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x52, 0x08, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x22, 0x37, 0x0a, 0x14, 0x52, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x75, 0x72, - 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x55, 0x72, 0x69, 0x22, 0x81, 0x01, 0x0a, 0x26, 0x53, 0x65, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, 0x75, 0x62, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, - 0x0a, 0x0b, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x55, 0x72, 0x69, 0x12, - 0x36, 0x0a, 0x17, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x73, 0x75, 0x62, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x15, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, 0x75, 0x62, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x5c, 0x0a, 0x1a, 0x53, 0x65, 0x74, 0x47, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x5f, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x67, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x55, 0x72, 0x69, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, - 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, - 0x6c, 0x50, 0x6f, 0x72, 0x74, 0x22, 0xd6, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x55, 0x72, 0x69, 0x12, 0x14, 0x0a, 0x05, - 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x69, 0x6d, - 0x69, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4b, 0x65, 0x79, 0x12, - 0x16, 0x0a, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x17, 0x0a, - 0x07, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x62, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x73, 0x6f, 0x72, 0x74, 0x42, 0x79, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x5f, 0x61, 0x73, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x41, 0x73, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x22, 0x8c, - 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x06, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x06, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x73, 0x12, + 0x72, 0x63, 0x68, 0x41, 0x73, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x22, 0x8c, 0x01, 0x0a, 0x12, 0x47, + 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x38, 0x0a, 0x06, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x20, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, + 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x52, 0x06, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x74, + 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4b, 0x65, 0x79, 0x22, 0x90, 0x01, 0x0a, 0x14, 0x47, 0x65, + 0x74, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x06, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, + 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, + 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x06, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x1f, + 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, + 0x1b, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4b, 0x65, 0x79, 0x22, 0xd4, 0x01, 0x0a, + 0x0f, 0x47, 0x65, 0x74, 0x4b, 0x75, 0x62, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x69, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x55, 0x72, + 0x69, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x14, 0x0a, 0x05, + 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, + 0x72, 0x79, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x62, 0x79, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x72, 0x74, 0x42, 0x79, 0x12, 0x26, 0x0a, 0x0f, 0x73, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x61, 0x73, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x41, 0x73, 0x52, 0x6f, + 0x6c, 0x65, 0x73, 0x22, 0x88, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x4b, 0x75, 0x62, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x06, 0x61, 0x67, 0x65, 0x6e, + 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, + 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x75, 0x62, 0x65, 0x52, 0x06, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x73, + 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4b, 0x65, 0x79, 0x22, 0xd3, + 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x69, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x55, + 0x72, 0x69, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x14, 0x0a, + 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, + 0x65, 0x72, 0x79, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x62, 0x79, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x72, 0x74, 0x42, 0x79, 0x12, 0x26, 0x0a, 0x0f, + 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x61, 0x73, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x41, 0x73, 0x52, + 0x6f, 0x6c, 0x65, 0x73, 0x22, 0x86, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x06, 0x61, 0x67, 0x65, 0x6e, + 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, + 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x52, 0x06, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4b, 0x65, 0x79, 0x22, 0x90, 0x01, - 0x0a, 0x14, 0x47, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x06, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4b, 0x65, 0x79, 0x22, 0x39, 0x0a, + 0x16, 0x47, 0x65, 0x74, 0x41, 0x75, 0x74, 0x68, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x55, 0x72, 0x69, 0x22, 0x40, 0x0a, 0x24, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x54, 0x73, 0x68, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x53, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x27, 0x0a, 0x25, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x54, 0x73, 0x68, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x53, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0xdf, 0x01, 0x0a, 0x28, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x65, + 0x61, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x28, 0x0a, 0x10, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x5f, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x6f, 0x6f, 0x74, + 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x55, 0x72, 0x69, 0x12, 0x3c, 0x0a, 0x1a, 0x68, 0x65, + 0x61, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x18, + 0x68, 0x65, 0x61, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x4b, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, + 0x76, 0x31, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x41, 0x75, 0x74, 0x68, 0x65, + 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x2b, 0x0a, 0x29, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, + 0x65, 0x61, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x4e, 0x0a, 0x22, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x4d, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x52, 0x6f, 0x6c, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x72, 0x6f, 0x6f, 0x74, + 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0e, 0x72, 0x6f, 0x6f, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x55, + 0x72, 0x69, 0x22, 0x4c, 0x0a, 0x23, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x4d, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x52, 0x6f, 0x6c, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x65, 0x72, + 0x74, 0x73, 0x5f, 0x72, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0d, 0x63, 0x65, 0x72, 0x74, 0x73, 0x52, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, + 0x22, 0x53, 0x0a, 0x27, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x4d, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x72, + 0x6f, 0x6f, 0x74, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x69, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x6f, 0x6f, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x55, 0x72, 0x69, 0x22, 0x4e, 0x0a, 0x28, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4d, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, + 0x4e, 0x6f, 0x64, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x52, 0x06, 0x6c, + 0x61, 0x62, 0x65, 0x6c, 0x73, 0x22, 0x53, 0x0a, 0x27, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, + 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4d, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, + 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x28, 0x0a, 0x10, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x5f, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x6f, 0x6f, 0x74, + 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x55, 0x72, 0x69, 0x22, 0x64, 0x0a, 0x28, 0x57, 0x61, + 0x69, 0x74, 0x46, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4d, 0x79, 0x43, 0x6f, + 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, - 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x06, 0x61, 0x67, 0x65, 0x6e, - 0x74, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x6b, 0x65, 0x79, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4b, 0x65, 0x79, - 0x22, 0xd4, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x4b, 0x75, 0x62, 0x65, 0x73, 0x52, 0x65, 0x71, + 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x22, 0x4e, 0x0a, 0x22, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x4d, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0e, 0x72, 0x6f, 0x6f, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x55, 0x72, 0x69, + 0x22, 0x25, 0x0a, 0x23, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x4d, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4f, 0x0a, 0x23, 0x47, 0x65, 0x74, 0x43, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4d, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x4e, + 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, + 0x0a, 0x10, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x75, + 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x6f, 0x6f, 0x74, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x55, 0x72, 0x69, 0x22, 0x3a, 0x0a, 0x24, 0x47, 0x65, 0x74, 0x43, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4d, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, + 0x4e, 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xea, 0x02, 0x0a, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x6e, 0x69, + 0x66, 0x69, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x55, 0x72, 0x69, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x62, - 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x72, 0x74, 0x42, 0x79, 0x12, - 0x26, 0x0a, 0x0f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x61, 0x73, 0x5f, 0x72, 0x6f, 0x6c, - 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x41, 0x73, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x22, 0x88, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x4b, - 0x75, 0x62, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x06, - 0x61, 0x67, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x74, - 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x75, 0x62, 0x65, 0x52, 0x06, 0x61, 0x67, - 0x65, 0x6e, 0x74, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x6b, - 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4b, - 0x65, 0x79, 0x22, 0xd3, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x5f, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x55, 0x72, 0x69, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1b, 0x0a, 0x09, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x6f, 0x72, 0x74, 0x5f, - 0x62, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x72, 0x74, 0x42, 0x79, - 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x61, 0x73, 0x5f, 0x72, 0x6f, - 0x6c, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x41, 0x73, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x22, 0x86, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, - 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x06, - 0x61, 0x67, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x74, - 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x52, 0x06, 0x61, 0x67, 0x65, - 0x6e, 0x74, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x6b, 0x65, - 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4b, 0x65, - 0x79, 0x22, 0x39, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x41, 0x75, 0x74, 0x68, 0x53, 0x65, 0x74, 0x74, - 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x55, 0x72, 0x69, 0x22, 0x40, 0x0a, 0x24, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x73, 0x68, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, - 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x27, - 0x0a, 0x25, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x73, 0x68, 0x64, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xdf, 0x01, 0x0a, 0x28, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x48, 0x65, 0x61, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, - 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, - 0x72, 0x6f, 0x6f, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x55, 0x72, 0x69, 0x12, 0x3c, - 0x0a, 0x1a, 0x68, 0x65, 0x61, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x65, - 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x18, 0x68, 0x65, 0x61, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x41, 0x75, 0x74, 0x68, - 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x4b, 0x0a, 0x05, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x74, 0x65, + 0x65, 0x72, 0x55, 0x72, 0x69, 0x12, 0x14, 0x0a, 0x05, 0x6b, 0x69, 0x6e, 0x64, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x6b, 0x69, 0x6e, 0x64, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6c, + 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, + 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x14, + 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, + 0x75, 0x65, 0x72, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x39, 0x0a, 0x07, + 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x62, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, + 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x42, 0x79, 0x52, + 0x06, 0x73, 0x6f, 0x72, 0x74, 0x42, 0x79, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x5f, 0x61, 0x73, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x41, 0x73, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12, + 0x1f, 0x0a, 0x0b, 0x70, 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x70, 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x4f, 0x6e, 0x6c, 0x79, + 0x12, 0x2f, 0x0a, 0x13, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x69, + 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x22, 0x37, 0x0a, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x42, 0x79, 0x12, 0x17, 0x0a, 0x07, 0x69, + 0x73, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, + 0x44, 0x65, 0x73, 0x63, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x22, 0x84, 0x01, 0x0a, 0x1c, 0x4c, + 0x69, 0x73, 0x74, 0x55, 0x6e, 0x69, 0x66, 0x69, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x09, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, + 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, + 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x09, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x6b, + 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6e, 0x65, 0x78, 0x74, 0x4b, 0x65, + 0x79, 0x22, 0xb1, 0x02, 0x0a, 0x11, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x40, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, + 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, 0x6c, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, + 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x48, 0x00, 0x52, + 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x06, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x74, 0x65, 0x6c, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, + 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x48, 0x00, 0x52, 0x06, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x34, 0x0a, 0x04, 0x6b, 0x75, 0x62, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, + 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4b, + 0x75, 0x62, 0x65, 0x48, 0x00, 0x52, 0x04, 0x6b, 0x75, 0x62, 0x65, 0x12, 0x31, 0x0a, 0x03, 0x61, + 0x70, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, + 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x48, 0x00, 0x52, 0x03, 0x61, 0x70, 0x70, 0x12, 0x29, + 0x0a, 0x10, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x0a, 0x0a, 0x08, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x3c, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, + 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x75, 0x72, + 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x55, 0x72, 0x69, 0x22, 0x72, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, + 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x54, 0x0a, 0x10, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x41, - 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x2b, 0x0a, 0x29, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x48, 0x65, 0x61, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x41, 0x75, 0x74, 0x68, 0x65, - 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4e, 0x0a, 0x22, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4d, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, - 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x10, - 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x69, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x6f, 0x6f, 0x74, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x55, 0x72, 0x69, 0x22, 0x4c, 0x0a, 0x23, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4d, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, - 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, - 0x0e, 0x63, 0x65, 0x72, 0x74, 0x73, 0x5f, 0x72, 0x65, 0x6c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x63, 0x65, 0x72, 0x74, 0x73, 0x52, 0x65, 0x6c, 0x6f, - 0x61, 0x64, 0x65, 0x64, 0x22, 0x53, 0x0a, 0x27, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4d, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x4e, - 0x6f, 0x64, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x66, 0x65, + 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x0f, 0x75, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x66, + 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x22, 0x95, 0x01, 0x0a, 0x1c, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x55, 0x72, 0x69, 0x12, 0x54, 0x0a, 0x10, 0x75, 0x73, 0x65, + 0x72, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, + 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x55, + 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x0f, + 0x75, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x22, + 0x75, 0x0a, 0x1d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, + 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x54, 0x0a, 0x10, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, + 0x6e, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x74, 0x65, 0x6c, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x0f, 0x75, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x66, 0x65, + 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x22, 0xf2, 0x01, 0x0a, 0x0f, 0x55, 0x73, 0x65, 0x72, 0x50, + 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x64, 0x0a, 0x13, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x55, 0x73, 0x65, + 0x72, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x12, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, + 0x12, 0x79, 0x0a, 0x1c, 0x75, 0x6e, 0x69, 0x66, 0x69, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x69, 0x66, 0x69, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, + 0x1a, 0x75, 0x6e, 0x69, 0x66, 0x69, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x22, 0x9b, 0x01, 0x0a, 0x1c, + 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x57, 0x65, 0x62, 0x44, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x51, 0x0a, 0x10, + 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x77, 0x65, 0x62, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x76, 0x31, + 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x57, 0x65, 0x62, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, + 0x0e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x57, 0x65, 0x62, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x28, 0x0a, 0x10, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, - 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x6f, 0x6f, 0x74, 0x43, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x55, 0x72, 0x69, 0x22, 0x4e, 0x0a, 0x28, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4d, 0x79, 0x43, 0x6f, 0x6d, 0x70, - 0x75, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x4a, 0x04, 0x08, 0x02, 0x10, - 0x03, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x22, 0x53, 0x0a, 0x27, 0x57, 0x61, 0x69, - 0x74, 0x46, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4d, 0x79, 0x43, 0x6f, 0x6d, - 0x70, 0x75, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, - 0x72, 0x6f, 0x6f, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x55, 0x72, 0x69, 0x22, 0x64, - 0x0a, 0x28, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, - 0x4d, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x4a, 0x6f, - 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x06, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x74, 0x65, 0x6c, - 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x06, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x22, 0x4e, 0x0a, 0x22, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4d, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x4e, - 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x72, 0x6f, - 0x6f, 0x74, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x6f, 0x6f, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x55, 0x72, 0x69, 0x22, 0x25, 0x0a, 0x23, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4d, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x4e, - 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4f, 0x0a, 0x23, 0x47, - 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4d, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, - 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x6f, - 0x6f, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x55, 0x72, 0x69, 0x22, 0x3a, 0x0a, 0x24, - 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4d, 0x79, 0x43, 0x6f, 0x6d, 0x70, - 0x75, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xea, 0x02, 0x0a, 0x1b, 0x4c, 0x69, 0x73, - 0x74, 0x55, 0x6e, 0x69, 0x66, 0x69, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x55, 0x72, 0x69, 0x12, 0x14, 0x0a, 0x05, 0x6b, 0x69, 0x6e, - 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x6b, 0x69, 0x6e, 0x64, 0x73, 0x12, - 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, - 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x6b, - 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x4b, - 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x12, 0x39, 0x0a, 0x07, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x62, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x20, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, - 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x72, - 0x74, 0x42, 0x79, 0x52, 0x06, 0x73, 0x6f, 0x72, 0x74, 0x42, 0x79, 0x12, 0x26, 0x0a, 0x0f, 0x73, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x61, 0x73, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x41, 0x73, 0x52, 0x6f, - 0x6c, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x5f, 0x6f, 0x6e, - 0x6c, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x70, 0x69, 0x6e, 0x6e, 0x65, 0x64, - 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x2f, 0x0a, 0x13, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x12, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x37, 0x0a, 0x06, 0x53, 0x6f, 0x72, 0x74, 0x42, 0x79, 0x12, - 0x17, 0x0a, 0x07, 0x69, 0x73, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x06, 0x69, 0x73, 0x44, 0x65, 0x73, 0x63, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x69, 0x65, 0x6c, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x22, 0x84, - 0x01, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x6e, 0x69, 0x66, 0x69, 0x65, 0x64, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x49, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, - 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, - 0x67, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, - 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x65, - 0x78, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6e, 0x65, - 0x78, 0x74, 0x4b, 0x65, 0x79, 0x22, 0xb1, 0x02, 0x0a, 0x11, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, - 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x40, 0x0a, 0x08, 0x64, - 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, - 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, - 0x65, 0x48, 0x00, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x3a, 0x0a, - 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, - 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x48, - 0x00, 0x52, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x34, 0x0a, 0x04, 0x6b, 0x75, 0x62, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, - 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, - 0x76, 0x31, 0x2e, 0x4b, 0x75, 0x62, 0x65, 0x48, 0x00, 0x52, 0x04, 0x6b, 0x75, 0x62, 0x65, 0x12, - 0x31, 0x0a, 0x03, 0x61, 0x70, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x74, - 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x70, 0x70, 0x48, 0x00, 0x52, 0x03, 0x61, - 0x70, 0x70, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x5f, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x72, 0x65, - 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x0a, 0x0a, - 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x3c, 0x0a, 0x19, 0x47, 0x65, 0x74, - 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x55, 0x72, 0x69, 0x22, 0x72, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x55, 0x73, - 0x65, 0x72, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x10, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x70, 0x72, - 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x29, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, - 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x0f, 0x75, 0x73, 0x65, 0x72, - 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x22, 0x95, 0x01, 0x0a, 0x1c, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x55, 0x72, 0x69, 0x12, 0x54, 0x0a, - 0x10, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, - 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, - 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, - 0x65, 0x73, 0x52, 0x0f, 0x75, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x73, 0x22, 0x75, 0x0a, 0x1d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, - 0x72, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x10, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x65, - 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, - 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, - 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x0f, 0x75, 0x73, 0x65, 0x72, 0x50, - 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x22, 0xf2, 0x01, 0x0a, 0x0f, 0x55, - 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x64, - 0x0a, 0x13, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x74, 0x65, - 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x70, 0x72, 0x65, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, - 0x52, 0x12, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x73, 0x12, 0x79, 0x0a, 0x1c, 0x75, 0x6e, 0x69, 0x66, 0x69, 0x65, 0x64, 0x5f, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x74, 0x65, 0x6c, - 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x75, 0x73, 0x65, 0x72, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x69, 0x66, 0x69, 0x65, 0x64, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x73, 0x52, 0x1a, 0x75, 0x6e, 0x69, 0x66, 0x69, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x22, - 0x9b, 0x01, 0x0a, 0x1c, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x57, 0x65, 0x62, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x51, 0x0a, 0x10, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x77, 0x65, 0x62, 0x5f, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x74, 0x65, 0x6c, - 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x74, 0x72, 0x75, 0x73, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x57, 0x65, 0x62, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x52, 0x0e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x57, 0x65, 0x62, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x12, 0x28, 0x0a, 0x10, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, - 0x6f, 0x6f, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x55, 0x72, 0x69, 0x22, 0x80, 0x01, - 0x0a, 0x1d, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x57, 0x65, - 0x62, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x5f, 0x0a, 0x12, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x74, 0x65, - 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x74, 0x72, 0x75, - 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x11, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x2a, 0x97, 0x01, 0x0a, 0x12, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x6c, 0x65, 0x73, - 0x73, 0x50, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x12, 0x23, 0x0a, 0x1f, 0x50, 0x41, 0x53, 0x53, 0x57, - 0x4f, 0x52, 0x44, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x4d, 0x50, 0x54, 0x5f, 0x55, - 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, - 0x50, 0x41, 0x53, 0x53, 0x57, 0x4f, 0x52, 0x44, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x50, 0x52, 0x4f, - 0x4d, 0x50, 0x54, 0x5f, 0x50, 0x49, 0x4e, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x50, 0x41, 0x53, - 0x53, 0x57, 0x4f, 0x52, 0x44, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x4d, 0x50, 0x54, - 0x5f, 0x54, 0x41, 0x50, 0x10, 0x02, 0x12, 0x22, 0x0a, 0x1e, 0x50, 0x41, 0x53, 0x53, 0x57, 0x4f, - 0x52, 0x44, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x4d, 0x50, 0x54, 0x5f, 0x43, 0x52, - 0x45, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x41, 0x4c, 0x10, 0x03, 0x2a, 0x8a, 0x01, 0x0a, 0x15, 0x46, - 0x69, 0x6c, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x23, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x54, 0x52, 0x41, - 0x4e, 0x53, 0x46, 0x45, 0x52, 0x5f, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, - 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x24, 0x0a, - 0x20, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x45, 0x52, 0x5f, 0x44, - 0x49, 0x52, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x4c, 0x4f, 0x41, - 0x44, 0x10, 0x01, 0x12, 0x22, 0x0a, 0x1e, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, - 0x53, 0x46, 0x45, 0x52, 0x5f, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, - 0x50, 0x4c, 0x4f, 0x41, 0x44, 0x10, 0x02, 0x2a, 0xcd, 0x01, 0x0a, 0x1b, 0x48, 0x65, 0x61, 0x64, - 0x6c, 0x65, 0x73, 0x73, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2d, 0x0a, 0x29, 0x48, 0x45, 0x41, 0x44, 0x4c, + 0x75, 0x72, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x6f, 0x6f, 0x74, 0x43, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x55, 0x72, 0x69, 0x22, 0x80, 0x01, 0x0a, 0x1d, 0x41, 0x75, + 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x57, 0x65, 0x62, 0x44, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5f, 0x0a, 0x12, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x74, 0x72, 0x75, 0x73, 0x74, 0x2e, 0x76, + 0x31, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x11, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x2a, 0x97, 0x01, 0x0a, + 0x12, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x50, 0x72, 0x6f, + 0x6d, 0x70, 0x74, 0x12, 0x23, 0x0a, 0x1f, 0x50, 0x41, 0x53, 0x53, 0x57, 0x4f, 0x52, 0x44, 0x4c, + 0x45, 0x53, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x4d, 0x50, 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, + 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x50, 0x41, 0x53, 0x53, + 0x57, 0x4f, 0x52, 0x44, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x4d, 0x50, 0x54, 0x5f, + 0x50, 0x49, 0x4e, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x50, 0x41, 0x53, 0x53, 0x57, 0x4f, 0x52, + 0x44, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x4d, 0x50, 0x54, 0x5f, 0x54, 0x41, 0x50, + 0x10, 0x02, 0x12, 0x22, 0x0a, 0x1e, 0x50, 0x41, 0x53, 0x53, 0x57, 0x4f, 0x52, 0x44, 0x4c, 0x45, + 0x53, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x4d, 0x50, 0x54, 0x5f, 0x43, 0x52, 0x45, 0x44, 0x45, 0x4e, + 0x54, 0x49, 0x41, 0x4c, 0x10, 0x03, 0x2a, 0x8a, 0x01, 0x0a, 0x15, 0x46, 0x69, 0x6c, 0x65, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x27, 0x0a, 0x23, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x45, + 0x52, 0x5f, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, + 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x24, 0x0a, 0x20, 0x46, 0x49, 0x4c, + 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x45, 0x52, 0x5f, 0x44, 0x49, 0x52, 0x45, 0x43, + 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x4c, 0x4f, 0x41, 0x44, 0x10, 0x01, 0x12, + 0x22, 0x0a, 0x1e, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x45, 0x52, + 0x5f, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x50, 0x4c, 0x4f, 0x41, + 0x44, 0x10, 0x02, 0x2a, 0xcd, 0x01, 0x0a, 0x1b, 0x48, 0x65, 0x61, 0x64, 0x6c, 0x65, 0x73, 0x73, + 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x12, 0x2d, 0x0a, 0x29, 0x48, 0x45, 0x41, 0x44, 0x4c, 0x45, 0x53, 0x53, 0x5f, + 0x41, 0x55, 0x54, 0x48, 0x45, 0x4e, 0x54, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, + 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, + 0x10, 0x00, 0x12, 0x29, 0x0a, 0x25, 0x48, 0x45, 0x41, 0x44, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x41, + 0x55, 0x54, 0x48, 0x45, 0x4e, 0x54, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, + 0x41, 0x54, 0x45, 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x28, 0x0a, + 0x24, 0x48, 0x45, 0x41, 0x44, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x45, 0x4e, + 0x54, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, + 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x02, 0x12, 0x2a, 0x0a, 0x26, 0x48, 0x45, 0x41, 0x44, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x45, 0x4e, 0x54, 0x49, 0x43, 0x41, 0x54, 0x49, - 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, - 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x29, 0x0a, 0x25, 0x48, 0x45, 0x41, 0x44, 0x4c, 0x45, - 0x53, 0x53, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x45, 0x4e, 0x54, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, - 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, - 0x01, 0x12, 0x28, 0x0a, 0x24, 0x48, 0x45, 0x41, 0x44, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x41, 0x55, - 0x54, 0x48, 0x45, 0x4e, 0x54, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, - 0x54, 0x45, 0x5f, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x02, 0x12, 0x2a, 0x0a, 0x26, 0x48, - 0x45, 0x41, 0x44, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x45, 0x4e, 0x54, 0x49, - 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x50, 0x50, - 0x52, 0x4f, 0x56, 0x45, 0x44, 0x10, 0x03, 0x32, 0x95, 0x28, 0x0a, 0x0f, 0x54, 0x65, 0x72, 0x6d, - 0x69, 0x6e, 0x61, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xa0, 0x01, 0x0a, 0x1d, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x73, 0x68, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, - 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x3e, 0x2e, - 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, - 0x73, 0x68, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3f, 0x2e, + 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x50, 0x50, 0x52, 0x4f, 0x56, 0x45, + 0x44, 0x10, 0x03, 0x32, 0xa6, 0x29, 0x0a, 0x0f, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x6c, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xa0, 0x01, 0x0a, 0x1d, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x54, 0x73, 0x68, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x53, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x3e, 0x2e, 0x74, 0x65, 0x6c, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, + 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x73, 0x68, 0x64, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3f, 0x2e, 0x74, 0x65, 0x6c, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, + 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x73, 0x68, 0x64, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, 0x10, 0x4c, 0x69, + 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x12, 0x2d, + 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, - 0x73, 0x68, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, - 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x6f, 0x6f, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x73, 0x12, 0x2d, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, - 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, + 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, + 0x10, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x65, 0x61, 0x66, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x73, 0x12, 0x31, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x75, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x65, 0x61, 0x66, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x73, 0x12, 0x31, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x65, 0x61, 0x66, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, - 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x44, - 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x12, 0x2d, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, + 0x74, 0x4c, 0x65, 0x61, 0x66, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, + 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x62, + 0x61, 0x73, 0x65, 0x73, 0x12, 0x2d, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, + 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, + 0x47, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, + 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x7c, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x61, 0x74, 0x61, 0x62, + 0x61, 0x73, 0x65, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x32, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, - 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7c, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x44, - 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x32, 0x2e, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x61, 0x74, 0x61, - 0x62, 0x61, 0x73, 0x65, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x33, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, - 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x67, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x73, 0x12, 0x2b, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, - 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2c, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, - 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7c, - 0x0a, 0x11, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x73, 0x12, 0x32, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, + 0x62, 0x61, 0x73, 0x65, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x67, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x12, + 0x2b, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x74, + 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7c, 0x0a, 0x11, 0x47, 0x65, + 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, + 0x32, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, - 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x79, 0x0a, 0x10, - 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x31, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, - 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, - 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x74, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x34, - 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, - 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x82, 0x01, - 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x34, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x74, 0x65, - 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x82, 0x01, 0x0a, 0x13, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x41, 0x63, 0x63, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x79, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x41, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x31, 0x2e, 0x74, + 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x32, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x74, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x34, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x41, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x35, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, - 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x69, - 0x65, 0x77, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x82, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12, - 0x34, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, - 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x62, 0x0a, 0x0a, - 0x41, 0x73, 0x73, 0x75, 0x6d, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x2b, 0x2e, 0x74, 0x65, 0x6c, - 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x73, 0x73, 0x75, 0x6d, 0x65, 0x52, 0x6f, 0x6c, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, - 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, - 0x76, 0x31, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x85, 0x01, 0x0a, 0x14, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x35, 0x2e, 0x74, 0x65, 0x6c, 0x65, - 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, - 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, + 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x36, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, - 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6d, - 0x6f, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8e, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, - 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, - 0x69, 0x73, 0x74, 0x73, 0x12, 0x38, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, - 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, - 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x75, 0x67, - 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, 0x08, 0x47, 0x65, 0x74, - 0x4b, 0x75, 0x62, 0x65, 0x73, 0x12, 0x29, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x4b, 0x75, 0x62, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2a, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, - 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4b, - 0x75, 0x62, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5e, 0x0a, 0x07, - 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x73, 0x12, 0x28, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, + 0x1a, 0x27, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, + 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x82, 0x01, 0x0a, 0x13, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x34, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, + 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x29, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, + 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x82, + 0x01, 0x0a, 0x13, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x34, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, + 0x31, 0x2e, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x74, + 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x41, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x82, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x34, 0x2e, 0x74, 0x65, + 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x35, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5c, 0x0a, 0x0a, - 0x41, 0x64, 0x64, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x2b, 0x2e, 0x74, 0x65, 0x6c, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x62, 0x0a, 0x0a, 0x41, 0x73, 0x73, 0x75, + 0x6d, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x2b, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, + 0x31, 0x2e, 0x41, 0x73, 0x73, 0x75, 0x6d, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, + 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x85, 0x01, 0x0a, + 0x14, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x35, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, + 0x2e, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x74, + 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x41, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8e, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x53, 0x75, 0x67, 0x67, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, + 0x12, 0x38, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, + 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, + 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, + 0x73, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, - 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x68, 0x0a, 0x0d, 0x52, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x2e, 0x2e, 0x74, 0x65, - 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x74, 0x65, + 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8e, 0x01, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x75, + 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x73, 0x12, 0x38, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, + 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x4b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x61, 0x74, 0x65, - 0x77, 0x61, 0x79, 0x73, 0x12, 0x2d, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, - 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, - 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x62, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x12, 0x2e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, + 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x75, 0x62, 0x65, 0x72, + 0x6e, 0x65, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x4b, 0x75, 0x62, + 0x65, 0x73, 0x12, 0x29, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, + 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x4b, 0x75, 0x62, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, + 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4b, 0x75, 0x62, 0x65, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5e, 0x0a, 0x07, 0x47, 0x65, 0x74, + 0x41, 0x70, 0x70, 0x73, 0x12, 0x28, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x65, 0x71, + 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, + 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5c, 0x0a, 0x0a, 0x41, 0x64, 0x64, + 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x2b, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, + 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x68, 0x0a, 0x0d, 0x52, 0x65, 0x6d, 0x6f, 0x76, - 0x65, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x2e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, + 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x68, 0x0a, 0x0d, 0x52, 0x65, 0x6d, 0x6f, 0x76, + 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x2e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, + 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x86, 0x01, 0x0a, 0x1f, 0x53, 0x65, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, 0x75, 0x62, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x40, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x65, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x54, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x53, 0x75, 0x62, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, - 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x6e, 0x0a, 0x13, 0x53, 0x65, - 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x6f, 0x72, - 0x74, 0x12, 0x34, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, - 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, - 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x6f, 0x72, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, - 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x6b, 0x0a, 0x0f, 0x47, 0x65, - 0x74, 0x41, 0x75, 0x74, 0x68, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x30, 0x2e, - 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x75, 0x74, 0x68, - 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x26, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x53, - 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x5c, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x43, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x2b, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, - 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x58, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x26, - 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, - 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, - 0x31, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x80, 0x01, 0x0a, 0x11, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, - 0x64, 0x6c, 0x65, 0x73, 0x73, 0x12, 0x32, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x65, 0x12, 0x6d, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, + 0x73, 0x12, 0x2d, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, + 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x2e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, + 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x62, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x12, 0x2e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, + 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x21, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, + 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x12, 0x68, 0x0a, 0x0d, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x47, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x2e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, - 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x6c, 0x65, - 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x74, 0x65, 0x6c, 0x65, - 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, - 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, - 0x72, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, - 0x30, 0x01, 0x12, 0x5a, 0x0a, 0x06, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x12, 0x27, 0x2e, 0x74, - 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x52, 0x65, + 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6f, - 0x0a, 0x0c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x2d, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x86, + 0x01, 0x0a, 0x1f, 0x53, 0x65, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x54, 0x61, 0x72, + 0x67, 0x65, 0x74, 0x53, 0x75, 0x62, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x40, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, + 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, + 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x53, 0x75, + 0x62, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, + 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, + 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x6e, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x47, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x34, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, - 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x66, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x30, 0x01, 0x12, - 0x6e, 0x0a, 0x10, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x55, 0x73, 0x61, 0x67, 0x65, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x12, 0x31, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, - 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x65, 0x70, 0x6f, 0x72, 0x74, 0x55, 0x73, 0x61, 0x67, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, + 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x47, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, + 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, + 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x6b, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x41, 0x75, + 0x74, 0x68, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x30, 0x2e, 0x74, 0x65, 0x6c, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x75, 0x74, 0x68, 0x53, 0x65, 0x74, + 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x74, + 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x53, 0x65, 0x74, 0x74, + 0x69, 0x6e, 0x67, 0x73, 0x12, 0x5c, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x12, 0x2b, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, + 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x21, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x12, 0x58, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x26, 0x2e, 0x74, 0x65, + 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, + 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x80, 0x01, 0x0a, + 0x11, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x6c, 0x65, + 0x73, 0x73, 0x12, 0x32, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, + 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, + 0x67, 0x69, 0x6e, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, - 0x31, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0xac, 0x01, 0x0a, 0x21, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x65, 0x61, 0x64, 0x6c, 0x65, - 0x73, 0x73, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x42, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x65, 0x61, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x41, - 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x43, 0x2e, 0x74, 0x65, 0x6c, 0x65, + 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x6c, + 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, + 0x5a, 0x0a, 0x06, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x12, 0x27, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, - 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x65, 0x61, 0x64, 0x6c, - 0x65, 0x73, 0x73, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x9a, - 0x01, 0x0a, 0x1b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, - 0x4d, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x3c, - 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4d, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, - 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3d, 0x2e, 0x74, - 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4d, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x52, - 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xa9, 0x01, 0x0a, 0x20, + 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, + 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6f, 0x0a, 0x0c, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x2d, 0x2e, 0x74, 0x65, + 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x66, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x74, 0x65, 0x6c, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, + 0x65, 0x72, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x30, 0x01, 0x12, 0x6e, 0x0a, 0x10, + 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x55, 0x73, 0x61, 0x67, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x12, 0x31, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, + 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x55, 0x73, 0x61, 0x67, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, + 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xac, 0x01, 0x0a, + 0x21, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x65, 0x61, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x41, + 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x12, 0x42, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, + 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x48, 0x65, 0x61, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x41, 0x75, 0x74, 0x68, + 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x43, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, + 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x65, 0x61, 0x64, 0x6c, 0x65, 0x73, 0x73, + 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x9a, 0x01, 0x0a, 0x1b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4d, 0x79, 0x43, - 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x12, 0x41, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, + 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x3c, 0x2e, 0x74, 0x65, + 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, + 0x6e, 0x65, 0x63, 0x74, 0x4d, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x52, 0x6f, + 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3d, 0x2e, 0x74, 0x65, 0x6c, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, + 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x4d, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xa9, 0x01, 0x0a, 0x20, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4d, 0x79, 0x43, 0x6f, 0x6d, 0x70, + 0x75, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x41, 0x2e, + 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4d, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, + 0x4e, 0x6f, 0x64, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x42, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4d, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, - 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x42, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, - 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4d, 0x79, 0x43, 0x6f, - 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xa9, 0x01, 0x0a, 0x20, 0x57, 0x61, 0x69, 0x74, - 0x46, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4d, 0x79, 0x43, 0x6f, 0x6d, 0x70, - 0x75, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x12, 0x41, 0x2e, 0x74, + 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0xa9, 0x01, 0x0a, 0x20, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, + 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4d, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, + 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x12, 0x41, 0x2e, 0x74, 0x65, 0x6c, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, + 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x4d, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, + 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x42, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4d, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, - 0x4e, 0x6f, 0x64, 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x42, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x61, 0x69, 0x74, 0x46, - 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4d, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, - 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x9a, 0x01, 0x0a, 0x1b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4d, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x4e, - 0x6f, 0x64, 0x65, 0x12, 0x3c, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, - 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4d, 0x79, 0x43, 0x6f, - 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x3d, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, - 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4d, 0x79, 0x43, 0x6f, 0x6d, 0x70, - 0x75, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x9d, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4d, - 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x3d, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, - 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4d, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, - 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x3e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, - 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4d, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, - 0x4e, 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x85, 0x01, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x6e, 0x69, 0x66, 0x69, 0x65, 0x64, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x35, 0x2e, 0x74, 0x65, 0x6c, 0x65, - 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, - 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x6e, 0x69, 0x66, 0x69, 0x65, 0x64, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x36, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, - 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x55, 0x6e, 0x69, 0x66, 0x69, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7f, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x55, - 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x33, + 0x4e, 0x6f, 0x64, 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x9a, 0x01, 0x0a, 0x1b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x4d, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, + 0x12, 0x3c, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, + 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4d, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, + 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3d, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, - 0x72, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, - 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x88, 0x01, 0x0a, 0x15, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x73, 0x12, 0x36, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, - 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x74, 0x65, - 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, - 0x72, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x88, 0x01, 0x0a, 0x15, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x57, 0x65, 0x62, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x36, + 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4d, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, + 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x9d, 0x01, + 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4d, 0x79, 0x43, 0x6f, + 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3d, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, - 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x57, 0x65, 0x62, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, + 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, + 0x6e, 0x65, 0x63, 0x74, 0x4d, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x4e, 0x6f, + 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3e, 0x2e, + 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x4d, 0x79, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x85, 0x01, + 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x6e, 0x69, 0x66, 0x69, 0x65, 0x64, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x35, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, - 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x57, 0x65, - 0x62, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, - 0x54, 0x5a, 0x52, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, - 0x61, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x74, 0x65, 0x6c, 0x65, - 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, - 0x6f, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x6c, 0x69, 0x62, 0x2f, 0x74, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2f, 0x76, 0x31, 0x3b, 0x74, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x72, 0x6d, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x6e, 0x69, 0x66, 0x69, 0x65, 0x64, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, + 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x6e, 0x69, + 0x66, 0x69, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7f, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, + 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x33, 0x2e, 0x74, 0x65, + 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, + 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x34, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, + 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x55, + 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x88, 0x01, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, + 0x12, 0x36, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, + 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, + 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, + 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x88, 0x01, 0x0a, 0x15, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, + 0x74, 0x65, 0x57, 0x65, 0x62, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x36, 0x2e, 0x74, 0x65, + 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, + 0x61, 0x74, 0x65, 0x57, 0x65, 0x62, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x6c, + 0x69, 0x62, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x2e, 0x76, 0x31, 0x2e, 0x41, + 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x57, 0x65, 0x62, 0x44, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x54, 0x5a, 0x52, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x61, 0x76, 0x69, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x74, + 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x6c, 0x69, 0x62, 0x2f, 0x74, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x72, 0x6d, 0x2f, 0x76, 0x31, 0x3b, 0x74, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x72, 0x6d, + 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -5669,7 +5889,7 @@ func file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP() []byte { } var file_teleport_lib_teleterm_v1_service_proto_enumTypes = make([]protoimpl.EnumInfo, 3) -var file_teleport_lib_teleterm_v1_service_proto_msgTypes = make([]protoimpl.MessageInfo, 77) +var file_teleport_lib_teleterm_v1_service_proto_msgTypes = make([]protoimpl.MessageInfo, 79) var file_teleport_lib_teleterm_v1_service_proto_goTypes = []interface{}{ (PasswordlessPrompt)(0), // 0: teleport.lib.teleterm.v1.PasswordlessPrompt (FileTransferDirection)(0), // 1: teleport.lib.teleterm.v1.FileTransferDirection @@ -5694,209 +5914,215 @@ var file_teleport_lib_teleterm_v1_service_proto_goTypes = []interface{}{ (*PromoteAccessRequestResponse)(nil), // 20: teleport.lib.teleterm.v1.PromoteAccessRequestResponse (*GetSuggestedAccessListsRequest)(nil), // 21: teleport.lib.teleterm.v1.GetSuggestedAccessListsRequest (*GetSuggestedAccessListsResponse)(nil), // 22: teleport.lib.teleterm.v1.GetSuggestedAccessListsResponse - (*CredentialInfo)(nil), // 23: teleport.lib.teleterm.v1.CredentialInfo - (*LoginPasswordlessResponse)(nil), // 24: teleport.lib.teleterm.v1.LoginPasswordlessResponse - (*LoginPasswordlessRequest)(nil), // 25: teleport.lib.teleterm.v1.LoginPasswordlessRequest - (*FileTransferRequest)(nil), // 26: teleport.lib.teleterm.v1.FileTransferRequest - (*FileTransferProgress)(nil), // 27: teleport.lib.teleterm.v1.FileTransferProgress - (*LoginRequest)(nil), // 28: teleport.lib.teleterm.v1.LoginRequest - (*AddClusterRequest)(nil), // 29: teleport.lib.teleterm.v1.AddClusterRequest - (*ListClustersRequest)(nil), // 30: teleport.lib.teleterm.v1.ListClustersRequest - (*ListClustersResponse)(nil), // 31: teleport.lib.teleterm.v1.ListClustersResponse - (*GetDatabasesRequest)(nil), // 32: teleport.lib.teleterm.v1.GetDatabasesRequest - (*ListLeafClustersRequest)(nil), // 33: teleport.lib.teleterm.v1.ListLeafClustersRequest - (*ListDatabaseUsersRequest)(nil), // 34: teleport.lib.teleterm.v1.ListDatabaseUsersRequest - (*ListDatabaseUsersResponse)(nil), // 35: teleport.lib.teleterm.v1.ListDatabaseUsersResponse - (*CreateGatewayRequest)(nil), // 36: teleport.lib.teleterm.v1.CreateGatewayRequest - (*ListGatewaysRequest)(nil), // 37: teleport.lib.teleterm.v1.ListGatewaysRequest - (*ListGatewaysResponse)(nil), // 38: teleport.lib.teleterm.v1.ListGatewaysResponse - (*RemoveGatewayRequest)(nil), // 39: teleport.lib.teleterm.v1.RemoveGatewayRequest - (*SetGatewayTargetSubresourceNameRequest)(nil), // 40: teleport.lib.teleterm.v1.SetGatewayTargetSubresourceNameRequest - (*SetGatewayLocalPortRequest)(nil), // 41: teleport.lib.teleterm.v1.SetGatewayLocalPortRequest - (*GetServersRequest)(nil), // 42: teleport.lib.teleterm.v1.GetServersRequest - (*GetServersResponse)(nil), // 43: teleport.lib.teleterm.v1.GetServersResponse - (*GetDatabasesResponse)(nil), // 44: teleport.lib.teleterm.v1.GetDatabasesResponse - (*GetKubesRequest)(nil), // 45: teleport.lib.teleterm.v1.GetKubesRequest - (*GetKubesResponse)(nil), // 46: teleport.lib.teleterm.v1.GetKubesResponse - (*GetAppsRequest)(nil), // 47: teleport.lib.teleterm.v1.GetAppsRequest - (*GetAppsResponse)(nil), // 48: teleport.lib.teleterm.v1.GetAppsResponse - (*GetAuthSettingsRequest)(nil), // 49: teleport.lib.teleterm.v1.GetAuthSettingsRequest - (*UpdateTshdEventsServerAddressRequest)(nil), // 50: teleport.lib.teleterm.v1.UpdateTshdEventsServerAddressRequest - (*UpdateTshdEventsServerAddressResponse)(nil), // 51: teleport.lib.teleterm.v1.UpdateTshdEventsServerAddressResponse - (*UpdateHeadlessAuthenticationStateRequest)(nil), // 52: teleport.lib.teleterm.v1.UpdateHeadlessAuthenticationStateRequest - (*UpdateHeadlessAuthenticationStateResponse)(nil), // 53: teleport.lib.teleterm.v1.UpdateHeadlessAuthenticationStateResponse - (*CreateConnectMyComputerRoleRequest)(nil), // 54: teleport.lib.teleterm.v1.CreateConnectMyComputerRoleRequest - (*CreateConnectMyComputerRoleResponse)(nil), // 55: teleport.lib.teleterm.v1.CreateConnectMyComputerRoleResponse - (*CreateConnectMyComputerNodeTokenRequest)(nil), // 56: teleport.lib.teleterm.v1.CreateConnectMyComputerNodeTokenRequest - (*CreateConnectMyComputerNodeTokenResponse)(nil), // 57: teleport.lib.teleterm.v1.CreateConnectMyComputerNodeTokenResponse - (*WaitForConnectMyComputerNodeJoinRequest)(nil), // 58: teleport.lib.teleterm.v1.WaitForConnectMyComputerNodeJoinRequest - (*WaitForConnectMyComputerNodeJoinResponse)(nil), // 59: teleport.lib.teleterm.v1.WaitForConnectMyComputerNodeJoinResponse - (*DeleteConnectMyComputerNodeRequest)(nil), // 60: teleport.lib.teleterm.v1.DeleteConnectMyComputerNodeRequest - (*DeleteConnectMyComputerNodeResponse)(nil), // 61: teleport.lib.teleterm.v1.DeleteConnectMyComputerNodeResponse - (*GetConnectMyComputerNodeNameRequest)(nil), // 62: teleport.lib.teleterm.v1.GetConnectMyComputerNodeNameRequest - (*GetConnectMyComputerNodeNameResponse)(nil), // 63: teleport.lib.teleterm.v1.GetConnectMyComputerNodeNameResponse - (*ListUnifiedResourcesRequest)(nil), // 64: teleport.lib.teleterm.v1.ListUnifiedResourcesRequest - (*SortBy)(nil), // 65: teleport.lib.teleterm.v1.SortBy - (*ListUnifiedResourcesResponse)(nil), // 66: teleport.lib.teleterm.v1.ListUnifiedResourcesResponse - (*PaginatedResource)(nil), // 67: teleport.lib.teleterm.v1.PaginatedResource - (*GetUserPreferencesRequest)(nil), // 68: teleport.lib.teleterm.v1.GetUserPreferencesRequest - (*GetUserPreferencesResponse)(nil), // 69: teleport.lib.teleterm.v1.GetUserPreferencesResponse - (*UpdateUserPreferencesRequest)(nil), // 70: teleport.lib.teleterm.v1.UpdateUserPreferencesRequest - (*UpdateUserPreferencesResponse)(nil), // 71: teleport.lib.teleterm.v1.UpdateUserPreferencesResponse - (*UserPreferences)(nil), // 72: teleport.lib.teleterm.v1.UserPreferences - (*AuthenticateWebDeviceRequest)(nil), // 73: teleport.lib.teleterm.v1.AuthenticateWebDeviceRequest - (*AuthenticateWebDeviceResponse)(nil), // 74: teleport.lib.teleterm.v1.AuthenticateWebDeviceResponse - (*LoginPasswordlessRequest_LoginPasswordlessRequestInit)(nil), // 75: teleport.lib.teleterm.v1.LoginPasswordlessRequest.LoginPasswordlessRequestInit - (*LoginPasswordlessRequest_LoginPasswordlessPINResponse)(nil), // 76: teleport.lib.teleterm.v1.LoginPasswordlessRequest.LoginPasswordlessPINResponse - (*LoginPasswordlessRequest_LoginPasswordlessCredentialResponse)(nil), // 77: teleport.lib.teleterm.v1.LoginPasswordlessRequest.LoginPasswordlessCredentialResponse - (*LoginRequest_LocalParams)(nil), // 78: teleport.lib.teleterm.v1.LoginRequest.LocalParams - (*LoginRequest_SsoParams)(nil), // 79: teleport.lib.teleterm.v1.LoginRequest.SsoParams - (*AccessRequest)(nil), // 80: teleport.lib.teleterm.v1.AccessRequest - (*ResourceID)(nil), // 81: teleport.lib.teleterm.v1.ResourceID - (*timestamppb.Timestamp)(nil), // 82: google.protobuf.Timestamp - (*v1.AccessList)(nil), // 83: teleport.accesslist.v1.AccessList - (*Cluster)(nil), // 84: teleport.lib.teleterm.v1.Cluster - (*Gateway)(nil), // 85: teleport.lib.teleterm.v1.Gateway - (*Server)(nil), // 86: teleport.lib.teleterm.v1.Server - (*Database)(nil), // 87: teleport.lib.teleterm.v1.Database - (*Kube)(nil), // 88: teleport.lib.teleterm.v1.Kube - (*App)(nil), // 89: teleport.lib.teleterm.v1.App - (*v11.ClusterUserPreferences)(nil), // 90: teleport.userpreferences.v1.ClusterUserPreferences - (*v11.UnifiedResourcePreferences)(nil), // 91: teleport.userpreferences.v1.UnifiedResourcePreferences - (*v12.DeviceWebToken)(nil), // 92: teleport.devicetrust.v1.DeviceWebToken - (*v12.DeviceConfirmationToken)(nil), // 93: teleport.devicetrust.v1.DeviceConfirmationToken - (*ReportUsageEventRequest)(nil), // 94: teleport.lib.teleterm.v1.ReportUsageEventRequest - (*AuthSettings)(nil), // 95: teleport.lib.teleterm.v1.AuthSettings + (*ListKubernetesResourcesRequest)(nil), // 23: teleport.lib.teleterm.v1.ListKubernetesResourcesRequest + (*ListKubernetesResourcesResponse)(nil), // 24: teleport.lib.teleterm.v1.ListKubernetesResourcesResponse + (*CredentialInfo)(nil), // 25: teleport.lib.teleterm.v1.CredentialInfo + (*LoginPasswordlessResponse)(nil), // 26: teleport.lib.teleterm.v1.LoginPasswordlessResponse + (*LoginPasswordlessRequest)(nil), // 27: teleport.lib.teleterm.v1.LoginPasswordlessRequest + (*FileTransferRequest)(nil), // 28: teleport.lib.teleterm.v1.FileTransferRequest + (*FileTransferProgress)(nil), // 29: teleport.lib.teleterm.v1.FileTransferProgress + (*LoginRequest)(nil), // 30: teleport.lib.teleterm.v1.LoginRequest + (*AddClusterRequest)(nil), // 31: teleport.lib.teleterm.v1.AddClusterRequest + (*ListClustersRequest)(nil), // 32: teleport.lib.teleterm.v1.ListClustersRequest + (*ListClustersResponse)(nil), // 33: teleport.lib.teleterm.v1.ListClustersResponse + (*GetDatabasesRequest)(nil), // 34: teleport.lib.teleterm.v1.GetDatabasesRequest + (*ListLeafClustersRequest)(nil), // 35: teleport.lib.teleterm.v1.ListLeafClustersRequest + (*ListDatabaseUsersRequest)(nil), // 36: teleport.lib.teleterm.v1.ListDatabaseUsersRequest + (*ListDatabaseUsersResponse)(nil), // 37: teleport.lib.teleterm.v1.ListDatabaseUsersResponse + (*CreateGatewayRequest)(nil), // 38: teleport.lib.teleterm.v1.CreateGatewayRequest + (*ListGatewaysRequest)(nil), // 39: teleport.lib.teleterm.v1.ListGatewaysRequest + (*ListGatewaysResponse)(nil), // 40: teleport.lib.teleterm.v1.ListGatewaysResponse + (*RemoveGatewayRequest)(nil), // 41: teleport.lib.teleterm.v1.RemoveGatewayRequest + (*SetGatewayTargetSubresourceNameRequest)(nil), // 42: teleport.lib.teleterm.v1.SetGatewayTargetSubresourceNameRequest + (*SetGatewayLocalPortRequest)(nil), // 43: teleport.lib.teleterm.v1.SetGatewayLocalPortRequest + (*GetServersRequest)(nil), // 44: teleport.lib.teleterm.v1.GetServersRequest + (*GetServersResponse)(nil), // 45: teleport.lib.teleterm.v1.GetServersResponse + (*GetDatabasesResponse)(nil), // 46: teleport.lib.teleterm.v1.GetDatabasesResponse + (*GetKubesRequest)(nil), // 47: teleport.lib.teleterm.v1.GetKubesRequest + (*GetKubesResponse)(nil), // 48: teleport.lib.teleterm.v1.GetKubesResponse + (*GetAppsRequest)(nil), // 49: teleport.lib.teleterm.v1.GetAppsRequest + (*GetAppsResponse)(nil), // 50: teleport.lib.teleterm.v1.GetAppsResponse + (*GetAuthSettingsRequest)(nil), // 51: teleport.lib.teleterm.v1.GetAuthSettingsRequest + (*UpdateTshdEventsServerAddressRequest)(nil), // 52: teleport.lib.teleterm.v1.UpdateTshdEventsServerAddressRequest + (*UpdateTshdEventsServerAddressResponse)(nil), // 53: teleport.lib.teleterm.v1.UpdateTshdEventsServerAddressResponse + (*UpdateHeadlessAuthenticationStateRequest)(nil), // 54: teleport.lib.teleterm.v1.UpdateHeadlessAuthenticationStateRequest + (*UpdateHeadlessAuthenticationStateResponse)(nil), // 55: teleport.lib.teleterm.v1.UpdateHeadlessAuthenticationStateResponse + (*CreateConnectMyComputerRoleRequest)(nil), // 56: teleport.lib.teleterm.v1.CreateConnectMyComputerRoleRequest + (*CreateConnectMyComputerRoleResponse)(nil), // 57: teleport.lib.teleterm.v1.CreateConnectMyComputerRoleResponse + (*CreateConnectMyComputerNodeTokenRequest)(nil), // 58: teleport.lib.teleterm.v1.CreateConnectMyComputerNodeTokenRequest + (*CreateConnectMyComputerNodeTokenResponse)(nil), // 59: teleport.lib.teleterm.v1.CreateConnectMyComputerNodeTokenResponse + (*WaitForConnectMyComputerNodeJoinRequest)(nil), // 60: teleport.lib.teleterm.v1.WaitForConnectMyComputerNodeJoinRequest + (*WaitForConnectMyComputerNodeJoinResponse)(nil), // 61: teleport.lib.teleterm.v1.WaitForConnectMyComputerNodeJoinResponse + (*DeleteConnectMyComputerNodeRequest)(nil), // 62: teleport.lib.teleterm.v1.DeleteConnectMyComputerNodeRequest + (*DeleteConnectMyComputerNodeResponse)(nil), // 63: teleport.lib.teleterm.v1.DeleteConnectMyComputerNodeResponse + (*GetConnectMyComputerNodeNameRequest)(nil), // 64: teleport.lib.teleterm.v1.GetConnectMyComputerNodeNameRequest + (*GetConnectMyComputerNodeNameResponse)(nil), // 65: teleport.lib.teleterm.v1.GetConnectMyComputerNodeNameResponse + (*ListUnifiedResourcesRequest)(nil), // 66: teleport.lib.teleterm.v1.ListUnifiedResourcesRequest + (*SortBy)(nil), // 67: teleport.lib.teleterm.v1.SortBy + (*ListUnifiedResourcesResponse)(nil), // 68: teleport.lib.teleterm.v1.ListUnifiedResourcesResponse + (*PaginatedResource)(nil), // 69: teleport.lib.teleterm.v1.PaginatedResource + (*GetUserPreferencesRequest)(nil), // 70: teleport.lib.teleterm.v1.GetUserPreferencesRequest + (*GetUserPreferencesResponse)(nil), // 71: teleport.lib.teleterm.v1.GetUserPreferencesResponse + (*UpdateUserPreferencesRequest)(nil), // 72: teleport.lib.teleterm.v1.UpdateUserPreferencesRequest + (*UpdateUserPreferencesResponse)(nil), // 73: teleport.lib.teleterm.v1.UpdateUserPreferencesResponse + (*UserPreferences)(nil), // 74: teleport.lib.teleterm.v1.UserPreferences + (*AuthenticateWebDeviceRequest)(nil), // 75: teleport.lib.teleterm.v1.AuthenticateWebDeviceRequest + (*AuthenticateWebDeviceResponse)(nil), // 76: teleport.lib.teleterm.v1.AuthenticateWebDeviceResponse + (*LoginPasswordlessRequest_LoginPasswordlessRequestInit)(nil), // 77: teleport.lib.teleterm.v1.LoginPasswordlessRequest.LoginPasswordlessRequestInit + (*LoginPasswordlessRequest_LoginPasswordlessPINResponse)(nil), // 78: teleport.lib.teleterm.v1.LoginPasswordlessRequest.LoginPasswordlessPINResponse + (*LoginPasswordlessRequest_LoginPasswordlessCredentialResponse)(nil), // 79: teleport.lib.teleterm.v1.LoginPasswordlessRequest.LoginPasswordlessCredentialResponse + (*LoginRequest_LocalParams)(nil), // 80: teleport.lib.teleterm.v1.LoginRequest.LocalParams + (*LoginRequest_SsoParams)(nil), // 81: teleport.lib.teleterm.v1.LoginRequest.SsoParams + (*AccessRequest)(nil), // 82: teleport.lib.teleterm.v1.AccessRequest + (*ResourceID)(nil), // 83: teleport.lib.teleterm.v1.ResourceID + (*timestamppb.Timestamp)(nil), // 84: google.protobuf.Timestamp + (*v1.AccessList)(nil), // 85: teleport.accesslist.v1.AccessList + (*KubeResource)(nil), // 86: teleport.lib.teleterm.v1.KubeResource + (*Cluster)(nil), // 87: teleport.lib.teleterm.v1.Cluster + (*Gateway)(nil), // 88: teleport.lib.teleterm.v1.Gateway + (*Server)(nil), // 89: teleport.lib.teleterm.v1.Server + (*Database)(nil), // 90: teleport.lib.teleterm.v1.Database + (*Kube)(nil), // 91: teleport.lib.teleterm.v1.Kube + (*App)(nil), // 92: teleport.lib.teleterm.v1.App + (*v11.ClusterUserPreferences)(nil), // 93: teleport.userpreferences.v1.ClusterUserPreferences + (*v11.UnifiedResourcePreferences)(nil), // 94: teleport.userpreferences.v1.UnifiedResourcePreferences + (*v12.DeviceWebToken)(nil), // 95: teleport.devicetrust.v1.DeviceWebToken + (*v12.DeviceConfirmationToken)(nil), // 96: teleport.devicetrust.v1.DeviceConfirmationToken + (*ReportUsageEventRequest)(nil), // 97: teleport.lib.teleterm.v1.ReportUsageEventRequest + (*AuthSettings)(nil), // 98: teleport.lib.teleterm.v1.AuthSettings } var file_teleport_lib_teleterm_v1_service_proto_depIdxs = []int32{ - 80, // 0: teleport.lib.teleterm.v1.GetAccessRequestResponse.request:type_name -> teleport.lib.teleterm.v1.AccessRequest - 80, // 1: teleport.lib.teleterm.v1.GetAccessRequestsResponse.requests:type_name -> teleport.lib.teleterm.v1.AccessRequest - 81, // 2: teleport.lib.teleterm.v1.CreateAccessRequestRequest.resource_ids:type_name -> teleport.lib.teleterm.v1.ResourceID - 82, // 3: teleport.lib.teleterm.v1.CreateAccessRequestRequest.assume_start_time:type_name -> google.protobuf.Timestamp - 82, // 4: teleport.lib.teleterm.v1.CreateAccessRequestRequest.max_duration:type_name -> google.protobuf.Timestamp - 82, // 5: teleport.lib.teleterm.v1.CreateAccessRequestRequest.request_ttl:type_name -> google.protobuf.Timestamp - 80, // 6: teleport.lib.teleterm.v1.CreateAccessRequestResponse.request:type_name -> teleport.lib.teleterm.v1.AccessRequest - 81, // 7: teleport.lib.teleterm.v1.GetRequestableRolesRequest.resource_ids:type_name -> teleport.lib.teleterm.v1.ResourceID - 82, // 8: teleport.lib.teleterm.v1.ReviewAccessRequestRequest.assume_start_time:type_name -> google.protobuf.Timestamp - 80, // 9: teleport.lib.teleterm.v1.ReviewAccessRequestResponse.request:type_name -> teleport.lib.teleterm.v1.AccessRequest - 80, // 10: teleport.lib.teleterm.v1.PromoteAccessRequestResponse.request:type_name -> teleport.lib.teleterm.v1.AccessRequest - 83, // 11: teleport.lib.teleterm.v1.GetSuggestedAccessListsResponse.access_lists:type_name -> teleport.accesslist.v1.AccessList - 0, // 12: teleport.lib.teleterm.v1.LoginPasswordlessResponse.prompt:type_name -> teleport.lib.teleterm.v1.PasswordlessPrompt - 23, // 13: teleport.lib.teleterm.v1.LoginPasswordlessResponse.credentials:type_name -> teleport.lib.teleterm.v1.CredentialInfo - 75, // 14: teleport.lib.teleterm.v1.LoginPasswordlessRequest.init:type_name -> teleport.lib.teleterm.v1.LoginPasswordlessRequest.LoginPasswordlessRequestInit - 76, // 15: teleport.lib.teleterm.v1.LoginPasswordlessRequest.pin:type_name -> teleport.lib.teleterm.v1.LoginPasswordlessRequest.LoginPasswordlessPINResponse - 77, // 16: teleport.lib.teleterm.v1.LoginPasswordlessRequest.credential:type_name -> teleport.lib.teleterm.v1.LoginPasswordlessRequest.LoginPasswordlessCredentialResponse - 1, // 17: teleport.lib.teleterm.v1.FileTransferRequest.direction:type_name -> teleport.lib.teleterm.v1.FileTransferDirection - 78, // 18: teleport.lib.teleterm.v1.LoginRequest.local:type_name -> teleport.lib.teleterm.v1.LoginRequest.LocalParams - 79, // 19: teleport.lib.teleterm.v1.LoginRequest.sso:type_name -> teleport.lib.teleterm.v1.LoginRequest.SsoParams - 84, // 20: teleport.lib.teleterm.v1.ListClustersResponse.clusters:type_name -> teleport.lib.teleterm.v1.Cluster - 85, // 21: teleport.lib.teleterm.v1.ListGatewaysResponse.gateways:type_name -> teleport.lib.teleterm.v1.Gateway - 86, // 22: teleport.lib.teleterm.v1.GetServersResponse.agents:type_name -> teleport.lib.teleterm.v1.Server - 87, // 23: teleport.lib.teleterm.v1.GetDatabasesResponse.agents:type_name -> teleport.lib.teleterm.v1.Database - 88, // 24: teleport.lib.teleterm.v1.GetKubesResponse.agents:type_name -> teleport.lib.teleterm.v1.Kube - 89, // 25: teleport.lib.teleterm.v1.GetAppsResponse.agents:type_name -> teleport.lib.teleterm.v1.App - 2, // 26: teleport.lib.teleterm.v1.UpdateHeadlessAuthenticationStateRequest.state:type_name -> teleport.lib.teleterm.v1.HeadlessAuthenticationState - 86, // 27: teleport.lib.teleterm.v1.WaitForConnectMyComputerNodeJoinResponse.server:type_name -> teleport.lib.teleterm.v1.Server - 65, // 28: teleport.lib.teleterm.v1.ListUnifiedResourcesRequest.sort_by:type_name -> teleport.lib.teleterm.v1.SortBy - 67, // 29: teleport.lib.teleterm.v1.ListUnifiedResourcesResponse.resources:type_name -> teleport.lib.teleterm.v1.PaginatedResource - 87, // 30: teleport.lib.teleterm.v1.PaginatedResource.database:type_name -> teleport.lib.teleterm.v1.Database - 86, // 31: teleport.lib.teleterm.v1.PaginatedResource.server:type_name -> teleport.lib.teleterm.v1.Server - 88, // 32: teleport.lib.teleterm.v1.PaginatedResource.kube:type_name -> teleport.lib.teleterm.v1.Kube - 89, // 33: teleport.lib.teleterm.v1.PaginatedResource.app:type_name -> teleport.lib.teleterm.v1.App - 72, // 34: teleport.lib.teleterm.v1.GetUserPreferencesResponse.user_preferences:type_name -> teleport.lib.teleterm.v1.UserPreferences - 72, // 35: teleport.lib.teleterm.v1.UpdateUserPreferencesRequest.user_preferences:type_name -> teleport.lib.teleterm.v1.UserPreferences - 72, // 36: teleport.lib.teleterm.v1.UpdateUserPreferencesResponse.user_preferences:type_name -> teleport.lib.teleterm.v1.UserPreferences - 90, // 37: teleport.lib.teleterm.v1.UserPreferences.cluster_preferences:type_name -> teleport.userpreferences.v1.ClusterUserPreferences - 91, // 38: teleport.lib.teleterm.v1.UserPreferences.unified_resource_preferences:type_name -> teleport.userpreferences.v1.UnifiedResourcePreferences - 92, // 39: teleport.lib.teleterm.v1.AuthenticateWebDeviceRequest.device_web_token:type_name -> teleport.devicetrust.v1.DeviceWebToken - 93, // 40: teleport.lib.teleterm.v1.AuthenticateWebDeviceResponse.confirmation_token:type_name -> teleport.devicetrust.v1.DeviceConfirmationToken - 50, // 41: teleport.lib.teleterm.v1.TerminalService.UpdateTshdEventsServerAddress:input_type -> teleport.lib.teleterm.v1.UpdateTshdEventsServerAddressRequest - 30, // 42: teleport.lib.teleterm.v1.TerminalService.ListRootClusters:input_type -> teleport.lib.teleterm.v1.ListClustersRequest - 33, // 43: teleport.lib.teleterm.v1.TerminalService.ListLeafClusters:input_type -> teleport.lib.teleterm.v1.ListLeafClustersRequest - 32, // 44: teleport.lib.teleterm.v1.TerminalService.GetDatabases:input_type -> teleport.lib.teleterm.v1.GetDatabasesRequest - 34, // 45: teleport.lib.teleterm.v1.TerminalService.ListDatabaseUsers:input_type -> teleport.lib.teleterm.v1.ListDatabaseUsersRequest - 42, // 46: teleport.lib.teleterm.v1.TerminalService.GetServers:input_type -> teleport.lib.teleterm.v1.GetServersRequest - 8, // 47: teleport.lib.teleterm.v1.TerminalService.GetAccessRequests:input_type -> teleport.lib.teleterm.v1.GetAccessRequestsRequest - 7, // 48: teleport.lib.teleterm.v1.TerminalService.GetAccessRequest:input_type -> teleport.lib.teleterm.v1.GetAccessRequestRequest - 11, // 49: teleport.lib.teleterm.v1.TerminalService.DeleteAccessRequest:input_type -> teleport.lib.teleterm.v1.DeleteAccessRequestRequest - 12, // 50: teleport.lib.teleterm.v1.TerminalService.CreateAccessRequest:input_type -> teleport.lib.teleterm.v1.CreateAccessRequestRequest - 17, // 51: teleport.lib.teleterm.v1.TerminalService.ReviewAccessRequest:input_type -> teleport.lib.teleterm.v1.ReviewAccessRequestRequest - 15, // 52: teleport.lib.teleterm.v1.TerminalService.GetRequestableRoles:input_type -> teleport.lib.teleterm.v1.GetRequestableRolesRequest - 14, // 53: teleport.lib.teleterm.v1.TerminalService.AssumeRole:input_type -> teleport.lib.teleterm.v1.AssumeRoleRequest - 19, // 54: teleport.lib.teleterm.v1.TerminalService.PromoteAccessRequest:input_type -> teleport.lib.teleterm.v1.PromoteAccessRequestRequest - 21, // 55: teleport.lib.teleterm.v1.TerminalService.GetSuggestedAccessLists:input_type -> teleport.lib.teleterm.v1.GetSuggestedAccessListsRequest - 45, // 56: teleport.lib.teleterm.v1.TerminalService.GetKubes:input_type -> teleport.lib.teleterm.v1.GetKubesRequest - 47, // 57: teleport.lib.teleterm.v1.TerminalService.GetApps:input_type -> teleport.lib.teleterm.v1.GetAppsRequest - 29, // 58: teleport.lib.teleterm.v1.TerminalService.AddCluster:input_type -> teleport.lib.teleterm.v1.AddClusterRequest - 4, // 59: teleport.lib.teleterm.v1.TerminalService.RemoveCluster:input_type -> teleport.lib.teleterm.v1.RemoveClusterRequest - 37, // 60: teleport.lib.teleterm.v1.TerminalService.ListGateways:input_type -> teleport.lib.teleterm.v1.ListGatewaysRequest - 36, // 61: teleport.lib.teleterm.v1.TerminalService.CreateGateway:input_type -> teleport.lib.teleterm.v1.CreateGatewayRequest - 39, // 62: teleport.lib.teleterm.v1.TerminalService.RemoveGateway:input_type -> teleport.lib.teleterm.v1.RemoveGatewayRequest - 40, // 63: teleport.lib.teleterm.v1.TerminalService.SetGatewayTargetSubresourceName:input_type -> teleport.lib.teleterm.v1.SetGatewayTargetSubresourceNameRequest - 41, // 64: teleport.lib.teleterm.v1.TerminalService.SetGatewayLocalPort:input_type -> teleport.lib.teleterm.v1.SetGatewayLocalPortRequest - 49, // 65: teleport.lib.teleterm.v1.TerminalService.GetAuthSettings:input_type -> teleport.lib.teleterm.v1.GetAuthSettingsRequest - 5, // 66: teleport.lib.teleterm.v1.TerminalService.GetCluster:input_type -> teleport.lib.teleterm.v1.GetClusterRequest - 28, // 67: teleport.lib.teleterm.v1.TerminalService.Login:input_type -> teleport.lib.teleterm.v1.LoginRequest - 25, // 68: teleport.lib.teleterm.v1.TerminalService.LoginPasswordless:input_type -> teleport.lib.teleterm.v1.LoginPasswordlessRequest - 6, // 69: teleport.lib.teleterm.v1.TerminalService.Logout:input_type -> teleport.lib.teleterm.v1.LogoutRequest - 26, // 70: teleport.lib.teleterm.v1.TerminalService.TransferFile:input_type -> teleport.lib.teleterm.v1.FileTransferRequest - 94, // 71: teleport.lib.teleterm.v1.TerminalService.ReportUsageEvent:input_type -> teleport.lib.teleterm.v1.ReportUsageEventRequest - 52, // 72: teleport.lib.teleterm.v1.TerminalService.UpdateHeadlessAuthenticationState:input_type -> teleport.lib.teleterm.v1.UpdateHeadlessAuthenticationStateRequest - 54, // 73: teleport.lib.teleterm.v1.TerminalService.CreateConnectMyComputerRole:input_type -> teleport.lib.teleterm.v1.CreateConnectMyComputerRoleRequest - 56, // 74: teleport.lib.teleterm.v1.TerminalService.CreateConnectMyComputerNodeToken:input_type -> teleport.lib.teleterm.v1.CreateConnectMyComputerNodeTokenRequest - 58, // 75: teleport.lib.teleterm.v1.TerminalService.WaitForConnectMyComputerNodeJoin:input_type -> teleport.lib.teleterm.v1.WaitForConnectMyComputerNodeJoinRequest - 60, // 76: teleport.lib.teleterm.v1.TerminalService.DeleteConnectMyComputerNode:input_type -> teleport.lib.teleterm.v1.DeleteConnectMyComputerNodeRequest - 62, // 77: teleport.lib.teleterm.v1.TerminalService.GetConnectMyComputerNodeName:input_type -> teleport.lib.teleterm.v1.GetConnectMyComputerNodeNameRequest - 64, // 78: teleport.lib.teleterm.v1.TerminalService.ListUnifiedResources:input_type -> teleport.lib.teleterm.v1.ListUnifiedResourcesRequest - 68, // 79: teleport.lib.teleterm.v1.TerminalService.GetUserPreferences:input_type -> teleport.lib.teleterm.v1.GetUserPreferencesRequest - 70, // 80: teleport.lib.teleterm.v1.TerminalService.UpdateUserPreferences:input_type -> teleport.lib.teleterm.v1.UpdateUserPreferencesRequest - 73, // 81: teleport.lib.teleterm.v1.TerminalService.AuthenticateWebDevice:input_type -> teleport.lib.teleterm.v1.AuthenticateWebDeviceRequest - 51, // 82: teleport.lib.teleterm.v1.TerminalService.UpdateTshdEventsServerAddress:output_type -> teleport.lib.teleterm.v1.UpdateTshdEventsServerAddressResponse - 31, // 83: teleport.lib.teleterm.v1.TerminalService.ListRootClusters:output_type -> teleport.lib.teleterm.v1.ListClustersResponse - 31, // 84: teleport.lib.teleterm.v1.TerminalService.ListLeafClusters:output_type -> teleport.lib.teleterm.v1.ListClustersResponse - 44, // 85: teleport.lib.teleterm.v1.TerminalService.GetDatabases:output_type -> teleport.lib.teleterm.v1.GetDatabasesResponse - 35, // 86: teleport.lib.teleterm.v1.TerminalService.ListDatabaseUsers:output_type -> teleport.lib.teleterm.v1.ListDatabaseUsersResponse - 43, // 87: teleport.lib.teleterm.v1.TerminalService.GetServers:output_type -> teleport.lib.teleterm.v1.GetServersResponse - 10, // 88: teleport.lib.teleterm.v1.TerminalService.GetAccessRequests:output_type -> teleport.lib.teleterm.v1.GetAccessRequestsResponse - 9, // 89: teleport.lib.teleterm.v1.TerminalService.GetAccessRequest:output_type -> teleport.lib.teleterm.v1.GetAccessRequestResponse - 3, // 90: teleport.lib.teleterm.v1.TerminalService.DeleteAccessRequest:output_type -> teleport.lib.teleterm.v1.EmptyResponse - 13, // 91: teleport.lib.teleterm.v1.TerminalService.CreateAccessRequest:output_type -> teleport.lib.teleterm.v1.CreateAccessRequestResponse - 18, // 92: teleport.lib.teleterm.v1.TerminalService.ReviewAccessRequest:output_type -> teleport.lib.teleterm.v1.ReviewAccessRequestResponse - 16, // 93: teleport.lib.teleterm.v1.TerminalService.GetRequestableRoles:output_type -> teleport.lib.teleterm.v1.GetRequestableRolesResponse - 3, // 94: teleport.lib.teleterm.v1.TerminalService.AssumeRole:output_type -> teleport.lib.teleterm.v1.EmptyResponse - 20, // 95: teleport.lib.teleterm.v1.TerminalService.PromoteAccessRequest:output_type -> teleport.lib.teleterm.v1.PromoteAccessRequestResponse - 22, // 96: teleport.lib.teleterm.v1.TerminalService.GetSuggestedAccessLists:output_type -> teleport.lib.teleterm.v1.GetSuggestedAccessListsResponse - 46, // 97: teleport.lib.teleterm.v1.TerminalService.GetKubes:output_type -> teleport.lib.teleterm.v1.GetKubesResponse - 48, // 98: teleport.lib.teleterm.v1.TerminalService.GetApps:output_type -> teleport.lib.teleterm.v1.GetAppsResponse - 84, // 99: teleport.lib.teleterm.v1.TerminalService.AddCluster:output_type -> teleport.lib.teleterm.v1.Cluster - 3, // 100: teleport.lib.teleterm.v1.TerminalService.RemoveCluster:output_type -> teleport.lib.teleterm.v1.EmptyResponse - 38, // 101: teleport.lib.teleterm.v1.TerminalService.ListGateways:output_type -> teleport.lib.teleterm.v1.ListGatewaysResponse - 85, // 102: teleport.lib.teleterm.v1.TerminalService.CreateGateway:output_type -> teleport.lib.teleterm.v1.Gateway - 3, // 103: teleport.lib.teleterm.v1.TerminalService.RemoveGateway:output_type -> teleport.lib.teleterm.v1.EmptyResponse - 85, // 104: teleport.lib.teleterm.v1.TerminalService.SetGatewayTargetSubresourceName:output_type -> teleport.lib.teleterm.v1.Gateway - 85, // 105: teleport.lib.teleterm.v1.TerminalService.SetGatewayLocalPort:output_type -> teleport.lib.teleterm.v1.Gateway - 95, // 106: teleport.lib.teleterm.v1.TerminalService.GetAuthSettings:output_type -> teleport.lib.teleterm.v1.AuthSettings - 84, // 107: teleport.lib.teleterm.v1.TerminalService.GetCluster:output_type -> teleport.lib.teleterm.v1.Cluster - 3, // 108: teleport.lib.teleterm.v1.TerminalService.Login:output_type -> teleport.lib.teleterm.v1.EmptyResponse - 24, // 109: teleport.lib.teleterm.v1.TerminalService.LoginPasswordless:output_type -> teleport.lib.teleterm.v1.LoginPasswordlessResponse - 3, // 110: teleport.lib.teleterm.v1.TerminalService.Logout:output_type -> teleport.lib.teleterm.v1.EmptyResponse - 27, // 111: teleport.lib.teleterm.v1.TerminalService.TransferFile:output_type -> teleport.lib.teleterm.v1.FileTransferProgress - 3, // 112: teleport.lib.teleterm.v1.TerminalService.ReportUsageEvent:output_type -> teleport.lib.teleterm.v1.EmptyResponse - 53, // 113: teleport.lib.teleterm.v1.TerminalService.UpdateHeadlessAuthenticationState:output_type -> teleport.lib.teleterm.v1.UpdateHeadlessAuthenticationStateResponse - 55, // 114: teleport.lib.teleterm.v1.TerminalService.CreateConnectMyComputerRole:output_type -> teleport.lib.teleterm.v1.CreateConnectMyComputerRoleResponse - 57, // 115: teleport.lib.teleterm.v1.TerminalService.CreateConnectMyComputerNodeToken:output_type -> teleport.lib.teleterm.v1.CreateConnectMyComputerNodeTokenResponse - 59, // 116: teleport.lib.teleterm.v1.TerminalService.WaitForConnectMyComputerNodeJoin:output_type -> teleport.lib.teleterm.v1.WaitForConnectMyComputerNodeJoinResponse - 61, // 117: teleport.lib.teleterm.v1.TerminalService.DeleteConnectMyComputerNode:output_type -> teleport.lib.teleterm.v1.DeleteConnectMyComputerNodeResponse - 63, // 118: teleport.lib.teleterm.v1.TerminalService.GetConnectMyComputerNodeName:output_type -> teleport.lib.teleterm.v1.GetConnectMyComputerNodeNameResponse - 66, // 119: teleport.lib.teleterm.v1.TerminalService.ListUnifiedResources:output_type -> teleport.lib.teleterm.v1.ListUnifiedResourcesResponse - 69, // 120: teleport.lib.teleterm.v1.TerminalService.GetUserPreferences:output_type -> teleport.lib.teleterm.v1.GetUserPreferencesResponse - 71, // 121: teleport.lib.teleterm.v1.TerminalService.UpdateUserPreferences:output_type -> teleport.lib.teleterm.v1.UpdateUserPreferencesResponse - 74, // 122: teleport.lib.teleterm.v1.TerminalService.AuthenticateWebDevice:output_type -> teleport.lib.teleterm.v1.AuthenticateWebDeviceResponse - 82, // [82:123] is the sub-list for method output_type - 41, // [41:82] is the sub-list for method input_type - 41, // [41:41] is the sub-list for extension type_name - 41, // [41:41] is the sub-list for extension extendee - 0, // [0:41] is the sub-list for field type_name + 82, // 0: teleport.lib.teleterm.v1.GetAccessRequestResponse.request:type_name -> teleport.lib.teleterm.v1.AccessRequest + 82, // 1: teleport.lib.teleterm.v1.GetAccessRequestsResponse.requests:type_name -> teleport.lib.teleterm.v1.AccessRequest + 83, // 2: teleport.lib.teleterm.v1.CreateAccessRequestRequest.resource_ids:type_name -> teleport.lib.teleterm.v1.ResourceID + 84, // 3: teleport.lib.teleterm.v1.CreateAccessRequestRequest.assume_start_time:type_name -> google.protobuf.Timestamp + 84, // 4: teleport.lib.teleterm.v1.CreateAccessRequestRequest.max_duration:type_name -> google.protobuf.Timestamp + 84, // 5: teleport.lib.teleterm.v1.CreateAccessRequestRequest.request_ttl:type_name -> google.protobuf.Timestamp + 82, // 6: teleport.lib.teleterm.v1.CreateAccessRequestResponse.request:type_name -> teleport.lib.teleterm.v1.AccessRequest + 83, // 7: teleport.lib.teleterm.v1.GetRequestableRolesRequest.resource_ids:type_name -> teleport.lib.teleterm.v1.ResourceID + 84, // 8: teleport.lib.teleterm.v1.ReviewAccessRequestRequest.assume_start_time:type_name -> google.protobuf.Timestamp + 82, // 9: teleport.lib.teleterm.v1.ReviewAccessRequestResponse.request:type_name -> teleport.lib.teleterm.v1.AccessRequest + 82, // 10: teleport.lib.teleterm.v1.PromoteAccessRequestResponse.request:type_name -> teleport.lib.teleterm.v1.AccessRequest + 85, // 11: teleport.lib.teleterm.v1.GetSuggestedAccessListsResponse.access_lists:type_name -> teleport.accesslist.v1.AccessList + 86, // 12: teleport.lib.teleterm.v1.ListKubernetesResourcesResponse.resources:type_name -> teleport.lib.teleterm.v1.KubeResource + 0, // 13: teleport.lib.teleterm.v1.LoginPasswordlessResponse.prompt:type_name -> teleport.lib.teleterm.v1.PasswordlessPrompt + 25, // 14: teleport.lib.teleterm.v1.LoginPasswordlessResponse.credentials:type_name -> teleport.lib.teleterm.v1.CredentialInfo + 77, // 15: teleport.lib.teleterm.v1.LoginPasswordlessRequest.init:type_name -> teleport.lib.teleterm.v1.LoginPasswordlessRequest.LoginPasswordlessRequestInit + 78, // 16: teleport.lib.teleterm.v1.LoginPasswordlessRequest.pin:type_name -> teleport.lib.teleterm.v1.LoginPasswordlessRequest.LoginPasswordlessPINResponse + 79, // 17: teleport.lib.teleterm.v1.LoginPasswordlessRequest.credential:type_name -> teleport.lib.teleterm.v1.LoginPasswordlessRequest.LoginPasswordlessCredentialResponse + 1, // 18: teleport.lib.teleterm.v1.FileTransferRequest.direction:type_name -> teleport.lib.teleterm.v1.FileTransferDirection + 80, // 19: teleport.lib.teleterm.v1.LoginRequest.local:type_name -> teleport.lib.teleterm.v1.LoginRequest.LocalParams + 81, // 20: teleport.lib.teleterm.v1.LoginRequest.sso:type_name -> teleport.lib.teleterm.v1.LoginRequest.SsoParams + 87, // 21: teleport.lib.teleterm.v1.ListClustersResponse.clusters:type_name -> teleport.lib.teleterm.v1.Cluster + 88, // 22: teleport.lib.teleterm.v1.ListGatewaysResponse.gateways:type_name -> teleport.lib.teleterm.v1.Gateway + 89, // 23: teleport.lib.teleterm.v1.GetServersResponse.agents:type_name -> teleport.lib.teleterm.v1.Server + 90, // 24: teleport.lib.teleterm.v1.GetDatabasesResponse.agents:type_name -> teleport.lib.teleterm.v1.Database + 91, // 25: teleport.lib.teleterm.v1.GetKubesResponse.agents:type_name -> teleport.lib.teleterm.v1.Kube + 92, // 26: teleport.lib.teleterm.v1.GetAppsResponse.agents:type_name -> teleport.lib.teleterm.v1.App + 2, // 27: teleport.lib.teleterm.v1.UpdateHeadlessAuthenticationStateRequest.state:type_name -> teleport.lib.teleterm.v1.HeadlessAuthenticationState + 89, // 28: teleport.lib.teleterm.v1.WaitForConnectMyComputerNodeJoinResponse.server:type_name -> teleport.lib.teleterm.v1.Server + 67, // 29: teleport.lib.teleterm.v1.ListUnifiedResourcesRequest.sort_by:type_name -> teleport.lib.teleterm.v1.SortBy + 69, // 30: teleport.lib.teleterm.v1.ListUnifiedResourcesResponse.resources:type_name -> teleport.lib.teleterm.v1.PaginatedResource + 90, // 31: teleport.lib.teleterm.v1.PaginatedResource.database:type_name -> teleport.lib.teleterm.v1.Database + 89, // 32: teleport.lib.teleterm.v1.PaginatedResource.server:type_name -> teleport.lib.teleterm.v1.Server + 91, // 33: teleport.lib.teleterm.v1.PaginatedResource.kube:type_name -> teleport.lib.teleterm.v1.Kube + 92, // 34: teleport.lib.teleterm.v1.PaginatedResource.app:type_name -> teleport.lib.teleterm.v1.App + 74, // 35: teleport.lib.teleterm.v1.GetUserPreferencesResponse.user_preferences:type_name -> teleport.lib.teleterm.v1.UserPreferences + 74, // 36: teleport.lib.teleterm.v1.UpdateUserPreferencesRequest.user_preferences:type_name -> teleport.lib.teleterm.v1.UserPreferences + 74, // 37: teleport.lib.teleterm.v1.UpdateUserPreferencesResponse.user_preferences:type_name -> teleport.lib.teleterm.v1.UserPreferences + 93, // 38: teleport.lib.teleterm.v1.UserPreferences.cluster_preferences:type_name -> teleport.userpreferences.v1.ClusterUserPreferences + 94, // 39: teleport.lib.teleterm.v1.UserPreferences.unified_resource_preferences:type_name -> teleport.userpreferences.v1.UnifiedResourcePreferences + 95, // 40: teleport.lib.teleterm.v1.AuthenticateWebDeviceRequest.device_web_token:type_name -> teleport.devicetrust.v1.DeviceWebToken + 96, // 41: teleport.lib.teleterm.v1.AuthenticateWebDeviceResponse.confirmation_token:type_name -> teleport.devicetrust.v1.DeviceConfirmationToken + 52, // 42: teleport.lib.teleterm.v1.TerminalService.UpdateTshdEventsServerAddress:input_type -> teleport.lib.teleterm.v1.UpdateTshdEventsServerAddressRequest + 32, // 43: teleport.lib.teleterm.v1.TerminalService.ListRootClusters:input_type -> teleport.lib.teleterm.v1.ListClustersRequest + 35, // 44: teleport.lib.teleterm.v1.TerminalService.ListLeafClusters:input_type -> teleport.lib.teleterm.v1.ListLeafClustersRequest + 34, // 45: teleport.lib.teleterm.v1.TerminalService.GetDatabases:input_type -> teleport.lib.teleterm.v1.GetDatabasesRequest + 36, // 46: teleport.lib.teleterm.v1.TerminalService.ListDatabaseUsers:input_type -> teleport.lib.teleterm.v1.ListDatabaseUsersRequest + 44, // 47: teleport.lib.teleterm.v1.TerminalService.GetServers:input_type -> teleport.lib.teleterm.v1.GetServersRequest + 8, // 48: teleport.lib.teleterm.v1.TerminalService.GetAccessRequests:input_type -> teleport.lib.teleterm.v1.GetAccessRequestsRequest + 7, // 49: teleport.lib.teleterm.v1.TerminalService.GetAccessRequest:input_type -> teleport.lib.teleterm.v1.GetAccessRequestRequest + 11, // 50: teleport.lib.teleterm.v1.TerminalService.DeleteAccessRequest:input_type -> teleport.lib.teleterm.v1.DeleteAccessRequestRequest + 12, // 51: teleport.lib.teleterm.v1.TerminalService.CreateAccessRequest:input_type -> teleport.lib.teleterm.v1.CreateAccessRequestRequest + 17, // 52: teleport.lib.teleterm.v1.TerminalService.ReviewAccessRequest:input_type -> teleport.lib.teleterm.v1.ReviewAccessRequestRequest + 15, // 53: teleport.lib.teleterm.v1.TerminalService.GetRequestableRoles:input_type -> teleport.lib.teleterm.v1.GetRequestableRolesRequest + 14, // 54: teleport.lib.teleterm.v1.TerminalService.AssumeRole:input_type -> teleport.lib.teleterm.v1.AssumeRoleRequest + 19, // 55: teleport.lib.teleterm.v1.TerminalService.PromoteAccessRequest:input_type -> teleport.lib.teleterm.v1.PromoteAccessRequestRequest + 21, // 56: teleport.lib.teleterm.v1.TerminalService.GetSuggestedAccessLists:input_type -> teleport.lib.teleterm.v1.GetSuggestedAccessListsRequest + 23, // 57: teleport.lib.teleterm.v1.TerminalService.ListKubernetesResources:input_type -> teleport.lib.teleterm.v1.ListKubernetesResourcesRequest + 47, // 58: teleport.lib.teleterm.v1.TerminalService.GetKubes:input_type -> teleport.lib.teleterm.v1.GetKubesRequest + 49, // 59: teleport.lib.teleterm.v1.TerminalService.GetApps:input_type -> teleport.lib.teleterm.v1.GetAppsRequest + 31, // 60: teleport.lib.teleterm.v1.TerminalService.AddCluster:input_type -> teleport.lib.teleterm.v1.AddClusterRequest + 4, // 61: teleport.lib.teleterm.v1.TerminalService.RemoveCluster:input_type -> teleport.lib.teleterm.v1.RemoveClusterRequest + 39, // 62: teleport.lib.teleterm.v1.TerminalService.ListGateways:input_type -> teleport.lib.teleterm.v1.ListGatewaysRequest + 38, // 63: teleport.lib.teleterm.v1.TerminalService.CreateGateway:input_type -> teleport.lib.teleterm.v1.CreateGatewayRequest + 41, // 64: teleport.lib.teleterm.v1.TerminalService.RemoveGateway:input_type -> teleport.lib.teleterm.v1.RemoveGatewayRequest + 42, // 65: teleport.lib.teleterm.v1.TerminalService.SetGatewayTargetSubresourceName:input_type -> teleport.lib.teleterm.v1.SetGatewayTargetSubresourceNameRequest + 43, // 66: teleport.lib.teleterm.v1.TerminalService.SetGatewayLocalPort:input_type -> teleport.lib.teleterm.v1.SetGatewayLocalPortRequest + 51, // 67: teleport.lib.teleterm.v1.TerminalService.GetAuthSettings:input_type -> teleport.lib.teleterm.v1.GetAuthSettingsRequest + 5, // 68: teleport.lib.teleterm.v1.TerminalService.GetCluster:input_type -> teleport.lib.teleterm.v1.GetClusterRequest + 30, // 69: teleport.lib.teleterm.v1.TerminalService.Login:input_type -> teleport.lib.teleterm.v1.LoginRequest + 27, // 70: teleport.lib.teleterm.v1.TerminalService.LoginPasswordless:input_type -> teleport.lib.teleterm.v1.LoginPasswordlessRequest + 6, // 71: teleport.lib.teleterm.v1.TerminalService.Logout:input_type -> teleport.lib.teleterm.v1.LogoutRequest + 28, // 72: teleport.lib.teleterm.v1.TerminalService.TransferFile:input_type -> teleport.lib.teleterm.v1.FileTransferRequest + 97, // 73: teleport.lib.teleterm.v1.TerminalService.ReportUsageEvent:input_type -> teleport.lib.teleterm.v1.ReportUsageEventRequest + 54, // 74: teleport.lib.teleterm.v1.TerminalService.UpdateHeadlessAuthenticationState:input_type -> teleport.lib.teleterm.v1.UpdateHeadlessAuthenticationStateRequest + 56, // 75: teleport.lib.teleterm.v1.TerminalService.CreateConnectMyComputerRole:input_type -> teleport.lib.teleterm.v1.CreateConnectMyComputerRoleRequest + 58, // 76: teleport.lib.teleterm.v1.TerminalService.CreateConnectMyComputerNodeToken:input_type -> teleport.lib.teleterm.v1.CreateConnectMyComputerNodeTokenRequest + 60, // 77: teleport.lib.teleterm.v1.TerminalService.WaitForConnectMyComputerNodeJoin:input_type -> teleport.lib.teleterm.v1.WaitForConnectMyComputerNodeJoinRequest + 62, // 78: teleport.lib.teleterm.v1.TerminalService.DeleteConnectMyComputerNode:input_type -> teleport.lib.teleterm.v1.DeleteConnectMyComputerNodeRequest + 64, // 79: teleport.lib.teleterm.v1.TerminalService.GetConnectMyComputerNodeName:input_type -> teleport.lib.teleterm.v1.GetConnectMyComputerNodeNameRequest + 66, // 80: teleport.lib.teleterm.v1.TerminalService.ListUnifiedResources:input_type -> teleport.lib.teleterm.v1.ListUnifiedResourcesRequest + 70, // 81: teleport.lib.teleterm.v1.TerminalService.GetUserPreferences:input_type -> teleport.lib.teleterm.v1.GetUserPreferencesRequest + 72, // 82: teleport.lib.teleterm.v1.TerminalService.UpdateUserPreferences:input_type -> teleport.lib.teleterm.v1.UpdateUserPreferencesRequest + 75, // 83: teleport.lib.teleterm.v1.TerminalService.AuthenticateWebDevice:input_type -> teleport.lib.teleterm.v1.AuthenticateWebDeviceRequest + 53, // 84: teleport.lib.teleterm.v1.TerminalService.UpdateTshdEventsServerAddress:output_type -> teleport.lib.teleterm.v1.UpdateTshdEventsServerAddressResponse + 33, // 85: teleport.lib.teleterm.v1.TerminalService.ListRootClusters:output_type -> teleport.lib.teleterm.v1.ListClustersResponse + 33, // 86: teleport.lib.teleterm.v1.TerminalService.ListLeafClusters:output_type -> teleport.lib.teleterm.v1.ListClustersResponse + 46, // 87: teleport.lib.teleterm.v1.TerminalService.GetDatabases:output_type -> teleport.lib.teleterm.v1.GetDatabasesResponse + 37, // 88: teleport.lib.teleterm.v1.TerminalService.ListDatabaseUsers:output_type -> teleport.lib.teleterm.v1.ListDatabaseUsersResponse + 45, // 89: teleport.lib.teleterm.v1.TerminalService.GetServers:output_type -> teleport.lib.teleterm.v1.GetServersResponse + 10, // 90: teleport.lib.teleterm.v1.TerminalService.GetAccessRequests:output_type -> teleport.lib.teleterm.v1.GetAccessRequestsResponse + 9, // 91: teleport.lib.teleterm.v1.TerminalService.GetAccessRequest:output_type -> teleport.lib.teleterm.v1.GetAccessRequestResponse + 3, // 92: teleport.lib.teleterm.v1.TerminalService.DeleteAccessRequest:output_type -> teleport.lib.teleterm.v1.EmptyResponse + 13, // 93: teleport.lib.teleterm.v1.TerminalService.CreateAccessRequest:output_type -> teleport.lib.teleterm.v1.CreateAccessRequestResponse + 18, // 94: teleport.lib.teleterm.v1.TerminalService.ReviewAccessRequest:output_type -> teleport.lib.teleterm.v1.ReviewAccessRequestResponse + 16, // 95: teleport.lib.teleterm.v1.TerminalService.GetRequestableRoles:output_type -> teleport.lib.teleterm.v1.GetRequestableRolesResponse + 3, // 96: teleport.lib.teleterm.v1.TerminalService.AssumeRole:output_type -> teleport.lib.teleterm.v1.EmptyResponse + 20, // 97: teleport.lib.teleterm.v1.TerminalService.PromoteAccessRequest:output_type -> teleport.lib.teleterm.v1.PromoteAccessRequestResponse + 22, // 98: teleport.lib.teleterm.v1.TerminalService.GetSuggestedAccessLists:output_type -> teleport.lib.teleterm.v1.GetSuggestedAccessListsResponse + 24, // 99: teleport.lib.teleterm.v1.TerminalService.ListKubernetesResources:output_type -> teleport.lib.teleterm.v1.ListKubernetesResourcesResponse + 48, // 100: teleport.lib.teleterm.v1.TerminalService.GetKubes:output_type -> teleport.lib.teleterm.v1.GetKubesResponse + 50, // 101: teleport.lib.teleterm.v1.TerminalService.GetApps:output_type -> teleport.lib.teleterm.v1.GetAppsResponse + 87, // 102: teleport.lib.teleterm.v1.TerminalService.AddCluster:output_type -> teleport.lib.teleterm.v1.Cluster + 3, // 103: teleport.lib.teleterm.v1.TerminalService.RemoveCluster:output_type -> teleport.lib.teleterm.v1.EmptyResponse + 40, // 104: teleport.lib.teleterm.v1.TerminalService.ListGateways:output_type -> teleport.lib.teleterm.v1.ListGatewaysResponse + 88, // 105: teleport.lib.teleterm.v1.TerminalService.CreateGateway:output_type -> teleport.lib.teleterm.v1.Gateway + 3, // 106: teleport.lib.teleterm.v1.TerminalService.RemoveGateway:output_type -> teleport.lib.teleterm.v1.EmptyResponse + 88, // 107: teleport.lib.teleterm.v1.TerminalService.SetGatewayTargetSubresourceName:output_type -> teleport.lib.teleterm.v1.Gateway + 88, // 108: teleport.lib.teleterm.v1.TerminalService.SetGatewayLocalPort:output_type -> teleport.lib.teleterm.v1.Gateway + 98, // 109: teleport.lib.teleterm.v1.TerminalService.GetAuthSettings:output_type -> teleport.lib.teleterm.v1.AuthSettings + 87, // 110: teleport.lib.teleterm.v1.TerminalService.GetCluster:output_type -> teleport.lib.teleterm.v1.Cluster + 3, // 111: teleport.lib.teleterm.v1.TerminalService.Login:output_type -> teleport.lib.teleterm.v1.EmptyResponse + 26, // 112: teleport.lib.teleterm.v1.TerminalService.LoginPasswordless:output_type -> teleport.lib.teleterm.v1.LoginPasswordlessResponse + 3, // 113: teleport.lib.teleterm.v1.TerminalService.Logout:output_type -> teleport.lib.teleterm.v1.EmptyResponse + 29, // 114: teleport.lib.teleterm.v1.TerminalService.TransferFile:output_type -> teleport.lib.teleterm.v1.FileTransferProgress + 3, // 115: teleport.lib.teleterm.v1.TerminalService.ReportUsageEvent:output_type -> teleport.lib.teleterm.v1.EmptyResponse + 55, // 116: teleport.lib.teleterm.v1.TerminalService.UpdateHeadlessAuthenticationState:output_type -> teleport.lib.teleterm.v1.UpdateHeadlessAuthenticationStateResponse + 57, // 117: teleport.lib.teleterm.v1.TerminalService.CreateConnectMyComputerRole:output_type -> teleport.lib.teleterm.v1.CreateConnectMyComputerRoleResponse + 59, // 118: teleport.lib.teleterm.v1.TerminalService.CreateConnectMyComputerNodeToken:output_type -> teleport.lib.teleterm.v1.CreateConnectMyComputerNodeTokenResponse + 61, // 119: teleport.lib.teleterm.v1.TerminalService.WaitForConnectMyComputerNodeJoin:output_type -> teleport.lib.teleterm.v1.WaitForConnectMyComputerNodeJoinResponse + 63, // 120: teleport.lib.teleterm.v1.TerminalService.DeleteConnectMyComputerNode:output_type -> teleport.lib.teleterm.v1.DeleteConnectMyComputerNodeResponse + 65, // 121: teleport.lib.teleterm.v1.TerminalService.GetConnectMyComputerNodeName:output_type -> teleport.lib.teleterm.v1.GetConnectMyComputerNodeNameResponse + 68, // 122: teleport.lib.teleterm.v1.TerminalService.ListUnifiedResources:output_type -> teleport.lib.teleterm.v1.ListUnifiedResourcesResponse + 71, // 123: teleport.lib.teleterm.v1.TerminalService.GetUserPreferences:output_type -> teleport.lib.teleterm.v1.GetUserPreferencesResponse + 73, // 124: teleport.lib.teleterm.v1.TerminalService.UpdateUserPreferences:output_type -> teleport.lib.teleterm.v1.UpdateUserPreferencesResponse + 76, // 125: teleport.lib.teleterm.v1.TerminalService.AuthenticateWebDevice:output_type -> teleport.lib.teleterm.v1.AuthenticateWebDeviceResponse + 84, // [84:126] is the sub-list for method output_type + 42, // [42:84] is the sub-list for method input_type + 42, // [42:42] is the sub-list for extension type_name + 42, // [42:42] is the sub-list for extension extendee + 0, // [0:42] is the sub-list for field type_name } func init() { file_teleport_lib_teleterm_v1_service_proto_init() } @@ -6155,7 +6381,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CredentialInfo); i { + switch v := v.(*ListKubernetesResourcesRequest); i { case 0: return &v.state case 1: @@ -6167,7 +6393,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LoginPasswordlessResponse); i { + switch v := v.(*ListKubernetesResourcesResponse); i { case 0: return &v.state case 1: @@ -6179,7 +6405,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LoginPasswordlessRequest); i { + switch v := v.(*CredentialInfo); i { case 0: return &v.state case 1: @@ -6191,7 +6417,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FileTransferRequest); i { + switch v := v.(*LoginPasswordlessResponse); i { case 0: return &v.state case 1: @@ -6203,7 +6429,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FileTransferProgress); i { + switch v := v.(*LoginPasswordlessRequest); i { case 0: return &v.state case 1: @@ -6215,7 +6441,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LoginRequest); i { + switch v := v.(*FileTransferRequest); i { case 0: return &v.state case 1: @@ -6227,7 +6453,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AddClusterRequest); i { + switch v := v.(*FileTransferProgress); i { case 0: return &v.state case 1: @@ -6239,7 +6465,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListClustersRequest); i { + switch v := v.(*LoginRequest); i { case 0: return &v.state case 1: @@ -6251,7 +6477,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListClustersResponse); i { + switch v := v.(*AddClusterRequest); i { case 0: return &v.state case 1: @@ -6263,7 +6489,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDatabasesRequest); i { + switch v := v.(*ListClustersRequest); i { case 0: return &v.state case 1: @@ -6275,7 +6501,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListLeafClustersRequest); i { + switch v := v.(*ListClustersResponse); i { case 0: return &v.state case 1: @@ -6287,7 +6513,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListDatabaseUsersRequest); i { + switch v := v.(*GetDatabasesRequest); i { case 0: return &v.state case 1: @@ -6299,7 +6525,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListDatabaseUsersResponse); i { + switch v := v.(*ListLeafClustersRequest); i { case 0: return &v.state case 1: @@ -6311,7 +6537,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateGatewayRequest); i { + switch v := v.(*ListDatabaseUsersRequest); i { case 0: return &v.state case 1: @@ -6323,7 +6549,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListGatewaysRequest); i { + switch v := v.(*ListDatabaseUsersResponse); i { case 0: return &v.state case 1: @@ -6335,7 +6561,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListGatewaysResponse); i { + switch v := v.(*CreateGatewayRequest); i { case 0: return &v.state case 1: @@ -6347,7 +6573,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RemoveGatewayRequest); i { + switch v := v.(*ListGatewaysRequest); i { case 0: return &v.state case 1: @@ -6359,7 +6585,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetGatewayTargetSubresourceNameRequest); i { + switch v := v.(*ListGatewaysResponse); i { case 0: return &v.state case 1: @@ -6371,7 +6597,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetGatewayLocalPortRequest); i { + switch v := v.(*RemoveGatewayRequest); i { case 0: return &v.state case 1: @@ -6383,7 +6609,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetServersRequest); i { + switch v := v.(*SetGatewayTargetSubresourceNameRequest); i { case 0: return &v.state case 1: @@ -6395,7 +6621,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetServersResponse); i { + switch v := v.(*SetGatewayLocalPortRequest); i { case 0: return &v.state case 1: @@ -6407,7 +6633,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDatabasesResponse); i { + switch v := v.(*GetServersRequest); i { case 0: return &v.state case 1: @@ -6419,7 +6645,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetKubesRequest); i { + switch v := v.(*GetServersResponse); i { case 0: return &v.state case 1: @@ -6431,7 +6657,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetKubesResponse); i { + switch v := v.(*GetDatabasesResponse); i { case 0: return &v.state case 1: @@ -6443,7 +6669,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAppsRequest); i { + switch v := v.(*GetKubesRequest); i { case 0: return &v.state case 1: @@ -6455,7 +6681,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAppsResponse); i { + switch v := v.(*GetKubesResponse); i { case 0: return &v.state case 1: @@ -6467,7 +6693,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetAuthSettingsRequest); i { + switch v := v.(*GetAppsRequest); i { case 0: return &v.state case 1: @@ -6479,7 +6705,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateTshdEventsServerAddressRequest); i { + switch v := v.(*GetAppsResponse); i { case 0: return &v.state case 1: @@ -6491,7 +6717,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateTshdEventsServerAddressResponse); i { + switch v := v.(*GetAuthSettingsRequest); i { case 0: return &v.state case 1: @@ -6503,7 +6729,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateHeadlessAuthenticationStateRequest); i { + switch v := v.(*UpdateTshdEventsServerAddressRequest); i { case 0: return &v.state case 1: @@ -6515,7 +6741,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateHeadlessAuthenticationStateResponse); i { + switch v := v.(*UpdateTshdEventsServerAddressResponse); i { case 0: return &v.state case 1: @@ -6527,7 +6753,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateConnectMyComputerRoleRequest); i { + switch v := v.(*UpdateHeadlessAuthenticationStateRequest); i { case 0: return &v.state case 1: @@ -6539,7 +6765,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateConnectMyComputerRoleResponse); i { + switch v := v.(*UpdateHeadlessAuthenticationStateResponse); i { case 0: return &v.state case 1: @@ -6551,7 +6777,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateConnectMyComputerNodeTokenRequest); i { + switch v := v.(*CreateConnectMyComputerRoleRequest); i { case 0: return &v.state case 1: @@ -6563,7 +6789,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateConnectMyComputerNodeTokenResponse); i { + switch v := v.(*CreateConnectMyComputerRoleResponse); i { case 0: return &v.state case 1: @@ -6575,7 +6801,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WaitForConnectMyComputerNodeJoinRequest); i { + switch v := v.(*CreateConnectMyComputerNodeTokenRequest); i { case 0: return &v.state case 1: @@ -6587,7 +6813,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WaitForConnectMyComputerNodeJoinResponse); i { + switch v := v.(*CreateConnectMyComputerNodeTokenResponse); i { case 0: return &v.state case 1: @@ -6599,7 +6825,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteConnectMyComputerNodeRequest); i { + switch v := v.(*WaitForConnectMyComputerNodeJoinRequest); i { case 0: return &v.state case 1: @@ -6611,7 +6837,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteConnectMyComputerNodeResponse); i { + switch v := v.(*WaitForConnectMyComputerNodeJoinResponse); i { case 0: return &v.state case 1: @@ -6623,7 +6849,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetConnectMyComputerNodeNameRequest); i { + switch v := v.(*DeleteConnectMyComputerNodeRequest); i { case 0: return &v.state case 1: @@ -6635,7 +6861,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetConnectMyComputerNodeNameResponse); i { + switch v := v.(*DeleteConnectMyComputerNodeResponse); i { case 0: return &v.state case 1: @@ -6647,7 +6873,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListUnifiedResourcesRequest); i { + switch v := v.(*GetConnectMyComputerNodeNameRequest); i { case 0: return &v.state case 1: @@ -6659,7 +6885,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SortBy); i { + switch v := v.(*GetConnectMyComputerNodeNameResponse); i { case 0: return &v.state case 1: @@ -6671,7 +6897,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListUnifiedResourcesResponse); i { + switch v := v.(*ListUnifiedResourcesRequest); i { case 0: return &v.state case 1: @@ -6683,7 +6909,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PaginatedResource); i { + switch v := v.(*SortBy); i { case 0: return &v.state case 1: @@ -6695,7 +6921,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetUserPreferencesRequest); i { + switch v := v.(*ListUnifiedResourcesResponse); i { case 0: return &v.state case 1: @@ -6707,7 +6933,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetUserPreferencesResponse); i { + switch v := v.(*PaginatedResource); i { case 0: return &v.state case 1: @@ -6719,7 +6945,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateUserPreferencesRequest); i { + switch v := v.(*GetUserPreferencesRequest); i { case 0: return &v.state case 1: @@ -6731,7 +6957,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateUserPreferencesResponse); i { + switch v := v.(*GetUserPreferencesResponse); i { case 0: return &v.state case 1: @@ -6743,7 +6969,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UserPreferences); i { + switch v := v.(*UpdateUserPreferencesRequest); i { case 0: return &v.state case 1: @@ -6755,7 +6981,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AuthenticateWebDeviceRequest); i { + switch v := v.(*UpdateUserPreferencesResponse); i { case 0: return &v.state case 1: @@ -6767,7 +6993,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AuthenticateWebDeviceResponse); i { + switch v := v.(*UserPreferences); i { case 0: return &v.state case 1: @@ -6779,7 +7005,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LoginPasswordlessRequest_LoginPasswordlessRequestInit); i { + switch v := v.(*AuthenticateWebDeviceRequest); i { case 0: return &v.state case 1: @@ -6791,7 +7017,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LoginPasswordlessRequest_LoginPasswordlessPINResponse); i { + switch v := v.(*AuthenticateWebDeviceResponse); i { case 0: return &v.state case 1: @@ -6803,7 +7029,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LoginPasswordlessRequest_LoginPasswordlessCredentialResponse); i { + switch v := v.(*LoginPasswordlessRequest_LoginPasswordlessRequestInit); i { case 0: return &v.state case 1: @@ -6815,7 +7041,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LoginRequest_LocalParams); i { + switch v := v.(*LoginPasswordlessRequest_LoginPasswordlessPINResponse); i { case 0: return &v.state case 1: @@ -6827,6 +7053,30 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } file_teleport_lib_teleterm_v1_service_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LoginPasswordlessRequest_LoginPasswordlessCredentialResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_teleport_lib_teleterm_v1_service_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LoginRequest_LocalParams); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_teleport_lib_teleterm_v1_service_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LoginRequest_SsoParams); i { case 0: return &v.state @@ -6839,16 +7089,16 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[22].OneofWrappers = []interface{}{ + file_teleport_lib_teleterm_v1_service_proto_msgTypes[24].OneofWrappers = []interface{}{ (*LoginPasswordlessRequest_Init)(nil), (*LoginPasswordlessRequest_Pin)(nil), (*LoginPasswordlessRequest_Credential)(nil), } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[25].OneofWrappers = []interface{}{ + file_teleport_lib_teleterm_v1_service_proto_msgTypes[27].OneofWrappers = []interface{}{ (*LoginRequest_Local)(nil), (*LoginRequest_Sso)(nil), } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[64].OneofWrappers = []interface{}{ + file_teleport_lib_teleterm_v1_service_proto_msgTypes[66].OneofWrappers = []interface{}{ (*PaginatedResource_Database)(nil), (*PaginatedResource_Server)(nil), (*PaginatedResource_Kube)(nil), @@ -6860,7 +7110,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_teleport_lib_teleterm_v1_service_proto_rawDesc, NumEnums: 3, - NumMessages: 77, + NumMessages: 79, NumExtensions: 0, NumServices: 1, }, diff --git a/gen/proto/go/teleport/lib/teleterm/v1/service_grpc.pb.go b/gen/proto/go/teleport/lib/teleterm/v1/service_grpc.pb.go index 2a0e67550d748..bfd1dfe9f8738 100644 --- a/gen/proto/go/teleport/lib/teleterm/v1/service_grpc.pb.go +++ b/gen/proto/go/teleport/lib/teleterm/v1/service_grpc.pb.go @@ -51,6 +51,7 @@ const ( TerminalService_AssumeRole_FullMethodName = "/teleport.lib.teleterm.v1.TerminalService/AssumeRole" TerminalService_PromoteAccessRequest_FullMethodName = "/teleport.lib.teleterm.v1.TerminalService/PromoteAccessRequest" TerminalService_GetSuggestedAccessLists_FullMethodName = "/teleport.lib.teleterm.v1.TerminalService/GetSuggestedAccessLists" + TerminalService_ListKubernetesResources_FullMethodName = "/teleport.lib.teleterm.v1.TerminalService/ListKubernetesResources" TerminalService_GetKubes_FullMethodName = "/teleport.lib.teleterm.v1.TerminalService/GetKubes" TerminalService_GetApps_FullMethodName = "/teleport.lib.teleterm.v1.TerminalService/GetApps" TerminalService_AddCluster_FullMethodName = "/teleport.lib.teleterm.v1.TerminalService/AddCluster" @@ -119,6 +120,9 @@ type TerminalServiceClient interface { PromoteAccessRequest(ctx context.Context, in *PromoteAccessRequestRequest, opts ...grpc.CallOption) (*PromoteAccessRequestResponse, error) // GetSuggestedAccessLists returns suggested access lists for an access request. GetSuggestedAccessLists(ctx context.Context, in *GetSuggestedAccessListsRequest, opts ...grpc.CallOption) (*GetSuggestedAccessListsResponse, error) + // ListKubernetesResourcesRequest defines a request to retrieve kube resources paginated. + // Only one type of kube resource can be retrieved per request (eg: namespace, pods, secrets, etc.) + ListKubernetesResources(ctx context.Context, in *ListKubernetesResourcesRequest, opts ...grpc.CallOption) (*ListKubernetesResourcesResponse, error) // GetKubes returns filtered, sorted, and paginated kubes GetKubes(ctx context.Context, in *GetKubesRequest, opts ...grpc.CallOption) (*GetKubesResponse, error) // GetApps returns a filtered and paginated list of apps. @@ -349,6 +353,15 @@ func (c *terminalServiceClient) GetSuggestedAccessLists(ctx context.Context, in return out, nil } +func (c *terminalServiceClient) ListKubernetesResources(ctx context.Context, in *ListKubernetesResourcesRequest, opts ...grpc.CallOption) (*ListKubernetesResourcesResponse, error) { + out := new(ListKubernetesResourcesResponse) + err := c.cc.Invoke(ctx, TerminalService_ListKubernetesResources_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *terminalServiceClient) GetKubes(ctx context.Context, in *GetKubesRequest, opts ...grpc.CallOption) (*GetKubesResponse, error) { out := new(GetKubesResponse) err := c.cc.Invoke(ctx, TerminalService_GetKubes_FullMethodName, in, out, opts...) @@ -668,6 +681,9 @@ type TerminalServiceServer interface { PromoteAccessRequest(context.Context, *PromoteAccessRequestRequest) (*PromoteAccessRequestResponse, error) // GetSuggestedAccessLists returns suggested access lists for an access request. GetSuggestedAccessLists(context.Context, *GetSuggestedAccessListsRequest) (*GetSuggestedAccessListsResponse, error) + // ListKubernetesResourcesRequest defines a request to retrieve kube resources paginated. + // Only one type of kube resource can be retrieved per request (eg: namespace, pods, secrets, etc.) + ListKubernetesResources(context.Context, *ListKubernetesResourcesRequest) (*ListKubernetesResourcesResponse, error) // GetKubes returns filtered, sorted, and paginated kubes GetKubes(context.Context, *GetKubesRequest) (*GetKubesResponse, error) // GetApps returns a filtered and paginated list of apps. @@ -805,6 +821,9 @@ func (UnimplementedTerminalServiceServer) PromoteAccessRequest(context.Context, func (UnimplementedTerminalServiceServer) GetSuggestedAccessLists(context.Context, *GetSuggestedAccessListsRequest) (*GetSuggestedAccessListsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetSuggestedAccessLists not implemented") } +func (UnimplementedTerminalServiceServer) ListKubernetesResources(context.Context, *ListKubernetesResourcesRequest) (*ListKubernetesResourcesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListKubernetesResources not implemented") +} func (UnimplementedTerminalServiceServer) GetKubes(context.Context, *GetKubesRequest) (*GetKubesResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetKubes not implemented") } @@ -1166,6 +1185,24 @@ func _TerminalService_GetSuggestedAccessLists_Handler(srv interface{}, ctx conte return interceptor(ctx, in, info, handler) } +func _TerminalService_ListKubernetesResources_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListKubernetesResourcesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TerminalServiceServer).ListKubernetesResources(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: TerminalService_ListKubernetesResources_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TerminalServiceServer).ListKubernetesResources(ctx, req.(*ListKubernetesResourcesRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _TerminalService_GetKubes_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(GetKubesRequest) if err := dec(in); err != nil { @@ -1712,6 +1749,10 @@ var TerminalService_ServiceDesc = grpc.ServiceDesc{ MethodName: "GetSuggestedAccessLists", Handler: _TerminalService_GetSuggestedAccessLists_Handler, }, + { + MethodName: "ListKubernetesResources", + Handler: _TerminalService_ListKubernetesResources_Handler, + }, { MethodName: "GetKubes", Handler: _TerminalService_GetKubes_Handler, diff --git a/gen/proto/ts/teleport/lib/teleterm/v1/kube_pb.ts b/gen/proto/ts/teleport/lib/teleterm/v1/kube_pb.ts index 6093ab05849ed..19f6fba32b8a5 100644 --- a/gen/proto/ts/teleport/lib/teleterm/v1/kube_pb.ts +++ b/gen/proto/ts/teleport/lib/teleterm/v1/kube_pb.ts @@ -56,6 +56,52 @@ export interface Kube { */ labels: Label[]; } +/** + * KubeResource describes a kube_cluster's subresource eg: pods, namespaces, etc. + * + * @generated from protobuf message teleport.lib.teleterm.v1.KubeResource + */ +export interface KubeResource { + /** + * uri is the kube resource URI + * + * @generated from protobuf field: string uri = 1; + */ + uri: string; + /** + * kind is the kube subresource kind eg: pods, namespace + * + * @generated from protobuf field: string kind = 2; + */ + kind: string; + /** + * name is the kube resource name eg: pod name, namespace name + * + * @generated from protobuf field: string name = 3; + */ + name: string; + /** + * labels is the kube resource labels + * + * @generated from protobuf field: repeated teleport.lib.teleterm.v1.Label labels = 4; + */ + labels: Label[]; + /** + * cluster is the kube cluster name that this kube resource belongs to + * eg: the kube cluster that a namespace belongs to + * + * @generated from protobuf field: string cluster = 5; + */ + cluster: string; + /** + * namespace is the kube namespace where the resource is located + * note: this field will be blank if this resource "kind" is "namespace", + * refer to field "name" for the name of namespace + * + * @generated from protobuf field: string namespace = 6; + */ + namespace: string; +} // @generated message type with reflection information, may provide speed optimized methods class Kube$Type extends MessageType { constructor() { @@ -119,3 +165,90 @@ class Kube$Type extends MessageType { * @generated MessageType for protobuf message teleport.lib.teleterm.v1.Kube */ export const Kube = new Kube$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class KubeResource$Type extends MessageType { + constructor() { + super("teleport.lib.teleterm.v1.KubeResource", [ + { no: 1, name: "uri", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 2, name: "kind", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 3, name: "name", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 4, name: "labels", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => Label }, + { no: 5, name: "cluster", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 6, name: "namespace", kind: "scalar", T: 9 /*ScalarType.STRING*/ } + ]); + } + create(value?: PartialMessage): KubeResource { + const message = globalThis.Object.create((this.messagePrototype!)); + message.uri = ""; + message.kind = ""; + message.name = ""; + message.labels = []; + message.cluster = ""; + message.namespace = ""; + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: KubeResource): KubeResource { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string uri */ 1: + message.uri = reader.string(); + break; + case /* string kind */ 2: + message.kind = reader.string(); + break; + case /* string name */ 3: + message.name = reader.string(); + break; + case /* repeated teleport.lib.teleterm.v1.Label labels */ 4: + message.labels.push(Label.internalBinaryRead(reader, reader.uint32(), options)); + break; + case /* string cluster */ 5: + message.cluster = reader.string(); + break; + case /* string namespace */ 6: + message.namespace = reader.string(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: KubeResource, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string uri = 1; */ + if (message.uri !== "") + writer.tag(1, WireType.LengthDelimited).string(message.uri); + /* string kind = 2; */ + if (message.kind !== "") + writer.tag(2, WireType.LengthDelimited).string(message.kind); + /* string name = 3; */ + if (message.name !== "") + writer.tag(3, WireType.LengthDelimited).string(message.name); + /* repeated teleport.lib.teleterm.v1.Label labels = 4; */ + for (let i = 0; i < message.labels.length; i++) + Label.internalBinaryWrite(message.labels[i], writer.tag(4, WireType.LengthDelimited).fork(), options).join(); + /* string cluster = 5; */ + if (message.cluster !== "") + writer.tag(5, WireType.LengthDelimited).string(message.cluster); + /* string namespace = 6; */ + if (message.namespace !== "") + writer.tag(6, WireType.LengthDelimited).string(message.namespace); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message teleport.lib.teleterm.v1.KubeResource + */ +export const KubeResource = new KubeResource$Type(); diff --git a/gen/proto/ts/teleport/lib/teleterm/v1/service_pb.client.ts b/gen/proto/ts/teleport/lib/teleterm/v1/service_pb.client.ts index 68f60ff260c15..3c23ad8a2afc4 100644 --- a/gen/proto/ts/teleport/lib/teleterm/v1/service_pb.client.ts +++ b/gen/proto/ts/teleport/lib/teleterm/v1/service_pb.client.ts @@ -70,6 +70,8 @@ import type { GetAppsResponse } from "./service_pb"; import type { GetAppsRequest } from "./service_pb"; import type { GetKubesResponse } from "./service_pb"; import type { GetKubesRequest } from "./service_pb"; +import type { ListKubernetesResourcesResponse } from "./service_pb"; +import type { ListKubernetesResourcesRequest } from "./service_pb"; import type { GetSuggestedAccessListsResponse } from "./service_pb"; import type { GetSuggestedAccessListsRequest } from "./service_pb"; import type { PromoteAccessRequestResponse } from "./service_pb"; @@ -208,6 +210,13 @@ export interface ITerminalServiceClient { * @generated from protobuf rpc: GetSuggestedAccessLists(teleport.lib.teleterm.v1.GetSuggestedAccessListsRequest) returns (teleport.lib.teleterm.v1.GetSuggestedAccessListsResponse); */ getSuggestedAccessLists(input: GetSuggestedAccessListsRequest, options?: RpcOptions): UnaryCall; + /** + * ListKubernetesResourcesRequest defines a request to retrieve kube resources paginated. + * Only one type of kube resource can be retrieved per request (eg: namespace, pods, secrets, etc.) + * + * @generated from protobuf rpc: ListKubernetesResources(teleport.lib.teleterm.v1.ListKubernetesResourcesRequest) returns (teleport.lib.teleterm.v1.ListKubernetesResourcesResponse); + */ + listKubernetesResources(input: ListKubernetesResourcesRequest, options?: RpcOptions): UnaryCall; /** * GetKubes returns filtered, sorted, and paginated kubes * @@ -555,13 +564,23 @@ export class TerminalServiceClient implements ITerminalServiceClient, ServiceInf const method = this.methods[14], opt = this._transport.mergeOptions(options); return stackIntercept("unary", this._transport, method, opt, input); } + /** + * ListKubernetesResourcesRequest defines a request to retrieve kube resources paginated. + * Only one type of kube resource can be retrieved per request (eg: namespace, pods, secrets, etc.) + * + * @generated from protobuf rpc: ListKubernetesResources(teleport.lib.teleterm.v1.ListKubernetesResourcesRequest) returns (teleport.lib.teleterm.v1.ListKubernetesResourcesResponse); + */ + listKubernetesResources(input: ListKubernetesResourcesRequest, options?: RpcOptions): UnaryCall { + const method = this.methods[15], opt = this._transport.mergeOptions(options); + return stackIntercept("unary", this._transport, method, opt, input); + } /** * GetKubes returns filtered, sorted, and paginated kubes * * @generated from protobuf rpc: GetKubes(teleport.lib.teleterm.v1.GetKubesRequest) returns (teleport.lib.teleterm.v1.GetKubesResponse); */ getKubes(input: GetKubesRequest, options?: RpcOptions): UnaryCall { - const method = this.methods[15], opt = this._transport.mergeOptions(options); + const method = this.methods[16], opt = this._transport.mergeOptions(options); return stackIntercept("unary", this._transport, method, opt, input); } /** @@ -570,7 +589,7 @@ export class TerminalServiceClient implements ITerminalServiceClient, ServiceInf * @generated from protobuf rpc: GetApps(teleport.lib.teleterm.v1.GetAppsRequest) returns (teleport.lib.teleterm.v1.GetAppsResponse); */ getApps(input: GetAppsRequest, options?: RpcOptions): UnaryCall { - const method = this.methods[16], opt = this._transport.mergeOptions(options); + const method = this.methods[17], opt = this._transport.mergeOptions(options); return stackIntercept("unary", this._transport, method, opt, input); } /** @@ -579,7 +598,7 @@ export class TerminalServiceClient implements ITerminalServiceClient, ServiceInf * @generated from protobuf rpc: AddCluster(teleport.lib.teleterm.v1.AddClusterRequest) returns (teleport.lib.teleterm.v1.Cluster); */ addCluster(input: AddClusterRequest, options?: RpcOptions): UnaryCall { - const method = this.methods[17], opt = this._transport.mergeOptions(options); + const method = this.methods[18], opt = this._transport.mergeOptions(options); return stackIntercept("unary", this._transport, method, opt, input); } /** @@ -588,7 +607,7 @@ export class TerminalServiceClient implements ITerminalServiceClient, ServiceInf * @generated from protobuf rpc: RemoveCluster(teleport.lib.teleterm.v1.RemoveClusterRequest) returns (teleport.lib.teleterm.v1.EmptyResponse); */ removeCluster(input: RemoveClusterRequest, options?: RpcOptions): UnaryCall { - const method = this.methods[18], opt = this._transport.mergeOptions(options); + const method = this.methods[19], opt = this._transport.mergeOptions(options); return stackIntercept("unary", this._transport, method, opt, input); } /** @@ -597,7 +616,7 @@ export class TerminalServiceClient implements ITerminalServiceClient, ServiceInf * @generated from protobuf rpc: ListGateways(teleport.lib.teleterm.v1.ListGatewaysRequest) returns (teleport.lib.teleterm.v1.ListGatewaysResponse); */ listGateways(input: ListGatewaysRequest, options?: RpcOptions): UnaryCall { - const method = this.methods[19], opt = this._transport.mergeOptions(options); + const method = this.methods[20], opt = this._transport.mergeOptions(options); return stackIntercept("unary", this._transport, method, opt, input); } /** @@ -606,7 +625,7 @@ export class TerminalServiceClient implements ITerminalServiceClient, ServiceInf * @generated from protobuf rpc: CreateGateway(teleport.lib.teleterm.v1.CreateGatewayRequest) returns (teleport.lib.teleterm.v1.Gateway); */ createGateway(input: CreateGatewayRequest, options?: RpcOptions): UnaryCall { - const method = this.methods[20], opt = this._transport.mergeOptions(options); + const method = this.methods[21], opt = this._transport.mergeOptions(options); return stackIntercept("unary", this._transport, method, opt, input); } /** @@ -615,7 +634,7 @@ export class TerminalServiceClient implements ITerminalServiceClient, ServiceInf * @generated from protobuf rpc: RemoveGateway(teleport.lib.teleterm.v1.RemoveGatewayRequest) returns (teleport.lib.teleterm.v1.EmptyResponse); */ removeGateway(input: RemoveGatewayRequest, options?: RpcOptions): UnaryCall { - const method = this.methods[21], opt = this._transport.mergeOptions(options); + const method = this.methods[22], opt = this._transport.mergeOptions(options); return stackIntercept("unary", this._transport, method, opt, input); } /** @@ -627,7 +646,7 @@ export class TerminalServiceClient implements ITerminalServiceClient, ServiceInf * @generated from protobuf rpc: SetGatewayTargetSubresourceName(teleport.lib.teleterm.v1.SetGatewayTargetSubresourceNameRequest) returns (teleport.lib.teleterm.v1.Gateway); */ setGatewayTargetSubresourceName(input: SetGatewayTargetSubresourceNameRequest, options?: RpcOptions): UnaryCall { - const method = this.methods[22], opt = this._transport.mergeOptions(options); + const method = this.methods[23], opt = this._transport.mergeOptions(options); return stackIntercept("unary", this._transport, method, opt, input); } /** @@ -637,7 +656,7 @@ export class TerminalServiceClient implements ITerminalServiceClient, ServiceInf * @generated from protobuf rpc: SetGatewayLocalPort(teleport.lib.teleterm.v1.SetGatewayLocalPortRequest) returns (teleport.lib.teleterm.v1.Gateway); */ setGatewayLocalPort(input: SetGatewayLocalPortRequest, options?: RpcOptions): UnaryCall { - const method = this.methods[23], opt = this._transport.mergeOptions(options); + const method = this.methods[24], opt = this._transport.mergeOptions(options); return stackIntercept("unary", this._transport, method, opt, input); } /** @@ -646,7 +665,7 @@ export class TerminalServiceClient implements ITerminalServiceClient, ServiceInf * @generated from protobuf rpc: GetAuthSettings(teleport.lib.teleterm.v1.GetAuthSettingsRequest) returns (teleport.lib.teleterm.v1.AuthSettings); */ getAuthSettings(input: GetAuthSettingsRequest, options?: RpcOptions): UnaryCall { - const method = this.methods[24], opt = this._transport.mergeOptions(options); + const method = this.methods[25], opt = this._transport.mergeOptions(options); return stackIntercept("unary", this._transport, method, opt, input); } /** @@ -656,7 +675,7 @@ export class TerminalServiceClient implements ITerminalServiceClient, ServiceInf * @generated from protobuf rpc: GetCluster(teleport.lib.teleterm.v1.GetClusterRequest) returns (teleport.lib.teleterm.v1.Cluster); */ getCluster(input: GetClusterRequest, options?: RpcOptions): UnaryCall { - const method = this.methods[25], opt = this._transport.mergeOptions(options); + const method = this.methods[26], opt = this._transport.mergeOptions(options); return stackIntercept("unary", this._transport, method, opt, input); } /** @@ -665,7 +684,7 @@ export class TerminalServiceClient implements ITerminalServiceClient, ServiceInf * @generated from protobuf rpc: Login(teleport.lib.teleterm.v1.LoginRequest) returns (teleport.lib.teleterm.v1.EmptyResponse); */ login(input: LoginRequest, options?: RpcOptions): UnaryCall { - const method = this.methods[26], opt = this._transport.mergeOptions(options); + const method = this.methods[27], opt = this._transport.mergeOptions(options); return stackIntercept("unary", this._transport, method, opt, input); } /** @@ -689,7 +708,7 @@ export class TerminalServiceClient implements ITerminalServiceClient, ServiceInf * @generated from protobuf rpc: LoginPasswordless(stream teleport.lib.teleterm.v1.LoginPasswordlessRequest) returns (stream teleport.lib.teleterm.v1.LoginPasswordlessResponse); */ loginPasswordless(options?: RpcOptions): DuplexStreamingCall { - const method = this.methods[27], opt = this._transport.mergeOptions(options); + const method = this.methods[28], opt = this._transport.mergeOptions(options); return stackIntercept("duplex", this._transport, method, opt); } /** @@ -698,7 +717,7 @@ export class TerminalServiceClient implements ITerminalServiceClient, ServiceInf * @generated from protobuf rpc: Logout(teleport.lib.teleterm.v1.LogoutRequest) returns (teleport.lib.teleterm.v1.EmptyResponse); */ logout(input: LogoutRequest, options?: RpcOptions): UnaryCall { - const method = this.methods[28], opt = this._transport.mergeOptions(options); + const method = this.methods[29], opt = this._transport.mergeOptions(options); return stackIntercept("unary", this._transport, method, opt, input); } /** @@ -707,7 +726,7 @@ export class TerminalServiceClient implements ITerminalServiceClient, ServiceInf * @generated from protobuf rpc: TransferFile(teleport.lib.teleterm.v1.FileTransferRequest) returns (stream teleport.lib.teleterm.v1.FileTransferProgress); */ transferFile(input: FileTransferRequest, options?: RpcOptions): ServerStreamingCall { - const method = this.methods[29], opt = this._transport.mergeOptions(options); + const method = this.methods[30], opt = this._transport.mergeOptions(options); return stackIntercept("serverStreaming", this._transport, method, opt, input); } /** @@ -716,7 +735,7 @@ export class TerminalServiceClient implements ITerminalServiceClient, ServiceInf * @generated from protobuf rpc: ReportUsageEvent(teleport.lib.teleterm.v1.ReportUsageEventRequest) returns (teleport.lib.teleterm.v1.EmptyResponse); */ reportUsageEvent(input: ReportUsageEventRequest, options?: RpcOptions): UnaryCall { - const method = this.methods[30], opt = this._transport.mergeOptions(options); + const method = this.methods[31], opt = this._transport.mergeOptions(options); return stackIntercept("unary", this._transport, method, opt, input); } /** @@ -726,7 +745,7 @@ export class TerminalServiceClient implements ITerminalServiceClient, ServiceInf * @generated from protobuf rpc: UpdateHeadlessAuthenticationState(teleport.lib.teleterm.v1.UpdateHeadlessAuthenticationStateRequest) returns (teleport.lib.teleterm.v1.UpdateHeadlessAuthenticationStateResponse); */ updateHeadlessAuthenticationState(input: UpdateHeadlessAuthenticationStateRequest, options?: RpcOptions): UnaryCall { - const method = this.methods[31], opt = this._transport.mergeOptions(options); + const method = this.methods[32], opt = this._transport.mergeOptions(options); return stackIntercept("unary", this._transport, method, opt, input); } /** @@ -737,7 +756,7 @@ export class TerminalServiceClient implements ITerminalServiceClient, ServiceInf * @generated from protobuf rpc: CreateConnectMyComputerRole(teleport.lib.teleterm.v1.CreateConnectMyComputerRoleRequest) returns (teleport.lib.teleterm.v1.CreateConnectMyComputerRoleResponse); */ createConnectMyComputerRole(input: CreateConnectMyComputerRoleRequest, options?: RpcOptions): UnaryCall { - const method = this.methods[32], opt = this._transport.mergeOptions(options); + const method = this.methods[33], opt = this._transport.mergeOptions(options); return stackIntercept("unary", this._transport, method, opt, input); } /** @@ -746,7 +765,7 @@ export class TerminalServiceClient implements ITerminalServiceClient, ServiceInf * @generated from protobuf rpc: CreateConnectMyComputerNodeToken(teleport.lib.teleterm.v1.CreateConnectMyComputerNodeTokenRequest) returns (teleport.lib.teleterm.v1.CreateConnectMyComputerNodeTokenResponse); */ createConnectMyComputerNodeToken(input: CreateConnectMyComputerNodeTokenRequest, options?: RpcOptions): UnaryCall { - const method = this.methods[33], opt = this._transport.mergeOptions(options); + const method = this.methods[34], opt = this._transport.mergeOptions(options); return stackIntercept("unary", this._transport, method, opt, input); } /** @@ -760,7 +779,7 @@ export class TerminalServiceClient implements ITerminalServiceClient, ServiceInf * @generated from protobuf rpc: WaitForConnectMyComputerNodeJoin(teleport.lib.teleterm.v1.WaitForConnectMyComputerNodeJoinRequest) returns (teleport.lib.teleterm.v1.WaitForConnectMyComputerNodeJoinResponse); */ waitForConnectMyComputerNodeJoin(input: WaitForConnectMyComputerNodeJoinRequest, options?: RpcOptions): UnaryCall { - const method = this.methods[34], opt = this._transport.mergeOptions(options); + const method = this.methods[35], opt = this._transport.mergeOptions(options); return stackIntercept("unary", this._transport, method, opt, input); } /** @@ -769,7 +788,7 @@ export class TerminalServiceClient implements ITerminalServiceClient, ServiceInf * @generated from protobuf rpc: DeleteConnectMyComputerNode(teleport.lib.teleterm.v1.DeleteConnectMyComputerNodeRequest) returns (teleport.lib.teleterm.v1.DeleteConnectMyComputerNodeResponse); */ deleteConnectMyComputerNode(input: DeleteConnectMyComputerNodeRequest, options?: RpcOptions): UnaryCall { - const method = this.methods[35], opt = this._transport.mergeOptions(options); + const method = this.methods[36], opt = this._transport.mergeOptions(options); return stackIntercept("unary", this._transport, method, opt, input); } /** @@ -778,7 +797,7 @@ export class TerminalServiceClient implements ITerminalServiceClient, ServiceInf * @generated from protobuf rpc: GetConnectMyComputerNodeName(teleport.lib.teleterm.v1.GetConnectMyComputerNodeNameRequest) returns (teleport.lib.teleterm.v1.GetConnectMyComputerNodeNameResponse); */ getConnectMyComputerNodeName(input: GetConnectMyComputerNodeNameRequest, options?: RpcOptions): UnaryCall { - const method = this.methods[36], opt = this._transport.mergeOptions(options); + const method = this.methods[37], opt = this._transport.mergeOptions(options); return stackIntercept("unary", this._transport, method, opt, input); } /** @@ -787,7 +806,7 @@ export class TerminalServiceClient implements ITerminalServiceClient, ServiceInf * @generated from protobuf rpc: ListUnifiedResources(teleport.lib.teleterm.v1.ListUnifiedResourcesRequest) returns (teleport.lib.teleterm.v1.ListUnifiedResourcesResponse); */ listUnifiedResources(input: ListUnifiedResourcesRequest, options?: RpcOptions): UnaryCall { - const method = this.methods[37], opt = this._transport.mergeOptions(options); + const method = this.methods[38], opt = this._transport.mergeOptions(options); return stackIntercept("unary", this._transport, method, opt, input); } /** @@ -796,7 +815,7 @@ export class TerminalServiceClient implements ITerminalServiceClient, ServiceInf * @generated from protobuf rpc: GetUserPreferences(teleport.lib.teleterm.v1.GetUserPreferencesRequest) returns (teleport.lib.teleterm.v1.GetUserPreferencesResponse); */ getUserPreferences(input: GetUserPreferencesRequest, options?: RpcOptions): UnaryCall { - const method = this.methods[38], opt = this._transport.mergeOptions(options); + const method = this.methods[39], opt = this._transport.mergeOptions(options); return stackIntercept("unary", this._transport, method, opt, input); } /** @@ -806,7 +825,7 @@ export class TerminalServiceClient implements ITerminalServiceClient, ServiceInf * @generated from protobuf rpc: UpdateUserPreferences(teleport.lib.teleterm.v1.UpdateUserPreferencesRequest) returns (teleport.lib.teleterm.v1.UpdateUserPreferencesResponse); */ updateUserPreferences(input: UpdateUserPreferencesRequest, options?: RpcOptions): UnaryCall { - const method = this.methods[39], opt = this._transport.mergeOptions(options); + const method = this.methods[40], opt = this._transport.mergeOptions(options); return stackIntercept("unary", this._transport, method, opt, input); } /** @@ -819,7 +838,7 @@ export class TerminalServiceClient implements ITerminalServiceClient, ServiceInf * @generated from protobuf rpc: AuthenticateWebDevice(teleport.lib.teleterm.v1.AuthenticateWebDeviceRequest) returns (teleport.lib.teleterm.v1.AuthenticateWebDeviceResponse); */ authenticateWebDevice(input: AuthenticateWebDeviceRequest, options?: RpcOptions): UnaryCall { - const method = this.methods[40], opt = this._transport.mergeOptions(options); + const method = this.methods[41], opt = this._transport.mergeOptions(options); return stackIntercept("unary", this._transport, method, opt, input); } } diff --git a/gen/proto/ts/teleport/lib/teleterm/v1/service_pb.grpc-server.ts b/gen/proto/ts/teleport/lib/teleterm/v1/service_pb.grpc-server.ts index b207e6ed833af..d236fdf98daab 100644 --- a/gen/proto/ts/teleport/lib/teleterm/v1/service_pb.grpc-server.ts +++ b/gen/proto/ts/teleport/lib/teleterm/v1/service_pb.grpc-server.ts @@ -65,6 +65,8 @@ import { GetAppsResponse } from "./service_pb"; import { GetAppsRequest } from "./service_pb"; import { GetKubesResponse } from "./service_pb"; import { GetKubesRequest } from "./service_pb"; +import { ListKubernetesResourcesResponse } from "./service_pb"; +import { ListKubernetesResourcesRequest } from "./service_pb"; import { GetSuggestedAccessListsResponse } from "./service_pb"; import { GetSuggestedAccessListsRequest } from "./service_pb"; import { PromoteAccessRequestResponse } from "./service_pb"; @@ -201,6 +203,13 @@ export interface ITerminalService extends grpc.UntypedServiceImplementation { * @generated from protobuf rpc: GetSuggestedAccessLists(teleport.lib.teleterm.v1.GetSuggestedAccessListsRequest) returns (teleport.lib.teleterm.v1.GetSuggestedAccessListsResponse); */ getSuggestedAccessLists: grpc.handleUnaryCall; + /** + * ListKubernetesResourcesRequest defines a request to retrieve kube resources paginated. + * Only one type of kube resource can be retrieved per request (eg: namespace, pods, secrets, etc.) + * + * @generated from protobuf rpc: ListKubernetesResources(teleport.lib.teleterm.v1.ListKubernetesResourcesRequest) returns (teleport.lib.teleterm.v1.ListKubernetesResourcesResponse); + */ + listKubernetesResources: grpc.handleUnaryCall; /** * GetKubes returns filtered, sorted, and paginated kubes * @@ -553,6 +562,16 @@ export const terminalServiceDefinition: grpc.ServiceDefinition responseSerialize: value => Buffer.from(GetSuggestedAccessListsResponse.toBinary(value)), requestSerialize: value => Buffer.from(GetSuggestedAccessListsRequest.toBinary(value)) }, + listKubernetesResources: { + path: "/teleport.lib.teleterm.v1.TerminalService/ListKubernetesResources", + originalName: "ListKubernetesResources", + requestStream: false, + responseStream: false, + responseDeserialize: bytes => ListKubernetesResourcesResponse.fromBinary(bytes), + requestDeserialize: bytes => ListKubernetesResourcesRequest.fromBinary(bytes), + responseSerialize: value => Buffer.from(ListKubernetesResourcesResponse.toBinary(value)), + requestSerialize: value => Buffer.from(ListKubernetesResourcesRequest.toBinary(value)) + }, getKubes: { path: "/teleport.lib.teleterm.v1.TerminalService/GetKubes", originalName: "GetKubes", diff --git a/gen/proto/ts/teleport/lib/teleterm/v1/service_pb.ts b/gen/proto/ts/teleport/lib/teleterm/v1/service_pb.ts index e0288a08699a0..2006b3ad79a23 100644 --- a/gen/proto/ts/teleport/lib/teleterm/v1/service_pb.ts +++ b/gen/proto/ts/teleport/lib/teleterm/v1/service_pb.ts @@ -43,6 +43,7 @@ import { Database } from "./database_pb"; import { Server } from "./server_pb"; import { Gateway } from "./gateway_pb"; import { Cluster } from "./cluster_pb"; +import { KubeResource } from "./kube_pb"; import { AccessList } from "../../../accesslist/v1/accesslist_pb"; import { Timestamp } from "../../../../google/protobuf/timestamp_pb"; import { ResourceID } from "./access_request_pb"; @@ -344,6 +345,80 @@ export interface GetSuggestedAccessListsResponse { */ accessLists: AccessList[]; } +/** + * @generated from protobuf message teleport.lib.teleterm.v1.ListKubernetesResourcesRequest + */ +export interface ListKubernetesResourcesRequest { + /** + * @generated from protobuf field: string cluster_uri = 1; + */ + clusterUri: string; + /** + * ResourceType is the Kubernetes resource that is going to be retrieved. + * + * @generated from protobuf field: string resource_type = 2; + */ + resourceType: string; + /** + * Limit is the maximum amount of resources to retrieve. + * + * @generated from protobuf field: int32 limit = 3; + */ + limit: number; + /** + * NextKey is used to start listing resources from a specific spot. It + * should be set to the previous NextKey value if using pagination, or + * left empty. + * + * @generated from protobuf field: string next_key = 4; + */ + nextKey: string; + /** + * PredicateExpression defines boolean conditions that will be matched against the resource. + * + * @generated from protobuf field: string predicate_expression = 5; + */ + predicateExpression: string; + /** + * SearchKeywords is a string containing search keywords to match against resource field values. + * + * @generated from protobuf field: string search_keywords = 6; + */ + searchKeywords: string; + /** + * UseSearchAsRoles indicates that the response should include all resources + * the caller is able to request access to using search_as_roles + * + * @generated from protobuf field: bool use_search_as_roles = 7; + */ + useSearchAsRoles: boolean; + /** + * Cluster is the Kubernetes Cluster to request the resources. + * + * @generated from protobuf field: string kubernetes_cluster = 8; + */ + kubernetesCluster: string; + /** + * Namespace is the Kubernetes namespace where the resources must be located. + * To search on every Kubernetes Namespace, do not define the value. + * + * @generated from protobuf field: string kubernetes_namespace = 9; + */ + kubernetesNamespace: string; +} +/** + * @generated from protobuf message teleport.lib.teleterm.v1.ListKubernetesResourcesResponse + */ +export interface ListKubernetesResourcesResponse { + /** + * @generated from protobuf field: repeated teleport.lib.teleterm.v1.KubeResource resources = 1; + */ + resources: KubeResource[]; + /** + * @generated from protobuf field: string next_key = 2; + */ + nextKey: string; +} /** * CredentialInfo holds fields related to a user's WebAuthn credential. * @@ -2412,6 +2487,172 @@ class GetSuggestedAccessListsResponse$Type extends MessageType { + constructor() { + super("teleport.lib.teleterm.v1.ListKubernetesResourcesRequest", [ + { no: 1, name: "cluster_uri", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 2, name: "resource_type", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 3, name: "limit", kind: "scalar", T: 5 /*ScalarType.INT32*/ }, + { no: 4, name: "next_key", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 5, name: "predicate_expression", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 6, name: "search_keywords", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 7, name: "use_search_as_roles", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }, + { no: 8, name: "kubernetes_cluster", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, + { no: 9, name: "kubernetes_namespace", kind: "scalar", T: 9 /*ScalarType.STRING*/ } + ]); + } + create(value?: PartialMessage): ListKubernetesResourcesRequest { + const message = globalThis.Object.create((this.messagePrototype!)); + message.clusterUri = ""; + message.resourceType = ""; + message.limit = 0; + message.nextKey = ""; + message.predicateExpression = ""; + message.searchKeywords = ""; + message.useSearchAsRoles = false; + message.kubernetesCluster = ""; + message.kubernetesNamespace = ""; + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ListKubernetesResourcesRequest): ListKubernetesResourcesRequest { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* string cluster_uri */ 1: + message.clusterUri = reader.string(); + break; + case /* string resource_type */ 2: + message.resourceType = reader.string(); + break; + case /* int32 limit */ 3: + message.limit = reader.int32(); + break; + case /* string next_key */ 4: + message.nextKey = reader.string(); + break; + case /* string predicate_expression */ 5: + message.predicateExpression = reader.string(); + break; + case /* string search_keywords */ 6: + message.searchKeywords = reader.string(); + break; + case /* bool use_search_as_roles */ 7: + message.useSearchAsRoles = reader.bool(); + break; + case /* string kubernetes_cluster */ 8: + message.kubernetesCluster = reader.string(); + break; + case /* string kubernetes_namespace */ 9: + message.kubernetesNamespace = reader.string(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: ListKubernetesResourcesRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* string cluster_uri = 1; */ + if (message.clusterUri !== "") + writer.tag(1, WireType.LengthDelimited).string(message.clusterUri); + /* string resource_type = 2; */ + if (message.resourceType !== "") + writer.tag(2, WireType.LengthDelimited).string(message.resourceType); + /* int32 limit = 3; */ + if (message.limit !== 0) + writer.tag(3, WireType.Varint).int32(message.limit); + /* string next_key = 4; */ + if (message.nextKey !== "") + writer.tag(4, WireType.LengthDelimited).string(message.nextKey); + /* string predicate_expression = 5; */ + if (message.predicateExpression !== "") + writer.tag(5, WireType.LengthDelimited).string(message.predicateExpression); + /* string search_keywords = 6; */ + if (message.searchKeywords !== "") + writer.tag(6, WireType.LengthDelimited).string(message.searchKeywords); + /* bool use_search_as_roles = 7; */ + if (message.useSearchAsRoles !== false) + writer.tag(7, WireType.Varint).bool(message.useSearchAsRoles); + /* string kubernetes_cluster = 8; */ + if (message.kubernetesCluster !== "") + writer.tag(8, WireType.LengthDelimited).string(message.kubernetesCluster); + /* string kubernetes_namespace = 9; */ + if (message.kubernetesNamespace !== "") + writer.tag(9, WireType.LengthDelimited).string(message.kubernetesNamespace); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message teleport.lib.teleterm.v1.ListKubernetesResourcesRequest + */ +export const ListKubernetesResourcesRequest = new ListKubernetesResourcesRequest$Type(); +// @generated message type with reflection information, may provide speed optimized methods +class ListKubernetesResourcesResponse$Type extends MessageType { + constructor() { + super("teleport.lib.teleterm.v1.ListKubernetesResourcesResponse", [ + { no: 1, name: "resources", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => KubeResource }, + { no: 2, name: "next_key", kind: "scalar", T: 9 /*ScalarType.STRING*/ } + ]); + } + create(value?: PartialMessage): ListKubernetesResourcesResponse { + const message = globalThis.Object.create((this.messagePrototype!)); + message.resources = []; + message.nextKey = ""; + if (value !== undefined) + reflectionMergePartial(this, message, value); + return message; + } + internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ListKubernetesResourcesResponse): ListKubernetesResourcesResponse { + let message = target ?? this.create(), end = reader.pos + length; + while (reader.pos < end) { + let [fieldNo, wireType] = reader.tag(); + switch (fieldNo) { + case /* repeated teleport.lib.teleterm.v1.KubeResource resources */ 1: + message.resources.push(KubeResource.internalBinaryRead(reader, reader.uint32(), options)); + break; + case /* string next_key */ 2: + message.nextKey = reader.string(); + break; + default: + let u = options.readUnknownField; + if (u === "throw") + throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); + let d = reader.skip(wireType); + if (u !== false) + (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); + } + } + return message; + } + internalBinaryWrite(message: ListKubernetesResourcesResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { + /* repeated teleport.lib.teleterm.v1.KubeResource resources = 1; */ + for (let i = 0; i < message.resources.length; i++) + KubeResource.internalBinaryWrite(message.resources[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join(); + /* string next_key = 2; */ + if (message.nextKey !== "") + writer.tag(2, WireType.LengthDelimited).string(message.nextKey); + let u = options.writeUnknownFields; + if (u !== false) + (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); + return writer; + } +} +/** + * @generated MessageType for protobuf message teleport.lib.teleterm.v1.ListKubernetesResourcesResponse + */ +export const ListKubernetesResourcesResponse = new ListKubernetesResourcesResponse$Type(); +// @generated message type with reflection information, may provide speed optimized methods class CredentialInfo$Type extends MessageType { constructor() { super("teleport.lib.teleterm.v1.CredentialInfo", [ @@ -5563,6 +5804,7 @@ export const TerminalService = new ServiceType("teleport.lib.teleterm.v1.Termina { name: "AssumeRole", options: {}, I: AssumeRoleRequest, O: EmptyResponse }, { name: "PromoteAccessRequest", options: {}, I: PromoteAccessRequestRequest, O: PromoteAccessRequestResponse }, { name: "GetSuggestedAccessLists", options: {}, I: GetSuggestedAccessListsRequest, O: GetSuggestedAccessListsResponse }, + { name: "ListKubernetesResources", options: {}, I: ListKubernetesResourcesRequest, O: ListKubernetesResourcesResponse }, { name: "GetKubes", options: {}, I: GetKubesRequest, O: GetKubesResponse }, { name: "GetApps", options: {}, I: GetAppsRequest, O: GetAppsResponse }, { name: "AddCluster", options: {}, I: AddClusterRequest, O: Cluster }, diff --git a/lib/teleterm/api/uri/uri.go b/lib/teleterm/api/uri/uri.go index 7886bf478b59e..24901e9d164ca 100644 --- a/lib/teleterm/api/uri/uri.go +++ b/lib/teleterm/api/uri/uri.go @@ -32,6 +32,8 @@ var pathDbs = urlpath.New("/clusters/:cluster/dbs/:dbName") var pathLeafDbs = urlpath.New("/clusters/:cluster/leaves/:leaf/dbs/:dbName") var pathKubes = urlpath.New("/clusters/:cluster/kubes/:kubeName") var pathLeafKubes = urlpath.New("/clusters/:cluster/leaves/:leaf/kubes/:kubeName") +var pathKubeResourceNamespace = urlpath.New("/clusters/:cluster/kubes/:kubeName/namespaces/:kubeNamespaceName") +var pathLeafKubeResourceNamespace = urlpath.New("/clusters/:cluster/leaves/:leaf/kubes/:kubeName/namespaces/:kubeNamespaceName") var pathApps = urlpath.New("/clusters/:cluster/apps/:appName") var pathLeafApps = urlpath.New("/clusters/:cluster/leaves/:leaf/apps/:appName") @@ -122,6 +124,21 @@ func (r ResourceURI) GetKubeName() string { return "" } +// GetKubeResourceNamespace extracts the kube resource namespace from r. Returns an empty string if the path is not a kube resource URI. +func (r ResourceURI) GetKubeResourceNamespace() string { + result, ok := pathKubeResourceNamespace.Match(r.path) + if ok { + return result.Params["kubeNamespaceName"] + } + + result, ok = pathLeafKubeResourceNamespace.Match(r.path) + if ok { + return result.Params["kubeNamespaceName"] + } + + return "" +} + // GetAppName extracts the app name from r. Returns an empty string if the path is not an app URI. func (r ResourceURI) GetAppName() string { result, ok := pathApps.Match(r.path) @@ -189,6 +206,12 @@ func (r ResourceURI) AppendKube(name string) ResourceURI { return r } +// AppendKubeResourceNamespace appends kube resource namespace segment to the URI. +func (r ResourceURI) AppendKubeResourceNamespace(kubeNamespaceName string) ResourceURI { + r.path = fmt.Sprintf("%v/namespaces/%v", r.path, kubeNamespaceName) + return r +} + // AppendDB appends database segment to the URI func (r ResourceURI) AppendDB(name string) ResourceURI { r.path = fmt.Sprintf("%v/dbs/%v", r.path, name) diff --git a/lib/teleterm/api/uri/uri_test.go b/lib/teleterm/api/uri/uri_test.go index e7850e9b7ee36..5b6f9fa1838cb 100644 --- a/lib/teleterm/api/uri/uri_test.go +++ b/lib/teleterm/api/uri/uri_test.go @@ -44,6 +44,10 @@ func TestString(t *testing.T) { uri.NewClusterURI("teleport.sh").AppendDB("dbhost1"), "/clusters/teleport.sh/dbs/dbhost1", }, + { + uri.NewClusterURI("teleport.sh").AppendKube("kube-cluster-name").AppendKubeResourceNamespace("namespace-name"), + "/clusters/teleport.sh/kubes/kube-cluster-name/namespaces/namespace-name", + }, } for _, tt := range tests { @@ -176,6 +180,52 @@ func TestGetKubeName(t *testing.T) { } } +func TestGetKubeResourceNamespace(t *testing.T) { + tests := []struct { + name string + in uri.ResourceURI + out string + }{ + { + name: "returns root cluster namespace name", + in: uri.NewClusterURI("foo").AppendKube("k8s").AppendKubeResourceNamespace("default"), + out: "default", + }, + { + name: "returns leaf cluster namespace name", + in: uri.NewClusterURI("foo").AppendLeafCluster("bar").AppendKube("k8s").AppendKubeResourceNamespace("default"), + out: "default", + }, + { + name: "returns empty string when given root cluster URI", + in: uri.NewClusterURI("foo"), + out: "", + }, + { + name: "returns empty string when given leaf cluster URI", + in: uri.NewClusterURI("foo").AppendLeafCluster("bar"), + out: "", + }, + { + name: "returns empty string when given root cluster non-kube resource namespace URI", + in: uri.NewClusterURI("foo").AppendDB("postgres"), + out: "", + }, + { + name: "returns empty string when given leaf cluster non-kube resource namespace URI", + in: uri.NewClusterURI("foo").AppendLeafCluster("bar").AppendDB("postgres"), + out: "", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + out := tt.in.GetKubeResourceNamespace() + require.Equal(t, tt.out, out) + }) + } +} + func TestGetServerUUID(t *testing.T) { tests := []struct { name string diff --git a/lib/teleterm/apiserver/handler/handler_kubes.go b/lib/teleterm/apiserver/handler/handler_kubes.go index 3daa5371712d7..6642d49e19b71 100644 --- a/lib/teleterm/apiserver/handler/handler_kubes.go +++ b/lib/teleterm/apiserver/handler/handler_kubes.go @@ -24,8 +24,11 @@ import ( "github.com/gravitational/trace" + "github.com/gravitational/teleport/api/types" api "github.com/gravitational/teleport/gen/proto/go/teleport/lib/teleterm/v1" + "github.com/gravitational/teleport/lib/teleterm/api/uri" "github.com/gravitational/teleport/lib/teleterm/clusters" + "github.com/gravitational/teleport/lib/ui" ) // GetKubes accepts parameterized input to enable searching, sorting, and pagination @@ -46,6 +49,30 @@ func (s *Handler) GetKubes(ctx context.Context, req *api.GetKubesRequest) (*api. return response, nil } +// ListKubernetesResourcesRequest defines a request to retrieve kube resources paginated. +// Only one type of kube resource can be retrieved per request (eg: namespace, pods, secrets, etc.) +func (s *Handler) ListKubernetesResources(ctx context.Context, req *api.ListKubernetesResourcesRequest) (*api.ListKubernetesResourcesResponse, error) { + clusterURI, err := uri.Parse(req.GetClusterUri()) + if err != nil { + return nil, trace.Wrap(err) + } + + resp, err := s.DaemonService.ListKubernetesResources(ctx, clusterURI, req) + if err != nil { + return nil, trace.Wrap(err) + } + + response := &api.ListKubernetesResourcesResponse{ + NextKey: resp.NextKey, + } + + for _, kubeResource := range resp.Resources { + response.Resources = append(response.Resources, newApiKubeResource(kubeResource, req.GetKubernetesCluster(), clusterURI)) + } + + return response, nil +} + func newAPIKube(kube clusters.Kube) *api.Kube { apiLabels := APILabels{} for name, value := range kube.KubernetesCluster.GetStaticLabels() { @@ -70,3 +97,23 @@ func newAPIKube(kube clusters.Kube) *api.Kube { Labels: apiLabels, } } + +func newApiKubeResource(resource *types.KubernetesResourceV1, kubeCluster string, resourceURI uri.ResourceURI) *api.KubeResource { + uiLabels := ui.MakeLabelsWithoutInternalPrefixes(resource.GetStaticLabels()) + apiLabels := APILabels{} + for _, uiLabel := range uiLabels { + apiLabels = append(apiLabels, &api.Label{ + Name: uiLabel.Name, + Value: uiLabel.Value, + }) + } + + return &api.KubeResource{ + Uri: resourceURI.AppendKube(kubeCluster).AppendKubeResourceNamespace(resource.GetName()).String(), + Kind: resource.GetKind(), + Name: resource.GetName(), + Labels: apiLabels, + Namespace: resource.Spec.Namespace, + Cluster: kubeCluster, + } +} diff --git a/lib/teleterm/daemon/daemon.go b/lib/teleterm/daemon/daemon.go index 33b32f8eb37e2..67372edb19bbd 100644 --- a/lib/teleterm/daemon/daemon.go +++ b/lib/teleterm/daemon/daemon.go @@ -33,6 +33,7 @@ import ( "github.com/gravitational/teleport/api/client/proto" accesslistv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/accesslist/v1" devicepb "github.com/gravitational/teleport/api/gen/proto/go/teleport/devicetrust/v1" + kubeproto "github.com/gravitational/teleport/api/gen/proto/go/teleport/kube/v1" "github.com/gravitational/teleport/api/types" "github.com/gravitational/teleport/api/types/accesslist" api "github.com/gravitational/teleport/gen/proto/go/teleport/lib/teleterm/v1" @@ -813,6 +814,39 @@ func (s *Service) GetKubes(ctx context.Context, req *api.GetKubesRequest) (*clus return response, nil } +// ListKubernetesResourcesRequest defines a request to retrieve kube resources paginated. +// Only one type of kube resource can be retrieved per request (eg: namespace, pods, secrets, etc.) +func (s *Service) ListKubernetesResources(ctx context.Context, clusterURI uri.ResourceURI, req *api.ListKubernetesResourcesRequest) (*kubeproto.ListKubernetesResourcesResponse, error) { + cluster, tc, err := s.ResolveClusterURI(clusterURI) + if err != nil { + return nil, trace.Wrap(err) + } + + var resources *kubeproto.ListKubernetesResourcesResponse + + err = clusters.AddMetadataToRetryableError(ctx, func() error { + kubenetesServiceClient, err := tc.NewKubernetesServiceClient(ctx, cluster.Name) + if err != nil { + return trace.Wrap(err) + } + + resources, err = kubenetesServiceClient.ListKubernetesResources(ctx, &kubeproto.ListKubernetesResourcesRequest{ + ResourceType: req.GetResourceType(), + Limit: req.GetLimit(), + StartKey: req.GetNextKey(), + PredicateExpression: req.GetPredicateExpression(), + SearchKeywords: client.ParseSearchKeywords(req.GetSearchKeywords(), ' '), + UseSearchAsRoles: req.GetUseSearchAsRoles(), + KubernetesCluster: req.GetKubernetesCluster(), + KubernetesNamespace: req.GetKubernetesNamespace(), + TeleportCluster: cluster.Name, + }) + return trace.Wrap(err) + }) + + return resources, trace.Wrap(err) +} + func (s *Service) ReportUsageEvent(req *api.ReportUsageEventRequest) error { prehogEvent, err := usagereporter.GetAnonymizedPrehogEvent(req) if err != nil { diff --git a/lib/ui/labels.go b/lib/ui/labels.go new file mode 100644 index 0000000000000..1da4c91498064 --- /dev/null +++ b/lib/ui/labels.go @@ -0,0 +1,89 @@ +/* + * Teleport + * Copyright (C) 2024 Gravitational, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package ui + +import ( + "sort" + "strings" + + "github.com/gravitational/teleport/api/types" +) + +// Label describes label for webapp +type Label struct { + // Name is this label name + Name string `json:"name"` + // Value is this label value + Value string `json:"value"` +} + +// MakeLabelsWithoutInternalPrefixes is a function that transforms map[string]string arguments passed to it to sorted slice of Labels. +// It also removes all Teleport internal labels from output. +func MakeLabelsWithoutInternalPrefixes(labelMaps ...map[string]string) []Label { + length := 0 + for _, labelMap := range labelMaps { + length += len(labelMap) + } + + labels := make([]Label, 0, length) + + for _, labelMap := range labelMaps { + for name, value := range labelMap { + if strings.HasPrefix(name, types.TeleportInternalLabelPrefix) || + strings.HasPrefix(name, types.TeleportHiddenLabelPrefix) { + continue + } + + labels = append(labels, Label{Name: name, Value: value}) + } + } + + sort.Sort(sortedLabels(labels)) + + return labels +} + +// sortedLabels is a sort wrapper that sorts labels by name +type sortedLabels []Label + +func (s sortedLabels) Len() int { + return len(s) +} + +func (s sortedLabels) Less(i, j int) bool { + labelA := strings.ToLower(s[i].Name) + labelB := strings.ToLower(s[j].Name) + + for _, sortName := range types.BackSortedLabelPrefixes { + name := strings.ToLower(sortName) + if strings.Contains(labelA, name) && !strings.Contains(labelB, name) { + return false // labelA should be at the end + } + if !strings.Contains(labelA, name) && strings.Contains(labelB, name) { + return true // labelB should be at the end + } + } + + // If neither label contains any of the sendToBackOfSortNames, sort them as usual + return labelA < labelB +} + +func (s sortedLabels) Swap(i, j int) { + s[i], s[j] = s[j], s[i] +} diff --git a/lib/ui/labels_test.go b/lib/ui/labels_test.go new file mode 100644 index 0000000000000..e86704ccce794 --- /dev/null +++ b/lib/ui/labels_test.go @@ -0,0 +1,144 @@ +/* + * Teleport + * Copyright (C) 2023 Gravitational, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package ui + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestMakeLabels(t *testing.T) { + type testCase struct { + name string + labelMaps []map[string]string + expected []Label + } + + testCases := []testCase{ + { + name: "Single map single label case", + labelMaps: []map[string]string{ + { + "label1": "value1", + }, + }, + expected: []Label{ + { + Name: "label1", + Value: "value1", + }, + }, + }, + { + name: "Single map multiple labels case", + labelMaps: []map[string]string{ + { + "label1": "value1", + "label2": "value2", + }, + }, + expected: []Label{ + { + Name: "label1", + Value: "value1", + }, + { + Name: "label2", + Value: "value2", + }, + }, + }, + { + name: "Multiple maps single label case", + labelMaps: []map[string]string{ + { + "label1": "value1", + }, + { + "label2": "value2", + }, + }, + expected: []Label{ + { + Name: "label1", + Value: "value1", + }, + { + Name: "label2", + Value: "value2", + }, + }, + }, + { + name: "Multiple maps with internal labels", + labelMaps: []map[string]string{ + { + "label1": "value1", + "teleport.internal/label3": "value3", + }, + { + "label2": "value2", + "teleport.internal/label4": "value4", + }, + }, + expected: []Label{ + { + Name: "label1", + Value: "value1", + }, + { + Name: "label2", + Value: "value2", + }, + }, + }, + { + name: "Multiple maps with hidden labels", + labelMaps: []map[string]string{ + { + "label1": "value1", + "teleport.hidden/label3": "value3", + }, + { + "label2": "value2", + "teleport.hidden/label4": "value4", + }, + }, + expected: []Label{ + { + Name: "label1", + Value: "value1", + }, + { + Name: "label2", + Value: "value2", + }, + }, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + labels := MakeLabelsWithoutInternalPrefixes(tc.labelMaps...) + + require.Equal(t, tc.expected, labels) + }) + } +} diff --git a/lib/web/apiserver_test.go b/lib/web/apiserver_test.go index eb4cdbb9707d0..0e2b568f62fda 100644 --- a/lib/web/apiserver_test.go +++ b/lib/web/apiserver_test.go @@ -136,11 +136,12 @@ import ( "github.com/gravitational/teleport/lib/srv/transport/transportv1" "github.com/gravitational/teleport/lib/sshutils" "github.com/gravitational/teleport/lib/tlsca" + "github.com/gravitational/teleport/lib/ui" "github.com/gravitational/teleport/lib/utils" utilsaws "github.com/gravitational/teleport/lib/utils/aws" websession "github.com/gravitational/teleport/lib/web/session" "github.com/gravitational/teleport/lib/web/terminal" - "github.com/gravitational/teleport/lib/web/ui" + webui "github.com/gravitational/teleport/lib/web/ui" ) const hostID = "00000000-0000-0000-0000-000000000000" @@ -917,7 +918,7 @@ func TestWebSessionsCRUD(t *testing.T) { re, err := pack.clt.Get(context.Background(), pack.clt.Endpoint("webapi", "sites"), url.Values{}) require.NoError(t, err) - var clusters []ui.Cluster + var clusters []webui.Cluster require.NoError(t, json.Unmarshal(re.Bytes(), &clusters)) // now delete session @@ -1123,9 +1124,9 @@ func TestWebSessionsBadInput(t *testing.T) { } type clusterNodesGetResponse struct { - Items []ui.Server `json:"items"` - StartKey string `json:"startKey"` - TotalCount int `json:"totalCount"` + Items []webui.Server `json:"items"` + StartKey string `json:"startKey"` + TotalCount int `json:"totalCount"` } func TestClusterNodesGet(t *testing.T) { @@ -1161,7 +1162,7 @@ func TestClusterNodesGet(t *testing.T) { require.NoError(t, json.Unmarshal(re.Bytes(), &res)) require.Len(t, res.Items, 2) require.Equal(t, 2, res.TotalCount) - require.ElementsMatch(t, res.Items, []ui.Server{ + require.ElementsMatch(t, res.Items, []webui.Server{ { Kind: types.KindNode, SubKind: types.SubKindTeleportNode, @@ -1202,9 +1203,9 @@ func TestUserGroupsGet(t *testing.T) { pack := proxy.authPack(t, "test-user@example.com", nil /* roles */) type testResponse struct { - Items []ui.UserGroup `json:"items"` - StartKey string `json:"startKey"` - TotalCount int `json:"totalCount"` + Items []webui.UserGroup `json:"items"` + StartKey string `json:"startKey"` + TotalCount int `json:"totalCount"` } // add a user group @@ -1249,11 +1250,11 @@ func TestUserGroupsGet(t *testing.T) { require.NoError(t, json.Unmarshal(re.Bytes(), &resp)) require.Len(t, resp.Items, 1) require.Equal(t, 1, resp.TotalCount) - require.ElementsMatch(t, resp.Items, []ui.UserGroup{{ + require.ElementsMatch(t, resp.Items, []webui.UserGroup{{ Name: "ug1", Description: ug.GetMetadata().Description, Labels: []ui.Label{{Name: "test-field", Value: "test-value"}}, - Applications: []ui.ApplicationAndFriendlyName{ + Applications: []webui.ApplicationAndFriendlyName{ {Name: "appnameonly", FriendlyName: ""}, }, }}) @@ -1429,7 +1430,7 @@ func TestUnifiedResourcesGet(t *testing.T) { re, err = pack.clt.Get(context.Background(), endpoint, query) require.NoError(t, err) listResp := struct { - Items []ui.App `json:"Items"` + Items []webui.App `json:"Items"` }{} require.NoError(t, json.Unmarshal(re.Bytes(), &listResp)) require.Len(t, listResp.Items, 1) @@ -2658,7 +2659,7 @@ func TestLogin(t *testing.T) { re, err := clt.Get(s.ctx, clt.Endpoint("webapi", "sites"), url.Values{}) require.NoError(t, err) - var clusters []ui.Cluster + var clusters []webui.Cluster require.NoError(t, json.Unmarshal(re.Bytes(), &clusters)) // in absence of session cookie or bearer auth the same request fill fail @@ -3306,7 +3307,7 @@ func TestGetClusterDetails(t *testing.T) { require.NoError(t, err) require.NotNil(t, site) - cluster, err := ui.GetClusterDetails(s.ctx, site) + cluster, err := webui.GetClusterDetails(s.ctx, site) require.NoError(t, err) require.Equal(t, s.server.ClusterName(), cluster.Name) require.Equal(t, teleport.Version, cluster.ProxyVersion) @@ -4025,8 +4026,8 @@ func TestClusterDatabasesGet_NoRole(t *testing.T) { endpoint := pack.clt.Endpoint("webapi", "sites", env.server.ClusterName(), "databases") type testResponse struct { - Items []ui.Database `json:"items"` - TotalCount int `json:"totalCount"` + Items []webui.Database `json:"items"` + TotalCount int `json:"totalCount"` } // add db @@ -4059,7 +4060,7 @@ func TestClusterDatabasesGet_NoRole(t *testing.T) { resp := testResponse{} require.NoError(t, json.Unmarshal(re.Bytes(), &resp)) require.Len(t, resp.Items, 1) - require.ElementsMatch(t, resp.Items, []ui.Database{{ + require.ElementsMatch(t, resp.Items, []webui.Database{{ Kind: types.KindDatabase, Name: "dbdb", Type: types.DatabaseTypeSelfHosted, @@ -4076,8 +4077,8 @@ func TestClusterDatabasesGet_WithRole(t *testing.T) { proxy := env.proxies[0] type testResponse struct { - Items []ui.Database `json:"items"` - TotalCount int `json:"totalCount"` + Items []webui.Database `json:"items"` + TotalCount int `json:"totalCount"` } // Register databases. @@ -4185,20 +4186,20 @@ func TestClusterKubesGet(t *testing.T) { require.NoError(t, err) type testResponse struct { - Items []ui.KubeCluster `json:"items"` - TotalCount int `json:"totalCount"` + Items []webui.KubeCluster `json:"items"` + TotalCount int `json:"totalCount"` } tt := []struct { name string user string extraRoles services.RoleSet - expectedResponse []ui.KubeCluster + expectedResponse []webui.KubeCluster }{ { name: "user with no extra roles", user: "test-user@example.com", - expectedResponse: []ui.KubeCluster{ + expectedResponse: []webui.KubeCluster{ { Name: "test-kube1", Labels: []ui.Label{{Name: "test-field", Value: "test-value"}}, @@ -4217,7 +4218,7 @@ func TestClusterKubesGet(t *testing.T) { name: "user with extra roles", user: "test-user2@example.com", extraRoles: services.NewRoleSet(extraRole), - expectedResponse: []ui.KubeCluster{ + expectedResponse: []webui.KubeCluster{ { Name: "test-kube1", Labels: []ui.Label{{Name: "test-field", Value: "test-value"}}, @@ -4284,8 +4285,8 @@ func TestClusterKubeResourcesGet(t *testing.T) { env := newWebPack(t, 1) type testResponse struct { - Items []ui.KubeResource `json:"items"` - TotalCount int `json:"totalCount"` + Items []webui.KubeResource `json:"items"` + TotalCount int `json:"totalCount"` } tt := []struct { @@ -4293,14 +4294,14 @@ func TestClusterKubeResourcesGet(t *testing.T) { user string kind string kubeCluster string - expectedResponse []ui.KubeResource + expectedResponse []webui.KubeResource wantErr bool }{ { name: "get pods from gRPC server", kind: types.KindKubePod, kubeCluster: kubeClusterName, - expectedResponse: []ui.KubeResource{ + expectedResponse: []webui.KubeResource{ { Kind: types.KindKubePod, Name: "test-pod", @@ -4321,7 +4322,7 @@ func TestClusterKubeResourcesGet(t *testing.T) { name: "get namespaces", kind: types.KindKubeNamespace, kubeCluster: kubeClusterName, - expectedResponse: []ui.KubeResource{ + expectedResponse: []webui.KubeResource{ { Kind: types.KindKubeNamespace, Name: "default", @@ -4396,8 +4397,8 @@ func TestClusterAppsGet(t *testing.T) { pack := proxy.authPack(t, "test-user@example.com", nil /* roles */) type testResponse struct { - Items []ui.App `json:"items"` - TotalCount int `json:"totalCount"` + Items []webui.App `json:"items"` + TotalCount int `json:"totalCount"` } // add a user group @@ -4455,7 +4456,7 @@ func TestClusterAppsGet(t *testing.T) { require.NoError(t, json.Unmarshal(re.Bytes(), &resp)) require.Len(t, resp.Items, 2) require.Equal(t, 2, resp.TotalCount) - require.ElementsMatch(t, resp.Items, []ui.App{{ + require.ElementsMatch(t, resp.Items, []webui.App{{ Kind: types.KindApp, Name: "app1", Description: resource.Spec.App.GetDescription(), @@ -4465,7 +4466,7 @@ func TestClusterAppsGet(t *testing.T) { FQDN: resource.Spec.App.GetPublicAddr(), ClusterID: env.server.ClusterName(), AWSConsole: true, - UserGroups: []ui.UserGroupAndDescription{{Name: "ug1", Description: "ug1-description"}}, + UserGroups: []webui.UserGroupAndDescription{{Name: "ug1", Description: "ug1-description"}}, }, { Kind: types.KindApp, Name: "app2", @@ -5067,7 +5068,7 @@ func TestGetMFADevicesWithAuth(t *testing.T) { re, err := pack.clt.Get(context.Background(), endpoint, url.Values{}) require.NoError(t, err) - var devices []ui.MFADevice + var devices []webui.MFADevice err = json.Unmarshal(re.Bytes(), &devices) require.NoError(t, err) require.Len(t, devices, 1) @@ -5110,7 +5111,7 @@ func TestGetAndDeleteMFADevices_WithRecoveryApprovedToken(t *testing.T) { res, err := clt.Get(ctx, getDevicesEndpoint, url.Values{}) require.NoError(t, err) - var devices []ui.MFADevice + var devices []webui.MFADevice err = json.Unmarshal(res.Bytes(), &devices) require.NoError(t, err) require.Len(t, devices, 1) @@ -5950,7 +5951,7 @@ func TestChangeUserAuthentication_WithPrivacyPolicyEnabledError(t *testing.T) { })) require.NoError(t, err) - var apiRes ui.ChangedUserAuthn + var apiRes webui.ChangedUserAuthn require.NoError(t, json.Unmarshal(httpRes.Bytes(), &apiRes)) require.Len(t, apiRes.Recovery.Codes, 3) require.NotEmpty(t, apiRes.Recovery.Created) @@ -6187,8 +6188,8 @@ func TestClusterDesktopsGet(t *testing.T) { pack := proxy.authPack(t, "test-user@example.com", nil /* roles */) type testResponse struct { - Items []ui.Desktop `json:"items"` - TotalCount int `json:"totalCount"` + Items []webui.Desktop `json:"items"` + TotalCount int `json:"totalCount"` } // Add a few desktops. @@ -6219,7 +6220,7 @@ func TestClusterDesktopsGet(t *testing.T) { require.NoError(t, json.Unmarshal(re.Bytes(), &resp)) require.Len(t, resp.Items, 2) require.Equal(t, 2, resp.TotalCount) - require.ElementsMatch(t, resp.Items, []ui.Desktop{{ + require.ElementsMatch(t, resp.Items, []webui.Desktop{{ Kind: types.KindWindowsDesktop, OS: constants.WindowsOS, Name: "desktop1", @@ -6356,7 +6357,7 @@ func TestListConnectionsDiagnostic(t *testing.T) { require.NoError(t, err) require.Equal(t, http.StatusOK, resp.Code()) - var receivedConnectionDiagnostic ui.ConnectionDiagnostic + var receivedConnectionDiagnostic webui.ConnectionDiagnostic require.NoError(t, json.Unmarshal(resp.Bytes(), &receivedConnectionDiagnostic)) require.True(t, receivedConnectionDiagnostic.Success) @@ -6669,7 +6670,7 @@ func TestDiagnoseSSHConnection(t *testing.T) { require.NoError(t, err) require.Equal(t, http.StatusOK, resp.Code()) - var connectionDiagnostic ui.ConnectionDiagnostic + var connectionDiagnostic webui.ConnectionDiagnostic require.NoError(t, json.Unmarshal(resp.Bytes(), &connectionDiagnostic)) gotFailedTraces := 0 @@ -6739,7 +6740,7 @@ func TestDiagnoseSSHConnection(t *testing.T) { require.NoError(t, err) require.Equal(t, http.StatusOK, resp.Code()) - var connectionDiagnostic ui.ConnectionDiagnostic + var connectionDiagnostic webui.ConnectionDiagnostic require.NoError(t, json.Unmarshal(resp.Bytes(), &connectionDiagnostic)) require.True(t, connectionDiagnostic.Success) } @@ -7158,7 +7159,7 @@ func TestDiagnoseKubeConnection(t *testing.T) { require.NoError(t, err) require.Equal(t, http.StatusOK, resp.Code()) - var connectionDiagnostic ui.ConnectionDiagnostic + var connectionDiagnostic webui.ConnectionDiagnostic require.NoError(t, json.Unmarshal(resp.Bytes(), &connectionDiagnostic)) gotFailedTraces := 0 expectedFailedTraces := 0 @@ -7231,7 +7232,7 @@ func TestDiagnoseKubeConnection(t *testing.T) { require.NoError(t, err) require.Equal(t, http.StatusOK, resp.Code()) - var connectionDiagnostic ui.ConnectionDiagnostic + var connectionDiagnostic webui.ConnectionDiagnostic require.NoError(t, json.Unmarshal(resp.Bytes(), &connectionDiagnostic)) require.True(t, connectionDiagnostic.Success) } @@ -7401,9 +7402,9 @@ func TestCreateDatabase(t *testing.T) { // Check response value: if tt.expectedStatus == http.StatusOK { - result := ui.Database{} + result := webui.Database{} require.NoError(t, json.Unmarshal(resp.Bytes(), &result)) - expected := ui.Database{ + expected := webui.Database{ Kind: types.KindDatabase, Name: tt.req.Name, Protocol: tt.req.Protocol, @@ -7456,7 +7457,7 @@ func TestOverwriteDatabase(t *testing.T) { verifyResponse: func(t *testing.T, resp *roundtrip.Response, req createOrOverwriteDatabaseRequest, err error) { require.NoError(t, err) - var gotDb ui.Database + var gotDb webui.Database require.NoError(t, json.Unmarshal(resp.Bytes(), &gotDb)) require.Equal(t, req.URI, gotDb.URI) require.Equal(t, req.Protocol, gotDb.Protocol) @@ -7465,7 +7466,7 @@ func TestOverwriteDatabase(t *testing.T) { backendDb, err := env.server.Auth().GetDatabase(context.Background(), req.Name) require.NoError(t, err) - require.Equal(t, ui.MakeDatabase(backendDb, nil, nil, false), gotDb) + require.Equal(t, webui.MakeDatabase(backendDb, nil, nil, false), gotDb) }, }, { @@ -7634,7 +7635,7 @@ func TestUpdateDatabase_NonErrors(t *testing.T) { for _, tt := range []struct { name string req updateDatabaseRequest - expectedFields ui.Database + expectedFields webui.Database expectedAWSRDS awsRDS }{ { @@ -7642,7 +7643,7 @@ func TestUpdateDatabase_NonErrors(t *testing.T) { req: updateDatabaseRequest{ CACert: &fakeValidTLSCert, }, - expectedFields: ui.Database{ + expectedFields: webui.Database{ Kind: types.KindDatabase, Name: databaseName, Protocol: dbProtocol, @@ -7657,7 +7658,7 @@ func TestUpdateDatabase_NonErrors(t *testing.T) { req: updateDatabaseRequest{ URI: "something-else:3306", }, - expectedFields: ui.Database{ + expectedFields: webui.Database{ Kind: types.KindDatabase, Name: databaseName, Protocol: dbProtocol, @@ -7680,7 +7681,7 @@ func TestUpdateDatabase_NonErrors(t *testing.T) { AccountID: "123123123123", ResourceID: "db-1234", }, - expectedFields: ui.Database{ + expectedFields: webui.Database{ Kind: types.KindDatabase, Name: databaseName, Protocol: dbProtocol, @@ -7688,7 +7689,7 @@ func TestUpdateDatabase_NonErrors(t *testing.T) { Hostname: "llama.cgi8.us-west-2.rds.amazonaws.com", Labels: []ui.Label{requiredOriginLabel}, URI: "llama.cgi8.us-west-2.rds.amazonaws.com:3306", - AWS: &ui.AWS{ + AWS: &webui.AWS{ AWS: types.AWS{ Region: "us-west-2", AccountID: "123123123123", @@ -7709,7 +7710,7 @@ func TestUpdateDatabase_NonErrors(t *testing.T) { AccountID: "123123123123", ResourceID: "db-1234", }, - expectedFields: ui.Database{ + expectedFields: webui.Database{ Kind: types.KindDatabase, Name: databaseName, Protocol: dbProtocol, @@ -7717,7 +7718,7 @@ func TestUpdateDatabase_NonErrors(t *testing.T) { Hostname: "llama.cgi8.us-west-2.rds.amazonaws.com", Labels: []ui.Label{{Name: "env", Value: "prod"}, requiredOriginLabel}, URI: "llama.cgi8.us-west-2.rds.amazonaws.com:3306", - AWS: &ui.AWS{ + AWS: &webui.AWS{ AWS: types.AWS{ Region: "us-west-2", AccountID: "123123123123", @@ -7742,7 +7743,7 @@ func TestUpdateDatabase_NonErrors(t *testing.T) { AccountID: "000000000000", ResourceID: "db-0000", }, - expectedFields: ui.Database{ + expectedFields: webui.Database{ Kind: types.KindDatabase, Name: databaseName, Protocol: dbProtocol, @@ -7750,7 +7751,7 @@ func TestUpdateDatabase_NonErrors(t *testing.T) { Hostname: "alpaca.cgi8.us-east-1.rds.amazonaws.com", Labels: []ui.Label{{Name: "env", Value: "prod"}, requiredOriginLabel}, URI: "alpaca.cgi8.us-east-1.rds.amazonaws.com:3306", - AWS: &ui.AWS{ + AWS: &webui.AWS{ AWS: types.AWS{ Region: "us-east-1", AccountID: "000000000000", @@ -7767,7 +7768,7 @@ func TestUpdateDatabase_NonErrors(t *testing.T) { updateDatabaseEndpoint := pack.clt.Endpoint("webapi", "sites", clusterName, "databases", databaseName) resp, err := pack.clt.PutJSON(ctx, updateDatabaseEndpoint, tt.req) require.NoError(t, err) - var dbResp ui.Database + var dbResp webui.Database require.NoError(t, json.Unmarshal(resp.Bytes(), &dbResp)) require.Equal(t, tt.expectedFields, dbResp) @@ -8717,7 +8718,7 @@ func TestUserContextWithAccessRequest(t *testing.T) { require.NoError(t, err) // Process the JSON response of the request. - var userContext ui.UserContext + var userContext webui.UserContext err = json.Unmarshal(response.Bytes(), &userContext) require.NoError(t, err) @@ -9381,7 +9382,7 @@ func TestForwardingTraces(t *testing.T) { recorder := httptest.NewRecorder() // use the handler directly because there is no easy way to pipe in our tracing - // data using the pack client in a format that would match the ui. + // data using the pack client in a format that would match the webui. _, err := p.handler.handler.traces(recorder, tt.req(t), nil, nil) // if traces weren't uploaded perform the assertion @@ -9442,7 +9443,7 @@ func TestLogout(t *testing.T) { // ensure the client is authenticated re, err := pack.clt.Get(ctx, pack.clt.Endpoint("webapi", "sites"), url.Values{}) require.NoError(t, err) - var clusters []ui.Cluster + var clusters []webui.Cluster require.NoError(t, json.Unmarshal(re.Bytes(), &clusters)) require.Len(t, clusters, 1) @@ -9800,7 +9801,7 @@ func TestGetKubeExecClusterData(t *testing.T) { // create multiple SessionContext for a user+session. Since only one SessionContext // is stored in the sessionCache all previous SessionContext and their underlying // auth client get closed, which results in an ugly and unfriendly -// `grpc: the client connection is closing` error banner on the web UI. +// `grpc: the client connection is closing` error banner on the web webui. func TestSimultaneousAuthenticateRequest(t *testing.T) { ctx := context.Background() env := newWebPack(t, 1) @@ -10260,11 +10261,11 @@ func TestGithubConnector(t *testing.T) { }) require.NoError(t, err, "creating initial connector resource") - createPayload := func(connector types.GithubConnector) ui.ResourceItem { + createPayload := func(connector types.GithubConnector) webui.ResourceItem { raw, err := services.MarshalGithubConnector(connector, services.PreserveRevision()) require.NoError(t, err, "marshaling connector") - return ui.ResourceItem{ + return webui.ResourceItem{ Kind: types.KindGithubConnector, Name: connector.GetName(), Content: string(raw), @@ -10272,7 +10273,7 @@ func TestGithubConnector(t *testing.T) { } unmarshalResponse := func(resp []byte) types.GithubConnector { - var item ui.ResourceItem + var item webui.ResourceItem require.NoError(t, json.Unmarshal(resp, &item), "response from server contained an invalid resource item") var conn types.GithubConnectorV3 @@ -10334,7 +10335,7 @@ func TestGithubConnector(t *testing.T) { resp, err = pack.clt.Get(ctx, pack.clt.Endpoint("webapi", "github"), nil) assert.NoError(t, err, "unexpected error listing github connectors") - var item []ui.ResourceItem + var item []webui.ResourceItem require.NoError(t, json.Unmarshal(resp.Bytes(), &item), "invalid resource item received") assert.Empty(t, item) diff --git a/lib/web/databases.go b/lib/web/databases.go index 56b3fa6ef3363..74aa16fe524e8 100644 --- a/lib/web/databases.go +++ b/lib/web/databases.go @@ -40,9 +40,10 @@ import ( "github.com/gravitational/teleport/lib/reversetunnelclient" "github.com/gravitational/teleport/lib/services" dbiam "github.com/gravitational/teleport/lib/srv/db/common/iam" + "github.com/gravitational/teleport/lib/ui" "github.com/gravitational/teleport/lib/utils" "github.com/gravitational/teleport/lib/web/scripts" - "github.com/gravitational/teleport/lib/web/ui" + webui "github.com/gravitational/teleport/lib/web/ui" ) // createOrOverwriteDatabaseRequest contains the necessary basic information @@ -145,7 +146,7 @@ func (h *Handler) handleDatabaseCreateOrOverwrite(w http.ResponseWriter, r *http return nil, trace.Wrap(err) } - return ui.MakeDatabase(database, dbUsers, dbNames, false /* requiresRequest */), nil + return webui.MakeDatabase(database, dbUsers, dbNames, false /* requiresRequest */), nil } // updateDatabaseRequest contains some updatable fields of a database resource. @@ -253,7 +254,7 @@ func (h *Handler) handleDatabasePartialUpdate(w http.ResponseWriter, r *http.Req return nil, trace.Wrap(err) } - return ui.MakeDatabase(database, nil /* dbUsers */, nil /* dbNames */, false /* requiresRequest */), nil + return webui.MakeDatabase(database, nil /* dbUsers */, nil /* dbNames */, false /* requiresRequest */), nil } // databaseIAMPolicyResponse is the response type for handleDatabaseGetIAMPolicy. diff --git a/lib/web/join_tokens.go b/lib/web/join_tokens.go index 7dcd657857ab4..21885732b8c85 100644 --- a/lib/web/join_tokens.go +++ b/lib/web/join_tokens.go @@ -47,9 +47,10 @@ import ( "github.com/gravitational/teleport/lib/modules" "github.com/gravitational/teleport/lib/services" "github.com/gravitational/teleport/lib/tlsca" + "github.com/gravitational/teleport/lib/ui" "github.com/gravitational/teleport/lib/utils" "github.com/gravitational/teleport/lib/web/scripts" - "github.com/gravitational/teleport/lib/web/ui" + webui "github.com/gravitational/teleport/lib/web/ui" ) const ( @@ -101,7 +102,7 @@ func automaticUpgrades(features proto.Features) bool { // GetTokensResponse returns a list of JoinTokens. type GetTokensResponse struct { - Items []ui.JoinToken `json:"items"` + Items []webui.JoinToken `json:"items"` } func (h *Handler) getTokens(w http.ResponseWriter, r *http.Request, params httprouter.Params, ctx *SessionContext) (interface{}, error) { @@ -115,7 +116,7 @@ func (h *Handler) getTokens(w http.ResponseWriter, r *http.Request, params httpr return nil, trace.Wrap(err) } - uiTokens, err := ui.MakeJoinTokens(tokens) + uiTokens, err := webui.MakeJoinTokens(tokens) if err != nil { return nil, trace.Wrap(err) } @@ -182,7 +183,7 @@ func (h *Handler) updateTokenYAML(w http.ResponseWriter, r *http.Request, params return nil, trace.Wrap(err) } - uiToken, err := ui.MakeJoinToken(token) + uiToken, err := webui.MakeJoinToken(token) if err != nil { return nil, trace.Wrap(err) } @@ -245,7 +246,7 @@ func (h *Handler) upsertTokenHandle(w http.ResponseWriter, r *http.Request, para return nil, trace.Wrap(err) } - uiToken, err := ui.MakeJoinToken(token) + uiToken, err := webui.MakeJoinToken(token) if err != nil { return nil, trace.Wrap(err) } diff --git a/lib/web/servers.go b/lib/web/servers.go index da7a4d75ccb3a..f9017e8f8e0e3 100644 --- a/lib/web/servers.go +++ b/lib/web/servers.go @@ -30,7 +30,8 @@ import ( "github.com/gravitational/teleport/lib/httplib" "github.com/gravitational/teleport/lib/reversetunnelclient" "github.com/gravitational/teleport/lib/services" - "github.com/gravitational/teleport/lib/web/ui" + "github.com/gravitational/teleport/lib/ui" + webui "github.com/gravitational/teleport/lib/web/ui" ) // clusterKubesGet returns a list of kube clusters in a form the UI can present. @@ -56,7 +57,7 @@ func (h *Handler) clusterKubesGet(w http.ResponseWriter, r *http.Request, p http } return listResourcesGetResponse{ - Items: ui.MakeKubeClusters(page.Resources, accessChecker), + Items: webui.MakeKubeClusters(page.Resources, accessChecker), StartKey: page.NextKey, TotalCount: page.Total, }, nil @@ -90,7 +91,7 @@ func (h *Handler) clusterKubeResourcesGet(w http.ResponseWriter, r *http.Request } return listResourcesGetResponse{ - Items: ui.MakeKubeResources(resp.Resources, kubeCluster), + Items: webui.MakeKubeResources(resp.Resources, kubeCluster), StartKey: resp.NextKey, TotalCount: int(resp.TotalCount), }, nil @@ -130,7 +131,7 @@ func (h *Handler) clusterDatabasesGet(w http.ResponseWriter, r *http.Request, p } return listResourcesGetResponse{ - Items: ui.MakeDatabases(databases, dbUsers, dbNames), + Items: webui.MakeDatabases(databases, dbUsers, dbNames), StartKey: page.NextKey, TotalCount: page.Total, }, nil @@ -163,7 +164,7 @@ func (h *Handler) clusterDatabaseGet(w http.ResponseWriter, r *http.Request, p h return nil, trace.Wrap(err) } - return ui.MakeDatabase(database, dbUsers, dbNames, false /* requiresRequest */), nil + return webui.MakeDatabase(database, dbUsers, dbNames, false /* requiresRequest */), nil } // clusterDatabaseServicesList returns a list of DatabaseServices (database agents) in a form the UI can present. @@ -184,7 +185,7 @@ func (h *Handler) clusterDatabaseServicesList(w http.ResponseWriter, r *http.Req } return listResourcesGetResponse{ - Items: ui.MakeDatabaseServices(page.Resources), + Items: webui.MakeDatabaseServices(page.Resources), StartKey: page.NextKey, TotalCount: page.Total, }, nil @@ -212,7 +213,7 @@ func (h *Handler) clusterDesktopsGet(w http.ResponseWriter, r *http.Request, p h return nil, trace.Wrap(err) } - uiDesktops := make([]ui.Desktop, 0, len(page.Resources)) + uiDesktops := make([]webui.Desktop, 0, len(page.Resources)) for _, r := range page.Resources { desktop, ok := r.ResourceWithLabels.(types.WindowsDesktop) if !ok { @@ -224,7 +225,7 @@ func (h *Handler) clusterDesktopsGet(w http.ResponseWriter, r *http.Request, p h return nil, trace.Wrap(err) } - uiDesktops = append(uiDesktops, ui.MakeDesktop(desktop, logins, false /* requiresRequest */)) + uiDesktops = append(uiDesktops, webui.MakeDesktop(desktop, logins, false /* requiresRequest */)) } return listResourcesGetResponse{ @@ -254,7 +255,7 @@ func (h *Handler) clusterDesktopServicesGet(w http.ResponseWriter, r *http.Reque } return listResourcesGetResponse{ - Items: ui.MakeDesktopServices(page.Resources), + Items: webui.MakeDesktopServices(page.Resources), StartKey: page.NextKey, TotalCount: page.Total, }, nil @@ -292,7 +293,7 @@ func (h *Handler) getDesktopHandle(w http.ResponseWriter, r *http.Request, p htt return nil, trace.Wrap(err) } - return ui.MakeDesktop(desktop, logins, false /* requiresRequest */), nil + return webui.MakeDesktop(desktop, logins, false /* requiresRequest */), nil } // desktopIsActive checks if a desktop has an active session and returns a desktopIsActive. @@ -367,12 +368,12 @@ type desktopIsActive struct { // createNodeRequest contains the required information to create a Node. type createNodeRequest struct { - Name string `json:"name,omitempty"` - SubKind string `json:"subKind,omitempty"` - Hostname string `json:"hostname,omitempty"` - Addr string `json:"addr,omitempty"` - Labels []ui.Label `json:"labels,omitempty"` - AWSInfo *ui.AWSMetadata `json:"aws,omitempty"` + Name string `json:"name,omitempty"` + SubKind string `json:"subKind,omitempty"` + Hostname string `json:"hostname,omitempty"` + Addr string `json:"addr,omitempty"` + Labels []ui.Label `json:"labels,omitempty"` + AWSInfo *webui.AWSMetadata `json:"aws,omitempty"` } func (r *createNodeRequest) checkAndSetDefaults() error { @@ -460,5 +461,5 @@ func (h *Handler) handleNodeCreate(w http.ResponseWriter, r *http.Request, p htt return nil, trace.Wrap(err) } - return ui.MakeServer(site.GetName(), server, logins, false /* requiresRequest */), nil + return webui.MakeServer(site.GetName(), server, logins, false /* requiresRequest */), nil } diff --git a/lib/web/servers_test.go b/lib/web/servers_test.go index 98c1a0937cfa1..454c59c559f67 100644 --- a/lib/web/servers_test.go +++ b/lib/web/servers_test.go @@ -29,7 +29,8 @@ import ( "github.com/gravitational/teleport/api/types" "github.com/gravitational/teleport/lib/services" - "github.com/gravitational/teleport/lib/web/ui" + "github.com/gravitational/teleport/lib/ui" + webui "github.com/gravitational/teleport/lib/web/ui" ) func TestCreateNode(t *testing.T) { @@ -47,7 +48,7 @@ func TestCreateNode(t *testing.T) { Hostname: "myhostname", Addr: "172.31.1.1:22", Labels: []ui.Label{}, - AWSInfo: &ui.AWSMetadata{ + AWSInfo: &webui.AWSMetadata{ AccountID: "123456789012", InstanceID: "i-123", Region: "us-east-1", diff --git a/lib/web/ui/app.go b/lib/web/ui/app.go index 6439ae7f56193..e77958486b729 100644 --- a/lib/web/ui/app.go +++ b/lib/web/ui/app.go @@ -25,6 +25,7 @@ import ( "github.com/sirupsen/logrus" "github.com/gravitational/teleport/api/types" + "github.com/gravitational/teleport/lib/ui" "github.com/gravitational/teleport/lib/utils" "github.com/gravitational/teleport/lib/utils/aws" ) @@ -46,7 +47,7 @@ type App struct { // ClusterID is this app cluster ID ClusterID string `json:"clusterId"` // Labels is a map of static labels associated with an application. - Labels []Label `json:"labels"` + Labels []ui.Label `json:"labels"` // AWSConsole if true, indicates that the app represents AWS management console. AWSConsole bool `json:"awsConsole"` // AWSRoles is a list of AWS IAM roles for the application representing AWS console. @@ -100,7 +101,7 @@ type MakeAppsConfig struct { // MakeApp creates an application object for the WebUI. func MakeApp(app types.Application, c MakeAppsConfig) App { - labels := makeLabels(app.GetAllLabels()) + labels := ui.MakeLabelsWithoutInternalPrefixes(app.GetAllLabels()) fqdn := utils.AssembleAppFQDN(c.LocalClusterName, c.LocalProxyDNSName, c.AppClusterName, app) var ugs types.UserGroups for _, userGroupName := range app.GetUserGroups() { @@ -159,7 +160,7 @@ func MakeApp(app types.Application, c MakeAppsConfig) App { // Note: The SAMLAppPreset field is used in SAML service provider update flow in the // Web UI. Thus, this field is currently not available in the Connect App type. func MakeAppTypeFromSAMLApp(app types.SAMLIdPServiceProvider, c MakeAppsConfig) App { - labels := makeLabels(app.GetAllLabels()) + labels := ui.MakeLabelsWithoutInternalPrefixes(app.GetAllLabels()) resultApp := App{ Kind: types.KindApp, Name: app.GetName(), @@ -183,7 +184,7 @@ func MakeApps(c MakeAppsConfig) []App { if appOrSP.IsAppServer() { app := appOrSP.GetAppServer().GetApp() fqdn := utils.AssembleAppFQDN(c.LocalClusterName, c.LocalProxyDNSName, c.AppClusterName, app) - labels := makeLabels(app.GetAllLabels()) + labels := ui.MakeLabelsWithoutInternalPrefixes(app.GetAllLabels()) userGroups := c.AppsToUserGroups[app.GetName()] @@ -218,7 +219,7 @@ func MakeApps(c MakeAppsConfig) []App { result = append(result, resultApp) } else { - labels := makeLabels(appOrSP.GetSAMLIdPServiceProvider().GetAllLabels()) + labels := ui.MakeLabelsWithoutInternalPrefixes(appOrSP.GetSAMLIdPServiceProvider().GetAllLabels()) resultApp := App{ Kind: types.KindApp, Name: appOrSP.GetName(), diff --git a/lib/web/ui/app_test.go b/lib/web/ui/app_test.go index 2b5a7398d7df2..9c3be45847f23 100644 --- a/lib/web/ui/app_test.go +++ b/lib/web/ui/app_test.go @@ -25,6 +25,7 @@ import ( "github.com/stretchr/testify/require" "github.com/gravitational/teleport/api/types" + "github.com/gravitational/teleport/lib/ui" ) func TestMakeAppsLabelFilter(t *testing.T) { @@ -49,7 +50,7 @@ func TestMakeAppsLabelFilter(t *testing.T) { expected: []App{ { Name: "App1", - Labels: []Label{ + Labels: []ui.Label{ { Name: "first", Value: "value1", @@ -101,7 +102,7 @@ func TestMakeApps(t *testing.T) { URI: "1.com", PublicAddr: "1.com", FQDN: "1.com", - Labels: []Label{{Name: "label1", Value: "value1"}}, + Labels: []ui.Label{{Name: "label1", Value: "value1"}}, UserGroups: []UserGroupAndDescription{}, }, { @@ -111,7 +112,7 @@ func TestMakeApps(t *testing.T) { URI: "2.com", PublicAddr: "2.com", FQDN: "2.com", - Labels: []Label{ + Labels: []ui.Label{ {Name: "label2", Value: "value2"}, {Name: types.OriginLabel, Value: types.OriginOkta}, }, @@ -148,7 +149,7 @@ func TestMakeApps(t *testing.T) { URI: "1.com", PublicAddr: "1.com", FQDN: "1.com", - Labels: []Label{{Name: "label1", Value: "value1"}}, + Labels: []ui.Label{{Name: "label1", Value: "value1"}}, UserGroups: []UserGroupAndDescription{ {Name: "group1", Description: "group1 desc"}, {Name: "group2", Description: "group2 desc"}, @@ -161,7 +162,7 @@ func TestMakeApps(t *testing.T) { URI: "2.com", PublicAddr: "2.com", FQDN: "2.com", - Labels: []Label{ + Labels: []ui.Label{ {Name: "label2", Value: "value2"}, {Name: types.OriginLabel, Value: types.OriginOkta}, }, @@ -188,7 +189,7 @@ func TestMakeApps(t *testing.T) { Name: "grafana_saml", Description: "SAML Application", PublicAddr: "", - Labels: []Label{}, + Labels: []ui.Label{}, SAMLApp: true, }, }, @@ -247,7 +248,7 @@ func TestMakeAppTypeFromSAMLApp(t *testing.T) { Name: "test_app", Description: "SAML Application", PublicAddr: "", - Labels: []Label{}, + Labels: []ui.Label{}, SAMLApp: true, SAMLAppPreset: "unspecified", }, @@ -269,7 +270,7 @@ func TestMakeAppTypeFromSAMLApp(t *testing.T) { Name: "test_app", Description: "SAML Application", PublicAddr: "", - Labels: []Label{}, + Labels: []ui.Label{}, SAMLApp: true, SAMLAppPreset: "test_preset", }, diff --git a/lib/web/ui/integration.go b/lib/web/ui/integration.go index c31a3ce5f5d45..6ec40951d786d 100644 --- a/lib/web/ui/integration.go +++ b/lib/web/ui/integration.go @@ -26,6 +26,7 @@ import ( "github.com/gravitational/teleport/api/types" "github.com/gravitational/teleport/lib/integrations/awsoidc" + "github.com/gravitational/teleport/lib/ui" ) // IntegrationAWSOIDCSpec contain the specific fields for the `aws-oidc` subkind integration. @@ -213,7 +214,7 @@ type AWSOIDCDeployServiceRequest struct { // DatabaseAgentMatcherLabels are the labels to be used when deploying a Database Service. // Those are the resource labels that the Service will monitor and proxy connections to. - DatabaseAgentMatcherLabels []Label `json:"databaseAgentMatcherLabels"` + DatabaseAgentMatcherLabels []ui.Label `json:"databaseAgentMatcherLabels"` } // AWSOIDCDeployServiceResponse contains the resources that were used to deploy a Teleport Service. diff --git a/lib/web/ui/labels.go b/lib/web/ui/labels.go index c1234f4801a95..bb94474ab0b18 100644 --- a/lib/web/ui/labels.go +++ b/lib/web/ui/labels.go @@ -19,38 +19,9 @@ package ui import ( - "sort" - "strings" - "github.com/gravitational/teleport/api/types" ) -// makeLabels is a function that transforms map[string]string arguments passed to it to sorted slice of Labels. -// It also removes all Teleport internal labels from output. -func makeLabels(labelMaps ...map[string]string) []Label { - length := 0 - for _, labelMap := range labelMaps { - length += len(labelMap) - } - - labels := make([]Label, 0, length) - - for _, labelMap := range labelMaps { - for name, value := range labelMap { - if strings.HasPrefix(name, types.TeleportInternalLabelPrefix) || - strings.HasPrefix(name, types.TeleportHiddenLabelPrefix) { - continue - } - - labels = append(labels, Label{Name: name, Value: value}) - } - } - - sort.Sort(sortedLabels(labels)) - - return labels -} - func transformCommandLabels(commandLabels map[string]types.CommandLabel) map[string]string { labels := make(map[string]string, len(commandLabels)) diff --git a/lib/web/ui/labels_test.go b/lib/web/ui/labels_test.go index a95895085bd60..296d91f4fd6af 100644 --- a/lib/web/ui/labels_test.go +++ b/lib/web/ui/labels_test.go @@ -26,125 +26,6 @@ import ( "github.com/gravitational/teleport/api/types" ) -func TestMakeLabels(t *testing.T) { - type testCase struct { - name string - labelMaps []map[string]string - expected []Label - } - - testCases := []testCase{ - { - name: "Single map single label case", - labelMaps: []map[string]string{ - { - "label1": "value1", - }, - }, - expected: []Label{ - { - Name: "label1", - Value: "value1", - }, - }, - }, - { - name: "Single map multiple labels case", - labelMaps: []map[string]string{ - { - "label1": "value1", - "label2": "value2", - }, - }, - expected: []Label{ - { - Name: "label1", - Value: "value1", - }, - { - Name: "label2", - Value: "value2", - }, - }, - }, - { - name: "Multiple maps single label case", - labelMaps: []map[string]string{ - { - "label1": "value1", - }, - { - "label2": "value2", - }, - }, - expected: []Label{ - { - Name: "label1", - Value: "value1", - }, - { - Name: "label2", - Value: "value2", - }, - }, - }, - { - name: "Multiple maps with internal labels", - labelMaps: []map[string]string{ - { - "label1": "value1", - "teleport.internal/label3": "value3", - }, - { - "label2": "value2", - "teleport.internal/label4": "value4", - }, - }, - expected: []Label{ - { - Name: "label1", - Value: "value1", - }, - { - Name: "label2", - Value: "value2", - }, - }, - }, - { - name: "Multiple maps with hidden labels", - labelMaps: []map[string]string{ - { - "label1": "value1", - "teleport.hidden/label3": "value3", - }, - { - "label2": "value2", - "teleport.hidden/label4": "value4", - }, - }, - expected: []Label{ - { - Name: "label1", - Value: "value1", - }, - { - Name: "label2", - Value: "value2", - }, - }, - }, - } - - for _, tc := range testCases { - t.Run(tc.name, func(t *testing.T) { - labels := makeLabels(tc.labelMaps...) - - require.Equal(t, tc.expected, labels) - }) - } -} - func TestTransformCommandLabels(t *testing.T) { commandLabels := map[string]types.CommandLabel{ "label1": &types.CommandLabelV2{ diff --git a/lib/web/ui/notification.go b/lib/web/ui/notification.go index 1c75a00a10db5..1a83682c5dffa 100644 --- a/lib/web/ui/notification.go +++ b/lib/web/ui/notification.go @@ -23,21 +23,22 @@ import ( notificationsv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/notifications/v1" "github.com/gravitational/teleport/api/types" + "github.com/gravitational/teleport/lib/ui" ) type Notification struct { - ID string `json:"id"` - Title string `json:"title"` - SubKind string `json:"subKind"` - Created time.Time `json:"created"` - Clicked bool `json:"clicked"` - TextContent string `json:"textContent,omitempty"` - Labels []Label `json:"labels"` + ID string `json:"id"` + Title string `json:"title"` + SubKind string `json:"subKind"` + Created time.Time `json:"created"` + Clicked bool `json:"clicked"` + TextContent string `json:"textContent,omitempty"` + Labels []ui.Label `json:"labels"` } // MakeNotification creates a notification object for the WebUI. func MakeNotification(notification *notificationsv1.Notification) Notification { - labels := makeLabels(notification.Metadata.Labels) + labels := ui.MakeLabelsWithoutInternalPrefixes(notification.Metadata.Labels) clicked := notification.Metadata.GetLabels()[types.NotificationClickedLabel] == "true" diff --git a/lib/web/ui/server.go b/lib/web/ui/server.go index 1192a980b7555..af1adf66d3190 100644 --- a/lib/web/ui/server.go +++ b/lib/web/ui/server.go @@ -27,16 +27,9 @@ import ( "github.com/gravitational/teleport/api/types" "github.com/gravitational/teleport/lib/defaults" "github.com/gravitational/teleport/lib/services" + "github.com/gravitational/teleport/lib/ui" ) -// Label describes label for webapp -type Label struct { - // Name is this label name - Name string `json:"name"` - // Value is this label value - Value string `json:"value"` -} - // Server describes a server for webapp type Server struct { // Kind is the kind of resource. Used to parse which kind in a list of unified resources in the UI @@ -54,7 +47,7 @@ type Server struct { // Addrr is this server ip address Addr string `json:"addr"` // Labels is this server list of labels - Labels []Label `json:"tags"` + Labels []ui.Label `json:"tags"` // SSHLogins is the list of logins this user can use on this server SSHLogins []string `json:"sshLogins"` // AWS contains metadata for instances hosted in AWS. @@ -74,40 +67,11 @@ type AWSMetadata struct { SubnetID string `json:"subnetId"` } -// sortedLabels is a sort wrapper that sorts labels by name -type sortedLabels []Label - -func (s sortedLabels) Len() int { - return len(s) -} - -func (s sortedLabels) Less(i, j int) bool { - labelA := strings.ToLower(s[i].Name) - labelB := strings.ToLower(s[j].Name) - - for _, sortName := range types.BackSortedLabelPrefixes { - name := strings.ToLower(sortName) - if strings.Contains(labelA, name) && !strings.Contains(labelB, name) { - return false // labelA should be at the end - } - if !strings.Contains(labelA, name) && strings.Contains(labelB, name) { - return true // labelB should be at the end - } - } - - // If neither label contains any of the sendToBackOfSortNames, sort them as usual - return labelA < labelB -} - -func (s sortedLabels) Swap(i, j int) { - s[i], s[j] = s[j], s[i] -} - // MakeServer creates a server object for the web ui func MakeServer(clusterName string, server types.Server, logins []string, requiresRequest bool) Server { serverLabels := server.GetStaticLabels() serverCmdLabels := server.GetCmdLabels() - uiLabels := makeLabels(serverLabels, transformCommandLabels(serverCmdLabels)) + uiLabels := ui.MakeLabelsWithoutInternalPrefixes(serverLabels, transformCommandLabels(serverCmdLabels)) uiServer := Server{ Kind: server.GetKind(), @@ -139,12 +103,12 @@ func MakeServer(clusterName string, server types.Server, logins []string, requir // EKSCluster represents and EKS cluster, analog of awsoidc.EKSCluster, but used by web ui. type EKSCluster struct { - Name string `json:"name"` - Region string `json:"region"` - Arn string `json:"arn"` - Labels []Label `json:"labels"` - JoinLabels []Label `json:"joinLabels"` - Status string `json:"status"` + Name string `json:"name"` + Region string `json:"region"` + Arn string `json:"arn"` + Labels []ui.Label `json:"labels"` + JoinLabels []ui.Label `json:"joinLabels"` + Status string `json:"status"` } // KubeCluster describes a kube cluster. @@ -154,7 +118,7 @@ type KubeCluster struct { // Name is the name of the kube cluster. Name string `json:"name"` // Labels is a map of static and dynamic labels associated with an kube cluster. - Labels []Label `json:"labels"` + Labels []ui.Label `json:"labels"` // KubeUsers is the list of allowed Kubernetes RBAC users that the user can impersonate. KubeUsers []string `json:"kubernetes_users"` // KubeGroups is the list of allowed Kubernetes RBAC groups that the user can impersonate. @@ -167,7 +131,7 @@ type KubeCluster struct { func MakeKubeCluster(cluster types.KubeCluster, accessChecker services.AccessChecker, requiresRequest bool) KubeCluster { staticLabels := cluster.GetStaticLabels() dynamicLabels := cluster.GetDynamicLabels() - uiLabels := makeLabels(staticLabels, transformCommandLabels(dynamicLabels)) + uiLabels := ui.MakeLabelsWithoutInternalPrefixes(staticLabels, transformCommandLabels(dynamicLabels)) kubeUsers, kubeGroups := getAllowedKubeUsersAndGroupsForCluster(accessChecker, cluster) return KubeCluster{ Kind: cluster.GetKind(), @@ -188,8 +152,8 @@ func MakeEKSClusters(clusters []*integrationv1.EKSCluster) []EKSCluster { Name: cluster.Name, Region: cluster.Region, Arn: cluster.Arn, - Labels: makeLabels(cluster.Labels), - JoinLabels: makeLabels(cluster.JoinLabels), + Labels: ui.MakeLabelsWithoutInternalPrefixes(cluster.Labels), + JoinLabels: ui.MakeLabelsWithoutInternalPrefixes(cluster.JoinLabels), Status: cluster.Status, }) } @@ -202,7 +166,7 @@ func MakeKubeClusters(clusters []types.KubeCluster, accessChecker services.Acces for _, cluster := range clusters { staticLabels := cluster.GetStaticLabels() dynamicLabels := cluster.GetDynamicLabels() - uiLabels := makeLabels(staticLabels, transformCommandLabels(dynamicLabels)) + uiLabels := ui.MakeLabelsWithoutInternalPrefixes(staticLabels, transformCommandLabels(dynamicLabels)) kubeUsers, kubeGroups := getAllowedKubeUsersAndGroupsForCluster(accessChecker, cluster) @@ -225,7 +189,7 @@ type KubeResource struct { // Name is the name of the Kubernetes resource. Name string `json:"name"` // Labels is a map of static associated with a Kubernetes resource. - Labels []Label `json:"labels"` + Labels []ui.Label `json:"labels"` // Namespace is the Kubernetes namespace where the resource is located. Namespace string `json:"namespace"` // KubeCluster is the Kubernetes cluster the resource blongs to. @@ -237,7 +201,7 @@ func MakeKubeResources(resources []*types.KubernetesResourceV1, cluster string) uiKubeResources := make([]KubeResource, 0, len(resources)) for _, resource := range resources { staticLabels := resource.GetStaticLabels() - uiLabels := makeLabels(staticLabels) + uiLabels := ui.MakeLabelsWithoutInternalPrefixes(staticLabels) uiKubeResources = append(uiKubeResources, KubeResource{ @@ -325,7 +289,7 @@ type Database struct { // Type is the database type, self-hosted or cloud-hosted. Type string `json:"type"` // Labels is a map of static and dynamic labels associated with a database. - Labels []Label `json:"labels"` + Labels []ui.Label `json:"labels"` // Hostname is the database connection endpoint (URI) hostname (without port and protocol). Hostname string `json:"hostname"` // URI of the database. @@ -356,7 +320,7 @@ const ( // MakeDatabase creates database objects. func MakeDatabase(database types.Database, dbUsers, dbNames []string, requiresRequest bool) Database { - uiLabels := makeLabels(database.GetAllLabels()) + uiLabels := ui.MakeLabelsWithoutInternalPrefixes(database.GetAllLabels()) db := Database{ Kind: database.GetKind(), @@ -435,7 +399,7 @@ type Desktop struct { // Addr is the network address the desktop can be reached at. Addr string `json:"addr"` // Labels is a map of static and dynamic labels associated with a desktop. - Labels []Label `json:"labels"` + Labels []ui.Label `json:"labels"` // HostID is the ID of the Windows Desktop Service reporting the desktop. HostID string `json:"host_id"` // Logins is the list of logins this user can use on this desktop. @@ -455,7 +419,7 @@ func MakeDesktop(windowsDesktop types.WindowsDesktop, logins []string, requiresR return addr } - uiLabels := makeLabels(windowsDesktop.GetAllLabels()) + uiLabels := ui.MakeLabelsWithoutInternalPrefixes(windowsDesktop.GetAllLabels()) return Desktop{ Kind: windowsDesktop.GetKind(), @@ -478,12 +442,12 @@ type DesktopService struct { // Addr is the network address the Windows Desktop Service can be reached at. Addr string `json:"addr"` // Labels is a map of static and dynamic labels associated with a desktop. - Labels []Label `json:"labels"` + Labels []ui.Label `json:"labels"` } // MakeDesktopService converts a desktop from its API form to a type the UI can display. func MakeDesktopService(desktopService types.WindowsDesktopService) DesktopService { - uiLabels := makeLabels(desktopService.GetAllLabels()) + uiLabels := ui.MakeLabelsWithoutInternalPrefixes(desktopService.GetAllLabels()) return DesktopService{ Name: desktopService.GetName(), diff --git a/lib/web/ui/server_test.go b/lib/web/ui/server_test.go index a8f6c76997a66..9af621cf09557 100644 --- a/lib/web/ui/server_test.go +++ b/lib/web/ui/server_test.go @@ -27,6 +27,7 @@ import ( apidefaults "github.com/gravitational/teleport/api/defaults" "github.com/gravitational/teleport/api/types" "github.com/gravitational/teleport/lib/services" + "github.com/gravitational/teleport/lib/ui" ) func TestStripProtocolAndPort(t *testing.T) { @@ -339,7 +340,7 @@ func TestMakeClusterHiddenLabels(t *testing.T) { type testCase struct { name string clusters []types.KubeCluster - expectedLabels [][]Label + expectedLabels [][]ui.Label roleSet services.RoleSet } @@ -352,7 +353,7 @@ func TestMakeClusterHiddenLabels(t *testing.T) { "label2": "value2", }), }, - expectedLabels: [][]Label{ + expectedLabels: [][]ui.Label{ { { Name: "label2", @@ -379,7 +380,7 @@ func TestMakeServersHiddenLabels(t *testing.T) { name string clusterName string servers []types.Server - expectedLabels [][]Label + expectedLabels [][]ui.Label } testCases := []testCase{ @@ -392,7 +393,7 @@ func TestMakeServersHiddenLabels(t *testing.T) { "teleport.internal/app": "app1", }), }, - expectedLabels: [][]Label{ + expectedLabels: [][]ui.Label{ { { Name: "simple", @@ -432,7 +433,7 @@ func TestMakeDatabaseHiddenLabels(t *testing.T) { outputDb := MakeDatabase(inputDb, nil, nil, false) - require.Equal(t, []Label{ + require.Equal(t, []ui.Label{ { Name: "label", Value: "value1", @@ -452,7 +453,7 @@ func TestMakeDesktopHiddenLabel(t *testing.T) { require.NoError(t, err) desktop := MakeDesktop(windowsDesktop, nil, false) - labels := []Label{ + labels := []ui.Label{ { Name: "label3", Value: "value2", @@ -475,7 +476,7 @@ func TestMakeDesktopServiceHiddenLabel(t *testing.T) { } desktopService := MakeDesktopService(windowsDesktopService) - labels := []Label{ + labels := []ui.Label{ { Name: "label3", Value: "value2", @@ -490,7 +491,7 @@ func TestSortedLabels(t *testing.T) { name string clusterName string servers []types.Server - expectedLabels [][]Label + expectedLabels [][]ui.Label } testCases := []testCase{ @@ -506,7 +507,7 @@ func TestSortedLabels(t *testing.T) { "teleport.internal/app": "app1", }), }, - expectedLabels: [][]Label{ + expectedLabels: [][]ui.Label{ { { Name: "simple", @@ -538,7 +539,7 @@ func TestSortedLabels(t *testing.T) { "teleport.internal/app": "app1", }), }, - expectedLabels: [][]Label{ + expectedLabels: [][]ui.Label{ { { Name: "anotherone", @@ -565,7 +566,7 @@ func TestSortedLabels(t *testing.T) { "teleport.internal/app": "app1", }), }, - expectedLabels: [][]Label{ + expectedLabels: [][]ui.Label{ { { Name: "simple", diff --git a/lib/web/ui/user_groups.go b/lib/web/ui/user_groups.go index 470bf113a74f2..7d090ce867b94 100644 --- a/lib/web/ui/user_groups.go +++ b/lib/web/ui/user_groups.go @@ -20,6 +20,7 @@ package ui import ( "github.com/gravitational/teleport/api/types" + "github.com/gravitational/teleport/lib/ui" ) // UserGroup describes a user group. @@ -29,7 +30,7 @@ type UserGroup struct { // Description is the description of the group. Description string `json:"description"` // Labels is the user group list of labels - Labels []Label `json:"labels"` + Labels []ui.Label `json:"labels"` // FriendlyName is a friendly name for the user group. FriendlyName string `json:"friendlyName,omitempty"` // Applications is a list of associated applications. @@ -48,7 +49,7 @@ type ApplicationAndFriendlyName struct { func MakeUserGroups(userGroups []types.UserGroup, userGroupsToApps map[string]types.Apps) ([]UserGroup, error) { uiUserGroups := []UserGroup{} for _, userGroup := range userGroups { - uiLabels := makeLabels(userGroup.GetStaticLabels()) + uiLabels := ui.MakeLabelsWithoutInternalPrefixes(userGroup.GetStaticLabels()) apps := userGroupsToApps[userGroup.GetName()] appsAndFriendlyNames := make([]ApplicationAndFriendlyName, len(apps)) diff --git a/lib/web/ui/user_groups_test.go b/lib/web/ui/user_groups_test.go index 78b88facde2d3..a7a80545676d2 100644 --- a/lib/web/ui/user_groups_test.go +++ b/lib/web/ui/user_groups_test.go @@ -25,6 +25,7 @@ import ( "github.com/stretchr/testify/require" "github.com/gravitational/teleport/api/types" + "github.com/gravitational/teleport/lib/ui" ) func TestMakeUserGroups(t *testing.T) { @@ -48,14 +49,14 @@ func TestMakeUserGroups(t *testing.T) { { Name: "group1", Description: "group1 desc", - Labels: []Label{{Name: "label1", Value: "value1"}}, + Labels: []ui.Label{{Name: "label1", Value: "value1"}}, Applications: []ApplicationAndFriendlyName{}, }, { Name: "group2", Description: "group2 desc", FriendlyName: "group2 desc", - Labels: []Label{ + Labels: []ui.Label{ {Name: "label2", Value: "value2"}, {Name: types.OriginLabel, Value: types.OriginOkta}, }, @@ -87,7 +88,7 @@ func TestMakeUserGroups(t *testing.T) { { Name: "group1", Description: "group1 desc", - Labels: []Label{{Name: "label1", Value: "value1"}}, + Labels: []ui.Label{{Name: "label1", Value: "value1"}}, Applications: []ApplicationAndFriendlyName{ {Name: "1"}, {Name: "2", FriendlyName: "2 desc"}, @@ -97,7 +98,7 @@ func TestMakeUserGroups(t *testing.T) { Name: "group2", Description: "group2 desc", FriendlyName: "group2 desc", - Labels: []Label{ + Labels: []ui.Label{ {Name: "label2", Value: "value2"}, {Name: types.OriginLabel, Value: types.OriginOkta}, }, diff --git a/proto/teleport/lib/teleterm/v1/kube.proto b/proto/teleport/lib/teleterm/v1/kube.proto index 3beecd92db901..7fc36f0215010 100644 --- a/proto/teleport/lib/teleterm/v1/kube.proto +++ b/proto/teleport/lib/teleterm/v1/kube.proto @@ -33,3 +33,22 @@ message Kube { // labels is the kube labels repeated Label labels = 3; } + +// KubeResource describes a kube_cluster's subresource eg: pods, namespaces, etc. +message KubeResource { + // uri is the kube resource URI + string uri = 1; + // kind is the kube subresource kind eg: pods, namespace + string kind = 2; + // name is the kube resource name eg: pod name, namespace name + string name = 3; + // labels is the kube resource labels + repeated Label labels = 4; + // cluster is the kube cluster name that this kube resource belongs to + // eg: the kube cluster that a namespace belongs to + string cluster = 5; + // namespace is the kube namespace where the resource is located + // note: this field will be blank if this resource "kind" is "namespace", + // refer to field "name" for the name of namespace + string namespace = 6; +} diff --git a/proto/teleport/lib/teleterm/v1/service.proto b/proto/teleport/lib/teleterm/v1/service.proto index 7c263508806c3..a30670586062b 100644 --- a/proto/teleport/lib/teleterm/v1/service.proto +++ b/proto/teleport/lib/teleterm/v1/service.proto @@ -82,6 +82,9 @@ service TerminalService { rpc PromoteAccessRequest(PromoteAccessRequestRequest) returns (PromoteAccessRequestResponse); // GetSuggestedAccessLists returns suggested access lists for an access request. rpc GetSuggestedAccessLists(GetSuggestedAccessListsRequest) returns (GetSuggestedAccessListsResponse); + // ListKubernetesResourcesRequest defines a request to retrieve kube resources paginated. + // Only one type of kube resource can be retrieved per request (eg: namespace, pods, secrets, etc.) + rpc ListKubernetesResources(ListKubernetesResourcesRequest) returns (ListKubernetesResourcesResponse); // GetKubes returns filtered, sorted, and paginated kubes rpc GetKubes(GetKubesRequest) returns (GetKubesResponse); @@ -308,6 +311,35 @@ message GetSuggestedAccessListsResponse { repeated accesslist.v1.AccessList access_lists = 1; } +message ListKubernetesResourcesRequest { + string cluster_uri = 1; + // ResourceType is the Kubernetes resource that is going to be retrieved. + string resource_type = 2; + // Limit is the maximum amount of resources to retrieve. + int32 limit = 3; + // NextKey is used to start listing resources from a specific spot. It + // should be set to the previous NextKey value if using pagination, or + // left empty. + string next_key = 4; + // PredicateExpression defines boolean conditions that will be matched against the resource. + string predicate_expression = 5; + // SearchKeywords is a string containing search keywords to match against resource field values. + string search_keywords = 6; + // UseSearchAsRoles indicates that the response should include all resources + // the caller is able to request access to using search_as_roles + bool use_search_as_roles = 7; + // Cluster is the Kubernetes Cluster to request the resources. + string kubernetes_cluster = 8; + // Namespace is the Kubernetes namespace where the resources must be located. + // To search on every Kubernetes Namespace, do not define the value. + string kubernetes_namespace = 9; +} + +message ListKubernetesResourcesResponse { + repeated KubeResource resources = 1; + string next_key = 2; +} + // CredentialInfo holds fields related to a user's WebAuthn credential. message CredentialInfo { string username = 1; diff --git a/web/packages/teleterm/src/services/tshd/fixtures/mocks.ts b/web/packages/teleterm/src/services/tshd/fixtures/mocks.ts index facfe4853b270..623829d3e1586 100644 --- a/web/packages/teleterm/src/services/tshd/fixtures/mocks.ts +++ b/web/packages/teleterm/src/services/tshd/fixtures/mocks.ts @@ -107,6 +107,8 @@ export class MockTshClient implements TshdClient { getConnectMyComputerNodeName = () => new MockedUnaryCall({ name: '' }); listUnifiedResources = () => new MockedUnaryCall({ resources: [], nextKey: '' }); + listKubernetesResources = () => + new MockedUnaryCall({ resources: [], nextKey: '' }); getUserPreferences = () => new MockedUnaryCall({}); updateUserPreferences = () => new MockedUnaryCall({}); getSuggestedAccessLists = () => new MockedUnaryCall({ accessLists: [] }); diff --git a/web/packages/teleterm/src/ui/uri.test.ts b/web/packages/teleterm/src/ui/uri.test.ts index f1fcaba45b59a..27af64558940b 100644 --- a/web/packages/teleterm/src/ui/uri.test.ts +++ b/web/packages/teleterm/src/ui/uri.test.ts @@ -64,3 +64,34 @@ describe('getServerUri', () => { }); /* eslint-enable jest/no-conditional-expect */ }); + +describe('getKubeResourceNamespaceUri', () => { + const tests: Array<{ name: string; input: Params } & { output: string }> = [ + { + name: 'returns a kube resource namespace URI for a root cluster', + input: { + rootClusterId: 'foo', + kubeId: 'kubeClusterName', + kubeNamespaceId: 'namespace', + }, + output: '/clusters/foo/kubes/kubeClusterName/namespaces/namespace', + }, + { + name: 'returns a kube resource namespace URI for a leaf cluster', + input: { + rootClusterId: 'foo', + leafClusterId: 'bar', + kubeId: 'kubeClusterName', + kubeNamespaceId: 'namespace', + }, + output: + '/clusters/foo/leaves/bar/kubes/kubeClusterName/namespaces/namespace', + }, + ]; + + /* eslint-disable jest/no-conditional-expect */ + test.each(tests)('$name', ({ input, output }) => { + expect(routing.getKubeResourceNamespaceUri(input)).toEqual(output); + }); + /* eslint-enable jest/no-conditional-expect */ +}); diff --git a/web/packages/teleterm/src/ui/uri.ts b/web/packages/teleterm/src/ui/uri.ts index 49c7ffb59bf71..09aa634596773 100644 --- a/web/packages/teleterm/src/ui/uri.ts +++ b/web/packages/teleterm/src/ui/uri.ts @@ -38,6 +38,7 @@ import type { RouteProps } from 'react-router'; export type RootClusterUri = string; export type RootClusterServerUri = string; export type RootClusterKubeUri = string; +export type RootClusterKubeResourceNamespaceUri = string; export type RootClusterDatabaseUri = string; export type RootClusterAppUri = string; export type RootClusterResourceUri = @@ -49,6 +50,7 @@ export type RootClusterOrResourceUri = RootClusterUri | RootClusterResourceUri; export type LeafClusterUri = string; export type LeafClusterServerUri = string; export type LeafClusterKubeUri = string; +export type LeafClusterKubeResourceNamespaceUri = string; export type LeafClusterDatabaseUri = string; export type LeafClusterAppUri = string; export type LeafClusterResourceUri = @@ -62,6 +64,9 @@ export type ResourceUri = RootClusterResourceUri | LeafClusterResourceUri; export type ClusterUri = RootClusterUri | LeafClusterUri; export type ServerUri = RootClusterServerUri | LeafClusterServerUri; export type KubeUri = RootClusterKubeUri | LeafClusterKubeUri; +export type KubeResourceNamespaceUri = + | RootClusterKubeResourceNamespaceUri + | LeafClusterKubeResourceNamespaceUri; export type AppUri = RootClusterAppUri | LeafClusterAppUri; export type DatabaseUri = RootClusterDatabaseUri | LeafClusterDatabaseUri; export type ClusterOrResourceUri = ResourceUri | ClusterUri; @@ -92,6 +97,10 @@ export const paths = { '/clusters/:rootClusterId/leaves/:leafClusterId/servers/:serverId', kube: '/clusters/:rootClusterId/(leaves)?/:leafClusterId?/kubes/:kubeId', kubeLeaf: '/clusters/:rootClusterId/leaves/:leafClusterId/kubes/:kubeId', + kubeResourceNamespace: + '/clusters/:rootClusterId/(leaves)?/:leafClusterId?/kubes/:kubeId/namespaces/:kubeNamespaceId', + kubeResourceNamespaceLeaf: + '/clusters/:rootClusterId/leaves/:leafClusterId/kubes/:kubeId/namespaces/:kubeNamespaceId', db: '/clusters/:rootClusterId/(leaves)?/:leafClusterId?/dbs/:dbId', dbLeaf: '/clusters/:rootClusterId/leaves/:leafClusterId/dbs/:dbId', app: '/clusters/:rootClusterId/(leaves)?/:leafClusterId?/apps/:appId', @@ -126,6 +135,10 @@ export const routing = { return routing.parseUri(uri, paths.kube); }, + parseKubeResourceNamespaceUri(uri: string) { + return routing.parseUri(uri, paths.kubeResourceNamespace); + }, + parseAppUri(uri: string) { return routing.parseUri(uri, paths.app); }, @@ -232,6 +245,24 @@ export const routing = { } }, + getKubeResourceNamespaceUri(params: Params) { + if (params.leafClusterId) { + // paths.kubeResourceLeaf is needed as path-to-regexp used by react-router doesn't support + // optional groups with params. https://github.com/pillarjs/path-to-regexp/issues/142 + // + // If we used paths.kubeResource instead, then the /leaves/ part of the URI would be missing. + return generatePath( + paths.kubeResourceNamespaceLeaf, + params as any + ) as LeafClusterKubeResourceNamespaceUri; + } else { + return generatePath( + paths.kubeResourceNamespace, + params as any + ) as RootClusterKubeResourceNamespaceUri; + } + }, + isClusterServer(clusterUri: ClusterUri, serverUri: ServerUri) { return serverUri.startsWith(`${clusterUri}/servers/`); }, @@ -289,6 +320,7 @@ export type Params = { leafClusterId?: string; serverId?: string; kubeId?: string; + kubeNamespaceId?: string; dbId?: string; gatewayId?: string; tabId?: string;