From dcd3dc79db16fc23017a772961310b83d0f2cdde Mon Sep 17 00:00:00 2001 From: Denise Li Date: Thu, 3 Oct 2024 12:42:58 -0400 Subject: [PATCH] feat: add StreamModules to ConsoleService (#2931) Part 1 of https://github.com/TBD54566975/ftl/issues/2805 Next: 1. Client side integration for this PR's version of StreamModules, which behaves in a way that's very similar to the existing `get` endpoint 2. Address the TODO in StreamModules: detect + push deployment updates to the stream 3. Handle streaming updates on the client side --------- Co-authored-by: github-actions[bot] --- backend/controller/console/console.go | 260 ++++- .../console/console_integration_test.go | 26 + .../xyz/block/ftl/v1/console/console.pb.go | 1005 ++++++++++------- .../xyz/block/ftl/v1/console/console.proto | 12 + .../pbconsoleconnect/console.connect.go | 35 +- .../src/api/modules/use-stream-modules.ts | 49 + .../block/ftl/v1/console/console_connect.ts | 11 +- .../xyz/block/ftl/v1/console/console_pb.ts | 104 ++ 8 files changed, 1057 insertions(+), 445 deletions(-) create mode 100644 frontend/console/src/api/modules/use-stream-modules.ts diff --git a/backend/controller/console/console.go b/backend/controller/console/console.go index 43f3c2e1ee..c553f631b4 100644 --- a/backend/controller/console/console.go +++ b/backend/controller/console/console.go @@ -102,55 +102,20 @@ func (c *ConsoleService) GetModules(ctx context.Context, req *connect.Request[pb for _, decl := range deployment.Schema.Decls { switch decl := decl.(type) { case *schema.Verb: - //nolint:forcetypeassert - v := decl.ToProto().(*schemapb.Verb) - verbSchema := schema.VerbFromProto(v) - var jsonRequestSchema string - if verbSchema.Request != nil { - if requestData, ok := verbSchema.Request.(*schema.Ref); ok { - jsonSchema, err := schema.RequestResponseToJSONSchema(sch, *requestData) - if err != nil { - return nil, err - } - jsonData, err := json.MarshalIndent(jsonSchema, "", " ") - if err != nil { - return nil, err - } - jsonRequestSchema = string(jsonData) - } - } - - schemaString, err := verbSchemaString(sch, decl) + verb, err := verbFromDecl(decl, sch) if err != nil { return nil, err } - verbs = append(verbs, &pbconsole.Verb{ - Verb: v, - Schema: schemaString, - JsonRequestSchema: jsonRequestSchema, - }) + verbs = append(verbs, verb) case *schema.Data: - //nolint:forcetypeassert - d := decl.ToProto().(*schemapb.Data) - data = append(data, &pbconsole.Data{ - Data: d, - Schema: schema.DataFromProto(d).String(), - }) + data = append(data, dataFromDecl(decl)) case *schema.Secret: - //nolint:forcetypeassert - s := decl.ToProto().(*schemapb.Secret) - secrets = append(secrets, &pbconsole.Secret{ - Secret: s, - }) + secrets = append(secrets, secretFromDecl(decl)) case *schema.Config: - //nolint:forcetypeassert - c := decl.ToProto().(*schemapb.Config) - configs = append(configs, &pbconsole.Config{ - Config: c, - }) + configs = append(configs, configFromDecl(decl)) case *schema.Database, *schema.Enum, *schema.TypeAlias, *schema.FSM, *schema.Topic, *schema.Subscription: } @@ -188,6 +153,221 @@ func (c *ConsoleService) GetModules(ctx context.Context, req *connect.Request[pb }), nil } +func moduleFromDeployment(deployment dalmodel.Deployment, sch *schema.Schema) (*pbconsole.Module, error) { + module, err := moduleFromDecls(deployment.Schema.Decls, sch) + if err != nil { + return nil, err + } + + module.Name = deployment.Module + module.DeploymentKey = deployment.Key.String() + module.Language = deployment.Language + module.Schema = deployment.Schema.String() + + return module, nil +} + +func moduleFromDecls(decls []schema.Decl, sch *schema.Schema) (*pbconsole.Module, error) { + var configs []*pbconsole.Config + var data []*pbconsole.Data + var databases []*pbconsole.Database + var enums []*pbconsole.Enum + var fsms []*pbconsole.FSM + var topics []*pbconsole.Topic + var typealiases []*pbconsole.TypeAlias + var secrets []*pbconsole.Secret + var subscriptions []*pbconsole.Subscription + var verbs []*pbconsole.Verb + + for _, decl := range decls { + switch decl := decl.(type) { + case *schema.Config: + configs = append(configs, configFromDecl(decl)) + + case *schema.Data: + data = append(data, dataFromDecl(decl)) + + case *schema.Database: + databases = append(databases, databaseFromDecl(decl)) + + case *schema.Enum: + enums = append(enums, enumFromDecl(decl)) + + case *schema.FSM: + fsms = append(fsms, fsmFromDecl(decl)) + + case *schema.Topic: + topics = append(topics, topicFromDecl(decl)) + + case *schema.Secret: + secrets = append(secrets, secretFromDecl(decl)) + + case *schema.Subscription: + subscriptions = append(subscriptions, subscriptionFromDecl(decl)) + + case *schema.TypeAlias: + typealiases = append(typealiases, typealiasFromDecl(decl)) + + case *schema.Verb: + verb, err := verbFromDecl(decl, sch) + if err != nil { + return nil, err + } + verbs = append(verbs, verb) + } + } + + return &pbconsole.Module{ + Configs: configs, + Data: data, + Databases: databases, + Enums: enums, + Fsms: fsms, + Topics: topics, + Typealiases: typealiases, + Secrets: secrets, + Subscriptions: subscriptions, + Verbs: verbs, + }, nil +} + +func configFromDecl(decl *schema.Config) *pbconsole.Config { + return &pbconsole.Config{ + //nolint:forcetypeassert + Config: decl.ToProto().(*schemapb.Config), + } +} + +func dataFromDecl(decl *schema.Data) *pbconsole.Data { + //nolint:forcetypeassert + d := decl.ToProto().(*schemapb.Data) + return &pbconsole.Data{ + Data: d, + Schema: schema.DataFromProto(d).String(), + } +} + +func databaseFromDecl(decl *schema.Database) *pbconsole.Database { + return &pbconsole.Database{ + //nolint:forcetypeassert + Database: decl.ToProto().(*schemapb.Database), + } +} + +func enumFromDecl(decl *schema.Enum) *pbconsole.Enum { + return &pbconsole.Enum{ + //nolint:forcetypeassert + Enum: decl.ToProto().(*schemapb.Enum), + } +} + +func fsmFromDecl(decl *schema.FSM) *pbconsole.FSM { + return &pbconsole.FSM{ + //nolint:forcetypeassert + Fsm: decl.ToProto().(*schemapb.FSM), + } +} + +func topicFromDecl(decl *schema.Topic) *pbconsole.Topic { + return &pbconsole.Topic{ + //nolint:forcetypeassert + Topic: decl.ToProto().(*schemapb.Topic), + } +} + +func typealiasFromDecl(decl *schema.TypeAlias) *pbconsole.TypeAlias { + return &pbconsole.TypeAlias{ + //nolint:forcetypeassert + Typealias: decl.ToProto().(*schemapb.TypeAlias), + } +} + +func secretFromDecl(decl *schema.Secret) *pbconsole.Secret { + return &pbconsole.Secret{ + //nolint:forcetypeassert + Secret: decl.ToProto().(*schemapb.Secret), + } +} + +func subscriptionFromDecl(decl *schema.Subscription) *pbconsole.Subscription { + return &pbconsole.Subscription{ + //nolint:forcetypeassert + Subscription: decl.ToProto().(*schemapb.Subscription), + } +} + +func verbFromDecl(decl *schema.Verb, sch *schema.Schema) (*pbconsole.Verb, error) { + //nolint:forcetypeassert + v := decl.ToProto().(*schemapb.Verb) + verbSchema := schema.VerbFromProto(v) + var jsonRequestSchema string + if verbSchema.Request != nil { + if requestData, ok := verbSchema.Request.(*schema.Ref); ok { + jsonSchema, err := schema.RequestResponseToJSONSchema(sch, *requestData) + if err != nil { + return nil, fmt.Errorf("failed to retrieve JSON schema: %w", err) + } + jsonData, err := json.MarshalIndent(jsonSchema, "", " ") + if err != nil { + return nil, fmt.Errorf("failed to indent JSON schema: %w", err) + } + jsonRequestSchema = string(jsonData) + } + } + + schemaString, err := verbSchemaString(sch, decl) + if err != nil { + return nil, err + } + return &pbconsole.Verb{ + Verb: v, + Schema: schemaString, + JsonRequestSchema: jsonRequestSchema, + }, nil +} + +func (c *ConsoleService) StreamModules(ctx context.Context, req *connect.Request[pbconsole.StreamModulesRequest], stream *connect.ServerStream[pbconsole.StreamModulesResponse]) error { + deployments, err := c.dal.GetDeploymentsWithMinReplicas(ctx) + if err != nil { + return fmt.Errorf("failed to get deployments: %w", err) + } + sch := &schema.Schema{ + Modules: slices.Map(deployments, func(d dalmodel.Deployment) *schema.Module { + return d.Schema + }), + } + builtin := schema.Builtins() + sch.Modules = append(sch.Modules, builtin) + + var modules []*pbconsole.Module + for _, deployment := range deployments { + module, err := moduleFromDeployment(deployment, sch) + if err != nil { + return err + } + modules = append(modules, module) + } + + builtinModule, err := moduleFromDecls(builtin.Decls, sch) + if err != nil { + return err + } + builtinModule.Name = builtin.Name + builtinModule.Language = "go" + builtinModule.Schema = builtin.String() + modules = append(modules, builtinModule) + + err = stream.Send(&pbconsole.StreamModulesResponse{ + Modules: modules, + }) + if err != nil { + return fmt.Errorf("failed to send StreamModulesResponse to stream: %w", err) + } + + // TODO: handle deployment updates + return nil +} + func (c *ConsoleService) GetEvents(ctx context.Context, req *connect.Request[pbconsole.EventsQuery]) (*connect.Response[pbconsole.GetEventsResponse], error) { query, err := eventsQueryProtoToDAL(req.Msg) if err != nil { diff --git a/backend/controller/console/console_integration_test.go b/backend/controller/console/console_integration_test.go index 0f36737472..aedd1a1262 100644 --- a/backend/controller/console/console_integration_test.go +++ b/backend/controller/console/console_integration_test.go @@ -34,3 +34,29 @@ func TestConsoleGetModules(t *testing.T) { }), ) } + +// StreamModules calls console service GetModules and returns the response. +// +// This action is defined here vs. actions.go because it is only used in this test file. +func StreamModules(onResponse func(t testing.TB, resp *connect.ServerStreamForClient[pbconsole.StreamModulesResponse])) in.Action { + return func(t testing.TB, ic in.TestContext) { + in.Infof("StreamModules") + modules, err := ic.Console.StreamModules(ic.Context, &connect.Request[pbconsole.StreamModulesRequest]{}) + assert.NoError(t, err) + onResponse(t, modules) + } +} + +func TestConsoleStreamModules(t *testing.T) { + in.Run(t, + in.CopyModule("console"), + in.Deploy("console"), + StreamModules(func(t testing.TB, stream *connect.ServerStreamForClient[pbconsole.StreamModulesResponse]) { + for stream.Receive() { + assert.Equal(t, 2, len(stream.Msg().Modules)) + assert.Equal(t, "console", stream.Msg().Modules[0].Name) + assert.Equal(t, "builtin", stream.Msg().Modules[1].Name) + } + }), + ) +} diff --git a/backend/protos/xyz/block/ftl/v1/console/console.pb.go b/backend/protos/xyz/block/ftl/v1/console/console.pb.go index c6d3c266d8..6b0c01979f 100644 --- a/backend/protos/xyz/block/ftl/v1/console/console.pb.go +++ b/backend/protos/xyz/block/ftl/v1/console/console.pb.go @@ -186,7 +186,7 @@ func (x EventsQuery_Order) Number() protoreflect.EnumNumber { // Deprecated: Use EventsQuery_Order.Descriptor instead. func (EventsQuery_Order) EnumDescriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{21, 0} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{23, 0} } type LogEvent struct { @@ -1290,14 +1290,20 @@ type Module struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - DeploymentKey string `protobuf:"bytes,2,opt,name=deployment_key,json=deploymentKey,proto3" json:"deployment_key,omitempty"` - Language string `protobuf:"bytes,3,opt,name=language,proto3" json:"language,omitempty"` - Schema string `protobuf:"bytes,4,opt,name=schema,proto3" json:"schema,omitempty"` - Verbs []*Verb `protobuf:"bytes,5,rep,name=verbs,proto3" json:"verbs,omitempty"` - Data []*Data `protobuf:"bytes,6,rep,name=data,proto3" json:"data,omitempty"` - Secrets []*Secret `protobuf:"bytes,7,rep,name=secrets,proto3" json:"secrets,omitempty"` - Configs []*Config `protobuf:"bytes,8,rep,name=configs,proto3" json:"configs,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + DeploymentKey string `protobuf:"bytes,2,opt,name=deployment_key,json=deploymentKey,proto3" json:"deployment_key,omitempty"` + Language string `protobuf:"bytes,3,opt,name=language,proto3" json:"language,omitempty"` + Schema string `protobuf:"bytes,4,opt,name=schema,proto3" json:"schema,omitempty"` + Verbs []*Verb `protobuf:"bytes,5,rep,name=verbs,proto3" json:"verbs,omitempty"` + Data []*Data `protobuf:"bytes,6,rep,name=data,proto3" json:"data,omitempty"` + Secrets []*Secret `protobuf:"bytes,7,rep,name=secrets,proto3" json:"secrets,omitempty"` + Configs []*Config `protobuf:"bytes,8,rep,name=configs,proto3" json:"configs,omitempty"` + Databases []*Database `protobuf:"bytes,9,rep,name=databases,proto3" json:"databases,omitempty"` + Enums []*Enum `protobuf:"bytes,10,rep,name=enums,proto3" json:"enums,omitempty"` + Fsms []*FSM `protobuf:"bytes,11,rep,name=fsms,proto3" json:"fsms,omitempty"` + Topics []*Topic `protobuf:"bytes,12,rep,name=topics,proto3" json:"topics,omitempty"` + Typealiases []*TypeAlias `protobuf:"bytes,13,rep,name=typealiases,proto3" json:"typealiases,omitempty"` + Subscriptions []*Subscription `protobuf:"bytes,14,rep,name=subscriptions,proto3" json:"subscriptions,omitempty"` } func (x *Module) Reset() { @@ -1388,6 +1394,48 @@ func (x *Module) GetConfigs() []*Config { return nil } +func (x *Module) GetDatabases() []*Database { + if x != nil { + return x.Databases + } + return nil +} + +func (x *Module) GetEnums() []*Enum { + if x != nil { + return x.Enums + } + return nil +} + +func (x *Module) GetFsms() []*FSM { + if x != nil { + return x.Fsms + } + return nil +} + +func (x *Module) GetTopics() []*Topic { + if x != nil { + return x.Topics + } + return nil +} + +func (x *Module) GetTypealiases() []*TypeAlias { + if x != nil { + return x.Typealiases + } + return nil +} + +func (x *Module) GetSubscriptions() []*Subscription { + if x != nil { + return x.Subscriptions + } + return nil +} + type TopologyGroup struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1575,6 +1623,91 @@ func (x *GetModulesResponse) GetTopology() *Topology { return nil } +type StreamModulesRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *StreamModulesRequest) Reset() { + *x = StreamModulesRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StreamModulesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StreamModulesRequest) ProtoMessage() {} + +func (x *StreamModulesRequest) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[21] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StreamModulesRequest.ProtoReflect.Descriptor instead. +func (*StreamModulesRequest) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{21} +} + +type StreamModulesResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Modules []*Module `protobuf:"bytes,1,rep,name=modules,proto3" json:"modules,omitempty"` +} + +func (x *StreamModulesResponse) Reset() { + *x = StreamModulesResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StreamModulesResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StreamModulesResponse) ProtoMessage() {} + +func (x *StreamModulesResponse) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[22] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StreamModulesResponse.ProtoReflect.Descriptor instead. +func (*StreamModulesResponse) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{22} +} + +func (x *StreamModulesResponse) GetModules() []*Module { + if x != nil { + return x.Modules + } + return nil +} + // Query for events. type EventsQuery struct { state protoimpl.MessageState @@ -1589,7 +1722,7 @@ type EventsQuery struct { func (x *EventsQuery) Reset() { *x = EventsQuery{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[21] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1602,7 +1735,7 @@ func (x *EventsQuery) String() string { func (*EventsQuery) ProtoMessage() {} func (x *EventsQuery) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[21] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1615,7 +1748,7 @@ func (x *EventsQuery) ProtoReflect() protoreflect.Message { // Deprecated: Use EventsQuery.ProtoReflect.Descriptor instead. func (*EventsQuery) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{21} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{23} } func (x *EventsQuery) GetFilters() []*EventsQuery_Filter { @@ -1651,7 +1784,7 @@ type StreamEventsRequest struct { func (x *StreamEventsRequest) Reset() { *x = StreamEventsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[22] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1664,7 +1797,7 @@ func (x *StreamEventsRequest) String() string { func (*StreamEventsRequest) ProtoMessage() {} func (x *StreamEventsRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[22] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1677,7 +1810,7 @@ func (x *StreamEventsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StreamEventsRequest.ProtoReflect.Descriptor instead. func (*StreamEventsRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{22} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{24} } func (x *StreamEventsRequest) GetUpdateInterval() *durationpb.Duration { @@ -1705,7 +1838,7 @@ type StreamEventsResponse struct { func (x *StreamEventsResponse) Reset() { *x = StreamEventsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[23] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1718,7 +1851,7 @@ func (x *StreamEventsResponse) String() string { func (*StreamEventsResponse) ProtoMessage() {} func (x *StreamEventsResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[23] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1731,7 +1864,7 @@ func (x *StreamEventsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StreamEventsResponse.ProtoReflect.Descriptor instead. func (*StreamEventsResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{23} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{25} } func (x *StreamEventsResponse) GetEvents() []*Event { @@ -1763,7 +1896,7 @@ type Event struct { func (x *Event) Reset() { *x = Event{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[24] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1776,7 +1909,7 @@ func (x *Event) String() string { func (*Event) ProtoMessage() {} func (x *Event) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[24] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1789,7 +1922,7 @@ func (x *Event) ProtoReflect() protoreflect.Message { // Deprecated: Use Event.ProtoReflect.Descriptor instead. func (*Event) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{24} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{26} } func (x *Event) GetTimeStamp() *timestamppb.Timestamp { @@ -1908,7 +2041,7 @@ type GetEventsResponse struct { func (x *GetEventsResponse) Reset() { *x = GetEventsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[25] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1921,7 +2054,7 @@ func (x *GetEventsResponse) String() string { func (*GetEventsResponse) ProtoMessage() {} func (x *GetEventsResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[25] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1934,7 +2067,7 @@ func (x *GetEventsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetEventsResponse.ProtoReflect.Descriptor instead. func (*GetEventsResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{25} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{27} } func (x *GetEventsResponse) GetEvents() []*Event { @@ -1963,7 +2096,7 @@ type EventsQuery_LimitFilter struct { func (x *EventsQuery_LimitFilter) Reset() { *x = EventsQuery_LimitFilter{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[27] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1976,7 +2109,7 @@ func (x *EventsQuery_LimitFilter) String() string { func (*EventsQuery_LimitFilter) ProtoMessage() {} func (x *EventsQuery_LimitFilter) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[27] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1989,7 +2122,7 @@ func (x *EventsQuery_LimitFilter) ProtoReflect() protoreflect.Message { // Deprecated: Use EventsQuery_LimitFilter.ProtoReflect.Descriptor instead. func (*EventsQuery_LimitFilter) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{21, 0} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{23, 0} } func (x *EventsQuery_LimitFilter) GetLimit() int32 { @@ -2011,7 +2144,7 @@ type EventsQuery_LogLevelFilter struct { func (x *EventsQuery_LogLevelFilter) Reset() { *x = EventsQuery_LogLevelFilter{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[28] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2024,7 +2157,7 @@ func (x *EventsQuery_LogLevelFilter) String() string { func (*EventsQuery_LogLevelFilter) ProtoMessage() {} func (x *EventsQuery_LogLevelFilter) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[28] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2037,7 +2170,7 @@ func (x *EventsQuery_LogLevelFilter) ProtoReflect() protoreflect.Message { // Deprecated: Use EventsQuery_LogLevelFilter.ProtoReflect.Descriptor instead. func (*EventsQuery_LogLevelFilter) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{21, 1} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{23, 1} } func (x *EventsQuery_LogLevelFilter) GetLogLevel() LogLevel { @@ -2059,7 +2192,7 @@ type EventsQuery_DeploymentFilter struct { func (x *EventsQuery_DeploymentFilter) Reset() { *x = EventsQuery_DeploymentFilter{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[29] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2072,7 +2205,7 @@ func (x *EventsQuery_DeploymentFilter) String() string { func (*EventsQuery_DeploymentFilter) ProtoMessage() {} func (x *EventsQuery_DeploymentFilter) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[29] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2085,7 +2218,7 @@ func (x *EventsQuery_DeploymentFilter) ProtoReflect() protoreflect.Message { // Deprecated: Use EventsQuery_DeploymentFilter.ProtoReflect.Descriptor instead. func (*EventsQuery_DeploymentFilter) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{21, 2} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{23, 2} } func (x *EventsQuery_DeploymentFilter) GetDeployments() []string { @@ -2107,7 +2240,7 @@ type EventsQuery_RequestFilter struct { func (x *EventsQuery_RequestFilter) Reset() { *x = EventsQuery_RequestFilter{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[30] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2120,7 +2253,7 @@ func (x *EventsQuery_RequestFilter) String() string { func (*EventsQuery_RequestFilter) ProtoMessage() {} func (x *EventsQuery_RequestFilter) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[30] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2133,7 +2266,7 @@ func (x *EventsQuery_RequestFilter) ProtoReflect() protoreflect.Message { // Deprecated: Use EventsQuery_RequestFilter.ProtoReflect.Descriptor instead. func (*EventsQuery_RequestFilter) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{21, 3} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{23, 3} } func (x *EventsQuery_RequestFilter) GetRequests() []string { @@ -2155,7 +2288,7 @@ type EventsQuery_EventTypeFilter struct { func (x *EventsQuery_EventTypeFilter) Reset() { *x = EventsQuery_EventTypeFilter{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[31] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2168,7 +2301,7 @@ func (x *EventsQuery_EventTypeFilter) String() string { func (*EventsQuery_EventTypeFilter) ProtoMessage() {} func (x *EventsQuery_EventTypeFilter) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[31] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2181,7 +2314,7 @@ func (x *EventsQuery_EventTypeFilter) ProtoReflect() protoreflect.Message { // Deprecated: Use EventsQuery_EventTypeFilter.ProtoReflect.Descriptor instead. func (*EventsQuery_EventTypeFilter) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{21, 4} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{23, 4} } func (x *EventsQuery_EventTypeFilter) GetEventTypes() []EventType { @@ -2206,7 +2339,7 @@ type EventsQuery_TimeFilter struct { func (x *EventsQuery_TimeFilter) Reset() { *x = EventsQuery_TimeFilter{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[32] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2219,7 +2352,7 @@ func (x *EventsQuery_TimeFilter) String() string { func (*EventsQuery_TimeFilter) ProtoMessage() {} func (x *EventsQuery_TimeFilter) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[32] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2232,7 +2365,7 @@ func (x *EventsQuery_TimeFilter) ProtoReflect() protoreflect.Message { // Deprecated: Use EventsQuery_TimeFilter.ProtoReflect.Descriptor instead. func (*EventsQuery_TimeFilter) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{21, 5} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{23, 5} } func (x *EventsQuery_TimeFilter) GetOlderThan() *timestamppb.Timestamp { @@ -2264,7 +2397,7 @@ type EventsQuery_IDFilter struct { func (x *EventsQuery_IDFilter) Reset() { *x = EventsQuery_IDFilter{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[33] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2277,7 +2410,7 @@ func (x *EventsQuery_IDFilter) String() string { func (*EventsQuery_IDFilter) ProtoMessage() {} func (x *EventsQuery_IDFilter) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[33] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2290,7 +2423,7 @@ func (x *EventsQuery_IDFilter) ProtoReflect() protoreflect.Message { // Deprecated: Use EventsQuery_IDFilter.ProtoReflect.Descriptor instead. func (*EventsQuery_IDFilter) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{21, 6} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{23, 6} } func (x *EventsQuery_IDFilter) GetLowerThan() int64 { @@ -2321,7 +2454,7 @@ type EventsQuery_CallFilter struct { func (x *EventsQuery_CallFilter) Reset() { *x = EventsQuery_CallFilter{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[34] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2334,7 +2467,7 @@ func (x *EventsQuery_CallFilter) String() string { func (*EventsQuery_CallFilter) ProtoMessage() {} func (x *EventsQuery_CallFilter) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[34] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2347,7 +2480,7 @@ func (x *EventsQuery_CallFilter) ProtoReflect() protoreflect.Message { // Deprecated: Use EventsQuery_CallFilter.ProtoReflect.Descriptor instead. func (*EventsQuery_CallFilter) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{21, 7} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{23, 7} } func (x *EventsQuery_CallFilter) GetDestModule() string { @@ -2383,7 +2516,7 @@ type EventsQuery_ModuleFilter struct { func (x *EventsQuery_ModuleFilter) Reset() { *x = EventsQuery_ModuleFilter{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[35] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2396,7 +2529,7 @@ func (x *EventsQuery_ModuleFilter) String() string { func (*EventsQuery_ModuleFilter) ProtoMessage() {} func (x *EventsQuery_ModuleFilter) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[35] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2409,7 +2542,7 @@ func (x *EventsQuery_ModuleFilter) ProtoReflect() protoreflect.Message { // Deprecated: Use EventsQuery_ModuleFilter.ProtoReflect.Descriptor instead. func (*EventsQuery_ModuleFilter) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{21, 8} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{23, 8} } func (x *EventsQuery_ModuleFilter) GetModule() string { @@ -2450,7 +2583,7 @@ type EventsQuery_Filter struct { func (x *EventsQuery_Filter) Reset() { *x = EventsQuery_Filter{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[36] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2463,7 +2596,7 @@ func (x *EventsQuery_Filter) String() string { func (*EventsQuery_Filter) ProtoMessage() {} func (x *EventsQuery_Filter) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[36] + mi := &file_xyz_block_ftl_v1_console_console_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2476,7 +2609,7 @@ func (x *EventsQuery_Filter) ProtoReflect() protoreflect.Message { // Deprecated: Use EventsQuery_Filter.ProtoReflect.Descriptor instead. func (*EventsQuery_Filter) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{21, 9} + return file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP(), []int{23, 9} } func (m *EventsQuery_Filter) GetFilter() isEventsQuery_Filter_Filter { @@ -2806,7 +2939,7 @@ var file_xyz_block_ftl_v1_console_console_proto_rawDesc = []byte{ 0x09, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x2e, 0x0a, 0x13, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6a, 0x73, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x22, 0xd9, 0x02, 0x0a, 0x06, 0x4d, 0x6f, + 0x65, 0x73, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x22, 0xd2, 0x05, 0x0a, 0x06, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, @@ -2828,247 +2961,284 @@ var file_xyz_block_ftl_v1_console_console_proto_rawDesc = []byte{ 0x66, 0x69, 0x67, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x07, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x73, 0x22, 0x29, 0x0a, 0x0d, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, - 0x79, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, - 0x22, 0x4b, 0x0a, 0x08, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x12, 0x3f, 0x0a, 0x06, - 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x78, - 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, - 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x06, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x22, 0x13, 0x0a, - 0x11, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x22, 0x90, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x07, 0x6d, 0x6f, 0x64, - 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x78, 0x79, 0x7a, - 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, - 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x07, 0x6d, 0x6f, - 0x64, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x3e, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, - 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, - 0x6c, 0x65, 0x2e, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x52, 0x08, 0x74, 0x6f, 0x70, - 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x22, 0xe4, 0x0d, 0x0a, 0x0b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x46, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x40, 0x0a, 0x09, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, + 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, + 0x6f, 0x6c, 0x65, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x09, 0x64, 0x61, + 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x12, 0x34, 0x0a, 0x05, 0x65, 0x6e, 0x75, 0x6d, 0x73, + 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, - 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x46, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, 0x14, 0x0a, - 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x69, - 0x6d, 0x69, 0x74, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, - 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, - 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x1a, 0x23, 0x0a, 0x0b, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x46, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x1a, 0x51, 0x0a, 0x0e, 0x4c, - 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x3f, 0x0a, - 0x09, 0x6c, 0x6f, 0x67, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x65, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x12, 0x31, 0x0a, + 0x04, 0x66, 0x73, 0x6d, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, + 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, + 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x46, 0x53, 0x4d, 0x52, 0x04, 0x66, 0x73, 0x6d, 0x73, + 0x12, 0x37, 0x0a, 0x06, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x54, 0x6f, 0x70, 0x69, + 0x63, 0x52, 0x06, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x12, 0x45, 0x0a, 0x0b, 0x74, 0x79, 0x70, + 0x65, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, + 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, + 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x41, 0x6c, + 0x69, 0x61, 0x73, 0x52, 0x0b, 0x74, 0x79, 0x70, 0x65, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, + 0x12, 0x4c, 0x0a, 0x0d, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, + 0x6c, 0x65, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x0d, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x29, + 0x0a, 0x0d, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, + 0x18, 0x0a, 0x07, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x07, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x22, 0x4b, 0x0a, 0x08, 0x54, 0x6f, 0x70, + 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x12, 0x3f, 0x0a, 0x06, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, + 0x2e, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x06, + 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x73, 0x22, 0x13, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x90, 0x01, 0x0a, 0x12, + 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x07, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x4d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x07, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x3e, + 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, - 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x4c, 0x6f, 0x67, 0x4c, - 0x65, 0x76, 0x65, 0x6c, 0x52, 0x08, 0x6c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x1a, 0x34, - 0x0a, 0x10, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x1a, 0x2b, 0x0a, 0x0d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x46, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x73, 0x1a, 0x57, 0x0a, 0x0f, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x46, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x12, 0x44, 0x0a, 0x0b, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x78, 0x79, 0x7a, 0x2e, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, - 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x1a, 0xaa, 0x01, 0x0a, 0x0a, 0x54, - 0x69, 0x6d, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x3e, 0x0a, 0x0a, 0x6f, 0x6c, 0x64, - 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, 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, 0x48, 0x00, 0x52, 0x09, 0x6f, 0x6c, 0x64, - 0x65, 0x72, 0x54, 0x68, 0x61, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x3e, 0x0a, 0x0a, 0x6e, 0x65, 0x77, - 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, 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, 0x48, 0x01, 0x52, 0x09, 0x6e, 0x65, 0x77, - 0x65, 0x72, 0x54, 0x68, 0x61, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x6f, 0x6c, - 0x64, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x6e, 0x65, 0x77, - 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x1a, 0x73, 0x0a, 0x08, 0x49, 0x44, 0x46, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x0a, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x6f, 0x77, 0x65, 0x72, - 0x54, 0x68, 0x61, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x24, 0x0a, 0x0b, 0x68, 0x69, 0x67, 0x68, 0x65, - 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x0a, - 0x68, 0x69, 0x67, 0x68, 0x65, 0x72, 0x54, 0x68, 0x61, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, - 0x0b, 0x5f, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x42, 0x0e, 0x0a, 0x0c, - 0x5f, 0x68, 0x69, 0x67, 0x68, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x1a, 0x99, 0x01, 0x0a, - 0x0a, 0x43, 0x61, 0x6c, 0x6c, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x64, - 0x65, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x64, 0x65, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x09, - 0x64, 0x65, 0x73, 0x74, 0x5f, 0x76, 0x65, 0x72, 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, - 0x00, 0x52, 0x08, 0x64, 0x65, 0x73, 0x74, 0x56, 0x65, 0x72, 0x62, 0x88, 0x01, 0x01, 0x12, 0x28, - 0x0a, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, - 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x88, 0x01, 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x64, 0x65, 0x73, - 0x74, 0x5f, 0x76, 0x65, 0x72, 0x62, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x1a, 0x48, 0x0a, 0x0c, 0x4d, 0x6f, 0x64, 0x75, - 0x6c, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x6f, 0x64, 0x75, - 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, - 0x12, 0x17, 0x0a, 0x04, 0x76, 0x65, 0x72, 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, - 0x52, 0x04, 0x76, 0x65, 0x72, 0x62, 0x88, 0x01, 0x01, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x76, 0x65, - 0x72, 0x62, 0x1a, 0xdb, 0x05, 0x0a, 0x06, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x49, 0x0a, - 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x78, + 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x54, 0x6f, 0x70, 0x6f, + 0x6c, 0x6f, 0x67, 0x79, 0x52, 0x08, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x22, 0x16, + 0x0a, 0x14, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x53, 0x0a, 0x15, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x3a, 0x0a, 0x07, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x20, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x4d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x52, 0x07, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x22, 0xe4, 0x0d, 0x0a, 0x0b, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x46, 0x0a, 0x07, 0x66, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, - 0x00, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x53, 0x0a, 0x09, 0x6c, 0x6f, 0x67, 0x5f, - 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x78, 0x79, - 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, - 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x2e, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x46, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x48, 0x00, 0x52, 0x08, 0x6c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x5a, 0x0a, - 0x0b, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, + 0x65, 0x72, 0x79, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x72, 0x64, + 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, + 0x6f, 0x6c, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x2e, + 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x1a, 0x23, 0x0a, 0x0b, + 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x6c, + 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, + 0x74, 0x1a, 0x51, 0x0a, 0x0e, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x46, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x12, 0x3f, 0x0a, 0x09, 0x6c, 0x6f, 0x67, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, + 0x65, 0x2e, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x08, 0x6c, 0x6f, 0x67, 0x4c, + 0x65, 0x76, 0x65, 0x6c, 0x1a, 0x34, 0x0a, 0x10, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x70, 0x6c, + 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x64, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x1a, 0x2b, 0x0a, 0x0d, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x1a, 0x57, 0x0a, 0x0f, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x54, 0x79, 0x70, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x44, 0x0a, 0x0b, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0e, 0x32, + 0x23, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, + 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, + 0x1a, 0xaa, 0x01, 0x0a, 0x0a, 0x54, 0x69, 0x6d, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, + 0x3e, 0x0a, 0x0a, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, 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, 0x48, + 0x00, 0x52, 0x09, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x54, 0x68, 0x61, 0x6e, 0x88, 0x01, 0x01, 0x12, + 0x3e, 0x0a, 0x0a, 0x6e, 0x65, 0x77, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, 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, 0x48, + 0x01, 0x52, 0x09, 0x6e, 0x65, 0x77, 0x65, 0x72, 0x54, 0x68, 0x61, 0x6e, 0x88, 0x01, 0x01, 0x42, + 0x0d, 0x0a, 0x0b, 0x5f, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x42, 0x0d, + 0x0a, 0x0b, 0x5f, 0x6e, 0x65, 0x77, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x1a, 0x73, 0x0a, + 0x08, 0x49, 0x44, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x0a, 0x6c, 0x6f, 0x77, + 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, + 0x09, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x54, 0x68, 0x61, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x24, 0x0a, + 0x0b, 0x68, 0x69, 0x67, 0x68, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x61, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x03, 0x48, 0x01, 0x52, 0x0a, 0x68, 0x69, 0x67, 0x68, 0x65, 0x72, 0x54, 0x68, 0x61, 0x6e, + 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x5f, 0x74, 0x68, + 0x61, 0x6e, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x68, 0x69, 0x67, 0x68, 0x65, 0x72, 0x5f, 0x74, 0x68, + 0x61, 0x6e, 0x1a, 0x99, 0x01, 0x0a, 0x0a, 0x43, 0x61, 0x6c, 0x6c, 0x46, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x09, 0x64, 0x65, 0x73, 0x74, 0x5f, 0x76, 0x65, 0x72, 0x62, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x64, 0x65, 0x73, 0x74, 0x56, 0x65, 0x72, + 0x62, 0x88, 0x01, 0x01, 0x12, 0x28, 0x0a, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0c, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x88, 0x01, 0x01, 0x42, 0x0c, + 0x0a, 0x0a, 0x5f, 0x64, 0x65, 0x73, 0x74, 0x5f, 0x76, 0x65, 0x72, 0x62, 0x42, 0x10, 0x0a, 0x0e, + 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x1a, 0x48, + 0x0a, 0x0c, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x16, + 0x0a, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x17, 0x0a, 0x04, 0x76, 0x65, 0x72, 0x62, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x76, 0x65, 0x72, 0x62, 0x88, 0x01, 0x01, 0x42, + 0x07, 0x0a, 0x05, 0x5f, 0x76, 0x65, 0x72, 0x62, 0x1a, 0xdb, 0x05, 0x0a, 0x06, 0x46, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x12, 0x49, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x51, 0x0a, 0x08, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x78, 0x79, - 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, - 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x58, 0x0a, 0x0b, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x35, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, + 0x65, 0x6e, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x46, + 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x53, + 0x0a, 0x09, 0x6c, 0x6f, 0x67, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x34, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, - 0x70, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0a, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x46, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x40, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x78, 0x79, 0x7a, + 0x6e, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, + 0x6c, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x08, 0x6c, 0x6f, 0x67, 0x4c, 0x65, + 0x76, 0x65, 0x6c, 0x12, 0x5a, 0x0a, 0x0b, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, + 0x6f, 0x6c, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x2e, + 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x48, 0x00, 0x52, 0x0b, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, + 0x51, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x33, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, + 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x73, 0x12, 0x58, 0x0a, 0x0b, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, + 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, + 0x6c, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, + 0x52, 0x0a, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x46, 0x0a, 0x04, + 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x2e, 0x49, 0x44, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x46, 0x0a, 0x04, 0x63, 0x61, 0x6c, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, + 0x79, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x04, + 0x74, 0x69, 0x6d, 0x65, 0x12, 0x40, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x49, 0x44, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, + 0x48, 0x00, 0x52, 0x02, 0x69, 0x64, 0x12, 0x46, 0x0a, 0x04, 0x63, 0x61, 0x6c, 0x6c, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x43, 0x61, 0x6c, 0x6c, + 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x04, 0x63, 0x61, 0x6c, 0x6c, 0x12, 0x4c, + 0x0a, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x48, 0x00, 0x52, 0x04, 0x63, 0x61, 0x6c, 0x6c, 0x12, 0x4c, 0x0a, 0x06, 0x6d, 0x6f, 0x64, 0x75, - 0x6c, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, - 0x6f, 0x6c, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x2e, - 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x06, - 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x42, 0x08, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x22, 0x1a, 0x0a, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x53, 0x43, - 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x45, 0x53, 0x43, 0x10, 0x01, 0x22, 0xaf, 0x01, 0x0a, - 0x13, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x47, 0x0a, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0e, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x88, 0x01, 0x01, 0x12, 0x3b, 0x0a, - 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x78, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x46, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x48, 0x00, 0x52, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x42, 0x08, 0x0a, 0x06, + 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x1a, 0x0a, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, + 0x07, 0x0a, 0x03, 0x41, 0x53, 0x43, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x45, 0x53, 0x43, + 0x10, 0x01, 0x22, 0xaf, 0x01, 0x0a, 0x13, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x47, 0x0a, 0x0f, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, + 0x52, 0x0e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, + 0x88, 0x01, 0x01, 0x12, 0x3b, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, + 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x76, 0x61, 0x6c, 0x22, 0x4f, 0x0a, 0x14, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, + 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, - 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x75, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x22, 0x4f, - 0x0a, 0x14, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, - 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, - 0xaf, 0x04, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x74, 0x69, 0x6d, - 0x65, 0x5f, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x53, - 0x74, 0x61, 0x6d, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x36, 0x0a, 0x03, 0x6c, 0x6f, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x22, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, - 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x4c, 0x6f, 0x67, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x03, 0x6c, 0x6f, 0x67, 0x12, 0x39, 0x0a, 0x04, - 0x63, 0x61, 0x6c, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x78, 0x79, 0x7a, - 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, - 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, - 0x00, 0x52, 0x04, 0x63, 0x61, 0x6c, 0x6c, 0x12, 0x61, 0x0a, 0x12, 0x64, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, - 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x44, + 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xaf, 0x04, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, + 0x39, 0x0a, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x09, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x36, 0x0a, 0x03, 0x6c, 0x6f, + 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, + 0x6c, 0x65, 0x2e, 0x4c, 0x6f, 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x03, 0x6c, + 0x6f, 0x67, 0x12, 0x39, 0x0a, 0x04, 0x63, 0x61, 0x6c, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x23, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x43, 0x61, 0x6c, 0x6c, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x04, 0x63, 0x61, 0x6c, 0x6c, 0x12, 0x61, 0x0a, + 0x12, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x78, 0x79, 0x7a, 0x2e, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, + 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x11, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x11, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x61, 0x0a, 0x12, 0x64, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, - 0x65, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x11, 0x64, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x42, 0x0a, - 0x07, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, + 0x12, 0x61, 0x0a, 0x12, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x78, + 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, + 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, + 0x52, 0x11, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x64, 0x12, 0x42, 0x0a, 0x07, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, + 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x07, + 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x55, 0x0a, 0x0e, 0x63, 0x72, 0x6f, 0x6e, 0x5f, + 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, + 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x43, 0x72, 0x6f, 0x6e, 0x53, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, + 0x0d, 0x63, 0x72, 0x6f, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x42, 0x07, + 0x0a, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x74, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, + 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, + 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, + 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x1b, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x88, + 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x2a, 0xc9, 0x01, + 0x0a, 0x09, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x12, 0x45, + 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, + 0x4e, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x4c, 0x4f, 0x47, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x45, 0x56, 0x45, 0x4e, 0x54, + 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x41, 0x4c, 0x4c, 0x10, 0x02, 0x12, 0x21, 0x0a, 0x1d, + 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x44, 0x45, 0x50, 0x4c, 0x4f, + 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0x03, 0x12, + 0x21, 0x0a, 0x1d, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x44, 0x45, + 0x50, 0x4c, 0x4f, 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x44, + 0x10, 0x04, 0x12, 0x16, 0x0a, 0x12, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, + 0x5f, 0x49, 0x4e, 0x47, 0x52, 0x45, 0x53, 0x53, 0x10, 0x05, 0x12, 0x1d, 0x0a, 0x19, 0x45, 0x56, + 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x52, 0x4f, 0x4e, 0x5f, 0x53, 0x43, + 0x48, 0x45, 0x44, 0x55, 0x4c, 0x45, 0x44, 0x10, 0x06, 0x2a, 0x88, 0x01, 0x0a, 0x08, 0x4c, 0x6f, + 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x15, 0x0a, 0x11, 0x4c, 0x4f, 0x47, 0x5f, 0x4c, 0x45, + 0x56, 0x45, 0x4c, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x13, 0x0a, + 0x0f, 0x4c, 0x4f, 0x47, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, + 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x4f, 0x47, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, + 0x44, 0x45, 0x42, 0x55, 0x47, 0x10, 0x05, 0x12, 0x12, 0x0a, 0x0e, 0x4c, 0x4f, 0x47, 0x5f, 0x4c, + 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x09, 0x12, 0x12, 0x0a, 0x0e, 0x4c, + 0x4f, 0x47, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x57, 0x41, 0x52, 0x4e, 0x10, 0x0d, 0x12, + 0x13, 0x0a, 0x0f, 0x4c, 0x4f, 0x47, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x45, 0x52, 0x52, + 0x4f, 0x52, 0x10, 0x11, 0x32, 0x8b, 0x04, 0x0a, 0x0e, 0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x4a, 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, + 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, + 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, - 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, - 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x07, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, - 0x73, 0x12, 0x55, 0x0a, 0x0e, 0x63, 0x72, 0x6f, 0x6e, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, - 0x6c, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, - 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x43, 0x72, 0x6f, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, - 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x63, 0x72, 0x6f, 0x6e, 0x53, - 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x6e, 0x74, 0x72, - 0x79, 0x22, 0x74, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, - 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, - 0x1b, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, - 0x00, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, - 0x5f, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x2a, 0xc9, 0x01, 0x0a, 0x09, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x12, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x12, 0x0a, - 0x0e, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4c, 0x4f, 0x47, 0x10, - 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, - 0x43, 0x41, 0x4c, 0x4c, 0x10, 0x02, 0x12, 0x21, 0x0a, 0x1d, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, - 0x54, 0x59, 0x50, 0x45, 0x5f, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, - 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0x03, 0x12, 0x21, 0x0a, 0x1d, 0x45, 0x56, 0x45, - 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, 0x4d, 0x45, - 0x4e, 0x54, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, 0x16, 0x0a, 0x12, - 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x47, 0x52, 0x45, - 0x53, 0x53, 0x10, 0x05, 0x12, 0x1d, 0x0a, 0x19, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, - 0x50, 0x45, 0x5f, 0x43, 0x52, 0x4f, 0x4e, 0x5f, 0x53, 0x43, 0x48, 0x45, 0x44, 0x55, 0x4c, 0x45, - 0x44, 0x10, 0x06, 0x2a, 0x88, 0x01, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, - 0x12, 0x15, 0x0a, 0x11, 0x4c, 0x4f, 0x47, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x55, 0x4e, - 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x4f, 0x47, 0x5f, 0x4c, - 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x45, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, - 0x4c, 0x4f, 0x47, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x44, 0x45, 0x42, 0x55, 0x47, 0x10, - 0x05, 0x12, 0x12, 0x0a, 0x0e, 0x4c, 0x4f, 0x47, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x49, - 0x4e, 0x46, 0x4f, 0x10, 0x09, 0x12, 0x12, 0x0a, 0x0e, 0x4c, 0x4f, 0x47, 0x5f, 0x4c, 0x45, 0x56, - 0x45, 0x4c, 0x5f, 0x57, 0x41, 0x52, 0x4e, 0x10, 0x0d, 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x4f, 0x47, - 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x11, 0x32, 0x97, - 0x03, 0x0a, 0x0e, 0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x12, 0x4a, 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, - 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x67, 0x0a, - 0x0a, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x2b, 0x2e, 0x78, 0x79, - 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, - 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, - 0x6f, 0x6c, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6f, 0x0a, 0x0c, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x2d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, - 0x65, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, + 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, + 0x90, 0x02, 0x01, 0x12, 0x67, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, + 0x73, 0x12, 0x2b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, + 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x47, 0x65, 0x74, + 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, + 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, + 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x72, 0x0a, 0x0d, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x2e, 0x2e, + 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, + 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, + 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, + 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, + 0x12, 0x6f, 0x0a, 0x0c, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, + 0x12, 0x2d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x53, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, + 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, + 0x01, 0x12, 0x5f, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, + 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, + 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x1a, 0x2b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, - 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x5f, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x51, 0x75, 0x65, 0x72, 0x79, 0x1a, 0x2b, 0x2e, 0x78, 0x79, - 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x63, - 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x50, 0x50, 0x01, 0x5a, 0x4c, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x54, 0x42, 0x44, 0x35, 0x34, 0x35, 0x36, - 0x36, 0x39, 0x37, 0x35, 0x2f, 0x66, 0x74, 0x6c, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, - 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2f, 0x78, 0x79, 0x7a, 0x2f, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x2f, 0x66, 0x74, 0x6c, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, - 0x3b, 0x70, 0x62, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x2e, 0x47, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x42, 0x50, 0x50, 0x01, 0x5a, 0x4c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x54, 0x42, 0x44, 0x35, 0x34, 0x35, 0x36, 0x36, 0x39, 0x37, 0x35, 0x2f, 0x66, + 0x74, 0x6c, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x73, 0x2f, 0x78, 0x79, 0x7a, 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x66, 0x74, 0x6c, 0x2f, + 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x3b, 0x70, 0x62, 0x63, 0x6f, 0x6e, + 0x73, 0x6f, 0x6c, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3084,7 +3254,7 @@ func file_xyz_block_ftl_v1_console_console_proto_rawDescGZIP() []byte { } var file_xyz_block_ftl_v1_console_console_proto_enumTypes = make([]protoimpl.EnumInfo, 3) -var file_xyz_block_ftl_v1_console_console_proto_msgTypes = make([]protoimpl.MessageInfo, 37) +var file_xyz_block_ftl_v1_console_console_proto_msgTypes = make([]protoimpl.MessageInfo, 39) var file_xyz_block_ftl_v1_console_console_proto_goTypes = []any{ (EventType)(0), // 0: xyz.block.ftl.v1.console.EventType (LogLevel)(0), // 1: xyz.block.ftl.v1.console.LogLevel @@ -3110,108 +3280,119 @@ var file_xyz_block_ftl_v1_console_console_proto_goTypes = []any{ (*Topology)(nil), // 21: xyz.block.ftl.v1.console.Topology (*GetModulesRequest)(nil), // 22: xyz.block.ftl.v1.console.GetModulesRequest (*GetModulesResponse)(nil), // 23: xyz.block.ftl.v1.console.GetModulesResponse - (*EventsQuery)(nil), // 24: xyz.block.ftl.v1.console.EventsQuery - (*StreamEventsRequest)(nil), // 25: xyz.block.ftl.v1.console.StreamEventsRequest - (*StreamEventsResponse)(nil), // 26: xyz.block.ftl.v1.console.StreamEventsResponse - (*Event)(nil), // 27: xyz.block.ftl.v1.console.Event - (*GetEventsResponse)(nil), // 28: xyz.block.ftl.v1.console.GetEventsResponse - nil, // 29: xyz.block.ftl.v1.console.LogEvent.AttributesEntry - (*EventsQuery_LimitFilter)(nil), // 30: xyz.block.ftl.v1.console.EventsQuery.LimitFilter - (*EventsQuery_LogLevelFilter)(nil), // 31: xyz.block.ftl.v1.console.EventsQuery.LogLevelFilter - (*EventsQuery_DeploymentFilter)(nil), // 32: xyz.block.ftl.v1.console.EventsQuery.DeploymentFilter - (*EventsQuery_RequestFilter)(nil), // 33: xyz.block.ftl.v1.console.EventsQuery.RequestFilter - (*EventsQuery_EventTypeFilter)(nil), // 34: xyz.block.ftl.v1.console.EventsQuery.EventTypeFilter - (*EventsQuery_TimeFilter)(nil), // 35: xyz.block.ftl.v1.console.EventsQuery.TimeFilter - (*EventsQuery_IDFilter)(nil), // 36: xyz.block.ftl.v1.console.EventsQuery.IDFilter - (*EventsQuery_CallFilter)(nil), // 37: xyz.block.ftl.v1.console.EventsQuery.CallFilter - (*EventsQuery_ModuleFilter)(nil), // 38: xyz.block.ftl.v1.console.EventsQuery.ModuleFilter - (*EventsQuery_Filter)(nil), // 39: xyz.block.ftl.v1.console.EventsQuery.Filter - (*timestamppb.Timestamp)(nil), // 40: google.protobuf.Timestamp - (*schema.Ref)(nil), // 41: xyz.block.ftl.v1.schema.Ref - (*durationpb.Duration)(nil), // 42: google.protobuf.Duration - (*schema.Config)(nil), // 43: xyz.block.ftl.v1.schema.Config - (*schema.Data)(nil), // 44: xyz.block.ftl.v1.schema.Data - (*schema.Database)(nil), // 45: xyz.block.ftl.v1.schema.Database - (*schema.Enum)(nil), // 46: xyz.block.ftl.v1.schema.Enum - (*schema.FSM)(nil), // 47: xyz.block.ftl.v1.schema.FSM - (*schema.Topic)(nil), // 48: xyz.block.ftl.v1.schema.Topic - (*schema.TypeAlias)(nil), // 49: xyz.block.ftl.v1.schema.TypeAlias - (*schema.Secret)(nil), // 50: xyz.block.ftl.v1.schema.Secret - (*schema.Subscription)(nil), // 51: xyz.block.ftl.v1.schema.Subscription - (*schema.Verb)(nil), // 52: xyz.block.ftl.v1.schema.Verb - (*v1.PingRequest)(nil), // 53: xyz.block.ftl.v1.PingRequest - (*v1.PingResponse)(nil), // 54: xyz.block.ftl.v1.PingResponse + (*StreamModulesRequest)(nil), // 24: xyz.block.ftl.v1.console.StreamModulesRequest + (*StreamModulesResponse)(nil), // 25: xyz.block.ftl.v1.console.StreamModulesResponse + (*EventsQuery)(nil), // 26: xyz.block.ftl.v1.console.EventsQuery + (*StreamEventsRequest)(nil), // 27: xyz.block.ftl.v1.console.StreamEventsRequest + (*StreamEventsResponse)(nil), // 28: xyz.block.ftl.v1.console.StreamEventsResponse + (*Event)(nil), // 29: xyz.block.ftl.v1.console.Event + (*GetEventsResponse)(nil), // 30: xyz.block.ftl.v1.console.GetEventsResponse + nil, // 31: xyz.block.ftl.v1.console.LogEvent.AttributesEntry + (*EventsQuery_LimitFilter)(nil), // 32: xyz.block.ftl.v1.console.EventsQuery.LimitFilter + (*EventsQuery_LogLevelFilter)(nil), // 33: xyz.block.ftl.v1.console.EventsQuery.LogLevelFilter + (*EventsQuery_DeploymentFilter)(nil), // 34: xyz.block.ftl.v1.console.EventsQuery.DeploymentFilter + (*EventsQuery_RequestFilter)(nil), // 35: xyz.block.ftl.v1.console.EventsQuery.RequestFilter + (*EventsQuery_EventTypeFilter)(nil), // 36: xyz.block.ftl.v1.console.EventsQuery.EventTypeFilter + (*EventsQuery_TimeFilter)(nil), // 37: xyz.block.ftl.v1.console.EventsQuery.TimeFilter + (*EventsQuery_IDFilter)(nil), // 38: xyz.block.ftl.v1.console.EventsQuery.IDFilter + (*EventsQuery_CallFilter)(nil), // 39: xyz.block.ftl.v1.console.EventsQuery.CallFilter + (*EventsQuery_ModuleFilter)(nil), // 40: xyz.block.ftl.v1.console.EventsQuery.ModuleFilter + (*EventsQuery_Filter)(nil), // 41: xyz.block.ftl.v1.console.EventsQuery.Filter + (*timestamppb.Timestamp)(nil), // 42: google.protobuf.Timestamp + (*schema.Ref)(nil), // 43: xyz.block.ftl.v1.schema.Ref + (*durationpb.Duration)(nil), // 44: google.protobuf.Duration + (*schema.Config)(nil), // 45: xyz.block.ftl.v1.schema.Config + (*schema.Data)(nil), // 46: xyz.block.ftl.v1.schema.Data + (*schema.Database)(nil), // 47: xyz.block.ftl.v1.schema.Database + (*schema.Enum)(nil), // 48: xyz.block.ftl.v1.schema.Enum + (*schema.FSM)(nil), // 49: xyz.block.ftl.v1.schema.FSM + (*schema.Topic)(nil), // 50: xyz.block.ftl.v1.schema.Topic + (*schema.TypeAlias)(nil), // 51: xyz.block.ftl.v1.schema.TypeAlias + (*schema.Secret)(nil), // 52: xyz.block.ftl.v1.schema.Secret + (*schema.Subscription)(nil), // 53: xyz.block.ftl.v1.schema.Subscription + (*schema.Verb)(nil), // 54: xyz.block.ftl.v1.schema.Verb + (*v1.PingRequest)(nil), // 55: xyz.block.ftl.v1.PingRequest + (*v1.PingResponse)(nil), // 56: xyz.block.ftl.v1.PingResponse } var file_xyz_block_ftl_v1_console_console_proto_depIdxs = []int32{ - 40, // 0: xyz.block.ftl.v1.console.LogEvent.time_stamp:type_name -> google.protobuf.Timestamp - 29, // 1: xyz.block.ftl.v1.console.LogEvent.attributes:type_name -> xyz.block.ftl.v1.console.LogEvent.AttributesEntry - 40, // 2: xyz.block.ftl.v1.console.CallEvent.time_stamp:type_name -> google.protobuf.Timestamp - 41, // 3: xyz.block.ftl.v1.console.CallEvent.source_verb_ref:type_name -> xyz.block.ftl.v1.schema.Ref - 41, // 4: xyz.block.ftl.v1.console.CallEvent.destination_verb_ref:type_name -> xyz.block.ftl.v1.schema.Ref - 42, // 5: xyz.block.ftl.v1.console.CallEvent.duration:type_name -> google.protobuf.Duration - 41, // 6: xyz.block.ftl.v1.console.IngressEvent.verb_ref:type_name -> xyz.block.ftl.v1.schema.Ref - 40, // 7: xyz.block.ftl.v1.console.IngressEvent.time_stamp:type_name -> google.protobuf.Timestamp - 42, // 8: xyz.block.ftl.v1.console.IngressEvent.duration:type_name -> google.protobuf.Duration - 41, // 9: xyz.block.ftl.v1.console.CronScheduledEvent.verb_ref:type_name -> xyz.block.ftl.v1.schema.Ref - 40, // 10: xyz.block.ftl.v1.console.CronScheduledEvent.time_stamp:type_name -> google.protobuf.Timestamp - 42, // 11: xyz.block.ftl.v1.console.CronScheduledEvent.duration:type_name -> google.protobuf.Duration - 40, // 12: xyz.block.ftl.v1.console.CronScheduledEvent.scheduled_at:type_name -> google.protobuf.Timestamp - 43, // 13: xyz.block.ftl.v1.console.Config.config:type_name -> xyz.block.ftl.v1.schema.Config - 44, // 14: xyz.block.ftl.v1.console.Data.data:type_name -> xyz.block.ftl.v1.schema.Data - 45, // 15: xyz.block.ftl.v1.console.Database.database:type_name -> xyz.block.ftl.v1.schema.Database - 46, // 16: xyz.block.ftl.v1.console.Enum.enum:type_name -> xyz.block.ftl.v1.schema.Enum - 47, // 17: xyz.block.ftl.v1.console.FSM.fsm:type_name -> xyz.block.ftl.v1.schema.FSM - 48, // 18: xyz.block.ftl.v1.console.Topic.topic:type_name -> xyz.block.ftl.v1.schema.Topic - 49, // 19: xyz.block.ftl.v1.console.TypeAlias.typealias:type_name -> xyz.block.ftl.v1.schema.TypeAlias - 50, // 20: xyz.block.ftl.v1.console.Secret.secret:type_name -> xyz.block.ftl.v1.schema.Secret - 51, // 21: xyz.block.ftl.v1.console.Subscription.subscription:type_name -> xyz.block.ftl.v1.schema.Subscription - 52, // 22: xyz.block.ftl.v1.console.Verb.verb:type_name -> xyz.block.ftl.v1.schema.Verb + 42, // 0: xyz.block.ftl.v1.console.LogEvent.time_stamp:type_name -> google.protobuf.Timestamp + 31, // 1: xyz.block.ftl.v1.console.LogEvent.attributes:type_name -> xyz.block.ftl.v1.console.LogEvent.AttributesEntry + 42, // 2: xyz.block.ftl.v1.console.CallEvent.time_stamp:type_name -> google.protobuf.Timestamp + 43, // 3: xyz.block.ftl.v1.console.CallEvent.source_verb_ref:type_name -> xyz.block.ftl.v1.schema.Ref + 43, // 4: xyz.block.ftl.v1.console.CallEvent.destination_verb_ref:type_name -> xyz.block.ftl.v1.schema.Ref + 44, // 5: xyz.block.ftl.v1.console.CallEvent.duration:type_name -> google.protobuf.Duration + 43, // 6: xyz.block.ftl.v1.console.IngressEvent.verb_ref:type_name -> xyz.block.ftl.v1.schema.Ref + 42, // 7: xyz.block.ftl.v1.console.IngressEvent.time_stamp:type_name -> google.protobuf.Timestamp + 44, // 8: xyz.block.ftl.v1.console.IngressEvent.duration:type_name -> google.protobuf.Duration + 43, // 9: xyz.block.ftl.v1.console.CronScheduledEvent.verb_ref:type_name -> xyz.block.ftl.v1.schema.Ref + 42, // 10: xyz.block.ftl.v1.console.CronScheduledEvent.time_stamp:type_name -> google.protobuf.Timestamp + 44, // 11: xyz.block.ftl.v1.console.CronScheduledEvent.duration:type_name -> google.protobuf.Duration + 42, // 12: xyz.block.ftl.v1.console.CronScheduledEvent.scheduled_at:type_name -> google.protobuf.Timestamp + 45, // 13: xyz.block.ftl.v1.console.Config.config:type_name -> xyz.block.ftl.v1.schema.Config + 46, // 14: xyz.block.ftl.v1.console.Data.data:type_name -> xyz.block.ftl.v1.schema.Data + 47, // 15: xyz.block.ftl.v1.console.Database.database:type_name -> xyz.block.ftl.v1.schema.Database + 48, // 16: xyz.block.ftl.v1.console.Enum.enum:type_name -> xyz.block.ftl.v1.schema.Enum + 49, // 17: xyz.block.ftl.v1.console.FSM.fsm:type_name -> xyz.block.ftl.v1.schema.FSM + 50, // 18: xyz.block.ftl.v1.console.Topic.topic:type_name -> xyz.block.ftl.v1.schema.Topic + 51, // 19: xyz.block.ftl.v1.console.TypeAlias.typealias:type_name -> xyz.block.ftl.v1.schema.TypeAlias + 52, // 20: xyz.block.ftl.v1.console.Secret.secret:type_name -> xyz.block.ftl.v1.schema.Secret + 53, // 21: xyz.block.ftl.v1.console.Subscription.subscription:type_name -> xyz.block.ftl.v1.schema.Subscription + 54, // 22: xyz.block.ftl.v1.console.Verb.verb:type_name -> xyz.block.ftl.v1.schema.Verb 18, // 23: xyz.block.ftl.v1.console.Module.verbs:type_name -> xyz.block.ftl.v1.console.Verb 10, // 24: xyz.block.ftl.v1.console.Module.data:type_name -> xyz.block.ftl.v1.console.Data 16, // 25: xyz.block.ftl.v1.console.Module.secrets:type_name -> xyz.block.ftl.v1.console.Secret 9, // 26: xyz.block.ftl.v1.console.Module.configs:type_name -> xyz.block.ftl.v1.console.Config - 20, // 27: xyz.block.ftl.v1.console.Topology.levels:type_name -> xyz.block.ftl.v1.console.TopologyGroup - 19, // 28: xyz.block.ftl.v1.console.GetModulesResponse.modules:type_name -> xyz.block.ftl.v1.console.Module - 21, // 29: xyz.block.ftl.v1.console.GetModulesResponse.topology:type_name -> xyz.block.ftl.v1.console.Topology - 39, // 30: xyz.block.ftl.v1.console.EventsQuery.filters:type_name -> xyz.block.ftl.v1.console.EventsQuery.Filter - 2, // 31: xyz.block.ftl.v1.console.EventsQuery.order:type_name -> xyz.block.ftl.v1.console.EventsQuery.Order - 42, // 32: xyz.block.ftl.v1.console.StreamEventsRequest.update_interval:type_name -> google.protobuf.Duration - 24, // 33: xyz.block.ftl.v1.console.StreamEventsRequest.query:type_name -> xyz.block.ftl.v1.console.EventsQuery - 27, // 34: xyz.block.ftl.v1.console.StreamEventsResponse.events:type_name -> xyz.block.ftl.v1.console.Event - 40, // 35: xyz.block.ftl.v1.console.Event.time_stamp:type_name -> google.protobuf.Timestamp - 3, // 36: xyz.block.ftl.v1.console.Event.log:type_name -> xyz.block.ftl.v1.console.LogEvent - 4, // 37: xyz.block.ftl.v1.console.Event.call:type_name -> xyz.block.ftl.v1.console.CallEvent - 5, // 38: xyz.block.ftl.v1.console.Event.deployment_created:type_name -> xyz.block.ftl.v1.console.DeploymentCreatedEvent - 6, // 39: xyz.block.ftl.v1.console.Event.deployment_updated:type_name -> xyz.block.ftl.v1.console.DeploymentUpdatedEvent - 7, // 40: xyz.block.ftl.v1.console.Event.ingress:type_name -> xyz.block.ftl.v1.console.IngressEvent - 8, // 41: xyz.block.ftl.v1.console.Event.cron_scheduled:type_name -> xyz.block.ftl.v1.console.CronScheduledEvent - 27, // 42: xyz.block.ftl.v1.console.GetEventsResponse.events:type_name -> xyz.block.ftl.v1.console.Event - 1, // 43: xyz.block.ftl.v1.console.EventsQuery.LogLevelFilter.log_level:type_name -> xyz.block.ftl.v1.console.LogLevel - 0, // 44: xyz.block.ftl.v1.console.EventsQuery.EventTypeFilter.event_types:type_name -> xyz.block.ftl.v1.console.EventType - 40, // 45: xyz.block.ftl.v1.console.EventsQuery.TimeFilter.older_than:type_name -> google.protobuf.Timestamp - 40, // 46: xyz.block.ftl.v1.console.EventsQuery.TimeFilter.newer_than:type_name -> google.protobuf.Timestamp - 30, // 47: xyz.block.ftl.v1.console.EventsQuery.Filter.limit:type_name -> xyz.block.ftl.v1.console.EventsQuery.LimitFilter - 31, // 48: xyz.block.ftl.v1.console.EventsQuery.Filter.log_level:type_name -> xyz.block.ftl.v1.console.EventsQuery.LogLevelFilter - 32, // 49: xyz.block.ftl.v1.console.EventsQuery.Filter.deployments:type_name -> xyz.block.ftl.v1.console.EventsQuery.DeploymentFilter - 33, // 50: xyz.block.ftl.v1.console.EventsQuery.Filter.requests:type_name -> xyz.block.ftl.v1.console.EventsQuery.RequestFilter - 34, // 51: xyz.block.ftl.v1.console.EventsQuery.Filter.event_types:type_name -> xyz.block.ftl.v1.console.EventsQuery.EventTypeFilter - 35, // 52: xyz.block.ftl.v1.console.EventsQuery.Filter.time:type_name -> xyz.block.ftl.v1.console.EventsQuery.TimeFilter - 36, // 53: xyz.block.ftl.v1.console.EventsQuery.Filter.id:type_name -> xyz.block.ftl.v1.console.EventsQuery.IDFilter - 37, // 54: xyz.block.ftl.v1.console.EventsQuery.Filter.call:type_name -> xyz.block.ftl.v1.console.EventsQuery.CallFilter - 38, // 55: xyz.block.ftl.v1.console.EventsQuery.Filter.module:type_name -> xyz.block.ftl.v1.console.EventsQuery.ModuleFilter - 53, // 56: xyz.block.ftl.v1.console.ConsoleService.Ping:input_type -> xyz.block.ftl.v1.PingRequest - 22, // 57: xyz.block.ftl.v1.console.ConsoleService.GetModules:input_type -> xyz.block.ftl.v1.console.GetModulesRequest - 25, // 58: xyz.block.ftl.v1.console.ConsoleService.StreamEvents:input_type -> xyz.block.ftl.v1.console.StreamEventsRequest - 24, // 59: xyz.block.ftl.v1.console.ConsoleService.GetEvents:input_type -> xyz.block.ftl.v1.console.EventsQuery - 54, // 60: xyz.block.ftl.v1.console.ConsoleService.Ping:output_type -> xyz.block.ftl.v1.PingResponse - 23, // 61: xyz.block.ftl.v1.console.ConsoleService.GetModules:output_type -> xyz.block.ftl.v1.console.GetModulesResponse - 26, // 62: xyz.block.ftl.v1.console.ConsoleService.StreamEvents:output_type -> xyz.block.ftl.v1.console.StreamEventsResponse - 28, // 63: xyz.block.ftl.v1.console.ConsoleService.GetEvents:output_type -> xyz.block.ftl.v1.console.GetEventsResponse - 60, // [60:64] is the sub-list for method output_type - 56, // [56:60] is the sub-list for method input_type - 56, // [56:56] is the sub-list for extension type_name - 56, // [56:56] is the sub-list for extension extendee - 0, // [0:56] is the sub-list for field type_name + 11, // 27: xyz.block.ftl.v1.console.Module.databases:type_name -> xyz.block.ftl.v1.console.Database + 12, // 28: xyz.block.ftl.v1.console.Module.enums:type_name -> xyz.block.ftl.v1.console.Enum + 13, // 29: xyz.block.ftl.v1.console.Module.fsms:type_name -> xyz.block.ftl.v1.console.FSM + 14, // 30: xyz.block.ftl.v1.console.Module.topics:type_name -> xyz.block.ftl.v1.console.Topic + 15, // 31: xyz.block.ftl.v1.console.Module.typealiases:type_name -> xyz.block.ftl.v1.console.TypeAlias + 17, // 32: xyz.block.ftl.v1.console.Module.subscriptions:type_name -> xyz.block.ftl.v1.console.Subscription + 20, // 33: xyz.block.ftl.v1.console.Topology.levels:type_name -> xyz.block.ftl.v1.console.TopologyGroup + 19, // 34: xyz.block.ftl.v1.console.GetModulesResponse.modules:type_name -> xyz.block.ftl.v1.console.Module + 21, // 35: xyz.block.ftl.v1.console.GetModulesResponse.topology:type_name -> xyz.block.ftl.v1.console.Topology + 19, // 36: xyz.block.ftl.v1.console.StreamModulesResponse.modules:type_name -> xyz.block.ftl.v1.console.Module + 41, // 37: xyz.block.ftl.v1.console.EventsQuery.filters:type_name -> xyz.block.ftl.v1.console.EventsQuery.Filter + 2, // 38: xyz.block.ftl.v1.console.EventsQuery.order:type_name -> xyz.block.ftl.v1.console.EventsQuery.Order + 44, // 39: xyz.block.ftl.v1.console.StreamEventsRequest.update_interval:type_name -> google.protobuf.Duration + 26, // 40: xyz.block.ftl.v1.console.StreamEventsRequest.query:type_name -> xyz.block.ftl.v1.console.EventsQuery + 29, // 41: xyz.block.ftl.v1.console.StreamEventsResponse.events:type_name -> xyz.block.ftl.v1.console.Event + 42, // 42: xyz.block.ftl.v1.console.Event.time_stamp:type_name -> google.protobuf.Timestamp + 3, // 43: xyz.block.ftl.v1.console.Event.log:type_name -> xyz.block.ftl.v1.console.LogEvent + 4, // 44: xyz.block.ftl.v1.console.Event.call:type_name -> xyz.block.ftl.v1.console.CallEvent + 5, // 45: xyz.block.ftl.v1.console.Event.deployment_created:type_name -> xyz.block.ftl.v1.console.DeploymentCreatedEvent + 6, // 46: xyz.block.ftl.v1.console.Event.deployment_updated:type_name -> xyz.block.ftl.v1.console.DeploymentUpdatedEvent + 7, // 47: xyz.block.ftl.v1.console.Event.ingress:type_name -> xyz.block.ftl.v1.console.IngressEvent + 8, // 48: xyz.block.ftl.v1.console.Event.cron_scheduled:type_name -> xyz.block.ftl.v1.console.CronScheduledEvent + 29, // 49: xyz.block.ftl.v1.console.GetEventsResponse.events:type_name -> xyz.block.ftl.v1.console.Event + 1, // 50: xyz.block.ftl.v1.console.EventsQuery.LogLevelFilter.log_level:type_name -> xyz.block.ftl.v1.console.LogLevel + 0, // 51: xyz.block.ftl.v1.console.EventsQuery.EventTypeFilter.event_types:type_name -> xyz.block.ftl.v1.console.EventType + 42, // 52: xyz.block.ftl.v1.console.EventsQuery.TimeFilter.older_than:type_name -> google.protobuf.Timestamp + 42, // 53: xyz.block.ftl.v1.console.EventsQuery.TimeFilter.newer_than:type_name -> google.protobuf.Timestamp + 32, // 54: xyz.block.ftl.v1.console.EventsQuery.Filter.limit:type_name -> xyz.block.ftl.v1.console.EventsQuery.LimitFilter + 33, // 55: xyz.block.ftl.v1.console.EventsQuery.Filter.log_level:type_name -> xyz.block.ftl.v1.console.EventsQuery.LogLevelFilter + 34, // 56: xyz.block.ftl.v1.console.EventsQuery.Filter.deployments:type_name -> xyz.block.ftl.v1.console.EventsQuery.DeploymentFilter + 35, // 57: xyz.block.ftl.v1.console.EventsQuery.Filter.requests:type_name -> xyz.block.ftl.v1.console.EventsQuery.RequestFilter + 36, // 58: xyz.block.ftl.v1.console.EventsQuery.Filter.event_types:type_name -> xyz.block.ftl.v1.console.EventsQuery.EventTypeFilter + 37, // 59: xyz.block.ftl.v1.console.EventsQuery.Filter.time:type_name -> xyz.block.ftl.v1.console.EventsQuery.TimeFilter + 38, // 60: xyz.block.ftl.v1.console.EventsQuery.Filter.id:type_name -> xyz.block.ftl.v1.console.EventsQuery.IDFilter + 39, // 61: xyz.block.ftl.v1.console.EventsQuery.Filter.call:type_name -> xyz.block.ftl.v1.console.EventsQuery.CallFilter + 40, // 62: xyz.block.ftl.v1.console.EventsQuery.Filter.module:type_name -> xyz.block.ftl.v1.console.EventsQuery.ModuleFilter + 55, // 63: xyz.block.ftl.v1.console.ConsoleService.Ping:input_type -> xyz.block.ftl.v1.PingRequest + 22, // 64: xyz.block.ftl.v1.console.ConsoleService.GetModules:input_type -> xyz.block.ftl.v1.console.GetModulesRequest + 24, // 65: xyz.block.ftl.v1.console.ConsoleService.StreamModules:input_type -> xyz.block.ftl.v1.console.StreamModulesRequest + 27, // 66: xyz.block.ftl.v1.console.ConsoleService.StreamEvents:input_type -> xyz.block.ftl.v1.console.StreamEventsRequest + 26, // 67: xyz.block.ftl.v1.console.ConsoleService.GetEvents:input_type -> xyz.block.ftl.v1.console.EventsQuery + 56, // 68: xyz.block.ftl.v1.console.ConsoleService.Ping:output_type -> xyz.block.ftl.v1.PingResponse + 23, // 69: xyz.block.ftl.v1.console.ConsoleService.GetModules:output_type -> xyz.block.ftl.v1.console.GetModulesResponse + 25, // 70: xyz.block.ftl.v1.console.ConsoleService.StreamModules:output_type -> xyz.block.ftl.v1.console.StreamModulesResponse + 28, // 71: xyz.block.ftl.v1.console.ConsoleService.StreamEvents:output_type -> xyz.block.ftl.v1.console.StreamEventsResponse + 30, // 72: xyz.block.ftl.v1.console.ConsoleService.GetEvents:output_type -> xyz.block.ftl.v1.console.GetEventsResponse + 68, // [68:73] is the sub-list for method output_type + 63, // [63:68] is the sub-list for method input_type + 63, // [63:63] is the sub-list for extension type_name + 63, // [63:63] is the sub-list for extension extendee + 0, // [0:63] is the sub-list for field type_name } func init() { file_xyz_block_ftl_v1_console_console_proto_init() } @@ -3473,7 +3654,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { } } file_xyz_block_ftl_v1_console_console_proto_msgTypes[21].Exporter = func(v any, i int) any { - switch v := v.(*EventsQuery); i { + switch v := v.(*StreamModulesRequest); i { case 0: return &v.state case 1: @@ -3485,7 +3666,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { } } file_xyz_block_ftl_v1_console_console_proto_msgTypes[22].Exporter = func(v any, i int) any { - switch v := v.(*StreamEventsRequest); i { + switch v := v.(*StreamModulesResponse); i { case 0: return &v.state case 1: @@ -3497,7 +3678,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { } } file_xyz_block_ftl_v1_console_console_proto_msgTypes[23].Exporter = func(v any, i int) any { - switch v := v.(*StreamEventsResponse); i { + switch v := v.(*EventsQuery); i { case 0: return &v.state case 1: @@ -3509,7 +3690,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { } } file_xyz_block_ftl_v1_console_console_proto_msgTypes[24].Exporter = func(v any, i int) any { - switch v := v.(*Event); i { + switch v := v.(*StreamEventsRequest); i { case 0: return &v.state case 1: @@ -3521,7 +3702,19 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { } } file_xyz_block_ftl_v1_console_console_proto_msgTypes[25].Exporter = func(v any, i int) any { - switch v := v.(*GetEventsResponse); i { + switch v := v.(*StreamEventsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_xyz_block_ftl_v1_console_console_proto_msgTypes[26].Exporter = func(v any, i int) any { + switch v := v.(*Event); i { case 0: return &v.state case 1: @@ -3533,6 +3726,18 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { } } file_xyz_block_ftl_v1_console_console_proto_msgTypes[27].Exporter = func(v any, i int) any { + switch v := v.(*GetEventsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_xyz_block_ftl_v1_console_console_proto_msgTypes[29].Exporter = func(v any, i int) any { switch v := v.(*EventsQuery_LimitFilter); i { case 0: return &v.state @@ -3544,7 +3749,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { return nil } } - file_xyz_block_ftl_v1_console_console_proto_msgTypes[28].Exporter = func(v any, i int) any { + file_xyz_block_ftl_v1_console_console_proto_msgTypes[30].Exporter = func(v any, i int) any { switch v := v.(*EventsQuery_LogLevelFilter); i { case 0: return &v.state @@ -3556,7 +3761,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { return nil } } - file_xyz_block_ftl_v1_console_console_proto_msgTypes[29].Exporter = func(v any, i int) any { + file_xyz_block_ftl_v1_console_console_proto_msgTypes[31].Exporter = func(v any, i int) any { switch v := v.(*EventsQuery_DeploymentFilter); i { case 0: return &v.state @@ -3568,7 +3773,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { return nil } } - file_xyz_block_ftl_v1_console_console_proto_msgTypes[30].Exporter = func(v any, i int) any { + file_xyz_block_ftl_v1_console_console_proto_msgTypes[32].Exporter = func(v any, i int) any { switch v := v.(*EventsQuery_RequestFilter); i { case 0: return &v.state @@ -3580,7 +3785,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { return nil } } - file_xyz_block_ftl_v1_console_console_proto_msgTypes[31].Exporter = func(v any, i int) any { + file_xyz_block_ftl_v1_console_console_proto_msgTypes[33].Exporter = func(v any, i int) any { switch v := v.(*EventsQuery_EventTypeFilter); i { case 0: return &v.state @@ -3592,7 +3797,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { return nil } } - file_xyz_block_ftl_v1_console_console_proto_msgTypes[32].Exporter = func(v any, i int) any { + file_xyz_block_ftl_v1_console_console_proto_msgTypes[34].Exporter = func(v any, i int) any { switch v := v.(*EventsQuery_TimeFilter); i { case 0: return &v.state @@ -3604,7 +3809,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { return nil } } - file_xyz_block_ftl_v1_console_console_proto_msgTypes[33].Exporter = func(v any, i int) any { + file_xyz_block_ftl_v1_console_console_proto_msgTypes[35].Exporter = func(v any, i int) any { switch v := v.(*EventsQuery_IDFilter); i { case 0: return &v.state @@ -3616,7 +3821,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { return nil } } - file_xyz_block_ftl_v1_console_console_proto_msgTypes[34].Exporter = func(v any, i int) any { + file_xyz_block_ftl_v1_console_console_proto_msgTypes[36].Exporter = func(v any, i int) any { switch v := v.(*EventsQuery_CallFilter); i { case 0: return &v.state @@ -3628,7 +3833,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { return nil } } - file_xyz_block_ftl_v1_console_console_proto_msgTypes[35].Exporter = func(v any, i int) any { + file_xyz_block_ftl_v1_console_console_proto_msgTypes[37].Exporter = func(v any, i int) any { switch v := v.(*EventsQuery_ModuleFilter); i { case 0: return &v.state @@ -3640,7 +3845,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { return nil } } - file_xyz_block_ftl_v1_console_console_proto_msgTypes[36].Exporter = func(v any, i int) any { + file_xyz_block_ftl_v1_console_console_proto_msgTypes[38].Exporter = func(v any, i int) any { switch v := v.(*EventsQuery_Filter); i { case 0: return &v.state @@ -3658,8 +3863,8 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { file_xyz_block_ftl_v1_console_console_proto_msgTypes[2].OneofWrappers = []any{} file_xyz_block_ftl_v1_console_console_proto_msgTypes[4].OneofWrappers = []any{} file_xyz_block_ftl_v1_console_console_proto_msgTypes[5].OneofWrappers = []any{} - file_xyz_block_ftl_v1_console_console_proto_msgTypes[22].OneofWrappers = []any{} - file_xyz_block_ftl_v1_console_console_proto_msgTypes[24].OneofWrappers = []any{ + file_xyz_block_ftl_v1_console_console_proto_msgTypes[24].OneofWrappers = []any{} + file_xyz_block_ftl_v1_console_console_proto_msgTypes[26].OneofWrappers = []any{ (*Event_Log)(nil), (*Event_Call)(nil), (*Event_DeploymentCreated)(nil), @@ -3667,12 +3872,12 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { (*Event_Ingress)(nil), (*Event_CronScheduled)(nil), } - file_xyz_block_ftl_v1_console_console_proto_msgTypes[25].OneofWrappers = []any{} - file_xyz_block_ftl_v1_console_console_proto_msgTypes[32].OneofWrappers = []any{} - file_xyz_block_ftl_v1_console_console_proto_msgTypes[33].OneofWrappers = []any{} + file_xyz_block_ftl_v1_console_console_proto_msgTypes[27].OneofWrappers = []any{} file_xyz_block_ftl_v1_console_console_proto_msgTypes[34].OneofWrappers = []any{} file_xyz_block_ftl_v1_console_console_proto_msgTypes[35].OneofWrappers = []any{} - file_xyz_block_ftl_v1_console_console_proto_msgTypes[36].OneofWrappers = []any{ + file_xyz_block_ftl_v1_console_console_proto_msgTypes[36].OneofWrappers = []any{} + file_xyz_block_ftl_v1_console_console_proto_msgTypes[37].OneofWrappers = []any{} + file_xyz_block_ftl_v1_console_console_proto_msgTypes[38].OneofWrappers = []any{ (*EventsQuery_Filter_Limit)(nil), (*EventsQuery_Filter_LogLevel)(nil), (*EventsQuery_Filter_Deployments)(nil), @@ -3689,7 +3894,7 @@ func file_xyz_block_ftl_v1_console_console_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_xyz_block_ftl_v1_console_console_proto_rawDesc, NumEnums: 3, - NumMessages: 37, + NumMessages: 39, NumExtensions: 0, NumServices: 1, }, diff --git a/backend/protos/xyz/block/ftl/v1/console/console.proto b/backend/protos/xyz/block/ftl/v1/console/console.proto index 835bdadbae..f32a3d367e 100644 --- a/backend/protos/xyz/block/ftl/v1/console/console.proto +++ b/backend/protos/xyz/block/ftl/v1/console/console.proto @@ -147,6 +147,12 @@ message Module { repeated Data data = 6; repeated Secret secrets = 7; repeated Config configs = 8; + repeated Database databases = 9; + repeated Enum enums = 10; + repeated FSM fsms = 11; + repeated Topic topics = 12; + repeated TypeAlias typealiases = 13; + repeated Subscription subscriptions = 14; } message TopologyGroup { @@ -163,6 +169,11 @@ message GetModulesResponse { Topology topology = 2; } +message StreamModulesRequest {} +message StreamModulesResponse { + repeated Module modules = 1; +} + // Query for events. message EventsQuery { // Limit the number of events returned. @@ -272,6 +283,7 @@ service ConsoleService { } rpc GetModules(GetModulesRequest) returns (GetModulesResponse); + rpc StreamModules(StreamModulesRequest) returns (stream StreamModulesResponse); rpc StreamEvents(StreamEventsRequest) returns (stream StreamEventsResponse); rpc GetEvents(EventsQuery) returns (GetEventsResponse); } diff --git a/backend/protos/xyz/block/ftl/v1/console/pbconsoleconnect/console.connect.go b/backend/protos/xyz/block/ftl/v1/console/pbconsoleconnect/console.connect.go index a4c147f157..e33d036cb8 100644 --- a/backend/protos/xyz/block/ftl/v1/console/pbconsoleconnect/console.connect.go +++ b/backend/protos/xyz/block/ftl/v1/console/pbconsoleconnect/console.connect.go @@ -39,6 +39,9 @@ const ( // ConsoleServiceGetModulesProcedure is the fully-qualified name of the ConsoleService's GetModules // RPC. ConsoleServiceGetModulesProcedure = "/xyz.block.ftl.v1.console.ConsoleService/GetModules" + // ConsoleServiceStreamModulesProcedure is the fully-qualified name of the ConsoleService's + // StreamModules RPC. + ConsoleServiceStreamModulesProcedure = "/xyz.block.ftl.v1.console.ConsoleService/StreamModules" // ConsoleServiceStreamEventsProcedure is the fully-qualified name of the ConsoleService's // StreamEvents RPC. ConsoleServiceStreamEventsProcedure = "/xyz.block.ftl.v1.console.ConsoleService/StreamEvents" @@ -52,6 +55,7 @@ type ConsoleServiceClient interface { // Ping service for readiness. Ping(context.Context, *connect.Request[v1.PingRequest]) (*connect.Response[v1.PingResponse], error) GetModules(context.Context, *connect.Request[console.GetModulesRequest]) (*connect.Response[console.GetModulesResponse], error) + StreamModules(context.Context, *connect.Request[console.StreamModulesRequest]) (*connect.ServerStreamForClient[console.StreamModulesResponse], error) StreamEvents(context.Context, *connect.Request[console.StreamEventsRequest]) (*connect.ServerStreamForClient[console.StreamEventsResponse], error) GetEvents(context.Context, *connect.Request[console.EventsQuery]) (*connect.Response[console.GetEventsResponse], error) } @@ -77,6 +81,11 @@ func NewConsoleServiceClient(httpClient connect.HTTPClient, baseURL string, opts baseURL+ConsoleServiceGetModulesProcedure, opts..., ), + streamModules: connect.NewClient[console.StreamModulesRequest, console.StreamModulesResponse]( + httpClient, + baseURL+ConsoleServiceStreamModulesProcedure, + opts..., + ), streamEvents: connect.NewClient[console.StreamEventsRequest, console.StreamEventsResponse]( httpClient, baseURL+ConsoleServiceStreamEventsProcedure, @@ -92,10 +101,11 @@ func NewConsoleServiceClient(httpClient connect.HTTPClient, baseURL string, opts // consoleServiceClient implements ConsoleServiceClient. type consoleServiceClient struct { - ping *connect.Client[v1.PingRequest, v1.PingResponse] - getModules *connect.Client[console.GetModulesRequest, console.GetModulesResponse] - streamEvents *connect.Client[console.StreamEventsRequest, console.StreamEventsResponse] - getEvents *connect.Client[console.EventsQuery, console.GetEventsResponse] + ping *connect.Client[v1.PingRequest, v1.PingResponse] + getModules *connect.Client[console.GetModulesRequest, console.GetModulesResponse] + streamModules *connect.Client[console.StreamModulesRequest, console.StreamModulesResponse] + streamEvents *connect.Client[console.StreamEventsRequest, console.StreamEventsResponse] + getEvents *connect.Client[console.EventsQuery, console.GetEventsResponse] } // Ping calls xyz.block.ftl.v1.console.ConsoleService.Ping. @@ -108,6 +118,11 @@ func (c *consoleServiceClient) GetModules(ctx context.Context, req *connect.Requ return c.getModules.CallUnary(ctx, req) } +// StreamModules calls xyz.block.ftl.v1.console.ConsoleService.StreamModules. +func (c *consoleServiceClient) StreamModules(ctx context.Context, req *connect.Request[console.StreamModulesRequest]) (*connect.ServerStreamForClient[console.StreamModulesResponse], error) { + return c.streamModules.CallServerStream(ctx, req) +} + // StreamEvents calls xyz.block.ftl.v1.console.ConsoleService.StreamEvents. func (c *consoleServiceClient) StreamEvents(ctx context.Context, req *connect.Request[console.StreamEventsRequest]) (*connect.ServerStreamForClient[console.StreamEventsResponse], error) { return c.streamEvents.CallServerStream(ctx, req) @@ -124,6 +139,7 @@ type ConsoleServiceHandler interface { // Ping service for readiness. Ping(context.Context, *connect.Request[v1.PingRequest]) (*connect.Response[v1.PingResponse], error) GetModules(context.Context, *connect.Request[console.GetModulesRequest]) (*connect.Response[console.GetModulesResponse], error) + StreamModules(context.Context, *connect.Request[console.StreamModulesRequest], *connect.ServerStream[console.StreamModulesResponse]) error StreamEvents(context.Context, *connect.Request[console.StreamEventsRequest], *connect.ServerStream[console.StreamEventsResponse]) error GetEvents(context.Context, *connect.Request[console.EventsQuery]) (*connect.Response[console.GetEventsResponse], error) } @@ -145,6 +161,11 @@ func NewConsoleServiceHandler(svc ConsoleServiceHandler, opts ...connect.Handler svc.GetModules, opts..., ) + consoleServiceStreamModulesHandler := connect.NewServerStreamHandler( + ConsoleServiceStreamModulesProcedure, + svc.StreamModules, + opts..., + ) consoleServiceStreamEventsHandler := connect.NewServerStreamHandler( ConsoleServiceStreamEventsProcedure, svc.StreamEvents, @@ -161,6 +182,8 @@ func NewConsoleServiceHandler(svc ConsoleServiceHandler, opts ...connect.Handler consoleServicePingHandler.ServeHTTP(w, r) case ConsoleServiceGetModulesProcedure: consoleServiceGetModulesHandler.ServeHTTP(w, r) + case ConsoleServiceStreamModulesProcedure: + consoleServiceStreamModulesHandler.ServeHTTP(w, r) case ConsoleServiceStreamEventsProcedure: consoleServiceStreamEventsHandler.ServeHTTP(w, r) case ConsoleServiceGetEventsProcedure: @@ -182,6 +205,10 @@ func (UnimplementedConsoleServiceHandler) GetModules(context.Context, *connect.R return nil, connect.NewError(connect.CodeUnimplemented, errors.New("xyz.block.ftl.v1.console.ConsoleService.GetModules is not implemented")) } +func (UnimplementedConsoleServiceHandler) StreamModules(context.Context, *connect.Request[console.StreamModulesRequest], *connect.ServerStream[console.StreamModulesResponse]) error { + return connect.NewError(connect.CodeUnimplemented, errors.New("xyz.block.ftl.v1.console.ConsoleService.StreamModules is not implemented")) +} + func (UnimplementedConsoleServiceHandler) StreamEvents(context.Context, *connect.Request[console.StreamEventsRequest], *connect.ServerStream[console.StreamEventsResponse]) error { return connect.NewError(connect.CodeUnimplemented, errors.New("xyz.block.ftl.v1.console.ConsoleService.StreamEvents is not implemented")) } diff --git a/frontend/console/src/api/modules/use-stream-modules.ts b/frontend/console/src/api/modules/use-stream-modules.ts new file mode 100644 index 0000000000..c8921cccdf --- /dev/null +++ b/frontend/console/src/api/modules/use-stream-modules.ts @@ -0,0 +1,49 @@ +import { Code, ConnectError } from '@connectrpc/connect' +import { useQuery, useQueryClient } from '@tanstack/react-query' +import { useClient } from '../../hooks/use-client' +import { useVisibility } from '../../hooks/use-visibility' +import { ConsoleService } from '../../protos/xyz/block/ftl/v1/console/console_connect' +import type { Module } from '../../protos/xyz/block/ftl/v1/console/console_pb' + +const streamModulesKey = 'streamModules' + +export const useStreamModules = () => { + const client = useClient(ConsoleService) + const queryClient = useQueryClient() + const isVisible = useVisibility() + + const queryKey = [streamModulesKey] + + const streamModules = async ({ signal }: { signal: AbortSignal }) => { + try { + console.debug('streaming modules') + let hasModules = false + for await (const response of client.streamModules({}, { signal })) { + console.debug('stream-modules-response:', response) + if (response.modules) { + hasModules = true + const newModuleNames = response.modules.map((m) => m.name) + queryClient.setQueryData(queryKey, (prev = []) => { + return [...response.modules, ...prev.filter((m) => !newModuleNames.includes(m.name))] + }) + } + } + return hasModules ? queryClient.getQueryData(queryKey) : [] + } catch (error) { + if (error instanceof ConnectError) { + if (error.code !== Code.Canceled) { + console.error('Console service - streamModules - Connect error:', error) + } + } else { + console.error('Console service - streamModules:', error) + } + return [] + } + } + + return useQuery({ + queryKey: queryKey, + queryFn: async ({ signal }) => streamModules({ signal }), + enabled: isVisible, + }) +} diff --git a/frontend/console/src/protos/xyz/block/ftl/v1/console/console_connect.ts b/frontend/console/src/protos/xyz/block/ftl/v1/console/console_connect.ts index 3ea7ea033f..8b1d2fceec 100644 --- a/frontend/console/src/protos/xyz/block/ftl/v1/console/console_connect.ts +++ b/frontend/console/src/protos/xyz/block/ftl/v1/console/console_connect.ts @@ -5,7 +5,7 @@ import { PingRequest, PingResponse } from "../ftl_pb.js"; import { MethodIdempotency, MethodKind } from "@bufbuild/protobuf"; -import { EventsQuery, GetEventsResponse, GetModulesRequest, GetModulesResponse, StreamEventsRequest, StreamEventsResponse } from "./console_pb.js"; +import { EventsQuery, GetEventsResponse, GetModulesRequest, GetModulesResponse, StreamEventsRequest, StreamEventsResponse, StreamModulesRequest, StreamModulesResponse } from "./console_pb.js"; /** * @generated from service xyz.block.ftl.v1.console.ConsoleService @@ -34,6 +34,15 @@ export const ConsoleService = { O: GetModulesResponse, kind: MethodKind.Unary, }, + /** + * @generated from rpc xyz.block.ftl.v1.console.ConsoleService.StreamModules + */ + streamModules: { + name: "StreamModules", + I: StreamModulesRequest, + O: StreamModulesResponse, + kind: MethodKind.ServerStreaming, + }, /** * @generated from rpc xyz.block.ftl.v1.console.ConsoleService.StreamEvents */ diff --git a/frontend/console/src/protos/xyz/block/ftl/v1/console/console_pb.ts b/frontend/console/src/protos/xyz/block/ftl/v1/console/console_pb.ts index e4eee1d998..085dcda5e3 100644 --- a/frontend/console/src/protos/xyz/block/ftl/v1/console/console_pb.ts +++ b/frontend/console/src/protos/xyz/block/ftl/v1/console/console_pb.ts @@ -995,6 +995,36 @@ export class Module extends Message { */ configs: Config[] = []; + /** + * @generated from field: repeated xyz.block.ftl.v1.console.Database databases = 9; + */ + databases: Database[] = []; + + /** + * @generated from field: repeated xyz.block.ftl.v1.console.Enum enums = 10; + */ + enums: Enum[] = []; + + /** + * @generated from field: repeated xyz.block.ftl.v1.console.FSM fsms = 11; + */ + fsms: FSM[] = []; + + /** + * @generated from field: repeated xyz.block.ftl.v1.console.Topic topics = 12; + */ + topics: Topic[] = []; + + /** + * @generated from field: repeated xyz.block.ftl.v1.console.TypeAlias typealiases = 13; + */ + typealiases: TypeAlias[] = []; + + /** + * @generated from field: repeated xyz.block.ftl.v1.console.Subscription subscriptions = 14; + */ + subscriptions: Subscription[] = []; + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); @@ -1011,6 +1041,12 @@ export class Module extends Message { { no: 6, name: "data", kind: "message", T: Data, repeated: true }, { no: 7, name: "secrets", kind: "message", T: Secret, repeated: true }, { no: 8, name: "configs", kind: "message", T: Config, repeated: true }, + { no: 9, name: "databases", kind: "message", T: Database, repeated: true }, + { no: 10, name: "enums", kind: "message", T: Enum, repeated: true }, + { no: 11, name: "fsms", kind: "message", T: FSM, repeated: true }, + { no: 12, name: "topics", kind: "message", T: Topic, repeated: true }, + { no: 13, name: "typealiases", kind: "message", T: TypeAlias, repeated: true }, + { no: 14, name: "subscriptions", kind: "message", T: Subscription, repeated: true }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): Module { @@ -1178,6 +1214,74 @@ export class GetModulesResponse extends Message { } } +/** + * @generated from message xyz.block.ftl.v1.console.StreamModulesRequest + */ +export class StreamModulesRequest extends Message { + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.v1.console.StreamModulesRequest"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): StreamModulesRequest { + return new StreamModulesRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): StreamModulesRequest { + return new StreamModulesRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): StreamModulesRequest { + return new StreamModulesRequest().fromJsonString(jsonString, options); + } + + static equals(a: StreamModulesRequest | PlainMessage | undefined, b: StreamModulesRequest | PlainMessage | undefined): boolean { + return proto3.util.equals(StreamModulesRequest, a, b); + } +} + +/** + * @generated from message xyz.block.ftl.v1.console.StreamModulesResponse + */ +export class StreamModulesResponse extends Message { + /** + * @generated from field: repeated xyz.block.ftl.v1.console.Module modules = 1; + */ + modules: Module[] = []; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.v1.console.StreamModulesResponse"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "modules", kind: "message", T: Module, repeated: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): StreamModulesResponse { + return new StreamModulesResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): StreamModulesResponse { + return new StreamModulesResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): StreamModulesResponse { + return new StreamModulesResponse().fromJsonString(jsonString, options); + } + + static equals(a: StreamModulesResponse | PlainMessage | undefined, b: StreamModulesResponse | PlainMessage | undefined): boolean { + return proto3.util.equals(StreamModulesResponse, a, b); + } +} + /** * Query for events. *