From f17250c37fc3797e9cc77cfb44a2910fc2459a4d Mon Sep 17 00:00:00 2001 From: Orne Brocaar Date: Thu, 15 Sep 2022 10:58:37 +0100 Subject: [PATCH] Show region information in UI. --- api/go/api/internal.pb.go | 1040 +++++++++++---- api/go/api/internal_grpc.pb.go | 76 ++ api/grpc-web/api/internal_grpc_web_pb.d.ts | 24 + api/grpc-web/api/internal_grpc_web_pb.js | 162 +++ api/grpc-web/api/internal_pb.d.ts | 143 ++ api/grpc-web/api/internal_pb.js | 1182 +++++++++++++++++ api/js/api/internal_grpc_pb.d.ts | 10 + api/js/api/internal_grpc_pb.js | 58 + api/js/api/internal_pb.d.ts | 153 +++ api/js/api/internal_pb.js | 1163 ++++++++++++++++ api/proto/api/internal.proto | 68 + .../proto/chirpstack-api/api/internal.proto | 68 + .../src/chirpstack_api/api/internal_pb2.py | 165 ++- .../chirpstack_api/api/internal_pb2_grpc.py | 68 + api/rust/proto/chirpstack/api/internal.proto | 68 + chirpstack/src/api/internal.rs | 75 +- chirpstack/src/config.rs | 2 + ui/package.json | 1 + ui/src/App.tsx | 7 + ui/src/components/Menu.tsx | 15 + ui/src/stores/InternalStore.ts | 25 + ui/src/views/regions/ListRegions.tsx | 87 ++ ui/src/views/regions/RegionDetails.tsx | 123 ++ ui/yarn.lock | 524 +++++++- 24 files changed, 4965 insertions(+), 342 deletions(-) create mode 100644 ui/src/views/regions/ListRegions.tsx create mode 100644 ui/src/views/regions/RegionDetails.tsx diff --git a/api/go/api/internal.pb.go b/api/go/api/internal.pb.go index 8dc9a97f..25773bac 100644 --- a/api/go/api/internal.pb.go +++ b/api/go/api/internal.pb.go @@ -7,6 +7,7 @@ package api import ( + common "github.com/chirpstack/chirpstack/api/go/v4/common" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" emptypb "google.golang.org/protobuf/types/known/emptypb" @@ -1577,6 +1578,354 @@ func (x *StreamDeviceEventsRequest) GetDevEui() string { return "" } +type ListRegionsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Configured regions. + Regions []*RegionListItem `protobuf:"bytes,1,rep,name=regions,proto3" json:"regions,omitempty"` +} + +func (x *ListRegionsResponse) Reset() { + *x = ListRegionsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_internal_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListRegionsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListRegionsResponse) ProtoMessage() {} + +func (x *ListRegionsResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_internal_proto_msgTypes[25] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListRegionsResponse.ProtoReflect.Descriptor instead. +func (*ListRegionsResponse) Descriptor() ([]byte, []int) { + return file_api_internal_proto_rawDescGZIP(), []int{25} +} + +func (x *ListRegionsResponse) GetRegions() []*RegionListItem { + if x != nil { + return x.Regions + } + return nil +} + +type RegionListItem struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Name. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Region. + Region common.Region `protobuf:"varint,2,opt,name=region,proto3,enum=common.Region" json:"region,omitempty"` +} + +func (x *RegionListItem) Reset() { + *x = RegionListItem{} + if protoimpl.UnsafeEnabled { + mi := &file_api_internal_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RegionListItem) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RegionListItem) ProtoMessage() {} + +func (x *RegionListItem) ProtoReflect() protoreflect.Message { + mi := &file_api_internal_proto_msgTypes[26] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RegionListItem.ProtoReflect.Descriptor instead. +func (*RegionListItem) Descriptor() ([]byte, []int) { + return file_api_internal_proto_rawDescGZIP(), []int{26} +} + +func (x *RegionListItem) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *RegionListItem) GetRegion() common.Region { + if x != nil { + return x.Region + } + return common.Region(0) +} + +type GetRegionRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Region name. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` +} + +func (x *GetRegionRequest) Reset() { + *x = GetRegionRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_internal_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetRegionRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetRegionRequest) ProtoMessage() {} + +func (x *GetRegionRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_internal_proto_msgTypes[27] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetRegionRequest.ProtoReflect.Descriptor instead. +func (*GetRegionRequest) Descriptor() ([]byte, []int) { + return file_api_internal_proto_rawDescGZIP(), []int{27} +} + +func (x *GetRegionRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +type GetRegionResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Name. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Region. + Region common.Region `protobuf:"varint,2,opt,name=region,proto3,enum=common.Region" json:"region,omitempty"` + // User information. + UserInfo string `protobuf:"bytes,3,opt,name=user_info,json=userInfo,proto3" json:"user_info,omitempty"` + // Uplink channels. + UplinkChannels []*RegionChannel `protobuf:"bytes,4,rep,name=uplink_channels,json=uplinkChannels,proto3" json:"uplink_channels,omitempty"` + // RX1 delay. + Rx1Delay uint32 `protobuf:"varint,5,opt,name=rx1_delay,json=rx1Delay,proto3" json:"rx1_delay,omitempty"` + // RX1 data-rate offset. + Rx1DrOffset uint32 `protobuf:"varint,6,opt,name=rx1_dr_offset,json=rx1DrOffset,proto3" json:"rx1_dr_offset,omitempty"` + // RX2 DR. + Rx2Dr uint32 `protobuf:"varint,7,opt,name=rx2_dr,json=rx2Dr,proto3" json:"rx2_dr,omitempty"` + // RX2 frequency. + Rx2Frequency uint32 `protobuf:"varint,8,opt,name=rx2_frequency,json=rx2Frequency,proto3" json:"rx2_frequency,omitempty"` + // Class-B ping-slot DR. + ClassBPingSlotDr uint32 `protobuf:"varint,9,opt,name=class_b_ping_slot_dr,json=classBPingSlotDr,proto3" json:"class_b_ping_slot_dr,omitempty"` + // Class-B ping-slot frequency. + ClassBPingSlotFrequency uint32 `protobuf:"varint,10,opt,name=class_b_ping_slot_frequency,json=classBPingSlotFrequency,proto3" json:"class_b_ping_slot_frequency,omitempty"` +} + +func (x *GetRegionResponse) Reset() { + *x = GetRegionResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_internal_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetRegionResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetRegionResponse) ProtoMessage() {} + +func (x *GetRegionResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_internal_proto_msgTypes[28] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetRegionResponse.ProtoReflect.Descriptor instead. +func (*GetRegionResponse) Descriptor() ([]byte, []int) { + return file_api_internal_proto_rawDescGZIP(), []int{28} +} + +func (x *GetRegionResponse) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *GetRegionResponse) GetRegion() common.Region { + if x != nil { + return x.Region + } + return common.Region(0) +} + +func (x *GetRegionResponse) GetUserInfo() string { + if x != nil { + return x.UserInfo + } + return "" +} + +func (x *GetRegionResponse) GetUplinkChannels() []*RegionChannel { + if x != nil { + return x.UplinkChannels + } + return nil +} + +func (x *GetRegionResponse) GetRx1Delay() uint32 { + if x != nil { + return x.Rx1Delay + } + return 0 +} + +func (x *GetRegionResponse) GetRx1DrOffset() uint32 { + if x != nil { + return x.Rx1DrOffset + } + return 0 +} + +func (x *GetRegionResponse) GetRx2Dr() uint32 { + if x != nil { + return x.Rx2Dr + } + return 0 +} + +func (x *GetRegionResponse) GetRx2Frequency() uint32 { + if x != nil { + return x.Rx2Frequency + } + return 0 +} + +func (x *GetRegionResponse) GetClassBPingSlotDr() uint32 { + if x != nil { + return x.ClassBPingSlotDr + } + return 0 +} + +func (x *GetRegionResponse) GetClassBPingSlotFrequency() uint32 { + if x != nil { + return x.ClassBPingSlotFrequency + } + return 0 +} + +type RegionChannel struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Frequency (Hz). + Frequency uint32 `protobuf:"varint,1,opt,name=frequency,proto3" json:"frequency,omitempty"` + // Min DR. + DrMin uint32 `protobuf:"varint,2,opt,name=dr_min,json=drMin,proto3" json:"dr_min,omitempty"` + // Max DR. + DrMax uint32 `protobuf:"varint,3,opt,name=dr_max,json=drMax,proto3" json:"dr_max,omitempty"` +} + +func (x *RegionChannel) Reset() { + *x = RegionChannel{} + if protoimpl.UnsafeEnabled { + mi := &file_api_internal_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RegionChannel) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RegionChannel) ProtoMessage() {} + +func (x *RegionChannel) ProtoReflect() protoreflect.Message { + mi := &file_api_internal_proto_msgTypes[29] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RegionChannel.ProtoReflect.Descriptor instead. +func (*RegionChannel) Descriptor() ([]byte, []int) { + return file_api_internal_proto_rawDescGZIP(), []int{29} +} + +func (x *RegionChannel) GetFrequency() uint32 { + if x != nil { + return x.Frequency + } + return 0 +} + +func (x *RegionChannel) GetDrMin() uint32 { + if x != nil { + return x.DrMin + } + return 0 +} + +func (x *RegionChannel) GetDrMax() uint32 { + if x != nil { + return x.DrMax + } + return 0 +} + var File_api_internal_proto protoreflect.FileDescriptor var file_api_internal_proto_rawDesc = []byte{ @@ -1585,246 +1934,299 @@ var file_api_internal_proto_rawDesc = []byte{ 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, - 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0e, 0x61, 0x70, 0x69, 0x2f, 0x75, 0x73, 0x65, - 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x64, 0x0a, 0x06, 0x41, 0x70, 0x69, 0x4b, 0x65, - 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x61, 0x64, 0x6d, 0x69, - 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x41, 0x64, 0x6d, 0x69, 0x6e, - 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x3b, 0x0a, - 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x24, 0x0a, 0x07, 0x61, 0x70, 0x69, 0x5f, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x70, 0x69, 0x4b, - 0x65, 0x79, 0x52, 0x06, 0x61, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x22, 0x3c, 0x0a, 0x14, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x25, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, - 0x7a, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, - 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6f, 0x66, 0x66, - 0x73, 0x65, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x1b, - 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x5b, 0x0a, 0x13, 0x4c, - 0x69, 0x73, 0x74, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, - 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x90, 0x02, 0x0a, 0x0e, 0x55, 0x73, 0x65, - 0x72, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x39, 0x0a, 0x0a, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0e, 0x61, 0x70, + 0x69, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x64, 0x0a, 0x06, + 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, + 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, + 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, + 0x49, 0x64, 0x22, 0x3b, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x69, 0x4b, + 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x24, 0x0a, 0x07, 0x61, 0x70, 0x69, + 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x52, 0x06, 0x61, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x22, + 0x3c, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x25, 0x0a, + 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x22, 0x7a, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x69, 0x4b, + 0x65, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, + 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, + 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x61, + 0x64, 0x6d, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x41, 0x64, + 0x6d, 0x69, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x49, 0x64, + 0x22, 0x5b, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, + 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x6f, + 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, + 0x70, 0x69, 0x4b, 0x65, 0x79, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x90, 0x02, + 0x0a, 0x0e, 0x55, 0x73, 0x65, 0x72, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x4c, 0x69, 0x6e, 0x6b, + 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, - 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x19, - 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x07, 0x69, 0x73, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x69, 0x73, 0x5f, - 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0d, 0x69, 0x73, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x64, 0x6d, 0x69, - 0x6e, 0x12, 0x28, 0x0a, 0x10, 0x69, 0x73, 0x5f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, - 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x73, 0x47, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x22, 0x40, 0x0a, 0x0c, 0x4c, - 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, - 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, - 0x6c, 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, 0x22, 0x21, 0x0a, - 0x0d, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, - 0x0a, 0x03, 0x6a, 0x77, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6a, 0x77, 0x74, - 0x22, 0x5f, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x09, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x75, 0x73, - 0x65, 0x72, 0x12, 0x2d, 0x0a, 0x07, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x54, 0x65, - 0x6e, 0x61, 0x6e, 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x07, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, - 0x73, 0x22, 0x5b, 0x0a, 0x13, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x47, - 0x0a, 0x14, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x6c, 0x6f, - 0x62, 0x61, 0x6c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, - 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0xd7, 0x02, 0x0a, 0x12, 0x47, 0x6c, 0x6f, 0x62, - 0x61, 0x6c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x12, - 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, - 0x6e, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x02, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, - 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6e, - 0x61, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x65, 0x6e, 0x61, - 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, - 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x29, 0x0a, - 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x64, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x5f, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x76, 0x45, 0x75, 0x69, 0x12, 0x1f, - 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x12, 0x21, - 0x0a, 0x0c, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x4e, 0x61, 0x6d, - 0x65, 0x22, 0x4d, 0x0a, 0x10, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x0e, 0x6f, 0x70, 0x65, 0x6e, 0x69, 0x64, 0x5f, - 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x64, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, - 0x74, 0x52, 0x0d, 0x6f, 0x70, 0x65, 0x6e, 0x69, 0x64, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, - 0x22, 0x86, 0x01, 0x0a, 0x0d, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x64, 0x43, 0x6f, 0x6e, 0x6e, 0x65, - 0x63, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, - 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x55, 0x52, 0x4c, 0x12, 0x1f, 0x0a, 0x0b, 0x6c, 0x6f, 0x67, - 0x69, 0x6e, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x6f, - 0x67, 0x6f, 0x75, 0x74, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x6c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x55, 0x52, 0x4c, 0x22, 0x45, 0x0a, 0x19, 0x4f, 0x70, 0x65, - 0x6e, 0x49, 0x64, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x22, 0x32, 0x0a, 0x1a, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x64, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, - 0x74, 0x4c, 0x6f, 0x67, 0x69, 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, 0x22, 0x37, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x73, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x93, 0x02, - 0x0a, 0x19, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x53, 0x75, 0x6d, 0x6d, - 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x25, - 0x0a, 0x0e, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x46, 0x0a, 0x08, 0x64, 0x72, 0x5f, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, - 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x64, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, - 0x10, 0x6e, 0x65, 0x76, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x6e, 0x65, 0x76, 0x65, 0x72, 0x53, 0x65, - 0x65, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x1a, 0x3a, 0x0a, 0x0c, 0x44, 0x72, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x22, 0x38, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x73, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x90, 0x01, - 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x53, 0x75, 0x6d, - 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x0c, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, - 0x25, 0x0a, 0x0e, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x6e, 0x65, 0x76, 0x65, 0x72, 0x5f, - 0x73, 0x65, 0x65, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x0e, 0x6e, 0x65, 0x76, 0x65, 0x72, 0x53, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x22, 0xfc, 0x01, 0x0a, 0x07, 0x4c, 0x6f, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2e, 0x0a, 0x04, - 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, - 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x62, 0x6f, - 0x64, 0x79, 0x12, 0x3c, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, - 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x6f, 0x67, - 0x49, 0x74, 0x65, 0x6d, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, - 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, - 0x3b, 0x0a, 0x1a, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, - 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x22, 0x34, 0x0a, 0x19, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x46, 0x72, 0x61, 0x6d, - 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x65, 0x76, - 0x5f, 0x65, 0x75, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x65, 0x76, 0x45, - 0x75, 0x69, 0x22, 0x34, 0x0a, 0x19, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x17, 0x0a, 0x07, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x64, 0x65, 0x76, 0x45, 0x75, 0x69, 0x32, 0xb3, 0x07, 0x0a, 0x0f, 0x49, 0x6e, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x30, 0x0a, 0x05, - 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x6f, 0x67, 0x69, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, - 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x39, - 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x1a, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x45, 0x0a, 0x0c, 0x47, 0x6c, 0x6f, - 0x62, 0x61, 0x6c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, - 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x45, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, - 0x12, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x69, - 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x12, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x0b, 0x4c, - 0x69, 0x73, 0x74, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, - 0x69, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x3b, 0x0a, 0x08, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x1a, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x12, - 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x64, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x67, - 0x69, 0x6e, 0x12, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x64, 0x43, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x64, 0x43, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e, + 0x74, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x26, + 0x0a, 0x0f, 0x69, 0x73, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x64, 0x6d, 0x69, + 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x73, 0x44, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x28, 0x0a, 0x10, 0x69, 0x73, 0x5f, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0e, 0x69, 0x73, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x41, 0x64, 0x6d, 0x69, 0x6e, + 0x22, 0x40, 0x0a, 0x0c, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 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, 0x22, 0x21, 0x0a, 0x0d, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6a, 0x77, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6a, 0x77, 0x74, 0x22, 0x5f, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x73, 0x65, + 0x72, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x2d, 0x0a, 0x07, 0x74, 0x65, 0x6e, 0x61, 0x6e, + 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, + 0x73, 0x65, 0x72, 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x07, 0x74, + 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x73, 0x22, 0x5b, 0x0a, 0x13, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, + 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, + 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, + 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6f, 0x66, 0x66, + 0x73, 0x65, 0x74, 0x22, 0x47, 0x0a, 0x14, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x72, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0xd7, 0x02, 0x0a, + 0x12, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1b, 0x0a, + 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, + 0x6e, 0x61, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x61, + 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x49, 0x64, 0x12, 0x29, 0x0a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x70, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, + 0x0e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x76, + 0x45, 0x75, 0x69, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, + 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x67, 0x61, 0x74, 0x65, 0x77, + 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x4d, 0x0a, 0x10, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, + 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x0e, 0x6f, 0x70, + 0x65, 0x6e, 0x69, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x64, 0x43, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x52, 0x0d, 0x6f, 0x70, 0x65, 0x6e, 0x69, 0x64, 0x43, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x22, 0x86, 0x01, 0x0a, 0x0d, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x64, + 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, + 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x55, 0x52, 0x4c, 0x12, 0x1f, + 0x0a, 0x0b, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, + 0x1d, 0x0a, 0x0a, 0x6c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x55, 0x52, 0x4c, 0x22, 0x45, + 0x0a, 0x19, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x64, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4c, + 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x63, + 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, + 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x32, 0x0a, 0x1a, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x64, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x73, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x1d, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x53, 0x75, 0x6d, 0x6d, 0x61, - 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, - 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x12, 0x47, - 0x65, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, - 0x79, 0x12, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x73, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x73, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x48, 0x0a, 0x13, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x47, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x1f, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x46, - 0x72, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x4c, 0x6f, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x22, 0x00, 0x30, 0x01, 0x12, 0x46, - 0x0a, 0x12, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x46, 0x72, - 0x61, 0x6d, 0x65, 0x73, 0x12, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x6f, 0x67, 0x49, 0x74, - 0x65, 0x6d, 0x22, 0x00, 0x30, 0x01, 0x12, 0x46, 0x0a, 0x12, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x1e, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x4c, 0x6f, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x22, 0x00, 0x30, 0x01, 0x42, 0x54, - 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, - 0x61, 0x70, 0x69, 0x42, 0x0d, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x63, 0x68, 0x69, 0x72, - 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, - 0x2f, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 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, 0x22, 0x37, 0x0a, 0x18, 0x47, 0x65, 0x74, + 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, + 0x49, 0x64, 0x22, 0x93, 0x02, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x73, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x69, 0x6e, 0x61, + 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x46, 0x0a, 0x08, 0x64, 0x72, + 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x53, 0x75, 0x6d, + 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x72, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x64, 0x72, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x6e, 0x65, 0x76, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x65, 0x6e, + 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x6e, 0x65, + 0x76, 0x65, 0x72, 0x53, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x1a, 0x3a, 0x0a, 0x0c, + 0x44, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x38, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x47, + 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, + 0x49, 0x64, 0x22, 0x90, 0x01, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, + 0x79, 0x73, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, + 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x69, 0x6e, + 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x6e, + 0x65, 0x76, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x6e, 0x65, 0x76, 0x65, 0x72, 0x53, 0x65, 0x65, 0x6e, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xfc, 0x01, 0x0a, 0x07, 0x4c, 0x6f, 0x67, 0x49, 0x74, 0x65, + 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x2e, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x04, 0x74, 0x69, 0x6d, + 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x3c, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, + 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x4c, 0x6f, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, + 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, + 0x72, 0x74, 0x69, 0x65, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, + 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3b, 0x0a, 0x1a, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x47, 0x61, + 0x74, 0x65, 0x77, 0x61, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, + 0x64, 0x22, 0x34, 0x0a, 0x19, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, + 0x0a, 0x07, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x64, 0x65, 0x76, 0x45, 0x75, 0x69, 0x22, 0x34, 0x0a, 0x19, 0x53, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x65, 0x76, 0x5f, 0x65, 0x75, 0x69, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x65, 0x76, 0x45, 0x75, 0x69, 0x22, 0x44, 0x0a, + 0x13, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x07, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x67, 0x69, + 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x07, 0x72, 0x65, 0x67, 0x69, + 0x6f, 0x6e, 0x73, 0x22, 0x4c, 0x0a, 0x0e, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, + 0x74, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x06, 0x72, 0x65, 0x67, + 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, + 0x6e, 0x22, 0x26, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 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, 0x94, 0x03, 0x0a, 0x11, 0x47, 0x65, + 0x74, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 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, 0x12, 0x26, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x67, + 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x75, + 0x73, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x75, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x3b, 0x0a, 0x0f, 0x75, 0x70, 0x6c, 0x69, + 0x6e, 0x6b, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x43, 0x68, + 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x0e, 0x75, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x43, 0x68, 0x61, + 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x78, 0x31, 0x5f, 0x64, 0x65, 0x6c, + 0x61, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x72, 0x78, 0x31, 0x44, 0x65, 0x6c, + 0x61, 0x79, 0x12, 0x22, 0x0a, 0x0d, 0x72, 0x78, 0x31, 0x5f, 0x64, 0x72, 0x5f, 0x6f, 0x66, 0x66, + 0x73, 0x65, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x72, 0x78, 0x31, 0x44, 0x72, + 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x15, 0x0a, 0x06, 0x72, 0x78, 0x32, 0x5f, 0x64, 0x72, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x72, 0x78, 0x32, 0x44, 0x72, 0x12, 0x23, 0x0a, + 0x0d, 0x72, 0x78, 0x32, 0x5f, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x72, 0x78, 0x32, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, + 0x63, 0x79, 0x12, 0x2e, 0x0a, 0x14, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x62, 0x5f, 0x70, 0x69, + 0x6e, 0x67, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x5f, 0x64, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x10, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x42, 0x50, 0x69, 0x6e, 0x67, 0x53, 0x6c, 0x6f, 0x74, + 0x44, 0x72, 0x12, 0x3c, 0x0a, 0x1b, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x62, 0x5f, 0x70, 0x69, + 0x6e, 0x67, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x5f, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, + 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x17, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x42, 0x50, + 0x69, 0x6e, 0x67, 0x53, 0x6c, 0x6f, 0x74, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, + 0x22, 0x5b, 0x0a, 0x0d, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, + 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, + 0x15, 0x0a, 0x06, 0x64, 0x72, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x05, 0x64, 0x72, 0x4d, 0x69, 0x6e, 0x12, 0x15, 0x0a, 0x06, 0x64, 0x72, 0x5f, 0x6d, 0x61, 0x78, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x64, 0x72, 0x4d, 0x61, 0x78, 0x32, 0xb4, 0x08, + 0x0a, 0x0f, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x12, 0x30, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x11, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x39, 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x45, + 0x0a, 0x0c, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x18, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, + 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x45, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, + 0x70, 0x69, 0x4b, 0x65, 0x79, 0x12, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x69, 0x4b, + 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x0c, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x12, 0x18, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, + 0x12, 0x42, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x73, 0x12, + 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x3b, 0x0a, 0x08, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, + 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, + 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x12, 0x57, 0x0a, 0x12, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x64, 0x43, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4f, 0x70, + 0x65, 0x6e, 0x49, 0x64, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4f, 0x70, + 0x65, 0x6e, 0x49, 0x64, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x4c, 0x6f, 0x67, 0x69, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x11, 0x47, 0x65, + 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, + 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, + 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x53, + 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x57, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x53, + 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, + 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, + 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x48, 0x0a, 0x13, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, + 0x12, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x47, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x0c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x6f, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x22, + 0x00, 0x30, 0x01, 0x12, 0x46, 0x0a, 0x12, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x46, 0x72, 0x61, 0x6d, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x4c, 0x6f, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x22, 0x00, 0x30, 0x01, 0x12, 0x46, 0x0a, 0x12, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x73, 0x12, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x0c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x6f, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x22, + 0x00, 0x30, 0x01, 0x12, 0x41, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x67, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x18, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3c, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x52, 0x65, 0x67, + 0x69, 0x6f, 0x6e, 0x12, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x67, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x42, 0x54, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, + 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x0d, 0x49, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, + 0x6b, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( @@ -1839,7 +2241,7 @@ func file_api_internal_proto_rawDescGZIP() []byte { return file_api_internal_proto_rawDescData } -var file_api_internal_proto_msgTypes = make([]protoimpl.MessageInfo, 27) +var file_api_internal_proto_msgTypes = make([]protoimpl.MessageInfo, 32) var file_api_internal_proto_goTypes = []interface{}{ (*ApiKey)(nil), // 0: api.ApiKey (*CreateApiKeyRequest)(nil), // 1: api.CreateApiKeyRequest @@ -1866,55 +2268,69 @@ var file_api_internal_proto_goTypes = []interface{}{ (*StreamGatewayFramesRequest)(nil), // 22: api.StreamGatewayFramesRequest (*StreamDeviceFramesRequest)(nil), // 23: api.StreamDeviceFramesRequest (*StreamDeviceEventsRequest)(nil), // 24: api.StreamDeviceEventsRequest - nil, // 25: api.GetDevicesSummaryResponse.DrCountEntry - nil, // 26: api.LogItem.PropertiesEntry - (*timestamppb.Timestamp)(nil), // 27: google.protobuf.Timestamp - (*User)(nil), // 28: api.User - (*emptypb.Empty)(nil), // 29: google.protobuf.Empty + (*ListRegionsResponse)(nil), // 25: api.ListRegionsResponse + (*RegionListItem)(nil), // 26: api.RegionListItem + (*GetRegionRequest)(nil), // 27: api.GetRegionRequest + (*GetRegionResponse)(nil), // 28: api.GetRegionResponse + (*RegionChannel)(nil), // 29: api.RegionChannel + nil, // 30: api.GetDevicesSummaryResponse.DrCountEntry + nil, // 31: api.LogItem.PropertiesEntry + (*timestamppb.Timestamp)(nil), // 32: google.protobuf.Timestamp + (*User)(nil), // 33: api.User + (common.Region)(0), // 34: common.Region + (*emptypb.Empty)(nil), // 35: google.protobuf.Empty } var file_api_internal_proto_depIdxs = []int32{ 0, // 0: api.CreateApiKeyRequest.api_key:type_name -> api.ApiKey 0, // 1: api.ListApiKeysResponse.result:type_name -> api.ApiKey - 27, // 2: api.UserTenantLink.created_at:type_name -> google.protobuf.Timestamp - 27, // 3: api.UserTenantLink.updated_at:type_name -> google.protobuf.Timestamp - 28, // 4: api.ProfileResponse.user:type_name -> api.User + 32, // 2: api.UserTenantLink.created_at:type_name -> google.protobuf.Timestamp + 32, // 3: api.UserTenantLink.updated_at:type_name -> google.protobuf.Timestamp + 33, // 4: api.ProfileResponse.user:type_name -> api.User 6, // 5: api.ProfileResponse.tenants:type_name -> api.UserTenantLink 12, // 6: api.GlobalSearchResponse.result:type_name -> api.GlobalSearchResult 14, // 7: api.SettingsResponse.openid_connect:type_name -> api.OpenIdConnect - 25, // 8: api.GetDevicesSummaryResponse.dr_count:type_name -> api.GetDevicesSummaryResponse.DrCountEntry - 27, // 9: api.LogItem.time:type_name -> google.protobuf.Timestamp - 26, // 10: api.LogItem.properties:type_name -> api.LogItem.PropertiesEntry - 7, // 11: api.InternalService.Login:input_type -> api.LoginRequest - 29, // 12: api.InternalService.Profile:input_type -> google.protobuf.Empty - 10, // 13: api.InternalService.GlobalSearch:input_type -> api.GlobalSearchRequest - 1, // 14: api.InternalService.CreateApiKey:input_type -> api.CreateApiKeyRequest - 3, // 15: api.InternalService.DeleteApiKey:input_type -> api.DeleteApiKeyRequest - 4, // 16: api.InternalService.ListApiKeys:input_type -> api.ListApiKeysRequest - 29, // 17: api.InternalService.Settings:input_type -> google.protobuf.Empty - 15, // 18: api.InternalService.OpenIdConnectLogin:input_type -> api.OpenIdConnectLoginRequest - 17, // 19: api.InternalService.GetDevicesSummary:input_type -> api.GetDevicesSummaryRequest - 19, // 20: api.InternalService.GetGatewaysSummary:input_type -> api.GetGatewaysSummaryRequest - 22, // 21: api.InternalService.StreamGatewayFrames:input_type -> api.StreamGatewayFramesRequest - 23, // 22: api.InternalService.StreamDeviceFrames:input_type -> api.StreamDeviceFramesRequest - 24, // 23: api.InternalService.StreamDeviceEvents:input_type -> api.StreamDeviceEventsRequest - 8, // 24: api.InternalService.Login:output_type -> api.LoginResponse - 9, // 25: api.InternalService.Profile:output_type -> api.ProfileResponse - 11, // 26: api.InternalService.GlobalSearch:output_type -> api.GlobalSearchResponse - 2, // 27: api.InternalService.CreateApiKey:output_type -> api.CreateApiKeyResponse - 29, // 28: api.InternalService.DeleteApiKey:output_type -> google.protobuf.Empty - 5, // 29: api.InternalService.ListApiKeys:output_type -> api.ListApiKeysResponse - 13, // 30: api.InternalService.Settings:output_type -> api.SettingsResponse - 16, // 31: api.InternalService.OpenIdConnectLogin:output_type -> api.OpenIdConnectLoginResponse - 18, // 32: api.InternalService.GetDevicesSummary:output_type -> api.GetDevicesSummaryResponse - 20, // 33: api.InternalService.GetGatewaysSummary:output_type -> api.GetGatewaysSummaryResponse - 21, // 34: api.InternalService.StreamGatewayFrames:output_type -> api.LogItem - 21, // 35: api.InternalService.StreamDeviceFrames:output_type -> api.LogItem - 21, // 36: api.InternalService.StreamDeviceEvents:output_type -> api.LogItem - 24, // [24:37] is the sub-list for method output_type - 11, // [11:24] is the sub-list for method input_type - 11, // [11:11] is the sub-list for extension type_name - 11, // [11:11] is the sub-list for extension extendee - 0, // [0:11] is the sub-list for field type_name + 30, // 8: api.GetDevicesSummaryResponse.dr_count:type_name -> api.GetDevicesSummaryResponse.DrCountEntry + 32, // 9: api.LogItem.time:type_name -> google.protobuf.Timestamp + 31, // 10: api.LogItem.properties:type_name -> api.LogItem.PropertiesEntry + 26, // 11: api.ListRegionsResponse.regions:type_name -> api.RegionListItem + 34, // 12: api.RegionListItem.region:type_name -> common.Region + 34, // 13: api.GetRegionResponse.region:type_name -> common.Region + 29, // 14: api.GetRegionResponse.uplink_channels:type_name -> api.RegionChannel + 7, // 15: api.InternalService.Login:input_type -> api.LoginRequest + 35, // 16: api.InternalService.Profile:input_type -> google.protobuf.Empty + 10, // 17: api.InternalService.GlobalSearch:input_type -> api.GlobalSearchRequest + 1, // 18: api.InternalService.CreateApiKey:input_type -> api.CreateApiKeyRequest + 3, // 19: api.InternalService.DeleteApiKey:input_type -> api.DeleteApiKeyRequest + 4, // 20: api.InternalService.ListApiKeys:input_type -> api.ListApiKeysRequest + 35, // 21: api.InternalService.Settings:input_type -> google.protobuf.Empty + 15, // 22: api.InternalService.OpenIdConnectLogin:input_type -> api.OpenIdConnectLoginRequest + 17, // 23: api.InternalService.GetDevicesSummary:input_type -> api.GetDevicesSummaryRequest + 19, // 24: api.InternalService.GetGatewaysSummary:input_type -> api.GetGatewaysSummaryRequest + 22, // 25: api.InternalService.StreamGatewayFrames:input_type -> api.StreamGatewayFramesRequest + 23, // 26: api.InternalService.StreamDeviceFrames:input_type -> api.StreamDeviceFramesRequest + 24, // 27: api.InternalService.StreamDeviceEvents:input_type -> api.StreamDeviceEventsRequest + 35, // 28: api.InternalService.ListRegions:input_type -> google.protobuf.Empty + 27, // 29: api.InternalService.GetRegion:input_type -> api.GetRegionRequest + 8, // 30: api.InternalService.Login:output_type -> api.LoginResponse + 9, // 31: api.InternalService.Profile:output_type -> api.ProfileResponse + 11, // 32: api.InternalService.GlobalSearch:output_type -> api.GlobalSearchResponse + 2, // 33: api.InternalService.CreateApiKey:output_type -> api.CreateApiKeyResponse + 35, // 34: api.InternalService.DeleteApiKey:output_type -> google.protobuf.Empty + 5, // 35: api.InternalService.ListApiKeys:output_type -> api.ListApiKeysResponse + 13, // 36: api.InternalService.Settings:output_type -> api.SettingsResponse + 16, // 37: api.InternalService.OpenIdConnectLogin:output_type -> api.OpenIdConnectLoginResponse + 18, // 38: api.InternalService.GetDevicesSummary:output_type -> api.GetDevicesSummaryResponse + 20, // 39: api.InternalService.GetGatewaysSummary:output_type -> api.GetGatewaysSummaryResponse + 21, // 40: api.InternalService.StreamGatewayFrames:output_type -> api.LogItem + 21, // 41: api.InternalService.StreamDeviceFrames:output_type -> api.LogItem + 21, // 42: api.InternalService.StreamDeviceEvents:output_type -> api.LogItem + 25, // 43: api.InternalService.ListRegions:output_type -> api.ListRegionsResponse + 28, // 44: api.InternalService.GetRegion:output_type -> api.GetRegionResponse + 30, // [30:45] is the sub-list for method output_type + 15, // [15:30] is the sub-list for method input_type + 15, // [15:15] is the sub-list for extension type_name + 15, // [15:15] is the sub-list for extension extendee + 0, // [0:15] is the sub-list for field type_name } func init() { file_api_internal_proto_init() } @@ -2224,6 +2640,66 @@ func file_api_internal_proto_init() { return nil } } + file_api_internal_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListRegionsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_internal_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RegionListItem); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_internal_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetRegionRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_internal_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetRegionResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_internal_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RegionChannel); 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{ @@ -2231,7 +2707,7 @@ func file_api_internal_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_api_internal_proto_rawDesc, NumEnums: 0, - NumMessages: 27, + NumMessages: 32, NumExtensions: 0, NumServices: 1, }, diff --git a/api/go/api/internal_grpc.pb.go b/api/go/api/internal_grpc.pb.go index 8ac08ad7..d49bbafa 100644 --- a/api/go/api/internal_grpc.pb.go +++ b/api/go/api/internal_grpc.pb.go @@ -49,6 +49,10 @@ type InternalServiceClient interface { StreamDeviceFrames(ctx context.Context, in *StreamDeviceFramesRequest, opts ...grpc.CallOption) (InternalService_StreamDeviceFramesClient, error) // Stream events for the given Device EUI. StreamDeviceEvents(ctx context.Context, in *StreamDeviceEventsRequest, opts ...grpc.CallOption) (InternalService_StreamDeviceEventsClient, error) + // ListRegions lists the available (configured) regions. + ListRegions(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*ListRegionsResponse, error) + // GetRegion returns the region details for the given region. + GetRegion(ctx context.Context, in *GetRegionRequest, opts ...grpc.CallOption) (*GetRegionResponse, error) } type internalServiceClient struct { @@ -245,6 +249,24 @@ func (x *internalServiceStreamDeviceEventsClient) Recv() (*LogItem, error) { return m, nil } +func (c *internalServiceClient) ListRegions(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*ListRegionsResponse, error) { + out := new(ListRegionsResponse) + err := c.cc.Invoke(ctx, "/api.InternalService/ListRegions", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *internalServiceClient) GetRegion(ctx context.Context, in *GetRegionRequest, opts ...grpc.CallOption) (*GetRegionResponse, error) { + out := new(GetRegionResponse) + err := c.cc.Invoke(ctx, "/api.InternalService/GetRegion", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // InternalServiceServer is the server API for InternalService service. // All implementations must embed UnimplementedInternalServiceServer // for forward compatibility @@ -275,6 +297,10 @@ type InternalServiceServer interface { StreamDeviceFrames(*StreamDeviceFramesRequest, InternalService_StreamDeviceFramesServer) error // Stream events for the given Device EUI. StreamDeviceEvents(*StreamDeviceEventsRequest, InternalService_StreamDeviceEventsServer) error + // ListRegions lists the available (configured) regions. + ListRegions(context.Context, *emptypb.Empty) (*ListRegionsResponse, error) + // GetRegion returns the region details for the given region. + GetRegion(context.Context, *GetRegionRequest) (*GetRegionResponse, error) mustEmbedUnimplementedInternalServiceServer() } @@ -321,6 +347,12 @@ func (UnimplementedInternalServiceServer) StreamDeviceFrames(*StreamDeviceFrames func (UnimplementedInternalServiceServer) StreamDeviceEvents(*StreamDeviceEventsRequest, InternalService_StreamDeviceEventsServer) error { return status.Errorf(codes.Unimplemented, "method StreamDeviceEvents not implemented") } +func (UnimplementedInternalServiceServer) ListRegions(context.Context, *emptypb.Empty) (*ListRegionsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListRegions not implemented") +} +func (UnimplementedInternalServiceServer) GetRegion(context.Context, *GetRegionRequest) (*GetRegionResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetRegion not implemented") +} func (UnimplementedInternalServiceServer) mustEmbedUnimplementedInternalServiceServer() {} // UnsafeInternalServiceServer may be embedded to opt out of forward compatibility for this service. @@ -577,6 +609,42 @@ func (x *internalServiceStreamDeviceEventsServer) Send(m *LogItem) error { return x.ServerStream.SendMsg(m) } +func _InternalService_ListRegions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(emptypb.Empty) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(InternalServiceServer).ListRegions(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/api.InternalService/ListRegions", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(InternalServiceServer).ListRegions(ctx, req.(*emptypb.Empty)) + } + return interceptor(ctx, in, info, handler) +} + +func _InternalService_GetRegion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetRegionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(InternalServiceServer).GetRegion(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/api.InternalService/GetRegion", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(InternalServiceServer).GetRegion(ctx, req.(*GetRegionRequest)) + } + return interceptor(ctx, in, info, handler) +} + // InternalService_ServiceDesc is the grpc.ServiceDesc for InternalService service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -624,6 +692,14 @@ var InternalService_ServiceDesc = grpc.ServiceDesc{ MethodName: "GetGatewaysSummary", Handler: _InternalService_GetGatewaysSummary_Handler, }, + { + MethodName: "ListRegions", + Handler: _InternalService_ListRegions_Handler, + }, + { + MethodName: "GetRegion", + Handler: _InternalService_GetRegion_Handler, + }, }, Streams: []grpc.StreamDesc{ { diff --git a/api/grpc-web/api/internal_grpc_web_pb.d.ts b/api/grpc-web/api/internal_grpc_web_pb.d.ts index ea8e318d..1dc86b99 100644 --- a/api/grpc-web/api/internal_grpc_web_pb.d.ts +++ b/api/grpc-web/api/internal_grpc_web_pb.d.ts @@ -94,6 +94,20 @@ export class InternalServiceClient { metadata?: grpcWeb.Metadata ): grpcWeb.ClientReadableStream; + listRegions( + request: google_protobuf_empty_pb.Empty, + metadata: grpcWeb.Metadata | undefined, + callback: (err: grpcWeb.Error, + response: api_internal_pb.ListRegionsResponse) => void + ): grpcWeb.ClientReadableStream; + + getRegion( + request: api_internal_pb.GetRegionRequest, + metadata: grpcWeb.Metadata | undefined, + callback: (err: grpcWeb.Error, + response: api_internal_pb.GetRegionResponse) => void + ): grpcWeb.ClientReadableStream; + } export class InternalServicePromiseClient { @@ -166,5 +180,15 @@ export class InternalServicePromiseClient { metadata?: grpcWeb.Metadata ): grpcWeb.ClientReadableStream; + listRegions( + request: google_protobuf_empty_pb.Empty, + metadata?: grpcWeb.Metadata + ): Promise; + + getRegion( + request: api_internal_pb.GetRegionRequest, + metadata?: grpcWeb.Metadata + ): Promise; + } diff --git a/api/grpc-web/api/internal_grpc_web_pb.js b/api/grpc-web/api/internal_grpc_web_pb.js index cfd6f1aa..884613ef 100644 --- a/api/grpc-web/api/internal_grpc_web_pb.js +++ b/api/grpc-web/api/internal_grpc_web_pb.js @@ -20,6 +20,8 @@ var google_protobuf_timestamp_pb = require('google-protobuf/google/protobuf/time var google_protobuf_empty_pb = require('google-protobuf/google/protobuf/empty_pb.js') +var common_common_pb = require('../common/common_pb.js') + var api_user_pb = require('../api/user_pb.js') const proto = {}; proto.api = require('./internal_pb.js'); @@ -1101,5 +1103,165 @@ proto.api.InternalServicePromiseClient.prototype.streamDeviceEvents = }; +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.google.protobuf.Empty, + * !proto.api.ListRegionsResponse>} + */ +const methodDescriptor_InternalService_ListRegions = new grpc.web.MethodDescriptor( + '/api.InternalService/ListRegions', + grpc.web.MethodType.UNARY, + google_protobuf_empty_pb.Empty, + proto.api.ListRegionsResponse, + /** + * @param {!proto.google.protobuf.Empty} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.api.ListRegionsResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.google.protobuf.Empty, + * !proto.api.ListRegionsResponse>} + */ +const methodInfo_InternalService_ListRegions = new grpc.web.AbstractClientBase.MethodInfo( + proto.api.ListRegionsResponse, + /** + * @param {!proto.google.protobuf.Empty} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.api.ListRegionsResponse.deserializeBinary +); + + +/** + * @param {!proto.google.protobuf.Empty} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.api.ListRegionsResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.api.InternalServiceClient.prototype.listRegions = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/api.InternalService/ListRegions', + request, + metadata || {}, + methodDescriptor_InternalService_ListRegions, + callback); +}; + + +/** + * @param {!proto.google.protobuf.Empty} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.api.InternalServicePromiseClient.prototype.listRegions = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/api.InternalService/ListRegions', + request, + metadata || {}, + methodDescriptor_InternalService_ListRegions); +}; + + +/** + * @const + * @type {!grpc.web.MethodDescriptor< + * !proto.api.GetRegionRequest, + * !proto.api.GetRegionResponse>} + */ +const methodDescriptor_InternalService_GetRegion = new grpc.web.MethodDescriptor( + '/api.InternalService/GetRegion', + grpc.web.MethodType.UNARY, + proto.api.GetRegionRequest, + proto.api.GetRegionResponse, + /** + * @param {!proto.api.GetRegionRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.api.GetRegionResponse.deserializeBinary +); + + +/** + * @const + * @type {!grpc.web.AbstractClientBase.MethodInfo< + * !proto.api.GetRegionRequest, + * !proto.api.GetRegionResponse>} + */ +const methodInfo_InternalService_GetRegion = new grpc.web.AbstractClientBase.MethodInfo( + proto.api.GetRegionResponse, + /** + * @param {!proto.api.GetRegionRequest} request + * @return {!Uint8Array} + */ + function(request) { + return request.serializeBinary(); + }, + proto.api.GetRegionResponse.deserializeBinary +); + + +/** + * @param {!proto.api.GetRegionRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @param {function(?grpc.web.Error, ?proto.api.GetRegionResponse)} + * callback The callback function(error, response) + * @return {!grpc.web.ClientReadableStream|undefined} + * The XHR Node Readable Stream + */ +proto.api.InternalServiceClient.prototype.getRegion = + function(request, metadata, callback) { + return this.client_.rpcCall(this.hostname_ + + '/api.InternalService/GetRegion', + request, + metadata || {}, + methodDescriptor_InternalService_GetRegion, + callback); +}; + + +/** + * @param {!proto.api.GetRegionRequest} request The + * request proto + * @param {?Object} metadata User defined + * call metadata + * @return {!Promise} + * Promise that resolves to the response + */ +proto.api.InternalServicePromiseClient.prototype.getRegion = + function(request, metadata) { + return this.client_.unaryCall(this.hostname_ + + '/api.InternalService/GetRegion', + request, + metadata || {}, + methodDescriptor_InternalService_GetRegion); +}; + + module.exports = proto.api; diff --git a/api/grpc-web/api/internal_pb.d.ts b/api/grpc-web/api/internal_pb.d.ts index 5f3a4b9f..45ae3e2c 100644 --- a/api/grpc-web/api/internal_pb.d.ts +++ b/api/grpc-web/api/internal_pb.d.ts @@ -2,6 +2,7 @@ import * as jspb from 'google-protobuf' import * as google_protobuf_timestamp_pb from 'google-protobuf/google/protobuf/timestamp_pb'; import * as google_protobuf_empty_pb from 'google-protobuf/google/protobuf/empty_pb'; +import * as common_common_pb from '../common/common_pb'; import * as api_user_pb from '../api/user_pb'; @@ -629,3 +630,145 @@ export namespace StreamDeviceEventsRequest { } } +export class ListRegionsResponse extends jspb.Message { + getRegionsList(): Array; + setRegionsList(value: Array): ListRegionsResponse; + clearRegionsList(): ListRegionsResponse; + addRegions(value?: RegionListItem, index?: number): RegionListItem; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ListRegionsResponse.AsObject; + static toObject(includeInstance: boolean, msg: ListRegionsResponse): ListRegionsResponse.AsObject; + static serializeBinaryToWriter(message: ListRegionsResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ListRegionsResponse; + static deserializeBinaryFromReader(message: ListRegionsResponse, reader: jspb.BinaryReader): ListRegionsResponse; +} + +export namespace ListRegionsResponse { + export type AsObject = { + regionsList: Array, + } +} + +export class RegionListItem extends jspb.Message { + getName(): string; + setName(value: string): RegionListItem; + + getRegion(): common_common_pb.Region; + setRegion(value: common_common_pb.Region): RegionListItem; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): RegionListItem.AsObject; + static toObject(includeInstance: boolean, msg: RegionListItem): RegionListItem.AsObject; + static serializeBinaryToWriter(message: RegionListItem, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): RegionListItem; + static deserializeBinaryFromReader(message: RegionListItem, reader: jspb.BinaryReader): RegionListItem; +} + +export namespace RegionListItem { + export type AsObject = { + name: string, + region: common_common_pb.Region, + } +} + +export class GetRegionRequest extends jspb.Message { + getName(): string; + setName(value: string): GetRegionRequest; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetRegionRequest.AsObject; + static toObject(includeInstance: boolean, msg: GetRegionRequest): GetRegionRequest.AsObject; + static serializeBinaryToWriter(message: GetRegionRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetRegionRequest; + static deserializeBinaryFromReader(message: GetRegionRequest, reader: jspb.BinaryReader): GetRegionRequest; +} + +export namespace GetRegionRequest { + export type AsObject = { + name: string, + } +} + +export class GetRegionResponse extends jspb.Message { + getName(): string; + setName(value: string): GetRegionResponse; + + getRegion(): common_common_pb.Region; + setRegion(value: common_common_pb.Region): GetRegionResponse; + + getUserInfo(): string; + setUserInfo(value: string): GetRegionResponse; + + getUplinkChannelsList(): Array; + setUplinkChannelsList(value: Array): GetRegionResponse; + clearUplinkChannelsList(): GetRegionResponse; + addUplinkChannels(value?: RegionChannel, index?: number): RegionChannel; + + getRx1Delay(): number; + setRx1Delay(value: number): GetRegionResponse; + + getRx1DrOffset(): number; + setRx1DrOffset(value: number): GetRegionResponse; + + getRx2Dr(): number; + setRx2Dr(value: number): GetRegionResponse; + + getRx2Frequency(): number; + setRx2Frequency(value: number): GetRegionResponse; + + getClassBPingSlotDr(): number; + setClassBPingSlotDr(value: number): GetRegionResponse; + + getClassBPingSlotFrequency(): number; + setClassBPingSlotFrequency(value: number): GetRegionResponse; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetRegionResponse.AsObject; + static toObject(includeInstance: boolean, msg: GetRegionResponse): GetRegionResponse.AsObject; + static serializeBinaryToWriter(message: GetRegionResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetRegionResponse; + static deserializeBinaryFromReader(message: GetRegionResponse, reader: jspb.BinaryReader): GetRegionResponse; +} + +export namespace GetRegionResponse { + export type AsObject = { + name: string, + region: common_common_pb.Region, + userInfo: string, + uplinkChannelsList: Array, + rx1Delay: number, + rx1DrOffset: number, + rx2Dr: number, + rx2Frequency: number, + classBPingSlotDr: number, + classBPingSlotFrequency: number, + } +} + +export class RegionChannel extends jspb.Message { + getFrequency(): number; + setFrequency(value: number): RegionChannel; + + getDrMin(): number; + setDrMin(value: number): RegionChannel; + + getDrMax(): number; + setDrMax(value: number): RegionChannel; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): RegionChannel.AsObject; + static toObject(includeInstance: boolean, msg: RegionChannel): RegionChannel.AsObject; + static serializeBinaryToWriter(message: RegionChannel, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): RegionChannel; + static deserializeBinaryFromReader(message: RegionChannel, reader: jspb.BinaryReader): RegionChannel; +} + +export namespace RegionChannel { + export type AsObject = { + frequency: number, + drMin: number, + drMax: number, + } +} + diff --git a/api/grpc-web/api/internal_pb.js b/api/grpc-web/api/internal_pb.js index 15f98d35..661325db 100644 --- a/api/grpc-web/api/internal_pb.js +++ b/api/grpc-web/api/internal_pb.js @@ -19,6 +19,8 @@ var google_protobuf_timestamp_pb = require('google-protobuf/google/protobuf/time goog.object.extend(proto, google_protobuf_timestamp_pb); var google_protobuf_empty_pb = require('google-protobuf/google/protobuf/empty_pb.js'); goog.object.extend(proto, google_protobuf_empty_pb); +var common_common_pb = require('../common/common_pb.js'); +goog.object.extend(proto, common_common_pb); var api_user_pb = require('../api/user_pb.js'); goog.object.extend(proto, api_user_pb); goog.exportSymbol('proto.api.ApiKey', null, global); @@ -29,11 +31,14 @@ goog.exportSymbol('proto.api.GetDevicesSummaryRequest', null, global); goog.exportSymbol('proto.api.GetDevicesSummaryResponse', null, global); goog.exportSymbol('proto.api.GetGatewaysSummaryRequest', null, global); goog.exportSymbol('proto.api.GetGatewaysSummaryResponse', null, global); +goog.exportSymbol('proto.api.GetRegionRequest', null, global); +goog.exportSymbol('proto.api.GetRegionResponse', null, global); goog.exportSymbol('proto.api.GlobalSearchRequest', null, global); goog.exportSymbol('proto.api.GlobalSearchResponse', null, global); goog.exportSymbol('proto.api.GlobalSearchResult', null, global); goog.exportSymbol('proto.api.ListApiKeysRequest', null, global); goog.exportSymbol('proto.api.ListApiKeysResponse', null, global); +goog.exportSymbol('proto.api.ListRegionsResponse', null, global); goog.exportSymbol('proto.api.LogItem', null, global); goog.exportSymbol('proto.api.LoginRequest', null, global); goog.exportSymbol('proto.api.LoginResponse', null, global); @@ -41,6 +46,8 @@ goog.exportSymbol('proto.api.OpenIdConnect', null, global); goog.exportSymbol('proto.api.OpenIdConnectLoginRequest', null, global); goog.exportSymbol('proto.api.OpenIdConnectLoginResponse', null, global); goog.exportSymbol('proto.api.ProfileResponse', null, global); +goog.exportSymbol('proto.api.RegionChannel', null, global); +goog.exportSymbol('proto.api.RegionListItem', null, global); goog.exportSymbol('proto.api.SettingsResponse', null, global); goog.exportSymbol('proto.api.StreamDeviceEventsRequest', null, global); goog.exportSymbol('proto.api.StreamDeviceFramesRequest', null, global); @@ -571,6 +578,111 @@ if (goog.DEBUG && !COMPILED) { */ proto.api.StreamDeviceEventsRequest.displayName = 'proto.api.StreamDeviceEventsRequest'; } +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.api.ListRegionsResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.api.ListRegionsResponse.repeatedFields_, null); +}; +goog.inherits(proto.api.ListRegionsResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.api.ListRegionsResponse.displayName = 'proto.api.ListRegionsResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.api.RegionListItem = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.api.RegionListItem, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.api.RegionListItem.displayName = 'proto.api.RegionListItem'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.api.GetRegionRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.api.GetRegionRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.api.GetRegionRequest.displayName = 'proto.api.GetRegionRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.api.GetRegionResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.api.GetRegionResponse.repeatedFields_, null); +}; +goog.inherits(proto.api.GetRegionResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.api.GetRegionResponse.displayName = 'proto.api.GetRegionResponse'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.api.RegionChannel = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.api.RegionChannel, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.api.RegionChannel.displayName = 'proto.api.RegionChannel'; +} @@ -5213,4 +5325,1074 @@ proto.api.StreamDeviceEventsRequest.prototype.setDevEui = function(value) { }; + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.api.ListRegionsResponse.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.api.ListRegionsResponse.prototype.toObject = function(opt_includeInstance) { + return proto.api.ListRegionsResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.api.ListRegionsResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.api.ListRegionsResponse.toObject = function(includeInstance, msg) { + var f, obj = { + regionsList: jspb.Message.toObjectList(msg.getRegionsList(), + proto.api.RegionListItem.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.api.ListRegionsResponse} + */ +proto.api.ListRegionsResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.api.ListRegionsResponse; + return proto.api.ListRegionsResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.api.ListRegionsResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.api.ListRegionsResponse} + */ +proto.api.ListRegionsResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.api.RegionListItem; + reader.readMessage(value,proto.api.RegionListItem.deserializeBinaryFromReader); + msg.addRegions(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.api.ListRegionsResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.api.ListRegionsResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.api.ListRegionsResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.api.ListRegionsResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getRegionsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + proto.api.RegionListItem.serializeBinaryToWriter + ); + } +}; + + +/** + * repeated RegionListItem regions = 1; + * @return {!Array} + */ +proto.api.ListRegionsResponse.prototype.getRegionsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.api.RegionListItem, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.api.ListRegionsResponse} returns this +*/ +proto.api.ListRegionsResponse.prototype.setRegionsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.api.RegionListItem=} opt_value + * @param {number=} opt_index + * @return {!proto.api.RegionListItem} + */ +proto.api.ListRegionsResponse.prototype.addRegions = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.api.RegionListItem, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.api.ListRegionsResponse} returns this + */ +proto.api.ListRegionsResponse.prototype.clearRegionsList = function() { + return this.setRegionsList([]); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.api.RegionListItem.prototype.toObject = function(opt_includeInstance) { + return proto.api.RegionListItem.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.api.RegionListItem} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.api.RegionListItem.toObject = function(includeInstance, msg) { + var f, obj = { + name: jspb.Message.getFieldWithDefault(msg, 1, ""), + region: jspb.Message.getFieldWithDefault(msg, 2, 0) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.api.RegionListItem} + */ +proto.api.RegionListItem.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.api.RegionListItem; + return proto.api.RegionListItem.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.api.RegionListItem} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.api.RegionListItem} + */ +proto.api.RegionListItem.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setName(value); + break; + case 2: + var value = /** @type {!proto.common.Region} */ (reader.readEnum()); + msg.setRegion(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.api.RegionListItem.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.api.RegionListItem.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.api.RegionListItem} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.api.RegionListItem.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getName(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getRegion(); + if (f !== 0.0) { + writer.writeEnum( + 2, + f + ); + } +}; + + +/** + * optional string name = 1; + * @return {string} + */ +proto.api.RegionListItem.prototype.getName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.api.RegionListItem} returns this + */ +proto.api.RegionListItem.prototype.setName = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional common.Region region = 2; + * @return {!proto.common.Region} + */ +proto.api.RegionListItem.prototype.getRegion = function() { + return /** @type {!proto.common.Region} */ (jspb.Message.getFieldWithDefault(this, 2, 0)); +}; + + +/** + * @param {!proto.common.Region} value + * @return {!proto.api.RegionListItem} returns this + */ +proto.api.RegionListItem.prototype.setRegion = function(value) { + return jspb.Message.setProto3EnumField(this, 2, value); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.api.GetRegionRequest.prototype.toObject = function(opt_includeInstance) { + return proto.api.GetRegionRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.api.GetRegionRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.api.GetRegionRequest.toObject = function(includeInstance, msg) { + var f, obj = { + name: jspb.Message.getFieldWithDefault(msg, 1, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.api.GetRegionRequest} + */ +proto.api.GetRegionRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.api.GetRegionRequest; + return proto.api.GetRegionRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.api.GetRegionRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.api.GetRegionRequest} + */ +proto.api.GetRegionRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setName(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.api.GetRegionRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.api.GetRegionRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.api.GetRegionRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.api.GetRegionRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getName(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } +}; + + +/** + * optional string name = 1; + * @return {string} + */ +proto.api.GetRegionRequest.prototype.getName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.api.GetRegionRequest} returns this + */ +proto.api.GetRegionRequest.prototype.setName = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.api.GetRegionResponse.repeatedFields_ = [4]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.api.GetRegionResponse.prototype.toObject = function(opt_includeInstance) { + return proto.api.GetRegionResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.api.GetRegionResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.api.GetRegionResponse.toObject = function(includeInstance, msg) { + var f, obj = { + name: jspb.Message.getFieldWithDefault(msg, 1, ""), + region: jspb.Message.getFieldWithDefault(msg, 2, 0), + userInfo: jspb.Message.getFieldWithDefault(msg, 3, ""), + uplinkChannelsList: jspb.Message.toObjectList(msg.getUplinkChannelsList(), + proto.api.RegionChannel.toObject, includeInstance), + rx1Delay: jspb.Message.getFieldWithDefault(msg, 5, 0), + rx1DrOffset: jspb.Message.getFieldWithDefault(msg, 6, 0), + rx2Dr: jspb.Message.getFieldWithDefault(msg, 7, 0), + rx2Frequency: jspb.Message.getFieldWithDefault(msg, 8, 0), + classBPingSlotDr: jspb.Message.getFieldWithDefault(msg, 9, 0), + classBPingSlotFrequency: jspb.Message.getFieldWithDefault(msg, 10, 0) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.api.GetRegionResponse} + */ +proto.api.GetRegionResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.api.GetRegionResponse; + return proto.api.GetRegionResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.api.GetRegionResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.api.GetRegionResponse} + */ +proto.api.GetRegionResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setName(value); + break; + case 2: + var value = /** @type {!proto.common.Region} */ (reader.readEnum()); + msg.setRegion(value); + break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setUserInfo(value); + break; + case 4: + var value = new proto.api.RegionChannel; + reader.readMessage(value,proto.api.RegionChannel.deserializeBinaryFromReader); + msg.addUplinkChannels(value); + break; + case 5: + var value = /** @type {number} */ (reader.readUint32()); + msg.setRx1Delay(value); + break; + case 6: + var value = /** @type {number} */ (reader.readUint32()); + msg.setRx1DrOffset(value); + break; + case 7: + var value = /** @type {number} */ (reader.readUint32()); + msg.setRx2Dr(value); + break; + case 8: + var value = /** @type {number} */ (reader.readUint32()); + msg.setRx2Frequency(value); + break; + case 9: + var value = /** @type {number} */ (reader.readUint32()); + msg.setClassBPingSlotDr(value); + break; + case 10: + var value = /** @type {number} */ (reader.readUint32()); + msg.setClassBPingSlotFrequency(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.api.GetRegionResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.api.GetRegionResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.api.GetRegionResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.api.GetRegionResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getName(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getRegion(); + if (f !== 0.0) { + writer.writeEnum( + 2, + f + ); + } + f = message.getUserInfo(); + if (f.length > 0) { + writer.writeString( + 3, + f + ); + } + f = message.getUplinkChannelsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 4, + f, + proto.api.RegionChannel.serializeBinaryToWriter + ); + } + f = message.getRx1Delay(); + if (f !== 0) { + writer.writeUint32( + 5, + f + ); + } + f = message.getRx1DrOffset(); + if (f !== 0) { + writer.writeUint32( + 6, + f + ); + } + f = message.getRx2Dr(); + if (f !== 0) { + writer.writeUint32( + 7, + f + ); + } + f = message.getRx2Frequency(); + if (f !== 0) { + writer.writeUint32( + 8, + f + ); + } + f = message.getClassBPingSlotDr(); + if (f !== 0) { + writer.writeUint32( + 9, + f + ); + } + f = message.getClassBPingSlotFrequency(); + if (f !== 0) { + writer.writeUint32( + 10, + f + ); + } +}; + + +/** + * optional string name = 1; + * @return {string} + */ +proto.api.GetRegionResponse.prototype.getName = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.api.GetRegionResponse} returns this + */ +proto.api.GetRegionResponse.prototype.setName = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional common.Region region = 2; + * @return {!proto.common.Region} + */ +proto.api.GetRegionResponse.prototype.getRegion = function() { + return /** @type {!proto.common.Region} */ (jspb.Message.getFieldWithDefault(this, 2, 0)); +}; + + +/** + * @param {!proto.common.Region} value + * @return {!proto.api.GetRegionResponse} returns this + */ +proto.api.GetRegionResponse.prototype.setRegion = function(value) { + return jspb.Message.setProto3EnumField(this, 2, value); +}; + + +/** + * optional string user_info = 3; + * @return {string} + */ +proto.api.GetRegionResponse.prototype.getUserInfo = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, "")); +}; + + +/** + * @param {string} value + * @return {!proto.api.GetRegionResponse} returns this + */ +proto.api.GetRegionResponse.prototype.setUserInfo = function(value) { + return jspb.Message.setProto3StringField(this, 3, value); +}; + + +/** + * repeated RegionChannel uplink_channels = 4; + * @return {!Array} + */ +proto.api.GetRegionResponse.prototype.getUplinkChannelsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.api.RegionChannel, 4)); +}; + + +/** + * @param {!Array} value + * @return {!proto.api.GetRegionResponse} returns this +*/ +proto.api.GetRegionResponse.prototype.setUplinkChannelsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 4, value); +}; + + +/** + * @param {!proto.api.RegionChannel=} opt_value + * @param {number=} opt_index + * @return {!proto.api.RegionChannel} + */ +proto.api.GetRegionResponse.prototype.addUplinkChannels = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 4, opt_value, proto.api.RegionChannel, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.api.GetRegionResponse} returns this + */ +proto.api.GetRegionResponse.prototype.clearUplinkChannelsList = function() { + return this.setUplinkChannelsList([]); +}; + + +/** + * optional uint32 rx1_delay = 5; + * @return {number} + */ +proto.api.GetRegionResponse.prototype.getRx1Delay = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 5, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.api.GetRegionResponse} returns this + */ +proto.api.GetRegionResponse.prototype.setRx1Delay = function(value) { + return jspb.Message.setProto3IntField(this, 5, value); +}; + + +/** + * optional uint32 rx1_dr_offset = 6; + * @return {number} + */ +proto.api.GetRegionResponse.prototype.getRx1DrOffset = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 6, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.api.GetRegionResponse} returns this + */ +proto.api.GetRegionResponse.prototype.setRx1DrOffset = function(value) { + return jspb.Message.setProto3IntField(this, 6, value); +}; + + +/** + * optional uint32 rx2_dr = 7; + * @return {number} + */ +proto.api.GetRegionResponse.prototype.getRx2Dr = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 7, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.api.GetRegionResponse} returns this + */ +proto.api.GetRegionResponse.prototype.setRx2Dr = function(value) { + return jspb.Message.setProto3IntField(this, 7, value); +}; + + +/** + * optional uint32 rx2_frequency = 8; + * @return {number} + */ +proto.api.GetRegionResponse.prototype.getRx2Frequency = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 8, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.api.GetRegionResponse} returns this + */ +proto.api.GetRegionResponse.prototype.setRx2Frequency = function(value) { + return jspb.Message.setProto3IntField(this, 8, value); +}; + + +/** + * optional uint32 class_b_ping_slot_dr = 9; + * @return {number} + */ +proto.api.GetRegionResponse.prototype.getClassBPingSlotDr = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 9, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.api.GetRegionResponse} returns this + */ +proto.api.GetRegionResponse.prototype.setClassBPingSlotDr = function(value) { + return jspb.Message.setProto3IntField(this, 9, value); +}; + + +/** + * optional uint32 class_b_ping_slot_frequency = 10; + * @return {number} + */ +proto.api.GetRegionResponse.prototype.getClassBPingSlotFrequency = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 10, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.api.GetRegionResponse} returns this + */ +proto.api.GetRegionResponse.prototype.setClassBPingSlotFrequency = function(value) { + return jspb.Message.setProto3IntField(this, 10, value); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.api.RegionChannel.prototype.toObject = function(opt_includeInstance) { + return proto.api.RegionChannel.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.api.RegionChannel} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.api.RegionChannel.toObject = function(includeInstance, msg) { + var f, obj = { + frequency: jspb.Message.getFieldWithDefault(msg, 1, 0), + drMin: jspb.Message.getFieldWithDefault(msg, 2, 0), + drMax: jspb.Message.getFieldWithDefault(msg, 3, 0) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.api.RegionChannel} + */ +proto.api.RegionChannel.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.api.RegionChannel; + return proto.api.RegionChannel.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.api.RegionChannel} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.api.RegionChannel} + */ +proto.api.RegionChannel.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readUint32()); + msg.setFrequency(value); + break; + case 2: + var value = /** @type {number} */ (reader.readUint32()); + msg.setDrMin(value); + break; + case 3: + var value = /** @type {number} */ (reader.readUint32()); + msg.setDrMax(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.api.RegionChannel.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.api.RegionChannel.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.api.RegionChannel} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.api.RegionChannel.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getFrequency(); + if (f !== 0) { + writer.writeUint32( + 1, + f + ); + } + f = message.getDrMin(); + if (f !== 0) { + writer.writeUint32( + 2, + f + ); + } + f = message.getDrMax(); + if (f !== 0) { + writer.writeUint32( + 3, + f + ); + } +}; + + +/** + * optional uint32 frequency = 1; + * @return {number} + */ +proto.api.RegionChannel.prototype.getFrequency = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.api.RegionChannel} returns this + */ +proto.api.RegionChannel.prototype.setFrequency = function(value) { + return jspb.Message.setProto3IntField(this, 1, value); +}; + + +/** + * optional uint32 dr_min = 2; + * @return {number} + */ +proto.api.RegionChannel.prototype.getDrMin = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.api.RegionChannel} returns this + */ +proto.api.RegionChannel.prototype.setDrMin = function(value) { + return jspb.Message.setProto3IntField(this, 2, value); +}; + + +/** + * optional uint32 dr_max = 3; + * @return {number} + */ +proto.api.RegionChannel.prototype.getDrMax = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 3, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.api.RegionChannel} returns this + */ +proto.api.RegionChannel.prototype.setDrMax = function(value) { + return jspb.Message.setProto3IntField(this, 3, value); +}; + + goog.object.extend(exports, proto.api); diff --git a/api/js/api/internal_grpc_pb.d.ts b/api/js/api/internal_grpc_pb.d.ts index b4cf63da..64ab5c65 100644 --- a/api/js/api/internal_grpc_pb.d.ts +++ b/api/js/api/internal_grpc_pb.d.ts @@ -21,6 +21,8 @@ interface IInternalServiceService extends grpc.ServiceDefinition; streamDeviceFrames: grpc.MethodDefinition; streamDeviceEvents: grpc.MethodDefinition; + listRegions: grpc.MethodDefinition; + getRegion: grpc.MethodDefinition; } export const InternalServiceService: IInternalServiceService; @@ -39,6 +41,8 @@ export interface IInternalServiceServer extends grpc.UntypedServiceImplementatio streamGatewayFrames: grpc.handleServerStreamingCall; streamDeviceFrames: grpc.handleServerStreamingCall; streamDeviceEvents: grpc.handleServerStreamingCall; + listRegions: grpc.handleUnaryCall; + getRegion: grpc.handleUnaryCall; } export class InternalServiceClient extends grpc.Client { @@ -79,4 +83,10 @@ export class InternalServiceClient extends grpc.Client { streamDeviceFrames(argument: api_internal_pb.StreamDeviceFramesRequest, metadata?: grpc.Metadata | null, options?: grpc.CallOptions | null): grpc.ClientReadableStream; streamDeviceEvents(argument: api_internal_pb.StreamDeviceEventsRequest, metadataOrOptions?: grpc.Metadata | grpc.CallOptions | null): grpc.ClientReadableStream; streamDeviceEvents(argument: api_internal_pb.StreamDeviceEventsRequest, metadata?: grpc.Metadata | null, options?: grpc.CallOptions | null): grpc.ClientReadableStream; + listRegions(argument: google_protobuf_empty_pb.Empty, callback: grpc.requestCallback): grpc.ClientUnaryCall; + listRegions(argument: google_protobuf_empty_pb.Empty, metadataOrOptions: grpc.Metadata | grpc.CallOptions | null, callback: grpc.requestCallback): grpc.ClientUnaryCall; + listRegions(argument: google_protobuf_empty_pb.Empty, metadata: grpc.Metadata | null, options: grpc.CallOptions | null, callback: grpc.requestCallback): grpc.ClientUnaryCall; + getRegion(argument: api_internal_pb.GetRegionRequest, callback: grpc.requestCallback): grpc.ClientUnaryCall; + getRegion(argument: api_internal_pb.GetRegionRequest, metadataOrOptions: grpc.Metadata | grpc.CallOptions | null, callback: grpc.requestCallback): grpc.ClientUnaryCall; + getRegion(argument: api_internal_pb.GetRegionRequest, metadata: grpc.Metadata | null, options: grpc.CallOptions | null, callback: grpc.requestCallback): grpc.ClientUnaryCall; } diff --git a/api/js/api/internal_grpc_pb.js b/api/js/api/internal_grpc_pb.js index dbb2e31c..4a506aa7 100644 --- a/api/js/api/internal_grpc_pb.js +++ b/api/js/api/internal_grpc_pb.js @@ -5,6 +5,7 @@ var grpc = require('@grpc/grpc-js'); var api_internal_pb = require('../api/internal_pb.js'); var google_protobuf_timestamp_pb = require('google-protobuf/google/protobuf/timestamp_pb.js'); var google_protobuf_empty_pb = require('google-protobuf/google/protobuf/empty_pb.js'); +var common_common_pb = require('../common/common_pb.js'); var api_user_pb = require('../api/user_pb.js'); function serialize_api_CreateApiKeyRequest(arg) { @@ -84,6 +85,28 @@ function deserialize_api_GetGatewaysSummaryResponse(buffer_arg) { return api_internal_pb.GetGatewaysSummaryResponse.deserializeBinary(new Uint8Array(buffer_arg)); } +function serialize_api_GetRegionRequest(arg) { + if (!(arg instanceof api_internal_pb.GetRegionRequest)) { + throw new Error('Expected argument of type api.GetRegionRequest'); + } + return Buffer.from(arg.serializeBinary()); +} + +function deserialize_api_GetRegionRequest(buffer_arg) { + return api_internal_pb.GetRegionRequest.deserializeBinary(new Uint8Array(buffer_arg)); +} + +function serialize_api_GetRegionResponse(arg) { + if (!(arg instanceof api_internal_pb.GetRegionResponse)) { + throw new Error('Expected argument of type api.GetRegionResponse'); + } + return Buffer.from(arg.serializeBinary()); +} + +function deserialize_api_GetRegionResponse(buffer_arg) { + return api_internal_pb.GetRegionResponse.deserializeBinary(new Uint8Array(buffer_arg)); +} + function serialize_api_GlobalSearchRequest(arg) { if (!(arg instanceof api_internal_pb.GlobalSearchRequest)) { throw new Error('Expected argument of type api.GlobalSearchRequest'); @@ -128,6 +151,17 @@ function deserialize_api_ListApiKeysResponse(buffer_arg) { return api_internal_pb.ListApiKeysResponse.deserializeBinary(new Uint8Array(buffer_arg)); } +function serialize_api_ListRegionsResponse(arg) { + if (!(arg instanceof api_internal_pb.ListRegionsResponse)) { + throw new Error('Expected argument of type api.ListRegionsResponse'); + } + return Buffer.from(arg.serializeBinary()); +} + +function deserialize_api_ListRegionsResponse(buffer_arg) { + return api_internal_pb.ListRegionsResponse.deserializeBinary(new Uint8Array(buffer_arg)); +} + function serialize_api_LogItem(arg) { if (!(arg instanceof api_internal_pb.LogItem)) { throw new Error('Expected argument of type api.LogItem'); @@ -408,6 +442,30 @@ streamDeviceEvents: { responseSerialize: serialize_api_LogItem, responseDeserialize: deserialize_api_LogItem, }, + // ListRegions lists the available (configured) regions. +listRegions: { + path: '/api.InternalService/ListRegions', + requestStream: false, + responseStream: false, + requestType: google_protobuf_empty_pb.Empty, + responseType: api_internal_pb.ListRegionsResponse, + requestSerialize: serialize_google_protobuf_Empty, + requestDeserialize: deserialize_google_protobuf_Empty, + responseSerialize: serialize_api_ListRegionsResponse, + responseDeserialize: deserialize_api_ListRegionsResponse, + }, + // GetRegion returns the region details for the given region. +getRegion: { + path: '/api.InternalService/GetRegion', + requestStream: false, + responseStream: false, + requestType: api_internal_pb.GetRegionRequest, + responseType: api_internal_pb.GetRegionResponse, + requestSerialize: serialize_api_GetRegionRequest, + requestDeserialize: deserialize_api_GetRegionRequest, + responseSerialize: serialize_api_GetRegionResponse, + responseDeserialize: deserialize_api_GetRegionResponse, + }, }; exports.InternalServiceClient = grpc.makeGenericClientConstructor(InternalServiceService); diff --git a/api/js/api/internal_pb.d.ts b/api/js/api/internal_pb.d.ts index eeb7cfda..a3db03bb 100644 --- a/api/js/api/internal_pb.d.ts +++ b/api/js/api/internal_pb.d.ts @@ -4,6 +4,7 @@ import * as jspb from "google-protobuf"; import * as google_protobuf_timestamp_pb from "google-protobuf/google/protobuf/timestamp_pb"; import * as google_protobuf_empty_pb from "google-protobuf/google/protobuf/empty_pb"; +import * as common_common_pb from "../common/common_pb"; import * as api_user_pb from "../api/user_pb"; export class ApiKey extends jspb.Message { @@ -678,3 +679,155 @@ export namespace StreamDeviceEventsRequest { } } +export class ListRegionsResponse extends jspb.Message { + clearRegionsList(): void; + getRegionsList(): Array; + setRegionsList(value: Array): void; + addRegions(value?: RegionListItem, index?: number): RegionListItem; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ListRegionsResponse.AsObject; + static toObject(includeInstance: boolean, msg: ListRegionsResponse): ListRegionsResponse.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: ListRegionsResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ListRegionsResponse; + static deserializeBinaryFromReader(message: ListRegionsResponse, reader: jspb.BinaryReader): ListRegionsResponse; +} + +export namespace ListRegionsResponse { + export type AsObject = { + regionsList: Array, + } +} + +export class RegionListItem extends jspb.Message { + getName(): string; + setName(value: string): void; + + getRegion(): common_common_pb.RegionMap[keyof common_common_pb.RegionMap]; + setRegion(value: common_common_pb.RegionMap[keyof common_common_pb.RegionMap]): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): RegionListItem.AsObject; + static toObject(includeInstance: boolean, msg: RegionListItem): RegionListItem.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: RegionListItem, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): RegionListItem; + static deserializeBinaryFromReader(message: RegionListItem, reader: jspb.BinaryReader): RegionListItem; +} + +export namespace RegionListItem { + export type AsObject = { + name: string, + region: common_common_pb.RegionMap[keyof common_common_pb.RegionMap], + } +} + +export class GetRegionRequest extends jspb.Message { + getName(): string; + setName(value: string): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetRegionRequest.AsObject; + static toObject(includeInstance: boolean, msg: GetRegionRequest): GetRegionRequest.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: GetRegionRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetRegionRequest; + static deserializeBinaryFromReader(message: GetRegionRequest, reader: jspb.BinaryReader): GetRegionRequest; +} + +export namespace GetRegionRequest { + export type AsObject = { + name: string, + } +} + +export class GetRegionResponse extends jspb.Message { + getName(): string; + setName(value: string): void; + + getRegion(): common_common_pb.RegionMap[keyof common_common_pb.RegionMap]; + setRegion(value: common_common_pb.RegionMap[keyof common_common_pb.RegionMap]): void; + + getUserInfo(): string; + setUserInfo(value: string): void; + + clearUplinkChannelsList(): void; + getUplinkChannelsList(): Array; + setUplinkChannelsList(value: Array): void; + addUplinkChannels(value?: RegionChannel, index?: number): RegionChannel; + + getRx1Delay(): number; + setRx1Delay(value: number): void; + + getRx1DrOffset(): number; + setRx1DrOffset(value: number): void; + + getRx2Dr(): number; + setRx2Dr(value: number): void; + + getRx2Frequency(): number; + setRx2Frequency(value: number): void; + + getClassBPingSlotDr(): number; + setClassBPingSlotDr(value: number): void; + + getClassBPingSlotFrequency(): number; + setClassBPingSlotFrequency(value: number): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): GetRegionResponse.AsObject; + static toObject(includeInstance: boolean, msg: GetRegionResponse): GetRegionResponse.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: GetRegionResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): GetRegionResponse; + static deserializeBinaryFromReader(message: GetRegionResponse, reader: jspb.BinaryReader): GetRegionResponse; +} + +export namespace GetRegionResponse { + export type AsObject = { + name: string, + region: common_common_pb.RegionMap[keyof common_common_pb.RegionMap], + userInfo: string, + uplinkChannelsList: Array, + rx1Delay: number, + rx1DrOffset: number, + rx2Dr: number, + rx2Frequency: number, + classBPingSlotDr: number, + classBPingSlotFrequency: number, + } +} + +export class RegionChannel extends jspb.Message { + getFrequency(): number; + setFrequency(value: number): void; + + getDrMin(): number; + setDrMin(value: number): void; + + getDrMax(): number; + setDrMax(value: number): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): RegionChannel.AsObject; + static toObject(includeInstance: boolean, msg: RegionChannel): RegionChannel.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: RegionChannel, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): RegionChannel; + static deserializeBinaryFromReader(message: RegionChannel, reader: jspb.BinaryReader): RegionChannel; +} + +export namespace RegionChannel { + export type AsObject = { + frequency: number, + drMin: number, + drMax: number, + } +} + diff --git a/api/js/api/internal_pb.js b/api/js/api/internal_pb.js index a18c564e..1a8b5118 100644 --- a/api/js/api/internal_pb.js +++ b/api/js/api/internal_pb.js @@ -11,6 +11,7 @@ var global = Function('return this')(); var google_protobuf_timestamp_pb = require('google-protobuf/google/protobuf/timestamp_pb.js'); var google_protobuf_empty_pb = require('google-protobuf/google/protobuf/empty_pb.js'); +var common_common_pb = require('../common/common_pb.js'); var api_user_pb = require('../api/user_pb.js'); goog.exportSymbol('proto.api.ApiKey', null, global); goog.exportSymbol('proto.api.CreateApiKeyRequest', null, global); @@ -20,11 +21,14 @@ goog.exportSymbol('proto.api.GetDevicesSummaryRequest', null, global); goog.exportSymbol('proto.api.GetDevicesSummaryResponse', null, global); goog.exportSymbol('proto.api.GetGatewaysSummaryRequest', null, global); goog.exportSymbol('proto.api.GetGatewaysSummaryResponse', null, global); +goog.exportSymbol('proto.api.GetRegionRequest', null, global); +goog.exportSymbol('proto.api.GetRegionResponse', null, global); goog.exportSymbol('proto.api.GlobalSearchRequest', null, global); goog.exportSymbol('proto.api.GlobalSearchResponse', null, global); goog.exportSymbol('proto.api.GlobalSearchResult', null, global); goog.exportSymbol('proto.api.ListApiKeysRequest', null, global); goog.exportSymbol('proto.api.ListApiKeysResponse', null, global); +goog.exportSymbol('proto.api.ListRegionsResponse', null, global); goog.exportSymbol('proto.api.LogItem', null, global); goog.exportSymbol('proto.api.LoginRequest', null, global); goog.exportSymbol('proto.api.LoginResponse', null, global); @@ -32,6 +36,8 @@ goog.exportSymbol('proto.api.OpenIdConnect', null, global); goog.exportSymbol('proto.api.OpenIdConnectLoginRequest', null, global); goog.exportSymbol('proto.api.OpenIdConnectLoginResponse', null, global); goog.exportSymbol('proto.api.ProfileResponse', null, global); +goog.exportSymbol('proto.api.RegionChannel', null, global); +goog.exportSymbol('proto.api.RegionListItem', null, global); goog.exportSymbol('proto.api.SettingsResponse', null, global); goog.exportSymbol('proto.api.StreamDeviceEventsRequest', null, global); goog.exportSymbol('proto.api.StreamDeviceFramesRequest', null, global); @@ -5230,4 +5236,1161 @@ proto.api.StreamDeviceEventsRequest.prototype.setDevEui = function(value) { }; + +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.api.ListRegionsResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.api.ListRegionsResponse.repeatedFields_, null); +}; +goog.inherits(proto.api.ListRegionsResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + proto.api.ListRegionsResponse.displayName = 'proto.api.ListRegionsResponse'; +} +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.api.ListRegionsResponse.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto suitable for use in Soy templates. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. + * @param {boolean=} opt_includeInstance Whether to include the JSPB instance + * for transitional soy proto support: http://goto/soy-param-migration + * @return {!Object} + */ +proto.api.ListRegionsResponse.prototype.toObject = function(opt_includeInstance) { + return proto.api.ListRegionsResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Whether to include the JSPB + * instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.api.ListRegionsResponse} msg The msg instance to transform. + * @return {!Object} + */ +proto.api.ListRegionsResponse.toObject = function(includeInstance, msg) { + var f, obj = { + regionsList: jspb.Message.toObjectList(msg.getRegionsList(), + proto.api.RegionListItem.toObject, includeInstance) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.api.ListRegionsResponse} + */ +proto.api.ListRegionsResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.api.ListRegionsResponse; + return proto.api.ListRegionsResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.api.ListRegionsResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.api.ListRegionsResponse} + */ +proto.api.ListRegionsResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.api.RegionListItem; + reader.readMessage(value,proto.api.RegionListItem.deserializeBinaryFromReader); + msg.getRegionsList().push(value); + msg.setRegionsList(msg.getRegionsList()); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Class method variant: serializes the given message to binary data + * (in protobuf wire format), writing to the given BinaryWriter. + * @param {!proto.api.ListRegionsResponse} message + * @param {!jspb.BinaryWriter} writer + */ +proto.api.ListRegionsResponse.serializeBinaryToWriter = function(message, writer) { + message.serializeBinaryToWriter(writer); +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.api.ListRegionsResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + this.serializeBinaryToWriter(writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the message to binary data (in protobuf wire format), + * writing to the given BinaryWriter. + * @param {!jspb.BinaryWriter} writer + */ +proto.api.ListRegionsResponse.prototype.serializeBinaryToWriter = function (writer) { + var f = undefined; + f = this.getRegionsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + proto.api.RegionListItem.serializeBinaryToWriter + ); + } +}; + + +/** + * Creates a deep clone of this proto. No data is shared with the original. + * @return {!proto.api.ListRegionsResponse} The clone. + */ +proto.api.ListRegionsResponse.prototype.cloneMessage = function() { + return /** @type {!proto.api.ListRegionsResponse} */ (jspb.Message.cloneMessage(this)); +}; + + +/** + * repeated RegionListItem regions = 1; + * If you change this array by adding, removing or replacing elements, or if you + * replace the array itself, then you must call the setter to update it. + * @return {!Array.} + */ +proto.api.ListRegionsResponse.prototype.getRegionsList = function() { + return /** @type{!Array.} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.api.RegionListItem, 1)); +}; + + +/** @param {Array.} value */ +proto.api.ListRegionsResponse.prototype.setRegionsList = function(value) { + jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +proto.api.ListRegionsResponse.prototype.clearRegionsList = function() { + this.setRegionsList([]); +}; + + + +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.api.RegionListItem = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.api.RegionListItem, jspb.Message); +if (goog.DEBUG && !COMPILED) { + proto.api.RegionListItem.displayName = 'proto.api.RegionListItem'; +} + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto suitable for use in Soy templates. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. + * @param {boolean=} opt_includeInstance Whether to include the JSPB instance + * for transitional soy proto support: http://goto/soy-param-migration + * @return {!Object} + */ +proto.api.RegionListItem.prototype.toObject = function(opt_includeInstance) { + return proto.api.RegionListItem.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Whether to include the JSPB + * instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.api.RegionListItem} msg The msg instance to transform. + * @return {!Object} + */ +proto.api.RegionListItem.toObject = function(includeInstance, msg) { + var f, obj = { + name: msg.getName(), + region: msg.getRegion() + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.api.RegionListItem} + */ +proto.api.RegionListItem.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.api.RegionListItem; + return proto.api.RegionListItem.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.api.RegionListItem} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.api.RegionListItem} + */ +proto.api.RegionListItem.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setName(value); + break; + case 2: + var value = /** @type {!proto.common.Region} */ (reader.readEnum()); + msg.setRegion(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Class method variant: serializes the given message to binary data + * (in protobuf wire format), writing to the given BinaryWriter. + * @param {!proto.api.RegionListItem} message + * @param {!jspb.BinaryWriter} writer + */ +proto.api.RegionListItem.serializeBinaryToWriter = function(message, writer) { + message.serializeBinaryToWriter(writer); +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.api.RegionListItem.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + this.serializeBinaryToWriter(writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the message to binary data (in protobuf wire format), + * writing to the given BinaryWriter. + * @param {!jspb.BinaryWriter} writer + */ +proto.api.RegionListItem.prototype.serializeBinaryToWriter = function (writer) { + var f = undefined; + f = this.getName(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = this.getRegion(); + if (f !== 0.0) { + writer.writeEnum( + 2, + f + ); + } +}; + + +/** + * Creates a deep clone of this proto. No data is shared with the original. + * @return {!proto.api.RegionListItem} The clone. + */ +proto.api.RegionListItem.prototype.cloneMessage = function() { + return /** @type {!proto.api.RegionListItem} */ (jspb.Message.cloneMessage(this)); +}; + + +/** + * optional string name = 1; + * @return {string} + */ +proto.api.RegionListItem.prototype.getName = function() { + return /** @type {string} */ (jspb.Message.getFieldProto3(this, 1, "")); +}; + + +/** @param {string} value */ +proto.api.RegionListItem.prototype.setName = function(value) { + jspb.Message.setField(this, 1, value); +}; + + +/** + * optional common.Region region = 2; + * @return {!proto.common.Region} + */ +proto.api.RegionListItem.prototype.getRegion = function() { + return /** @type {!proto.common.Region} */ (jspb.Message.getFieldProto3(this, 2, 0)); +}; + + +/** @param {!proto.common.Region} value */ +proto.api.RegionListItem.prototype.setRegion = function(value) { + jspb.Message.setField(this, 2, value); +}; + + + +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.api.GetRegionRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.api.GetRegionRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + proto.api.GetRegionRequest.displayName = 'proto.api.GetRegionRequest'; +} + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto suitable for use in Soy templates. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. + * @param {boolean=} opt_includeInstance Whether to include the JSPB instance + * for transitional soy proto support: http://goto/soy-param-migration + * @return {!Object} + */ +proto.api.GetRegionRequest.prototype.toObject = function(opt_includeInstance) { + return proto.api.GetRegionRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Whether to include the JSPB + * instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.api.GetRegionRequest} msg The msg instance to transform. + * @return {!Object} + */ +proto.api.GetRegionRequest.toObject = function(includeInstance, msg) { + var f, obj = { + name: msg.getName() + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.api.GetRegionRequest} + */ +proto.api.GetRegionRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.api.GetRegionRequest; + return proto.api.GetRegionRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.api.GetRegionRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.api.GetRegionRequest} + */ +proto.api.GetRegionRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setName(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Class method variant: serializes the given message to binary data + * (in protobuf wire format), writing to the given BinaryWriter. + * @param {!proto.api.GetRegionRequest} message + * @param {!jspb.BinaryWriter} writer + */ +proto.api.GetRegionRequest.serializeBinaryToWriter = function(message, writer) { + message.serializeBinaryToWriter(writer); +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.api.GetRegionRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + this.serializeBinaryToWriter(writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the message to binary data (in protobuf wire format), + * writing to the given BinaryWriter. + * @param {!jspb.BinaryWriter} writer + */ +proto.api.GetRegionRequest.prototype.serializeBinaryToWriter = function (writer) { + var f = undefined; + f = this.getName(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } +}; + + +/** + * Creates a deep clone of this proto. No data is shared with the original. + * @return {!proto.api.GetRegionRequest} The clone. + */ +proto.api.GetRegionRequest.prototype.cloneMessage = function() { + return /** @type {!proto.api.GetRegionRequest} */ (jspb.Message.cloneMessage(this)); +}; + + +/** + * optional string name = 1; + * @return {string} + */ +proto.api.GetRegionRequest.prototype.getName = function() { + return /** @type {string} */ (jspb.Message.getFieldProto3(this, 1, "")); +}; + + +/** @param {string} value */ +proto.api.GetRegionRequest.prototype.setName = function(value) { + jspb.Message.setField(this, 1, value); +}; + + + +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.api.GetRegionResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.api.GetRegionResponse.repeatedFields_, null); +}; +goog.inherits(proto.api.GetRegionResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + proto.api.GetRegionResponse.displayName = 'proto.api.GetRegionResponse'; +} +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.api.GetRegionResponse.repeatedFields_ = [4]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto suitable for use in Soy templates. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. + * @param {boolean=} opt_includeInstance Whether to include the JSPB instance + * for transitional soy proto support: http://goto/soy-param-migration + * @return {!Object} + */ +proto.api.GetRegionResponse.prototype.toObject = function(opt_includeInstance) { + return proto.api.GetRegionResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Whether to include the JSPB + * instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.api.GetRegionResponse} msg The msg instance to transform. + * @return {!Object} + */ +proto.api.GetRegionResponse.toObject = function(includeInstance, msg) { + var f, obj = { + name: msg.getName(), + region: msg.getRegion(), + userInfo: msg.getUserInfo(), + uplinkChannelsList: jspb.Message.toObjectList(msg.getUplinkChannelsList(), + proto.api.RegionChannel.toObject, includeInstance), + rx1Delay: msg.getRx1Delay(), + rx1DrOffset: msg.getRx1DrOffset(), + rx2Dr: msg.getRx2Dr(), + rx2Frequency: msg.getRx2Frequency(), + classBPingSlotDr: msg.getClassBPingSlotDr(), + classBPingSlotFrequency: msg.getClassBPingSlotFrequency() + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.api.GetRegionResponse} + */ +proto.api.GetRegionResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.api.GetRegionResponse; + return proto.api.GetRegionResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.api.GetRegionResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.api.GetRegionResponse} + */ +proto.api.GetRegionResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setName(value); + break; + case 2: + var value = /** @type {!proto.common.Region} */ (reader.readEnum()); + msg.setRegion(value); + break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setUserInfo(value); + break; + case 4: + var value = new proto.api.RegionChannel; + reader.readMessage(value,proto.api.RegionChannel.deserializeBinaryFromReader); + msg.getUplinkChannelsList().push(value); + msg.setUplinkChannelsList(msg.getUplinkChannelsList()); + break; + case 5: + var value = /** @type {number} */ (reader.readUint32()); + msg.setRx1Delay(value); + break; + case 6: + var value = /** @type {number} */ (reader.readUint32()); + msg.setRx1DrOffset(value); + break; + case 7: + var value = /** @type {number} */ (reader.readUint32()); + msg.setRx2Dr(value); + break; + case 8: + var value = /** @type {number} */ (reader.readUint32()); + msg.setRx2Frequency(value); + break; + case 9: + var value = /** @type {number} */ (reader.readUint32()); + msg.setClassBPingSlotDr(value); + break; + case 10: + var value = /** @type {number} */ (reader.readUint32()); + msg.setClassBPingSlotFrequency(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Class method variant: serializes the given message to binary data + * (in protobuf wire format), writing to the given BinaryWriter. + * @param {!proto.api.GetRegionResponse} message + * @param {!jspb.BinaryWriter} writer + */ +proto.api.GetRegionResponse.serializeBinaryToWriter = function(message, writer) { + message.serializeBinaryToWriter(writer); +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.api.GetRegionResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + this.serializeBinaryToWriter(writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the message to binary data (in protobuf wire format), + * writing to the given BinaryWriter. + * @param {!jspb.BinaryWriter} writer + */ +proto.api.GetRegionResponse.prototype.serializeBinaryToWriter = function (writer) { + var f = undefined; + f = this.getName(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = this.getRegion(); + if (f !== 0.0) { + writer.writeEnum( + 2, + f + ); + } + f = this.getUserInfo(); + if (f.length > 0) { + writer.writeString( + 3, + f + ); + } + f = this.getUplinkChannelsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 4, + f, + proto.api.RegionChannel.serializeBinaryToWriter + ); + } + f = this.getRx1Delay(); + if (f !== 0) { + writer.writeUint32( + 5, + f + ); + } + f = this.getRx1DrOffset(); + if (f !== 0) { + writer.writeUint32( + 6, + f + ); + } + f = this.getRx2Dr(); + if (f !== 0) { + writer.writeUint32( + 7, + f + ); + } + f = this.getRx2Frequency(); + if (f !== 0) { + writer.writeUint32( + 8, + f + ); + } + f = this.getClassBPingSlotDr(); + if (f !== 0) { + writer.writeUint32( + 9, + f + ); + } + f = this.getClassBPingSlotFrequency(); + if (f !== 0) { + writer.writeUint32( + 10, + f + ); + } +}; + + +/** + * Creates a deep clone of this proto. No data is shared with the original. + * @return {!proto.api.GetRegionResponse} The clone. + */ +proto.api.GetRegionResponse.prototype.cloneMessage = function() { + return /** @type {!proto.api.GetRegionResponse} */ (jspb.Message.cloneMessage(this)); +}; + + +/** + * optional string name = 1; + * @return {string} + */ +proto.api.GetRegionResponse.prototype.getName = function() { + return /** @type {string} */ (jspb.Message.getFieldProto3(this, 1, "")); +}; + + +/** @param {string} value */ +proto.api.GetRegionResponse.prototype.setName = function(value) { + jspb.Message.setField(this, 1, value); +}; + + +/** + * optional common.Region region = 2; + * @return {!proto.common.Region} + */ +proto.api.GetRegionResponse.prototype.getRegion = function() { + return /** @type {!proto.common.Region} */ (jspb.Message.getFieldProto3(this, 2, 0)); +}; + + +/** @param {!proto.common.Region} value */ +proto.api.GetRegionResponse.prototype.setRegion = function(value) { + jspb.Message.setField(this, 2, value); +}; + + +/** + * optional string user_info = 3; + * @return {string} + */ +proto.api.GetRegionResponse.prototype.getUserInfo = function() { + return /** @type {string} */ (jspb.Message.getFieldProto3(this, 3, "")); +}; + + +/** @param {string} value */ +proto.api.GetRegionResponse.prototype.setUserInfo = function(value) { + jspb.Message.setField(this, 3, value); +}; + + +/** + * repeated RegionChannel uplink_channels = 4; + * If you change this array by adding, removing or replacing elements, or if you + * replace the array itself, then you must call the setter to update it. + * @return {!Array.} + */ +proto.api.GetRegionResponse.prototype.getUplinkChannelsList = function() { + return /** @type{!Array.} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.api.RegionChannel, 4)); +}; + + +/** @param {Array.} value */ +proto.api.GetRegionResponse.prototype.setUplinkChannelsList = function(value) { + jspb.Message.setRepeatedWrapperField(this, 4, value); +}; + + +proto.api.GetRegionResponse.prototype.clearUplinkChannelsList = function() { + this.setUplinkChannelsList([]); +}; + + +/** + * optional uint32 rx1_delay = 5; + * @return {number} + */ +proto.api.GetRegionResponse.prototype.getRx1Delay = function() { + return /** @type {number} */ (jspb.Message.getFieldProto3(this, 5, 0)); +}; + + +/** @param {number} value */ +proto.api.GetRegionResponse.prototype.setRx1Delay = function(value) { + jspb.Message.setField(this, 5, value); +}; + + +/** + * optional uint32 rx1_dr_offset = 6; + * @return {number} + */ +proto.api.GetRegionResponse.prototype.getRx1DrOffset = function() { + return /** @type {number} */ (jspb.Message.getFieldProto3(this, 6, 0)); +}; + + +/** @param {number} value */ +proto.api.GetRegionResponse.prototype.setRx1DrOffset = function(value) { + jspb.Message.setField(this, 6, value); +}; + + +/** + * optional uint32 rx2_dr = 7; + * @return {number} + */ +proto.api.GetRegionResponse.prototype.getRx2Dr = function() { + return /** @type {number} */ (jspb.Message.getFieldProto3(this, 7, 0)); +}; + + +/** @param {number} value */ +proto.api.GetRegionResponse.prototype.setRx2Dr = function(value) { + jspb.Message.setField(this, 7, value); +}; + + +/** + * optional uint32 rx2_frequency = 8; + * @return {number} + */ +proto.api.GetRegionResponse.prototype.getRx2Frequency = function() { + return /** @type {number} */ (jspb.Message.getFieldProto3(this, 8, 0)); +}; + + +/** @param {number} value */ +proto.api.GetRegionResponse.prototype.setRx2Frequency = function(value) { + jspb.Message.setField(this, 8, value); +}; + + +/** + * optional uint32 class_b_ping_slot_dr = 9; + * @return {number} + */ +proto.api.GetRegionResponse.prototype.getClassBPingSlotDr = function() { + return /** @type {number} */ (jspb.Message.getFieldProto3(this, 9, 0)); +}; + + +/** @param {number} value */ +proto.api.GetRegionResponse.prototype.setClassBPingSlotDr = function(value) { + jspb.Message.setField(this, 9, value); +}; + + +/** + * optional uint32 class_b_ping_slot_frequency = 10; + * @return {number} + */ +proto.api.GetRegionResponse.prototype.getClassBPingSlotFrequency = function() { + return /** @type {number} */ (jspb.Message.getFieldProto3(this, 10, 0)); +}; + + +/** @param {number} value */ +proto.api.GetRegionResponse.prototype.setClassBPingSlotFrequency = function(value) { + jspb.Message.setField(this, 10, value); +}; + + + +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.api.RegionChannel = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.api.RegionChannel, jspb.Message); +if (goog.DEBUG && !COMPILED) { + proto.api.RegionChannel.displayName = 'proto.api.RegionChannel'; +} + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto suitable for use in Soy templates. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. + * @param {boolean=} opt_includeInstance Whether to include the JSPB instance + * for transitional soy proto support: http://goto/soy-param-migration + * @return {!Object} + */ +proto.api.RegionChannel.prototype.toObject = function(opt_includeInstance) { + return proto.api.RegionChannel.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Whether to include the JSPB + * instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.api.RegionChannel} msg The msg instance to transform. + * @return {!Object} + */ +proto.api.RegionChannel.toObject = function(includeInstance, msg) { + var f, obj = { + frequency: msg.getFrequency(), + drMin: msg.getDrMin(), + drMax: msg.getDrMax() + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.api.RegionChannel} + */ +proto.api.RegionChannel.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.api.RegionChannel; + return proto.api.RegionChannel.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.api.RegionChannel} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.api.RegionChannel} + */ +proto.api.RegionChannel.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {number} */ (reader.readUint32()); + msg.setFrequency(value); + break; + case 2: + var value = /** @type {number} */ (reader.readUint32()); + msg.setDrMin(value); + break; + case 3: + var value = /** @type {number} */ (reader.readUint32()); + msg.setDrMax(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Class method variant: serializes the given message to binary data + * (in protobuf wire format), writing to the given BinaryWriter. + * @param {!proto.api.RegionChannel} message + * @param {!jspb.BinaryWriter} writer + */ +proto.api.RegionChannel.serializeBinaryToWriter = function(message, writer) { + message.serializeBinaryToWriter(writer); +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.api.RegionChannel.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + this.serializeBinaryToWriter(writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the message to binary data (in protobuf wire format), + * writing to the given BinaryWriter. + * @param {!jspb.BinaryWriter} writer + */ +proto.api.RegionChannel.prototype.serializeBinaryToWriter = function (writer) { + var f = undefined; + f = this.getFrequency(); + if (f !== 0) { + writer.writeUint32( + 1, + f + ); + } + f = this.getDrMin(); + if (f !== 0) { + writer.writeUint32( + 2, + f + ); + } + f = this.getDrMax(); + if (f !== 0) { + writer.writeUint32( + 3, + f + ); + } +}; + + +/** + * Creates a deep clone of this proto. No data is shared with the original. + * @return {!proto.api.RegionChannel} The clone. + */ +proto.api.RegionChannel.prototype.cloneMessage = function() { + return /** @type {!proto.api.RegionChannel} */ (jspb.Message.cloneMessage(this)); +}; + + +/** + * optional uint32 frequency = 1; + * @return {number} + */ +proto.api.RegionChannel.prototype.getFrequency = function() { + return /** @type {number} */ (jspb.Message.getFieldProto3(this, 1, 0)); +}; + + +/** @param {number} value */ +proto.api.RegionChannel.prototype.setFrequency = function(value) { + jspb.Message.setField(this, 1, value); +}; + + +/** + * optional uint32 dr_min = 2; + * @return {number} + */ +proto.api.RegionChannel.prototype.getDrMin = function() { + return /** @type {number} */ (jspb.Message.getFieldProto3(this, 2, 0)); +}; + + +/** @param {number} value */ +proto.api.RegionChannel.prototype.setDrMin = function(value) { + jspb.Message.setField(this, 2, value); +}; + + +/** + * optional uint32 dr_max = 3; + * @return {number} + */ +proto.api.RegionChannel.prototype.getDrMax = function() { + return /** @type {number} */ (jspb.Message.getFieldProto3(this, 3, 0)); +}; + + +/** @param {number} value */ +proto.api.RegionChannel.prototype.setDrMax = function(value) { + jspb.Message.setField(this, 3, value); +}; + + goog.object.extend(exports, proto.api); diff --git a/api/proto/api/internal.proto b/api/proto/api/internal.proto index 06c0cef3..e608e720 100644 --- a/api/proto/api/internal.proto +++ b/api/proto/api/internal.proto @@ -9,6 +9,7 @@ option java_outer_classname = "InternalProto"; import "google/protobuf/timestamp.proto"; import "google/protobuf/empty.proto"; +import "common/common.proto"; import "api/user.proto"; // InternalService is the service providing API endpoints for internal usage. @@ -51,6 +52,12 @@ service InternalService { // Stream events for the given Device EUI. rpc StreamDeviceEvents(StreamDeviceEventsRequest) returns (stream LogItem) {} + + // ListRegions lists the available (configured) regions. + rpc ListRegions(google.protobuf.Empty) returns (ListRegionsResponse) {} + + // GetRegion returns the region details for the given region. + rpc GetRegion(GetRegionRequest) returns (GetRegionResponse) {} } message ApiKey { @@ -298,3 +305,64 @@ message StreamDeviceEventsRequest { // Device EUI. string dev_eui = 1; } + +message ListRegionsResponse { + // Configured regions. + repeated RegionListItem regions = 1; +} + +message RegionListItem { + // Name. + string name = 1; + + // Region. + common.Region region = 2; +} + +message GetRegionRequest { + // Region name. + string name = 1; +} + +message GetRegionResponse { + // Name. + string name = 1; + + // Region. + common.Region region = 2; + + // User information. + string user_info = 3; + + // Uplink channels. + repeated RegionChannel uplink_channels = 4; + + // RX1 delay. + uint32 rx1_delay = 5; + + // RX1 data-rate offset. + uint32 rx1_dr_offset = 6; + + // RX2 DR. + uint32 rx2_dr = 7; + + // RX2 frequency. + uint32 rx2_frequency = 8; + + // Class-B ping-slot DR. + uint32 class_b_ping_slot_dr = 9; + + // Class-B ping-slot frequency. + uint32 class_b_ping_slot_frequency = 10; +} + +message RegionChannel { + // Frequency (Hz). + uint32 frequency = 1; + + // Min DR. + uint32 dr_min = 2; + + // Max DR. + uint32 dr_max = 3; +} diff --git a/api/python/proto/chirpstack-api/api/internal.proto b/api/python/proto/chirpstack-api/api/internal.proto index 961e1278..a3203bf9 100644 --- a/api/python/proto/chirpstack-api/api/internal.proto +++ b/api/python/proto/chirpstack-api/api/internal.proto @@ -9,6 +9,7 @@ option java_outer_classname = "InternalProto"; import "google/protobuf/timestamp.proto"; import "google/protobuf/empty.proto"; +import "chirpstack-api/common/common.proto"; import "chirpstack-api/api/user.proto"; // InternalService is the service providing API endpoints for internal usage. @@ -51,6 +52,12 @@ service InternalService { // Stream events for the given Device EUI. rpc StreamDeviceEvents(StreamDeviceEventsRequest) returns (stream LogItem) {} + + // ListRegions lists the available (configured) regions. + rpc ListRegions(google.protobuf.Empty) returns (ListRegionsResponse) {} + + // GetRegion returns the region details for the given region. + rpc GetRegion(GetRegionRequest) returns (GetRegionResponse) {} } message ApiKey { @@ -298,3 +305,64 @@ message StreamDeviceEventsRequest { // Device EUI. string dev_eui = 1; } + +message ListRegionsResponse { + // Configured regions. + repeated RegionListItem regions = 1; +} + +message RegionListItem { + // Name. + string name = 1; + + // Region. + common.Region region = 2; +} + +message GetRegionRequest { + // Region name. + string name = 1; +} + +message GetRegionResponse { + // Name. + string name = 1; + + // Region. + common.Region region = 2; + + // User information. + string user_info = 3; + + // Uplink channels. + repeated RegionChannel uplink_channels = 4; + + // RX1 delay. + uint32 rx1_delay = 5; + + // RX1 data-rate offset. + uint32 rx1_dr_offset = 6; + + // RX2 DR. + uint32 rx2_dr = 7; + + // RX2 frequency. + uint32 rx2_frequency = 8; + + // Class-B ping-slot DR. + uint32 class_b_ping_slot_dr = 9; + + // Class-B ping-slot frequency. + uint32 class_b_ping_slot_frequency = 10; +} + +message RegionChannel { + // Frequency (Hz). + uint32 frequency = 1; + + // Min DR. + uint32 dr_min = 2; + + // Max DR. + uint32 dr_max = 3; +} diff --git a/api/python/src/chirpstack_api/api/internal_pb2.py b/api/python/src/chirpstack_api/api/internal_pb2.py index 6c70b23e..2f5d3dde 100644 --- a/api/python/src/chirpstack_api/api/internal_pb2.py +++ b/api/python/src/chirpstack_api/api/internal_pb2.py @@ -14,10 +14,11 @@ _sym_db = _symbol_database.Default() from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 +from chirpstack_api.common import common_pb2 as chirpstack__api_dot_common_dot_common__pb2 from chirpstack_api.api import user_pb2 as chirpstack__api_dot_api_dot_user__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!chirpstack-api/api/internal.proto\x12\x03\x61pi\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1d\x63hirpstack-api/api/user.proto\"G\n\x06\x41piKey\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x10\n\x08is_admin\x18\x03 \x01(\x08\x12\x11\n\ttenant_id\x18\x04 \x01(\t\"3\n\x13\x43reateApiKeyRequest\x12\x1c\n\x07\x61pi_key\x18\x01 \x01(\x0b\x32\x0b.api.ApiKey\"1\n\x14\x43reateApiKeyResponse\x12\n\n\x02id\x18\x01 \x01(\t\x12\r\n\x05token\x18\x02 \x01(\t\"!\n\x13\x44\x65leteApiKeyRequest\x12\n\n\x02id\x18\x01 \x01(\t\"X\n\x12ListApiKeysRequest\x12\r\n\x05limit\x18\x01 \x01(\r\x12\x0e\n\x06offset\x18\x02 \x01(\r\x12\x10\n\x08is_admin\x18\x03 \x01(\x08\x12\x11\n\ttenant_id\x18\x04 \x01(\t\"G\n\x13ListApiKeysResponse\x12\x13\n\x0btotal_count\x18\x01 \x01(\r\x12\x1b\n\x06result\x18\x02 \x03(\x0b\x32\x0b.api.ApiKey\"\xc8\x01\n\x0eUserTenantLink\x12.\n\ncreated_at\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x11\n\ttenant_id\x18\x03 \x01(\t\x12\x10\n\x08is_admin\x18\x04 \x01(\x08\x12\x17\n\x0fis_device_admin\x18\x05 \x01(\x08\x12\x18\n\x10is_gateway_admin\x18\x06 \x01(\x08\"/\n\x0cLoginRequest\x12\r\n\x05\x65mail\x18\x01 \x01(\t\x12\x10\n\x08password\x18\x02 \x01(\t\"\x1c\n\rLoginResponse\x12\x0b\n\x03jwt\x18\x01 \x01(\t\"P\n\x0fProfileResponse\x12\x17\n\x04user\x18\x01 \x01(\x0b\x32\t.api.User\x12$\n\x07tenants\x18\x03 \x03(\x0b\x32\x13.api.UserTenantLink\"D\n\x13GlobalSearchRequest\x12\x0e\n\x06search\x18\x01 \x01(\t\x12\r\n\x05limit\x18\x02 \x01(\x03\x12\x0e\n\x06offset\x18\x03 \x01(\x03\"?\n\x14GlobalSearchResponse\x12\'\n\x06result\x18\x01 \x03(\x0b\x32\x17.api.GlobalSearchResult\"\xe2\x01\n\x12GlobalSearchResult\x12\x0c\n\x04kind\x18\x01 \x01(\t\x12\r\n\x05score\x18\x02 \x01(\x02\x12\x11\n\ttenant_id\x18\x03 \x01(\t\x12\x13\n\x0btenant_name\x18\x04 \x01(\t\x12\x16\n\x0e\x61pplication_id\x18\x05 \x01(\t\x12\x18\n\x10\x61pplication_name\x18\x06 \x01(\t\x12\x16\n\x0e\x64\x65vice_dev_eui\x18\x07 \x01(\t\x12\x13\n\x0b\x64\x65vice_name\x18\x08 \x01(\t\x12\x12\n\ngateway_id\x18\t \x01(\t\x12\x14\n\x0cgateway_name\x18\n \x01(\t\">\n\x10SettingsResponse\x12*\n\x0eopenid_connect\x18\x01 \x01(\x0b\x32\x12.api.OpenIdConnect\"q\n\rOpenIdConnect\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x1b\n\tlogin_url\x18\x02 \x01(\tR\x08loginURL\x12\x13\n\x0blogin_label\x18\x03 \x01(\t\x12\x1d\n\nlogout_url\x18\x04 \x01(\tR\tlogoutURL\"8\n\x19OpenIdConnectLoginRequest\x12\x0c\n\x04\x63ode\x18\x01 \x01(\t\x12\r\n\x05state\x18\x02 \x01(\t\"+\n\x1aOpenIdConnectLoginResponse\x12\r\n\x05token\x18\x01 \x01(\t\"-\n\x18GetDevicesSummaryRequest\x12\x11\n\ttenant_id\x18\x01 \x01(\t\"\xd2\x01\n\x19GetDevicesSummaryResponse\x12\x14\n\x0c\x61\x63tive_count\x18\x01 \x01(\r\x12\x16\n\x0einactive_count\x18\x02 \x01(\r\x12=\n\x08\x64r_count\x18\x03 \x03(\x0b\x32+.api.GetDevicesSummaryResponse.DrCountEntry\x12\x18\n\x10never_seen_count\x18\x04 \x01(\r\x1a.\n\x0c\x44rCountEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\".\n\x19GetGatewaysSummaryRequest\x12\x11\n\ttenant_id\x18\x01 \x01(\t\"d\n\x1aGetGatewaysSummaryResponse\x12\x14\n\x0c\x61\x63tive_count\x18\x01 \x01(\r\x12\x16\n\x0einactive_count\x18\x02 \x01(\r\x12\x18\n\x10never_seen_count\x18\x03 \x01(\r\"\xc7\x01\n\x07LogItem\x12\n\n\x02id\x18\x01 \x01(\t\x12(\n\x04time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\x12\x0c\n\x04\x62ody\x18\x04 \x01(\t\x12\x30\n\nproperties\x18\x05 \x03(\x0b\x32\x1c.api.LogItem.PropertiesEntry\x1a\x31\n\x0fPropertiesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"0\n\x1aStreamGatewayFramesRequest\x12\x12\n\ngateway_id\x18\x01 \x01(\t\",\n\x19StreamDeviceFramesRequest\x12\x0f\n\x07\x64\x65v_eui\x18\x01 \x01(\t\",\n\x19StreamDeviceEventsRequest\x12\x0f\n\x07\x64\x65v_eui\x18\x01 \x01(\t2\xb3\x07\n\x0fInternalService\x12\x30\n\x05Login\x12\x11.api.LoginRequest\x1a\x12.api.LoginResponse\"\x00\x12\x39\n\x07Profile\x12\x16.google.protobuf.Empty\x1a\x14.api.ProfileResponse\"\x00\x12\x45\n\x0cGlobalSearch\x12\x18.api.GlobalSearchRequest\x1a\x19.api.GlobalSearchResponse\"\x00\x12\x45\n\x0c\x43reateApiKey\x12\x18.api.CreateApiKeyRequest\x1a\x19.api.CreateApiKeyResponse\"\x00\x12\x42\n\x0c\x44\x65leteApiKey\x12\x18.api.DeleteApiKeyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x42\n\x0bListApiKeys\x12\x17.api.ListApiKeysRequest\x1a\x18.api.ListApiKeysResponse\"\x00\x12;\n\x08Settings\x12\x16.google.protobuf.Empty\x1a\x15.api.SettingsResponse\"\x00\x12W\n\x12OpenIdConnectLogin\x12\x1e.api.OpenIdConnectLoginRequest\x1a\x1f.api.OpenIdConnectLoginResponse\"\x00\x12T\n\x11GetDevicesSummary\x12\x1d.api.GetDevicesSummaryRequest\x1a\x1e.api.GetDevicesSummaryResponse\"\x00\x12W\n\x12GetGatewaysSummary\x12\x1e.api.GetGatewaysSummaryRequest\x1a\x1f.api.GetGatewaysSummaryResponse\"\x00\x12H\n\x13StreamGatewayFrames\x12\x1f.api.StreamGatewayFramesRequest\x1a\x0c.api.LogItem\"\x00\x30\x01\x12\x46\n\x12StreamDeviceFrames\x12\x1e.api.StreamDeviceFramesRequest\x1a\x0c.api.LogItem\"\x00\x30\x01\x12\x46\n\x12StreamDeviceEvents\x12\x1e.api.StreamDeviceEventsRequest\x1a\x0c.api.LogItem\"\x00\x30\x01\x42T\n\x11io.chirpstack.apiB\rInternalProtoP\x01Z.github.com/chirpstack/chirpstack/api/go/v4/apib\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!chirpstack-api/api/internal.proto\x12\x03\x61pi\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a\"chirpstack-api/common/common.proto\x1a\x1d\x63hirpstack-api/api/user.proto\"G\n\x06\x41piKey\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x10\n\x08is_admin\x18\x03 \x01(\x08\x12\x11\n\ttenant_id\x18\x04 \x01(\t\"3\n\x13\x43reateApiKeyRequest\x12\x1c\n\x07\x61pi_key\x18\x01 \x01(\x0b\x32\x0b.api.ApiKey\"1\n\x14\x43reateApiKeyResponse\x12\n\n\x02id\x18\x01 \x01(\t\x12\r\n\x05token\x18\x02 \x01(\t\"!\n\x13\x44\x65leteApiKeyRequest\x12\n\n\x02id\x18\x01 \x01(\t\"X\n\x12ListApiKeysRequest\x12\r\n\x05limit\x18\x01 \x01(\r\x12\x0e\n\x06offset\x18\x02 \x01(\r\x12\x10\n\x08is_admin\x18\x03 \x01(\x08\x12\x11\n\ttenant_id\x18\x04 \x01(\t\"G\n\x13ListApiKeysResponse\x12\x13\n\x0btotal_count\x18\x01 \x01(\r\x12\x1b\n\x06result\x18\x02 \x03(\x0b\x32\x0b.api.ApiKey\"\xc8\x01\n\x0eUserTenantLink\x12.\n\ncreated_at\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x11\n\ttenant_id\x18\x03 \x01(\t\x12\x10\n\x08is_admin\x18\x04 \x01(\x08\x12\x17\n\x0fis_device_admin\x18\x05 \x01(\x08\x12\x18\n\x10is_gateway_admin\x18\x06 \x01(\x08\"/\n\x0cLoginRequest\x12\r\n\x05\x65mail\x18\x01 \x01(\t\x12\x10\n\x08password\x18\x02 \x01(\t\"\x1c\n\rLoginResponse\x12\x0b\n\x03jwt\x18\x01 \x01(\t\"P\n\x0fProfileResponse\x12\x17\n\x04user\x18\x01 \x01(\x0b\x32\t.api.User\x12$\n\x07tenants\x18\x03 \x03(\x0b\x32\x13.api.UserTenantLink\"D\n\x13GlobalSearchRequest\x12\x0e\n\x06search\x18\x01 \x01(\t\x12\r\n\x05limit\x18\x02 \x01(\x03\x12\x0e\n\x06offset\x18\x03 \x01(\x03\"?\n\x14GlobalSearchResponse\x12\'\n\x06result\x18\x01 \x03(\x0b\x32\x17.api.GlobalSearchResult\"\xe2\x01\n\x12GlobalSearchResult\x12\x0c\n\x04kind\x18\x01 \x01(\t\x12\r\n\x05score\x18\x02 \x01(\x02\x12\x11\n\ttenant_id\x18\x03 \x01(\t\x12\x13\n\x0btenant_name\x18\x04 \x01(\t\x12\x16\n\x0e\x61pplication_id\x18\x05 \x01(\t\x12\x18\n\x10\x61pplication_name\x18\x06 \x01(\t\x12\x16\n\x0e\x64\x65vice_dev_eui\x18\x07 \x01(\t\x12\x13\n\x0b\x64\x65vice_name\x18\x08 \x01(\t\x12\x12\n\ngateway_id\x18\t \x01(\t\x12\x14\n\x0cgateway_name\x18\n \x01(\t\">\n\x10SettingsResponse\x12*\n\x0eopenid_connect\x18\x01 \x01(\x0b\x32\x12.api.OpenIdConnect\"q\n\rOpenIdConnect\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x1b\n\tlogin_url\x18\x02 \x01(\tR\x08loginURL\x12\x13\n\x0blogin_label\x18\x03 \x01(\t\x12\x1d\n\nlogout_url\x18\x04 \x01(\tR\tlogoutURL\"8\n\x19OpenIdConnectLoginRequest\x12\x0c\n\x04\x63ode\x18\x01 \x01(\t\x12\r\n\x05state\x18\x02 \x01(\t\"+\n\x1aOpenIdConnectLoginResponse\x12\r\n\x05token\x18\x01 \x01(\t\"-\n\x18GetDevicesSummaryRequest\x12\x11\n\ttenant_id\x18\x01 \x01(\t\"\xd2\x01\n\x19GetDevicesSummaryResponse\x12\x14\n\x0c\x61\x63tive_count\x18\x01 \x01(\r\x12\x16\n\x0einactive_count\x18\x02 \x01(\r\x12=\n\x08\x64r_count\x18\x03 \x03(\x0b\x32+.api.GetDevicesSummaryResponse.DrCountEntry\x12\x18\n\x10never_seen_count\x18\x04 \x01(\r\x1a.\n\x0c\x44rCountEntry\x12\x0b\n\x03key\x18\x01 \x01(\r\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\".\n\x19GetGatewaysSummaryRequest\x12\x11\n\ttenant_id\x18\x01 \x01(\t\"d\n\x1aGetGatewaysSummaryResponse\x12\x14\n\x0c\x61\x63tive_count\x18\x01 \x01(\r\x12\x16\n\x0einactive_count\x18\x02 \x01(\r\x12\x18\n\x10never_seen_count\x18\x03 \x01(\r\"\xc7\x01\n\x07LogItem\x12\n\n\x02id\x18\x01 \x01(\t\x12(\n\x04time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\x12\x0c\n\x04\x62ody\x18\x04 \x01(\t\x12\x30\n\nproperties\x18\x05 \x03(\x0b\x32\x1c.api.LogItem.PropertiesEntry\x1a\x31\n\x0fPropertiesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"0\n\x1aStreamGatewayFramesRequest\x12\x12\n\ngateway_id\x18\x01 \x01(\t\",\n\x19StreamDeviceFramesRequest\x12\x0f\n\x07\x64\x65v_eui\x18\x01 \x01(\t\",\n\x19StreamDeviceEventsRequest\x12\x0f\n\x07\x64\x65v_eui\x18\x01 \x01(\t\";\n\x13ListRegionsResponse\x12$\n\x07regions\x18\x01 \x03(\x0b\x32\x13.api.RegionListItem\">\n\x0eRegionListItem\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x1e\n\x06region\x18\x02 \x01(\x0e\x32\x0e.common.Region\" \n\x10GetRegionRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"\x95\x02\n\x11GetRegionResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x1e\n\x06region\x18\x02 \x01(\x0e\x32\x0e.common.Region\x12\x11\n\tuser_info\x18\x03 \x01(\t\x12+\n\x0fuplink_channels\x18\x04 \x03(\x0b\x32\x12.api.RegionChannel\x12\x11\n\trx1_delay\x18\x05 \x01(\r\x12\x15\n\rrx1_dr_offset\x18\x06 \x01(\r\x12\x0e\n\x06rx2_dr\x18\x07 \x01(\r\x12\x15\n\rrx2_frequency\x18\x08 \x01(\r\x12\x1c\n\x14\x63lass_b_ping_slot_dr\x18\t \x01(\r\x12#\n\x1b\x63lass_b_ping_slot_frequency\x18\n \x01(\r\"B\n\rRegionChannel\x12\x11\n\tfrequency\x18\x01 \x01(\r\x12\x0e\n\x06\x64r_min\x18\x02 \x01(\r\x12\x0e\n\x06\x64r_max\x18\x03 \x01(\r2\xb4\x08\n\x0fInternalService\x12\x30\n\x05Login\x12\x11.api.LoginRequest\x1a\x12.api.LoginResponse\"\x00\x12\x39\n\x07Profile\x12\x16.google.protobuf.Empty\x1a\x14.api.ProfileResponse\"\x00\x12\x45\n\x0cGlobalSearch\x12\x18.api.GlobalSearchRequest\x1a\x19.api.GlobalSearchResponse\"\x00\x12\x45\n\x0c\x43reateApiKey\x12\x18.api.CreateApiKeyRequest\x1a\x19.api.CreateApiKeyResponse\"\x00\x12\x42\n\x0c\x44\x65leteApiKey\x12\x18.api.DeleteApiKeyRequest\x1a\x16.google.protobuf.Empty\"\x00\x12\x42\n\x0bListApiKeys\x12\x17.api.ListApiKeysRequest\x1a\x18.api.ListApiKeysResponse\"\x00\x12;\n\x08Settings\x12\x16.google.protobuf.Empty\x1a\x15.api.SettingsResponse\"\x00\x12W\n\x12OpenIdConnectLogin\x12\x1e.api.OpenIdConnectLoginRequest\x1a\x1f.api.OpenIdConnectLoginResponse\"\x00\x12T\n\x11GetDevicesSummary\x12\x1d.api.GetDevicesSummaryRequest\x1a\x1e.api.GetDevicesSummaryResponse\"\x00\x12W\n\x12GetGatewaysSummary\x12\x1e.api.GetGatewaysSummaryRequest\x1a\x1f.api.GetGatewaysSummaryResponse\"\x00\x12H\n\x13StreamGatewayFrames\x12\x1f.api.StreamGatewayFramesRequest\x1a\x0c.api.LogItem\"\x00\x30\x01\x12\x46\n\x12StreamDeviceFrames\x12\x1e.api.StreamDeviceFramesRequest\x1a\x0c.api.LogItem\"\x00\x30\x01\x12\x46\n\x12StreamDeviceEvents\x12\x1e.api.StreamDeviceEventsRequest\x1a\x0c.api.LogItem\"\x00\x30\x01\x12\x41\n\x0bListRegions\x12\x16.google.protobuf.Empty\x1a\x18.api.ListRegionsResponse\"\x00\x12<\n\tGetRegion\x12\x15.api.GetRegionRequest\x1a\x16.api.GetRegionResponse\"\x00\x42T\n\x11io.chirpstack.apiB\rInternalProtoP\x01Z.github.com/chirpstack/chirpstack/api/go/v4/apib\x06proto3') @@ -48,6 +49,11 @@ _LOGITEM_PROPERTIESENTRY = _LOGITEM.nested_types_by_name['PropertiesEntry'] _STREAMGATEWAYFRAMESREQUEST = DESCRIPTOR.message_types_by_name['StreamGatewayFramesRequest'] _STREAMDEVICEFRAMESREQUEST = DESCRIPTOR.message_types_by_name['StreamDeviceFramesRequest'] _STREAMDEVICEEVENTSREQUEST = DESCRIPTOR.message_types_by_name['StreamDeviceEventsRequest'] +_LISTREGIONSRESPONSE = DESCRIPTOR.message_types_by_name['ListRegionsResponse'] +_REGIONLISTITEM = DESCRIPTOR.message_types_by_name['RegionListItem'] +_GETREGIONREQUEST = DESCRIPTOR.message_types_by_name['GetRegionRequest'] +_GETREGIONRESPONSE = DESCRIPTOR.message_types_by_name['GetRegionResponse'] +_REGIONCHANNEL = DESCRIPTOR.message_types_by_name['RegionChannel'] ApiKey = _reflection.GeneratedProtocolMessageType('ApiKey', (_message.Message,), { 'DESCRIPTOR' : _APIKEY, '__module__' : 'chirpstack_api.api.internal_pb2' @@ -239,6 +245,41 @@ StreamDeviceEventsRequest = _reflection.GeneratedProtocolMessageType('StreamDevi }) _sym_db.RegisterMessage(StreamDeviceEventsRequest) +ListRegionsResponse = _reflection.GeneratedProtocolMessageType('ListRegionsResponse', (_message.Message,), { + 'DESCRIPTOR' : _LISTREGIONSRESPONSE, + '__module__' : 'chirpstack_api.api.internal_pb2' + # @@protoc_insertion_point(class_scope:api.ListRegionsResponse) + }) +_sym_db.RegisterMessage(ListRegionsResponse) + +RegionListItem = _reflection.GeneratedProtocolMessageType('RegionListItem', (_message.Message,), { + 'DESCRIPTOR' : _REGIONLISTITEM, + '__module__' : 'chirpstack_api.api.internal_pb2' + # @@protoc_insertion_point(class_scope:api.RegionListItem) + }) +_sym_db.RegisterMessage(RegionListItem) + +GetRegionRequest = _reflection.GeneratedProtocolMessageType('GetRegionRequest', (_message.Message,), { + 'DESCRIPTOR' : _GETREGIONREQUEST, + '__module__' : 'chirpstack_api.api.internal_pb2' + # @@protoc_insertion_point(class_scope:api.GetRegionRequest) + }) +_sym_db.RegisterMessage(GetRegionRequest) + +GetRegionResponse = _reflection.GeneratedProtocolMessageType('GetRegionResponse', (_message.Message,), { + 'DESCRIPTOR' : _GETREGIONRESPONSE, + '__module__' : 'chirpstack_api.api.internal_pb2' + # @@protoc_insertion_point(class_scope:api.GetRegionResponse) + }) +_sym_db.RegisterMessage(GetRegionResponse) + +RegionChannel = _reflection.GeneratedProtocolMessageType('RegionChannel', (_message.Message,), { + 'DESCRIPTOR' : _REGIONCHANNEL, + '__module__' : 'chirpstack_api.api.internal_pb2' + # @@protoc_insertion_point(class_scope:api.RegionChannel) + }) +_sym_db.RegisterMessage(RegionChannel) + _INTERNALSERVICE = DESCRIPTOR.services_by_name['InternalService'] if _descriptor._USE_C_DESCRIPTORS == False: @@ -248,60 +289,70 @@ if _descriptor._USE_C_DESCRIPTORS == False: _GETDEVICESSUMMARYRESPONSE_DRCOUNTENTRY._serialized_options = b'8\001' _LOGITEM_PROPERTIESENTRY._options = None _LOGITEM_PROPERTIESENTRY._serialized_options = b'8\001' - _APIKEY._serialized_start=135 - _APIKEY._serialized_end=206 - _CREATEAPIKEYREQUEST._serialized_start=208 - _CREATEAPIKEYREQUEST._serialized_end=259 - _CREATEAPIKEYRESPONSE._serialized_start=261 - _CREATEAPIKEYRESPONSE._serialized_end=310 - _DELETEAPIKEYREQUEST._serialized_start=312 - _DELETEAPIKEYREQUEST._serialized_end=345 - _LISTAPIKEYSREQUEST._serialized_start=347 - _LISTAPIKEYSREQUEST._serialized_end=435 - _LISTAPIKEYSRESPONSE._serialized_start=437 - _LISTAPIKEYSRESPONSE._serialized_end=508 - _USERTENANTLINK._serialized_start=511 - _USERTENANTLINK._serialized_end=711 - _LOGINREQUEST._serialized_start=713 - _LOGINREQUEST._serialized_end=760 - _LOGINRESPONSE._serialized_start=762 - _LOGINRESPONSE._serialized_end=790 - _PROFILERESPONSE._serialized_start=792 - _PROFILERESPONSE._serialized_end=872 - _GLOBALSEARCHREQUEST._serialized_start=874 - _GLOBALSEARCHREQUEST._serialized_end=942 - _GLOBALSEARCHRESPONSE._serialized_start=944 - _GLOBALSEARCHRESPONSE._serialized_end=1007 - _GLOBALSEARCHRESULT._serialized_start=1010 - _GLOBALSEARCHRESULT._serialized_end=1236 - _SETTINGSRESPONSE._serialized_start=1238 - _SETTINGSRESPONSE._serialized_end=1300 - _OPENIDCONNECT._serialized_start=1302 - _OPENIDCONNECT._serialized_end=1415 - _OPENIDCONNECTLOGINREQUEST._serialized_start=1417 - _OPENIDCONNECTLOGINREQUEST._serialized_end=1473 - _OPENIDCONNECTLOGINRESPONSE._serialized_start=1475 - _OPENIDCONNECTLOGINRESPONSE._serialized_end=1518 - _GETDEVICESSUMMARYREQUEST._serialized_start=1520 - _GETDEVICESSUMMARYREQUEST._serialized_end=1565 - _GETDEVICESSUMMARYRESPONSE._serialized_start=1568 - _GETDEVICESSUMMARYRESPONSE._serialized_end=1778 - _GETDEVICESSUMMARYRESPONSE_DRCOUNTENTRY._serialized_start=1732 - _GETDEVICESSUMMARYRESPONSE_DRCOUNTENTRY._serialized_end=1778 - _GETGATEWAYSSUMMARYREQUEST._serialized_start=1780 - _GETGATEWAYSSUMMARYREQUEST._serialized_end=1826 - _GETGATEWAYSSUMMARYRESPONSE._serialized_start=1828 - _GETGATEWAYSSUMMARYRESPONSE._serialized_end=1928 - _LOGITEM._serialized_start=1931 - _LOGITEM._serialized_end=2130 - _LOGITEM_PROPERTIESENTRY._serialized_start=2081 - _LOGITEM_PROPERTIESENTRY._serialized_end=2130 - _STREAMGATEWAYFRAMESREQUEST._serialized_start=2132 - _STREAMGATEWAYFRAMESREQUEST._serialized_end=2180 - _STREAMDEVICEFRAMESREQUEST._serialized_start=2182 - _STREAMDEVICEFRAMESREQUEST._serialized_end=2226 - _STREAMDEVICEEVENTSREQUEST._serialized_start=2228 - _STREAMDEVICEEVENTSREQUEST._serialized_end=2272 - _INTERNALSERVICE._serialized_start=2275 - _INTERNALSERVICE._serialized_end=3222 + _APIKEY._serialized_start=171 + _APIKEY._serialized_end=242 + _CREATEAPIKEYREQUEST._serialized_start=244 + _CREATEAPIKEYREQUEST._serialized_end=295 + _CREATEAPIKEYRESPONSE._serialized_start=297 + _CREATEAPIKEYRESPONSE._serialized_end=346 + _DELETEAPIKEYREQUEST._serialized_start=348 + _DELETEAPIKEYREQUEST._serialized_end=381 + _LISTAPIKEYSREQUEST._serialized_start=383 + _LISTAPIKEYSREQUEST._serialized_end=471 + _LISTAPIKEYSRESPONSE._serialized_start=473 + _LISTAPIKEYSRESPONSE._serialized_end=544 + _USERTENANTLINK._serialized_start=547 + _USERTENANTLINK._serialized_end=747 + _LOGINREQUEST._serialized_start=749 + _LOGINREQUEST._serialized_end=796 + _LOGINRESPONSE._serialized_start=798 + _LOGINRESPONSE._serialized_end=826 + _PROFILERESPONSE._serialized_start=828 + _PROFILERESPONSE._serialized_end=908 + _GLOBALSEARCHREQUEST._serialized_start=910 + _GLOBALSEARCHREQUEST._serialized_end=978 + _GLOBALSEARCHRESPONSE._serialized_start=980 + _GLOBALSEARCHRESPONSE._serialized_end=1043 + _GLOBALSEARCHRESULT._serialized_start=1046 + _GLOBALSEARCHRESULT._serialized_end=1272 + _SETTINGSRESPONSE._serialized_start=1274 + _SETTINGSRESPONSE._serialized_end=1336 + _OPENIDCONNECT._serialized_start=1338 + _OPENIDCONNECT._serialized_end=1451 + _OPENIDCONNECTLOGINREQUEST._serialized_start=1453 + _OPENIDCONNECTLOGINREQUEST._serialized_end=1509 + _OPENIDCONNECTLOGINRESPONSE._serialized_start=1511 + _OPENIDCONNECTLOGINRESPONSE._serialized_end=1554 + _GETDEVICESSUMMARYREQUEST._serialized_start=1556 + _GETDEVICESSUMMARYREQUEST._serialized_end=1601 + _GETDEVICESSUMMARYRESPONSE._serialized_start=1604 + _GETDEVICESSUMMARYRESPONSE._serialized_end=1814 + _GETDEVICESSUMMARYRESPONSE_DRCOUNTENTRY._serialized_start=1768 + _GETDEVICESSUMMARYRESPONSE_DRCOUNTENTRY._serialized_end=1814 + _GETGATEWAYSSUMMARYREQUEST._serialized_start=1816 + _GETGATEWAYSSUMMARYREQUEST._serialized_end=1862 + _GETGATEWAYSSUMMARYRESPONSE._serialized_start=1864 + _GETGATEWAYSSUMMARYRESPONSE._serialized_end=1964 + _LOGITEM._serialized_start=1967 + _LOGITEM._serialized_end=2166 + _LOGITEM_PROPERTIESENTRY._serialized_start=2117 + _LOGITEM_PROPERTIESENTRY._serialized_end=2166 + _STREAMGATEWAYFRAMESREQUEST._serialized_start=2168 + _STREAMGATEWAYFRAMESREQUEST._serialized_end=2216 + _STREAMDEVICEFRAMESREQUEST._serialized_start=2218 + _STREAMDEVICEFRAMESREQUEST._serialized_end=2262 + _STREAMDEVICEEVENTSREQUEST._serialized_start=2264 + _STREAMDEVICEEVENTSREQUEST._serialized_end=2308 + _LISTREGIONSRESPONSE._serialized_start=2310 + _LISTREGIONSRESPONSE._serialized_end=2369 + _REGIONLISTITEM._serialized_start=2371 + _REGIONLISTITEM._serialized_end=2433 + _GETREGIONREQUEST._serialized_start=2435 + _GETREGIONREQUEST._serialized_end=2467 + _GETREGIONRESPONSE._serialized_start=2470 + _GETREGIONRESPONSE._serialized_end=2747 + _REGIONCHANNEL._serialized_start=2749 + _REGIONCHANNEL._serialized_end=2815 + _INTERNALSERVICE._serialized_start=2818 + _INTERNALSERVICE._serialized_end=3894 # @@protoc_insertion_point(module_scope) diff --git a/api/python/src/chirpstack_api/api/internal_pb2_grpc.py b/api/python/src/chirpstack_api/api/internal_pb2_grpc.py index 9beed057..e47a05e2 100644 --- a/api/python/src/chirpstack_api/api/internal_pb2_grpc.py +++ b/api/python/src/chirpstack_api/api/internal_pb2_grpc.py @@ -81,6 +81,16 @@ class InternalServiceStub(object): request_serializer=chirpstack__api_dot_api_dot_internal__pb2.StreamDeviceEventsRequest.SerializeToString, response_deserializer=chirpstack__api_dot_api_dot_internal__pb2.LogItem.FromString, ) + self.ListRegions = channel.unary_unary( + '/api.InternalService/ListRegions', + request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + response_deserializer=chirpstack__api_dot_api_dot_internal__pb2.ListRegionsResponse.FromString, + ) + self.GetRegion = channel.unary_unary( + '/api.InternalService/GetRegion', + request_serializer=chirpstack__api_dot_api_dot_internal__pb2.GetRegionRequest.SerializeToString, + response_deserializer=chirpstack__api_dot_api_dot_internal__pb2.GetRegionResponse.FromString, + ) class InternalServiceServicer(object): @@ -178,6 +188,20 @@ class InternalServiceServicer(object): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def ListRegions(self, request, context): + """ListRegions lists the available (configured) regions. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def GetRegion(self, request, context): + """GetRegion returns the region details for the given region. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + def add_InternalServiceServicer_to_server(servicer, server): rpc_method_handlers = { @@ -246,6 +270,16 @@ def add_InternalServiceServicer_to_server(servicer, server): request_deserializer=chirpstack__api_dot_api_dot_internal__pb2.StreamDeviceEventsRequest.FromString, response_serializer=chirpstack__api_dot_api_dot_internal__pb2.LogItem.SerializeToString, ), + 'ListRegions': grpc.unary_unary_rpc_method_handler( + servicer.ListRegions, + request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + response_serializer=chirpstack__api_dot_api_dot_internal__pb2.ListRegionsResponse.SerializeToString, + ), + 'GetRegion': grpc.unary_unary_rpc_method_handler( + servicer.GetRegion, + request_deserializer=chirpstack__api_dot_api_dot_internal__pb2.GetRegionRequest.FromString, + response_serializer=chirpstack__api_dot_api_dot_internal__pb2.GetRegionResponse.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( 'api.InternalService', rpc_method_handlers) @@ -477,3 +511,37 @@ class InternalService(object): chirpstack__api_dot_api_dot_internal__pb2.LogItem.FromString, options, channel_credentials, insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def ListRegions(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/api.InternalService/ListRegions', + google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + chirpstack__api_dot_api_dot_internal__pb2.ListRegionsResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def GetRegion(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/api.InternalService/GetRegion', + chirpstack__api_dot_api_dot_internal__pb2.GetRegionRequest.SerializeToString, + chirpstack__api_dot_api_dot_internal__pb2.GetRegionResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/api/rust/proto/chirpstack/api/internal.proto b/api/rust/proto/chirpstack/api/internal.proto index 06c0cef3..e608e720 100644 --- a/api/rust/proto/chirpstack/api/internal.proto +++ b/api/rust/proto/chirpstack/api/internal.proto @@ -9,6 +9,7 @@ option java_outer_classname = "InternalProto"; import "google/protobuf/timestamp.proto"; import "google/protobuf/empty.proto"; +import "common/common.proto"; import "api/user.proto"; // InternalService is the service providing API endpoints for internal usage. @@ -51,6 +52,12 @@ service InternalService { // Stream events for the given Device EUI. rpc StreamDeviceEvents(StreamDeviceEventsRequest) returns (stream LogItem) {} + + // ListRegions lists the available (configured) regions. + rpc ListRegions(google.protobuf.Empty) returns (ListRegionsResponse) {} + + // GetRegion returns the region details for the given region. + rpc GetRegion(GetRegionRequest) returns (GetRegionResponse) {} } message ApiKey { @@ -298,3 +305,64 @@ message StreamDeviceEventsRequest { // Device EUI. string dev_eui = 1; } + +message ListRegionsResponse { + // Configured regions. + repeated RegionListItem regions = 1; +} + +message RegionListItem { + // Name. + string name = 1; + + // Region. + common.Region region = 2; +} + +message GetRegionRequest { + // Region name. + string name = 1; +} + +message GetRegionResponse { + // Name. + string name = 1; + + // Region. + common.Region region = 2; + + // User information. + string user_info = 3; + + // Uplink channels. + repeated RegionChannel uplink_channels = 4; + + // RX1 delay. + uint32 rx1_delay = 5; + + // RX1 data-rate offset. + uint32 rx1_dr_offset = 6; + + // RX2 DR. + uint32 rx2_dr = 7; + + // RX2 frequency. + uint32 rx2_frequency = 8; + + // Class-B ping-slot DR. + uint32 class_b_ping_slot_dr = 9; + + // Class-B ping-slot frequency. + uint32 class_b_ping_slot_frequency = 10; +} + +message RegionChannel { + // Frequency (Hz). + uint32 frequency = 1; + + // Min DR. + uint32 dr_min = 2; + + // Max DR. + uint32 dr_max = 3; +} diff --git a/chirpstack/src/api/internal.rs b/chirpstack/src/api/internal.rs index 222d99de..1cf5e1c6 100644 --- a/chirpstack/src/api/internal.rs +++ b/chirpstack/src/api/internal.rs @@ -19,9 +19,10 @@ use chirpstack_api::api::internal_service_server::InternalService; use super::auth::claims; use super::auth::{validator, AuthID}; use super::error::ToStatus; +use super::helpers::ToProto; use super::{helpers, oidc}; use crate::storage::{api_key, device, error::Error, gateway, redis_key, search, tenant, user}; -use crate::{config, eventlog, framelog}; +use crate::{config, eventlog, framelog, region}; use lrwn::EUI64; pub struct Internal { @@ -778,4 +779,76 @@ impl InternalService for Internal { Ok(Response::new(drop_receiver)) } + + async fn list_regions( + &self, + request: Request<()>, + ) -> Result, Status> { + self.validator + .validate(request.extensions(), validator::ValidateActiveUser::new()) + .await?; + + let conf = config::get(); + + let mut out: api::ListRegionsResponse = Default::default(); + + for region_config in &conf.regions { + // Check if region is enabled. + if !conf.network.enabled_regions.contains(®ion_config.name) { + continue; + } + + out.regions.push(api::RegionListItem { + name: region_config.name.clone(), + region: region_config.common_name.to_proto().into(), + }); + } + + out.regions.sort_by(|a, b| a.name.cmp(&b.name)); + Ok(Response::new(out)) + } + + async fn get_region( + &self, + request: Request, + ) -> Result, Status> { + let req = request.get_ref(); + self.validator + .validate(request.extensions(), validator::ValidateActiveUser::new()) + .await?; + + let conf = config::get(); + let reg = region::get(&req.name).map_err(|e| e.status())?; + + let mut out = api::GetRegionResponse { + ..Default::default() + }; + + for region_conf in &conf.regions { + if req.name == region_conf.name { + out.name = region_conf.name.clone(); + out.region = region_conf.common_name.to_proto().into(); + out.user_info = region_conf.user_info.clone(); + out.rx1_delay = region_conf.network.rx1_delay as u32; + out.rx1_dr_offset = region_conf.network.rx1_dr_offset as u32; + out.rx2_dr = region_conf.network.rx2_dr as u32; + out.rx2_frequency = region_conf.network.rx2_frequency as u32; + out.class_b_ping_slot_dr = region_conf.network.class_b.ping_slot_dr as u32; + out.class_b_ping_slot_frequency = region_conf.network.class_b.ping_slot_frequency; + } + } + + let enabled_channels = reg.get_enabled_uplink_channel_indices(); + + for i in enabled_channels { + let ch = reg.get_uplink_channel(i).map_err(|e| e.status())?; + out.uplink_channels.push(api::RegionChannel { + frequency: ch.frequency, + dr_min: ch.min_dr as u32, + dr_max: ch.max_dr as u32, + }); + } + + Ok(Response::new(out)) + } } diff --git a/chirpstack/src/config.rs b/chirpstack/src/config.rs index 63e6756a..4e8b3165 100644 --- a/chirpstack/src/config.rs +++ b/chirpstack/src/config.rs @@ -498,6 +498,7 @@ pub struct Kek { pub struct Region { pub name: String, pub common_name: CommonName, + pub user_info: String, pub network: RegionNetwork, pub gateway: RegionGateway, } @@ -507,6 +508,7 @@ impl Default for Region { Region { name: "eu868".to_string(), common_name: CommonName::EU868, + user_info: "".into(), network: RegionNetwork { installation_margin: 10.0, rx1_delay: 1, diff --git a/ui/package.json b/ui/package.json index 083c8349..b0dc40d0 100644 --- a/ui/package.json +++ b/ui/package.json @@ -36,6 +36,7 @@ "react-dom": "^17.0.2", "react-json-tree": "^0.15.1", "react-leaflet": "^3.2.1", + "react-markdown": "^8.0.3", "react-router-dom": "^5.3.1", "react-scripts": "5.0.1", "typescript": "^4.6.4", diff --git a/ui/src/App.tsx b/ui/src/App.tsx index 7d3ce97f..76a0ca24 100644 --- a/ui/src/App.tsx +++ b/ui/src/App.tsx @@ -35,6 +35,10 @@ import ListDeviceProfileTemplates from "./views/device-profile-templates/ListDev import EditDeviceProfileTemplate from "./views/device-profile-templates/EditDeviceProfileTemplate"; import CreateDeviceProfileTemplate from "./views/device-profile-templates/CreateDeviceProfileTemplate"; +// regions +import ListRegions from "./views/regions/ListRegions"; +import RegionDetails from "./views/regions/RegionDetails"; + // stores import SessionStore from "./stores/SessionStore"; @@ -106,6 +110,9 @@ class App extends Component { path="/device-profile-templates/:deviceProfileTemplateId([\w-]+)/edit" component={EditDeviceProfileTemplate} /> + + + diff --git a/ui/src/components/Menu.tsx b/ui/src/components/Menu.tsx index 1a8d04c1..ff03a962 100644 --- a/ui/src/components/Menu.tsx +++ b/ui/src/components/Menu.tsx @@ -11,6 +11,7 @@ import { WifiOutlined, ControlOutlined, AppstoreOutlined, + CompassOutlined, } from "@ant-design/icons"; import { @@ -123,6 +124,10 @@ class SideMenu extends Component { this.setState({ selectedKey: "ns-device-profile-templates" }); } + if (/\/regions\/.*/g.exec(path)) { + this.setState({ selectedKey: "ns-regions" }); + } + // tenant dashboard if (/\/tenants\/[\w-]{36}/g.exec(path)) { this.setState({ selectedKey: "tenant-dashboard" }); @@ -173,6 +178,16 @@ class SideMenu extends Component { icon: , label: Device-profile templates, }, + { key: "ns-regions", icon: , label: Regions }, + ], + }); + } else { + items.push({ + key: "ns", + label: "Network Server", + icon: , + children: [ + { key: "ns-regions", icon: , label: Regions }, ], }); } diff --git a/ui/src/stores/InternalStore.ts b/ui/src/stores/InternalStore.ts index 52341d11..70dcb844 100644 --- a/ui/src/stores/InternalStore.ts +++ b/ui/src/stores/InternalStore.ts @@ -21,6 +21,9 @@ import { SettingsResponse, GlobalSearchRequest, GlobalSearchResponse, + ListRegionsResponse, + GetRegionRequest, + GetRegionResponse, } from "@chirpstack/chirpstack-api-grpc-web/api/internal_pb"; import SessionStore from "./SessionStore"; @@ -198,6 +201,28 @@ class InternalStore extends EventEmitter { callbackFunc(resp); }); }; + + listRegions = (callbackFunc: (resp: ListRegionsResponse) => void) => { + this.client.listRegions(new google_protobuf_empty_pb.Empty(), SessionStore.getMetadata(), (err, resp) => { + if (err !== null) { + HandleError(err); + return; + } + + callbackFunc(resp); + }); + } + + getRegion = (req: GetRegionRequest, callbackFunc: (resp: GetRegionResponse) => void) => { + this.client.getRegion(req, SessionStore.getMetadata(), (err, resp) => { + if (err !== null) { + HandleError(err); + return; + } + + callbackFunc(resp); + }); + } } const internalStore = new InternalStore(); diff --git a/ui/src/views/regions/ListRegions.tsx b/ui/src/views/regions/ListRegions.tsx new file mode 100644 index 00000000..c61235a2 --- /dev/null +++ b/ui/src/views/regions/ListRegions.tsx @@ -0,0 +1,87 @@ +import React, { Component } from "react"; +import { Link } from "react-router-dom"; + +import { Space, Breadcrumb, PageHeader, Table } from "antd"; + +import { Region } from "@chirpstack/chirpstack-api-grpc-web/common/common_pb"; +import { + ListRegionsResponse, + RegionListItem, +} from "@chirpstack/chirpstack-api-grpc-web/api/internal_pb"; + +import { getEnumName } from "../helpers"; +import InternalStore from "../../stores/InternalStore"; + +interface IProps {} + +interface IState { + regions?: ListRegionsResponse; +} + + +class ListRegions extends Component { + constructor(props: IProps) { + super(props); + + this.state = {}; + } + + componentDidMount() { + InternalStore.listRegions((resp: ListRegionsResponse) => { + this.setState({ + regions: resp, + }); + }); + } + + render() { + let items: RegionListItem.AsObject[] = []; + + if (this.state.regions !== undefined) { + items = this.state.regions.getRegionsList().map((r, i) => r.toObject()); + } + + return ( + + ( + + + Network Server + + + Regions + + + )} + title="Regions" + /> + ( + {text} + ), + }, + { + title: "Region", + dataIndex: "region", + key: "region", + render: (text, record) => { + return getEnumName(Region, record.region); + }, + }, + ]} + /> + + ); + } +} + +export default ListRegions; diff --git a/ui/src/views/regions/RegionDetails.tsx b/ui/src/views/regions/RegionDetails.tsx new file mode 100644 index 00000000..5660c198 --- /dev/null +++ b/ui/src/views/regions/RegionDetails.tsx @@ -0,0 +1,123 @@ +import React, { Component } from "react"; +import { Link } from "react-router-dom"; +import { RouteComponentProps } from "react-router-dom"; + +import { Space, Breadcrumb, PageHeader, Card, Row, Col, List, Typography } from "antd"; +import ReactMarkdown from "react-markdown"; + +import { Region } from "@chirpstack/chirpstack-api-grpc-web/common/common_pb"; +import { + GetRegionRequest, + GetRegionResponse, +} from "@chirpstack/chirpstack-api-grpc-web/api/internal_pb"; + +import { getEnumName } from "../helpers"; +import InternalStore from "../../stores/InternalStore"; + +interface MatchParams { + name: string; +} + +interface IState { + region?: GetRegionResponse, +} + +interface IProps extends RouteComponentProps {} + +class RegionDetails extends Component { + constructor(props: IProps) { + super(props); + + this.state = {}; + } + + componentDidMount() { + let req = new GetRegionRequest(); + req.setName(this.props.match.params.name); + + InternalStore.getRegion(req, (resp: GetRegionResponse) => { + this.setState({ + region: resp, + }); + }); + } + + render() { + if (this.state.region === undefined) { + return null; + } + + return ( + + ( + + + Network Server + + + Regions + + + {this.props.match.params.name} + + + )} + title={this.props.match.params.name} + subTitle={`common-name: ${getEnumName(Region, this.state.region.getRegion())}`} + /> + {this.state.region.getUserInfo() !== "" && + + {this.state.region.getUserInfo()} + + } + + + + + ( + + + + )} + /> + + + + + + + {item[0]}: {item[1]}} + /> + + + {item[0]}: {item[1]}} + /> + + + + + + ); + } +} + +export default RegionDetails; diff --git a/ui/yarn.lock b/ui/yarn.lock index c1947f15..8534d8b2 100644 --- a/ui/yarn.lock +++ b/ui/yarn.lock @@ -2663,6 +2663,13 @@ dependencies: "@types/node" "*" +"@types/debug@^4.0.0": + version "4.1.7" + resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.7.tgz#7cc0ea761509124709b8b2d1090d8f6c17aadb82" + integrity sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg== + dependencies: + "@types/ms" "*" + "@types/eslint-scope@^3.7.3": version "3.7.3" resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.3.tgz#125b88504b61e3c8bc6f870882003253005c3224" @@ -2738,6 +2745,13 @@ dependencies: "@types/node" "*" +"@types/hast@^2.0.0": + version "2.3.4" + resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.4.tgz#8aa5ef92c117d20d974a82bdfb6a648b08c0bafc" + integrity sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g== + dependencies: + "@types/unist" "*" + "@types/history@*": version "4.7.8" resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.8.tgz#49348387983075705fe8f4e02fb67f7daaec4934" @@ -2821,11 +2835,28 @@ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.177.tgz#f70c0d19c30fab101cad46b52be60363c43c4578" integrity sha512-0fDwydE2clKe9MNfvXHBHF9WEahRuj+msTuQqOmAApNORFvhMYZKNGGJdCzuhheVjMps/ti0Ak/iJPACMaevvw== +"@types/mdast@^3.0.0": + version "3.0.10" + resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.10.tgz#4724244a82a4598884cbbe9bcfd73dff927ee8af" + integrity sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA== + dependencies: + "@types/unist" "*" + +"@types/mdurl@^1.0.0": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-1.0.2.tgz#e2ce9d83a613bacf284c7be7d491945e39e1f8e9" + integrity sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA== + "@types/mime@^1": version "1.3.2" resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== +"@types/ms@*": + version "0.7.31" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197" + integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== + "@types/node@*": version "14.14.31" resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.31.tgz#72286bd33d137aa0d152d47ec7c1762563d34055" @@ -2851,6 +2882,11 @@ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== +"@types/prop-types@^15.0.0": + version "15.7.5" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" + integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== + "@types/prop-types@^15.7.4": version "15.7.4" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.4.tgz#fcf7205c25dff795ee79af1e30da2c9790808f11" @@ -2960,6 +2996,11 @@ resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.2.tgz#fc25ad9943bcac11cceb8168db4f275e0e72e756" integrity sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg== +"@types/unist@*", "@types/unist@^2.0.0": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d" + integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ== + "@types/ws@^8.5.1": version "8.5.3" resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.3.tgz#7d25a1ffbecd3c4f2d35068d0b283c037003274d" @@ -3752,6 +3793,11 @@ babel-preset-react-app@^10.0.1: babel-plugin-macros "^3.1.0" babel-plugin-transform-react-remove-prop-types "^0.4.24" +bail@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/bail/-/bail-2.0.2.tgz#d26f5cd8fe5d6f832a31517b9f7c356040ba6d5d" + integrity sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw== + balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" @@ -4015,6 +4061,11 @@ char-regex@^2.0.0: resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-2.0.1.tgz#6dafdb25f9d3349914079f010ba8d0e6ff9cd01e" integrity sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw== +character-entities@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-2.0.2.tgz#2d09c2e72cd9523076ccb21157dff66ad43fcc22" + integrity sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ== + charcodes@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/charcodes/-/charcodes-0.2.0.tgz#5208d327e6cc05f99eb80ffc814707572d1f14e4" @@ -4174,6 +4225,11 @@ combined-stream@^1.0.8: dependencies: delayed-stream "~1.0.0" +comma-separated-tokens@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.2.tgz#d4c25abb679b7751c880be623c1179780fe1dd98" + integrity sha512-G5yTt3KQN4Yn7Yk4ed73hlZ1evrFKXeUW3086p3PRFNp7m2vIjI6Pg+Kgb+oyzhd9F2qdcoj67+y3SdxL5XWsg== + commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" @@ -4600,7 +4656,7 @@ debug@2.6.9, debug@^2.6.0, debug@^2.6.9: dependencies: ms "2.0.0" -debug@4, debug@^4.3.2: +debug@4, debug@^4.0.0, debug@^4.3.2: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -4626,6 +4682,13 @@ decimal.js@^10.2.1: resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== +decode-named-character-reference@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz#daabac9690874c394c81e4162a0304b35d824f0e" + integrity sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg== + dependencies: + character-entities "^2.0.0" + decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" @@ -4685,6 +4748,11 @@ depd@~1.1.2: resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= +dequal@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== + destroy@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" @@ -4732,6 +4800,11 @@ diff-sequences@^27.5.1: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== +diff@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40" + integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -5413,6 +5486,11 @@ express@^4.17.3: utils-merge "1.0.1" vary "~1.1.2" +extend@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -5850,6 +5928,11 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" +hast-util-whitespace@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-2.0.0.tgz#4fc1086467cc1ef5ba20673cb6b03cec3a970f1c" + integrity sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg== + he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" @@ -6123,6 +6206,11 @@ ini@^1.3.5: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== +inline-style-parser@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" + integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== + internal-slot@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" @@ -6174,6 +6262,11 @@ is-boolean-object@^1.1.0: call-bind "^1.0.2" has-tostringtag "^1.0.0" +is-buffer@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== + is-callable@^1.1.4, is-callable@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" @@ -6279,6 +6372,11 @@ is-plain-obj@^3.0.0: resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== +is-plain-obj@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" + integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== + is-potential-custom-element-name@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" @@ -7086,6 +7184,11 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== +kleur@^4.0.3: + version "4.1.5" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" + integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== + klona@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0" @@ -7280,6 +7383,55 @@ makeerror@1.0.x: dependencies: tmpl "1.0.x" +mdast-util-definitions@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-5.1.1.tgz#2c1d684b28e53f84938bb06317944bee8efa79db" + integrity sha512-rQ+Gv7mHttxHOBx2dkF4HWTg+EE+UR78ptQWDylzPKaQuVGdG4HIoY3SrS/pCp80nZ04greFvXbVFHT+uf0JVQ== + dependencies: + "@types/mdast" "^3.0.0" + "@types/unist" "^2.0.0" + unist-util-visit "^4.0.0" + +mdast-util-from-markdown@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-1.2.0.tgz#84df2924ccc6c995dec1e2368b2b208ad0a76268" + integrity sha512-iZJyyvKD1+K7QX1b5jXdE7Sc5dtoTry1vzV28UZZe8Z1xVnB/czKntJ7ZAkG0tANqRnBF6p3p7GpU1y19DTf2Q== + dependencies: + "@types/mdast" "^3.0.0" + "@types/unist" "^2.0.0" + decode-named-character-reference "^1.0.0" + mdast-util-to-string "^3.1.0" + micromark "^3.0.0" + micromark-util-decode-numeric-character-reference "^1.0.0" + micromark-util-decode-string "^1.0.0" + micromark-util-normalize-identifier "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + unist-util-stringify-position "^3.0.0" + uvu "^0.5.0" + +mdast-util-to-hast@^12.1.0: + version "12.2.2" + resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-12.2.2.tgz#2bd8cf985a67c90c181eadcfdd8d31b8798ed9a1" + integrity sha512-lVkUttV9wqmdXFtEBXKcepvU/zfwbhjbkM5rxrquLW55dS1DfOrnAXCk5mg1be1sfY/WfMmayGy1NsbK1GLCYQ== + dependencies: + "@types/hast" "^2.0.0" + "@types/mdast" "^3.0.0" + "@types/mdurl" "^1.0.0" + mdast-util-definitions "^5.0.0" + mdurl "^1.0.0" + micromark-util-sanitize-uri "^1.0.0" + trim-lines "^3.0.0" + unist-builder "^3.0.0" + unist-util-generated "^2.0.0" + unist-util-position "^4.0.0" + unist-util-visit "^4.0.0" + +mdast-util-to-string@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz#56c506d065fbf769515235e577b5a261552d56e9" + integrity sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA== + mdn-data@2.0.14: version "2.0.14" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" @@ -7290,6 +7442,11 @@ mdn-data@2.0.4: resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== +mdurl@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" + integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g== + media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" @@ -7327,6 +7484,201 @@ methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= +micromark-core-commonmark@^1.0.1: + version "1.0.6" + resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-1.0.6.tgz#edff4c72e5993d93724a3c206970f5a15b0585ad" + integrity sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA== + dependencies: + decode-named-character-reference "^1.0.0" + micromark-factory-destination "^1.0.0" + micromark-factory-label "^1.0.0" + micromark-factory-space "^1.0.0" + micromark-factory-title "^1.0.0" + micromark-factory-whitespace "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-chunked "^1.0.0" + micromark-util-classify-character "^1.0.0" + micromark-util-html-tag-name "^1.0.0" + micromark-util-normalize-identifier "^1.0.0" + micromark-util-resolve-all "^1.0.0" + micromark-util-subtokenize "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.1" + uvu "^0.5.0" + +micromark-factory-destination@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz#fef1cb59ad4997c496f887b6977aa3034a5a277e" + integrity sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-factory-label@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/micromark-factory-label/-/micromark-factory-label-1.0.2.tgz#6be2551fa8d13542fcbbac478258fb7a20047137" + integrity sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + uvu "^0.5.0" + +micromark-factory-space@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz#cebff49968f2b9616c0fcb239e96685cb9497633" + integrity sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-factory-title@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/micromark-factory-title/-/micromark-factory-title-1.0.2.tgz#7e09287c3748ff1693930f176e1c4a328382494f" + integrity sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A== + dependencies: + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + uvu "^0.5.0" + +micromark-factory-whitespace@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micromark-factory-whitespace/-/micromark-factory-whitespace-1.0.0.tgz#e991e043ad376c1ba52f4e49858ce0794678621c" + integrity sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A== + dependencies: + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-util-character@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-1.1.0.tgz#d97c54d5742a0d9611a68ca0cd4124331f264d86" + integrity sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg== + dependencies: + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-util-chunked@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz#5b40d83f3d53b84c4c6bce30ed4257e9a4c79d06" + integrity sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g== + dependencies: + micromark-util-symbol "^1.0.0" + +micromark-util-classify-character@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micromark-util-classify-character/-/micromark-util-classify-character-1.0.0.tgz#cbd7b447cb79ee6997dd274a46fc4eb806460a20" + integrity sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-util-combine-extensions@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.0.0.tgz#91418e1e74fb893e3628b8d496085639124ff3d5" + integrity sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA== + dependencies: + micromark-util-chunked "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-util-decode-numeric-character-reference@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.0.0.tgz#dcc85f13b5bd93ff8d2868c3dba28039d490b946" + integrity sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w== + dependencies: + micromark-util-symbol "^1.0.0" + +micromark-util-decode-string@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/micromark-util-decode-string/-/micromark-util-decode-string-1.0.2.tgz#942252ab7a76dec2dbf089cc32505ee2bc3acf02" + integrity sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q== + dependencies: + decode-named-character-reference "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-decode-numeric-character-reference "^1.0.0" + micromark-util-symbol "^1.0.0" + +micromark-util-encode@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-1.0.1.tgz#2c1c22d3800870ad770ece5686ebca5920353383" + integrity sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA== + +micromark-util-html-tag-name@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.1.0.tgz#eb227118befd51f48858e879b7a419fc0df20497" + integrity sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA== + +micromark-util-normalize-identifier@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz#4a3539cb8db954bbec5203952bfe8cedadae7828" + integrity sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg== + dependencies: + micromark-util-symbol "^1.0.0" + +micromark-util-resolve-all@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micromark-util-resolve-all/-/micromark-util-resolve-all-1.0.0.tgz#a7c363f49a0162e931960c44f3127ab58f031d88" + integrity sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw== + dependencies: + micromark-util-types "^1.0.0" + +micromark-util-sanitize-uri@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.0.0.tgz#27dc875397cd15102274c6c6da5585d34d4f12b2" + integrity sha512-cCxvBKlmac4rxCGx6ejlIviRaMKZc0fWm5HdCHEeDWRSkn44l6NdYVRyU+0nT1XC72EQJMZV8IPHF+jTr56lAg== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-encode "^1.0.0" + micromark-util-symbol "^1.0.0" + +micromark-util-subtokenize@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.2.tgz#ff6f1af6ac836f8bfdbf9b02f40431760ad89105" + integrity sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA== + dependencies: + micromark-util-chunked "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + uvu "^0.5.0" + +micromark-util-symbol@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-1.0.1.tgz#b90344db62042ce454f351cf0bebcc0a6da4920e" + integrity sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ== + +micromark-util-types@^1.0.0, micromark-util-types@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-1.0.2.tgz#f4220fdb319205812f99c40f8c87a9be83eded20" + integrity sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w== + +micromark@^3.0.0: + version "3.0.10" + resolved "https://registry.yarnpkg.com/micromark/-/micromark-3.0.10.tgz#1eac156f0399d42736458a14b0ca2d86190b457c" + integrity sha512-ryTDy6UUunOXy2HPjelppgJ2sNfcPz1pLlMdA6Rz9jPzhLikWXv/irpWV/I2jd68Uhmny7hHxAlAhk4+vWggpg== + dependencies: + "@types/debug" "^4.0.0" + debug "^4.0.0" + decode-named-character-reference "^1.0.0" + micromark-core-commonmark "^1.0.1" + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-chunked "^1.0.0" + micromark-util-combine-extensions "^1.0.0" + micromark-util-decode-numeric-character-reference "^1.0.0" + micromark-util-encode "^1.0.0" + micromark-util-normalize-identifier "^1.0.0" + micromark-util-resolve-all "^1.0.0" + micromark-util-sanitize-uri "^1.0.0" + micromark-util-subtokenize "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.1" + uvu "^0.5.0" + micromatch@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" @@ -7440,6 +7792,11 @@ moment@^2.24.0, moment@^2.29.2: resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== +mri@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" + integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -8541,7 +8898,7 @@ prompts@^2.4.2: kleur "^3.0.3" sisteransi "^1.0.5" -prop-types@^15.6.2, prop-types@^15.8.1: +prop-types@^15.0.0, prop-types@^15.6.2, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -8559,6 +8916,11 @@ prop-types@^15.7.2: object-assign "^4.1.1" react-is "^16.8.1" +property-information@^6.0.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.1.1.tgz#5ca85510a3019726cb9afed4197b7b8ac5926a22" + integrity sha512-hrzC564QIl0r0vy4l6MvRLhafmUowhO/O3KgVSoXIbbA2Sz4j8HGpJc6T2cubRVwMwpdiG/vKGfhT4IixmKN9w== + proxy-addr@~2.0.7: version "2.0.7" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" @@ -9168,6 +9530,27 @@ react-leaflet@^3.2.1: dependencies: "@react-leaflet/core" "^1.1.0" +react-markdown@^8.0.3: + version "8.0.3" + resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-8.0.3.tgz#e8aba0d2f5a1b2124d476ee1fff9448a2f57e4b3" + integrity sha512-We36SfqaKoVNpN1QqsZwWSv/OZt5J15LNgTLWynwAN5b265hrQrsjMtlRNwUvS+YyR3yDM8HpTNc4pK9H/Gc0A== + dependencies: + "@types/hast" "^2.0.0" + "@types/prop-types" "^15.0.0" + "@types/unist" "^2.0.0" + comma-separated-tokens "^2.0.0" + hast-util-whitespace "^2.0.0" + prop-types "^15.0.0" + property-information "^6.0.0" + react-is "^18.0.0" + remark-parse "^10.0.0" + remark-rehype "^10.0.0" + space-separated-tokens "^2.0.0" + style-to-object "^0.3.0" + unified "^10.0.0" + unist-util-visit "^4.0.0" + vfile "^5.0.0" + react-refresh@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.11.0.tgz#77198b944733f0f1f1a90e791de4541f9f074046" @@ -9424,6 +9807,25 @@ relateurl@^0.2.7: resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= +remark-parse@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-10.0.1.tgz#6f60ae53edbf0cf38ea223fe643db64d112e0775" + integrity sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw== + dependencies: + "@types/mdast" "^3.0.0" + mdast-util-from-markdown "^1.0.0" + unified "^10.0.0" + +remark-rehype@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-10.1.0.tgz#32dc99d2034c27ecaf2e0150d22a6dcccd9a6279" + integrity sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw== + dependencies: + "@types/hast" "^2.0.0" + "@types/mdast" "^3.0.0" + mdast-util-to-hast "^12.1.0" + unified "^10.0.0" + renderkid@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" @@ -9559,6 +9961,13 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" +sade@^1.7.3: + version "1.8.1" + resolved "https://registry.yarnpkg.com/sade/-/sade-1.8.1.tgz#0a78e81d658d394887be57d2a409bf703a3b2701" + integrity sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A== + dependencies: + mri "^1.1.0" + safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -9901,6 +10310,11 @@ sourcemap-codec@^1.4.4: resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== +space-separated-tokens@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.1.tgz#43193cec4fb858a2ce934b7f98b7f2c18107098b" + integrity sha512-ekwEbFp5aqSPKaqeY1PGrlGQxPNaq+Cnx4+bE2D8sciBQrHpbwoBbawqTN2+6jPs9IdWxxiUcN0K2pkczD3zmw== + spdy-transport@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" @@ -10118,6 +10532,13 @@ style-loader@^3.3.1: resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.1.tgz#057dfa6b3d4d7c7064462830f9113ed417d38575" integrity sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ== +style-to-object@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.3.0.tgz#b1b790d205991cc783801967214979ee19a76e46" + integrity sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA== + dependencies: + inline-style-parser "0.1.1" + stylehacks@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.1.0.tgz#a40066490ca0caca04e96c6b02153ddc39913520" @@ -10374,6 +10795,16 @@ tr46@^2.1.0: dependencies: punycode "^2.1.1" +trim-lines@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338" + integrity sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg== + +trough@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/trough/-/trough-2.1.0.tgz#0f7b511a4fde65a46f18477ab38849b22c554876" + integrity sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g== + tryer@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" @@ -10516,6 +10947,19 @@ unicode-property-aliases-ecmascript@^2.0.0: resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== +unified@^10.0.0: + version "10.1.2" + resolved "https://registry.yarnpkg.com/unified/-/unified-10.1.2.tgz#b1d64e55dafe1f0b98bb6c719881103ecf6c86df" + integrity sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q== + dependencies: + "@types/unist" "^2.0.0" + bail "^2.0.0" + extend "^3.0.0" + is-buffer "^2.0.0" + is-plain-obj "^4.0.0" + trough "^2.0.0" + vfile "^5.0.0" + uniq@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" @@ -10528,6 +10972,54 @@ unique-string@^2.0.0: dependencies: crypto-random-string "^2.0.0" +unist-builder@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-3.0.0.tgz#728baca4767c0e784e1e64bb44b5a5a753021a04" + integrity sha512-GFxmfEAa0vi9i5sd0R2kcrI9ks0r82NasRq5QHh2ysGngrc6GiqD5CDf1FjPenY4vApmFASBIIlk/jj5J5YbmQ== + dependencies: + "@types/unist" "^2.0.0" + +unist-util-generated@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-2.0.0.tgz#86fafb77eb6ce9bfa6b663c3f5ad4f8e56a60113" + integrity sha512-TiWE6DVtVe7Ye2QxOVW9kqybs6cZexNwTwSMVgkfjEReqy/xwGpAXb99OxktoWwmL+Z+Epb0Dn8/GNDYP1wnUw== + +unist-util-is@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-5.1.1.tgz#e8aece0b102fa9bc097b0fef8f870c496d4a6236" + integrity sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ== + +unist-util-position@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-4.0.3.tgz#5290547b014f6222dff95c48d5c3c13a88fadd07" + integrity sha512-p/5EMGIa1qwbXjA+QgcBXaPWjSnZfQ2Sc3yBEEfgPwsEmJd8Qh+DSk3LGnmOM4S1bY2C0AjmMnB8RuEYxpPwXQ== + dependencies: + "@types/unist" "^2.0.0" + +unist-util-stringify-position@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz#5c6aa07c90b1deffd9153be170dce628a869a447" + integrity sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg== + dependencies: + "@types/unist" "^2.0.0" + +unist-util-visit-parents@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz#868f353e6fce6bf8fa875b251b0f4fec3be709bb" + integrity sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^5.0.0" + +unist-util-visit@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-4.1.1.tgz#1c4842d70bd3df6cc545276f5164f933390a9aad" + integrity sha512-n9KN3WV9k4h1DxYR1LoajgN93wpEi/7ZplVe02IoB4gH5ctI1AaF2670BLHQYbwj+pY83gFtyeySFiyMHJklrg== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^5.0.0" + unist-util-visit-parents "^5.1.1" + universalify@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" @@ -10590,6 +11082,16 @@ uuid@^3.4.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== +uvu@^0.5.0: + version "0.5.6" + resolved "https://registry.yarnpkg.com/uvu/-/uvu-0.5.6.tgz#2754ca20bcb0bb59b64e9985e84d2e81058502df" + integrity sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA== + dependencies: + dequal "^2.0.0" + diff "^5.0.0" + kleur "^4.0.3" + sade "^1.7.3" + v8-compile-cache@^2.0.3: version "2.2.0" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132" @@ -10614,6 +11116,24 @@ vary@~1.1.2: resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= +vfile-message@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-3.1.2.tgz#a2908f64d9e557315ec9d7ea3a910f658ac05f7d" + integrity sha512-QjSNP6Yxzyycd4SVOtmKKyTsSvClqBPJcd00Z0zuPj3hOIjg0rUPG6DbFGPvUKRgYyaIWLPKpuEclcuvb3H8qA== + dependencies: + "@types/unist" "^2.0.0" + unist-util-stringify-position "^3.0.0" + +vfile@^5.0.0: + version "5.3.5" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-5.3.5.tgz#ec2e206b1414f561c85b7972bb1eeda8ab47ee61" + integrity sha512-U1ho2ga33eZ8y8pkbQLH54uKqGhFJ6GYIHnnG5AhRpAh3OWjkrRHKa/KogbmQn8We+c0KVV3rTOgR9V/WowbXQ== + dependencies: + "@types/unist" "^2.0.0" + is-buffer "^2.0.0" + unist-util-stringify-position "^3.0.0" + vfile-message "^3.0.0" + w3c-hr-time@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd"